CS 316, Web Programming, Spring 2022

CS 316 is an introduction to the World Wide Web and Web programming. It covers languages and techniques used for Web programming, data transfer over the Internet, and the tools available in the Web environment. Specific subjects include the HTTP protocol, the HTML markup language, browser developer tools, Cascading Style Sheets (CSS), JavaScript, the Common Gateway Interface (CGI), PHP, JavaScript, the Document Object Model (DOM), Asynchronous JavaScript and XML (AJAX), IndexedDB, JavaScript frameworks Bootstrap, jQuery, and React, and a few libraries built on these, such as DataTables. We will also discuss Transport Layer Security (TLS) and security concerns such as SQL injection and cross-site scripting (XSS).

Learning Outcomes

The following Student Learning Outcomes apply to CS316.

  1. I am able to design, implement, and evaluate a computing-based solution to meet a given set of computing requirements in the context of the program's discipline.
  2. I am able to function effectively as a member or leader of a team engaged in activities appropriate to the program's discipline.
  3. I understand the World Wide Web architecture.
  4. I can create a dynamic web page and process the data from it.
  5. I can use the popular web programming languages for both client and server programs.
  6. I understand and can utilize the web data transfer methods.
  7. I understand security issues relating to the World Wide Web.

This course contributes to the following ABET (Accreditation Board for Engineering and Technology) student outcomes: Communicate effectively in a variety of professional contexts (SO3) and apply computer science theory and software development fundamentals to produce computing-based solutions (SO6).

Times and places

Instructor Raphael Finkel <raphael@cs.uky.edu>
Instructor office Hardymon 230
Grader Mitchell Klusty <mitchell.klusty@uky.edu>
Class TR 3:30p-4:45p; Zoom (if necessary) 8681 2107 986
Web http://www.cs.uky.edu/~raphael/courses/CS316.html
Office hours T 10a-11:30a, R 1p-2:30p, Zoom 581 609 732 or office

Course Prerequisites

The course assumes a basic basic level of proficiency in the C, C++, or Python programming language. Almost all our programming, however, will be in JavaScript, which you will learn during the semester. Students should have completed CS 216. Completion of CS315 is helpful but not required. More advanced programming skills are good; see http://www.cs.uky.edu/~raphael/programming.html for a refresher.

Assignments

The class has five projects. They involve a significant amount of programming, both in browsers and in servers. Server programs run on departmental MultiLab computers, which run Linux. See https://www.cs.uky.edu/docs/users/multilab.html for details about those computers. You will be able to build your programs on any computer you like, but they must run without fault on the MultiLab machines.

Students submit all projects electronically via Canvas.

References

This course has no required textbooks, but the following is recommended: Randy Connolly and Ricardo Hoar, Fundamentals of Web Development, 3rd Edition, Pearson 2021, ISBN 9780135863336. The previous edition is still good: Fundamentals of Web Development, 2nd Edition, Pearson 2018, ISBN 9780134489193.

The Web has lots of resources for the subjects of the course, particularly https://www.w3schools.com. You might also purchase a reference book, such as Jon Duckett Web Design with HTML, CSS, JavaScript and jQuery, ISBN-13: 978-1118907443.

Exams

There will be two exams: an in-class midterm and a final. The final exam will only test material in the course covered after the midterm.

Schedule

The following is tentative with respect to subjects

 T R
Jan 11 1 2
Jan 18 3 4
Jan 25 5 6a
Feb 1 7 8
Feb 8 9 10
Feb 15 10 12b
Feb 22 13 14
Mar 1 15 m
Mar 8 M 16c
Mar 15 n n
Mar 22 17 18
Mar 29 19 20
Apr 5 21 22d
Apr 12 23 24
Apr 19 25 26
Apr 26 27e ng
May 3 f
Code Meaning
a-e Assignment due (Friday, noon)
g Absolute deadline (noon)
m Midterm exam
M Discuss midterm exam
n No class - University holiday
f Final: Tuesday, May 3 1p-3p
1 Intro, history, structure of Web applications
2 browsers, URLs, Unix file permissions
3 HTML tags and attributes, browser developer tools
4 CSS, responsive web design, media
5 CGI, input tags, command-line clients
6 CGI languages
7 PHP (guest?)
8 JavaScript and NodeJS
9 JavaScript and NodeJS
10 SQL
11 DOM
12 HTML scripts
13 JQuery
14 JQuery with AJAX
15 Review for midterm
16 Post-midterm discussion
17 Fonts
18 Bootstrap (grid model, tooltips, progress bars)
19 Bootstrap (modals)
20 DataTables
21 IndexedDB
22 SVG
23 React
24 React
25 Security: problems
26 Security: defenses
27 Review for final

Grading

Students will be graded 50% on projects, 40% on exams (30% on each student's better exam, 10% on the other one), and 10% on attendance. Final grades will be assigned according to the following scale: A=90-100%, B=80-89%, C=70-79%, D=60-69%, E=0-59%. I generally do not give incomplete grades.

Late penalty

Projects are due at noon on the Fridays (not Thursdays) indicated above.

Late projects are penalized 3% (of the total possible points) per day for each day late, not including Saturday, Sunday or holidays (marked n in the schedule). The maximum penalty is 7 days late; after that, one may hand in an assignment and still get 79%. However, the absolute deadline is noon on Thursday of the last week of classes. No extra credit is available on late projects. A student who turns in a project early gains early credits (which also ignore weekends and holidays), which are only used to offset late penalties on other assignments but have no other value.

Attendance policy

Attendance is mandatory. If you attend 80% or more of the classes (ignoring classes for which you have an excused absence), you get the full 10 points. If you attend fewer than 80%, you get 0 attendance points. I make reasonable allowances for family emergencies, medical events (suitably documented at Tier 2 or Tier 3), job interviews (with verification) or religious observances (inform me in writing during the first week of class).

Responsible use of computers

Students must use the computing facilities on campus in accordance with standards of honesty and personal conduct. Those standards, outlined in the University of Kentucky Policy governing access to and use of University of Kentucky computing resources , available at https://www.uky.edu/regs/sites/www.uky.edu.regs/files/files/ar/ar10-1.pdf, call for all members of the community to act in a responsible, ethical, and professional way.

Cheating

All academic work, written or otherwise, that you submit must be the result of your own thought, research, or self-expression. You may certainly discuss the assignments with each other, but you must not show each other your work; everyone must develop the assignments completely independently. It is a serious offense to allow other students to copy your work or to copy the work of other students (even if it is in a public computer file or on github based on similar assignments). If you borrow ideas, algorithms, wording, or code from other sources, you must document that fact or you have committed plagiarism. You may not use any code you find on the Internet. If you re-use code you acquired in a previous course, insert a comment indicating what course provided the code. (Some of this text was taken years ago from an online plagiarism guide that I can no longer find.)  I punish offenses against this policy quite strictly.

Boilerplate

The material in https://www.uky.edu/universitysenate/acadpolicy, https://www.uky.edu/universitysenate/ao, https://www.uky.edu/universitysenate/syllabus-dei, and https://www.uky.edu/universitysenate/student-resources is included by reference.