CS 318 Lab 14 – Web Jam

Dear students, Let’s shake things up a bit today. When game developers get together to build a game in a very short amount of time, they call that a game jam. We will have a web jam. I want to devote all of today’s lab time to that, so I won’t be doing any talking. […]

CS 330 Lecture 19 – Functions and Lists

Dear students, Today we solve more problems in Haskell together. Along the way we will discover some of the peculiarities of functional programming, like the supremacy of linked lists. First, an exercise to complete with a neighbor: Parallelogram Write a function pcomplete that completes a parallelogram. Suppose you are given three points in 2D space. […]

CS 330 Lecture 18 – Haskell

Dear students, Today we begin our foray in the Haskell language, which is very different from the Java and C that you have been steeped in. I want to introduce its craziness by just solving some problems. We’ll see what we encounter. Here are the tasks I will ask you to complete with a neighbor: […]

CS 318 Lab 13 – Responsive Design

Dear students, Today we begin our investigation into responsive design, of which designer Ethan Marcotte had this to say: Recently, an emergent discipline called “responsive architecture” has begun asking how physical spaces can respond to the presence of people passing through them. Through a combination of embedded robotics and tensile materials, architects are experimenting with […]

SIGCSE 2017: Towards Computational Making with Madeup

I’m presenting Madeup at SIGCSE 2017 in Seattle, and I offer below the manuscript of my talk. Introduction Madeup is a tool I began building in 2013 in order to study and teach the algorithms of everyday objects. It’s a language for making things up—things that live in 3D space, things that I could print […]


My dream some day is to teach CS 491: Bad GUIs. We would learn the principles of good interface design by examining (and implementing!) terrible user interfaces. The first assignment would be to design an unreadable clock widget. Perhaps like this one: If it’s not terrible enough, reload the page. I saw a clock like […]

CS 318 Lab 12 – Mockups

Dear students, The next milestone of your project is to create mockups of your pages. The intent behind a mockup is to create a visual sketch of your page that can help you create a feel for the overall layout. Its audience is both you, your collaborators, and your client. There’s a great temptation to […]

CS 330 Lecture 17 – Heap of Trouble

Dear students, Let’s start with a What Does This Do! Absorb this code into your brain, and predict its output. After a minute of silent reflection, we’ll discuss. void mkfoo(char *s) { s = malloc(sizeof(char) * 4); strcpy(s, "foo"); } int main(int argc, char **argv) { char *text = "slar"; mkfoo(text); printf("%s", text); return 0; […]

CS 318 Project – Mockups – due on March 27

Your next milestone in the project is to create mockups for each page of your site. You will then present these mockups to your client for initial feedback. Task 1: Create Mockups Use Moqups. As we did in lab, follow these guidelines to construct your mockups. Thoroughly communicate the structure, but not the content. Generally […]

Hosting a Git Repository

When I first started learning Git, I was unimpressed by the notion of distributed version control. I felt and still feel that a central server hosting a project is important for the projects I work on, and I think the popularity of GitHub, Bitbucket, and Gitlab confirms my belief. With these great services around acting […]