Blog Articles 66–70

Teaching Web Development

This fall, I’m teaching CS 3320, Internet Software Development. The class hasn’t been offered for a while, and students seem quite excited to take it (it’s currently maxed out with a full waitlist).

Since this is the first time in a while that this class has run, I’m recreating it from scratch. You can check out the course web site here, including the syllabus and list of resources; I expect that I’ll also be publishing assignments and lecture notes there as the semester progresses.

One of the big tasks in getting this ready has been selecting a tech stack. There’s just so many to choose from! Three primary goals have driven my decisions:

  • Provide students with a full-stack experience, from storing data on the back end to interactive JavaScript and AJAX.
  • Minimize the number of distinct technologies, particularly languages, that students have to learn in order to gain this experience.
  • Don’t layer too much magic on top of the underlying infrastructure (e.g. HTTP and HTML), so that students can gain a good conceptual understanding of how things work.


I made some chili. People generally liked it, and were interested in the recipe, so here it is.

Derived from a recipe on Oh She Glows, in turn adapted from Maintenance with Ashley.

The spices are pretty flexible.

  • 1 tbsp oil
  • 2 cloves garlic, minced (or just some minced garlic)
  • 1 orange bell pepper, chopped
  • 1 poblano pepper, chopped
  • 1 sweet onion, chopped
  • 1 shallot, chopped
  • Some chopped carrot
  • Cumin
  • Chili powder (lots of it)
  • Salt
  • Dash of cayenne
  • Some Mexican oregano
  • Grains of Paradise
  • Beans — more on this below
  • 1 large but not industrial can diced tomatoes with juice
  • 2–3 baby bella mushrooms, cut up
  • 1 tbsp unsweetened cocoa powder
  • Squirt of lime juice
  • 1C vegetable stock

Git Tricks: git-summary

Mercurial has a useful command, hg summary, that prints out some basic information about your current repository status. git status prints most of this information, but omits some useful details such as the ID and message of the most recent commit.

The following shell script will fix this, printing the current commit followed by the output of git status:


HEAD_REV=`git rev-parse --short HEAD 2>/dev/null`
if [ "$?" -ne 0 ]; then
    exec git status
HEAD_MSG=`git show -s --format=%s HEAD`

echo "Parent revision is $HEAD_REV: $HEAD_MSG"
exec git status

Save this script somewhere on your $PATH as git-summary (~/bin is a good option). If you are on Windows, save it in a file called git-summary in the usr\bin subdirectory of your Git installation (often C:\Program Files\Git). Then you can run git summary to see this augmented display:

Search and Recommendation

Search and recommendation are very interrelated concepts.

What is search, but query-directed recommendation? Or recommendation, but zero-query search?

My students asked me about this relationship in my recommender systems class last spring. Trying to answer this question brought me to a formulation that seemed to help them, and perhaps it will be more broadly illuminating as well. For some of you this may well be old hat.

Organizing and Documenting Work

My second-year evaluation packet is due in a couple of weeks. A lot of my materials were in order; I took the time to reorganize and backfill my archive, so the next review submissions will hopefully be pretty easy. And there will be many of them: reappointment reviews until tenure, annual performance reviews to determine pay raises, the Big One for tenure and promotion itself, and hopefully someday an application for Full Professor.

The two biggest problems for preparing these packets seems to be maintaining a complete log of relevant activities, and maintaining supporting documentation for them. Given the importance of these reviews, and the many other activities that require some form of CV or snapshot of accomplishments, it seems worth some up-front investment in tooling and organization.

Here’s how I do it.