SlideShare a Scribd company logo
Becoming a Mac/iOS
Developer
Robert Brown
@robby_brown
So You Want to be a Mac/
iOS Developer?

What to expect:
  This presentation contains everything I wish I knew
  two years ago
  I will focus on Mac and iOS development, but the
  ideas apply to other specialties
So You Want to be a Mac/
iOS Developer?

What not to expect:
  This is not an introduction to Objective-C, Xcode, or
  any other tools.
Beginner
Find a Mentor


Find one to three people who you can ask questions
When you hit a problem, spend an hour trying to figure
it out on your own
If you can’t solve it after an hour, ask your mentor
Find a Good Book

Mac/iOS:
 Objective-C Programming: The Big Nerd Ranch
 Guide
 Beginning iOS 5 Development
 iOS Programming: The Big Nerd Ranch Guide
Find a Good Book

The Pragmatic Bookshelf
  iOS SDK Development
  Core Data (out of print but available on Amazon)
  Core Animation
Find a Good Book

The Pragmatic Bookshelf
  iOS Recipes
  Designed for Use
  iPad Programming
Find a Good Book


Design:
  Design Patterns: Elements of Reusable Object-
  oriented Software
  The Design of Everyday Things
Find a Good Book


Maintenance:
  Refactoring: Improving the Design of Existing Code
  Code Complete
Find a Good Book

Management:
 Peopleware: Productive Projects and Teams
 The Mythical Man Month
 Driving Technical Change
Tutorials


 Apple Tutorial
 Stanford on iTunes
Stack Overflow


Q&A for developers by developers
Lots of developers have the same problems as you
If someone hasn’t already asked your question, you
can ask the community yourself
LinkedIn

Start right away, even if you don’t have a good résumé
Connections are more valuable than skills
  Skills are important too
Recruiters can’t find enough iOS developers
Link to blog and portfolio
Twitter

 @daringfireball: John Gruber—Straightforward Apple
 news and opinions. WARNING: Coarse language!
 @mattgemmell: Matt Gemmel—Great iOS dev and
 blogger. WARNING: Coarse language!
 @cocoanetics: Oliver Drobnik—Another great iOS
 developer and blogger.
Twitter

 @gzicherm: Gabe Zicherman—Authority on
 gamification. WARNING: Coarse language!
 @bdudney: Bill Dudney—Former Apple engineer and
 great author for The Pragmatic Bookshelf.
 @mzarra: Marcus Zarra—Author for The Pragmatic
 Bookshelf and Cocoa Is My GirlFriend.
Twitter

 @glyphish: Glyphish—Quality, inexpensive iOS icons.
 @macrumors: MacRumors—Most “reliable” Apple
 rumors.
 @macrumorslive: MacRumors—Live tweets Apple events.
 Good for events that aren’t broadcasted.
Twitter

 @darthvader: Darth Vader (obviously)—Great comic
 relief for nerds.
 @davedelong: Dave Delong—Apple employee and
 amazing developer.
 @robby_brown: Robert Brown—Hey, that’s me!
 Independent iOS contractor and blogger. No brownie
 points for following me.
Intermediate
Learn Best Practice

Most developers/books/tutorials don’t follow good
practice :(
Design patterns are generic best practices
Other best practices are language specific
Follow the naming conventions of the language
Develop a coding standard
Learn Best Practice


Find a good mentor
  It’s hard to learn best practice on your own
  Do code reviews and pair programming
Learn to Design Code


Design Pattern: formalized description of best practice
There is a vast difference between code that works
now and code that will continue to work in the future
Mac/iOS naturally pushes good design patterns
Learn to Design UI

Design for mobile first!
If your app doesn’t look good, no one will buy it even if
it has amazing functionality
The Mac/iOS community naturally gravitates toward
good UI/UX
Be aware of why and how other app are designed.
Learn to Work in Teams

Most interesting software is written by a team
Good communication skills are critical
Knowing how to design helps to subdivide projects
A good coder is not necessarily a good project
manager and vice versa
Learn to Work in Teams


Do code reviews and pair programming
Use a version control system (VCS)
  EVERY developer MUST use version control
VCS Clients


Tower         Cornerstone
Versions      Gitbox
SourceTree    Terminal (for real devs)
Github


Git is the standard VCS
Github is an open source community
Github has many reusable Mac/iOS components.
Blogging

Teaching others helps reinforce learning
Writing skills are critical
Great Book: Technical Blogging
My Blog: Rob's Program Knowledge Base
  A collection of obscure errors and elegant solutions
Expert
Find a Specialty

 Find an area that interests you and dig deep
 You should enjoy what you do
 Broad knowledge is critical, but deep knowledge gets
 the good jobs
 My specialties: Multithreading, Core Data, UI/UX Design
Be a Mentor


Teaching others helps reinforce learning
Return the favor for those who mentored you
Give Presentations

Teaching others helps reinforce learning
Communication skills are critical
Slide Share: presentation sharing service
My Presentations
Stack Overflow


Teaching others helps reinforce learning
Answer questions
Gain reputation in your community
Github


Contribute to one or more open source projects
Makes a great portfolio
Great way to collaborate with others and learn from
them
Master
Change the World

Create a startup
Write a book
Write for a magazine
Do something else crazy
Summary

Know who and where to get help
Network and develop good reputation
Have a portfolio both of code and writing
Be involved in the community
Help others
Want to Learn More?

Lots of links in previous slides
http://penny-arcade.com/patv/episode/so-you-want-
to-be-a-developer-part-1
http://penny-arcade.com/patv/episode/so-you-want-
to-be-a-developer-part-2
Questions?

More Related Content

More from Robert Brown

Anti-Patterns
Anti-PatternsAnti-Patterns
Anti-Patterns
Robert Brown
 
Pragmatic blocks
Pragmatic blocksPragmatic blocks
Pragmatic blocks
Robert Brown
 
Automatic Reference Counting
Automatic Reference CountingAutomatic Reference Counting
Automatic Reference Counting
Robert Brown
 
Grand Central Dispatch Design Patterns
Grand Central Dispatch Design PatternsGrand Central Dispatch Design Patterns
Grand Central Dispatch Design Patterns
Robert Brown
 
Grand Central Dispatch
Grand Central DispatchGrand Central Dispatch
Grand Central Dispatch
Robert Brown
 
Mac/iOS Design Patterns
Mac/iOS Design PatternsMac/iOS Design Patterns
Mac/iOS Design Patterns
Robert Brown
 
Core Data
Core DataCore Data
Core Data
Robert Brown
 
Quick Look for iOS
Quick Look for iOSQuick Look for iOS
Quick Look for iOS
Robert Brown
 

More from Robert Brown (8)

Anti-Patterns
Anti-PatternsAnti-Patterns
Anti-Patterns
 
Pragmatic blocks
Pragmatic blocksPragmatic blocks
Pragmatic blocks
 
Automatic Reference Counting
Automatic Reference CountingAutomatic Reference Counting
Automatic Reference Counting
 
Grand Central Dispatch Design Patterns
Grand Central Dispatch Design PatternsGrand Central Dispatch Design Patterns
Grand Central Dispatch Design Patterns
 
Grand Central Dispatch
Grand Central DispatchGrand Central Dispatch
Grand Central Dispatch
 
Mac/iOS Design Patterns
Mac/iOS Design PatternsMac/iOS Design Patterns
Mac/iOS Design Patterns
 
Core Data
Core DataCore Data
Core Data
 
Quick Look for iOS
Quick Look for iOSQuick Look for iOS
Quick Look for iOS
 

Recently uploaded

5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides
DanBrown980551
 
GNSS spoofing via SDR (Criptored Talks 2024)
GNSS spoofing via SDR (Criptored Talks 2024)GNSS spoofing via SDR (Criptored Talks 2024)
GNSS spoofing via SDR (Criptored Talks 2024)
Javier Junquera
 
Energy Efficient Video Encoding for Cloud and Edge Computing Instances
Energy Efficient Video Encoding for Cloud and Edge Computing InstancesEnergy Efficient Video Encoding for Cloud and Edge Computing Instances
Energy Efficient Video Encoding for Cloud and Edge Computing Instances
Alpen-Adria-Universität
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
Zilliz
 
“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...
“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...
“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...
Edge AI and Vision Alliance
 
Building Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and MilvusBuilding Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and Milvus
Zilliz
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
Zilliz
 
Taking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdfTaking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdf
ssuserfac0301
 
Public CyberSecurity Awareness Presentation 2024.pptx
Public CyberSecurity Awareness Presentation 2024.pptxPublic CyberSecurity Awareness Presentation 2024.pptx
Public CyberSecurity Awareness Presentation 2024.pptx
marufrahmanstratejm
 
GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
Tomaz Bratanic
 
Nordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptxNordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptx
MichaelKnudsen27
 
Astute Business Solutions | Oracle Cloud Partner |
Astute Business Solutions | Oracle Cloud Partner |Astute Business Solutions | Oracle Cloud Partner |
Astute Business Solutions | Oracle Cloud Partner |
AstuteBusiness
 
9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
saastr
 
Dandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity serverDandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity server
Antonios Katsarakis
 
Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
Pixlogix Infotech
 
JavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green MasterplanJavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green Masterplan
Miro Wengner
 
Digital Banking in the Cloud: How Citizens Bank Unlocked Their Mainframe
Digital Banking in the Cloud: How Citizens Bank Unlocked Their MainframeDigital Banking in the Cloud: How Citizens Bank Unlocked Their Mainframe
Digital Banking in the Cloud: How Citizens Bank Unlocked Their Mainframe
Precisely
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
panagenda
 
“How Axelera AI Uses Digital Compute-in-memory to Deliver Fast and Energy-eff...
“How Axelera AI Uses Digital Compute-in-memory to Deliver Fast and Energy-eff...“How Axelera AI Uses Digital Compute-in-memory to Deliver Fast and Energy-eff...
“How Axelera AI Uses Digital Compute-in-memory to Deliver Fast and Energy-eff...
Edge AI and Vision Alliance
 
Fueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte WebinarFueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte Webinar
Zilliz
 

Recently uploaded (20)

5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides
 
GNSS spoofing via SDR (Criptored Talks 2024)
GNSS spoofing via SDR (Criptored Talks 2024)GNSS spoofing via SDR (Criptored Talks 2024)
GNSS spoofing via SDR (Criptored Talks 2024)
 
Energy Efficient Video Encoding for Cloud and Edge Computing Instances
Energy Efficient Video Encoding for Cloud and Edge Computing InstancesEnergy Efficient Video Encoding for Cloud and Edge Computing Instances
Energy Efficient Video Encoding for Cloud and Edge Computing Instances
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
 
“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...
“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...
“Temporal Event Neural Networks: A More Efficient Alternative to the Transfor...
 
Building Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and MilvusBuilding Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and Milvus
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
 
Taking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdfTaking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdf
 
Public CyberSecurity Awareness Presentation 2024.pptx
Public CyberSecurity Awareness Presentation 2024.pptxPublic CyberSecurity Awareness Presentation 2024.pptx
Public CyberSecurity Awareness Presentation 2024.pptx
 
GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
 
Nordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptxNordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptx
 
Astute Business Solutions | Oracle Cloud Partner |
Astute Business Solutions | Oracle Cloud Partner |Astute Business Solutions | Oracle Cloud Partner |
Astute Business Solutions | Oracle Cloud Partner |
 
9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
 
Dandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity serverDandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity server
 
Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
 
JavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green MasterplanJavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green Masterplan
 
Digital Banking in the Cloud: How Citizens Bank Unlocked Their Mainframe
Digital Banking in the Cloud: How Citizens Bank Unlocked Their MainframeDigital Banking in the Cloud: How Citizens Bank Unlocked Their Mainframe
Digital Banking in the Cloud: How Citizens Bank Unlocked Their Mainframe
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
 
“How Axelera AI Uses Digital Compute-in-memory to Deliver Fast and Energy-eff...
“How Axelera AI Uses Digital Compute-in-memory to Deliver Fast and Energy-eff...“How Axelera AI Uses Digital Compute-in-memory to Deliver Fast and Energy-eff...
“How Axelera AI Uses Digital Compute-in-memory to Deliver Fast and Energy-eff...
 
Fueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte WebinarFueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte Webinar
 

Becoming a Mac/iOS Developer

  • 2. So You Want to be a Mac/ iOS Developer? What to expect: This presentation contains everything I wish I knew two years ago I will focus on Mac and iOS development, but the ideas apply to other specialties
  • 3. So You Want to be a Mac/ iOS Developer? What not to expect: This is not an introduction to Objective-C, Xcode, or any other tools.
  • 5. Find a Mentor Find one to three people who you can ask questions When you hit a problem, spend an hour trying to figure it out on your own If you can’t solve it after an hour, ask your mentor
  • 6. Find a Good Book Mac/iOS: Objective-C Programming: The Big Nerd Ranch Guide Beginning iOS 5 Development iOS Programming: The Big Nerd Ranch Guide
  • 7. Find a Good Book The Pragmatic Bookshelf iOS SDK Development Core Data (out of print but available on Amazon) Core Animation
  • 8. Find a Good Book The Pragmatic Bookshelf iOS Recipes Designed for Use iPad Programming
  • 9. Find a Good Book Design: Design Patterns: Elements of Reusable Object- oriented Software The Design of Everyday Things
  • 10. Find a Good Book Maintenance: Refactoring: Improving the Design of Existing Code Code Complete
  • 11. Find a Good Book Management: Peopleware: Productive Projects and Teams The Mythical Man Month Driving Technical Change
  • 12. Tutorials Apple Tutorial Stanford on iTunes
  • 13. Stack Overflow Q&A for developers by developers Lots of developers have the same problems as you If someone hasn’t already asked your question, you can ask the community yourself
  • 14. LinkedIn Start right away, even if you don’t have a good résumé Connections are more valuable than skills Skills are important too Recruiters can’t find enough iOS developers Link to blog and portfolio
  • 15. Twitter @daringfireball: John Gruber—Straightforward Apple news and opinions. WARNING: Coarse language! @mattgemmell: Matt Gemmel—Great iOS dev and blogger. WARNING: Coarse language! @cocoanetics: Oliver Drobnik—Another great iOS developer and blogger.
  • 16. Twitter @gzicherm: Gabe Zicherman—Authority on gamification. WARNING: Coarse language! @bdudney: Bill Dudney—Former Apple engineer and great author for The Pragmatic Bookshelf. @mzarra: Marcus Zarra—Author for The Pragmatic Bookshelf and Cocoa Is My GirlFriend.
  • 17. Twitter @glyphish: Glyphish—Quality, inexpensive iOS icons. @macrumors: MacRumors—Most “reliable” Apple rumors. @macrumorslive: MacRumors—Live tweets Apple events. Good for events that aren’t broadcasted.
  • 18. Twitter @darthvader: Darth Vader (obviously)—Great comic relief for nerds. @davedelong: Dave Delong—Apple employee and amazing developer. @robby_brown: Robert Brown—Hey, that’s me! Independent iOS contractor and blogger. No brownie points for following me.
  • 20. Learn Best Practice Most developers/books/tutorials don’t follow good practice :( Design patterns are generic best practices Other best practices are language specific Follow the naming conventions of the language Develop a coding standard
  • 21. Learn Best Practice Find a good mentor It’s hard to learn best practice on your own Do code reviews and pair programming
  • 22. Learn to Design Code Design Pattern: formalized description of best practice There is a vast difference between code that works now and code that will continue to work in the future Mac/iOS naturally pushes good design patterns
  • 23. Learn to Design UI Design for mobile first! If your app doesn’t look good, no one will buy it even if it has amazing functionality The Mac/iOS community naturally gravitates toward good UI/UX Be aware of why and how other app are designed.
  • 24. Learn to Work in Teams Most interesting software is written by a team Good communication skills are critical Knowing how to design helps to subdivide projects A good coder is not necessarily a good project manager and vice versa
  • 25. Learn to Work in Teams Do code reviews and pair programming Use a version control system (VCS) EVERY developer MUST use version control
  • 26. VCS Clients Tower Cornerstone Versions Gitbox SourceTree Terminal (for real devs)
  • 27. Github Git is the standard VCS Github is an open source community Github has many reusable Mac/iOS components.
  • 28. Blogging Teaching others helps reinforce learning Writing skills are critical Great Book: Technical Blogging My Blog: Rob's Program Knowledge Base A collection of obscure errors and elegant solutions
  • 30. Find a Specialty Find an area that interests you and dig deep You should enjoy what you do Broad knowledge is critical, but deep knowledge gets the good jobs My specialties: Multithreading, Core Data, UI/UX Design
  • 31. Be a Mentor Teaching others helps reinforce learning Return the favor for those who mentored you
  • 32. Give Presentations Teaching others helps reinforce learning Communication skills are critical Slide Share: presentation sharing service My Presentations
  • 33. Stack Overflow Teaching others helps reinforce learning Answer questions Gain reputation in your community
  • 34. Github Contribute to one or more open source projects Makes a great portfolio Great way to collaborate with others and learn from them
  • 36. Change the World Create a startup Write a book Write for a magazine Do something else crazy
  • 37. Summary Know who and where to get help Network and develop good reputation Have a portfolio both of code and writing Be involved in the community Help others
  • 38. Want to Learn More? Lots of links in previous slides http://penny-arcade.com/patv/episode/so-you-want- to-be-a-developer-part-1 http://penny-arcade.com/patv/episode/so-you-want- to-be-a-developer-part-2

Editor's Notes

  1. \n
  2. Tips are divided into categories: beginner, intermediate, expert, and master. The line between categories is fuzzy.\nThis is not an introduction to Objective-C or programming Mac/iOS.\n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. Usually there is good reason why developers stray from good practice, but this is rarely stated. Even more rare is to give a full example of the difference. \n
  21. \n
  22. \n
  23. Functionality is critical too.\nThere is a great tendency to copy other app’s UI design without asking why or how. A design that works for one app may not be appropriate for another. \n
  24. Programming in a team is very different than working alone.\nYou should be easy to get along with. \nEven open source projects need to follow good team structure and practice.\n
  25. \n
  26. \n
  27. \n
  28. Knowing how to use a client and the terminal is very valuable. Clients can save a lot of time, prevent mistakes, and visualize information better. However, there are times when you may not have your favorite client available or the client may not support a needed feature. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n