Skip to main content

Benjamin Oakes

Photo of Ben Oakes

Hi, I'm Ben Oakes and this is my geek blog. Currently, I'm a Ruby/JavaScript Developer at Liaison. Previously, I was a Developer at Continuity and Hedgeye, a Research Assistant in the Early Social Cognition Lab at Yale University and a student at the University of Iowa. I also organize, ICRuby, OpenHack Iowa City, and previously organized NewHaven.rb. I have an amazing wife named Danielle Oakes.

Filtering for the Open Source category. Clear

Richard Stallman Was Right All Along

by Ben

This is what Stallman has been warning us about all these years – and most of us, including myself, never really took him seriously. However, as the world changes, the importance of the ability to check what the code in your devices is doing – by someone else in case you lack the skills – becomes increasingly apparent. If we lose the ability to check what our own computers are doing, we’re boned.

Source: Richard Stallman Was Right All Along

Richard Stallman’s GNU Manifesto Turns Thirty

by Ben

Stallman was one of the first to grasp that, if commercial entities were going to own the methods and technologies that controlled computers, then computer users would inevitably become beholden to those entities. This has come to pass, and in spades. Most computer users have become dependent on proprietary code provided by companies like Apple, Facebook, and Google, the use of which comes with conditions we may not condone or even know about, and can’t control; we have forfeited the freedom to adapt such code according to our needs, preferences, and personal ethics. “With software,” Stallman still frequently observes, “either the users control the program, or the program controls the users.”

Source: Richard Stallman’s GNU Manifesto Turns Thirty – The New Yorker

NTP’s Fate Hinges On ‘Father Time’

by Ben

NTP’s Fate Hinges On ‘Father Time’ – InformationWeek.

In April, one of the open source code movement’s first and biggest success stories, the Network Time Protocol, will reach a decision point. At 30 years old, will NTP continue as the preeminent time synchronization system for Macs, Windows, and Linux computers and most servers on networks?

Or will this protocol go into a decline marked by drastically slowed development, fewer bug fixes, and greater security risks for the computers that use it? The question hinges to a surprising degree on the personal finances of a 59-year-old technologist in Talent, Ore., named Harlan Stenn.

Everyone uses NTP all the time to synchronize their clocks. This guy deserves a medal, as well as financial support.

Microsoft to invest in Cyanogen, which hopes to take Android from Google

by Ben

Microsoft to invest in Cyanogen, which hopes to take Android from Google | Ars Technica.

A Microsoft investment in the company would be the latest in Redmond’s ironic ties to Android. Microsoft is thought to make more from Android patent licensing fees than it does from Windows Phone, and through its purchase of Nokia, the company even briefly sold Android-based handsets. Now, according to the Journal, Microsoft will become an investor in a company that sells an Android distribution.

This is good news for AOSP, and hopefully Android as a whole. Having more Android investment from companies other than Google is a good thing.

Convert bzr to git

by Ben

Convert bzr to git | AstroFloyd's blog.

I found a couple bzr repositories on my computer recently that I decided to convert to git. I found this nice writeup on how to convert.

On Ubuntu:

sudo apt-get install git bzr bzr-fastimport


cp -pr repo-dir ${repo}_backup
cd ${repo}
git init
bzr fast-export --plain . | git fast-import
git co -f master
rm -rf .bzr/

Microsoft open sources .NET, takes it to Linux and OS X

by Ben

Microsoft open sources .NET, takes it to Linux and OS X | Ars Technica.

I don’t think I would start using .NET because of this, but wow, what a step in the right direction for Microsoft!

Markdown throwdown

by Ben

My comment on the Ars Technica article:

All things considered, I’d rather have companies like GitHub, StackOverflow, and reddit push for an improved open standard than let Markdown continue to languish. Compared to some other companies on the web, those 3 don’t seem like bad apples at all — but having clearer community involvement wouldn’t hurt.

I’m totally on board for a name change though, and a bit surprised Atwood didn’t push for that. Something simple, say “Discount” (or another play on the word Markdown).

At the time of this writing, it has a score of 74 votes, making it a reader favorite for the article — which was a nice surprise. :)

Neither Microsoft, Nokia, nor anyone else should fork Android. It’s unforkable.

by Ben

Neither Microsoft, Nokia, nor anyone else should fork Android. It’s unforkable. | Ars Technica.

An interesting take on Google’s Android strategy. In summary, Android is Open Source, but Google is really pushing that apps depending on proprietary Google Mobile Services (GMS). This explains why some apps aren’t in the Amazon Appstore. I’d be interested in how Cyanogen Mod is solving the GMS problem.

At any rate, the only service that is really discussed is in-app purchases… I’ve never made an in-app purchase, so that wouldn’t be a deal breaker for me (although I have purchased apps before). I could see how that would be a big blow to the current mobile gaming industry. I would imagine Google’s mapping service is another… but it’s hard to say what other GMS services I would really care about.

Node.js-based Ghost blogging platform

by Ben

Ars Technica user chocoruacal wrote this comment for Node.js-based Ghost blogging platform opens to the public:

and what’s so special about it?

It’s trendy. You get a heightened sense of self-satisfaction knowing that your tiny blog is served by Node.js and written in Markdown. I cloned the repo and within minutes found myself bearded, in a coffee shop, listening to music that hasn’t even been released yet.

Quite possibly one of the best comments on tech-trendiness ever.

Ruby Simple HTTP Server, minimalist Rake

by Ben

I use a really simple HTTP server all the time. It happens to be written in Python:

python -m SimpleHTTPServer 5000

That serves all the files in the current directory over HTTP on port 5000. Honestly, it works just fine, but I’ve always wondered if Ruby had an equivalent.

Here it is:

ruby -run -e httpd . -p 5000

(from Aaron Patterson’s tweet found via Zach Morek)

It’s pretty much the same, except it’s written in Ruby. More often than not, that’s not a big difference — except I can understand the code behind it.

# = un.rb
# Copyright (c) 2003 WATANABE Hirofumi <>
# This program is free software.
# You can distribute/modify this program under the same terms of Ruby.

# [...]

# Run WEBrick HTTP server.
# ruby -run -e httpd -- [OPTION] DocumentRoot
# --bind-address=ADDR address to bind
# --port=NUM listening port number
# --max-clients=MAX max number of simultaneous clients
# --temp-dir=DIR temporary directory
# --do-not-reverse-lookup disable reverse lookup
# --request-timeout=SECOND request timeout in seconds
# --http-version=VERSION HTTP version
# -v verbose

def httpd
  setup("", "BindAddress=ADDR", "Port=PORT", "MaxClients=NUM", "TempDir=DIR",
        "DoNotReverseLookup", "RequestTimeout=SECOND", "HTTPVersion=VERSION") do
    |argv, options|
    require 'webrick'
    opt = options[:RequestTimeout] and options[:RequestTimeout] = opt.to_i
    [:Port, :MaxClients].each do |name|
      opt = options[name] and (options[name] = Integer(opt)) rescue nil
    unless argv.size == 1
      raise ArgumentError, "DocumentRoot is mandatory"
    options[:DocumentRoot] = argv.shift
    s =
    shut = proc {s.shutdown}
    siglist = %w"TERM QUIT"
    siglist.concat(%w"HUP INT") if STDIN.tty?
    siglist &= Signal.list.keys
    siglist.each do |sig|
      Signal.trap(sig, shut)

So how does it work? It’s actually a little surprising. Here’s the command again for reference:

ruby -run -e httpd . -p 5000

In order:

While that code is probably too clever, it’s nice to have a simple HTTP server wherever I have Ruby.

Even more, the concept is reusable:

# File: ake.rb
# Minimalist rake.  :)
def greet
  puts "Hello, #{ ARGV[0] }!"

Here’s the output

$ ruby -I . -rake -e greet Ben
Hello, Ben!
$ ruby -r ./ake -e greet Ben
Hello, Ben!

That could be a nice minimalist way to write some helper scripts without Rake or Thor.