**Want** to be the next [Nick D'Aloisio]( http://www.guardian.co.uk/theguardian/shortcuts/2013/mar/26/how-to-become-an-app-millionaire) who at the ripe old age of 17 sold his smartphone app to Yahoo for $27 million? **Want** to know the ins and outs of rolling your own Android app? **Want** to develop your own app as part of a group project? Then read on .... [If you are not a Dartmouth student feel free to use the material found below. All the notes and code are online. Let me know what you think] ## AndroiD The coolest technology to emerge over the last decade is the smartphone -- it's had a huge impact on our lives. Today, over half of all Americans own a smartphone and I bet you are reading this webpage on your phone. If you've been curious about programming phones and creating great apps then this course is for you. We'll focus on programming Android phones -- sorry iPhone. The course has no exams or midterms -- it's all about programming. But there will be a lot of programming. The prerequisite for this course is Computer Science 10 (no exceptions given). Because we plan to give each student a Google nexus 4 (thanks to the [Neukom Institute](http://www.dartmouth.edu/~neukom/) and Computer Science department) for the duration of the course we have capped the course. However, if we exceed the cap we might be able to accommodate more students -- I'm assuming a good chunk of the class own an Android. ## Lectures - Location: 001 Rockefeller - Monday Wednesday Friday 11:15-12.20 AM - Tuesday 12:00-12:50 x-period - Office hours: Sudikoff 260 Monday and Friday 4-5 pm ## What we'll teach you The goal of this course is to teach students how to design, implement, test, debug and publish smartphone applications on java based android phones. Students will learn how to take their innovative ideas from conception to the android market through a series of rigorous hands-on programming assignments and group projects. This is an introductory course aimed at undergraduate students (but graduate students are most welcome) who have Java programming experience. However, there is a significant amount of programming in this course requiring a commitment on the part of the student. Topics covered: the android development environment including eclipse, android SDK and phone emulator; key programming paradigms; UI design including views and activities; data persistence including SQLite; content providers; messaging and networking; phone sensors, location based services (e.g., Google Maps), background services; broadcast receivers; cloud programming using App Engine; and publishing applications to the android market. Android programming concepts are reinforced through a set of thematic programming exercises that introduce these topics and incrementally allow the student to build a complex application; that is, programming labs form a set of components that collectively implement a continuous sensing application. The resulting phone app allows user to log their exercises (e.g., walks, runs) and display them on Google maps. A key part of this course is group projects where students will work in small teams for joint problem solving. ## Prerequisites Computer Science 10 (no exceptions). Android is based on Java programming. ## We are using Piazza for information dissemination and Q&A Sign up to [CS65 Piazza](https://piazza.com/dartmouth/spring2015/cs65165/home) The best way to get answers to programming problems is crowdsourcing -- so the first time someone comes across a problem and we know the answer - everyone sees it. I encourage students to actively use piazza. It's a great system. ## Grading [to be updated] There are no exams or mid terms in this class -- it's all about hacking. **70% - Thematic programming exercises** There are 6 weekly programming assignments over the first 7 weeks. These labs are designed to help students learn the android programming environment and key programming paradigms. Assignments are done individually. Each lab will receive the same percentage of the grade. Each student will demonstrate their standalone MyRuns5 (after lab 5 is complete). We will meet on the green to assess your app. You will be asked to demo two activities: walking around the green and running (if you don't feel up to running we will find someone to run with your phone). Your MyRuns5 app should correctly capture the activity (walking and running) and the details of the exercise. Andrew should be able to see the exercised saved in your history tab displayed on Google Maps. Labs are graded on completeness of the required features, the correctness of the functionality, and the robustness: **note, if your lab crashes it will not be graded and you will have to resubmit a working version with 20% penalty against your lab grade.** TAs: Fanglin.Chen.GR@dartmouth.edu. Office hours: Thursday 10:00-12:00 at Sudikoff 249 Rui.Wang.GR@dartmouth.edu. Office hours: Wednesday 11-1 PM at Sudikoff 249 Both TAs will also cover lab hours Monday 6-10 PM in L002 Section leaders (Androidistas): ## Submission of programming assignments We are using [Subversion Version Control (SVN)](http://www.cs.dartmouth.edu/~campbell/cs50/svn.html) for the submission of programming assignments. You should read those note before proceeding. SVN is a tool for source code management. Your svn repository root is at https://svn.cs.dartmouth.edu/classes/cs65-S13/Your_Name/ so for me: https://svn.cs.dartmouth.edu/classes/cs65-S13/Andrew_Campbell (Note, for classes after 2013 this is relevant: change cs65-s13 to the correct year and term for example W14 changes the svn commands below to cs65-W14) How are we going to submit programming labs using SVN? * Create a directory for each new lab in your root repository directory (viz. Lab1_submission, Lab2_submission, Lab3_submission, Lab4_submission, Lab5_submission, Lab6_submission) -- for example, https://svn.cs.dartmouth.edu/classes/cs65-S13/Andrew_Campbell * [Commit the following files for each lab](submit.html). ## Policy for late assignments You should always aim to get your lab in on time. Penalties: < 8 hours: 10%; < 24 hours: 20%; < 48 hours: 40%; more: no credit. Under extenuating circumstances, alternative arrangements may be made with the instructor, if possible before the due date. Our late policy is a bit harsh but here's the reasoning. Each lab builds on the previous lab so falling behind is a taxation unto itself. To balance this late policy I add this sweetner: **you get one free 12 hour pass and 1 free 24 hour pass without penalties**. These are atomic units -- you can't divide them up, before you ask. Take it when you like but put a note in your README.txt file and email the TA. It is not good to fall behind because it limits the time you can spend on the next lab which comes out as you finish the currenmt one. Therefore, three final pieces of advice from CS1: Don't fall behind in this course. Don't fall behind in this course. Don't fall behind in this course. ## MyRuns project document The [MyRuns document](http://www.cs.dartmouth.edu/~campbell/cs65/myruns/myruns_manual.html) captures the complete app specification and lab assignment information. Please read this a couple of times and refer back to it. ## Week 1 (Jan 5-9) * [Introduction](cs65intro.pdf) * [Lecture 1: Getting started](lecture01/lecture01.html) We do not recommend any text in particular because Android is such a moving target and many books are out of date soon after they are published. Android developer and other web resources are the most up to date. However, here are some suggestions if you would like a reference book. [The Busy Coder's Guide to Android Development](http://commonsware.com/Android/) It is an online book $45.00. ![](images/androidbook.png) I like the online book because you pay once and you get the revised versions for free (sort of). This is important because the APIs are still fluid. Many APIs are being added and depreciated at the same time. So the book at least quickly tracks major changes. This is also excellent if now a little dated. The author is from the Android team so it represents a nice reference. ![](images/book1.png) Finally, this book is not a reference but a boot camp. We will use some coded examples from this nice book: ![](images/nerd.png) Having all three books might seem excessive -- call me excessive.