Required reading for software engineers: The Inmates are Running the Asylum

After reading the Inmates are Running the Asylum, by Alan Cooper, it’s very easy to see its influence on Bret Victor.  Unfortunately, for the software industry, this book is as true in 1998 as it is today.  My two takeaways were: Interaction Design, i.e. how humans interact with a product, is hard and if software engineers are left to design the product, it will lead to a frustrating experience.

The book is well worth a read to anyone who has experienced, as Cooper described, “Computer Tourettes.”  For example, I have an extremely feature rich thermostat; it can do all sort of things like tell me the time, vary its temperature at different times of the day, and I’m sure other things.  I still can’t figure out how to change the temperature setpoint RIGHT NOW.  This is in contrast to my barometer, where I can simply compare the setpoint marker to the current pressure.  I would much rather have the interface from my barometer on my thermostat.

Without looking at the instructions, which button(s) are required to set the temperature?
Without looking at the instructions, which button(s) are required to set the temperature?
I'm starting to realize that when "old people" grumble about analog vs digital, what they really mean is "good design" vs "bad."
I’m starting to realize that when “old people” grumble about analog vs digital, what they really mean is “good design” vs “bad.”

Continue reading “Required reading for software engineers: The Inmates are Running the Asylum”

BeagleBone Tor

My BeagleBone Black (BBB) is now helping preserve Internet freedom by running a Tor relay. Tor is:

free software and an open network that helps you defend against a form of network surveillance that threatens personal freedom and privacy, confidential business activities and relationships, and state security known as traffic analysis.

For those new to Tor, the first step is to try the TorBrowser Bundle to help anonymize your traffic.  If this Tor thing feels a bit weird to you, know that normal people use Tor.

For those that want to help contribute to the freedom loving Internet, consider running a Tor relay on that nice 1GHz BBB.  Of course, you can run a relay from the Browser Bundle, but when your turn your computer off or close your laptop lid, your relay goes nighty-night too.  Plus the BBB is low-wattage so it won’t run up your electric bill as much while you help Tor grow.

The great Ladyada has an Onion Pi project which runs a Tor proxy and a wireless access point. It’s a very cool project but it’s not a relay AFAIK.  Also, if you want Tor to really work, you should use the Tor Browser Bundle.  So, these are directions for setting up a Tor relay, which helps others use Tor.

My BBB in the Adafruit Bone Box.
My BBB in the Adafruit Bone Box.

Continue reading “BeagleBone Tor”

Innovation and The Future of Programming

Bret Victor is one of the best presenters I have seen.  With very simple slides, he delivers powerful messages.  I first learned about Bret by watching his Inventing on Principle presentation, which was inspiring in its own right. But his recent “The Future of Programming” delivers another faith-shattering punch.  You should go watch it.  Seriously.  I’ll wait.

Continue reading “Innovation and The Future of Programming”

Slight enhancement to fortune.el

The fortune utility remains one of my favorite programs (after all, it’s the name of this blog 🙂 ).  The random quotes are a refreshing reminder not to take myself too seriously.  But since I’ve been using byobu and GNU Screen, I rarely see the fortune cookie when my shell starts.

But then I realized what I really wanted was to see fortunes in Emacs.  Fortunately, there is a package, fortune.el, included in Emacs which provides a front-end to the fortune program.  When invoked with M-x fortune it throws the cookie into a new buffer and makes the new buffer active, which is slightly annoying.

What would be better would be to display the fortune in the mini-buffer.  Well, with the following code in your .emacs (or personal directory in prelude 😉 ), M-x fortune-message will do just that.  I’m considering submitting a patch, but there appears to be a bit of a procedure that I must review first.

(require 'fortune)
;; Be sure to set the following to your specific fortune files
(setq fortune-dir "~/.fortunes"
fortune-file "~/.fortunes/fortunes")
(defun fortune-message (&optional file)
"Display a fortune cookie to the mini-buffer.
If called with a prefix, it has the same behavior as `fortune'.
Optional FILE is a fortune file from which a cookie will be selected."
(interactive (list (if current-prefix-arg
(message (fortune-generate)))
(defun fortune-generate (&optional file)
"Generate a new fortune and return it as a string.
Without an optional FILE argument it will use the value of `fortune-file'."
(progn (fortune-in-buffer t file)
(with-current-buffer fortune-buffer-name

view raw
hosted with ❤ by GitHub

Although, to get fortune.el to work I had to create a new writable fortune file as it was not satisfied using the read-only fortunes included with my distribution.  And now I have cookies on demand (om nom nom…)

Yeah sorry… I couldn’t resist 🙂


Byobu: Fancy window dressings on GNU Screen

As I’m working more on the command line now, I’ve been trying to incorporate GNU Screen into my workflow. Some might argue it’s a bit redundant when using a window manager and a terminal that supports tabbed sessions, but I prefer not to deal with the tabs and it’s nice to attach to a screen and pick up where I left off.

And I was quite happy with GNU Screen. The only issue is that I had to change the default escape key \C-a to \C-\ since I heavily use \C-a in both Emacs, GNU readline and zsh to go to the beginning of the line. (Actually, I use prelude’s smarter-move-beginning-of-line in Emacs.) Anyway, I quickly changed the escape to C-\ with this line in the .screenrc: escape ^\\\.

But then I stumbled onto Byobu, which provides a set of “window-dressings” for GNU Screen (and Tmux if you prefer). The default backend is Tmux but it can be easily changed to GNU Screen. All of the normal screen commands work as you’d expect but I like the extra mode lines on the bottom of the terminal. The bottom lines are bit flashy if you prefer the simplicity of GNU Screen, but the notifications can be customized for a slew of options including an option to add your own.  So far I’m liking it 🙂


Byobu screenshot
Byobu’s man page while running byobu

Data Mining Techniques to Predict Survival of Metastatic Breast Cancer Patients

Last quarter for my Advanced AI class, I performed some machine learning experiments on the Surveillance Epidemiology and End Results (SEER) database.  It was my first in-depth study using machine learning and I was particularly primed for the topic having just read The Signal and the Noise by Nate Silver.  While Nate does not specifically address machine learning, he is a clear supporter of Bayesian-based statistics, so the topic was apropos.

My biggest takeaway was perhaps that applying the complex machine-learning algorithm is the easy part thanks to established software libraries and toolkits.  Preparing the data for analysis and understanding the results are the most time consuming and complicated aspects of the task.  I worked closely with an oncologist, who did most of the heavy-lifting with the clinical analysis. Continue reading “Data Mining Techniques to Predict Survival of Metastatic Breast Cancer Patients”

oh-my-zsh and fun with fonts

After viewing this slideshare on the Z shell (zsh), I decided to give it a spin.  As recommended in the presentation, I went ahead and setup oh-my-zsh as well.  At first, it was a bit awkward moving around, I mean the cd completions happen under the prompt!  But then I cd‘d to a git directory and I don’t think I’m switching back.  The git plugin has really nice command completion and the prompt itself shows the branch name. Continue reading “oh-my-zsh and fun with fonts”

Cross-compiling Python 3.3.1 for Beaglebone (arm-angstrom)

I think I became a little too crazy over cross compiling.  For reasons now unknown to me, I decided that I wanted Python 3 on my Beaglebone.  Having just learned how to cross-compile, I was perhaps a bit ambitious.  In the end, I believe I cross-compiled successfully, but I have issues actually running Python 3 on the BB (perhaps due to PYTHONPATH issues?).  Anyway, I’m a bit overloaded with other projects at the moment so I don’t think I can see this through.  But I figured I’d write a post showing at least how to compile. Continue reading “Cross-compiling Python 3.3.1 for Beaglebone (arm-angstrom)”

Cross-compiling applications for the Beaglebone

Yesterday I blogged about building Emacs on the Beaglebone. While this is great Sunday night fun, it’s not the most efficient way to compile applications for this device. The original Beaglebone has a 720 MHz processor and 256MB of RAM. My desktop has a 2.8GHz processer and 12GB of RAM. The turtle does not beat the hare in this race. It would be nice if I can compile an application on my desktop and send the compiled binary to the Beaglebone to run. Well, welcome to cross-compiling! Continue reading “Cross-compiling applications for the Beaglebone”

Emacs on the Beaglebone

I’ve been playing around with my BeagleBone (BB) lately and it’s felt a bit, incomplete. It’s not because it has a faster and cheaper brother out there now either (BeagleBone Black (BBB)). It’s because it didn’t have Emacs installed! 🙂


Unfortunately, Emacs is not even in the Angstrom package browser. I did find a post which claimed at one point it was listed, but alas, no more. So, to the source we go. Continue reading “Emacs on the Beaglebone”