<%=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 | [](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 |
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 |
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 | [](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 |
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 | 
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 | 
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 | 
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 | 
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 | 
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 | 
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 |
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 | [](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 |
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 |
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 | [](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 |
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 | 
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 |
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 | 
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 | 
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 | 
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 | 
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 | 
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 | 
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 | 
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 | 
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 |      
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 |   
--------------------------------------------------------------------------------