├── README.md ├── announcements.md ├── final submission.md ├── images ├── bumerang_logo.png ├── clubhub_logo.svg ├── daytomato_logo.png ├── logo.png ├── signcoach_logo.png ├── smirkspace_logo.png ├── tau2010.jpg ├── tau2011a.jpg ├── tau2011b.jpg ├── uvic2014a.jpg ├── uvic2014b.jpg ├── uvic2014c.jpg ├── uvic2014d.jpg ├── uvic2014e.jpg ├── uvic2014f.jpg └── uvic2014g.jpg ├── milestone 1 - proof of concept.md ├── milestone 2 - release candidate.md ├── milestone 3 - public beta.md ├── past semesters ├── README.md └── fall 2014 │ ├── README.md │ ├── announcements.md │ ├── final submission.md │ ├── images │ ├── belocal.png │ ├── flybrary.png │ ├── linksupp.png │ └── powerplanner.png │ ├── milestone 1 - proof of concept.md │ ├── milestone 2 - release candidate.md │ ├── milestone 3 - public beta.md │ ├── presenting your ideas.md │ ├── requirements.md │ ├── resources │ ├── FAQ.md │ ├── README.md │ ├── recommended reading.md │ ├── run your project like it’s an open source project.pdf │ ├── tutorials │ │ ├── README.md │ │ ├── app engine java shoutout.md │ │ ├── app engine python with flask shoutout.md │ │ ├── heroku nodejs with mongodb shoutout.md │ │ └── heroku python with flask mongodb shoutout.md │ └── ux.pdf │ └── teams and projects.md ├── presenting your ideas.md ├── requirements.md ├── resources ├── FAQ.md ├── Project_Participant_Agreement.pdf ├── README.md ├── benevity_guest_talk.pdf ├── design_thinking2016.pdf ├── devops_12_factor_apps.pdf ├── recommended reading.md ├── testing-clarke.pdf ├── tutorials │ ├── README.md │ ├── app engine java shoutout.md │ ├── app engine python with flask shoutout.md │ ├── heroku nodejs with mongodb shoutout.md │ └── heroku python with flask mongodb shoutout.md └── ui_ux_thinking_about_the_user.pdf ├── teams and projects.md └── testimonials.md /README.md: -------------------------------------------------------------------------------- 1 | ![Alt text](images/logo.png) 2 | 3 | ##### [Department of Computer Science - University of Victoria](http://www.csc.uvic.ca/) 4 | ##### [CSC 485E + SENG 480B](https://heat.csc.uvic.ca/coview/outline/2016/Fall/CSC/485E), 2016, Fall Semester 5 |
6 | 7 | This course aims to give students the tools and skills to rapidly develop and transform innovative ideas (of their own choosing) into working projects utilizing advanced mobile, social, cloud, and web technologies. In particular, students will experience the style of development activity that is common in a new startup company. The project based course will be augmented by a series of lectures to accelerate learning with new web technologies, product design, agile development practices, user interface design, and project management. During the term, students will work in teams of 5 students. Each team will be closely mentored by several staff members (including the instructors and one or more members from industry). Students will gain valuable technical skills and experience working in small teams, while facing real-world challenges that include a tight schedule, hard deadlines, and self directed learning. 8 | 9 | Projects will include designing and developing a live web system. Each team will also maintain a web page with project documentation and design documents. 10 | 11 | See [course requirements](requirements.md) and [student testimonials](testimonials.md). 12 | 13 | --- 14 | 15 | **Classes will be on Fridays 1:30-4:20 at [HHB 110](http://www.uvic.ca/home/about/campus-info/maps/maps/hhb.php):** 16 | (*Tentative schedule, slides are in the [**resources section**](resources)*) 17 | 18 | 19 | | | Date | Meeting agenda | 20 | | ---:| ---------- | -------------- | 21 | | 1 | 09/09/2016 | [Introduction](https://speakerdeck.com/alexeyza/welcome-to-startup-programming-course-fall-2016) (Alexey), [How to build a software product](https://speakerdeck.com/alexeyza/how-to-build-a-software-product), [Standing on the shoulders of giants](http://prezi.com/mkn6azkr8kqt/standing-on-the-shoulders-of-giants-v4/), Demo of past projects (guest: [Carlene Lebeuf](http://clebeuf.github.io/)), Forming teams | 22 | | 2 | 16/09/2016 | [Startup Slam](http://www.startupslam.io/) invitation ([Noah Warder](https://angel.co/noah-warder)), [Web development overview](https://speakerdeck.com/alexeyza/web-development-overview-2016) (Alexey), [Mobile development overview](https://docs.google.com/presentation/d/1kROO3-EDVNjYDe02Xf7GPpNwFz1XN5ZwfNmVbje-Zys) ([Greg](http://schier.co/)), [UI/UX - Design Thinking](resources/design_thinking2016.pdf?raw=true) ([Peggy](https://margaretannestorey.wordpress.com/)) | 23 | | 3 | 23/09/2016 | [Git, GitHub, and Working Together](http://github.eclipsesource.com/introduction_to_git/) ([Ian](http://ianbull.com/)), [Project proposal presentations](/presenting%20your%20ideas.md) | 24 | | 4 | 30/09/2016 | Guest talks:
 · [So you want to build a thing](http://so-you-want-to-build-a-thing.surge.sh) by [Jason Trill](http://jjt.io/) (Director of Engineering at [Flow](https://www.getflow.com/), previously was at [Metalab](http://metalab.co/)),
 · [Will Fraser](https://twitter.com/getfraser) (CEO and Co-Founder of [Referral SaaSquatch](https://www.referralsaasquatch.com)) | 25 | | 5 | 14/10/2016 | [Milestone 1 presentation](/milestone%201%20-%20proof%20of%20concept.md) - Proof Of Concept | 26 | | 6 | 21/10/2016 |  · [Software Management for people who just want to get stuff done](http://www.slideshare.net/cliffmcc/software-managementfor-people-who-just-want-to-get-stuff-done) ([Cliff](https://ca.linkedin.com/in/cliffmccollum)),
 · [Benevity guest talk](resources/benevity_guest_talk.pdf?raw=true) by [Jim Olson](http://islandsofno.ca/about.html) (product design at [Benevity](http://www.benevity.com/)) and [Jon Wiggens](https://twitter.com/jonwiggens) (UI Designer at [Benevity](http://www.benevity.com/), previously at EA),
 · [Dev Ops - 12 factor apps](resources/devops_12_factor_apps.pdf?raw=true) ([Cliff](https://ca.linkedin.com/in/cliffmccollum)) | 27 | | 7 | 28/10/2016 |  · [Testing for web developers](resources/testing-clarke.pdf?raw=true) by [Clarke Brunsdon](https://twitter.com/cbrunsdon) (CEO and Co-founder of [Stembolt](https://stembolt.com))
 · Startup accelerators Q&A by [Brad Van Vugt](https://twitter.com/bvanvugt) (Co-founder of [SendWithUs](https://www.sendwithus.com/) and [YC alum](https://www.ycombinator.com/)) and [Leif Baradoy](http://www.leifb.com/) (CEO and Co-founder of [Giftbit](https://www.giftbit.com/) and [Techstars Alum](http://www.techstars.com/))
 · [UI/UX - thinking about the user](resources/ui_ux_thinking_about_the_user.pdf?raw=true) ([Peggy](https://margaretannestorey.wordpress.com/)) | 28 | | 8 | 04/11/2016 | [Milestone 2 presentation](/milestone%202%20-%20release%20candidate.md) - Release Candidate | 29 | | 9 | 02/12/2016 | [Milestone 3 presentation](/milestone%203%20-%20public%20beta.md) - Public live BETA
*(note: time and location of this meeting may change)* | 30 | | | 19/12/2016 | [Final submission](/final%20submission.md) (by email, no meeting) 31 | 32 | --- 33 | 34 | **Mentoring Staff:** 35 | 36 | - [Alexey Zagalsky](http://alexeyza.com/) 37 | - [Margaret-Anne Storey](https://margaretannestorey.wordpress.com/) 38 | - [Cliff McCollum](https://ca.linkedin.com/in/cliffmccollum) 39 | - [Ian Bull](http://ianbull.com/) 40 | - [Gregory Schier](http://schier.co/) 41 | - Eirini Kalliamvakou (Teaching Assistant) 42 | 43 | Alumni mentors: [Arie van Deursen](http://www.st.ewi.tudelft.nl/~arie/) 44 | 45 | **Teams and Projects:** 46 | View current and past [teams and projects](teams and projects.md). 47 | 48 | **Reception Hour:** By appointment. Friday 11:00am-12:00pm at ECS 617 (please send an email to set a meeting) 49 | 50 | **Contact email:** [startup.programming@gmail.com](mailto:startup.programming@gmail.com) 51 | 52 | 53 | ## License 54 | This work is licensed under the [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/). This doesn't include the students' projects, which are hosted on separate repositories and each have their own license. 55 | 56 | ![Alt text](https://i.creativecommons.org/l/by-sa/4.0/88x31.png "Creative Commons Attribution-ShareAlike 4.0 International License") 57 | 58 | ## Intellectual Property Ownership 59 | Students are asked to consult with the [project participant agreement](resources/Project_Participant_Agreement.pdf). UVic will agree to waive its 60 | interest in such IP under the following conditions: 61 | 62 | 1. A class list and list of associated projects (contained with the attached [Project Participant Agreement](resources/Project_Participant_Agreement.pdf)) is provided to ORS (via RPKM) **within 1 month** of the start date of the course, and 63 | 2. That the students make their IP developed during the course **freely available** to other students taking the course for learning purpose only for the duration of the course 64 | 3. Each student participating **signs** the attached “Project Participation Agreement” (PPA) where they acknowledge they will not use any faculty IP/University owned IP in their project. 65 | -------------------------------------------------------------------------------- /announcements.md: -------------------------------------------------------------------------------- 1 | # Announcements 2 | 3 | ### Weekly Meetings 4 | Please examine the meeting schedule dates. Class meetings are **not** scheduled for every week of the semester! 5 | Additionally, for the last meeting (Milestone 3) we usually try to have a social event with guests, and it **may be at a different location or scheduled for a different time of day**. 6 | 7 | ### Intellectual Property Ownership 8 | Students are asked to consult with the [project participant agreement](resources/Project_Participant_Agreement.pdf). UVic will agree to waive its 9 | interest in such IP under the following conditions: 10 | 11 | 1. A class list and list of associated projects (contained with the attached [Project Participant Agreement](resources/Project_Participant_Agreement.pdf)) is provided to ORS (via RPKM) **within 1 month** of the start date of the course, and 12 | 2. That the students make their IP developed during the course **freely available** to other students taking the course for learning purpose only for the duration of the course 13 | 3. Each student participating **signs** the attached “Project Participation Agreement” (PPA) where they acknowledge they will not use any faculty IP/University owned IP in their project. -------------------------------------------------------------------------------- /final submission.md: -------------------------------------------------------------------------------- 1 | # Final Submission 2 | 3 | Note that the final submission is not done in a face-to-face presentation but rather by deploying your final application and posting all supplemental material to the Web. 4 | 5 | By the due date (19/12/2016 23:59) you should send us an email ([startup.programming@gmail.com](mailto:startup.programming@gmail.com)) that includes a: 6 | 7 | - link to download the final application installation file or to the web app page (if creating a new account is required, please provide us with a testing account credentials) 8 | - link for all the source code involved in your final project (client, server, other) 9 | - link to the final project documentation (description of main use cases, architectural overview, main APIs/features, installation and usage instructions, the user study, and any other relevant information). An example for the documentation can be seen [here](https://docs.google.com/viewer?a=v&pid=sites&srcid=ZGVmYXVsdGRvbWFpbnxjbG91ZHdlYjEwYXxneDo2Y2Q3MmZjNzk1ODdmNzA2). 10 | - link to a video demonstrating the application (try to show all the various features of your application and explain them in the video). 11 | - A personal reflection (written by each team member) on your contribution to the project, what you did, what you **learned** and the **challenges** you faced. Please email these personal reflections to us rather than post on GitHub. 12 | 13 | After that date, the course staff will examine your projects, test them and evaluate them, without you being present, so it is very important that everything would be self explained. 14 | 15 | Make sure to fix issues that we gave you feedback on during the last milestone, and in case you need further clarifications, please write us an email ([startup.programming@gmail.com](mailto:startup.programming@gmail.com)). 16 | Make sure that your GitHub repository is clear and informative. Make sure your application runs correctly on the target platforms (Firefox and Chrome/Chromium **or** Android **or** iOS). 17 | 18 | Give special attention to usability issues, look & feel, and simplicity. 19 | 20 | **Important note:** Full grading for the Final Submission (30 points) will be determined by the following criteria: 21 | 22 | 1. Interesting use case (is it useful? have you shown or convinced us that people already use or may use it?) 23 | 2. User experience (intuitive, self explanatory) 24 | 3. Functional complexity 25 | 4. Technical difficulty (uses various technologies and resources) 26 | 5. Finishing level (bugs, missing features) 27 | 6. Documentation (is it useful for users/developers) 28 | 29 | Good luck, 30 | Alexey, Peggy, Cliff, Greg, Ian 31 | -------------------------------------------------------------------------------- /images/bumerang_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexeyza/startup-programming/362e7cb41aff80c04c2a7ed83b13dcd4000780a5/images/bumerang_logo.png -------------------------------------------------------------------------------- /images/clubhub_logo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /images/daytomato_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexeyza/startup-programming/362e7cb41aff80c04c2a7ed83b13dcd4000780a5/images/daytomato_logo.png -------------------------------------------------------------------------------- /images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexeyza/startup-programming/362e7cb41aff80c04c2a7ed83b13dcd4000780a5/images/logo.png -------------------------------------------------------------------------------- /images/signcoach_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexeyza/startup-programming/362e7cb41aff80c04c2a7ed83b13dcd4000780a5/images/signcoach_logo.png -------------------------------------------------------------------------------- /images/smirkspace_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexeyza/startup-programming/362e7cb41aff80c04c2a7ed83b13dcd4000780a5/images/smirkspace_logo.png -------------------------------------------------------------------------------- /images/tau2010.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexeyza/startup-programming/362e7cb41aff80c04c2a7ed83b13dcd4000780a5/images/tau2010.jpg -------------------------------------------------------------------------------- /images/tau2011a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexeyza/startup-programming/362e7cb41aff80c04c2a7ed83b13dcd4000780a5/images/tau2011a.jpg -------------------------------------------------------------------------------- /images/tau2011b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexeyza/startup-programming/362e7cb41aff80c04c2a7ed83b13dcd4000780a5/images/tau2011b.jpg -------------------------------------------------------------------------------- /images/uvic2014a.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexeyza/startup-programming/362e7cb41aff80c04c2a7ed83b13dcd4000780a5/images/uvic2014a.jpg -------------------------------------------------------------------------------- /images/uvic2014b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexeyza/startup-programming/362e7cb41aff80c04c2a7ed83b13dcd4000780a5/images/uvic2014b.jpg -------------------------------------------------------------------------------- /images/uvic2014c.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexeyza/startup-programming/362e7cb41aff80c04c2a7ed83b13dcd4000780a5/images/uvic2014c.jpg -------------------------------------------------------------------------------- /images/uvic2014d.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexeyza/startup-programming/362e7cb41aff80c04c2a7ed83b13dcd4000780a5/images/uvic2014d.jpg -------------------------------------------------------------------------------- /images/uvic2014e.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexeyza/startup-programming/362e7cb41aff80c04c2a7ed83b13dcd4000780a5/images/uvic2014e.jpg -------------------------------------------------------------------------------- /images/uvic2014f.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexeyza/startup-programming/362e7cb41aff80c04c2a7ed83b13dcd4000780a5/images/uvic2014f.jpg -------------------------------------------------------------------------------- /images/uvic2014g.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexeyza/startup-programming/362e7cb41aff80c04c2a7ed83b13dcd4000780a5/images/uvic2014g.jpg -------------------------------------------------------------------------------- /milestone 1 - proof of concept.md: -------------------------------------------------------------------------------- 1 | # Milestone 1 - Proof Of Concept Presentation 2 | 3 | For the first milestone (due on 14/10/2016) you are required to provide a proof of concept of your project. By the due date you should have created a scenario that exercises the various parts of your application (e.g. client, server, DB, external resources, etc.) and demonstrates the primary use case and novel contribution of the whole project. You are expected to show an **End-to-End demo of your primary feature**. Following this presentation, we will provide some guidelines for the work ahead: 4 | 5 | ### 1. Project Hosting 6 | 7 | Host your project at [GitHub](https://github.com/repositories/new), this will serve as your project home page: 8 | 9 | - All source code should be pushed to the repository you created. 10 | - Documentation (usage instructions, screenshots, etc...) should be put in their appropriate place (README.md / Wiki tab / Project Home). 11 | - Features, bugs, and the project road-map should be administered using the **Issues** and the **Projects** tabs in GitHub. 12 | - License: choose the one that suits you best ([this](http://choosealicense.com/) might help), if you can't decide choose Apache V2. 13 | 14 | ### 2. Feature List 15 | 16 | Please provide a short list of your top priority features (sorted from the most important to the least). This list should be published as soon as possible on the project web site in the **Issues section** so all team members and the course staff would be on the same page with respect to your project progress. 17 | 18 | For each feature, state: its name, due date (milestone 1 / milestone 2 / final submission / nice to have), current status, and estimated time needed for completion. 19 | 20 | For example: 21 | ``` 22 | - Feature name: Where did you park your car? 23 | - Description: A Google map in which one could locate where he/she parks the family car. 24 | - Requires: Adding logic to the server, working with Google maps API, adding client side support. 25 | - Due: Milestone 2. 26 | - Status: Server side ready, other parts are missing. 27 | - Time Estimation: 12 hours. 28 | ``` 29 |
30 | Use the standard issue tracker (GitHub Issues), as that will assist you on deciding what to do next. Every decision (as well as your grade) should be derived from this list. Always work only on the next top priority feature not done. The features should be justified by the expected use cases of your product and by the innovation of the features. Stay focused - do not spend time on re-implementing existing functionality, use mocks and stubs as much as possible in order to focus on the main things. 31 | We are interested only in the short list. You may also have another more detailed list for your own use. 32 | 33 | It is important to try and estimate the complexity of the various feature as soon as possible so we'd be able to estimate what could be done till the end of the semester. In order to accomplish that you should add *time estimations* for all your features in the feature list and every time you work on a feature check how long it *actually* took. After doing so for several features you'll improve your ability to estimate a given task. 34 | 35 | ### 3. Product Page 36 | 37 | Please provide on your main product page (GitHub repository) a link to your live application (web-site / download URL). Although it may not be fully functioning until Milestone 2, it is important to be able to know what the *real* status of the final product is at any given point. Take a look at [past projects](teams%20and%20projects.md#past-teams-and-projects) or other projects on GitHub, to see how a project page can be organized. 38 | 39 | ### 4. Milestone 1 Presentation (Proof of Concept) 40 | 41 | Prepare a 10 minute presentation: 42 | 43 | - Start with a live demo that shows what you have accomplished so far (5 minutes). 44 | - Focus on the application's main use-case(s) that highlight its novelty and contribution. 45 | - If a live demo is impossible, show a demo video. 46 | - Make sure you have a backup for the demo (either video or screenshots). 47 | - Continue with a short presentation of: 48 | - Your feature list (2 minutes: what is done? which features are expected? how long do you expect the work will take?) 49 | - Your road map (1 minute: what to expect in the future milestones? how does it differ from the original estimation?) 50 | - Your progress (2 minutes: how did you split the work? what was easy? what was difficult? why?) 51 | 52 | **Also, please send us by email: the presentation, a summary document of the above (progress, feature list, road map), and a link to your GitHub repository.** 53 | 54 | **Important note:** Full grading for the milestone (15 points) will be given for teams that successfully: 55 | 56 | 1. Focus on the primary use case and take into account our feedback (feedback summary will be sent to you via email). 57 | 2. Follow the project plan while adapting dynamically. 58 | 3. Continuously work throughout the semester. 59 | 4. Demonstrate an interesting, self contained, primary use case of your application. 60 | 5. Give a good presentation (simple, clear, focused, time-framed, sincere). 61 | 62 | If you have any questions please do not wait for the milestone meeting, use email: [startup.programming@gmail.com](mailto:startup.programming@gmail.com) 63 | 64 | Good luck, 65 | Alexey, Peggy, Cliff, Ian, and Greg 66 | -------------------------------------------------------------------------------- /milestone 2 - release candidate.md: -------------------------------------------------------------------------------- 1 | # Milestone 2 - Release Candidate 2 | 3 | For the second milestone (due on Friday, 04/11/2016) you are required to show progress based on the feedback you've received from the staff about Milestone 1. 4 | 5 | Please provide a full demonstration (**6 minutes**) of using your product in various scenarios. The demonstration should encompass your top features, and **highlight** new features or changes made since Milestone 1. 6 | You should also be prepared to talk about your development process, in case you are asked: what is your plan for the next Milestone? how long do you expect the work would take? how did you split the work? what was easy? what was difficult? why? 7 | 8 | If you are using slides during the presentation, use **no more than 3 slides** 9 | 10 | Some general advice: 11 | 12 | - Don't wait until the milestone meeting to get feedback, ask for advice and feedback throughout the semester. 13 | - Prepare an appealing demo! 14 | - You have only a short time for the demonstration so start with new features or changes you've made since Milestone 1. 15 | - If you are demonstrating social features of your application, or any other features that require prior preparations - please prepare them in advance! (e.g. creating social networks of several users). 16 | - It is also advised to rehearse your presentation so it will flow nicely. For example: make sure you can demonstrate different users simultaneously using different browsers. 17 | 18 | You are required to provide on your GitHub project page a link to your **live application** (AWS/Heroku website or a download link to an Android apk file). 19 | 20 | **Important note:** Full grading for Milestone 2 (25 points) will be given for teams that successfully: 21 | 22 | 1. Focus on the primary use case and take into account our feedback from milestone 1 or earlier. 23 | 2. Follow the project plan while adapting dynamically. 24 | 3. Continuously work throughout the semester. 25 | 4. Demonstrate an interesting, self contained, useful and live application. 26 | 5. Providing a link to the live application. 27 | 6. Give a good presentation (simple, clear, focused, time-framed, sincere) 28 | 29 | If you have any questions or comments please do not wait for the milestone meeting, use email: [startup.programming@gmail.com](mailto:startup.programming@gmail.com) 30 | 31 | Good luck, 32 | Alexey, Peggy, Cliff, Ian, and Greg 33 | -------------------------------------------------------------------------------- /milestone 3 - public beta.md: -------------------------------------------------------------------------------- 1 | # Milestone 3 - Final Presentation (Public Beta) 2 | 3 | We are happy to invite you to present your third milestone at **ECS 660**, Friday 02/12/2016 at 1:30pm until 4:30pm. 4 | 5 | In this meeting, you'll have the opportunity to present the beta version of your project and share your experience with each other (as well as additional guests). 6 | 7 | We remind you that for this third milestone you are required to provide a fully functioning project, that will be evaluated by the mentoring staff. You will get valuable feedback regarding the expected final project configuration and scope. 8 | 9 | >_“Your work is going to fill a large part of your life, and the only way to be truly satisfied is to do what you believe is great work. And the only way to do great work is to love what you do.”_ - Steve Jobs 10 | 11 | This is not BETA in the sense of "only a proof of concept" but rather in the sense of "you could still fix minor bugs or add minor missing features emerged at the last minute". **By the third milestone you should have completed your product** (except for some minor bugs which you may fix until the [Final Submission](final submission.md)). Please provide a full demonstration (**10 minutes**) of using your product in various scenarios on the *live* project. The demonstration should encompass your top features, and highlight your product complexity and challenges (architectural/algorithmic/technological/design/usability/etc). You should also talk about your development process (for an additional **5 minutes**). Tell us: What was easy? what was difficult? why? what did you learn during the course? what feedback did you receive from users about your app? 12 | 13 | If you plan to use slides, prepare **no more than 5** slides altogether (including cover slide). Please send us the presentation (and any other document that you think would be useful for us to better evaluate your work) by email beforehand. As we may have additional guests that did not attend your previous presentations, **make sure your presentation is self contained**. You may also invite additional guests to the presentation. 14 | 15 | Please include in your presentation: 16 | 17 | - Product overview and motivation 18 | - High level architecture, and the technologies used (briefly mention this) 19 | - Project challenges, including your own experience and reflections 20 | - Your insights of pilot testing your product with real users (please send us by email the pilot summary beforehand). 21 | 22 | >_“If you are not embarrassed by the first version of your product, you’ve launched too late.”_ - Reid Hoffman, LinkedIn co-founder 23 | 24 | Some general advice: 25 | 26 | - Prepare an appealing demo! 27 | - You have only a short time for the demonstration so start with your key features and give an overview of what the app is about for guests who will be there for the first time (from our experience, getting to the live demo as early as possible helps clarify all the other parts). 28 | - If you are demonstrating social features of your gadget, or any other features that require prior preparations - please prepare them in advance! (e.g. creating social networks of several users). 29 | - It is also advised to rehearse your presentation so it will flow nicely. 30 | - Try to test out your laptop in ECS 660 in advance of your presentation. Also, make sure you have a backup for the live demo (i.e., video recording of your live demo). 31 | - Consider creating a short promotional video to motivate the main use case of your app, with tools like [GoAnimate](https://goanimate.com/), Adobe After Effects, [PowToon](https://www.powtoon.com), etc... 32 | 33 | For mobile applications you are required to provide a link to a page which includes images/videos which show how to install and use your application. In addition it should have a requirements section (i.e. if your app requires android 6.0). This page should be simple and clear. 34 | 35 | >_“So often people are working hard at the wrong thing. Working on the right thing is probably more important than working hard.”_ - Caterina Fake, Flickr co-founder 36 | 37 | **Important note:** Full grading for the milestone (25 points) will be given for teams that successfully: 38 | 39 | 1. Focused on the primary use case and take into account our feedback from milestone 2 or earlier. 40 | 2. Followed the project plan while adapting dynamically. 41 | 3. Continuously worked throughout the semester. 42 | 4. Demonstrated an interesting, self contained, useful, and live application. 43 | 5. Provided a link to a live application. 44 | 6. Implemented a set of polished features. 45 | 7. Gave a good presentation (simple, clear, focused, time-framed, sincere). 46 | 47 | **Important note:** This is not the final submission of your project. Please see details on the [Final Submission](final submission.md) page. 48 | 49 | If you have any questions or comments please do not wait for the milestone meeting, email us at: [startup.programming@gmail.com](mailto:startup.programming@gmail.com) 50 | 51 | Good luck, 52 | Alexey, Peggy, Cliff, Ian, and Greg -------------------------------------------------------------------------------- /past semesters/README.md: -------------------------------------------------------------------------------- 1 | ## University of Victoria courses 2 | 3 | - [Startup Programming - Fall 2014](fall 2014) 4 | 5 | ## Tel Aviv University courses 6 | 7 | - [2012/2013, Spring semester](https://sites.google.com/site/cloudweb12b/) 8 | - [2012/2013, Fall semester](https://sites.google.com/site/cloudweb12a/) 9 | - [2011/2012, Spring semester](https://sites.google.com/site/cloudweb11b/) 10 | - [2011/2012, Fall semester](https://sites.google.com/site/cloudweb11a/) 11 | - [2010/2011, Spring semester](https://sites.google.com/site/cloudweb10b) 12 | - [2010/2011, Fall semester](https://sites.google.com/site/cloudweb10a/) 13 | - [2009/2010, Sprint semester](http://sites.google.com/site/taugadgets10b) 14 | - [2009/2010, Fall semester](http://sites.google.com/site/taugadgets10a) 15 | - [2008/2009, Spring semester](http://sites.google.com/site/taugadgets09b/) 16 | - [2008/2009, Fall semester](http://sites.google.com/site/taugadgets09a/) 17 | - [2007/2008, Spring semester](http://tau-gadgets.wikidot.com/) 18 | - [2007/2008, Fall semester](http://tau-itw.wikidot.com/active-projects-08) 19 | -------------------------------------------------------------------------------- /past semesters/fall 2014/README.md: -------------------------------------------------------------------------------- 1 | ![Alt text](https://raw.githubusercontent.com/alexeyza/startup-programming/master/images/logo.png) 2 | 3 | ##### [Department of Computer Science - University of Victoria](http://www.csc.uvic.ca/) 4 | ##### CSC 485B + SENG 480B, 2014/2015, Semester A 5 |
6 | 7 | This course aims to give students the tools and skills to rapidly develop and transform innovative ideas (of their own choosing) into working projects utilizing advanced mobile, social, cloud, and web technologies. In particular, students will experience the style of development activity that is common in a new startup company. The project based course will be augmented by a series of lectures to accelerate learning with new web technologies, product design, agile development practices, user interface design, and project management. During the term, students will work in teams of 4 students. Each team will be closely mentored by several staff members (including the instructors and one or more members from industry). Students will gain valuable technical skills and experience working in small teams, while facing real-world challenges that include a tight schedule, hard deadlines, and self directed learning. 8 | 9 | Projects will include designing and developing a live web system. Each team will also maintain a web page with project documentation and design documents. 10 | 11 | See [course requirements](requirements.md). 12 | 13 | **Classes will be on Fridays 2:30-4:30 at ECS 130:** 14 | (*Tentative schedule, slides are in the [**resources section**](resources)*) 15 | 16 | - Meeting 1, 05/09/2014 - Introduction (Peggy), How to build a software product, Standing on the shoulders of giants, Demo of past projects (Alexey), Forming teams 17 | - Meeting 2, 12/09/2014 - Web development overview, Cloud computing services (Alexey), UI/UX overview lecture (Peggy) 18 | - Meeting 3, 19/09/2014 - Team work, GitHub, and API's (Ian), [Project proposal presentations](presenting your ideas.md) 19 | - Meeting 4, 26/09/2014 - Failing fast in Startup Programming (Arie), Software engineering at [Magnet.me](https://magnet.me/) (Michael de Jong), Project proposal presentations cont. 20 | - Meeting 5, 10/10/2014 - Team stand-up meeting, Software Management... for people who just want to get stuff done (Cliff), Guest talk (Aidin Tavakkol, CTO and Founder of [LimeSpot](https://limespot.com/)) 21 | - Meeting 6, 17/10/2014 - [Milestone 1 presentation](milestone 1 - proof of concept.md) - Proof Of Concept 22 | - Meeting 7, 31/10/2014 - Guest talk (Tali Saar, Co-founder and CEO of [Palo Alto Rooster](http://paloalto.therooster.co/)), How 2 UVic students started an eBay ecommerce analytics company (Anthony Sukow, EVP & Co-founder [Terapeak](https://www.terapeak.ca/)) 23 | - Meeting 8, 07/11/2014 - [Milestone 2 presentation](milestone 2 - release candidate.md) - Release Candidate 24 | - Meeting 9, 28/11/2014 - Final presentation ([Milestone 3](milestone 3 - public beta.md), Public live BETA) 25 | 26 | **Mentoring Staff:** 27 | 28 | - [Margaret-Anne Storey](http://webhome.cs.uvic.ca/~mstorey) 29 | - [Alexey Zagalsky](http://alexeyza.com/) 30 | - Cliff McCollum 31 | - [Arie Van Deursen](http://www.st.ewi.tudelft.nl/~arie/) 32 | - [Ian Bull](http://ianbull.com/) 33 | 34 | **Teams and Projects:** 35 | View current and past [teams and projects](teams and projects.md). 36 | 37 | **Reception Hour:** By appointment. Friday 1:00-2:00pm at ECS 542a (please send an email to set a meeting) 38 | 39 | **Contact email:** [startup.programming@gmail.com](mailto:startup.programming@gmail.com) 40 | 41 | # License 42 | This work is licensed under the [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/). 43 | 44 | ![Alt text](https://i.creativecommons.org/l/by-sa/4.0/88x31.png "Creative Commons Attribution-ShareAlike 4.0 International License") 45 | -------------------------------------------------------------------------------- /past semesters/fall 2014/announcements.md: -------------------------------------------------------------------------------- 1 | # Announcements 2 | 3 | ## Interesting events 4 | Here a few events that may interest you: 5 | 6 | - An upcoming [PitchIt competition](http://www.uvic.ca/ice/services/competitions/pitchit/index.php) on October 16th and February 5th. 7 | - [Startup Slam](http://ow.ly/i/6Qdge/original) meeting on September 20th. 8 | 9 | 10 | ## So, What should I do before the next meeting (12/09/2014)? 11 | 1. Form a team. 12 | - Each team should consist of 4 students. 13 | 2. Find a project idea. 14 | - For a web / mobile application. 15 | - Think of a use case - a typical use - a need that could be answered by you application. 16 | - Maybe something you always wanted to write... 17 | 3. Send us email for approval. 18 | - Email to: [startup.programming@gmail.com](mailto:startup.programming@gmail.com) 19 | 4. Open a project web site. 20 | - Start at: [https://github.com/repositories/new](https://github.com/repositories/new). 21 | - This will serve as your project home page. 22 | - License: choose the one that suits you best ([this](http://choosealicense.com/) might help), if you can't decide choose Apache V2. 23 | 5. Learn JavaScript. 24 | - It will become very useful very soon. A nice place to start is [this course](http://yuiblog.com/blog/2007/01/24/video-crockford-tjpl/) (presentation+video), [this one](http://yuiblog.com/blog/2006/10/20/video-crockford-domtheory/), and [this](http://yuiblog.com/blog/2006/11/27/video-crockford-advjs/). -------------------------------------------------------------------------------- /past semesters/fall 2014/final submission.md: -------------------------------------------------------------------------------- 1 | # Final Submission 2 | 3 | Note that the final submission is not done in a face-to-face presentation but rather by deploying your final application and posting all supplemental material to the Web. 4 | 5 | By the due date (05/12/2014) you should send us an email ([startup.programming@gmail.com](mailto:startup.programming@gmail.com)) that includes a: 6 | 7 | - link to download the final application installation file or to the App-Engine website 8 | - link for all the source code involved in your final project (client, server, other) 9 | - link to the final project documentation (description of main use cases, architectural overview, main APIs/features, installation and usage instructions, the user study, and any other relevant information). An example for the documentation can be seen [here](https://docs.google.com/viewer?a=v&pid=sites&srcid=ZGVmYXVsdGRvbWFpbnxjbG91ZHdlYjEwYXxneDo2Y2Q3MmZjNzk1ODdmNzA2). 10 | - link to a video demonstrating the application (try to show all the various features of your application and explain them in the video). 11 | - A personal reflection (written by each team member) on your contribution to the project, what you did, what you **learned** and the **challenges** you faced. Please email these personal reflections to us rather than post on GitHub. 12 | 13 | After that date, the course staff will examine your projects, test them and evaluate them, without you being present, so it is very important that everything would be self explained. 14 | 15 | Make sure to fix issues that we gave you feedback on during the last milestone, and in case you need further clarifications, please write us an email ([startup.programming@gmail.com](mailto:startup.programming@gmail.com)). 16 | Make sure that your GitHub repository is clear and informative. Make sure your application runs correctly on the target platforms (Firefox and Chrome/Chromium **or** Android **or** iOS). 17 | 18 | Give special attention to usability issues, look & feel, and simplicity. 19 | 20 | **Important note:** Full grading for the Final Submission (30 points) will be determined by the following criteria: 21 | 22 | 1. Interesting use case (is it useful? have you shown or convinced us that people already use or may use it?) 23 | 2. User experience (intuitive, self explanatory) 24 | 3. Functional complexity 25 | 4. Technical difficulty (uses various technologies and resources) 26 | 5. Finishing level (bugs, missing features) 27 | 6. Documentation (is it useful for users/developers) 28 | 29 | Good luck, 30 | Peggy, Cliff, Arie, Ian and Alexey 31 | -------------------------------------------------------------------------------- /past semesters/fall 2014/images/belocal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexeyza/startup-programming/362e7cb41aff80c04c2a7ed83b13dcd4000780a5/past semesters/fall 2014/images/belocal.png -------------------------------------------------------------------------------- /past semesters/fall 2014/images/flybrary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexeyza/startup-programming/362e7cb41aff80c04c2a7ed83b13dcd4000780a5/past semesters/fall 2014/images/flybrary.png -------------------------------------------------------------------------------- /past semesters/fall 2014/images/linksupp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexeyza/startup-programming/362e7cb41aff80c04c2a7ed83b13dcd4000780a5/past semesters/fall 2014/images/linksupp.png -------------------------------------------------------------------------------- /past semesters/fall 2014/images/powerplanner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexeyza/startup-programming/362e7cb41aff80c04c2a7ed83b13dcd4000780a5/past semesters/fall 2014/images/powerplanner.png -------------------------------------------------------------------------------- /past semesters/fall 2014/milestone 1 - proof of concept.md: -------------------------------------------------------------------------------- 1 | #Milestone 1 - Proof Of Concept Presentation 2 | 3 | For the first milestone (due on 17/10/2014) you are required to provide a proof of concept of your project. By the due date you should have created a scenario that exercises the various parts of your application (e.g. client, server, DB, external resources, etc.) and demonstrates the primary use case and novel contribution of the whole project. You are expected to show an **End-to-End demo of your primary feature**. Following this presentation, we will provide some guidelines for the work ahead: 4 | 5 | ###1. Project Hosting 6 | 7 | Host your project at [GitHub](https://github.com/repositories/new), this will serve as your project home page: 8 | 9 | - All source code should be pushed to the repository you created. 10 | - Documentation (usage instructions, screenshots, etc...) should be put in their appropriate place (README.md / Wiki tab / Project Home). 11 | - Features, bugs, and the project road-map should be administered using the Issues tab in GitHub. 12 | - License: choose the one that suits you best ([this](http://choosealicense.com/) might help), if you can't decide choose Apache V2. 13 | 14 | ###2. Feature List 15 | 16 | Please provide a short list of your top priority features (sorted from the most important to the least). This list should be published as soon as possible in the project web site in the **Issues section** so all team members and the course staff would be on the same page with respect to your project progress. 17 | 18 | For each feature, state: its name, description, architectural implications, due date (milestone 1 / milestone 2 / final submission / nice to have), current status, and estimated time needed for completion. 19 | 20 | For example: 21 | ``` 22 | - Feature name: Where did you park your car? 23 | - Description: A Google map in which one could locate where he/she parks the family car. 24 | - Requires: Adding logic to the server, working with Google maps API, adding client side support. 25 | - Due: Milestone 2 (BETA). 26 | - Status: Server side ready, other parts are missing. 27 | - Time Estimation: 12 hours. 28 | ``` 29 |
30 | Use the standard issue tracker (GitHub Issues), as that will assist you on deciding what to do next. Every decision (as well as your grade) should be derived from this list. Always work only on the next top priority feature not done. The features should be justified by the expected use cases of your product and by the innovation of the features. Stay focused - do not spend time on re-implementing existing functionality, use mocks and stubs as much as possible in order to focus on the main things. 31 | We are interested only in the short list. You may also have another more detailed list for your own use. 32 | 33 | It is important to try and estimate the complexity of the various feature as soon as possible so we'd be able to estimate what could be done till the end of the semester. In order to accomplish that you should add *time estimations* for all your features in the feature list and every time you work on a feature check how long it *actually* took. After doing so for several features you'll improve your ability to estimate a given task. 34 | 35 | ###3. Product Page 36 | 37 | Please provide on your main product page (GitHub repository) a link to your live application (web-site / download URL). Although it may not be fully functioning until the BETA milestone, it is important to be able to know what the *real* status of the final product is at any given point. Take a look at [past projects](teams%20and%20projects.md#past-teams-and-projects) or other projects on GitHub, to see how a project page can be organized. 38 | 39 | ###4. Milestone 1 Presentation (Proof of Concept) 40 | 41 | Prepare a 10 minute presentation: 42 | 43 | - Start with a live demo that shows what you have accomplished so far (5 minutes). 44 | - Focus on the application's main use-case(s) that highlight its novelty and contribution. 45 | - If a live demo is impossible, show a demo video. 46 | - Make sure you have a backup for the demo (either video or screenshots). 47 | - Continue with a short presentation of: 48 | - Your progress (2 minutes: how did you split the work? what was easy? what was difficult? why?) 49 | - Your feature list (2 minutes: what is done? which features are expected? how long do you expect the work will take?) 50 | - Your road map (1 minute: what to expect in the future milestones? how does it differ from the original estimation?) 51 | 52 | **Also, please send us by email: the presentation, a summary document of the above (progress, feature list, road map), and a link to your GitHub repository.** 53 | 54 | **Important note:** Full grading for the milestone (15 points) will be given for teams that successfully: 55 | 56 | 1. Focus on the primary use case and take into account our feedback (feedback summary will be sent to you via email). 57 | 2. Follow the project plan while adapting dynamically. 58 | 3. Continuously work throughout the semester. 59 | 4. Demonstrate an interesting, self contained, primary use case of your application. 60 | 5. Give a good presentation (simple, clear, focused, time-framed, sincere). 61 | 62 | If you have any questions please do not wait for the milestone meeting, use email: [startup.programming@gmail.com](mailto:startup.programming@gmail.com) 63 | 64 | Good luck, 65 | Peggy, Cliff, Arie, Ian and Alexey 66 | -------------------------------------------------------------------------------- /past semesters/fall 2014/milestone 2 - release candidate.md: -------------------------------------------------------------------------------- 1 | #Milestone 2 - Release Candidate 2 | 3 | For the second milestone (due on Monday, 07/11/2014) you are required to show progress based on the feedback you've received from the staff about Milestone 1. 4 | 5 | Please provide a full demonstration (**6 minutes**) of using your product in various scenarios. The demonstration should encompass your top features, and **highlight** new features or changes made since Milestone 1. 6 | You should also be prepared to talk about your development process, in case you are asked: what is your plan for the next Milestone? how long do you expect the work would take? how did you split the work? what was easy? what was difficult? why? 7 | 8 | If you are using a power point presentation, use **no more than 3 slides** 9 | 10 | Some general advice: 11 | 12 | - Prepare an appealing demo! 13 | - You have only a short time for the demonstration so start with new features or changes you've made since Milestone 1. 14 | - If you are demonstrating social features of your application, or any other features that require prior preparations - please prepare them in advance! (e.g. creating social networks of several users). 15 | - It is also advised to rehearse your presentation so it will flow nicely. For example: make sure you can demonstrate different users simultaneously using different browsers. 16 | 17 | You are required to provide in your project page (on GitHub) a link to your live application (App-Engine website or a download link to an Android apk file). In addition provide instructions on how to use your application and how to install it (if installation is needed). 18 | 19 | **Important note:** Full grading for Milestone 2 (25 points) will be given for teams that successfully: 20 | 21 | 1. Focus on the primary use case and take into account our feedback from milestone 1 or earlier. 22 | 2. Follow the project plan while adapting dynamically. 23 | 3. Continuously work throughout the semester. 24 | 4. Demonstrate an interesting, self contained, useful and live application. 25 | 5. Providing a link to the live application. 26 | 6. Give a good presentation (simple, clear, focused, time-framed, sincere) 27 | 28 | If you have any questions or comments please do not wait for the milestone meeting, use email: [startup.programming@gmail.com](mailto:startup.programming@gmail.com) 29 | 30 | Good luck, 31 | Peggy, Cliff, Arie, Ian and Alexey 32 | -------------------------------------------------------------------------------- /past semesters/fall 2014/milestone 3 - public beta.md: -------------------------------------------------------------------------------- 1 | # Milestone 3 - Final Presentation (Public Beta) 2 | 3 | We are happy to invite you to present your third milestone at ECS 660, Friday 28/11/2014 (note the room change) at 2:30pm until 5pm. We will have a social event following the class (details are forthcoming). 4 | 5 | In this meeting, you'll have the opportunity to present the beta version of your project and share your experience with each other (as well as additional guests). 6 | 7 | We remind you that for this third milestone you are required to provide a fully functioning project, that will be evaluated by the course staff. You will get valuable feedback regarding the expected final project configuration and scope. 8 | 9 | This is not BETA in the sense of "only a proof of concept" but rather in the sense of "you could still fix minor bugs or add minor missing features emerged at the last minute". **By the third milestone you should have completed your product** (except for some minor bugs which you may fix until the [Final Submission](final submission.md)). Please provide a full demonstration (**15 minutes**) of using your product in various scenarios on the *live* project. The demonstration should encompass your top features, and highlight your product complexity and challenges (architectural/algorithmic/technological/design/usability etc). You should also talk about your development process (for an additional **5 minutes**). Tell us: how did you split the work? what was easy? what was difficult? why? what did you learn during the course? what feedback did you receive from users about your app? 10 | 11 | If you are using a power point presentation, use **no more than 10** slides altogether (including cover slide). Please send us the presentation (and any other document that you think would be useful for us to better evaluate your work) by email beforehand. As we may have additional guests that did not attend your previous presentations, **make sure your presentation is self contained**. You may also invite additional guests to the presentation. 12 | 13 | Please include in your presentation: 14 | 15 | - Product overview and motivation 16 | - High level architecture, and the technologies used 17 | - Project challenges, including your own experience and reflections 18 | 19 | Some general advice: 20 | 21 | - Prepare an appealing demo! 22 | - You have only a short time for the demonstration so start with your key features and give an overview of what the app is about for guests who will be there for the first time. 23 | - If you are demonstrating social features of your gadget, or any other features that require prior preparations - please prepare them in advance! (e.g. creating social networks of several users). 24 | - It is also advised to rehearse your presentation so it will flow nicely. For example: make sure you can demonstrate different users simultaneously using different browsers. 25 | - Try to test out your laptop in ECS 660 in advance of your presentation. 26 | 27 | If by this stage you've already done a pilot with real users please provide a **very short** summary explaining how you've done the pilot and what feedback you've received from the users (please send us by email the pilot summary beforehand). 28 | 29 | For mobile applications you are required to provide a link to a page which will include installation and usage instructions for your users. This page should have images/videos which show how to install and use your application. In addition it should have a requirements section (i.e. if your app needs android 4.0). This page needs to be simple and clear so that any user (including users which have never seen your app before) could install and use your application. 30 | 31 | **Important note:** Full grading for the milestone (25 points) will be given for teams that successfully: 32 | 33 | 1. Focused on the primary use case and take into account our feedback from milestone 2 or earlier. 34 | 2. Followed the project plan while adapting dynamically. 35 | 3. Continuously worked throughout the semester. 36 | 4. Demonstrated an interesting, self contained, useful, and live application. 37 | 5. Provided a link to a live application and a link to installation/usage instructions page 38 | 6. Implemented a set of polished features 39 | 7. Gave a good presentation (simple, clear, focused, time-framed, sincere) 40 | 41 | **Important note:** This is not the final submission of your project. Please see details on the [Final Submission](final submission.md) page. 42 | 43 | If you have any questions or comments please do not wait for the milestone meeting, use email: [startup.programming@gmail.com](mailto:startup.programming@gmail.com) 44 | 45 | Good luck, 46 | Peggy, Cliff, Arie, Ian and Alexey 47 | -------------------------------------------------------------------------------- /past semesters/fall 2014/presenting your ideas.md: -------------------------------------------------------------------------------- 1 | # Presenting Your Ideas 2 | In our third meeting (19/09/2014) you should present your project idea. 3 | 4 | You will be given 15 minutes as follows: 5 | 6 | - In the first 5 minutes you will present the main scenario (**use-case**) and users (**target audience**) that your application targets. 7 | - Describe the situation, the need (**the problem**), the data involved, and the decisions made in the process. 8 | - Describe the overall architecture of the application. What functionality will be implemented in each part? (client/server/mobile/external sources/etc.) 9 | - Estimate what can be **demonstrated** in Milestone 1, and what can be demonstrated in Milestones 2 and 3. Estimate possible extensions that could not be finished within the time frame of the semester, but seem to be natural extensions of your application. 10 | - Include **UI mockups** in your presentation. 11 | - In the next 5 minutes you will answer questions from the rest of the class and the course staff. During this discussion, the course mentors will estimate whether your use-case is well developed and your estimations are realistic. 12 | - In the last 5 minutes you will get feedback from the mentors. 13 | 14 | **Some Tips:** 15 | 16 | - Early feedback is a good thing! It is advisable that you send us your idea as soon as possible via email ([startup.programming@gmail.com](mailto:startup.programming@gmail.com)) - this can save you a lot of time (e.g. if you took a wrong direction, impossible mission, etc.). 17 | - 15 minutes is a very short time! 18 | - If you are preparing a power point presentation - **do not prepare more than 5 slides** (including cover slide). 19 | - Be visual: if you have already thought about user interface, you may show a sketch of it in the presentation. 20 | - You may bring your own laptop (so no compatibility problems would occur during your presentation). 21 | - Be simple and precise. 22 | - Take a look at presentations from previous semesters. An example for a good presentation: [Moishd - 2010/2011A](https://docs.google.com/viewer?a=v&pid=sites&srcid=ZGVmYXVsdGRvbWFpbnxjbG91ZHdlYjEwYXxneDoyOWIzOTg0NWQ5ZDQ3YTdh&pli=1) 23 | - Rehearse your presentation within the team and make sure you are all on the same page. 24 | - If you plan on using slides, please email them to us before the meeting. 25 | 26 | **If you haven't done so already, please send us an email with the names of your team members** ([startup.programming@gmail.com](mailto:startup.programming@gmail.com)). 27 | 28 | Good luck! 29 | -------------------------------------------------------------------------------- /past semesters/fall 2014/requirements.md: -------------------------------------------------------------------------------- 1 | # Requirements 2 | 3 | Prerequisites: 4 | 5 | - Minimum grade of B in CSC 115 (Programming 2) 6 | - Minimum grade of B in CSC 225 (Algorithms and Data Structures) 7 | - Minimum grade of B in SENG 265 (Software Engineering Introduction) 8 | - 3rd or 4th year standing 9 | 10 | General Requirements: 11 | 12 | - Attendance in all course meetings is **mandatory**. If you have to miss a meeting, please let us know ahead of time. Doctor’s note will be required in case of illness or appropriate documentation to justify your absence. 13 | 14 | Each team is required to do the following: 15 | 16 | 1. Follow the updates on the site. 17 | 2. Attend all the lectures along the semester. 18 | 3. Come up with a project and present the idea, scope and architecture to the class (5% of grade). 19 | - Obtain approval for the project. 20 | - Project will include both server side and client side development. 21 | - Project needs to be publicly available (e.g. for mentors and future students). 22 | - Project needs to be scalable - it can not be hosted on your own machine, no manual input of data (automate it), and it should be running after the semester ends. 23 | 4. Prepare a workplan for the implementation, including at least 3 mid-point milestones (dates will be published on the course schedule). 24 | - Presentation of these milestones will be part of the grade (15%, 25% and 25% of the grade). 25 | 5. At each milestone: 26 | - Present status and a working demo to the class. All teams are required to attend presentations by the other teams. 27 | - Submit code (please open a GitHub repository). 28 | - Submit presentation files (PPTX / PDF / link to online presentation). 29 | - Provide a link to a demo of the application (link to live application or a demo video). 30 | 6. Listen to feedback (given by other students and the staff members). 31 | 7. Setup a web page (using GitHub) containing all the the above docs, presentations, screenshots, videos and download links. 32 | 8. Have a live working application on the web! 33 | - If web application, must support Firefox and Chrome/Chromium (current stable version of each). 34 | - If mobile application, support a stable version of Android or iOS. 35 | - The application needs to be fully working even after the course has ended. 36 | 9. Grade will be determined on a combination of the following: 37 | - 70% of your grade will be given for presentation and progress along the semester. 38 | - 30% of your grade will be determined by the course staff reviewing your final project without your presence. 39 | - For each milestone a list of requirements and expectations will be provided. 40 | - Extra points may be given for: challenging projects, original ideas, collaboration with external organizations. 41 | -------------------------------------------------------------------------------- /past semesters/fall 2014/resources/FAQ.md: -------------------------------------------------------------------------------- 1 | # Frequently Asked Questions 2 | 3 | ### How do I build a basic web application? 4 | Follow [one of the tutorials](tutorials) for the Shoutout demo. -------------------------------------------------------------------------------- /past semesters/fall 2014/resources/README.md: -------------------------------------------------------------------------------- 1 | # Course Slides 2 | 3 | ### Meeting 1 4 | 5 | - [Welcome to Startup Programming](https://docs.google.com/presentation/d/1smezy0AbtVYj9YDp43EwO8SYgRWuj9ajBun_AxeNK20) 6 | - [How to build a software product?](https://docs.google.com/presentation/d/1-T1rV32jLolgbbdOrJsf9SlWsSDswbcoDqAJOtbzd_c) 7 | - [Standing on the shoulders of giants](http://prezi.com/mkn6azkr8kqt/standing-on-the-shoulders-of-giants-v4/) - On software reuse and software composition (v4). 8 | - A few of the past projects: 9 | - [Check Me In](https://code.google.com/p/check-me-in/) - continued to [Microsoft's accelerator](https://www.microsoftventures.com/accelerators/telaviv.aspx) and then to create [Screemo](http://www.screemo.com/), a successful startup [[Lessons learned](https://docs.google.com/file/d/0B94p08j2m1YtRDRrLVlFOVVPLUk)]. 10 | - [What2Wear](https://code.google.com/p/what2wear/) 11 | - [AroundRoid](https://code.google.com/p/aroundroid/) 12 | - [StrEAT](https://code.google.com/p/team-4/) 13 | - [Good2Go](https://code.google.com/p/good2go/) 14 | - [UniZone](https://code.google.com/p/unizone/) 15 | - [FlyingBoard](https://code.google.com/p/flyingboard/) 16 | - [The Reporter](https://code.google.com/p/smoking-not/) 17 | - [SporTeam](https://code.google.com/p/sporteam/) [on [Google Play](https://play.google.com/store/apps/details?id=com.sporteamws)] 18 | - [Valto](https://code.google.com/p/valto/) 19 | - [Choozie](https://code.google.com/p/choosie-app/) [on [Google Play](https://play.google.com/store/apps/details?id=com.choozie.app)] 20 | - [EZ-Launch](https://code.google.com/p/ez-launch/) [on [Google Play](https://play.google.com/store/apps/details?id=com.sadna.widgets.application)] 21 | 22 | ### Meeting 2 23 | 24 | - [Web development overview](https://docs.google.com/presentation/d/1zvVbyEkl6rlU_Wnd-IIJCQm9Q-vZXPR3XIO0FZxMkng) 25 | - [Cloud computing services](https://docs.google.com/presentation/d/10YzdcKihpphwu9zDsIxBHP7ntKUPYePb2sj973sywUI) - [Code tutorials](tutorials) (of various platforms) for the [example shown in class](http://startupprogrammingdemo.appspot.com/) can be found in the tutorials section. 26 | - [UX – UI overview](ux.pdf?raw=true) 27 | 28 | ### Meeting 3 29 | 30 | - Team work, Source control (GitHub), and API's - [Run your project like it’s an open source project](run your project like it’s an open source project.pdf?raw=true) by Ian Bull 31 | 32 | ### Meeting 4 33 | 34 | - [Failing fast in Startup Programming](https://speakerdeck.com/avandeursen/failing-fast-in-startup-programming) by Arie Van Deursen 35 | - [Software Engineering at Magnet.me](https://speakerdeck.com/michaeldejong/software-engineering-at-magnet-dot-me) by [Michael de Jong](https://github.com/michaeldejong) 36 | 37 | ### Meeting 5 38 | 39 | - [Software Management...for people who just want to get stuff done](http://www.slideshare.net/cliffmcc/software-managementfor-people-who-just-want-to-get-stuff-done) by Cliff McCollum 40 | - Guest talk by [Aidin Tavakkol](mailto:aidin@limespot.com), CTO and Founder of [LimeSpot](https://limespot.com/) 41 | 42 | ### Meeting 7 43 | 44 | - Guest talk by [Tali Saar](http://www.talisaar.com/), Co-founder and CEO of [Palo Alto Rooster](http://paloalto.therooster.co/) 45 | - How 2 UVic students started an eBay ecommerce analytics company by [Anthony Sukow](http://ca.linkedin.com/in/anthonysukow/), EVP & Co-founder [Terapeak](https://www.terapeak.ca/) 46 | 47 | # Recommended Reading and Watching 48 | 49 | Go to [recommended reading](recommended reading.md) section. 50 | 51 | # Resources 52 | 53 | ### Cloud Computing Services 54 | 55 | - Information on various cloud computing services [[link](http://leanstack.io/)] 56 | 57 | #### Google App Engine 58 | 59 | - [Google App Engine](https://developers.google.com/appengine/) - Google App Engine is a Platform as a Service (PaaS) offering that lets you build and run applications on Google’s infrastructure. 60 | - App Engine Shoutout ([Python](https://www.youtube.com/watch?v=bfgO-LXGpTM), [Java](https://www.youtube.com/watch?v=P3GT4-m_6RQ)) - "Hello World" for App Engine in Python (a bit outdated but [with a few minor changes](tutorials) can work). 61 | - [App Engine with Python and Flask](https://www.youtube.com/watch?v=FRI3QGNWJYI) - If you prefer to work with Flask instead of the default [webapp2 framework](https://webapp-improved.appspot.com/). 62 | 63 | ### Python 64 | 65 | - [Google Python Class Day](http://www.youtube.com/watch?v=tKTZoB2Vjuk&feature=channel) - A basic tutorial for python by Nick Parlante. There are links to his exercises as well. 66 | - [PyCharm](http://www.jetbrains.com/pycharm/) - A pretty good IDE for Python (free for students). 67 | 68 | ### JavaScript 69 | - [Douglas Crockford's Javascript](http://javascript.crockford.com/) - Useful links for JavaScript. Watch the video courses (in the bottom of the page). 70 | - [jQuery](http://jquery.com/) - If you plan to use JavaScript in your application, you should consider using JQuery library. 71 | - [jQuery plugins](http://webdesignledger.com/resources/best-jquery-plugins-of-2011) - A few nice plugins for jQuery. 72 | - [JSDB](http://www.jsdb.io/) - Database of JavaScript libraries, frameworks & plugins. 73 | - [Advanced JavaScript](https://github.com/advanced-js/syllabus#resources) course - A nice collection of resources to learn JavaScript. 74 | 75 | ### Sending email 76 | - [Mailgun](http://www.mailgun.com/) - Sending the first 10,000 emails every month is free. 77 | - [SendGrid](http://sendgrid.com/) - Sending the first 200 emails every day is free. 78 | - [Amazon SES](http://aws.amazon.com/ses/) - Pay as you go. 79 | 80 | ### Continuous Integration 81 | 82 | - [Travis CI](https://travis-ci.org/) - Easy to use continuous integration tool (see [tutorial](https://www.youtube.com/watch?v=BOIJjfFoRdc)). 83 | - [Coveralls](https://coveralls.io/) - Coveralls works with popular continuous integration tools (such as Travis CI) to show test coverage history and statistics. 84 | 85 | ### Requirements and User Stories 86 | 87 | - [What's in a Story](http://dannorth.net/whats-in-a-story/) - Simple way to describe user stories / requirements for your product (behavior-driven development). 88 | - [Cucumber](http://cukes.info/) - (Ruby) tool to support Behaviour-Driven Development. 89 | 90 | 91 | ### Mobile 92 | 93 | - [ionic](http://ionicframework.com/) - Open source front-end framework for developing hybrid mobile apps with HTML5 (for both iOS and Android). 94 | 95 | #### Android 96 | 97 | - [Android developers](http://developer.android.com/index.html) - Start here if you develop for android. 98 | - [Dashboards](http://developer.android.com/about/dashboards/index.html) - This page provides information about the relative number of devices that share a certain characteristic, such as Android version or screen size. 99 | - [Developing Android Apps: Android Fundamentals](http://android-developers.blogspot.ca/2014/07/learn-to-think-like-android-developer.html) - An online web course (on Udacity) teaching android development. The full course materials - all the videos, quizzes, and forums - are **available for free** for all students by selecting “View Courseware”. 100 | - [Device Art Generator](http://developer.android.com/distribute/tools/promote/device-art.html) - The device art generator enables you to quickly wrap app screenshots in real device artwork. This provides better visual context for your app screenshots on your website or in other promotional materials. 101 | 102 | ### Facebook 103 | **Note:** Facebook API changes constantly and frequently. Please take that into account when using any kind of documentation, tutorials and when building your app. 104 | 105 | - [Creating Your First Facebook Application](http://www.boutell.com/fbhowto/chapter1.html) - How-to: Creating your first Facebook application  106 | - [Facebook and Google App Engine](http://www.lhelper.org/dev/google-appengine-docs-20090422/appengine/articles/shelftalkers.html) - How-To: Create a Facebook App with Google App Engine and Best Buy Remix  107 | 108 | ### Visualization 109 | 110 | - [The Data Visualization Catalogue](http://www.datavizcatalogue.com/) 111 | - [Google Charts](https://developers.google.com/chart/) - Google chart tools are powerful, simple to use, and free. For example, it allows to dynamically generate QR codes. 112 | 113 | ### Screen Recording 114 | 115 | These tools can help you create demo videos, and tutorial videos for your application. Use [this demo video](https://www.youtube.com/watch?v=kRAO-gf67nM) for inspiration. 116 | 117 | **On Windows OS:** 118 | 119 | - [CamStudio](http://camstudio.org/) - can capture your screen (and audio) and record it 120 | - [VirtualDub](http://www.virtualdub.org/) - if you need to compress or edit the video 121 | 122 | **On Ubuntu:** 123 | 124 | - [RecordMyDesktop](http://recordmydesktop.sourceforge.net/about.php) - can capture your screen 125 | - [WinFF](http://winff.org/html_new/) - you can convert to other formats 126 | - [Avidemux](http://fixounet.free.fr/avidemux/) - if you need to edit or compress the video 127 | 128 | ### Presentation and Slide Design 129 | 130 | - [Slide Design for Developers](http://zachholman.com/posts/slide-design-for-developers/) - Nice, though older, blog post on easy ways to improve slide decks. 131 | - [The Talk on Talks](http://zachholman.com/talk/the-talk-on-talks/) - A more recent post, with great pointers on presenting, and a video where Zach Holman comments on his own presentation. He also published a lot of tips on [speaking.io](http://speaking.io/) 132 | 133 | ### Useful Links and Tools 134 | 135 | - [Balsamiq](http://balsamiq.com/) - A web service (or desktop tool) for UI mockup sketching. 136 | - [ZenHub](https://www.zenhub.io/) - ZenHub enhances the GitHub workflow with a visual way to organize your features, and projects. 137 | - [Let’s Encrypt](https://letsencrypt.org/howitworks/) - Free SSL/TLS encryption. 138 | - [Google API Explorer](http://code.google.com/apis/explorer/) - A quick and easy way to see all available API's provided by Google. 139 | - [Build Podcast](http://build-podcast.com/) - A cool podcast about technology tools for design and development (each episode covers a different tool). 140 | - [Sublime Text](http://www.sublimetext.com/) - A recommended text editor/"light IDE", especially for web developers. Other good options are [Brackets](http://brackets.io/), [TextMate](http://macromates.com/) (only for Mac) or [Atom](https://atom.io/) by GitHub. 141 | - A badass list of [frontend development resources](https://gist.github.com/dypsilon/5819504). 142 | - Create product shots with ease - [Dunnnk](http://dunnnk.com/), [Magic Mockups](http://magicmockups.com/), [Frame](http://frame.lab25.co.uk/), and [MockUPhone](http://mockuphone.com/). 143 | 144 | ### Finding Users and Promoting Your Application 145 | 146 | - [Product Hunt](http://www.producthunt.com/) shows new applications on a daily basis (Reddit-like interface). You can submit your own application, and [it might get noticed by some of the most important people in the industry](http://techcrunch.com/2014/10/14/how-product-hunt-hopes-to-avoid-the-pitfalls-that-wounded-quora-and-buried-digg). 147 | 148 | ### Web and Mobile Prototyping 149 | 150 | - [invision](http://www.invisionapp.com/) - Quickly transform your designs into beautiful, fully interactive prototypes complete with gestures, transitions & animations for web, iOS & Android (Free). 151 | - [proto.io](http://proto.io/) - Mobile prototyping (15 days free trial). 152 | 153 | ### Web Parsers and Scrapers (or What to do when there is no API available?) 154 | 155 | - [Parsing existing websites](http://open.dapper.net/) - This tool allows you to extract any content from the Web, and get it in various formats. 156 | - [Never write a web scraper again](http://www.kimonolabs.com/load?url=http%3A%2F%2Fwww.kimonolabs.com%2Fwelcome.html) - A simple to use web scraper. 157 | -------------------------------------------------------------------------------- /past semesters/fall 2014/resources/recommended reading.md: -------------------------------------------------------------------------------- 1 | # Recommended Reading 2 | 3 | ### Books 4 | - Extreme Programming Explained: Embrace Change, 2nd Edition by Kent Beck ([Amazon](http://www.amazon.com/Extreme-Programming-Explained-Embrace-Change/dp/0321278658/ref=sr_1_1?s=books&ie=UTF8&qid=1407949544&sr=1-1&keywords=Extreme+Programming+kent+beck)) 5 | - The Nature of Software Development by Ron Jeffries ([Book](https://pragprog.com/book/rjnsd/the-nature-of-software-development)) 6 | - The Mythical Man-Month, 2nd Edition by Fred Brooks ([Amazon](http://www.amazon.com/gp/product/0201835959/ref=as_li_qf_sp_asin_tl?ie=UTF8&tag=wwwsteveblank-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=0201835959)) 7 | - The Lean Startup by Eric Ries ([Amazon](http://www.amazon.com/The-Lean-Startup-Entrepreneurs-Continuous/dp/0307887898), [YouTube](https://www.youtube.com/watch?v=fEvKo90qBns)) 8 | - Founders at Work: Stories of Startups' Early Days by Jessica Livingston ([Amazon](http://www.amazon.com/Founders-Work-Stories-Startups-Early/dp/1430210788)) 9 | - Don't Make Me Think, Revisited: A Common Sense Approach to Web Usability by Steve Krug ([Amazon](http://www.amazon.com/Dont-Make-Think-Revisited-Usability/dp/0321965515/ref=dp_ob_title_bk)) 10 | - Designing Multi-Device Experiences by Michal Levin ([Amazon](http://www.amazon.ca/Designing-Multi-Device-Experiences-Ecosystem-Approach/dp/1449340385), [YouTube](https://www.youtube.com/watch?v=5ieYBP3pUfA), and a [related presentation](http://www.slideshare.net/gabrielwhite/multidevice-user-experience)) 11 | - UX for Lean Startups by Laura Klein ([Amazon](http://www.amazon.com/UX-Lean-Startups-Experience-Research/dp/1449334911)) 12 | - Getting Real by 37signals ([PDF](https://basecamp.com/books/Getting%20Real.pdf)) 13 | - Who Moved My Cheese by Spencer Johnson ([Amazon](http://www.amazon.com/Who-Moved-My-Cheese-Amazing/dp/0399144463), [YouTube](https://www.youtube.com/watch?v=91YxXk3fmw8)) 14 | 15 | ### Blogs and Articles 16 | 17 | - Y-Combinator [essays](http://www.paulgraham.com/articles.html) by Paul Grahm, and the Y-Combinator [startup library](http://www.ycombinator.com/resources/). 18 | - How to validate a product without building it [[link](http://blog.sendwithus.com/how-we-validated/)] 19 | - How Airbnb solved the mystery of predicative pricing [[link](http://www.fastcompany.com/3026550/lessons-learned/how-airbnb-solved-the-mystery-of-predictive-pricing)] 20 | - Interaction design checklist [[link](http://ixdchecklist.com/)] 21 | - How to give a 90-second demo [[link](http://www.mattmcalister.com/blog/2006/09/22/96/how-to-give-a-90-second-demo/)] 22 | - How Not to Design a Mobile App [[link](http://giffconstable.com/2014/08/how-not-to-design-a-mobile-app/)] 23 | - 7 Rules for Creating Gorgeous UI [[Part 1](https://medium.com/@erikdkennedy/7-rules-for-creating-gorgeous-ui-part-1-559d4e805cda), and [Part 2](https://medium.com/@erikdkennedy/7-rules-for-creating-gorgeous-ui-part-2-430de537ba96)] 24 | - Seven startup marketing mistakes [[link](http://mashable.com/2014/11/26/startups-marketing-mistakes/)] 25 | 26 | ### Recommended Watching 27 | - The User is Drunk [[YouTube](https://www.youtube.com/watch?v=r2CbbBLVaPk)] 28 | - Startup School talks [[YouTube](https://www.youtube.com/channel/UCcefcZRL2oaA_uBNeo5UOWg/playlists)] 29 | - How to Start a Startup course at Stanford by Y-Combinator [[link](http://startupclass.samaltman.com/)] 30 | - Beyond Landing Pages: Five Ways to Find Out if Your Idea Is Stupid by Laura Klein [[YouTube](https://www.youtube.com/watch?v=g_g-9BpBcFs)] 31 | - User Interface Techniques by Janne Jul Jensen [[YouTube](https://www.youtube.com/watch?v=7OSkB4BCx00)] 32 | -------------------------------------------------------------------------------- /past semesters/fall 2014/resources/run your project like it’s an open source project.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexeyza/startup-programming/362e7cb41aff80c04c2a7ed83b13dcd4000780a5/past semesters/fall 2014/resources/run your project like it’s an open source project.pdf -------------------------------------------------------------------------------- /past semesters/fall 2014/resources/tutorials/README.md: -------------------------------------------------------------------------------- 1 | # Tutorials 2 | 3 | Here you can find tutorials to help you get started. 4 | 5 | ### Shoutout Demo 6 | The following code tutorials showcase the same basic [Shoutout](http://startupprogrammingdemo.appspot.com/) application implemented with different programming languages and platforms: 7 | 8 | - Shoutout demo with App Engine and Java ([code tutorial](app engine java shoutout.md)) 9 | - Shoutout demo with App Engine, Python, and Flask ([code tutorial](app engine python with flask shoutout.md)) 10 | - Shoutout demo with Heroku, Python, Flask, and MongoDB ([code tutorial](heroku python with flask mongodb shoutout.md)) 11 | - Shoutout demo with Heroku, Node.js, and MongoDB ([code tutorial](heroku nodejs with mongodb shoutout.md)) 12 | 13 | ### Recommended Video Tutorials 14 | 15 | - Building a demo web app with Java, Angular and MongoDB (and many other recommended frameworks and libraries) by Trisha Gee ([YouTube](https://www.youtube.com/watch?v=VyEdy-l5608)) -------------------------------------------------------------------------------- /past semesters/fall 2014/resources/tutorials/app engine java shoutout.md: -------------------------------------------------------------------------------- 1 | # Shoutout Demo - App Engine Tutorial (with Java) 2 | 3 | ### Initial Google App Engine Setup 4 | The following instructions will help you use Google App Engine with Java. 5 | 6 | 1. Install Eclipse (choose the [Eclipse IDE for Java EE Developers](https://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/lunar) version). 7 | 2. Make sure the version of Java on your system is Java 7 (currently Java 8 causes issues with the Google Plugin for Eclipse). 8 | 3. Install the Google plugin for Eclipse by following [these instructions](https://developers.google.com/appengine/docs/java/tools/eclipse). Make sure to choose the version of Eclipse you have installed. 9 | 4. During the installation of the Google plugin for Eclipse, you will be asked to choose which components you would like to install. If you only want to use App Engine (without GWT and without Android), check the "**Google plugin for Eclipse (required)**" checkbox. 10 | ![Alt text](https://developers.google.com/eclipse/images/luna-install.png) 11 | 5. Create a new project for App Engine 12 | - ```New -> Project -> Google -> Web Application Project``` 13 | - Give name to your project and the name of the default package (e.g. controller). 14 | - Uncheck "**Use Google Web Toolkit**" if you do not intend to use it or haven't installed it with the Google Plugin for eclipse. 15 | - Right click the project and choose: ```Run as -> web application```. 16 | 6. The steps above allow you to run the project locally (on your machine). 17 | - Open [http://localhost:8888/](http://localhost:8888/) in your browser for your running application. 18 | - Open [http://localhost:8888/_ah/admin](http://localhost:8888/_ah/admin) to manage your local application (i.e. to manipulate the DB). 19 | 7. Next we will configure Eclipse to work with your App Engine account. 20 | 8. Open the [App Engine website](https://appengine.google.com/), login, and create a new application. Remember the unique **application ID** you are giving that application. You will need to configure it in Eclipse as well. 21 | 9. In eclipse, right click you project and then choose: ```Properties -> Google -> App engine``` and set the **application ID** you've chosen earlier. 22 | 10. Deploying to App Engine: 23 | - Right click on the project and choose ```Google -> Deploy to App Engine``` 24 | - You will be prompted to approve Eclipse to access your Google account. 25 | - Follow the instructions and click ```Deploy``` 26 | - Wait until it finishes deployment. 27 | - Open the following URL: ```.appspot.com``` to see your application running on App Engine (wait a few seconds for App Engine to start an instance). 28 | - Manage your application at [the App Engine website](https://appengine.google.com/). 29 | 30 | ### Creating the Shoutout Application 31 | 32 | At this point, you should have a newly created *Hello World* project. 33 | 34 | Let's start by creating a ```src/main/Shout.java``` class to represent a single Shout: 35 | ```java 36 | package main; 37 | 38 | import javax.jdo.annotations.IdentityType; 39 | import javax.jdo.annotations.PersistenceCapable; 40 | import javax.jdo.annotations.Persistent; 41 | import javax.jdo.annotations.PrimaryKey; 42 | 43 | @PersistenceCapable(identityType = IdentityType.APPLICATION) 44 | public class Shout { 45 | @Persistent 46 | @PrimaryKey 47 | private String name; 48 | @Persistent 49 | private String message; 50 | 51 | public Shout(String name, String message){ 52 | this.name = name; 53 | this.message = message; 54 | } 55 | 56 | public String getMessage() { 57 | return message; 58 | } 59 | public String getName(){ 60 | return name; 61 | } 62 | } 63 | ``` 64 | 65 | And create a typical [Persistence Manager Factory](https://db.apache.org/jdo/pmf.html) class at ```src/main/PMF.java``` in order to use the database (via JDO): 66 | ```java 67 | package main; 68 | 69 | import javax.jdo.JDOHelper; 70 | import javax.jdo.PersistenceManagerFactory; 71 | 72 | public final class PMF { 73 | 74 | private static final PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory("transactions-optional"); 75 | 76 | private PMF(){} 77 | 78 | public static PersistenceManagerFactory get(){ 79 | return pmf; 80 | } 81 | } 82 | ``` 83 | 84 | Next, we'll create a ```src/main/GAEDemoServlet.java``` servlet to handle GET requests that add new shouts: 85 | ```java 86 | package main; 87 | 88 | import java.io.IOException; 89 | 90 | import javax.jdo.PersistenceManager; 91 | import javax.servlet.http.*; 92 | 93 | @SuppressWarnings("serial") 94 | public class GAEDemoServlet extends HttpServlet { 95 | public void doGet(HttpServletRequest req, HttpServletResponse resp) 96 | throws IOException { 97 | PersistenceManager pm = PMF.get().getPersistenceManager(); 98 | String message = req.getParameter("message"); 99 | String name = req.getParameter("name"); 100 | if ((name!=null)&&(message!=null)){ 101 | try{ 102 | Shout s = new Shout(name,message); 103 | pm.makePersistent(s); 104 | }finally{ 105 | pm.close(); 106 | } 107 | } 108 | resp.sendRedirect("/"); 109 | 110 | } 111 | } 112 | ``` 113 | 114 | Instead of using the existing ```war/index.html```, we'll create the following ```war/index.jsp```. This page will include a *form* to input new shouts, and will display all the existing shouts: 115 | ```jsp 116 | <%@ page language="java" contentType="text/html; charset=windows-1255" 117 | pageEncoding="windows-1255"%> 118 | <%@ page import="javax.jdo.PersistenceManager"%> 119 | <%@ page import="javax.jdo.Query"%> 120 | <%@ page import="java.util.List"%> 121 | <%@ page import="main.*"%> 122 | 123 | 124 | 125 | 127 | Shoutout 128 | 129 | 130 |
131 | name: 132 | message: 133 | 134 |
135 | <% 136 | PersistenceManager pm = PMF.get().getPersistenceManager(); 137 | Query query = pm.newQuery("SELECT FROM "+ Shout.class.getName() + " ORDER BY name DESC"); 138 | List entries = (List) query.execute(); 139 | for (int i=0;i

<%=entries.get(i).getMessage()%> by <%=entries.get(i).getName()%>

<% 141 | } 142 | pm.close(); 143 | %> 144 | 145 | 146 | ``` 147 | 148 | Lastly, we need to configure the [deployment descriptor](https://developers.google.com/appengine/docs/java/config/webxml) at ```war/WEB-INF/web.xml``` to determine the URL mapping of our application: 149 | ```xml 150 | 151 | 156 | 157 | GAEDemo 158 | main.GAEDemoServlet 159 | 160 | 161 | GAEDemo 162 | /gaedemo 163 | 164 | 165 | index.jsp 166 | 167 | 168 | ``` -------------------------------------------------------------------------------- /past semesters/fall 2014/resources/tutorials/app engine python with flask shoutout.md: -------------------------------------------------------------------------------- 1 | # Shoutout Demo - App Engine Tutorial (with Python and Flask) 2 | 3 | In this tutorial, we'll start by following the YouTube tutorial below, in order to set the initial working environment. By following the instructions, you should have a working *Hello World* App Engine/Flask project. 4 | 5 | [![IMAGE ALT TEXT HERE](http://img.youtube.com/vi/FRI3QGNWJYI/0.jpg)](http://www.youtube.com/watch?v=FRI3QGNWJYI) 6 | 7 | Let's start by creating a ```models.py``` module with a Shout class to represent a single Shout: 8 | ```python 9 | from google.appengine.ext import ndb 10 | 11 | 12 | class Shout(ndb.Model): 13 | name = ndb.StringProperty(required=True) 14 | message = ndb.TextProperty(required=True, indexed=False) 15 | ``` 16 | 17 | Next, we'll create the backend for our application at ```main.py```, to handle POST requests that add new shouts, and GET requests that display existing shouts: 18 | ```python 19 | import sys 20 | from models import Shout 21 | import os 22 | sys.path.insert(1, os.path.join(os.path.abspath('.'), 'venv/lib/python2.7/site-packages')) 23 | from flask import Flask, render_template, request, redirect 24 | 25 | app = Flask(__name__) 26 | 27 | @app.route("/", methods=['GET']) 28 | def index(): 29 | shouts = Shout.query() 30 | return render_template('index.html', shouts=shouts) 31 | 32 | @app.route("/post", methods=['POST']) 33 | def post(): 34 | s = Shout(name=request.form['name'], message=request.form['message']) 35 | s.put() 36 | return redirect('/') 37 | 38 | if __name__ == "__main__": 39 | app.run() 40 | ``` 41 | 42 | Lastly, we'll create the frontend of our application - the ```templates/index.html``` template file. This page will include a *form* to input new shouts, and will display all the existing shouts: 43 | ```html 44 | 45 | 46 | 47 | 48 | Shoutout 49 | 50 | 51 |
52 | name: 53 | message: 54 | 55 |
56 | {% for shout in shouts %} 57 | {{ shout.name }} - {{ shout.message }}
58 | {% endfor %} 59 | 60 | 61 | ``` 62 | 63 | Note, that in order to deploy your application to App Engine, you need to make sure your **application ID** is configured correctly at ```app.yaml``` as follows: 64 | ``` 65 | application: appenginedemo 66 | version: 1 67 | runtime: python27 68 | api_version: 1 69 | threadsafe: yes 70 | 71 | handlers: 72 | - url: /favicon\.ico 73 | static_files: favicon.ico 74 | upload: favicon\.ico 75 | 76 | - url: .* 77 | script: main.app 78 | 79 | libraries: 80 | - name: webapp2 81 | version: "2.5.2" 82 | 83 | ``` 84 | 85 | ### How do I continue from here? 86 | [Flask](http://flask.pocoo.org/) is a very simple web framework for Python. There are several good resources to learn Flask: 87 | 88 | - [Official documentation](http://flask.pocoo.org/docs/) 89 | - [Flask by Example](https://www.youtube.com/watch?v=FGrIyBDQLPg) is a great YouTube tutorial, with all the [code availible online](https://github.com/miguelgrinberg/flask-pycon2014) as well 90 | - [Explore Flask](http://exploreflask.com/) online book 91 | 92 | Possible alternatives to Flask are the App Engine default [webapp2](https://cloud.google.com/appengine/docs/python/gettingstartedpython27/usingwebapp) and the popular [Django](https://www.djangoproject.com/). 93 | -------------------------------------------------------------------------------- /past semesters/fall 2014/resources/tutorials/heroku nodejs with mongodb shoutout.md: -------------------------------------------------------------------------------- 1 | # Shoutout Demo - Heroku Tutorial (with Node.js and MongoDB) 2 | 3 | ### Initial Heroku Setup 4 | First, create a [free account on Heroku](https://signup.heroku.com/signup/dc). 5 | 6 | Make sure you have [Node.js](http://nodejs.org/) and [npm](https://github.com/npm/npm#synopsis) installed. 7 | 8 | Download and install [the Heroku Toolbelt](https://devcenter.heroku.com/articles/getting-started-with-python#set-up). Once installed, you can use the ```heroku login``` command to connect to your Heroku account. 9 | 10 | ### Creating the Shoutout Application 11 | 12 | In this tutorial we will use the NoSQL database called [MongoDB](http://www.mongodb.org/). Download and install MongoDB (installation instructions can be found on the [MongoDB website](http://www.mongodb.org/downloads)). 13 | 14 | Create a new directory for your application: 15 | ```bash 16 | mkdir shoutout 17 | cd shoutout 18 | ``` 19 | 20 | Install the following packages with ```npm```: 21 | ```bash 22 | npm install express 23 | npm install body-parser 24 | npm install ejs 25 | npm install mongoose 26 | ``` 27 | 28 | Generate the ```package.json``` file by using: 29 | ```bash 30 | npm init 31 | ``` 32 | The created file should look similar to this: 33 | ```json 34 | { 35 | "name": "shoutout", 36 | "version": "0.0.1", 37 | "description": "shoutout demo", 38 | "scripts": { 39 | "start": "node main.js" 40 | }, 41 | "author": "", 42 | "license": "MIT", 43 | "dependencies": { 44 | "body-parser": "^1.8.2", 45 | "express": "^4.9.3", 46 | "mongoose": "^3.8.16", 47 | "ejs": "^1.0.0" 48 | }, 49 | "engines": { 50 | "node": "0.10.x" 51 | }, 52 | "main": "main.js", 53 | "devDependencies": {} 54 | } 55 | ``` 56 | 57 | Create and assign a Heroku application ID. We will ask Heroku to create an application ID of ```shoutoutdemo``` (assuming it is available): 58 | ```bash 59 | git init 60 | heroku create shoutoutdemo 61 | ``` 62 | 63 | Add the MongoHQ addon to your Heroku application: 64 | ```bash 65 | heroku addons:add mongohq 66 | ``` 67 | **Note, there is a need to verify your billing information on Heroku in order to use addons**, even though MongoHQ is free to use for 512mb ([a possible workaround](http://www.elliotbradbury.com/use-mongohq-heroku-without-verifying-account/)). 68 | 69 |
70 | Next, we'll create the backend for our application by creating ```main.js```, to handle POST requests that add new shouts, and GET requests that display existing shouts: 71 | ```js 72 | var express = require('express'); 73 | var mongoose = require('mongoose'); 74 | var bodyParser = require('body-parser'); 75 | 76 | mongoose.connect(process.env.MONGOHQ_URL || 'mongodb://localhost/shoutout'); 77 | 78 | // define model 79 | var Shout = mongoose.model('Shout', { name: String, message: String }); 80 | 81 | // setup middleware 82 | var app = express(); 83 | app.use(bodyParser.urlencoded({ extended: false })) 84 | app.engine('html', require('ejs').renderFile); 85 | app.set('view engine', 'html'); 86 | 87 | 88 | app.get('/', function (req,res){ 89 | Shout.find(function(err, shouts) { 90 | if (err) 91 | return console.error(err); 92 | res.render('index.html', { shouts : shouts }); 93 | }); 94 | }); 95 | 96 | app.post('/post', function (req, res) { 97 | 98 | var name = req.body.name; 99 | var message = req.body.message; 100 | var shout = new Shout({ name: name, message: message }); 101 | shout.save(function(err) { 102 | if (err) 103 | return console.error(err); 104 | }); 105 | res.redirect(301, '/'); 106 | }); 107 | 108 | var port = process.env.PORT || 3000; 109 | app.listen(port); 110 | console.log('started on port', port); 111 | ``` 112 | 113 | Lastly, we'll create the frontend of our application - the ```views/index.html``` template file. This page will include a *form* to input new shouts, and will display all the existing shouts. The templating engine we use is [ejs](https://github.com/visionmedia/ejs) ([jade](http://jade-lang.com/) is an alternative templating engine): 114 | ```html 115 | 116 | 117 | 118 | 119 | Shoutout 120 | 121 | 122 |
123 | name: 124 | message: 125 | 126 |
127 | <% shouts.forEach(function(shout){ %> 128 | <%= shout.name %> - <%= shout.message %>
129 | <% }); %> 130 | 131 | 132 | ``` 133 | 134 | Lastly, we need to create a ```Procfile``` that contains: 135 | ``` 136 | web: node main.js 137 | ``` 138 | 139 | Deploy to Heroku and test: 140 | ```bash 141 | git add main.js packages.json Procfile views/ 142 | git commit -m "initial commit" 143 | git push heroku master 144 | heroku open 145 | ``` 146 | 147 | We can see the live application running on Heroku at ```http://.herokuapp.com```, in our case it would be ```http://shoutoutdemo.herokuapp.com```. We can manage our application with the [Heroku dashboard](https://dashboard-next.heroku.com/apps). 148 | 149 | ### How do I continue from here? 150 | 151 | For beginners with Node.js, you can watch the following YouTube tutorial for Node.js and [Express.js](http://expressjs.com/). 152 | [![Node.js & Express 101](http://img.youtube.com/vi/BN0JlMZCtNU/0.jpg)](http://www.youtube.com/watch?v=BN0JlMZCtNU) 153 | 154 | You should also check out [this webinar](https://www.youtube.com/watch?v=xuXIBSa_7j4), which shows how to use [WebStorm](http://www.jetbrains.com/webstorm/) (FREE for students) with Node.js and Heroku. -------------------------------------------------------------------------------- /past semesters/fall 2014/resources/tutorials/heroku python with flask mongodb shoutout.md: -------------------------------------------------------------------------------- 1 | # Shoutout Demo - Heroku Tutorial (with Python, MongoDB and Flask) 2 | 3 | ### Initial Heroku Setup 4 | First, create a [free account on Heroku](https://signup.heroku.com/signup/dc). 5 | 6 | Next, install Python, Pip and Virtualenv based on your operation system: [Windows](http://docs.python-guide.org/en/latest/starting/install/win/), [OS X](http://docs.python-guide.org/en/latest/starting/install/osx/), or [Linux](http://docs.python-guide.org/en/latest/starting/install/linux/). 7 | 8 | Download and install [the Heroku Toolbelt](https://devcenter.heroku.com/articles/getting-started-with-python#set-up). Once installed, you can use the ```heroku login``` command to connect to your Heroku account. 9 | 10 | ### Creating An Initial Hello World Application 11 | 12 | Create a new directory for your application: 13 | ```bash 14 | mkdir shoutout 15 | cd shoutout 16 | ``` 17 | Create a new virtual environment for your application: 18 | ```bash 19 | virtualenv venv 20 | ``` 21 | Activate the virtual environment: 22 | ```bash 23 | source venv/bin/activate 24 | ``` 25 | This allows to install new Python packages with ```pip``` in the virtual environment of the current project without affecting other projects. In order to deactivate (when you're done working on the project) use the ```deactivate``` command. 26 | 27 | Install flask: 28 | ```bash 29 | pip install flask 30 | ``` 31 | 32 | Create a basic backend for your application at ```main.py```: 33 | ```python 34 | import os 35 | from flask import Flask 36 | 37 | app = Flask(__name__) 38 | 39 | @app.route("/") 40 | def hello(): 41 | return "Hello world!" 42 | 43 | if __name__ == "__main__": 44 | port = int(os.environ.get("PORT", 5000)) 45 | app.run(host='0.0.0.0', port=port) 46 | ``` 47 | 48 |
49 | Now, there are two additional files required to deploy to Heroku: ```requirements.txt``` and ```Procfile```. The requirements file will include the package names needed for our application to run. We can generate it using the following command: 50 | ```bash 51 | pip freeze > requirements.txt 52 | ``` 53 | This should create a ```requirements.txt``` file that is similar to this: 54 | ``` 55 | Flask==0.10.1 56 | Jinja2==2.7.3 57 | MarkupSafe==0.23 58 | Werkzeug==0.9.6 59 | argparse==1.2.1 60 | itsdangerous==0.24 61 | wsgiref==0.1.2 62 | 63 | ``` 64 | 65 | Next, create a file named ```Procfile``` to include the following: 66 | ``` 67 | web: python main.py 68 | ``` 69 | 70 |
71 | Now, let's deploy your *Hello World* application to Heroku to make sure everything works so far. We will ask Heroku to create an application ID of ```shoutoutdemo``` (assuming it is available). 72 | ```bash 73 | git init 74 | git add main.py requirements.txt Procfile 75 | git commit -m "initial commit" 76 | heroku create shoutoutdemo 77 | git push heroku master 78 | heroku open 79 | ``` 80 | We can see the live application running on Heroku at ```http://.herokuapp.com```, in our case it would be ```http://shoutoutdemo.herokuapp.com```. We can manage our application with the [Heroku dashboard](https://dashboard-next.heroku.com/apps). 81 | 82 | ### Creating the Shoutout Application 83 | 84 | In this tutorial we will use the NoSQL database called [MongoDB](http://www.mongodb.org/). Download and install MongoDB (installation instructions can be found on the [MongoDB website](http://www.mongodb.org/downloads)). 85 | 86 | Install [pymongo](http://api.mongodb.org/python/current/): 87 | ```bash 88 | pip install pymongo 89 | ``` 90 | 91 | Update the ```requirements.txt``` file to include pymongo: 92 | ```bash 93 | pip freeze > requirements.txt 94 | ``` 95 | 96 | Add the MongoHQ addon to your Heroku application: 97 | ```bash 98 | heroku addons:add mongohq 99 | ``` 100 | **Note, there is a need to verify your billing information on Heroku in order to use addons**, even though MongoHQ is free to use for 512mb ([a possible workaround](http://www.elliotbradbury.com/use-mongohq-heroku-without-verifying-account/)). 101 | 102 | Find the ID of the database MongoHQ has assigned for your application with the following command: 103 | ```bash 104 | heroku config 105 | ``` 106 | The output should be similar to this: 107 | ``` 108 | mongodb://:@kahana.mongohq.com:10087/app29843323 109 | ``` 110 | In which case, the database ID is the last part - ```app29843323```. We will use it to set the connection later. 111 | 112 |
113 | Next, we'll create the backend for our application by modifying ```main.py```, to handle POST requests that add new shouts, and GET requests that display existing shouts: 114 | ```python 115 | import os 116 | from flask import Flask, render_template, request, redirect 117 | import pymongo 118 | from pymongo import MongoClient 119 | 120 | 121 | MONGO_URL = os.environ.get('MONGOHQ_URL') 122 | client = MongoClient(MONGO_URL) 123 | 124 | # Specify the database 125 | db = client.app29843323 126 | collection = db.shoutouts 127 | 128 | app = Flask(__name__) 129 | 130 | @app.route("/", methods=['GET']) 131 | def index(): 132 | shouts = collection.find() 133 | return render_template('index.html', shouts=shouts) 134 | 135 | @app.route("/post", methods=['POST']) 136 | def post(): 137 | shout = {"name":request.form['name'], "message":request.form['message']} 138 | shout_id = collection.insert(shout) 139 | return redirect('/') 140 | 141 | 142 | if __name__ == "__main__": 143 | port = int(os.environ.get("PORT", 5000)) 144 | app.run(host='0.0.0.0', port=port) 145 | ``` 146 | 147 | Lastly, we'll create the frontend of our application - the ```templates/index.html``` template file. This page will include a *form* to input new shouts, and will display all the existing shouts: 148 | ```html 149 | 150 | 151 | 152 | 153 | Shoutout 154 | 155 | 156 |
157 | name: 158 | message: 159 | 160 |
161 | {% for shout in shouts %} 162 | {{ shout.name }} - {{ shout.message }}
163 | {% endfor %} 164 | 165 | 166 | ``` 167 | 168 | Deploy to Heroku and test: 169 | ```bash 170 | git add main.py requirements.txt templates/ 171 | git commit -m "add MongoDB" 172 | git push heroku master 173 | heroku open 174 | ``` 175 | 176 | ### How do I continue from here? 177 | [Flask](http://flask.pocoo.org/) is a very simple web framework for Python. There are several good resources to learn Flask: 178 | 179 | - [Official documentation](http://flask.pocoo.org/docs/) 180 | - [Flask by Example](https://www.youtube.com/watch?v=FGrIyBDQLPg) is a great YouTube tutorial, with all the [code availible online](https://github.com/miguelgrinberg/flask-pycon2014) as well 181 | - [Explore Flask](http://exploreflask.com/) online book 182 | 183 | A popular alternative to Flask is [Django](https://www.djangoproject.com/). -------------------------------------------------------------------------------- /past semesters/fall 2014/resources/ux.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexeyza/startup-programming/362e7cb41aff80c04c2a7ed83b13dcd4000780a5/past semesters/fall 2014/resources/ux.pdf -------------------------------------------------------------------------------- /past semesters/fall 2014/teams and projects.md: -------------------------------------------------------------------------------- 1 | # Teams and Projects 2 | 3 | ### [beLocal](https://github.com/beLocalVictoria) 4 | ![beLocal Logo](https://camo.githubusercontent.com/24910693ab977bd96f4ea8727b412bdbb047ed03/687474703a2f2f64726976652e676f6f676c652e636f6d2f75633f69643d30423571576639766338796952524668684d454e735253313152556b) 5 | **Website:** [belocalvictoria.me](https://belocalvictoria.me) 6 | **Description:** A web application that connects Local Vendors with the community by allowing them to post information about their business, what items they produce, and where they will be selling. 7 | **Members**: 8 | 9 | - Scott Low [[scouter32@gmail.com](mailto:scouter32@gmail.com)] 10 | - Samuel Navarrete [[cakebrewery@gmail.com](mailto:cakebrewery@gmail.com)] 11 | - Riz Panjwani [[panjwani.riz@gmail.com](mailto:panjwani.riz@gmail.com)] 12 | - Carly Lebeuf [[carly.lebeuf@gmail.com](mailto:carly.lebeuf@gmail.com)] 13 | - Jyoti Sheoran [[sheoranjs24@gmail.com](mailto:sheoranjs24@gmail.com)] 14 | 15 | --- 16 | 17 | ### [Power Planner](https://github.com/prashantchhabra89/Alternate-Power-Source-Property-Mapper) 18 | ![PowerManager Logo](https://camo.githubusercontent.com/d4efd2792dddfee81c3ab56953d3c78a6fe31597/68747470733a2f2f646c2e64726f70626f7875736572636f6e74656e742e636f6d2f752f35303332313330372f706f7765725f706c616e6e65725f67682e706e67) 19 | **Website:** [power-planner.appspot.com](http://power-planner.appspot.com/) 20 | **Description:** Putting power in people's hands for finding sites for sustainable electricity generation. 21 | **Members**: 22 | 23 | - Charlie Guan [[sirius890928@gmail.com](mailto:sirius890928@gmail.com)] 24 | - Jonathan Lam [[lamjwe@uvic.ca](mailto:lamjwe@uvic.ca)] 25 | - Daniel Faulkner [[danielafaulkner@gmail.com](mailto:danielafaulkner@gmail.com)] 26 | - Chuan Yun Loe [[cyloe3@gmail.com](mailto:cyloe3@gmail.com)] 27 | - Prashant Chhabra [[prashant.chhabra89@gmail.com](mailto:prashant.chhabra89@gmail.com)] 28 | 29 | --- 30 | 31 | ### [Flybrary](https://github.com/Brkk/textchanger) 32 | ![Flybrary Logo](http://i.imgur.com/HtXCs8l.png?1) 33 | **Website:** [flybrary.ca](http://flybrary.ca/) 34 | **Description:** The peoples network for sharing textbooks, connecting you with community members that have the books you need. 35 | **Members**: 36 | 37 | - Jordan Lerner [[jordan.m.lerner@gmail.com](mailto:jordan.m.lerner@gmail.com)] 38 | - Logan Masniuk [[logan.masniuk@gmail.com](mailto:logan.masniuk@gmail.com)] 39 | - Berk Yazicioglu [[yaziciogluberk@gmail.com](mailto:yaziciogluberk@gmail.com)] 40 | - Paulo Tabarro [[bobleujr@hotmail.com](mailto:bobleujr@hotmail.com)] 41 | - James Hedin [[jhedin10@gmail.com](mailto:jhedin10@gmail.com)] 42 | 43 | --- 44 | 45 | ### [linksupp](https://github.com/nfeliciano/mangiamo) 46 | ![linksupp Logo](https://raw.githubusercontent.com/nfeliciano/mangiamo/master/mockups/logo-banner.png) 47 | **Website:** [www.linksupp.com](http://www.linksupp.com/) 48 | **Description:** A web application that is aimed for business savvy, outgoing groups of people who are looking for opportunities to meet new contacts, expand their friend base by meeting people informally for a meal. 49 | **Members**: 50 | 51 | - Christopher Cook [[cjcook@uvic.ca](mailto:cjcook@uvic.ca)] 52 | - Hardeep Kevin Gill [[hkevgill@uvic.ca](mailto:hkevgill@uvic.ca)] 53 | - Jesper Rage [[jrage@uvic.ca](mailto:jrage@uvic.ca)] 54 | - Lloyd Montgomery [[lloydrmontgomery@gmail.com](mailto:lloydrmontgomery@gmail.com)] 55 | - Noel Feliciano [[felicianonoel@gmail.com](mailto:felicianonoel@gmail.com)] 56 | 57 | --- 58 | 59 | # Alumni 60 | 61 | # Tel Aviv University Course 62 | 63 | - [2007/2008, Semester A](http://tau-itw.wikidot.com/active-projects-08) 64 | - [2007/2008, Semester B](http://tau-gadgets.wikidot.com/) 65 | - [2008/2009, Semester A](http://sites.google.com/site/taugadgets09a/) 66 | - [2008/2009, Semester B](http://sites.google.com/site/taugadgets09b/) 67 | - [2009/2010, Semester A](http://sites.google.com/site/taugadgets10a) 68 | - [2009/2010, Semester B](http://sites.google.com/site/taugadgets10b) 69 | - [2010/2011, Semester A](https://sites.google.com/site/cloudweb10a/) 70 | - [2010/2011, Semester B](https://sites.google.com/site/cloudweb10b) 71 | - [2011/2012, Semester A](https://sites.google.com/site/cloudweb11a/) 72 | - [2011/2012, Semester B](https://sites.google.com/site/cloudweb11b/) 73 | - [2012/2013, Semester A](https://sites.google.com/site/cloudweb12a/) 74 | - [2012/2013, Semester B](https://sites.google.com/site/cloudweb12b/) 75 | -------------------------------------------------------------------------------- /presenting your ideas.md: -------------------------------------------------------------------------------- 1 | # Presenting Your Ideas 2 | In our third meeting (23/09/2016) you should present your project idea. 3 | 4 | You will be given 15 minutes as follows: 5 | 6 | - In the first 5 minutes you will present the main scenario (**use-case**) and users (**target audience**) that your application targets. 7 | - Describe the situation, the need (**the problem**), the data involved, and the decisions made in the process. 8 | - Describe the overall architecture of the application. What functionality will be implemented in each part? (client/server/mobile/external sources/etc.) 9 | - Estimate what can be **demonstrated** in Milestone 1, and what can be demonstrated in Milestones 2 and 3. Estimate possible extensions that could not be finished within the time frame of the semester, but seem to be natural extensions of your application. 10 | - Include a few **UI mockups** in your presentation. 11 | - In the next 5 minutes you will answer questions from the rest of the class and the course staff. During this discussion, the course mentors will estimate whether your use-case is well developed and your estimations are realistic. 12 | - In the last 5 minutes you will get feedback from the mentors. 13 | 14 | **Some Tips:** 15 | 16 | - Early feedback is a good thing! It is advisable that you send us your idea as soon as possible via email ([startup.programming@gmail.com](mailto:startup.programming@gmail.com)) - this can save you a lot of time (e.g. if you took a wrong direction, impossible mission, etc.). 17 | - 15 minutes is a very short time! 18 | - If you are preparing a power point presentation - **do not prepare more than 5 slides** (including cover slide). 19 | - Be visual: if you have already thought about user interface, you may show a sketch of it in the presentation. 20 | - You may bring your own laptop (so no compatibility problems would occur during your presentation). 21 | - Be simple and precise. 22 | - Take a look at presentations from previous semesters. An example for a good presentation: [Moishd - 2010/2011A](https://docs.google.com/viewer?a=v&pid=sites&srcid=ZGVmYXVsdGRvbWFpbnxjbG91ZHdlYjEwYXxneDoyOWIzOTg0NWQ5ZDQ3YTdh&pli=1) 23 | - Rehearse your presentation within the team and make sure you are all on the same page. 24 | - If you plan on using slides, please email them to us before the meeting. 25 | - If you have some free time, consider watching the Y Combinator Office Hours videos ([YouTube](https://www.youtube.com/watch?v=9cWPxuxqdGQ)) 26 | - For creating UI mockups consider using [Balsamiq](https://balsamiq.com/download/), offered for free use during the course: 27 | ``` 28 | License Name: Startup Programming 2016 29 | License Key: eJzzzU/OLi0odswsqgkuSSwqKS1QCCjKTy9KzM3NzEtXMDIwNKsxNLEwMDewsDAAgZqQGkMADFMRhw== 30 | License End Date: Jan 01, 2017 31 | ``` 32 | 33 | **If you haven't done so already, please send us an email with the names of your team members** ([startup.programming@gmail.com](mailto:startup.programming@gmail.com)). 34 | 35 | Good luck! 36 | -------------------------------------------------------------------------------- /requirements.md: -------------------------------------------------------------------------------- 1 | # Requirements 2 | 3 | Prerequisites: 4 | 5 | - Minimum grade of B in CSC 115 (Programming 2) 6 | - Minimum grade of B in CSC 225 (Algorithms and Data Structures) 7 | - Minimum grade of B in SENG 265 (Software Engineering Introduction) 8 | - 3rd or 4th year standing 9 | 10 | General Requirements: 11 | 12 | - Attendance in all course meetings is **mandatory**. If you have to miss a meeting, please let us know ahead of time. Doctor’s note will be required in case of illness or appropriate documentation to justify your absence. 13 | 14 | Each team is required to do the following: 15 | 16 | 1. Follow the updates on the site. 17 | 2. Attend all the lectures along the semester. 18 | 3. Come up with a project and present the idea, scope and architecture to the class (5% of grade). 19 | - Obtain approval for the project. 20 | - Project will include both server side and client side development. 21 | - Project needs to be publicly available (e.g. for mentors and future students). 22 | - Project needs to be scalable - it can not be hosted on your own machine, no manual input of data (automate it), and it should be running after the semester ends. 23 | 4. Prepare a workplan for the implementation, including at least 3 mid-point milestones (dates will be published on the course schedule). 24 | - Presentation of these milestones will be part of the grade (15%, 25% and 25% of the grade). 25 | 5. At each milestone: 26 | - Present status and a working demo to the class. All teams are required to attend presentations by the other teams. 27 | - Submit code (please open a GitHub repository). 28 | - Submit presentation files (PPTX / PDF / link to online presentation). 29 | - Provide a link to a demo of the application (link to live application or a demo video). 30 | 6. Listen to feedback (given by other students and the staff members). 31 | 7. Setup a web page (using GitHub) containing all the the above docs, presentations, screenshots, videos and download links. 32 | 8. Have a live working application on the web! 33 | - If web application, must support Firefox and Chrome/Chromium (current stable version of each). 34 | - If mobile application, support a stable version of Android or iOS. 35 | - The application needs to be fully working even after the course has ended. 36 | 9. Grade will be determined on a combination of the following: 37 | - 70% of your grade will be given for presentation and progress along the semester. 38 | - 30% of your grade will be determined by the course staff reviewing your final project without your presence. 39 | - For each milestone a list of requirements and expectations will be provided. 40 | - Extra points may be given for: challenging projects, original ideas, collaboration with external organizations. 41 | -------------------------------------------------------------------------------- /resources/FAQ.md: -------------------------------------------------------------------------------- 1 | # Frequently Asked Questions 2 | 3 | ### How do I build a basic web application? 4 | Follow [one of the tutorials](tutorials) for the Shoutout demo. -------------------------------------------------------------------------------- /resources/Project_Participant_Agreement.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexeyza/startup-programming/362e7cb41aff80c04c2a7ed83b13dcd4000780a5/resources/Project_Participant_Agreement.pdf -------------------------------------------------------------------------------- /resources/README.md: -------------------------------------------------------------------------------- 1 | # Course Slides 2 | 3 | ### Meeting 1 4 | 5 | - [Welcome to Startup Programming 2016](https://speakerdeck.com/alexeyza/welcome-to-startup-programming-course-fall-2016) 6 | - [How to build a software product?](https://speakerdeck.com/alexeyza/how-to-build-a-software-product) 7 | - [Standing on the shoulders of giants](http://prezi.com/mkn6azkr8kqt/standing-on-the-shoulders-of-giants-v4/) - On software reuse and software composition (v4). 8 | - A few of the past projects: 9 | + [beLocal](https://github.com/beLocalVictoria/beLocal) - [lessons learned](https://docs.google.com/presentation/d/1tlF1HjAmuXlAC7W2QKTpbBgh3VSXPXNoF1AmrEVQrlE) 10 | + [Power Planner](https://github.com/prashantchhabra89/Alternate-Power-Source-Property-Mapper) 11 | + [Check Me In](https://code.google.com/p/check-me-in/) - continued to [Microsoft's accelerator](https://www.microsoftventures.com/accelerators/telaviv.aspx) and then to create [Screemo](http://www.screemo.com/), a successful startup [[Use cases](https://www.youtube.com/watch?v=nK6PTxEfvJQ), [Lessons learned](https://docs.google.com/file/d/0B94p08j2m1YtRDRrLVlFOVVPLUk)]. 12 | + [What2Wear](https://code.google.com/p/what2wear/) 13 | + [AroundRoid](https://code.google.com/p/aroundroid/) 14 | + [StrEAT](https://code.google.com/p/team-4/) 15 | + [Good2Go](https://code.google.com/p/good2go/) 16 | + [UniZone](https://code.google.com/p/unizone/) 17 | + [FlyingBoard](https://code.google.com/p/flyingboard/) 18 | + [The Reporter](https://code.google.com/p/smoking-not/) 19 | + [SporTeam](https://code.google.com/p/sporteam/) 20 | + [Valto](https://code.google.com/p/valto/) 21 | + [EZ-Launch](https://code.google.com/p/ez-launch/) [on [Google Play](https://play.google.com/store/apps/details?id=com.sadna.widgets.application)] 22 | 23 | ### Meeting 2 24 | 25 | - [Startup Slam 3.0](http://www.startupslam.io/) 26 | - [Web development overview](https://speakerdeck.com/alexeyza/web-development-overview-2016) 27 | - [Mobile development - advice on how to start](https://docs.google.com/presentation/d/1kROO3-EDVNjYDe02Xf7GPpNwFz1XN5ZwfNmVbje-Zys) 28 | - [UI/UX part 1 - Design Thinking](design_thinking2016.pdf?raw=true) 29 | 30 | ### Meeting 3 31 | 32 | - [Git, GitHub and Working Together](http://github.eclipsesource.com/introduction_to_git) 33 | 34 | ### Meeting 4 35 | 36 | - [So you want to build a thing](http://so-you-want-to-build-a-thing.surge.sh) by [Jason Trill](http://jjt.io/) 37 | 38 | ### Meeting 6 39 | 40 | - [Software Management for people who just want to get stuff done](http://www.slideshare.net/cliffmcc/software-managementfor-people-who-just-want-to-get-stuff-done) by [Cliff](https://ca.linkedin.com/in/cliffmccollum) 41 | - [Slides of the Benevity guest talk](benevity_guest_talk.pdf?raw=true) by [Jim Olson](http://islandsofno.ca/about.html) (product design at [Benevity](http://www.benevity.com/)) and [Jon Wiggens](https://twitter.com/jonwiggens) (UI Designer at [Benevity](http://www.benevity.com/), previously at EA) 42 | - [Dev Ops - 12 factor apps](devops_12_factor_apps.pdf?raw=true) by [Cliff](https://ca.linkedin.com/in/cliffmccollum) 43 | 44 | ### Meeting 7 45 | 46 | - [Testing for web developers](testing-clarke.pdf?raw=true) by [Clarke Brunsdon](https://twitter.com/cbrunsdon) 47 | - [UI/UX - thinking about the user](ui_ux_thinking_about_the_user.pdf?raw=true) by Peggy 48 | 49 | # Recommended Reading and Watching 50 | 51 | Go to [recommended reading](/resources/recommended%20reading.md) section. 52 | 53 | # Resources 54 | 55 | ### Useful Links 56 | 57 | - [Getting started tutorials for newcomers - in Java, Python, and Node.js](tutorials) 58 | - [GitHub Student Developer Pack](https://education.github.com/pack) 59 | 60 | ### Cloud Computing Services 61 | 62 | - Information on various cloud computing services [[link](http://leanstack.io/)] 63 | 64 | #### Google App Engine 65 | 66 | - [Google App Engine](https://developers.google.com/appengine/) - Google App Engine is a Platform as a Service (PaaS) offering that lets you build and run applications on Google’s infrastructure. 67 | - App Engine Shoutout ([Python](https://www.youtube.com/watch?v=bfgO-LXGpTM), [Java](https://www.youtube.com/watch?v=P3GT4-m_6RQ)) - "Hello World" for App Engine in Python (a bit outdated but [with a few minor changes](tutorials) can work). 68 | - [App Engine with Python and Flask](https://www.youtube.com/watch?v=FRI3QGNWJYI) - If you prefer to work with Flask instead of the default [webapp2 framework](https://webapp-improved.appspot.com/). 69 | 70 | ### Python 71 | 72 | - [Google Python Class Day](http://www.youtube.com/watch?v=tKTZoB2Vjuk&feature=channel) - A basic tutorial for python by Nick Parlante. There are links to his exercises as well. 73 | - [PyCharm](http://www.jetbrains.com/pycharm/) - A pretty good IDE for Python (free for students). 74 | 75 | ### Web 76 | 77 | #### Development 78 | - [WebStorm](https://www.jetbrains.com/webstorm/) - A good web development IDE (free for students). 79 | 80 | #### JavaScript 81 | - [Yarn](https://yarnpkg.com/) - A JavaScript package manager 82 | - [Douglas Crockford's Javascript](http://javascript.crockford.com/) - Useful links for JavaScript. Watch the video courses (in the bottom of the page). 83 | - [jQuery](http://jquery.com/) - If you plan to use JavaScript in your application, you should consider using JQuery library. 84 | - [jQuery plugins](http://webdesignledger.com/resources/best-jquery-plugins-of-2011) - A few nice plugins for jQuery. 85 | - [JSDB](http://www.jsdb.io/) - Database of JavaScript libraries, frameworks & plugins. 86 | - [Advanced JavaScript](https://github.com/advanced-js/syllabus#resources) course - A nice collection of resources to learn JavaScript. 87 | 88 | #### React 89 | - [React Home](https://facebook.github.io/react/) - A component-based front-end JavaScript library built by Facebook. 90 | - [9 things every ReactJS beginner should know](https://camjackson.net/post/9-things-every-reactjs-beginner-should-know) - A list of 9 basic guidelines to follow when developing in react. 91 | - [Using React with Webpack Tutorial](https://blog.risingstack.com/using-react-with-webpack-tutorial/) - A tutorial explaining the fundamentals of Webpack, and how to set up a basic development environment. 92 | 93 | #### NodeJS 94 | - [NodeJS Home](https://nodejs.org/en/) - Serverside JavaScript platform. 95 | - [NPM](https://www.npmjs.com) - Node Package Manager, a package manager initially built for NodeJS Packages but has since expanded to host packages for front-end development as well. 96 | 97 | ### Sending email 98 | - [Mailgun](http://www.mailgun.com/) - Sending the first 10,000 emails every month is free. 99 | - [SendGrid](http://sendgrid.com/) - Sending the first 200 emails every day is free. 100 | - [Amazon SES](http://aws.amazon.com/ses/) - Pay as you go. 101 | 102 | ### Continuous Integration 103 | 104 | - [Travis CI](https://travis-ci.org/) - Easy to use continuous integration tool (see [tutorial](https://www.youtube.com/watch?v=BOIJjfFoRdc)). 105 | - [Coveralls](https://coveralls.io/) - Coveralls works with popular continuous integration tools (such as Travis CI) to show test coverage history and statistics. 106 | 107 | ### Requirements and User Stories 108 | 109 | - [What's in a Story](http://dannorth.net/whats-in-a-story/) - Simple way to describe user stories / requirements for your product (behavior-driven development). 110 | - [Cucumber](http://cukes.info/) - (Ruby) tool to support Behaviour-Driven Development. 111 | 112 | ### User Onboarding 113 | - Onboarding [design examples](http://www.useronboard.com/onboarding-teardowns/) from various known products. 114 | 115 | ### Metrics 116 | - An [introduction to metrics](https://leanstack.com/3-rules-to-actionable-metrics/) 117 | - Some good examples for metrics in these [slides](http://www.slideshare.net/stueccles/lean-startup-metrics), based on the goal/phase of your product 118 | 119 | ### Mobile 120 | 121 | - [ionic](http://ionicframework.com/) - Open source front-end framework for developing hybrid mobile apps with HTML5 (for both iOS and Android). 122 | 123 | #### Android 124 | 125 | - [Android developers](http://developer.android.com/index.html) - Start here if you develop for android. 126 | - [Dashboards](http://developer.android.com/about/dashboards/index.html) - This page provides information about the relative number of devices that share a certain characteristic, such as Android version or screen size. 127 | - [Developing Android Apps: Android Fundamentals](http://android-developers.blogspot.ca/2014/07/learn-to-think-like-android-developer.html) - An online web course (on Udacity) teaching android development. The full course materials - all the videos, quizzes, and forums - are **available for free** for all students by selecting “View Courseware”. 128 | - [Device Art Generator](http://developer.android.com/distribute/tools/promote/device-art.html) - The device art generator enables you to quickly wrap app screenshots in real device artwork. This provides better visual context for your app screenshots on your website or in other promotional materials. 129 | 130 | ### Facebook 131 | **Note:** Facebook API changes constantly and frequently. Please take that into account when using any kind of documentation, tutorials and when building your app. 132 | 133 | - [Creating Your First Facebook Application](http://www.boutell.com/fbhowto/chapter1.html) - How-to: Creating your first Facebook application  134 | - [Facebook and Google App Engine](http://www.lhelper.org/dev/google-appengine-docs-20090422/appengine/articles/shelftalkers.html) - How-To: Create a Facebook App with Google App Engine and Best Buy Remix  135 | 136 | ### Visualization 137 | 138 | - [The Data Visualization Catalogue](http://www.datavizcatalogue.com/) 139 | - [Google Charts](https://developers.google.com/chart/) - Google chart tools are powerful, simple to use, and free. For example, it allows to dynamically generate QR codes. 140 | 141 | ### Screen Recording 142 | 143 | These tools can help you create demo videos, and tutorial videos for your application. Use [this demo video](https://www.youtube.com/watch?v=kRAO-gf67nM) for inspiration. 144 | 145 | **On Windows OS:** 146 | 147 | - [CamStudio](http://camstudio.org/) - can capture your screen (and audio) and record it 148 | - [VirtualDub](http://www.virtualdub.org/) - if you need to compress or edit the video 149 | 150 | **On Ubuntu:** 151 | 152 | - [RecordMyDesktop](http://recordmydesktop.sourceforge.net/about.php) - can capture your screen 153 | - [WinFF](http://winff.org/html_new/) - you can convert to other formats 154 | - [Avidemux](http://fixounet.free.fr/avidemux/) - if you need to edit or compress the video 155 | 156 | ### Presentation and Slide Design 157 | 158 | - [Slide Design for Developers](http://zachholman.com/posts/slide-design-for-developers/) - Nice, though older, blog post on easy ways to improve slide decks. 159 | - [The Talk on Talks](http://zachholman.com/talk/the-talk-on-talks/) - A more recent post, with great pointers on presenting, and a video where Zach Holman comments on his own presentation. He also published a lot of tips on [speaking.io](http://speaking.io/) 160 | 161 | ### Useful Links and Tools 162 | 163 | - [ZenHub](https://www.zenhub.io/) - ZenHub enhances the GitHub workflow with a visual way to organize your features, and projects. 164 | - [Let’s Encrypt](https://letsencrypt.org/howitworks/) - Free SSL/TLS encryption. 165 | - [Google API Explorer](http://code.google.com/apis/explorer/) - A quick and easy way to see all available API's provided by Google. 166 | - [Build Podcast](http://build-podcast.com/) - A cool podcast about technology tools for design and development (each episode covers a different tool). 167 | - [Sublime Text](http://www.sublimetext.com/) - A recommended text editor/"light IDE", especially for web developers. Other good options are [Brackets](http://brackets.io/), [TextMate](http://macromates.com/) (only for Mac) or [Atom](https://atom.io/) by GitHub. 168 | - A badass list of [frontend development resources](https://gist.github.com/dypsilon/5819504). 169 | - Create product shots with ease - [Dunnnk](http://dunnnk.com/), [Magic Mockups](http://magicmockups.com/), [Frame](http://frame.lab25.co.uk/), and [MockUPhone](http://mockuphone.com/). 170 | - [Mixpanel](https://mixpanel.com/) - Web and mobile analytics. It provides better insights than Google Analytics, because instead of focusing on page views, it focuses on tracking workflow. 171 | 172 | ### Finding Users and Promoting Your Application 173 | 174 | - [Product Hunt](http://www.producthunt.com/) shows new applications on a daily basis (Reddit-like interface). You can submit your own application, and [it might get noticed by some of the most important people in the industry](http://techcrunch.com/2014/10/14/how-product-hunt-hopes-to-avoid-the-pitfalls-that-wounded-quora-and-buried-digg). 175 | 176 | ### Web and Mobile Prototyping 177 | 178 | - [Balsamiq](http://balsamiq.com/) - A web service (or desktop tool) for UI mockup sketching. 179 | - [invision](http://www.invisionapp.com/) - Quickly transform your designs into beautiful, fully interactive prototypes complete with gestures, transitions & animations for web, iOS & Android (Free). 180 | - [proto.io](http://proto.io/) - Mobile prototyping (15 days free trial). 181 | - [Adobe XD](http://www.adobe.com/ca/products/experience-design.html) - A prototyping tool for high fidelity prototypes. 182 | 183 | ### Web Parsers and Scrapers (or What to do when there is no API available?) 184 | 185 | - [Parsing existing websites](http://open.dapper.net/) - This tool allows you to extract any content from the Web, and get it in various formats. 186 | - [Never write a web scraper again](http://www.kimonolabs.com/load?url=http%3A%2F%2Fwww.kimonolabs.com%2Fwelcome.html) - A simple to use web scraper. 187 | -------------------------------------------------------------------------------- /resources/benevity_guest_talk.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexeyza/startup-programming/362e7cb41aff80c04c2a7ed83b13dcd4000780a5/resources/benevity_guest_talk.pdf -------------------------------------------------------------------------------- /resources/design_thinking2016.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexeyza/startup-programming/362e7cb41aff80c04c2a7ed83b13dcd4000780a5/resources/design_thinking2016.pdf -------------------------------------------------------------------------------- /resources/devops_12_factor_apps.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexeyza/startup-programming/362e7cb41aff80c04c2a7ed83b13dcd4000780a5/resources/devops_12_factor_apps.pdf -------------------------------------------------------------------------------- /resources/recommended reading.md: -------------------------------------------------------------------------------- 1 | # Recommended Reading 2 | 3 | ![alt text](https://d262ilb51hltx0.cloudfront.net/max/2000/1*zncFk_rzIO1CCZYz2zDj3A.png "Image by George Lovegrove @ https://medium.com/@georgelovegrove/books-for-founders-at-each-stage-of-a-startup-424d5cb75473#.7uhswc47b") 4 | 5 | ### Books 6 | 7 | #### Startups 8 | - The Lean Startup by Eric Ries ([Amazon](http://www.amazon.com/The-Lean-Startup-Entrepreneurs-Continuous/dp/0307887898), [YouTube](https://www.youtube.com/watch?v=fEvKo90qBns)) 9 | - Startup Playbook by Sam Altman ([read online](http://playbook.samaltman.com/), also [available in Spanish](https://platzi.com/startup-playbook/)) 10 | - Founders at Work: Stories of Startups' Early Days by Jessica Livingston ([Amazon](http://www.amazon.com/Founders-Work-Stories-Startups-Early/dp/1430210788)) 11 | - Getting Real by 37signals ([PDF](https://basecamp.com/about/books/Getting%20Real.pdf)) 12 | - Zero to One: Notes on Startups, or How to Build the Future by Peter Thiel ([Amazon](https://www.amazon.ca/Zero-One-Notes-Startups-Future/dp/0804139296/ref=sr_1_1?s=books&ie=UTF8&qid=1474320210&sr=1-1&keywords=zero+to+one)) 13 | - Chaos Monkeys: Obscene Fortune and Random Failure in Silicon Valley by Antonio Garcia Martinez ([Amazon](https://www.amazon.com/Chaos-Monkeys-Obscene-Fortune-Failure/dp/0062458191/ref=sr_1_1?s=books&ie=UTF8&qid=1474320434&sr=1-1&keywords=chaos+monkey)) 14 | - The Hard Thing About Hard Things: Building a Business When There Are No Easy Answers by Ben Horowitz ([Amazon](https://www.amazon.com/Hard-Thing-About-Things-Building/dp/0062273205)) 15 | - Some More Things (additional posts that weren't included in _The Hard Thing About the Hard Things_) by Ben Horowitz ([PDF](http://a16z.com/2016/09/04/ben-blog-ebook/)) 16 | 17 | #### UI/UX 18 | - Lean UX: Applying Lean Principles to Improve User Experience by Jeff Gothelf ([Amazon](https://www.amazon.com/Lean-UX-Applying-Principles-Experience/dp/1449311652)) 19 | - Validating Product Ideas: Through Lean User Research by Tomer Sharon ([Amazon](https://www.amazon.com/Validating-Product-Ideas-Through-Research/dp/1933820292)) + [accompanying resources](http://www.leanresearch.co/book/) (includes many links to articles, books, slides, and videos) 20 | - Hooked: How to Build Habit-Forming Products by Nir Eyal ([Amazon](https://www.amazon.com/Hooked-How-Build-Habit-Forming-Products/dp/1591847788/ref=sr_1_1?s=books&ie=UTF8&qid=1474320367&sr=1-1&keywords=hooked)) 21 | - Don't Make Me Think, Revisited: A Common Sense Approach to Web Usability by Steve Krug ([Amazon](http://www.amazon.com/Dont-Make-Think-Revisited-Usability/dp/0321965515/ref=dp_ob_title_bk)) 22 | - UX for Lean Startups by Laura Klein ([Amazon](http://www.amazon.com/UX-Lean-Startups-Experience-Research/dp/1449334911)) 23 | 24 | #### Programming Essentials 25 | - Extreme Programming Explained: Embrace Change, 2nd Edition by Kent Beck ([Amazon](http://www.amazon.com/Extreme-Programming-Explained-Embrace-Change/dp/0321278658/ref=sr_1_1?s=books&ie=UTF8&qid=1407949544&sr=1-1&keywords=Extreme+Programming+kent+beck)) 26 | - The Nature of Software Development by Ron Jeffries ([Book](https://pragprog.com/book/rjnsd/the-nature-of-software-development)) 27 | - The Mythical Man-Month, 2nd Edition by Fred Brooks ([Amazon](http://www.amazon.com/gp/product/0201835959/ref=as_li_qf_sp_asin_tl?ie=UTF8&tag=wwwsteveblank-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=0201835959)) 28 | 29 | #### Life Lessons 30 | - Who Moved My Cheese by Spencer Johnson ([Amazon](http://www.amazon.com/Who-Moved-My-Cheese-Amazing/dp/0399144463)) 31 | 32 | --- 33 | 34 | ### Blogs and Articles 35 | - [How to Start a Startup](http://paulgraham.com/start.html) essay by Paul Grahm. If you read only one essay, read this one! 36 | - Y-Combinator [essays](http://www.paulgraham.com/articles.html) by Paul Grahm, and the Y-Combinator [startup library](http://www.ycombinator.com/resources/). 37 | - How to validate a product without building it [[link](http://blog.sendwithus.com/how-we-validated/)] 38 | - How Airbnb solved the mystery of predicative pricing [[link](http://www.fastcompany.com/3026550/lessons-learned/how-airbnb-solved-the-mystery-of-predictive-pricing)] 39 | - Interaction design checklist [[link](http://ixdchecklist.com/)] 40 | - How to give a 90-second demo [[link](http://www.mattmcalister.com/blog/2006/09/22/96/how-to-give-a-90-second-demo/)] 41 | - How Not to Design a Mobile App [[link](http://giffconstable.com/2014/08/how-not-to-design-a-mobile-app/)] 42 | - 7 Rules for Creating Gorgeous UI [[Part 1](https://medium.com/@erikdkennedy/7-rules-for-creating-gorgeous-ui-part-1-559d4e805cda), and [Part 2](https://medium.com/@erikdkennedy/7-rules-for-creating-gorgeous-ui-part-2-430de537ba96)] 43 | 44 | --- 45 | 46 | ### Recommended Watching 47 | - How to Start a Startup course at Stanford by Y-Combinator [[link](http://startupclass.samaltman.com/)] 48 | - Office Hours with Kevin & Qasar [[YouTube](https://www.youtube.com/watch?v=9cWPxuxqdGQ)] 49 | - Jessica Livingston at Startup School 2012 [[YouTube](https://www.youtube.com/watch?v=KQJ6zsNCA-4)] 50 | - The story of Watsi (a non-profit startup) by Chase Adam, a good motivational talk [[YouTube](https://www.youtube.com/watch?v=WlT3UhC7NwQ)] 51 | - "1000 days of AirBnB", the story of AirBnb [[YouTube](https://www.youtube.com/watch?v=L03vBkOKTrc)] 52 | - Jan Koum's talk (WhatsApp) demonstrates long term goals and keeping focus [[YouTube](https://www.youtube.com/watch?v=8-pJa11YvCs)] 53 | - Michelle Zatlyn and Matthew Prince (CloudFlare) talk about team dynamics [[YouTube](https://www.youtube.com/watch?v=l58rp7JoVYQ)] 54 | - The User is Drunk [[YouTube](https://www.youtube.com/watch?v=r2CbbBLVaPk)] 55 | - Startup School talks [[YouTube](https://www.youtube.com/channel/UCcefcZRL2oaA_uBNeo5UOWg/playlists)] 56 | - Beyond Landing Pages: Five Ways to Find Out if Your Idea Is Stupid by Laura Klein [[YouTube](https://www.youtube.com/watch?v=g_g-9BpBcFs)] 57 | - User Interface Techniques by Janne Jul Jensen [[YouTube](https://www.youtube.com/watch?v=7OSkB4BCx00)] -------------------------------------------------------------------------------- /resources/testing-clarke.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexeyza/startup-programming/362e7cb41aff80c04c2a7ed83b13dcd4000780a5/resources/testing-clarke.pdf -------------------------------------------------------------------------------- /resources/tutorials/README.md: -------------------------------------------------------------------------------- 1 | # Tutorials 2 | 3 | Here you can find tutorials to help you get started. 4 | 5 | ### Shoutout Demo 6 | The following code tutorials showcase the same basic [Shoutout](http://startupprogrammingdemo.appspot.com/) application implemented with different programming languages and platforms: 7 | 8 | - Shoutout demo with App Engine and Java ([code tutorial](app engine java shoutout.md)) 9 | - Shoutout demo with App Engine, Python, and Flask ([code tutorial](app engine python with flask shoutout.md)) 10 | - Shoutout demo with Heroku, Python, Flask, and MongoDB ([code tutorial](heroku python with flask mongodb shoutout.md)) 11 | - Shoutout demo with Heroku, Node.js, and MongoDB ([code tutorial](heroku nodejs with mongodb shoutout.md)) 12 | 13 | ### Recommended Video Tutorials 14 | 15 | - Building a demo web app with Java, Angular and MongoDB (and many other recommended frameworks and libraries) by Trisha Gee ([YouTube](https://www.youtube.com/watch?v=VyEdy-l5608)) -------------------------------------------------------------------------------- /resources/tutorials/app engine java shoutout.md: -------------------------------------------------------------------------------- 1 | # Shoutout Demo - App Engine Tutorial (with Java) 2 | 3 | ### Initial Google App Engine Setup 4 | The following instructions will help you use Google App Engine with Java. 5 | 6 | 1. Install Eclipse (choose the [Eclipse IDE for Java EE Developers](https://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/lunar) version). 7 | 2. Make sure the version of Java on your system is Java 7 (currently Java 8 causes issues with the Google Plugin for Eclipse). 8 | 3. Install the Google plugin for Eclipse by following [these instructions](https://developers.google.com/appengine/docs/java/tools/eclipse). Make sure to choose the version of Eclipse you have installed. 9 | 4. During the installation of the Google plugin for Eclipse, you will be asked to choose which components you would like to install. If you only want to use App Engine (without GWT and without Android), check the "**Google plugin for Eclipse (required)**" checkbox. 10 | ![Alt text](https://developers.google.com/eclipse/images/luna-install.png) 11 | 5. Create a new project for App Engine 12 | - ```New -> Project -> Google -> Web Application Project``` 13 | - Give name to your project and the name of the default package (e.g. controller). 14 | - Uncheck "**Use Google Web Toolkit**" if you do not intend to use it or haven't installed it with the Google Plugin for eclipse. 15 | - Right click the project and choose: ```Run as -> web application```. 16 | 6. The steps above allow you to run the project locally (on your machine). 17 | - Open [http://localhost:8888/](http://localhost:8888/) in your browser for your running application. 18 | - Open [http://localhost:8888/_ah/admin](http://localhost:8888/_ah/admin) to manage your local application (i.e. to manipulate the DB). 19 | 7. Next we will configure Eclipse to work with your App Engine account. 20 | 8. Open the [App Engine website](https://appengine.google.com/), login, and create a new application. Remember the unique **application ID** you are giving that application. You will need to configure it in Eclipse as well. 21 | 9. In eclipse, right click you project and then choose: ```Properties -> Google -> App engine``` and set the **application ID** you've chosen earlier. 22 | 10. Deploying to App Engine: 23 | - Right click on the project and choose ```Google -> Deploy to App Engine``` 24 | - You will be prompted to approve Eclipse to access your Google account. 25 | - Follow the instructions and click ```Deploy``` 26 | - Wait until it finishes deployment. 27 | - Open the following URL: ```.appspot.com``` to see your application running on App Engine (wait a few seconds for App Engine to start an instance). 28 | - Manage your application at [the App Engine website](https://appengine.google.com/). 29 | 30 | ### Creating the Shoutout Application 31 | 32 | At this point, you should have a newly created *Hello World* project. 33 | 34 | Let's start by creating a ```src/main/Shout.java``` class to represent a single Shout: 35 | ```java 36 | package main; 37 | 38 | import javax.jdo.annotations.IdentityType; 39 | import javax.jdo.annotations.PersistenceCapable; 40 | import javax.jdo.annotations.Persistent; 41 | import javax.jdo.annotations.PrimaryKey; 42 | 43 | @PersistenceCapable(identityType = IdentityType.APPLICATION) 44 | public class Shout { 45 | @Persistent 46 | @PrimaryKey 47 | private String name; 48 | @Persistent 49 | private String message; 50 | 51 | public Shout(String name, String message){ 52 | this.name = name; 53 | this.message = message; 54 | } 55 | 56 | public String getMessage() { 57 | return message; 58 | } 59 | public String getName(){ 60 | return name; 61 | } 62 | } 63 | ``` 64 | 65 | And create a typical [Persistence Manager Factory](https://db.apache.org/jdo/pmf.html) class at ```src/main/PMF.java``` in order to use the database (via JDO): 66 | ```java 67 | package main; 68 | 69 | import javax.jdo.JDOHelper; 70 | import javax.jdo.PersistenceManagerFactory; 71 | 72 | public final class PMF { 73 | 74 | private static final PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory("transactions-optional"); 75 | 76 | private PMF(){} 77 | 78 | public static PersistenceManagerFactory get(){ 79 | return pmf; 80 | } 81 | } 82 | ``` 83 | 84 | Next, we'll create a ```src/main/GAEDemoServlet.java``` servlet to handle GET requests that add new shouts: 85 | ```java 86 | package main; 87 | 88 | import java.io.IOException; 89 | 90 | import javax.jdo.PersistenceManager; 91 | import javax.servlet.http.*; 92 | 93 | @SuppressWarnings("serial") 94 | public class GAEDemoServlet extends HttpServlet { 95 | public void doGet(HttpServletRequest req, HttpServletResponse resp) 96 | throws IOException { 97 | PersistenceManager pm = PMF.get().getPersistenceManager(); 98 | String message = req.getParameter("message"); 99 | String name = req.getParameter("name"); 100 | if ((name!=null)&&(message!=null)){ 101 | try{ 102 | Shout s = new Shout(name,message); 103 | pm.makePersistent(s); 104 | }finally{ 105 | pm.close(); 106 | } 107 | } 108 | resp.sendRedirect("/"); 109 | 110 | } 111 | } 112 | ``` 113 | 114 | Instead of using the existing ```war/index.html```, we'll create the following ```war/index.jsp```. This page will include a *form* to input new shouts, and will display all the existing shouts: 115 | ```jsp 116 | <%@ page language="java" contentType="text/html; charset=windows-1255" 117 | pageEncoding="windows-1255"%> 118 | <%@ page import="javax.jdo.PersistenceManager"%> 119 | <%@ page import="javax.jdo.Query"%> 120 | <%@ page import="java.util.List"%> 121 | <%@ page import="main.*"%> 122 | 123 | 124 | 125 | 127 | Shoutout 128 | 129 | 130 |
131 | name: 132 | message: 133 | 134 |
135 | <% 136 | PersistenceManager pm = PMF.get().getPersistenceManager(); 137 | Query query = pm.newQuery("SELECT FROM "+ Shout.class.getName() + " ORDER BY name DESC"); 138 | List entries = (List) query.execute(); 139 | for (int i=0;i

<%=entries.get(i).getMessage()%> by <%=entries.get(i).getName()%>

<% 141 | } 142 | pm.close(); 143 | %> 144 | 145 | 146 | ``` 147 | 148 | Lastly, we need to configure the [deployment descriptor](https://developers.google.com/appengine/docs/java/config/webxml) at ```war/WEB-INF/web.xml``` to determine the URL mapping of our application: 149 | ```xml 150 | 151 | 156 | 157 | GAEDemo 158 | main.GAEDemoServlet 159 | 160 | 161 | GAEDemo 162 | /gaedemo 163 | 164 | 165 | index.jsp 166 | 167 | 168 | ``` -------------------------------------------------------------------------------- /resources/tutorials/app engine python with flask shoutout.md: -------------------------------------------------------------------------------- 1 | # Shoutout Demo - App Engine Tutorial (with Python and Flask) 2 | 3 | In this tutorial, we'll start by following the YouTube tutorial below, in order to set the initial working environment. By following the instructions, you should have a working *Hello World* App Engine/Flask project. 4 | 5 | [![IMAGE ALT TEXT HERE](http://img.youtube.com/vi/FRI3QGNWJYI/0.jpg)](http://www.youtube.com/watch?v=FRI3QGNWJYI) 6 | 7 | Let's start by creating a ```models.py``` module with a Shout class to represent a single Shout: 8 | ```python 9 | from google.appengine.ext import ndb 10 | 11 | 12 | class Shout(ndb.Model): 13 | name = ndb.StringProperty(required=True) 14 | message = ndb.TextProperty(required=True, indexed=False) 15 | ``` 16 | 17 | Next, we'll create the backend for our application at ```main.py```, to handle POST requests that add new shouts, and GET requests that display existing shouts: 18 | ```python 19 | import sys 20 | from models import Shout 21 | import os 22 | sys.path.insert(1, os.path.join(os.path.abspath('.'), 'venv/lib/python2.7/site-packages')) 23 | from flask import Flask, render_template, request, redirect 24 | 25 | app = Flask(__name__) 26 | 27 | @app.route("/", methods=['GET']) 28 | def index(): 29 | shouts = Shout.query() 30 | return render_template('index.html', shouts=shouts) 31 | 32 | @app.route("/post", methods=['POST']) 33 | def post(): 34 | s = Shout(name=request.form['name'], message=request.form['message']) 35 | s.put() 36 | return redirect('/') 37 | 38 | if __name__ == "__main__": 39 | app.run() 40 | ``` 41 | 42 | Lastly, we'll create the frontend of our application - the ```templates/index.html``` template file. This page will include a *form* to input new shouts, and will display all the existing shouts: 43 | ```html 44 | 45 | 46 | 47 | 48 | Shoutout 49 | 50 | 51 |
52 | name: 53 | message: 54 | 55 |
56 | {% for shout in shouts %} 57 | {{ shout.name }} - {{ shout.message }}
58 | {% endfor %} 59 | 60 | 61 | ``` 62 | 63 | Note, that in order to deploy your application to App Engine, you need to make sure your **application ID** is configured correctly at ```app.yaml``` as follows: 64 | ``` 65 | application: appenginedemo 66 | version: 1 67 | runtime: python27 68 | api_version: 1 69 | threadsafe: yes 70 | 71 | handlers: 72 | - url: /favicon\.ico 73 | static_files: favicon.ico 74 | upload: favicon\.ico 75 | 76 | - url: .* 77 | script: main.app 78 | 79 | libraries: 80 | - name: webapp2 81 | version: "2.5.2" 82 | 83 | ``` 84 | 85 | ### How do I continue from here? 86 | [Flask](http://flask.pocoo.org/) is a very simple web framework for Python. There are several good resources to learn Flask: 87 | 88 | - [Official documentation](http://flask.pocoo.org/docs/) 89 | - [Flask by Example](https://www.youtube.com/watch?v=FGrIyBDQLPg) is a great YouTube tutorial, with all the [code availible online](https://github.com/miguelgrinberg/flask-pycon2014) as well 90 | - [Explore Flask](http://exploreflask.com/) online book 91 | 92 | Possible alternatives to Flask are the App Engine default [webapp2](https://cloud.google.com/appengine/docs/python/gettingstartedpython27/usingwebapp) and the popular [Django](https://www.djangoproject.com/). 93 | -------------------------------------------------------------------------------- /resources/tutorials/heroku nodejs with mongodb shoutout.md: -------------------------------------------------------------------------------- 1 | # Shoutout Demo - Heroku Tutorial (with Node.js and MongoDB) 2 | 3 | ### Initial Heroku Setup 4 | First, create a [free account on Heroku](https://signup.heroku.com/signup/dc). 5 | 6 | Make sure you have [Node.js](http://nodejs.org/) and [npm](https://github.com/npm/npm#synopsis) installed (instructions for installing Node with the use of NVM can be found [here](http://alexeyza.com/blog/2015/09/28/getting-started-with-node-dot-js/)). 7 | 8 | Download and install [the Heroku Toolbelt](https://devcenter.heroku.com/articles/getting-started-with-python#set-up). Once installed, you can use the ```heroku login``` command to connect to your Heroku account. 9 | 10 | ### Creating the Shoutout Application 11 | 12 | In this tutorial we will use the NoSQL database called [MongoDB](http://www.mongodb.org/). Download and install MongoDB (installation instructions can be found on the [MongoDB website](http://www.mongodb.org/downloads)). 13 | 14 | Create a new directory for your application: 15 | ```bash 16 | mkdir shoutout 17 | cd shoutout 18 | ``` 19 | 20 | Install the following packages with ```npm```: 21 | ```bash 22 | npm install express 23 | npm install body-parser 24 | npm install ejs 25 | npm install mongoose 26 | ``` 27 | 28 | Generate the ```package.json``` file by using: 29 | ```bash 30 | npm init 31 | ``` 32 | The created file should look similar to this: 33 | ```json 34 | { 35 | "name": "shoutout", 36 | "version": "0.0.1", 37 | "description": "shoutout demo", 38 | "scripts": { 39 | "start": "node main.js" 40 | }, 41 | "author": "", 42 | "license": "MIT", 43 | "dependencies": { 44 | "body-parser": "^1.8.2", 45 | "express": "^4.9.3", 46 | "mongoose": "^3.8.16", 47 | "ejs": "^1.0.0" 48 | }, 49 | "engines": { 50 | "node": "0.10.x" 51 | }, 52 | "main": "main.js", 53 | "devDependencies": {} 54 | } 55 | ``` 56 | 57 | Create and assign a Heroku application ID. We will ask Heroku to create an application ID of ```shoutoutdemo``` (assuming it is available): 58 | ```bash 59 | git init 60 | heroku create shoutoutdemo 61 | ``` 62 | 63 | Add the MongoHQ addon to your Heroku application: 64 | ```bash 65 | heroku addons:add mongohq 66 | ``` 67 | **Note, there is a need to verify your billing information on Heroku in order to use addons**. MongoHQ used to be free (for 512mb), however, it's no longer free -- please use mLab MongoDB addon on heroku instead. 68 | 69 |
70 | Next, we'll create the backend for our application by creating ```main.js```, to handle POST requests that add new shouts, and GET requests that display existing shouts: 71 | ```js 72 | var express = require('express'); 73 | var mongoose = require('mongoose'); 74 | var bodyParser = require('body-parser'); 75 | 76 | mongoose.connect(process.env.MONGOHQ_URL || 'mongodb://localhost/shoutout'); 77 | 78 | // define model 79 | var Shout = mongoose.model('Shout', { name: String, message: String }); 80 | 81 | // setup middleware 82 | var app = express(); 83 | app.use(bodyParser.urlencoded({ extended: false })) 84 | app.engine('html', require('ejs').renderFile); 85 | app.set('view engine', 'html'); 86 | 87 | 88 | app.get('/', function (req,res){ 89 | Shout.find(function(err, shouts) { 90 | if (err) 91 | return console.error(err); 92 | res.render('index.html', { shouts : shouts }); 93 | }); 94 | }); 95 | 96 | app.post('/post', function (req, res) { 97 | 98 | var name = req.body.name; 99 | var message = req.body.message; 100 | var shout = new Shout({ name: name, message: message }); 101 | shout.save(function(err) { 102 | if (err) 103 | return console.error(err); 104 | }); 105 | res.redirect(301, '/'); 106 | }); 107 | 108 | var port = process.env.PORT || 3000; 109 | app.listen(port); 110 | console.log('started on port', port); 111 | ``` 112 | 113 | Lastly, we'll create the frontend of our application - the ```views/index.html``` template file. This page will include a *form* to input new shouts, and will display all the existing shouts. The templating engine we use is [ejs](https://github.com/visionmedia/ejs) ([jade](http://jade-lang.com/) is an alternative templating engine): 114 | ```html 115 | 116 | 117 | 118 | 119 | Shoutout 120 | 121 | 122 |
123 | name: 124 | message: 125 | 126 |
127 | <% shouts.forEach(function(shout){ %> 128 | <%= shout.name %> - <%= shout.message %>
129 | <% }); %> 130 | 131 | 132 | ``` 133 | 134 | At this point, you can test your app locally, by typing in command line: 135 | ``` 136 | node main.js 137 | ``` 138 | And then opening [localhost:3000](http://localhost:3000) (3000 is the port number used by Node) 139 | 140 | 141 | Lastly, we need to create a ```Procfile``` that contains: 142 | ``` 143 | web: node main.js 144 | ``` 145 | 146 | Deploy to Heroku and test: 147 | ```bash 148 | git add main.js packages.json Procfile views/ 149 | git commit -m "initial commit" 150 | git push heroku master 151 | heroku open 152 | ``` 153 | 154 | We can see the live application running on Heroku at ```http://.herokuapp.com```, in our case it would be ```http://shoutoutdemo.herokuapp.com```. We can manage our application with the [Heroku dashboard](https://dashboard-next.heroku.com/apps). 155 | 156 | ### How do I continue from here? 157 | 158 | For beginners with Node.js, you can watch the following YouTube tutorial for Node.js and [Express.js](http://expressjs.com/). 159 | [![Node.js & Express 101](http://img.youtube.com/vi/BN0JlMZCtNU/0.jpg)](http://www.youtube.com/watch?v=BN0JlMZCtNU) 160 | 161 | You should also check out [this webinar](https://www.youtube.com/watch?v=xuXIBSa_7j4), which shows how to use [WebStorm](http://www.jetbrains.com/webstorm/) (FREE for students) with Node.js and Heroku. -------------------------------------------------------------------------------- /resources/tutorials/heroku python with flask mongodb shoutout.md: -------------------------------------------------------------------------------- 1 | # Shoutout Demo - Heroku Tutorial (with Python, MongoDB and Flask) 2 | 3 | ### Initial Heroku Setup 4 | First, create a [free account on Heroku](https://signup.heroku.com/signup/dc). 5 | 6 | Next, install Python, Pip and Virtualenv based on your operation system: [Windows](http://docs.python-guide.org/en/latest/starting/install/win/), [OS X](http://docs.python-guide.org/en/latest/starting/install/osx/), or [Linux](http://docs.python-guide.org/en/latest/starting/install/linux/). 7 | 8 | Download and install [the Heroku Toolbelt](https://devcenter.heroku.com/articles/getting-started-with-python#set-up). Once installed, you can use the ```heroku login``` command to connect to your Heroku account. 9 | 10 | ### Creating An Initial Hello World Application 11 | 12 | Create a new directory for your application: 13 | ```bash 14 | mkdir shoutout 15 | cd shoutout 16 | ``` 17 | Create a new virtual environment for your application: 18 | ```bash 19 | virtualenv venv 20 | ``` 21 | Activate the virtual environment: 22 | ```bash 23 | source venv/bin/activate 24 | ``` 25 | This allows to install new Python packages with ```pip``` in the virtual environment of the current project without affecting other projects. In order to deactivate (when you're done working on the project) use the ```deactivate``` command. 26 | 27 | Install flask: 28 | ```bash 29 | pip install flask 30 | ``` 31 | 32 | Create a basic backend for your application at ```main.py```: 33 | ```python 34 | import os 35 | from flask import Flask 36 | 37 | app = Flask(__name__) 38 | 39 | @app.route("/") 40 | def hello(): 41 | return "Hello world!" 42 | 43 | if __name__ == "__main__": 44 | port = int(os.environ.get("PORT", 5000)) 45 | app.run(host='0.0.0.0', port=port) 46 | ``` 47 | 48 |
49 | Now, there are two additional files required to deploy to Heroku: ```requirements.txt``` and ```Procfile```. The requirements file will include the package names needed for our application to run. We can generate it using the following command: 50 | ```bash 51 | pip freeze > requirements.txt 52 | ``` 53 | This should create a ```requirements.txt``` file that is similar to this: 54 | ``` 55 | Flask==0.10.1 56 | Jinja2==2.7.3 57 | MarkupSafe==0.23 58 | Werkzeug==0.9.6 59 | argparse==1.2.1 60 | itsdangerous==0.24 61 | wsgiref==0.1.2 62 | 63 | ``` 64 | 65 | Next, create a file named ```Procfile``` to include the following: 66 | ``` 67 | web: python main.py 68 | ``` 69 | 70 |
71 | Now, let's deploy your *Hello World* application to Heroku to make sure everything works so far. We will ask Heroku to create an application ID of ```shoutoutdemo``` (assuming it is available). 72 | ```bash 73 | git init 74 | git add main.py requirements.txt Procfile 75 | git commit -m "initial commit" 76 | heroku create shoutoutdemo 77 | git push heroku master 78 | heroku open 79 | ``` 80 | We can see the live application running on Heroku at ```http://.herokuapp.com```, in our case it would be ```http://shoutoutdemo.herokuapp.com```. We can manage our application with the [Heroku dashboard](https://dashboard-next.heroku.com/apps). 81 | 82 | ### Creating the Shoutout Application 83 | 84 | In this tutorial we will use the NoSQL database called [MongoDB](http://www.mongodb.org/). Download and install MongoDB (installation instructions can be found on the [MongoDB website](http://www.mongodb.org/downloads)). 85 | 86 | Install [pymongo](http://api.mongodb.org/python/current/): 87 | ```bash 88 | pip install pymongo 89 | ``` 90 | 91 | Update the ```requirements.txt``` file to include pymongo: 92 | ```bash 93 | pip freeze > requirements.txt 94 | ``` 95 | 96 | Add the MongoHQ addon to your Heroku application: 97 | ```bash 98 | heroku addons:add mongohq 99 | ``` 100 | **Note, there is a need to verify your billing information on Heroku in order to use addons**, even though MongoHQ is free to use for 512mb ([a possible workaround](http://www.elliotbradbury.com/use-mongohq-heroku-without-verifying-account/)). 101 | 102 | Find the ID of the database MongoHQ has assigned for your application with the following command: 103 | ```bash 104 | heroku config 105 | ``` 106 | The output should be similar to this: 107 | ``` 108 | mongodb://:@kahana.mongohq.com:10087/app29843323 109 | ``` 110 | In which case, the database ID is the last part - ```app29843323```. We will use it to set the connection later. 111 | 112 |
113 | Next, we'll create the backend for our application by modifying ```main.py```, to handle POST requests that add new shouts, and GET requests that display existing shouts: 114 | ```python 115 | import os 116 | from flask import Flask, render_template, request, redirect 117 | import pymongo 118 | from pymongo import MongoClient 119 | 120 | 121 | MONGO_URL = os.environ.get('MONGOHQ_URL') 122 | client = MongoClient(MONGO_URL) 123 | 124 | # Specify the database 125 | db = client.app29843323 126 | collection = db.shoutouts 127 | 128 | app = Flask(__name__) 129 | 130 | @app.route("/", methods=['GET']) 131 | def index(): 132 | shouts = collection.find() 133 | return render_template('index.html', shouts=shouts) 134 | 135 | @app.route("/post", methods=['POST']) 136 | def post(): 137 | shout = {"name":request.form['name'], "message":request.form['message']} 138 | shout_id = collection.insert(shout) 139 | return redirect('/') 140 | 141 | 142 | if __name__ == "__main__": 143 | port = int(os.environ.get("PORT", 5000)) 144 | app.run(host='0.0.0.0', port=port) 145 | ``` 146 | 147 | Lastly, we'll create the frontend of our application - the ```templates/index.html``` template file. This page will include a *form* to input new shouts, and will display all the existing shouts: 148 | ```html 149 | 150 | 151 | 152 | 153 | Shoutout 154 | 155 | 156 |
157 | name: 158 | message: 159 | 160 |
161 | {% for shout in shouts %} 162 | {{ shout.name }} - {{ shout.message }}
163 | {% endfor %} 164 | 165 | 166 | ``` 167 | 168 | Deploy to Heroku and test: 169 | ```bash 170 | git add main.py requirements.txt templates/ 171 | git commit -m "add MongoDB" 172 | git push heroku master 173 | heroku open 174 | ``` 175 | 176 | ### How do I continue from here? 177 | [Flask](http://flask.pocoo.org/) is a very simple web framework for Python. There are several good resources to learn Flask: 178 | 179 | - [Official documentation](http://flask.pocoo.org/docs/) 180 | - [Flask by Example](https://www.youtube.com/watch?v=FGrIyBDQLPg) is a great YouTube tutorial, with all the [code availible online](https://github.com/miguelgrinberg/flask-pycon2014) as well 181 | - [Explore Flask](http://exploreflask.com/) online book 182 | 183 | A popular alternative to Flask is [Django](https://www.djangoproject.com/). -------------------------------------------------------------------------------- /resources/ui_ux_thinking_about_the_user.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alexeyza/startup-programming/362e7cb41aff80c04c2a7ed83b13dcd4000780a5/resources/ui_ux_thinking_about_the_user.pdf -------------------------------------------------------------------------------- /teams and projects.md: -------------------------------------------------------------------------------- 1 | # Teams and Projects 2 | 3 | ### SignCoach ([view on GitHub](https://github.com/TaniaFerman/SignTalker)) 4 | ![Logo](images/signcoach_logo.png) 5 | **Website:** [http://signcoach.me/](http://signcoach.me/) 6 | **Description:** American sign language (ASL) learning and communication app for mobile. 7 | **Members**: 8 | 9 | - Amanda Dash [[memet666@gmail.com](mailto:memet666@gmail.com)] 10 | - Nora Huang [[norahuangsun@gmail.com](mailto:norahuangsun@gmail.com)] 11 | - Dany Cabrera [[dcabrera@uvic.ca](mailto:dcabrera@uvic.ca)] 12 | - Tristan Partridge [[tristanp2@hotmail.com](mailto:tristanp2@hotmail.com)] 13 | - Maria Ferman [[tania_ferman@hotmail.com](mailto:tania_ferman@hotmail.com)] 14 | 15 | **Presentations**: 16 | 17 | - Idea proposal [slides](https://speakerdeck.com/startupprogramming/signtalker-idea-proposal) 18 | - Milestone 1 [slides](https://speakerdeck.com/startupprogramming/signtalker-milestone-1) 19 | - Milestone 2 [slides](https://speakerdeck.com/startupprogramming/signcoach-formerly-signtalker-milestone-2) 20 | - Milestone 3 [slides](https://speakerdeck.com/startupprogramming/signcoach-milestone-3) 21 | 22 | --- 23 | 24 | ### Bumerang ([view on GitHub](https://github.com/CFedderly/bumerang-client)) 25 | logo 26 | **Website:** [http://bumerangapp.paperplane.io/](http://bumerangapp.paperplane.io/) 27 | **Description:** A mobile app for connecting people that help each other by lending items in need --- someone got you covered! 28 | **Members**: 29 | 30 | - Charlotte Fedderly [[charlottefedderly@gmail.com](mailto:charlottefedderly@gmail.com)] 31 | - Conner Leverett [[connerleverett@gmail.com](mailto:connerleverett@gmail.com)] 32 | - Daniel Templeman [[daniel.templeman@gmail.com](mailto:daniel.templeman@gmail.com)] 33 | - Mavis Brace [[mavislauren@gmail.com](mailto:mavislauren@gmail.com)] 34 | - Tyler Potter [[tylerjamespotter@gmail.com](mailto:tylerjamespotter@gmail.com)] 35 | - Brady Schnell [[bradyschnell@gmail.com](mailto:bradyschnell@gmail.com)] 36 | 37 | **Presentations**: 38 | 39 | - Idea proposal [slides](https://speakerdeck.com/startupprogramming/boomerang-idea-proposal) 40 | - Milestone 1 [slides](https://speakerdeck.com/startupprogramming/bumerang-milestone-1) 41 | - Milestone 2 [slides](https://speakerdeck.com/startupprogramming/bumerang-milestone-2) 42 | - Milestone 3 [slides](https://speakerdeck.com/startupprogramming/bumerang-milestone-3) 43 | 44 | --- 45 | 46 | ### SmirkSpace ([view on GitHub](https://github.com/smirkspace/smirkspace)) 47 | ![Logo](images/smirkspace_logo.png) 48 | **Website:** [http://www.smirkspace.com/](http://www.smirkspace.com/) 49 | **Description:** Smirkspace is an app that provides a place for people with similar interests to connect. Targeting niche groups in the community; people whose interests are rare enough that they won’t necessarily find congenial company without intentionally seeking it out. 50 | **Members**: 51 | 52 | - Dahv Reinhart [[dahvreinhart@gmail.com](mailto:dahvreinhart@gmail.com)] 53 | - Kolby Chapman [[kol_j@hotmail.com](mailto:kol_j@hotmail.com)] 54 | - Madeline Petersen [[madpeter@uvic.ca](mailto:madpeter@uvic.ca)] 55 | - HaltonO [[sumari@uvic.ca](mailto:sumari@uvic.ca)] 56 | - Tim Baker [[tbakerx@gmail.com](mailto:tbakerx@gmail.com)] 57 | - Bridget Rassell [[bridget.rassell@gmail.com](mailto:bridget.rassell@gmail.com)] 58 | 59 | **Presentations**: 60 | 61 | - Idea proposal [slides](https://speakerdeck.com/startupprogramming/smirkspace-idea-proposal) 62 | - Milestone 1 [slides](https://speakerdeck.com/startupprogramming/smirkspace-milestone-1) 63 | - Milestone 2 [slides](https://speakerdeck.com/startupprogramming/smirkspace-milestone-2) 64 | - Milestone 3 [slides](https://speakerdeck.com/startupprogramming/smirkspace-milestone-3) 65 | 66 | --- 67 | 68 | ### DayTomato ([view on GitHub](https://github.com/fridayideas)) 69 | ![Logo](images/daytomato_logo.png?v=3&s=100) 70 | **Website:** [https://fridayideas.github.io/](https://fridayideas.github.io/) 71 | **Description:** DayTomato is a mobile application designed for locals. DayTomato provides the opportunity for locals to share their opinion on businesses, activities, restaurants, anything! Automate your day with the trip builder, provided to you by locals. 72 | **Members**: 73 | 74 | - Ryan Samarajeewa [[ryan.samarajeewa@gmail.com](mailto:ryan.samarajeewa@gmail.com)] 75 | - Nick Addison [[Nick.b.addison@gmail.com](mailto:Nick.b.addison@gmail.com)] 76 | - James Woo [[jamesjaywoo@gmail.com](mailto:jamesjaywoo@gmail.com)] 77 | - Brian Chen [[brianchen.czq@gmail.com](mailto:brianchen.czq@gmail.com)] 78 | - Zane Li [[zanelib1@gmail.com](mailto:zanelib1@gmail.com)] 79 | - Alix Voorthuyzen [[alix4000@shaw.ca](mailto:alix4000@shaw.ca)] 80 | 81 | **Presentations**: 82 | - Idea proposal [slides](https://speakerdeck.com/startupprogramming/daytomate-idea-proposal) 83 | - Milestone 1 [slides](https://speakerdeck.com/startupprogramming/daytomato-milestone-1) and [demo](https://www.youtube.com/watch?v=hr2p28WS2qM) 84 | - Milestone 2 [slides](https://speakerdeck.com/startupprogramming/daytomato-milestone-2) 85 | - Milestone 3 [slides](https://speakerdeck.com/startupprogramming/daytomato-milestone-3) 86 | 87 | --- 88 | 89 | ### ClubHub ([view on GitHub](https://github.com/Wubbadub/ClubHub/)) 90 | ![Logo](https://rawgit.com/Wubbadub/ClubHub/develop/assets/clubhub.svg) 91 | **Website:** [http://tryclubhub.com/](http://tryclubhub.com/) 92 | **Description:** ClubHub streamlines the setup and maintenance of engaging club websites. A platform that allows university clubs to create a club page and students to easily find info about any club. 93 | **Members**: 94 | 95 | - Kelsey Legault [[kelsey.legault@gmail.com](mailto:kelsey.legault@gmail.com)] 96 | - Brendon Earl [[bearl@uvic.ca](mailto:bearl@uvic.ca)] 97 | - Andrew Stocks [[agstocks@uvic.ca](mailto:agstocks@uvic.ca)] 98 | - Juan Carlos Gallegos [[jcgallegdup@gmail.com](mailto:jcgallegdup@gmail.com)] 99 | - Josh Pearson [[joshdpearson@gmail.com](mailto:joshdpearson@gmail.com)] 100 | - Brynn Hawker [[bhawker@uvic.ca](mailto:bhawker@uvic.ca)] 101 | 102 | **Presentations**: 103 | 104 | - Idea proposal [slides](https://speakerdeck.com/startupprogramming/clubhub-idea-proposal) 105 | - Milestone 1 [slides](https://speakerdeck.com/startupprogramming/clubhub-milestone-1) 106 | - Milestone 3 [slides](https://speakerdeck.com/startupprogramming/clubhub-milestone-3) 107 | 108 | --- 109 | 110 | # Alumni 111 | 112 | ## 2014 113 | 114 | ### [beLocal](https://github.com/beLocalVictoria) 115 | ![beLocal Logo](past semesters/fall 2014/images/belocal.png) 116 | **Website:** [belocalvictoria.me](https://belocalvictoria.me) 117 | **Description:** A web application that connects Local Vendors with the community by allowing them to post information about their business, what items they produce, and where they will be selling. 118 | **Members**: 119 | 120 | - Scott Low [[scouter32@gmail.com](mailto:scouter32@gmail.com)] 121 | - Samuel Navarrete [[cakebrewery@gmail.com](mailto:cakebrewery@gmail.com)] 122 | - Riz Panjwani [[panjwani.riz@gmail.com](mailto:panjwani.riz@gmail.com)] 123 | - Carly Lebeuf [[carly.lebeuf@gmail.com](mailto:carly.lebeuf@gmail.com)] 124 | - Jyoti Sheoran [[sheoranjs24@gmail.com](mailto:sheoranjs24@gmail.com)] 125 | 126 | --- 127 | 128 | ### [Power Planner](https://github.com/prashantchhabra89/Alternate-Power-Source-Property-Mapper) 129 | ![PowerManager Logo](past semesters/fall 2014/images/powerplanner.png) 130 | **Website:** [power-planner.appspot.com](http://power-planner.appspot.com/) 131 | **Description:** Putting power in people's hands for finding sites for sustainable electricity generation. 132 | **Members**: 133 | 134 | - Charlie Guan [[sirius890928@gmail.com](mailto:sirius890928@gmail.com)] 135 | - Jonathan Lam [[lamjwe@uvic.ca](mailto:lamjwe@uvic.ca)] 136 | - Daniel Faulkner [[danielafaulkner@gmail.com](mailto:danielafaulkner@gmail.com)] 137 | - Chuan Yun Loe [[cyloe3@gmail.com](mailto:cyloe3@gmail.com)] 138 | - Prashant Chhabra [[prashant.chhabra89@gmail.com](mailto:prashant.chhabra89@gmail.com)] 139 | 140 | --- 141 | 142 | ### [Flybrary](https://github.com/Brkk/textchanger) 143 | ![Flybrary Logo](past semesters/fall 2014/images/flybrary.png) 144 | **Website:** [flybrary.ca](http://flybrary.ca/) 145 | **Description:** The peoples network for sharing textbooks, connecting you with community members that have the books you need. 146 | **Members**: 147 | 148 | - Jordan Lerner [[jordan.m.lerner@gmail.com](mailto:jordan.m.lerner@gmail.com)] 149 | - Logan Masniuk [[logan.masniuk@gmail.com](mailto:logan.masniuk@gmail.com)] 150 | - Berk Yazicioglu [[yaziciogluberk@gmail.com](mailto:yaziciogluberk@gmail.com)] 151 | - Paulo Tabarro [[bobleujr@hotmail.com](mailto:bobleujr@hotmail.com)] 152 | - James Hedin [[jhedin10@gmail.com](mailto:jhedin10@gmail.com)] 153 | 154 | --- 155 | 156 | ### [linksupp](https://github.com/nfeliciano/mangiamo) 157 | ![linksupp Logo](past semesters/fall 2014/images/linksupp.png) 158 | **Website:** [www.linksupp.com](http://www.linksupp.com/) 159 | **Description:** A web application that is aimed for business savvy, outgoing groups of people who are looking for opportunities to meet new contacts, expand their friend base by meeting people informally for a meal. 160 | **Members**: 161 | 162 | - Christopher Cook [[cjcook@uvic.ca](mailto:cjcook@uvic.ca)] 163 | - Hardeep Kevin Gill [[hkevgill@uvic.ca](mailto:hkevgill@uvic.ca)] 164 | - Jesper Rage [[jrage@uvic.ca](mailto:jrage@uvic.ca)] 165 | - Lloyd Montgomery [[lloydrmontgomery@gmail.com](mailto:lloydrmontgomery@gmail.com)] 166 | - Noel Feliciano [[felicianonoel@gmail.com](mailto:felicianonoel@gmail.com)] -------------------------------------------------------------------------------- /testimonials.md: -------------------------------------------------------------------------------- 1 | # Testimonials 2 | 3 | ![alt text](images/uvic2014a.jpg "Cliff McCollum giving a talk to the students") 4 | 5 | >"I think this is a terrific course, and the students will likely learn more from this than any other undergraduate course they take; and I feel I've learned as much as the students too" - Ian Bull, EclipseSource, 2014/2015 mentor 6 | 7 | ### Students describing the course (2014/2015 Fall semester - University of Victoria) 8 | >"Startup Programming is the most applicable and interesting course I have taken at the University of Victoria as it allows students to grow their ideas into projects that have the potential to make a huge impact on real life customers" 9 | 10 | >"I've learned more in start-up class about real life software development than in any other course" 11 | 12 | >"A course that aids in the development of real life, practical skills needed to be successful in the software engineering industry" 13 | 14 | >"This course will consume your life in a good way" 15 | 16 | >"StartUp Programming is an extraordinary experience that will shape you into a better entrepreneur, programmer, and software engineer" 17 | 18 | >"The course provided a good insight on how startup companies build a product in 4 months along with getting our own hands dirty into the hard work for building a marketable product in quick time with zero or medium knowledge of technologies!" 19 | 20 | >"This course was a great experience, and I really hope that students in upcoming terms have the opportunity to take it" 21 | 22 | ![alt text](images/uvic2014c.jpg "Students presenting their projects for Milestone 3") ![alt text](images/uvic2014g.jpg "Students presenting their projects for Milestone 3") ![alt text](images/uvic2014d.jpg "Students presenting their projects for Milestone 3") ![alt text](images/uvic2014b.jpg "Students presenting their projects for Milestone 3") ![alt text](images/uvic2014f.jpg "Peggy presenting the teams") ![alt text](images/uvic2014e.jpg "Students presenting their projects for Milestone 3") 23 | 24 | ### Students describing the course (2010/2011 and 2011/2012 - Tel Aviv University) 25 | >"Difficult but interesting, and requires a lot of effort" 26 | 27 | >"The best preparation for the real world, that applies everything we learned" 28 | 29 | >"An opportunity to learn a lot of new technologies and areas, unlike anything else I've done at the university" 30 | 31 | >"Probably the single most significant thing I've done during my degree ..." 32 | 33 | >"The workshop is challenging and requires a looot of time and effort, but is worth the end result, and the knowledge acquired in the process" 34 | 35 | ![students presenting at Google](images/tau2011a.jpg "Students visiting the Tel Aviv Google offices - 2011") ![students presenting at Google](images/tau2011b.jpg "Students visiting the Tel Aviv Google offices - 2011") ![students presenting at Google](images/tau2010.jpg "Students presenting the projects at Google - 2010") --------------------------------------------------------------------------------