1/11/2012 |
Course Overview
Syllabus review. How web software compares to traditional software. Resources: |
1/13/2012 |
Introduction to HTTP
Explanation of the Hypertext Transfer Protocol. Difference between GET and POST. Interactive examples. Resources: Further Reading: |
1/18/2012 |
Life of a Request
More details about HTTP. Basic web request handling. Setting up and using your class server account. Resources: |
1/20/2012 |
Intro to HTML
Introduction to HTML pages. What tags look like, what a simple document looks like, what HTML is and is not for. Resources: |
1/23/2012 |
Intro to CSS
Intro to Cascading Style Sheets. What CSS is used for (as opposed to HTML), basic CSS syntax, selectors, a few properties. Resources: |
1/25/2012 |
CSS Layouts
Float layouts, absolute/relative/fixed positioning, other various CSS features. |
1/27/2012 |
Forms
First steps towards interacting with your users. Basic form elements, validation via HTML5, general principles when using forms. Resources:
|
1/30/2012 |
Introduction to JavaScript
A quick overview of JavaScript as a language. Strings, objects, arrays, functions, dynamic typing, etc. Resources: Further Reading: |
2/1/2012 |
Introduction to the DOM
The document object and some of the interfaces it provides. Resources: |
2/3/2012 |
More DOM
The window object and more DOM things. innerHTML, textContent, etc. Debugging JS. Resources: Further Reading: |
2/6/2012 |
Introduction to PHP
How a server-side language like PHP fits into the web application stack. Code examples. Resources: |
2/8/2012 |
PHP: Language fundamentals
Crash course in PHP. Types, variables, arrays, control structures. Resources:
|
2/10/2012 |
PHP: Interacting with data
URL's. GET and POST data in PHP. Resources:
|
2/13/2012 |
PHP: Session handling
Sessions. How they work conceptually, how to start and use them in PHP. Resources:
|
2/15/2012 |
Intro to Databases
What relational databases are, basics on how to design them. Resources: |
2/17/2012 |
More database design, intro to SQL.
Syntax for CREATE TABLE, INSERT, SELECT Resources:
|
2/20/2012 |
Introduction to PDO
PDO for interfacing with MySQL from PHP. How to put together a web application. Example app: blog. Resources:
|
2/22/2012 |
More SQL
UPDATE, DELETE FROM, COUNT(), and GROUP BY in MySQL. Example app: bookmarking site. Resources:
|
2/24/2012 |
Uploading Files
How to allow users to upload files to your site (think enctype="multipart/form-data") and how to handle uploaded files with PHP (remember the $_FILES array). Basic precautions to take when working with arbitrary files from users. Resources:
|
2/27/2012 |
Introduction to AJAX
How to communicate to the server using JavaScript and the XMLHttpRequest object. Resources:
|
2/29/2012 |
Adding AJAX into a web application
Using XMLHttpRequest to get information from PHP. Encoding with JSON. Resources:
|
3/2/2012 |
Designing web applications
Thoughts on splitting up server/client functionality. Using window.history to create more seamless user experience. Resources:
|
3/5/2012 |
Introduction to JavaScript libraries
What common JS libraries are used for. Introductory jQuery and History.js. Resources:
|
3/7/2012 |
AJAX, more JavaScript libraries
Review of AJAX. How to build an AJAX application piece-by-piece. An assortment of JavaScript libraries and plugins. Resources:
|
3/19/2012 |
Introduction to Web Security, Password Storage
Web security and why it is important. General concerns and approaches. How to store passwords using salting and hashing. Resources:
|
3/21/2012 |
SQL Security
Demonstration of SQL injections. How to prevent them and how to mitigate attack danger through smart user permissions. Resources:
|
3/23/2012 |
File upload security
Review of how to handle file uploads. Upload concerns, whitelisting over blacklisting as a concept (and using regular expressions to handle it), MIME types and MIME type inference by some browsers. Resources:
|
3/26/2012 |
Cross-Site Coding
How to make AJAX requests across domains using the Access-Control-Allow-Origin and Access-Control-Allow-Credentials headers with the XMLHttpRequest.withCredentials flag. How cross-domain requests can be forged and how those forgeries can be detected using canaries. Resources:
|
3/28/2012 |
Cross-Site Scripting (XSS)
What cross-site scripting is, how to protect against it. Examples of both non-persistent and persistent vulnerabilities. Resources:
|
3/30/2012 |
Case studies, clickjacking
Other ways to prevent or mitigate XSS attacks (hosting on other domains, browser XSS auditing). Case studies of high-profile web security failures and subsequent attacks. Brief demonstration of clicjacking. Resources:
|
4/2/2012 |
Public-key cryptography and SSL
How SSL/TLS is used to secure communication channels between your computer and a website. Basic principles of public key cryptography. Resources:
|
4/4/2012 |
DNS, Hosting a Web Site
How hostnames are resolved to IP addresses. How to set up a web site (registrar, hosting). Comparison of hosting types. Resources:
|
4/6/2012 |
Other Servers
Apache: a few features and some of its limitations. Thinking about handling HTTP requests more abstractly and discussion of other web servers that encourage that approach. Resources: Further Reading:
|
4/9/2012 |
Long-polling and WebSockets
Avoiding redundant polling, first with long-polling and then with AJAX. Resources: |
4/11/2012 |
Drag-and-drop, File API
Drag and drop in web applications. Dropping files and reading them in the browser. Resources:
|
4/13/2012 |
Local storage, session storage, client-side SQL
Storing data long-term in the browser. Why it's useful, how to do it. Resources:
|
4/16/2012 |
Templating and template engines
How to separate display logic from application logic using templating systems. Brief overview of Smarty, briefer overview of Underscore.js templates. Resources:
|
4/18/2012 |
JavaScript as a language
What goes on under the hood in JavaScript. Function-level scoping, call and apply, closures, objects, and prototypical inheritance. Resources: Further Reading: |
4/20/2012 |
Caching
HTTP caching, CDNs, memcached. Resources:
|
4/23/2012 |
Mobile browsers, etc.
Degradable AJAX. How to detect mobile browsers, how to style pages differently based on browser size and/or device size. Resources: Further Reading: |
4/25/2012 |
Other database options, speeding up MySQL
Brief mention of other database solutions for specific purposes such as Cassandra, Solr/Lucene. Detail on how to write more efficient queries and how to use indexes in MySQL to speed queries up. Resources:
|
4/27/2012 |
HTML5 Grab Bag
contentEditable, geolocation, video/audio, semantic markup, microdata Resources: |