On the heels of President Obama's recent pledge to increase funding for computer science education in U.S. schools, I worry about the future of education in the discipline. Without a doubt, teaching students how to program is a must for ensuring that the United States can modernize its workforce and compete on a global scale. However, the ways in which programming is taught in schools often lacks real grounding, and effort needs to be made in order distance general education in computer science from the training given to computer scientists.

The purpose of learning how to code is not to become an expert programmer (just as learning mathematics is not for the express purpose of creating mathematicians), but is to allow people to recognize when a little bit of simple programming can save a huge amount of time and effort. Many introductory and online courses in programming focus too much on abstract skillsAbstract skills, like algorithms, are assuredly important, but when was the last time any of you coded your own merge-sort. and not enough on how these skills can be practically applied.


Since I started using Ubuntu on more of my machines, I've encountered myriad issues relating to the wireless internet. Every few minutes, my wireless internet would simply dropout without warning and often without even realizing that the connection had vanished. Reconnecting was a nightmare, and was frequently most easily accomplished by simply rebooting my machine. Even when the wireless was 'working', pinging google.com (with ping google.com) would be slow and unreliable. Worst of all, this issue would often even limit my ability to get any work done for stretches of time, not to mention that it would invariably put me in a foul mood.

Admittedly, this post is mostly for my own reference, since it's decently well documented online if you know what you're looking for. However, if it can be helpful to any of you, that's motivation enough for putting this here.


Of all the packages I use to enhance my productivity in emacs, use-package is perhaps the most useful. With it, I can automatically download and install other packages from the emacs package databases when it detects they're missing. Since I'm constantly switching computers, virtual machines, and operating systems, having this functionality is essential for making sure I don't miss a beat when I'm starting from scratch; I simply clone the emacs config files from my GitHub repository and open emacs and I'm almost immediately ready to go.

This short guide shows how to ensure that use-package also automatically installs, and how to get the most out of the use-package features.


There are a number of different technologies which have gone into creating this blog. Now that it's mostly complete (though I'm constantly tweaking its look), I figure I should give a list of these different tools so that someone can use it as a starting point for their own site. Though I've created a blog, many of the steps I've gone through are useful for anyone creating a small, content-driven website of their own.

In short, this site (and my personal website) are hosted on a single Amazon T2.micro instance using Django and Apache and formatted using Bootstrap (and modified using Less). However, there's much more to it than that. I also made my mark in social media, being sure to get the pages associated with my site. See more details after the jump.


I do a lot of work using C/C++ for my research. As projects grow in size and the number of contributors increases, it becomes increasingly difficult to keep track of even the most commonly used classes and their parameters and methods. I rely on emacs to do most of my code editing, so ensuring that I have a code-completion setup within it is essential. I rely on company-mode, short for 'complete anything' for completion using additional software behind the scenes. Company is a fantastic and rather popular framework for completion within emacs. Users can create functions, known as 'company-backends', which each return a list of completion matches.

For my needs, I've become fond of using both irony, which relies on libclang, and gtags, which is a part of GNU GLOBAL. Irony is the smarter engine, capable of completing variables defined within the function and, to some extent, classes in included header files. By contrast, gtags searches the entire project directory, resulting in a cruder yet more comprehensive search. Between the two of these, I haven't needed any others.

Continue reading for more.


No, there's no typo in the title. Koding is a nice platform for building code online. Today we're going to be setting up a Koding instance, installing Django on it, and displaying its equivalent of a "Hello World" message.

Doing this on a Koding server has a couple of advantages. Not only are you using a fresh computer to do your development, something which is nice to do every once in a while, but you can develop your application collaboratively in real time, and use the Django runserver command to host web pages for short periods of time and show them off to your friends and family on the web.

Also, did I mention it's free?


This blog sits comfortably between an adventure and a combined CV for me, Greg Stein, and my co-collaborator, Rei Suzuki. We've known one another for a long while, and we share interests spanning robotics and mathematical physics. For now, it's relatively unclear the sort of content we aim to produce going forward, and virtually everything is subject to change. Let us know what sorts of posts and tutorials you'd like to see, and we'll try to make it happen.

As for the technical details, the blog itself was programmed by me using Django and compiling snippets from various tutorials and resources on the web, which I hope to describe in more detail some other time. The site is hosted on a single Amazon Web Services instance, which should be sufficient for the time being.

Be sure to explore, share and comment! Welcome to The Caches.