We will study how web browsers work by building our own web browsers from scratch in python.

The course is based on the online textbook Web Browser Engineering. We will cover one chapter per week of the book, for 10 weeks. The calendar page is the best place to get up-to-date information about the schedule.

Each week, students will implement 1 core feature in their browser, plus several extensions. The core feature is covered in detail by the corresponding book chapter. The implementation of this feature usually involves some refactoring of existing code, as well as understanding the content of the book and putting together the starter code into a working implementation. The remaining extensions are exercises that extend the core feature of the week with additional functionality. These exercises will be selected from the list of exercises at the end of each book chapter.

"Week N" of the course proceeds as follows.

- On the previous Friday, James covers background material.
- Students should read the book chapter before class on Monday.
- In lecture on Monday, James will highlight some aspects of the book's presentation and live code the week's core feature
- Due Tuesday night: Students submit the core feature.
- In lecture on Wednesday, students take turns typing as the group works on the exercises.
- In section on Thursday, we continue working on the exercises as a group.
- (In lecture on Friday, we begin the background for the following week.)
- Due Friday night: Students submit the exercises.

Week 1 and Week 10 are a little different. See the schedule.

There are no quizzes or exams.

Lectures will be recorded and made available to all students. Not all sections will be recorded, but we will make some information about section available for those who cannot attend.

- Textbook
- Ed discussion board
- Gradescope
- Project Gitlab
- All publicly available Google drive resources
- All privately available Google drive resources (requires CSE netid login)
- Discord server
- Zoom link

- James Wilcox, instructor,
`jrw12@cs.washington.edu`

- Jimmy Cheong, TA,
`c7834@uw.edu`

- Ryan Featherman, TA,
`feathr@cs.washington.edu`

- Elijah Greisz, TA,
`egreisz@cs.washington.edu`

- Thompson Ngo, TA,
`tngo2001@cs.washington.edu`

- Guangyin Ye, TA,
`gy020306@cs.washington.edu`

You can email the entire staff at
`cse493x-staff@cs.washington.edu`

,
but we usually prefer you make a private post on Ed if possible.

The best way to contact the staff is to make a post on Ed. If your question is likely to be useful to other students, please consider making it public. (You can make the post "anonymous" to hide your identity from your classmates, but note that course staff can still see your identity on anonymous posts. See anonymous feedback at the very bottom of this page for submitting feedback without revealing your identity to course staff.) If your message is not relevant to other students, make it private. We prefer you send messages via Ed if at all possible, because it allows any staff member to assist you. If you need to contact an individual staff member directly, you can also use email.

There are three kinds of assignments in this class:

- The browser project, including code and tests
- Leading group work in class by being our typist
- Weekly written reflection

For the browser programming assignments, we have created a Gitlab repository for each student containing starter code and a description of the assignment. Each student should clone their repository, do their work there, and commit and push it back to Gitlab, and then submit on Gradescope when completely finished.

For "typing", we will collect volunteer names at the beginning of each class and then each typist will get about 10-12 minutes as we work through the exercise.

The weekly reflections will also be submitted on Gradescope as a PDF. See the weekly reflections page for more details on what to include

The class will be graded on an additive points system.

- Each week's browser project is worth 210 points, divided evenly across N+1
features (1 "core" plus N exercises, where N is usually between 4 and 6).
- You must pass all the tests for a feature to get the points for that feature. If you do not attempt the feature, you get 0 points for that feature. If you attempt the feature but do not pass all the tests, you get half credit.

- Being a typist for a session is worth \(45\cdot\left(2\middle/3\right)^{n-1}\) where \(n\) is the number of times you have driven. In other words, the first time you type, \(n=1\) so you get 45 points. The second time you get 30 points. The third time 20 points, and the fourth time 13ish points.
- We give priority when seeking volunteers to students who have not typed yet.
- The weekly reflection is worth 15 points. If you submit the optional debugging post mortem, then you can earn up to an additional 45 points subject to staff discretion. (Short/contentless post mortems will earn substantially less than 45 points.)

In total, there are roughly 2250 points available, assuming you are a typist
once and *not* including any debugging post mortems.

The course is *not* curved. Your grade on a 4.0 scale is computed by the
following formula.

\[
\min\left(
\left.\left\lfloor\frac{\mathrm{points}}{61}\right\rfloor \middle/ 10 \right. + 0.5,\
4.0
\right)
\]

In other words, your grade will be computed by the following table:

Points | Grade on 4.0 scale |
---|---|

≥2135 | 4.0 |

≥2074 | 3.9 |

≥2013 | 3.8 |

≥1952 | 3.7 |

≥1891 | 3.6 |

≥1830 | 3.5 |

≥1769 | 3.4 |

≥1708 | 3.3 |

≥1647 | 3.2 |

≥1586 | 3.1 |

≥1525 | 3.0 |

... | ... |

≥1342 | 2.7 (grad sat) |

... | ... |

≥ 915 | 2.0 (undergrad sat) |

... | ... |

Every homework has a 48-hour grace period, during which work is accepted without penalty. No credit after the grace period expires.

Note that, unlike some other course policies you might be familiar with, in this class there is no cap on how much total grace time you can use over the quarter. You can use all 48 grace hours on every single homework and still get full credit.

Please read CSE's Academic Misconduct Policy.

You are encouraged to discuss all aspects of the course with and ask for help from the instructor, the TAs, and other students. However, do not cross this line:

Do not share code or written text. Do not look at lab or problem set solutions that might be on the Internet. Do not use someone else's code or text in your solutions or responses.

It *is* ok to share ideas, explain your code at a high level to someone to see
if they know why it doesn't work, or to help someone else debug if they've run
into a wall.

Anonymous feedback can be sent to the instructor or TAs via
`feedback.cs.washington.edu`

.