forked from drstearns/info441
-
Notifications
You must be signed in to change notification settings - Fork 8
/
syllabus.html
executable file
·297 lines (263 loc) · 16 KB
/
syllabus.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
<p><em>Dive deeply into the world of server-side development. Build your own web server. Deploy it to the cloud. Authenticate users. Authorize and validate persistent data. Build retrieval indexes for fast searching. Notify clients of changes in real-time. Extend your system with a microservice architecture. Put it all together to build sophisticated full-stack web applications.</em></p>
<h2>Teaching Team</h2>
<div class="content-box">
<div class="grid-row">
<div class="col-xs-12 col-lg-6" style="clear:both;margin-bottom:0.5em">
<div>
<img src="https://www.gravatar.com/avatar/0e58cf2f03c9a0a5d6965154837cd595?s=128" alt="Dave Stearns"
style="width:128px;height:128px;float:left;margin-right:1em"/>
<div><strong><a href="https://ischool.uw.edu/people/faculty/dlsinfo">Dave Stearns</a></strong></div>
<div>Senior Lecturer</div>
<div><a href="mailto:dlsinfo@uw.edu">dlsinfo@uw.edu</a></div>
<div>Visit: Tuesdays 10:30-12:20</div>
<div>or 1:30-3:20, in MGH 330-A</div>
</div>
</div>
<div class="col-xs-12 col-lg-6" style="clear:both;margin-bottom:0.5em">
<div>
<img src="https://www.gravatar.com/avatar/cf22063adb17e4e0b9e2d60500b818fe?s=128" alt="Bredan Kellogg"
style="width:128px;height:128px;float:left;margin-right:1em"/>
<div><strong>Brendan Kellogg</strong></div>
<div>INFO Major</div>
<div><a href="mailto:brendan6@uw.edu">brendan6@uw.edu</a></div>
<div>Visit: Tuesdays, 5:00-7:00</div>
<div>in the TE Lab</div>
</div>
</div>
<div class="col-xs-12 col-lg-6" style="clear:both;margin-bottom:0.5em">
<div>
<img src="https://www.gravatar.com/avatar/28521494ce9da7d927333c96f5ec4e28?s=128" alt="Ethan Anderson"
style="width:128px;height:128px;float:left;margin-right:1em"/>
<div><strong>Ethan Anderson</strong></div>
<div>INFO Major</div>
<div><a href="mailto:aethan@uw.edu">aethan@uw.edu</a></div>
<div>Visit: Mondays, 2:00-4:00</div>
<div>in the TE Lab</div>
</div>
</div>
</div>
</div>
<h2 id="info344-comm" style="clear:both">Communication</h2>
<p>We have setup a <a href="https://info344-s18.slack.com">Slack team</a> for the course that you can use to ask questions and get help. We will invite you to join this team near the start of the quarter.</p>
<h2 id="info344-schedule">Schedule</h2>
<p>Below each day are a set of required sources that I want you to read/watch <strong>before coming to class</strong>. These will orient and prepare you for our in-class coding exercises. If you don't do these, you'll get lost rather quickly.</p>
<div class="content-box">
<div class="grid-row border border-t">
<div class="col-xs-12 col-lg-4">
<h4>Mar 26: Welcome to the Server-Side</h4>
<ul>
<li><a href="https://drstearns.github.io/tutorials/http/">The HyperText Transfer Protocol</a></li>
<li><a href="https://drstearns.github.io/tutorials/env/">Environment Variables</a></li>
<li><a href="https://drstearns.github.io/tutorials/gointro/">Introduction to Go</a></li>
<li><a href="https://drstearns.github.io/tutorials/golang/">The Go Language</a></li>
<li><a href="https://drstearns.github.io/tutorials/goweb/">Go Web Servers</a></li>
<li><a href="https://docs.google.com/presentation/d/12ps1RpmW99gdhiJ8j9WOdoY9yX8kAJXO1jWcESzPslg/edit?usp=sharing">Slides</a></li>
</ul>
</div>
<div class="col-xs-12 col-lg-4">
<h4>Lab: How to 344</h4>
<div>Your wise TAs will teach you how to be successful in this course.</div>
</div>
<div class="col-xs-12 col-lg-4">
<h4>Mar 28: Go Web Services</h4>
<ul>
<li><a href="https://drstearns.github.io/tutorials/goslicemap/">Go Slices and Maps</a></li>
<li><a href="https://drstearns.github.io/tutorials/gojson/">Go Structs and JSON</a></li>
<li><a href="https://drstearns.github.io/tutorials/cors/">Cross-Origin Resource Sharing</a></li>
<li><a href="https://docs.google.com/presentation/d/1KvwBNDBJxpQcZ9bXOiEVdtRnN5m9uK0cykJ46F2G_dQ/edit?usp=sharing">Slides</a></li>
</ul>
</div>
</div>
<div class="grid-row border border-t">
<div class="col-xs-12 col-lg-4">
<h4>Apr 2: Docker</h4>
<ul>
<li><a href="https://drstearns.github.io/tutorials/docker/">Containerizing with Docker</a></li>
<li><a href="https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/">Dockerfile Best Practices</a></li>
<li><a href="https://docs.docker.com/engine/admin/start-containers-automatically/#use-a-restart-policy">Docker restart policies</a></li>
<li><a href="https://docs.google.com/presentation/d/1_nCW5_zaWeNWKIRXFyjejWv9mlzHebgCSxiHATJiPe8/edit?usp=sharing">Slides</a></li>
</ul>
</div>
<div class="col-xs-12 col-lg-4">
<h4>Lab: Docker Practice</h4>
<div>Your containerized TAs will help you practice using Docker.</div>
</div>
<div class="col-xs-12 col-lg-4">
<h4>Apr 4: Deploying & Encrypting</h4>
<ul>
<li><a href="https://drstearns.github.io/tutorials/https/">Communicating Securely with HTTPS</a></li>
<li><a href="https://drstearns.github.io/tutorials/deploy2do/">Deploying to Digital Ocean</a></li>
<li><a href="https://drstearns.github.io/tutorials/deploy2aws/">Deploying to Amazon Web Services (AWS)</a></li>
<li><a href="https://docs.google.com/presentation/d/1q-h8g0PgkcZWw0M7dxa7pFOCrtP8WWa4hc7I6BTtqTI/edit?usp=sharing">Slides</a></li>
</ul>
</div>
</div>
<div class="grid-row border border-t">
<div class="col-xs-12 col-lg-4">
<h4>Apr 9: Automated Tests</h4>
<ul>
<li><a href="https://drstearns.github.io/tutorials/testing/">Automated Testing in Go</a></li>
<li><a href="https://blog.golang.org/cover">The Cover Story</a></li>
</ul>
</div>
<div class="col-xs-12 col-lg-4">
<h4>Lab: Automated Testing Practice</h4>
<div>Your well-tested TAs will give you some practice writing automated tests.</div>
</div>
<div class="col-xs-12 col-lg-4">
<h4>Apr 11: Tracking Sessions</h4>
<ul>
<li><a href="https://drstearns.github.io/tutorials/sessions/">Tracking Sessions</a></li>
<li><a href="https://redis.io/topics/data-types-intro">Redis Datatypes</a></li>
<li><a href="https://docs.docker.com/engine/tutorials/networkingcontainers/">Docker Networks</a></li>
<li><a href="https://docs.google.com/presentation/d/1sGudT8HDHVZmQlZ0sm0V24wJh89wI8ArpqR_CNDyqTk/edit?usp=sharing">Slides</a></li>
</ul>
</div>
</div>
<div class="grid-row border border-t">
<div class="col-xs-12 col-lg-4">
<h4>Apr 16: Persisting Data</h4>
<ul>
<li><a href="https://drstearns.github.io/tutorials/godb/">Talking to Databases from Go</a></li>
<li><a href="https://drstearns.github.io/tutorials/gohandlerctx/">Sharing Values with Go Handlers</a></li>
<li><a href="https://drstearns.github.io/tutorials/authentication/">Authenticating Users</a></li>
</ul>
</div>
<div class="col-xs-12 col-lg-4">
<h4>Lab: Docker and RDBMSs</h4>
<div>Your persistent TAs will help you build a Docker image with your schema, and connect to it from another Docker container running in a private network.</div>
</div>
<div class="col-xs-12 col-lg-4">
<h4>Apr 18: REST APIs</h4>
<ul>
<li><a href="https://drstearns.github.io/tutorials/rest/">REST APIs</a></li>
</ul>
</div>
</div>
<div class="grid-row border border-t">
<div class="col-xs-12 col-lg-4">
<h4>Apr 23: Middleware</h4>
<ul>
<li><a href="https://drstearns.github.io/tutorials/gomiddleware/">Middleware Patterns in Go</a></li>
</ul>
</div>
<div class="col-xs-12 col-lg-4">
<h4>Lab: Middleware Practice</h4>
<div>Your interstitial TAs will help you practice various middleware techniques.</div>
</div>
<div class="col-xs-12 col-lg-4">
<h4>Apr 25: Trie Indexes</h4>
<ul>
<li><a href="https://drstearns.github.io/tutorials/trie/">The Trie Data Structure</a></li>
<li><a href="https://drstearns.github.io/tutorials/mutexes/">Protecting Data Structures with Mutexes</a></li>
<li><a href="https://docs.google.com/presentation/d/1UGI6oOMX1rfUC9HKGnwnBS6yiUFBjC43D_g6pFWqzSM/edit?usp=sharing">Slides</a></li>
</ul>
</div>
</div>
<div class="grid-row border border-t">
<div class="col-xs-12 col-lg-4">
<h4>Apr 30: Microservices</h4>
<ul>
<li><a href="https://www.nginx.com/blog/introduction-to-microservices/">NGINX 7-Part article series on Microservices</a></li>
<li><a class="inline_disabled" href="https://youtu.be/5qJ_BibbMLw">Fast Delivery Talk</a> by Adrian Cockcroft</li>
<li><a class="inline_disabled" href="https://youtu.be/1wiMLkXz26M">Migrating to Microservices Talk</a> by Adrian Cockcroft</li>
<li><a href="https://golang.org/pkg/net/http/httputil/#ReverseProxy">httputil.ReverseProxy</a></li>
</ul>
</div>
<div class="col-xs-12 col-lg-4">
<h4>Lab: Service Discovery</h4>
<div>Your sleuthy TAs will teach you about various service discovery approaches.</div>
</div>
<div class="col-xs-12 col-lg-4">
<h4>May 2: Node.js Microservices</h4>
<ul>
<li><a href="https://drstearns.github.io/tutorials/nodeweb/">Node.js Microservices</a></li>
<li><a href="https://expressjs.com/en/starter/basic-routing.html">Express.js Basic Routing</a></li>
<li><a href="https://github.com/mysqljs/mysql/blob/master/Readme.md">Node.js MySQL Driver Overview</a></li>
</ul>
</div>
</div>
<div class="grid-row border border-t">
<div class="col-xs-12 col-lg-4">
<h4>May 7: Java Microservices</h4>
<ul>
<li><a href="http://undertow.io/undertow-docs/undertow-docs-1.4.0/index.html">Undertow documentation</a></li>
</ul>
</div>
<div class="col-xs-12 col-lg-4">
<h4>Lab: Java Microservices</h4>
<div>We will continue learning about implementing microservices in Java during the lab time.</div>
</div>
<div class="col-xs-12 col-lg-4">
<h4>May 9: Python Microservices</h4>
<ul>
<li><a href="https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world">The Flask Mega-Tuorial Chapters 1 (Hello World), 4 (Databases), and 7 (Error Handling)</a></li>
</ul>
</div>
</div>
<div class="grid-row border border-t">
<div class="col-xs-12 col-lg-4">
<h4>May 14: Message Queues</h4>
<ul>
<li><a href="https://www.rabbitmq.com/tutorials/tutorial-one-go.html">RabbitMQ Tutorial for Go</a></li>
<li><a href="https://www.rabbitmq.com/tutorials/tutorial-one-javascript.html">RabbitMQ Tutorial for Node.js</a></li>
<li><a href="https://docs.google.com/presentation/d/1yX1VKLabsl2M-KbOYkXS-wUtwVoo5bKQbHVEfged0FU/edit?usp=sharing">Slides</a></li>
</ul>
</div>
<div class="col-xs-12 col-lg-4">
<h4>Lab: Homework Time</h4>
<div>Your helpful TAs will help you finish-up the Architecting for Microservices challenge.</div>
</div>
<div class="col-xs-12 col-lg-4">
<h4>May 16: Web Sockets</h4>
<ul>
<li><a href="https://godoc.org/github.com/gorilla/websocket">Gorilla Web Socket Package</a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_client_applications">Writing WebSocket Client Applications</a></li>
<li><a href="https://docs.google.com/presentation/d/1aYalP0OecaErtr9ymd0hhwqLLiA-P57wcgqtPOzSnQM/edit?usp=sharing">Slides</a></li>
</ul>
</div>
</div>
<div class="grid-row border border-t">
<div class="col-xs-12 col-lg-4">
<h4>May 21: Concurrent Programming with Channels</h4>
<ul>
<li><a class="inline_disabled" href="https://www.youtube.com/watch?v=cN_DpYBzKso">Rob Pike on Concurrency is not Parallelism</a> (<a href="https://talks.golang.org/2012/waza.slide#1">slides from talk</a>)</li>
<li><a class="inline_disabled" href="https://www.youtube.com/watch?v=f6kdp27TYZs">Rob Pike on Go Concurrency Patterns</a> (<a href="https://talks.golang.org/2012/concurrency.slide#1">slides from talk</a>)</li>
<li><a href="https://www.golang-book.com/books/intro/10">Concurrency</a></li>
</ul>
</div>
<div class="col-xs-12 col-lg-4">
<h4>Lab: Homework Time</h4>
<div>Your synchronized TAs will help you finish-up the Notifying Clients challenge.</div>
</div>
<div class="col-xs-12 col-lg-4">
<h4>May 23: Benchmarking and Security</h4>
<li>
<a href="https://docs.google.com/presentation/d/15kAFNWbdmAakWI31sQOiqrjIBG6gfgbVQLfpQKzLkqE/edit?usp=sharing">Slides</a>
</li>
</div>
</div>
<div class="grid-row border border-t">
<div class="col-xs-12 col-lg-8">
<h4 class="muted">May 28: Memorial Day Holiday</h4>
<div class="muted">no class or lab</div>
</div>
<div class="col-xs-12 col-lg-4">
<h4>May 30: Last Class</h4>
<div>Capstone is this evening, so we will wrap up our course and give you time to work!</div>
</div>
</div>
</div>
<h2 id="info344-rules">Course Rules</h2>
<p>In addition to the <a href="https://depts.washington.edu/infodocs/academic_policies/">standard iSchool and UW academic policies</a> that apply to all of our courses, the following rules also apply to this course.</p>
<h3 id="info344-late-policy">Late Work</h3>
<p>Turning things in late disrupts everyone's lives, including your own, so the challenges are due when they are marked as due. Since each challenge builds upon your solution for the previous one, it's imperative that you keep up. To encourage you to keep on schedule, we will deduct 10% of the possible points per 24-hour period that your submission is late, with a one hour initial grace period. For example, if the assignment is worth 100 points and your submission is between 1 and 24 hours late, the maximum you can receive on the assignment is 90 points. If your submission is between 24 and 48 hours late, the maximum you can receive is 80 points.</p>
<p>That said, we realize that sometimes life gets complicated and you might need a little extra time to finish a particular challenge. To give you a little flexibility you have 4 free late days that you can spend throughout the quarter. Each late day gives you a free 24-hour extension on the challenge. Unless you specify otherwise, we will use your late days for any work you submit late. After you exhaust all your late days, the normal late penalties will start to accrue.</p>
<p>If something tragic occurs during the quarter, please let us know and we can work out something.</p>
<h3 id="info344-plagiarism">Plagiarism</h3>
<p>We encourage collaboration, but "collaboration" doesn't mean copying other people's code and trying to pass it off as your own. Collaboration means talking through your approach to a problem, or showing someone how you make something work. You can borrow approaches or techniques, but I want you to write your own implementation.</p>
<p>Although professional web developers often reuse code they find on the web, they also take the time to understand what that code is doing, customize it to their specific context, and cite the source so that they can find it again later. If you want to use code you find on the web, please include the source URL in a comment above the code, and take the time to understand <em>why</em> it works. Otherwise you won't learn anything.</p>
<p>If we receive multiple solutions with nearly identical code, we will notice. Remember that git records a log of every commit, so we can see exactly what you committed and when. If we see you commit code that is virtually identical to code a fellow student committed earlier, it's not too difficult to figure out who is copying from whom.</p>
<p>If we determine that you plagiarized code, you will get an <strong>automatic zero</strong> on the assignment, and we will file an academic misconduct report with the Associate Dean of Academics. We will also have a very unpleasant conversation about your future in the Information School, so just don't do it. If you've simply run out of time, use your late days.</p>
<h2 id="info344-grades">Calculation of Final Grades</h2>
<p>Canvas tracks grades on a percentage scale, but the UW requires us to convert those to a 4.0 scale when reporting grades at the end of the course. I will use this <a href="https://faculty.washington.edu/dlsinfo/grading/grade-conversion-chart.pdf">standard conversion chart</a> to convert your percentage grade to the 4.0 scale. Fractional percentages will be rounded using normal numeric rounding rules before conversion.</p>