Learn Docker With My Newest Course

Dive into Docker takes you from "What is Docker?" to confidently applying Docker to your own projects. It's packed with best practices and examples. Start Learning Docker →

I Almost Rage Bought a MacBook Pro


Learn how I blew an entire weekend formatting my computer, playing with the Windows Subsytem for Linux and a Hackintosh, then almost bought a MBP.

Quick Jump: My Current Development Environment | What's a Development Environment? | Let's Talk About My Environment's Issues | How I Blew an Entire Weekend on My Workstation | Loading Up a MacBook Pro on Apple's Site | Is a MBP All Unicorns and Rainbows?

The best carpenter I know once told me that you should invest whatever it takes in your tools because even saving yourself a few minutes of time regularly is worth it.

For most of my life I didn’t follow this philosophy. I would always look for the cheapest solution that got the job done, often trading a ton of my personal time and getting annoyed regularly for less of a hit to my bank account.

If I could get something for $20 that’s nearly identical to what the $200 version costs I would feel like that’s a huge victory, even if it took me 10 hours to set up and only gave me 95% of the total experience.

Lately I’m noticing that it’s not just time you’re giving up with the lesser solution, but it’s your happiness level too. For example, if your development environment is causing you to do something many times per day that’s annoying, then it’s going to throw you off your game.

If you encounter that issue 40 times a day and it takes you 6 seconds to work around it each time, that’s “only” 4 minutes a day being wasted but it’s so much more than that 4 minutes. That’s actually ~24 hours of dealing with that annoying bug in a year, but that’s not even the worst part.

It’s 40 times of you being interrupted daily and having to context switch from whatever you’re doing to work around the bug. I’ll talk about some of the issues I experience later on and unfold a story that almost got me to buy a brand new Macbook Pro, but for now let’s talk about development environments.

My Current Development Environment

If you’ve taken any of my courses or have read my blog then you’ll know that my main operating system is Windows, except I run an integrated vmware xubuntu based VM that lets me run GUI Linux applications in their own independent isolated windows.

It’s basically like running Windows and Linux together as one operating system:


What’s a Development Environment?

To me, a development environment isn’t responsible for just writing code and using tools related to writing code. It’s everything. It’s your workstation, computer, or whatever you want to label it as.

In a perfect world, here’s 5 things I would like in no particular order:

  • An extremely polished OS that feels smooth and is rock solid
  • An OS that doesn’t phone home with sensitive information regularly
  • A secure browsing strategy to drastically reduce the odds of my OS getting hosed
  • Flawless support for multiple monitors and virtual desktops / workspaces
  • Unix(ish) based solution for all development related libraries and tools

If you want the above 5 things, you have 3 very reasonable choices:

  • You can use OSX
  • You can run Linux natively
  • You can run Windows with a Linux VM approach similar to mine

Your Workstation Is More Than Just a Coding Box

For a lot of people (myself included), that’s not all that we want. We’re greedy bastards and we want our computer to do everything within reason.

The things that we want will be different for everyone. Some people really want cross device integration and if you have something like an iPhone, iPad and run OSX on your main workstation then it’s pretty clear OSX offers you a solution that cannot really be matched anywhere else.

However, there’s also people like myself who want this instead:

  • Incredibly polished video recording / editing software
  • Incredibly polished audio processing software with very strict latency demands
  • Top notch support for a drawing stylus / pad
  • Ability to occasionally play games without dual booting or killing my work flow

Your Workstation Should Make You Feel at Home

Having a single operating system with a unified look and feel to its apps is really important. I don’t think I’m alone here because every vendor is doing this, and this type of UI cohesion existed way back in the day before mobile phones.

There’s just something about it. It makes you feel welcome and after you customize things a bit, it feels like your own. This is your personalized gateway to the digital world.

Let’s Talk About My Environment’s Issues

Honestly speaking, my current set up is pretty close to the holy grail but it has just enough really annoying things that plague me on a daily basis that I spent an entire weekend researching alternatives.

But first, here’s a few things I deal with on a daily basis:

When Working in an App Controlled by the VM My Shift Key Gets Stuck

Words cannot express how annoying this is. Imagine you’re happily coding away in your favorite code editor (btw I like Sublime Text 3) and you hit the shift key.

That’s innocent enough right? I mean, you probably hit the shift key hundreds of times a day.

Well my friend, vmware has this 7+ year old bug where the shift keys gets stuck every once in a while with no visual indication that it’s happening. Go ahead and try holding down the shift key now while using the mouse just to see how disruptive that is.

This happens no joke, at least 40 times a day to me and the way to fix it is to randomly hit the shift key a few times until it gets unstuck.

It’s infuriating enough that it makes me day dream about entering a fancy china shop and going berserk. I’m talking about running through the place with a poleaxe and in a whirlwinding frenzy, level the place.

The really crazy thing is I’m the most nonviolent person you’ll ever meet. I guess that’s a word of caution to never mess with my shift key because I cannot guarantee your well being.

There’s a Very Small Amount of Input Delay in the VM’s Apps

This one is ongoing every time I type, but it’s not really that annoying because it’s barely noticeable. I would estimate it’s around 50ms of latency but it’s enough to make it feel sluggish when directly compared to notepad in Windows.

If this were the only issue, I’d happily deal with it.

Non-Uniform UI Across Applications

This one really makes my machine feel more like Frankstein than a comfortable home. It’s not really Windows, but it’s not Linux either.

The Windows file explorer is so much more smooth than xubuntu’s file explorer (Thunar) but it’s not really xubuntu’s fault. It’s a problem because it’s running in a VM. It’s quite speedy for what it is, but it doesn’t have that liquid smooth feel to it.

It feels a lot less polished than moving around and using Windows applications.

Each OS only knows about itself

For example I can’t use xubuntu’s virtual desktop management solution because it doesn’t know anything about my Windows host’s windows.

Luckily I can use virtual desktops from Windows and it picks up both, but certain Windows features don’t work with apps ran inside of the VM.

For example, if I maximize Sublime Text 3 which runs in Linux, it covers my Windows task bar which is actually very annoying. This is probably 2nd on the list in terms of disruptiveness.

It gets worse too because if you use certain Windows features like snapping 2 Windows together side by side, it won’t recognize apps being ran in the VM.

Drag / Drop, Mounting Drives and Isolated File Systems

There’s a bunch of little annoying things like not being able to flawlessly drag and drop between Windows and the VM. It works most of the time but sometimes the mouse cursor gets stuck and it doesn’t work.

Mounting drives is also a concern. If you mount a drive from Windows into the Linux VM then everything is executable and owned by root:root. This conflicts with certain tools due to permissions.

Then there’s completely separate file systems. If I have a single folder that contains something, such as everything related to a website, it becomes an issue living inside of the VM’s file system.

It’s an issue because let’s say I have a private folder that stores certain things like PSD assets that I created in Photoshop. Since it lives in the VM, I have no way to open this file in Windows without first copying it to a shared drive.

This is ultra annoying because I have to copy it to the shared drive, edit it, then move it back over to the VM just to keep things all in 1 place.

Is It Really That Bad?

Sort of. I’ll admit, these issues are a lot better than having to work in a coal mine and get black lung disease but as a modern day first world problem they distract me from my bottom line – which is to teach everything I know about software development to anyone who is interested.

How I Blew an Entire Weekend on My Workstation

Previously I was running Windows 8.1 because I was initially skeptical about upgrading to Windows 10 due to all of the privacy concerns associated to it.

I weighed that against solving some of my issues by upgrading to Windows 10.

Perhaps Windows 10 handled input devices in a way that could eliminate the shift key bug in the VM. I knew it was a long shot, but it was worth it since it’s my #1 annoyance.

During some Windows 10 research I discovered the Windows Subsystem for Linux (WSL). It can run Bash as well as most user land aspects of Linux natively on Windows.

That sounded awesome on paper. I spent many hours looking into this and even saw people were using Vcxsrv as an xserver to run GUI apps. Holy smokes, this looked amazing.

I was sold and more importantly, I was excited. This could technically mean that I could drop vmware and just use WSL natively, solving pretty much all of my problems.

WSL and inotify Don’t Mix Well

The tears started rolling (ok I really didn’t cry) after I discovered that inotify events don’t get processed by WSL in the production branch of Windows and it won’t be included until the next big Windows update (~4 months from this article).

inotify is a Linux kernel feature that’s super efficient for watching files for changes. Most web frameworks and other web related tools use this to watch files for changes. For example Rails, and pretty much any JS asset tool chain.

Not having support for this is a deal breaker.

Selling Your Soul for Insider Preview Access

On the bright side an insider preview build of Windows 10 does have the inotify fix and it’s easy enough to opt into this for free but it comes at a heavy cost in privacy with no sane way to opt out.

Without writing too much about this, Microsoft has multiple public Windows branches. The insider preview branch allows you to get newer updates but you must login to Windows with a valid Microsoft Live account.

In addition to that your system’s privacy settings need to be set to allow for MS to transmit personally identifiable data to them along with very invasive usage reports on how you use your computer.

Long story short, they would associate your name and email to data such as:

  • How often you open certain apps
  • Your entire file system (file names, etc.)
  • Contents of opened files

Not only that, but it wouldn’t be sent for just crashes. They would happily collect and transmit this information as basic usage reports many times per day.

No thanks Microsoft. Listen, I’ll buy your OS and support your long term goals for getting Linux to run natively but this privacy nonsense is insane. I’ll never in a million years agree to that and I recommend anyone considering to use the insider’s preview program to consider otherwise.

WSL Mount Performance Is Still Bad

One nice thing about WSL is you can access things outside of the Linux subsystem, and it does this by mounting in other drives just like you would with Linux normally.

This is perfect, except the performance of the mounted drives are extremely slow and close to the point where it’s unusable for large projects. I mean you could use it, but having to wait 9 seconds for your page to render in a browser instead of 1 second is a deal breaker – at least for me.

This still isn’t fixed as of November 2016 and there’s no fix in sight. If it doesn’t make it into the early 2017 official Windows update then it might be a year+ before the production branch sees this. Yikes.

WSL Doesn’t Play Nice With Docker

I’m a huge Docker user, both in development and production. Unfortunately Docker uses a lot more than just user land features of the Linux kernel and does not run on WSL at all.

However, in theory if you installed Docker on Windows, you could install the Docker client in WSL and configure it to connect to the remote Docker server running on Windows (either through Hyper-V or VirtualBox). That’s cool, except there’s so many levels of abstraction and horrible mount performance from both WSL and Docker that it’s unusable for every day use.

I could see this changing over time, but who knows how long it will take. I want to solve problems today while being happy, not have to wait a year or longer to solve them.

Update: WSL is amazing now!

All of the above WSL issues are solved and it has been a great experience for the last 2+ years since I have been using WSL full time on Windows stable.

View my latest set up


So after spending an entire day with the above, I was like screw it. My drive is already formatted so there’s no going back. Now is the best time ever to take a shot with a Hackintosh.

I know there’s a lot of implications of using one, like going to sleep and dreaming about unicorns and rainbows and then waking up to an update that causes a lot of time to be wasted debugging obscure and undocumented issues. Possibly even causing you to lose an entire day.

To me, this seemed worth it at the time. Especially since I guess you could disable updates and stay with a known build for as long as possible.

I made some calls and a few hours later I was able to access the app store with a valid account and I created a USB bootable version of Sierra following everything on https://www.tonymacx86.com/.

That site’s resources are invaluable, but I couldn’t make it past the UniBeast bootloader. My hardware just isn’t compatible I guess. I got the blinking cursor of death when trying to boot from the USB stick.

I tried everything possible within reason, such as removing every external device from my computer, multiple USB sticks / ports, and only using USB 2.0 connections for my keyboard and mouse.

Also I spent many hours cross referencing every piece of my hardware I had against Hackintosh search terms to see what I could come up with. I couldn’t find anything that helped me resolve the error.

Accepting Defeat

I tried everything, so in the end I kept Windows 10 and am back to using the vmware based xubuntu approach. It’s slightly nicer looking than Windows 8.1 but all of the issues still remain.

Perhaps by this time next year WSL will be better suited for actual development.

Loading Up a MacBook Pro on Apple’s Site

OSX really meets my demands on everything except gaming, but since I don’t game a ton I was willing to make that compromise since I could always dual boot for games that happen to not run well on OSX.

I went to Apple’s site to build one but got let down when it said it would cost +$700 USD to add 200mhz and +256GB SSD to the machine. I am not part of Apple’s ecosystem and I hear people joke about the “Apple tax”, but man that’s brutal.

It also said it would take 5 weeks for it to ship, which is crazy to me. You can’t offer a premium product and offer non-premium service as the first interaction you have with a potential customer. Plus I would have had to buy adapters just to use my USB devices, eww.

My entire i5 3.2GHZ / 16GB of RAM / SSD / GeForce 750ti / etc. machine, complete with case, power supply, 8x USB ports, keyboard and mouse cost about $750 over 2 years ago.

I ultimately didn’t pull the trigger on the MBP and now it’s back to the same old same old.

Is a MBP All Unicorns and Rainbows?

I thought long and hard about the carpenter’s advice on buying the best tools for the job, but is a Macbook Pro really that good? Is it the best development / content creation platform you’ve ever used?

If you have one, please share your opinions of it for day to day development and if you do video editing, how does it compare to equal hardware on Windows?

Never Miss a Tip, Trick or Tutorial

Like you, I'm super protective of my inbox, so don't worry about getting spammed. You can expect a few emails per month (at most), and you can 1-click unsubscribe at any time. See what else you'll get too.