CS50 IDE (founder and lead developer) is a web-based integerated development environment based on Cloud9 for students of Harvard University's on-campus CS50 and online CS50x courses. The IDE serves as a replacement for the previous development environment, the CS50 Appliance, a pre-configured Linux virtual machine that was in use for nine years. CS50 IDE replaces the Appliance by leveraging Cloud9's technology to allow full terminal access in a web browser to an underlying cloud-based Ubuntu instance in combination with a fully-featured JavaScript-based text editor. By moving to an online environment, we hope to improve the student experience by allowing opportunities for collaboration, reducing the time to provide code and environment updates to students, minimize reliance on large (~2GB) downloads, and reduce the need to be tied to a single computer for development.

The project includes a variety of contributions back to Cloud9's open source repositories (and are therefore now available to all Cloud9 workspaces) including a plugin that allows users to debug C programs with GDB via Cloud9's GUI debugger. As part of the CS50 IDE project we have created numerous Cloud9 plugins to add features found only in the IDE, including: a toggleable "Less Comfortable" mode that simplifies that GUI and provides a scaffolded experience to using the editor, modifications to the status bar to provide version and host information of the workspace, Bash scripts to simplify configuration and loading of common servers like MySQL and Apache, and pre-configuring the overall environment. We also have developed a fully-featured offline version using Docker of CS50 IDE for those students that must occasionally work on the course while disconnected from the Internet.

Project Links


OCTAL, (author) the Online Course Tool for Adaptive Learning, is a completed master's project that investigates student engagement in online courses through an adaptive exercise system that customizes the progression of question topics to each student. By creating an ontology of topics in a course and connecting them in a multi-dimensional hierarchy of prerequisites, it might be possible to adapt questions towards topics that are difficult for a student. In other words, students will be presented with topics in an order that is dependent on topic prerequisites rather than on the linear order of a course.

Results were mixed: low participation in the study resulted in statistically insignificant results when comparing metacognitive improvements presenting topics in a hierarchy rather than in a list. However, participants presented with the hierarchical view were less likely to follow concepts in a linear pattern than those presented with the list.

Project Links


BJC: The Beauty and Joy of Computing (contributor) is one of five pilot Advanced Placement CS Principles Courses and is based on the curriculum from UC Berkeley's CS10: The Beauty and Joy of Computing. The program offers curriculum and professional development for middle through high school educators intending to teach an introductory computer science course. It uses the Snap! graphical programming language and focuses on some of the "big ideas" of computing including abstraction, design, recursion, concurrency, simulation, and computational limits.



Ensemble (contributor) is a site for computing educators that hosts communities and aggregates resources for teachers.


CS50 Appliance (contributor) is a pre-configured development environment packaged as a Fedora-based virtual machine for students of Harvard University's on-campus CS50 and online CS50x. My role was to upgrade the version of Fedora and simplify the processes for future upgrades and live updates. If you are interested in using such an appliance for your own course, I wrote a HOWTO based on Fedora 19 using scripts and configuration files available on GitHub.


Sitrep (author) was a set of command line scripts that sent a notification to a user's smartphone. It supported single-line notifications that would appear on the user's device but could also forward large piped text content via a shareable URL. This made it useful to archive output, inspect the data without being at a terminal, or analyze lengthy output with colleagues without the need for shared terminal sessions. The project is now defunct because it relied on the Notifo notification service which has since been discontinued. However, the project could be modified to use Boxcar or a similar notification system.

Powered by SmugMug Owner Log In