Dell m3800 Developer Edition

May 15, 2015 in Computers, Dell, Linux | Tags: , , , ,

A developer has different priorities than a general user when selecting a laptop, especially for work. Right now IMHO the most exiting option is the Dell m3800 in developer edition trim. Here is a picture of my new m3800 in developer edition trim at the coffee shop!


For the last several years I’ve had a MacBook Pro as my primary workstation and like most recent Apple products, it is quite polished. The main issue is that I generally don’t write software designed to run on OS X. I write software designed to run on Linux. A bunch of options like Vagrant and more recently Docker have cropped up to help provide a Linux environment on OS X. And of course there is always the option of simply running a plain old virtual machine.

These solutions are fine and work well for many things, but one place they fall short is debugging. Does anyone like using a remote debugger? They are better now than ever, but the experience still isn’t great and that might push a developer toward using Linux as their primary desktop OS rather than something like OS X.

I probably don’t need to mention the host of other reasons that Linux makes a nice desktop OS but the other main issue for me is that as nice as MacPorts and Homebrew are, they really don’t compare to the package managers available in Linux.

As much as I would like to think that the good folks at Dell are working on providing machines like the m3800 with Linux pre-installed because they just love developers so much, I have to think that the real reason the suits green-lighted the Sputnik program is because they smell blood in the water due to Apple’s tendency to move OS X closer and closer to the idiot proof experience provided in iOS. With each new release, OS X has added behaviors clearly targeted at getting iOS users to buy a Mac.

That’s not a bad business decision on Apple’s part, but improvements that power users would like seem to be ignored. There are basic things missing from the OS X experience like window management because the average OS X user doesn’t have multiple large format external displays on their desk. Additionally Apple doesn’t seem to trust outside developers with reasonable access to the bug reporting system. Let’s not kid ourselves, Darwin is not really an open-source project. And with basic features like Window management and package management missing from OS X, developers often look to Linux as an alternative.

That’s what makes the Sputnik project at Dell so exciting to me. Linux has always suffered from a rough user experience on laptops because the integration work is not trivial to get a desktop environment running well, with reasonable battery life, and working track-pad drivers. Let’s not even get started on suspend/resume functionality or getting the graphics stack working properly.

The m3800 experience is not like that. It’s not rough at all. It’s not the padded room experience like OS X, but it’s very nice. The experience with the m3800 is the experience I hoped I would have the last time I tried to install Linux on my MacBook Pro.

My only suggestion to Dell is to make sure enough resources are allocated to maintain and improve the user experience with Linux. With the business support structure already in place it’s easy to imagine 75 of these m3800 laptops provisioned for our engineering group. The m3800 developer edition does not need to be less expensive than the Windows version of the same laptop. I would gladly pay the extra $100 for the computer without the windows license if that extra money could be reinvested into the Sputnik Project.

If the developer edition laptops run a higher profit margin for Dell that would hopefully provide a good incentive for them to produce the very best laptop for running Linux. Who knows they might even design laptops from the ground up to run Linux rather than just making sure it runs properly on the most suitable variants of the machines designed to run Windows. I know not everyone may agree with that, but if your reasons for using Linux are strictly financial, your priorities are different than mine.

Anyway, kudos to Dell for a great job bringing this product to market!

Setting up WiFi on Ubuntu 14.04 Server from the Terminal

December 27, 2014 in Computers, Linux | Tags: , ,

I was setting up a server today and I didn’t have a wired ethernet drop available for it but I did have WiFi. So I decided to just setup WiFi for today and get it plugged into the network on Monday. I mean how hard could it be to set up wifi right?


I started with this article on the Ubuntu community help portal:

I have to admit this got me most of the way, but for my machine there was a crucial piece of configuration missing. It turns out there are two driver options available for wifi cards, wext and nl80211. It took me far too many minutes hours of googling to discover this. Here was the page that explained it for me:

After updating the driver, here is what my file looks like:

# Provides: wpa
# Required-Start: $network $syslog $local_fs
# Required-Stop: $network $syslog $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start/stop script for wpa supplicant
# Description: Custom start/stop script for wpa_supplicant.

SELF=`basename $0`

function start() {

# TODO: Support multiple interfaces and drivers

## You can remove this if you are running 8.10 and up.
# Ubuntu 8.10 and up doesn't need the -w anymore..
# And the logfile option is not valid on 8.04 and lower
local ver=$(lsb_release -sr | sed -e 's/\.//g');
[ $ver -lt 810 ] && OPTIONS="$OPTIONS -w" && LOGFILE=""

# Log to a file

echo " * Starting wpa supplicant"

function stop() {
echo " * Stopping wpa supplicant"
pkill $PROGRAM

function debug() {

function restart() {

function status() {
pgrep -lf $PROGRAM

function usage() {
echo "Usage: $SELF <start|stop|status|debug>"
return 2

case $1 in
start|stop|debug|status) $1 ;;
*) usage ;;

That’s it. At least it was a Saturday so no one saw…

Convert Numbers from Base 16 to Base 64 in Python

October 17, 2014 in Computer Science, Development |

The Problem

A web app that I built for a client uses tokens to keep track of user activity.  We email URLs to users with links that have these tokens in the query string.  They look like this:

The problem is that older versions of Outlook wrap long URLs like this to a new line, but don’t include any of the characters on the 2nd line in the hyperlink. So when a user clicks on the link, the wrapped text is not included. Obviously this breaks the web app. Grr.

The Solution

Microsoft recommends that you educate your users on how to repair the broken link themselves. This is not a great solution. Another option would be to send full HTML messages, but that seems like overkill and we like plain text just fine.

Instead we want to shorten the URL so it will fit on a single line in most email clients. There are a couple places we can attack it:

The HTML File Name

This web app is running on an Nginx web server so we can define a custom location for this file that has a shorter path. Now when we enter this in the browser:

We will be redirected automatically to here:

The Token

Next we need to deal with the token itself. Again we can employ URL rewriting in Nginx to get started. We rewrite this:

We will be redirected automatically to here:

Shortening the length of the token itself would be even better. My first though was to convert the Token, which is a Hexadecimal number, to a base64 representation of the same number. I found a lot of examples of how to change encoding formats for text strings, but that doesn’t help. We need to convert the Hex number to a binary format and then to base16 to get a shorter result. In Python that looks like this:


Then instead of a 24 character token you have a nice 16 character token:


The Result

Now the links look like this:

Hopefully that will make super old versions of Outlook happier.

Lifeproof iPhone 5s Nüüd Case Review

September 1, 2014 in Apple, Hardware | Tags:

I held off on purchasing another Lifeproof case because of some of the issues I had with my previous Lifeproof case.  You can read about my experience with that case in my Lifeproof iPhone 5 Case Review.  I decided to take the plunge with a the Nüüd case because it removes the barrier between my finger and the touch screen.

Lifeproof Nüüd Case

Lifeproof Nüüd Case

The Nüüd case comes with an assortment of things in the box, including a block of plastic shaped like an iPhone so you can leak test the case without putting your phone in it first. That’s nice.

contents of the box

contents of the box

As you can see from the picture of the front and back of the case, there is no screen protector built into the front half of the case. Lifeproof does include a stick-on screen protector that you can apply if you want, but that sort of defeats the purpose. If you want to cover your screen, maybe you should consider the Lifeproof Frē instead.

front and back of the Nüüd

front and back of the Nüüd

Just like other Lifeproof cases, there is a door covering the Lightning port.

close up of the back

close up of the back

I had a really hard time getting the camera cover clean. It is a very stretchy bit of plastic that seems to love little specs of dust. I tried to use the cloth that came with the case, but I think that made it worse.

camera cover

camera cover

The same sort of stretchy film covers the home button (as near as I can tell). Be careful that you don’t trap any air under the film when you put the case together, otherwise it cause a bubble that doesn’t go away.

home button cover

home button cover

The speaker cover was another area that I had a little trouble with on the Frē because sometimes it would vibrate like a kazoo with certain frequencies of sound. I haven’t experienced that yet with this case, but I’ll update the post if I hear it happen.

inside speaker cover

inside speaker cover

My very favorite improvement to this case is the tether for the headphone plug cover. I could never keep track of those little plugs on the older case and they always fell out of the little holder on the extension cable. Losing one of those plugs was the worst. This tether is the best!

headphone plug tether

headphone plug tether


August 23, 2014 in Soapbox |

Embody Chair

My favorite thing in my office is my very fancy chair.

It’s an Embody Chair from Herman Miller.  Yes that means that many interns could be equipped with perfectly serviceable chairs for what a single Embody chair costs.  But now, after nearly six months of writing code while sitting in one I can confidently say that this chair has nearly ruined my ability to sit in any other chair.

To me it also shows that I’m not a kid anymore.  In earlier days, having the fastest CPU or the most Memory would have been much more important than a chair.  But now, the most important things are the chair, the display, the display arm, the keyboard, and the mouse.  Basically anything I touch or have to look at for long periods of time.

Chromebook to Ubuntubook with help from

August 10, 2014 in Computer Science, Development, Learning, Linux, Soapbox | Tags: , , ,

I came across Tom Preston-Werner’s blog post about installing Ubuntu on a Chromebook the other day while reading Hacker News and since I happen to have an Acer C720
and some kids who might enjoy it, I took the plunge and used Codestarter‘s installation scripts to install Ubuntu on my Chromebook.

I had thought of installing linux on the chromebook before reading Preseton-Werner’s blog post, but I didn’t take the plunge before because…

the Linux kernel does not support the trackpad.

The thought of compiling a customer kernel with the trackpad driver’s didn’t sound like very much fun. The Arch Linux Wiki I read suggested some instructions to patch the kernel. Anyway, I never really got to the point where I wanted to do all that to get Linux running on the chromebook.

Looking at the script I wondered how many hours they must have spent trying to get it exactly right. Despite the relative brevity of the scripts, it looks like a lot of time went into them.

The first step

involved making a backup of ChromeOS because there is a non-zero chance that this sort of hacking around in the internals of the c720 will result in a device that will no longer boot. I’ve mostly stopped using removable media in the past few years so after considerable searching I found an SD card that could function as the backup media. After making the backup image I read the next instruction which said to download the installation script to some other removable media. :/

Much later

I found an old USB stick that would work and loaded the installer onto the USB drive. Following the instructions provided, I activated Developer Mode on the c720.


Next I plugged in the thumb drive, and executed the command sudo bash kicked off the installation process.

The installer did somethings, which I think included formatting the hard drive and then rebooted the c720. The same sudo bash is run again and this time it installs Ubuntu in the space it formatted.


Overall I think the installation process is very smooth, but there are a few areas where it might have been made more clear. I’ve modified the instructions to reflect this:


I kept thinking this is too easy

while installing Ubuntu. Then My c720 froze the first time I attempted to boot into linux. Given how long some of the other steps took, I thought this too was just taking a long time.


Eventually I ran out of patience, and rebooted to try again. Here we go, I thought. Now it will take hours to get it working again.


This time it booted right up into Ubuntu. After settings my timezones I was presented with the desktop.


I’m still more than a little shocked it was that easy. I was certain that it would take longer, and be crazy difficult to get this working. The script from make a huge difference and in the end it was pretty easy to get Ubuntu installed on the chromebook.

How does it all fit together?

Now that the little chromebook is running Ubunutu, I’ll right the rest of this post using the chromebook itself.

It is not a fast computer. My primary computer is a quad-core MacBook Pro, so to say I’m a little spoiled is an understatement, but opening the Chrome browser for the first time under Ubuntu was certainly an exercise in patience. I think it’s safe to say that the c720 isn’t any sort of speed demon, but that isn’t what was aiming for.

They were aiming for a developer laptop.

There are other things that are important to developers, like a good keyboard which the c720 certainly has. The keys have a decent amount of travel, and are spaced widely enough that I didn’t find myself hitting the wrong key very much.

Additionally, SublimeText works well. It started up quickly and stayed responsive.


Solarized, the one true color scheme.

Over all the c720 with Linux is a heck of a deal. I only paid $200 for this little computer and it feels like I could use it in largely the same way I used my MacBook Pro. That’s high praise.

I think some kids are going to have the time of their lives learning to build with these chromebooks! I would have loved a computer like this when I was young.

<< more posts