Google Pixel for Developers

Google Pixel: The Perfect Linux Laptop?

When I ordered the Chromebook Pixel, I was confident I would not like it. $1299 for a laptop that is only a browser? For $1499 I can get a full Retina Pro running OSX, Windows 8, better battery life, more storage, more ram etc. The following post is the story of how my perspective changed, and how I use this machine as a power user / developer.

Google Pixel

The Competition

The first though most people have with the Pixel is, why not a Macbook Retina 13 refurb, or the Samsung Chromebook.

FeaturePixelMacbook Retina 13Samsung Chromebook
Screen2560x1700 12.85”2560x1600 13.3”1366x768 11.6”
Local Storage32GB128GB16GB
Cloud Storage1TB5GB100GB
Processori5 1.8GHzi5 2.5GHzExynos 5 1.7GHz
Battery Life5 hours7 hours6.3 hours

What Sets the Pixel Apart?

What the table above doesn’t account for are the qualitative features which make all of the difference. The build quality is fantastic, and the Pixel feels very tough. The Aluminum used in the Pixel feels stronger and more durable than the Macbook, and feels like it is less prone to denting. The screen is extremely bright, and even when plugged in I only use it at 70% brightness, and when on the go I turn it down to nearly minimum. Even with the brightness set so low, it is easier on the eyes and more readable than the TN panels common in most laptops.

The keyboard feels subjectively better than the Macbook Pro. It is an absolute joy to type on, and the touchpad is also flawless. Plugging in adapters to the Mini-Displayport “just works” with external monitors, and having a browser open with GTalk etc while a terminal on the other is great.

Chrome OS itself really gets out of your way. Out of the box I only installed the secure shell app, and I was able to do 50% of the Linux development I wanted to. No tweaking, driver downloading etc, out of the box I had a very fast browser, multi-monitor support, retina level text, music and cloud file storage.

The next question to answer was how do I do heavier development? Chrome actually has a great remote desktop feature built in, so I was able to connect to my much more powerful Ubuntu workstation, and run Eclipse there. It worked well over my local network, although there are even better solutions if you don’t enjoy the slight latency for screen refreshes and window dragging.

Chrome OS Desktop

Enter Crouton

Crouton provides a way to install Ubuntu and run it without rebooting from Chrome OS. This means if I run Crouton and simply press CTRL-ALT-Refresh I am instantly in my XFCE full Ubuntu 12.04.2 environment, and I can run any X86 programs I desire. I was able to use SSH XForwarding to also connect to my desktop, and it was also fast and fluid. I was able to load vim, git, gcc etc, however I actually like just using regular Chrome OS and a SSH session where possible, so I can switch between locations with ease. You can download Crouton from Github.

Battery Life

Most reviews highlight that battery life is less than four hours, but skip over how low you can set the brightness on this laptop. 60% brightness on the Pixel is brighter than a lot of laptops at 100%, and the screen is extremely clear and readible. I was able to get 6 hours of battery life without issue, and this will improve as Chrome OS seamlessly updates itself.


CNet wrote up a headline grabbing blurb, so I wanted to clarify screen scaling. As the owner of a Macbook Pro Retina 13, I never use screen scaling. The performance is horrible, frames are dropped, and it doesn’t make sense for developers. We generally work in text, so using the native resolutions and adjusting font sizes means we can manage the scaling easily. Sure, window borders etc are not resized, but in all of the applications I use, my biggest windows are full of text. Even if I do Windows development, I have C# / XAML windows open nearly fullscreen in VS. Scaling on Retina is, from my humble perspective, for those who don’t understand they can just decrease their font size and have great performance and readiblity.

Operating System

What is the most fascinating part of the Pixel is that I absolutely love Chrome OS. A few downsides of OS X you don’t find clearly articulated:

  • OS X got in my way a lot
  • Spinning beachballs
  • Safari rendering huge white blocks
  • Memory usage - you really do need 8GB to load iTunes, iPhotos and Safari
  • Had to install Ubuntu to get a full ‘real’ stack
  • Every time I had to install gcc-42 from brew dupes and have multiple compilers
  • Compiling ruby with rvm sometimes compiled with LLVM, sometimes didn’t, depending on the day and release
  • Everything costs more. Want to live the iLife? Many albums priced at $4.99 elsewhere can be > $15 on iTunes
  • The filesystem ‘feels’ slower, especially in rails. When I ran rake etc, these commands all took noticibly longer than my Ubuntu installs
  • 128GB is actually too small if you don’t live in the cloud, and was a constant battle


The Pixel is a winner for Linux power users. We get a Linux based OS out of the box that auto updates, is secure, requires no tweaking, and just lets us get to work. We can easily switch to full Ubuntu, and back with just simple keystrokes. SSH support is fantastic, and works with tmux etc (unlike so many SSH emulators on the Windows 8 store). The built in applications make photo editing, listening to music, youtube, gmail, and even games just a click away. If I had to purchase it again, I would order the LTE model as I intend to take this everywhere with me.

Google’s Nexus 10 vs Microsoft’s Surface Pro

Microsoft Surface Pro vs Samsung Nexus 10

Microsoft’s Surface Pro is the company’s most recent attempt to revolutionize the way we see the personal computer, merging the traditional desktop with tablets in a single interface. Google’s Nexus 10 comes with Android, which is purpose built for smart phones and tablets.

Microsoft Surface Pro vs Nexus 10

While comparing these two devices, I didn’t expect to enjoy the Nexus 10 as much as I did. On paper having a full core i5 processor in a tablet form was exactly what I was looking for. I don’t have many qualms with the Windows 8 interface, and think it is a decent step forward. However, when using the Surface Pro’s 10.6” screen, I found myself really enjoying the Windows 8 applications, while staying away from the desktop applications and using my laptop for those instead. The problem is that if I don’t actually run desktop applications on it, there isn’t much purpose over the whole line of Atom based Z2760 tablets that still breeze through the Windows 8 applications with ease and double the battery life.

Category Winner
Legacy EcosystemSurface
Battery LifeNexus
Open SourceNexus
StorageTie - Surface requires more space, but comes with more

The Nexus 10 lasts 3-4 hours longer than the Surface, while having a crisper display, and having more marquee applications available (obviously tablet applications, not legacy). ConnectBot for SSH is fantastic (I used it to generate this blog), and I found the Chrome browser very responsive. To Microsoft’s credit, IE 10 is great too, but from an interface perspective it is definitely first release material (for instance: how do you find your current downloads?). In addition, the Android notification framework works very well, while Microsoft’s live tiles look slicker, but functionally are less useful.

I found that when using Windows 8 and Android applications, the speed of both systems was generally equal. From a gaming perspective, the i5 and HD4000 of the Surface Pro provides a huge advantage over the Nexus 10, but if I am going to play PC games, I will just do it on my regular desktop and not a 10.6” screen (and now on Ubuntu with Steam).

I think Microsoft did a fantastic job designing Windows 8 and the Surface, but even if they were closer in price (Nexus 10 was $499 while the Surface Pro was $999), I would purchase the Nexus 10 over the Surface. It is lighter, open source, higher resolution, longer battery life, and with the Logitech Keyboard even a better typing experience.

Switching Hosting Providers and Migrating to Octopress

After a few years with my prior VPS host, it is time to move to a new hosting service. After checking into EC2, Rackspace and a few others, I went with Linode. In additon, I also have migrated from Wordpress to Octopress.

In the migration to Linode, I ended up switching to the 512mb plan instead of the previous 1 gigabyte plan. Octopress allows me to serve static pages instead of having to run a MySQL server.

I can write up a post about the migration itself, but I wanted to note why I went to Linode instead of an EC2 reserved instance. I have found the CPU available on the Linode 512 package was much quicker than the reserved instance, however the reserved instance would have given me 1.7GB of ram. In this case even at 1 gigabyte I wasn’t using all of my available ram, so I decided to cut down to 512. As part of that switch I actually went with a 32-bit Ubuntu 12.04 install, as staying with the stock 64-bit would use more memory, especially if I ran any 32-bit programs.

I have a check list of items I am doing out of the box, I will share these in a blog post early next week. Happy holidays!

Ubuntu on Windows 8 With Hyper-V

Windows 8

Since Windows 8 was released on the 26th, I have given it much more time and consideration over past Windows releases. The interface works really well, especially on my convertible Lenovo Thinkpad Twist. If you upgrade to Windows 8 ($14.99 if you use the Windows Upgrade offer), it comes with the ability to create virtual machines. That technology is called Hyper-V, and it allows you to run virtual machines which are isolated from your Windows 8 install, and can even run other operating systems.

Hyper-V Installation

Windows 8 Pro includes Hyper-V by default, but it isn’t enabled. To add Hyper-V, you will want to open the control panel (shortcut: Windows-X Control Panel, and select “Turn Windows features on or off”). From there just place a checkmark in the Hyper-V box and you are good to go.

Setting Up a Virtual Switch

Setting up a Hyper-V Virtual Switch For the first step, you will want a virtual switch for your VM to connect to. The virtual switch will allow your VM to connect to the internet and communicate with your Windows 8 system.

Make sure if you want internet access that you select .External. as the type, and pick your network interface that has internet access. For example, on my Thinkpad W520, I had multiple interfaces, but only my Wifi card had internet access. If you pick .Internal. or .Private., your VM will not be able to communicate to the internet, but would be able to talk to other VMs on the same host. Having internet access during the install will allow you to install updated packages, and having network access will allow you to configure DHCP by default rather than reconfiguring it later.

Creating the Ubuntu VM

Once we have a virtual switch to connect to, the next step is to create the VM. There isn.t much surprising here, but I have included screenshots of how I set it up for the curious. Right click on your Hyper-V host (this could be your laptop, or even a remote server), and click New then Virtual Machine

I chose to name the VM “Ubuntu 12.04.1” as I might have many different Ubuntu.s installed at once. I left the default storage location in, however if you wanted to store it on a different hard drive or even over the network, you can change that option on this dialog screen.

Naming the VM

I chose 4000MB as a starting point, however my laptop has 24GB of ram. If you are running on a 4GB or 8GB system, you probably want to choose a more conservative figure. 1024MB (one gigabyte) should be plenty for most applications, however if you give it more like I have, that memory can be used by the guest to cache IO (and the host OS will also cache that IO if you have free memory, but I don.t have any benchmarks to compare the two yet).

Setting up the storage The next screen will ask us how we want to configure our virtual disk. The default is 127GB, which is much larger than you likely need by default. Even 20GB is a safe default for Ubuntu. If you do pick a larger size, you will not immediately lose that disk space on the host system. Creating a 400GB virtual disk will actually only take 5GB or so initially, and will grow as you create more data.

From here we are ready to select the Ubuntu ISO to boot off of, although this could just as easily be Fedora, OpenSUSE or even Windows 7 (if it was Windows 7 you likely want more than 1GB!)

Booting the VM

Wrap Up

Hyper-V and Windows 8 provide a great platform to virtualize Ubuntu, for those who want to get started with understanding Linux or Linux development. The Hyper-V tool is not Metro enabled, so it will run on the Windows 8 desktop mode. It also will not work on Windows RT devices, although once you setup a VM you could always remote desktop and SSH in via once of your more portable devices. The process of getting a VM setup and running was very smooth, intuitive and painless, I think Microsoft did a good job of making Windows 8 work on both tablets and desktops, while still including the ability to run traditional applications like Hyper-V. It is an exciting time to be a technologist, we certainly don.t suffer from a lack of excellent choices (Ubuntu, Windows 8 and OS X), or even interoperability between them.

Ubuntu 12.04 and the HP Envy 15

The HP Envy 15 (HP Envy 15-3033CL) was released in late 2011 as a competitor to the MacBook Pro. When comparing against new models, I chose the envy over others that I was considering:

Model Notes
Asus UX31 The Asus UX31 was my second choice, with an SSD and high resolution screen. The touchpad however was as bad as the other internet reviews say it was, and it didn’t suspend / resume without hand holding according to the wiki
MacBook Air 13″ The MacBook Air was a great choice, but for the same price I was able to sacrifice some portability for 8GB of ram and 4 cores. In addition I had no intention of running OS X, so this didn’t make a lot of sense. Also it is very sensitive to water according to customer accounts on the internet, which scared me as I like to work hydrated
Acer S3 I liked the Acer S3 hybrid SSD / traditional hard disk approach, but the screen resolution was a horrible 1366×768 which is not easy to get real work done on
MacBook Pro 15″ The Macbook Pro 15″ was the same size as the Envy, with less ram, processor and screen resolution

The HP Envy 15

The laptop is the same form factor as a Macbook Pro 15, and has an aluminum body. It has a hardware volume control which works out of the box on Ubuntu. The keyboard itself feels natural and is easy to type on, although the laptop supports Bluetooth if you wanted to easily add an external keyboard. The keyboard is also backlit, which makes it much easier to see the keys in low light conditions.

The Envy sets itself apart from endless models with low resolution screens by providing a 1920×1080 15″ LCD. The screen allows for much more content on screen than the traditional 1366×768 panels and looks beautiful. Having recently purchased a laptop with a 1366×768 screen, I can say that no matter how much you try and make apps fullscreen and decrease fontsize, that they simply don’t compare to the higher resolution display of the Envy.

Ubuntu Experience

Feature Notes
Touchpad / Clickpad Works. Comes with a synaptics clickpad. See notes below
Video Works. Comes with hybrid Intel / ATI graphics, and they both work out of the box using open source drivers. See notes below
CPU Works. CPU throttling works and all cores are recognized
Wireless Works. Comes with an Intel 6230, although I did force it to not use 802.11N. See notes below
Networking Works. Lan connectivity works with no issues
Suspend / Sleep Works. No issues with suspend / resume functionality

Touchpad / Clickpad

After a little bit of searching I found that it is 10x easier to google calling it a clickpad. Run this to make click-dragging work in 12.04 (must be ran each time you start up):

# Taken from
xinput set-prop "13" "Synaptics ClickPad" 1


By default it works great, including with Unity. However, you could get better 3d performance if you use ATI.s Catalyst drivers. They can be installed through the Additional Drivers window. If you don.t want both cards running at once (ie you are on battery power):

echo OFF > /sys/kernel/debug/vgaswitcheroo/switch

This will switch the ATI card off leaving only the Intel card on


I have a pretty awesome router that runs DD-WRT (ASUS RT-N16), however it doesn.t appear I can use wireless N. To disable wireless N:

cat << EOF > /etc/modprobe.d/disable-n.conf
options iwlwifi 11n_disable=1


Here you can see them scaling their frequencies as expected:

sharms@dawnstar:~$ cat /proc/cpuinfo | grep MHz
cpu MHz     : 800.000
cpu MHz     : 800.000
cpu MHz     : 800.000
cpu MHz     : 800.000
cpu MHz     : 800.000
cpu MHz     : 800.000
cpu MHz     : 2201.000
cpu MHz     : 800.000

Using ITerm2 Themes With Gnome Terminal

Recently I had the chance to play with OS X and ITerm 2. One thing they do right is have a ton of available colorschemes. You can check them out at iterm2colorschemes. At any rate, if you are reading this you likely prefer Linux and Gnome Terminal to OS X, but don.t have the same availability of color schemes. I was able to put this together in Ruby, using Nokogiri-PList to parse the ITerm 2 themes. The usage is just ./iterm2gnome.rb Zenburn.itermtheme


require 'nokogiri-plist'

# /apps/gnome-terminal/profiles/Default
#  -> background_color
#  -> bold_color
#  -> foreground_color
#  -> palette

def convert_to_key(real_color)
  return "%02X" % (real_color * 255)

def gconf2_command(gconf_key, gconf_type, gconf_value)
  return "gconftool-2 --set /apps/gnome-terminal/profiles/Default/#{gconf_key} --type #{gconf_type} \"#{gconf_value}\""

def get_rgb(doc_hash)
  red   = convert_to_key(doc_hash["Red Component"])
  green = convert_to_key(doc_hash["Green Component"])
  blue  = convert_to_key(doc_hash["Blue Component"])

  return "##{red}#{green}#{blue}"

ARGV.each do |iterm_theme|
  f              = open(iterm_theme)
  doc            = Nokogiri::PList(f)
  keys_to_export =
  keys_to_export["palette"] =

  doc.keys.each do |doc_key|
      if doc_key =~ /Ansi \d+ Color/
          slot  = doc_key.scan(/Ansi (\d+) Color/)[0][0].to_i
          hex   = get_rgb(doc[doc_key])
          keys_to_export["palette"][slot] = hex

      if doc_key =~ /Background Color/
          # This goes directly to background_color
          hex   = get_rgb(doc[doc_key])
          keys_to_export["background_color"] = hex

      if doc_key =~ /Foreground Color/
          # This goes directly to foreground_color
          hex   = get_rgb(doc[doc_key])
          keys_to_export["foreground_color"] = hex

      if doc_key =~ /Bold Color/
          # This goes directly to bold color
          hex   = get_rgb(doc[doc_key])
          keys_to_export["bold_color"] = hex

  puts "# " + iterm_theme
  puts gconf2_command("foreground_color", "string", keys_to_export["foreground_color"])
  puts gconf2_command("background_color", "string", keys_to_export["background_color"])
  puts gconf2_command("bold_color", "string", keys_to_export["bold_color"])
  puts gconf2_command("palette", "string", keys_to_export["palette"].join(':'))


ruby iterm2gnome.rb Zenburn.itermcolors
# Zenburn.itermcolors
gconftool-2 --set /apps/gnome-terminal/profiles/Default/foreground_color --type string "#DCDCCC"
gconftool-2 --set /apps/gnome-terminal/profiles/Default/background_color --type string "#1F1F1F"
gconftool-2 --set /apps/gnome-terminal/profiles/Default/bold_color --type string "#FFCFAF"
gconftool-2 --set /apps/gnome-terminal/profiles/Default/palette --type string "#000B13:#E89393:#9ECE9E:#F0DFAF:#8CD0D3:#C0BED1:#DFAF8F:#EFEFEF:#000B13:#E89393:#9ECE9E:#F0DFAF:#8CD0D3:#C0BED1:#DFAF8F:#FFFFFF"

You can just paste the above in and it will change your default gnome-terminal color scheme for you.

Ubuntu Unity With Three Monitors

I wanted to share my new desktop configuration. When I was searching I noticed a lot of uncertainty around tri-head configurations:

Component Spec
Graphics Diamond HD 7970 3GB PCI-E
Stand Ergotech Triple Horizontal LCD Monitor Arm Desk Stand
Window Manager Unity
Distribution Ubuntu 12.04 x86_64
Adapters Accell UltraAV B087B-002B DisplayPort/DVI-D Dual-Link Adapter

Ubuntu Unity on Three Monitors

Three Monitors

Once I installed Ubuntu, I installed the proprietary FGLRX drivers from the restricted driver manager (I hit the windows key then typed in drivers). After installing and restarting, I ran the FGLRX graphical control center, and selected the multiple displays setting. This setup has Unity on each individual monitor, and I can drag windows between all 3 screens. The resolution on all three monitors is 1920×1080, with the side monitors being LG 23″ IPS and the center monitor being a generic 25″. The IPS monitors are nice because I can switch them to portrait mode and not have any of the viewing angle issues that TN panels have.

Monitor Stand

I looked a few different stands, and the one I chose certainly wasn’t cheap. I wanted to error on the side of quality, and was not disappointed when I received it. The stand is very high quality, very easy to assemble, sturdy and most importantly, easy to reconfigure when I adjust my monitors.

Active Display Port Adapters

One note with my setup is I have an active display port adapter, as by default AMD cards only support two outputs. The active adapter plugs into the video card and a usb port, and uses the usb ports power to power the connection between the video card and display.

Ubuntu Linux on the Acer TimelineX

I was searching for a new laptop recently, and the journey took me in many different directions. I tried a 13. Macbook Air, a Acer Aspire S3, HP Envy 15 and considered countless others. To cut a long story short, I decided on the Acer TimelineX AS4830TG-6808.

Component Cost
Acer TimelineX AS4830TG-6808 $649 at Microcenter
Samsung SSD 256GB $309 at Microcenter
Crucial 8GB (2x4GB dimms) $49 at Microcenter
Ubuntu 12.04 x86-64 Free!

This gave me everything I was looking for. It boots in 5-6 seconds flat, has a ton of SSD storage, all of my frequent files get cached in ram anyways and it works great. It also has the added advantage of not having only a Intel HD 3000 card (which does horrible on actual 3d applications), but has an Nvidia GT540M card which is fully supported by Ubuntu 12.04 and the Bumblebee Project. Total: $1000

Adding Components

Once I removed the middle screw towards the front of the laptop, the panel came off by just sliding it forward. Here I replaced the slow tradition SSD and single 4GB module of ram:

Software Steps

Once I had the hardware ready, it was time to install Ubuntu 12.04 (which you can now download straight from without any special links). When I partitioned the drive, I made the following partitions. This is largely up to personal preference, but this best suited my use:

300M    /boot
20G     /var
500M    swap
max     /

After the installation was finished, I edited my fstab for all partitions to use the noatime,discard option as I didn.t want too much writing to my SSD. .discard. will enable TRIM support for the SSD. I changed the file by running .gksudo gedit /etc/fstab.:

UUID=ff44d983-f944-4790-95c7-f2e9982cf70 / ext4 errors=remount-ro 0 1


UUID=ff44d983-f944-4790-95c7-f2e9982cf70 / ext4 noatime,discard,errors=remount-ro 0 1

Display Settings

Out of the box, the system cannot change brightness. I added the following lines to my default grub:

sudo -i
echo 'GRUB_CMDLINE_LINUX="quiet splash pcie_aspm=force i915.i915_enable_rc6=1 acpi_osi=Linux acpi_backlight=vendor"' > /etc/default/grub


Wifi worked out of the box, however with my wireless N access point I had to force it to not use wireless N:

sudo -i
echo "options iwlwifi 11n_disable=1" > /etc/modprobe.d/disable-iwlwifi-n.conf

Nvidia Graphics

By default the system will use the Intel graphics, however this is quite slow for anything other than web browsing. To use the Nvidia Optimus features, I installed Bumblebee

sudo add-apt-repository ppa:bumblebee/stable
sudo apt-get install bumblebee bumblebee-nvidia
sudo usermod -a -G bumblebee $USER

After rebooting, you can then check out the dramatic FPS difference between these:

# Intel 3000
# Nvidia
optirun glxspheres


Bluetooth works, however it does take a little tweaking out of the box:

sudo -i
cat << EOF > /etc/rc.local
#!/bin/sh -e
modprobe btusb
echo "0489 e033" > /sys/bus/usb/drivers/btusb/new_id

Suspend / Resume

Looks like there is still the suspend / resume bug for the EHCI controller on a few different netbooks, this fixes it if your laptop shows a black screen resuming from suspend, download this file and copy it to /etc/pm/sleep.d/20_suspendfix

Terminal Settings

As soon as I get a new system up, I apply my bash defaults that I posted to the Ubuntu wiki with a detailed description of what they do: Enhanced Bash


I install the following programs right away:

sudo apt-get install git mercurial bzr build-essential vim seahorse xchat keepassx vlc gimp chromium-browser fonts-droid fonts-inconsolata devscripts


I am really enjoying both this laptop and the Ubuntu 12.04 release (running Unity). I was able to hook up my external 25. monitor through the HDMI port and it detected and used it seamlessly. It suspends and resumes with no problem, audio controls and brightness controls also work. Two finger scrolling works once enabled under touchpad settings, and the battery life is over 7 hours.