Maintainable and Scalable Systems through Collaboration, VCS, and Open Source Software (CS 491/591)
Making Apps
The class syllabus lives here. Make sure to watch this repository so you can be notified if things change. You can click the little eye at the top of the page to change your settings so you receive email notifications if things change. This class is highly experimental in its techniques and class structure, but is actually very modern in its approach to using the current and respected tools of the day for efficient and maintainable software engineering practices. Below you will find the meta about the class as well as a tentative schedule of assignments and tests. Happy Coding!
Where: AIME 111 When: Tuesdays 2:30-4:30 PM
- Class Structure
- Topics
- Mac Crash Course -History,core,apps,navigation
- Git and Github
- [Why we use VCS](#why-we-use vcs) - changes, sharing, tracking, versioning
- VCS Options - CVCS:SVN,TFS DVCS:git,mercurial,bazaar
- Git Basics -dvcs,repositories,line change tracking, the origin
- Git Usage -push,pull,clone,commit
- More Git -ignore, branch/merge, gitflow, tagging, stashing
- Github Basics -registration,star,fork, watch, trending, gists, collaborators, readme/markdown, repository creation/rename/deletion, issue tracking
- Github Best Practices -releasing, semantic versioning, being considerate
- SourceTree -installing,connecting github (or any .git endpoint),using sourcetree,
- Other Technologies SVN,mercurial,tfs
- IDE Basics
- Installation and Setup
- [First App](#first app)
- Getting Around - editor,project nav,console,debugger
- Project Structure - mvc,entry points, good organization,searching,theming,resources,virtual folders
- OOP Basics
- Classes and Objects
- Inheritance
- Variables - private, public
- Methods - static,non-static,inherited(overrrided methods)
- Objective-C
- Class Structure -.h,.m,interface, implementation
- Variables and Properties http://rypress.com/tutorials/objective-c/properties.html
- Primitives - int,float,double,char, short, long
- Methods in Objc +,-,public,private,no parameter,single parameter,calling
- Imports
- Protocols
- iOS SDK Basics
- SDK Primitive Aliases - NSInteger, CGFloat
- Data Structures - NSArray, NSDictionary, NSSet
- Other Foundation Classes NSDate,
- UIKit Basics
- View Hierarchy
- No Storyboards
- No Nibs
- Animations
- Event Handling Through nib and code only
- Navigation
- GCD, Concurrency and blocks
- Web Programming
- The need for communication
- The Internet Protocol Suite
- HTTP/HTTPS
- Ports http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers
- [HTTP Request](#http requests)
- URL
- Verbs GET,POST,PUT,DELETE
- Headers http://en.wikipedia.org/wiki/List_of_HTTP_header_fields
- Body
- Basic Web Calls
- Project API Reintroduction
- Web Methods
- URL Breakdown
- [Data Interchange Languages](#data interchange languages) or "Organizing things in the message body"
- NSObject+ObjectMap
- Testing
- Maps
- Setup
- Basics zooming,panning,tilting,map types,(reverse) geocoding,
- Render Hierarchy
- Annotations
- Layers
- URI Schemes
- Third Party Libraries
- Cocoapods
- Art and Design
- Android Dev
- Deploying Apps
- Resources
The bulk of this class will be entirely run on the GitHub platform. GitHub is a social coding tool that emphasizes Open Source and creative collaboration. GitHub is built entirely off of the Git distributed version control platform. Git is used in development teams around the world for maintaining code bases in an extremely efficient manner, as well as being a tool for pushing code to production servers and maintaining a record of pushes to track down and eliminate bugs before they become a problem.
Get a GitHub Account!
First things first - you have to have a GitHub account. No account, no grade. You can create a free account by clicking the sign up button in the top-right of the browser window. Don't read any further until you have created your account.
Each assignment will be a separate repository inside of the UH-300-021 organization, and those links can be found in each Assignment section in this Syllabus as they are posted. Assignments in this class aren't your typical CS assignment; each one is created, maintained and graded through GitHub. Each assignment contains a README.md
file in the top-level directory of the repository which contains all of the information about the assignment, the rubric used to grade your assignment, and any instructions/tips necessary to complete the project. Below is the order of operations of beginning, working on, and completing an assignment.
Order of Operations
- Fork the assignment
- Create a new folder with your name in the top-level
- Work on and complete the assignment inside your own Forked version of the repository
- Once completed, open a Pull Request to merge your repository with the master class repository
- Ace the assignment! (if you did well, of course)
Committing your Work
A commit is the process of saving the state of your work, which you can revert or look back onto any time you wish. This is very helpful for tracking bugs that started after a certain commit, where you can look at not only what files changed, but also what lines of code are different - a useful tool for efficiently tracking and eliminating bugs/design flaws in larger systems. For these assignments, you should commit often - and a commit log will be checked to see your creative process through the duration of the course, and to verify assignments were completed on time.
Forking Repositories
If you look up at the top of the page, you'll notice a button under your username that says "Fork." What a fork does is take the repository and port it over to your code base. You can make edits, change things and then commit - all without affecting the master repository you forked from. This enables you to do the assignment, until you're happy with the result and then you can make a Pull Request to "turn it in."
Pull Requests
A Pull Request is the process of merging the changes in your forked repository into the master repository. This works by finding differences in the files you forked and adding them in. A full history of your git commits is added into the master commit logs as well.
GitHub Issues
Issues are an auxilliary part of the GitHub platform; a separate tool built to be used in conjunction with Git. We are going to use Issues in this class to provide feedback on assignments, ask for help on assignments, and to show where in your commit history you were doing good things, or where things went wrong. This is an extremely helpful tool for collaboration as you will see in your group assignments in this class.
##Git and Github
####Why We Use VCS
- changes, sharing, tracking, versioning
####VCS Options
- CVCS:SVN,TFS DVCS:git,mercurial,bazaar
####Git Basics -dvcs,repositories,line change tracking, the origin
####Git Usage -push,pull,clone,commit
####More Git -ignore, branch/merge, gitflow, tagging, stashing
####Github Basics -registration,star,fork, watch, trending, gists, collaborators, readme/markdown,
##Android Dev
##Deploying Apps
####Apple Developer Site
The developer site handles signing of apps and provisioning devices
####Itunes Connect
https://itunesconnect.apple.com/WebObjects/iTunesConnect.woa
Itunes Connect handles deployment and app store analytics/management.
##Art and Design
A primer on art and design in apps and in general can be found in the Artsy Fartsy repository.
##Resources Below are a list of blogs and tutorials that you may find helpful in learning objective-c
- Ray Wenderlich Tutorials
- Appcoda Tutorials - No Storyboards
- Tutorials Point
- Start Developing iOS Apps Today
Also, StackOverflow is your best friend. Google "iphone sdk" then whatever your question is for best results.