Mercury Development Academy
The quality of our work depends on the quality of our people. At Mercury Development, we realize that technology doesn’t rest. To ensure that our current and future staff are best positioned to take on any challenge that comes their way – and to maintain the high level of superior products our customers have come to expect – we began Mercury Academy, a state-of-the-art continuing education program.
Mercury Academy delivers in-house courses to university students and offers continuous training opportunities for existing Mercury Development employees. The curriculum began in 2012 with an iOS programming course designed to teach students not only the skills required to write an iOS app, but also the underlying Mac OS X foundation at the heart of iOS. To ensure all participants in the course could digest the considerable depth of the material at a similar speed, Mercury Development first administered a test to gauge understanding of programming terms and concepts. From an applicant pool of 120 Seniors studying computer science, Mercury Development selected just 16 students!
The course was delivered by Mercury Development’s best talent. Students were exposed to advanced theoretical knowledge while benefiting from the vast experience of our lead engineers and project managers (most of whom are former lead engineers). Feedback from the students has been phenomenal, and we hope most will consider Mercury Development as their first employer!
To learn more about reusing the content of the course (lectures and lab work), or to discuss other training opportunities, please contact us at academy@mercdev.com
iOS/OSX Course Syllabus
Day 1. Lecture: Basics of Mac OS X and iOS
- Overview of Mac OS X and iOS history
- Understanding OS X and iOS architecture
- Understanding development tools
- OS X and iOS app life cycle
- Understanding sandbox
- Understanding background mode
Day 2. Lab: My First iOS App
- Exploring development tools: Xcode IDE and Interface Builder
- Developing an iOS application with a basic graphical interface in Objective-C
Day 3. Lecture: POSIX Foundation
- Process management: fork and exec system calls
- Performing process killing
- Understanding signals and daemons
- Using user and group identifiers
Day 4. Lab: My OS X Background Daemon
- Implementing a background daemon in Mac OS X
- Experimenting with Launch Daemons and signal processing
Day 5. Lecture: OS X Drivers
- Mac OS X drivers: lifecycle, matching process, user-mode interaction
- Learning how to debug using two workstations
Day 6. Lab: My First OS X Driver
- Implementing a basic filter scheme driver
Day 7. Lecture: POSIX Threads
- Understanding POSIX Threads
- Using Planner, priorities, launch, stop, detached threads
- Understanding PTHREAD synchronization tools, semaphores, conditional variables
Day 8. Lab: Threads in Action
- Developing a multithreaded application for efficient file copying between storage devices
- Implementation of primitives, thread synchronization, operations with various planners and priorities
Day 9. Lecture: Objective-C OOP Primer
- Object oriented programming, patterns in Objective-C. Property, mix-in, exception handling, delegates
- Memory management, memory pool
- Delegates and Core Location
Day 10. Lab: My Geo App
- Developing an application that interacts with GPS functionality of an iOS device and uses a secondary thread to allocate and free up the iOS device memory
Day 11. Lecture: File Management
- File input/output, extended file input/output, memory mapping, select operation, asynchronous input/output
- User permissions model, extended attributes, file locking using flock. HFS+ resource forks
- Reviewing NSFileManager
- Understanding Aliases
Day 12. Lab: Working with a memory-mapped file in iOS
- Implementing asynchronous input/output to a memory-mapped file in iOS
- Operations with standard iOS containers
- Accessing an SQLite database from an iOS application using CoreData
- Making sure we develop an app using object oriented programming
Day 13. Lecture: Model View Controller Pattern
- Understanding Model View Controller (MVC)
- Reviewing controllers, UIView, UITableView and UITableViewController
- Editing process in UITableView
Day 14. Lab: Accessing Address Book
- Developing an application that will display groups of friends
- Integration with iOS address book
Day 15. Lecture: Learning Patterns
- Designing patterns for C++ multithreaded programming, real-time systems, Boost
Day 16. Lab: Using Patterns
- Adding one of the patterns (active class, Future, etc.) to the previously developed iOS app to monitor timers and asynchronous notifications
Day 17. Lecture: Device Orientation
- Notifications and device orientation changes
- Operations with UINavigationController
- Core Fundamentals, collections and Generic
Day 18. Lab: App That Reacts to Device Orientation
- Adding device orientation processing to the previously developed app
- Implementing notifications using UINavigationController
- Implementing a custom UI control
Day 19. Lecture: Protocol Primer
- General overview of the OSI model
- Understanding Berkeley Sockets
- Learning the distinction between the TCP and UDP protocols
- Understanding TCP client-server operations sequence and synchronous TCP input/output
- Asynchronous TCP input/output
- TCP socket options, guaranteed delivery, handling of lost connection and closed socket
Day 20. Lab: My Client-Server Chat Software
- Developing a basic, single-threaded TCP client and server using select to exchange messages with friends
Day 21. Lecture:
- Understanding CFRunLoop, execution in the specified work loop
- NSThread, Thread Local Storage, operations with sockets using CoreFundamentals and Cocoa Introducing IPv6 and Bonjour
Day 22. Lab: Bonjour
- Implementing Bonjour client and server
- Adding “Find friends nearby” functionality
- Implementing a multithreaded server
Day 23. Lecture: Web Technologies
- Understanding HTTP protocol, WebServices, authorization processes
Day 24. Lab: News App
- Implementing an RSS client in iOS
- Displaying HTML pages with weather info in WebView
- Sharing news on Facebook
Day 25. Lecture: Exploring iPhone Hardware
- Learning how to interact with accelerometer
- Understanding how to interact with MapKit
- Understanding how a built-in camera can be used
Day 26. Lab: Digital Camera App
- Capturing an image from the device camera and displaying it as a pin on the map
Day 27. Lecture: Advanced Graphics
- Foundations of OpenGL, shaders, GPU
Day 28. Lab: My Shader
- Implementing a shader – a valuable skill for any game developer
Final Exam



