/info441-wi19

INFO 441 - UW iSchool - Winter 2019

Primary LanguageHTML

INFO-441 Server-Side Development

This is the homepage for the UW iSchool Winter 2019 Server-side development course.

Dive deeply into the world of server-side development. Build your own web application. 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 in a sophisticated web applications.

Team

Instructor: Nigini Oliveira

TA's: Anirudh Kumar Subramanyam & Bao Dinh

(The team wants to thank Dave Stearns for making his material available as a base for this course!)

Office Hours

Anirudh will be available Mondays from 12:30 to 2:30 and Fridays from 11:30 to 1:30 at MGH440.

Bao will be available Mondays and Wednesdays from 1:30 to 3:30 at MGH440.

Nigini will be available under request. (Please send a message with at least a day in advance via Canvas with a topic you need to discuss and a couple of time slots you can meet.)

Communication

All communication should happen through Announcements and Discussions on Canvas.

Schedule

Below, each day have a set of required sources that we want you to read/watch before coming to class. These will orient and prepare you for our in-class coding exercises. If you don't do this, you'll get lost rather quickly.

Date Material
1/8 Welcome to the Server-Side
The HyperText Transfer Protocol
Environment Variables
Introduction to Go
The Go Language
Go Web Servers
!! Exercise
!! Week Assignment
LAB How to 411?
1/10 Go Web Services
Go Slices and Maps
Go Structs and JSON
Cross-Origin Resource Sharing
!! Exercise
1/15 Docker
Containerizing with Docker
Dockerfile Best Practices
Docker restart policies
!! Exercise
LAB Docker Practice
1/17 Deploying & Encrypting
Communicating Securely with HTTPS
Deploying to Digital Ocean
Deploying to Amazon Web Services (AWS)
!! Exercise
1/22 Automated Tests
Automated Testing in Go
The Cover Story
!!Exercise
LAB Automated Testing Practice
1/24 Tracking Sessions
Tracking Sessions
Redis Datatypes
Docker Networks
!!Exercise
1/29 Persisting Data
Talking to Databases from Go
Sharing Values with Go Handlers
Authenticating Users
!!Exercise
LAB Postman Testing
1/31 Catch-Up + Project Bootstrap
2/5 REST APIs + Middleware
Middleware Patterns in Go
REST APIs
!!Exercise
LAB Middleware Practice
2/7 Trie Indexes
The Trie Data Structure
Protecting Data Structures with Mutexes
!!Exercise
2/12 Microservices
NGINX 7-Part article series on Microservices
Fast Delivery Talk by Adrian Cockcroft
Migrating to Microservices Talk by Adrian Cockcroft
httputil.ReverseProxy
!!Exercise
LAB Service Discovery
2/14 Node.js Microservices
Node.js Microservices
Express.js Basic Routing
Node.js MySQL Driver Overview
2/19 Microservices catchup + Project Ideas checkup
LAB Microservices
2/21 Message Queues
RabbitMQ Tutorial for Go
RabbitMQ Tutorial for Node.js
Use case: Asynchronous Tasks in Python with Celery and RabbitMQ
2/26 Web Sockets
TALK: Real-life WebSocket Use Cases and Experiences
Gorilla Web Socket Package
Writing WebSocket Client Applications
LAB Homework Time
2/28 Concurrent Programming with Channels
Rob Pike on Concurrency is not Parallelism (slides from talk)
Rob Pike on Go Concurrency Patterns (slides from talk)
Concurrency
3/5 Homework Time
LAB Homework Time
3/7 Homework Time
3/12 Homework Time
3/14 Project Presentations???
3/19 Project Presentations!!!

Grading

This course will be evaluated based on weekly assignments (10) and class+lab exercises (~18).

Assignments worth 90% of the grade and will be released every Tuesday morning. The submission deadline will be every Monday night (so you will have a week to work on each of those). Exercises compose the other 10% of the final grade and will be only doable by students present to classes. Because of that, you can miss up to 3 of those and still get full points.

In total, each week you will have an assignment that worths 100 points and two exercises worthing ten.

Calculation of Final Grades

Canvas tracks grades on a percentage scale. To convert those to a 4.0 scale we will use the standard iSchool conversion chart.

BTW: Canvas is already configured to calculate your final grade considering the previously described 90/10 grading weights and this conversion scale.

Late Work

Since each assignment 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.

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 5 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.

If something tragic occurs during the quarter, please let us know and we can work out something.

Course Rules

In addition to the standard iSchool and UW academic policies that apply to all of our courses, the following rules also apply to this course.

Plagiarism

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.

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 why it works. Otherwise you won't learn anything.

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.

If we determine that you plagiarized code, you will get an automatic zero 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.