Brief Review of Macbook Pro with Retina for Windows Development

I recently made the switch from using a Windows box for my everyday development tasks to a Macbook Pro 15″ Retina.  I’ve gotten a few questions from Windows developers I know about things they’ve heard about blurry displays in Windows VMs, slow Mac performance when running VMs and other unpleasantness.  Another side question is whether it is best to use VMWare Fusion or Parellels.  I figured I’d take a minute to write down what I’ve learned while it is fresh in my mind.

I’ve been developing on Windows VMs for several years now.  I generally keep my productivity stuff in the host and put my development environment in the VM.  This lets me snapshot and restore the development environment easily.  It also lets me experiment with upgrades.  I always develop with multiple screens.  I used to insist on three when I was stuck with 1920×1080 but now that 27″ monitors featuring a resolution of 2560×1440 have become affordable, I am quite comfortable using the laptop as one screen and the 27″ as a second screen.  When I’m writing Windows code, the development VM runs full screen on the big monitor while I use the laptop screen from the host to look up documentation, handle email and do other office productivity tasks.  I usually give the development VM half of the host machine’s memory and CPU.  For the last couple years, my hosts have all been I7 quad cores with at least 16gb of RAM and the fastest SSD possible so VM performance has been snappy.  It’s not as fast as the host, especially when it comes to disk-intensive operations like compiling applications, but it is still faster than working directly on a host with a traditional hard drive.

I purchased a mid-2012 Macbook Pro with a 2.7Ghz I7, 16GB of Ram and a 750GB on board SSD in May of 2013.  I got some discounts since it was near the end of the product cycle, but it still cost about 20% more than a roughly equivalent 15″ laptop from Dell.  The Dell in question has a faster, 3.2Ghz processor and a smaller, 512GB SSD.  Like the Mac, it does not have a touch screen.  Of course, it also has a much lower resolution screen and is a bit heavier and thicker.  I’m not doing a comparison review here, but it is important to note that you pay a premium for the Mac’s design and you get significantly less in raw specs.  What you get in return is a far better user experience with a crisper display, a better, more usable touchpad and superior battery life.  I also purchased the Macbook because it is a better platform for work on things like Node.js since the underlying OS is a Unix derivative.

I first tried VMWare fusion.  It installed easily and guided me through the setup of a Windows 8 VM in minutes.  It starts out in a scaled mode that basically doubles pixels on the Retina display giving me a perfectly usable experience with sharp text in things like Visual Studio.  When I moved the VM to my 27″ monitor, the host re-scaled giving me more screen real estate while maintaining sharp text and graphics.  After I manually increased the guest’s memory to 8GB and gave it four cores, performance was a little better than what I was seeing when hosting on my big Windows desktop (3.06Ghz quad core I7, a fast SSD and 24GB of Ram).  Visual Studio running Reshaper with code analysis turned on performed well.  Compiling and running all the tests on my main work project was about 15% faster than what I was seeing in my old hosting environment.

I tried out VMWare’s Retina mode and that’s when things got a bit ugly.  The idea here is to let the Windows guest run at full resolution on the Retina display.  It looks crisp, but everything is just too small to read.  As recommended by VMWare, I turned up DPI settings in Windows and that’s when I started seeing the blurriness that some of my friends mentioned.  At 125% DPI, everything in Windows was sharp but still way to small for my taste.  At 150% DPI, menu bars and other navigational elements were barely big enough to use but I started noticing blurriness in graphical elements .  This is because Windows applications are not developed or tested to work at high DPI levels.  At 200% DPI, text was good, but things really started to break down.  For example, maximizing Chrome lost the title bar.   I probably could have gotten things working reasonably using 125% DPI and then tuning text sizes and zoom levels of various applications but it was just too much work.  Furthermore, turning up the DPI and font sizes in Windows made Windows applications appear way to large when running in Unity mode.

I had a couple gripes with VMWare Fusion.  Their choice of hot key mappings for Windows 8 has lots of annoyances.  Reaching for what you think should be search for applications shuts down the VM.  Unity mode, which lets you see host windows and guest windows side-by-side, is a little clunky.  On two occasions VMWare froze and forced me to reboot the host.

My experience with Parellels and Retina were about the same.  Setup was a bit easier.  Performance was a bit better especially on compiles.  The display modes were roughly equivalent with scaled mode the best choice when you are running with the laptop screen and an external, non-Retina, display.  Their side-by-side mode, coherence, is much nicer than the one in VMWare.  It never crashed on me.  Overall the app seems like a much better Mac citizen.  It costs more than VMWare, but the benefits made it worth the extra cost for me.

My bottom-line is simple: A Macbook with Retina running a Windows VM using Parellels is an excellent choice for Windows developers.  If you are interested in things like Node.js and even Javascript, it also gives you quicker and easier access to the best open source tools and libraries often long before they get ported to Windows.  The hardware is a little pricey, but the value you get is well worth the extra cost.


Tablet Wisdom From the Mouth of Babes

My twin boys are now 16 month old and are both avid users of the various tablets we have in the house.  Since I’ve been experimenting with tablet development, we have an iPad, a 10″ Motorolla Xoom (Andorid 4.1), a 7″ Nexus Table (Android 4.2) and, because my wife couldn’t resist a bargain, a 10″, discontinued HP TouchPad (WebOS) so there’s plenty for them to choose from.  Here are some random things I’ve observed about how they’ve learned to use the tablets, what they do with them and how it seems to have impacted their development:

  • For awhile, one of the boys liked to watch a little Baby TV before bed.  Now he would rather sit and browse through YouTube.  The bottom line is he would much rather watch what he wants when he wants it.
  • YouTube occasionally gets stuck on the iPad.  Gavin has learned how to fix this by refreshing the browser.  Grant comes to me or his mom and says, “iPad hang” and hands it to us so we can fix it.  Both my boys also know words like “reboot”.  It’s kind of sad to realize these things are still pretty unstable despite their apparent level of sophistication.
  • Grant wanted to sit in my lap while I was working so I fired up YouTube on one of my monitors to play his favorite song.  When it was over, he reached up to the screen and tried to swipe to browse the list of related videos.  Of course, that did not work, which caused quite a bit of frustration.  Showed him how to use the mouse, but he just didn’t get it.  Even babies know direct manipulation is the best!
  • The boys don’t care which tablet they get as long as it has the software they want.  If Gavin wants angry birds, he’s equally happy with the Nexus, the iPad or the TouchPad.  Unfortunately, the TouchPad doesn’t have much except for Angry Birds so it’s getting used less and less.  It also means that for the most part the Nexus and iPad are equally popular around our house.
  • Gavin saw me watching a video on the Nexus with sound coming from some Bluetooth speakers a couple feet away and spent a good five minutes trying to understand how the sound was coming from way over there.  From his perspective, it seemed like magic.

Watching them I am reminded how far this technology has come despite its flaws.  My first full-time job writing software was for a client that sold car phones, pagers and two-way radios.  When the first portable phones came out, maximum talk time was less than 60 minutes and you hauled around a ten pound bag with the battery.  Even rich athletes had to be careful about using their cell phones or they would run up airtime bills that ran into the tens of thousands.  Now my kids are watching videos posted by people in China on tiny devices with 10 hours of battery life on a lighting-fast Internet connection with no limits on usage that costs me less than $50/mo.  Back in the 80’s, I had to teach my dad how to deal with directories and the DOS prompt.  Now my kids are daily consumers of technology that can’t use a mouse, have never touched a keyboard and don’t even care about the OS.  I guess Gavin is right.  It is magic!

Developer Station Revisited

I just built a developer station for the company with specs substantially identical to the one I built for personal use a few months ago  with an I7950 processor, 12GB RAM, 240GB SSD main drive, 1TB storage drive, and a Radeon HD5770 graphics card.  I economized a bit by going with an 800 watt power supply, RAM not suitable for over-clocking and a cheaper case.  The net result is a cost of less than $2,000 including a whole bunch of extras I didn’t have to buy for my personal computer like three brand new 23″ flat screens, DVI cables, UPS, keyboard, mouse, webcam etc.  Apples to apples, it was about 33% less expensive than my last build.  Amazing how fast computer prices fall.

Xoom Impressions

I took the plunge and bought the new Xoom Android 3.0 tablet four days ago and so far I am generally impressed.  That’s not to say there are not substantial flaws like applications that don’t know how to handle the large screen (e.g. Mint), applications that don’t yet match their iPad counterparts (e.g. Skype without video support) and applications promised and not yet released (e.g. logmein Ignition and Flash).  However, the good outweighs the bad.  The tablet is fast and responsive, the built-in applications for web browsing, email and calendar are excellent and the screen is very good indeed.

I can certainly see myself traveling with the Xoom instead of a laptop as long as I don’t have to do heavy-duty development.  For example, I was able to access a development environment hosted at Amazon with EC2 via RDP to do a little test, fix and patch for a C# application over an average broadband connection without the benefit of a Bluetooth keyboard.  Although I would not try this with the current 3G wireless, I fully expect Verizon’s 4G (upgrade available soon) to be fully up to the task.

On the negative side, quite a bit of the potential of the Xoom is untapped right now.  Besides 4G, early adopters will have to wait for Flash, support for the Micro SD slot and versions of popular applications that take full advantage of things like the front-facing camera and the large screen.  Although overall stability is good, I did experience problems with some popular applications such as Skype and Mint.

Developing for the Xoom has been a good experience so far.  I use Intellij with the Android SDK and developing against the device has been trouble-free.  The emulator, on the other hand, is ridiculously slow even when running on my otherwise fast I7-950 desktop.  For example, I experienced waits of up to three minutes when starting a simple hello world application on the emulator.  I can’t quite understand why it has to be so much slower than the emulator for the phone form factors.

If you want to develop for Android tablets or hate big-brother Apple, you will be happy with the Xoom tablet as it exists right now.  However, average users would probably be happier with an iPad 2.  It is lighter and thinner, has more applications available and has a better UI.  Although the Xoom has slightly better hardware , right now the software is a bit too rough around the edges to recommend an Android tablet over the iPad 2 for average users.  I fully expect open source, hardware competition and Google to eventually trump the iEmpire, but for now Jobs and company still come out on top.

I wrote the original version of this post on the Xoom.  Unfortunately, the open source WordPress Android application chopped up several of the paragraphs and inserted block quotes seemingly at random.  I guess there is at least one more application in need of an upgrade.

SSD + I7 950 + 12GB + Three Screens = Fast and Productive Development

I’ve been developing on the new computer I built for about two months now, and I am very happy with my investment.  So far I have spent $2,100 and a couple evenings of personal time. The results are lighting fast compiles, the ability to run a couple of VMs without impacting the performance of my VS 2010 development environment and plenty of screen real estate to work with. In short, a much more productive development environment.  The key parts are as follows:

  • ASUS P6X58D-E Motherboard
  • Intel I7 950 (lightly overclocked to 3.2Ghz)
  • 3x4GB G.Skill  DDR3 1600 RAM
  • Corsair Force 240GB SSD (primary drive)
  • Western Digital Caviar Black 1TB (data drive)
  • Sapphire 1GB Radeon HD 5770 Video Card

I used to develop on a fast laptop since I had to travel quite a bit.  Therefore, the only existing parts I could use were the external monitors.  Since I already had them they are not included in the cost of the new computer.

  • Two relatively cheap 1920×1080 23″ widescreens  that I was using with the laptop at home ($199 ea about 6 months ago).
  • One much older 19″ in portrait orientation (1024×1280).  This monitor was sitting in my closet because I could only hookup two external monitors to my laptop.

The biggest improvements come from the SSD.  I installed the OS, SQL Server and development tools on it, which left me close to 200GB free  for my code.  Compiles are dramatically faster, which gives me less time to sip my soda while I wait for my unit tests to run.  Computer startup, whether from hibernate or from power off, is also greatly improved.   The Corsair is a second generation SSD and includes TRIM support, which should keep performance consistent for the life of the drive.

VS 2010 + Resharper is also much snappier now thanks to the four cores with hyper-threading available on the I7-950.  The development environment has been so fast that I was encouraged to turn on Resharper’s solution-wide analysis feature on my biggest projects for the first time.  Surprisingly, I did not notice any slowdown.  The Java IDE I use for Android development, JetBrains Intellij, is also running faster than before.

Adding a third screen in portrait mode has also improved my productivity.  It lets me keep documentation in view at all times and frees the widescreens for development environment, GUIs I am debugging, VMs and remote desktop screens.

Speaking of VMs, plenty of RAM and CPU to spare lets me run a couple big ones without impacting the performance of the development environment.  I tend to keep the VM disk images on my data drive, but even so I have noticed a small improvement in their I/O performance.

The other nice thing about the desktop is growth potential.  I can double my RAM to 24GB by adding three new 4GB DIMMs.  There is plenty of room for more hard drives and I even have a couple 6GB/sec SATA 3 ports to let me take advantage of the even faster SSD drives that are coming in 2011 and beyond.  Mid-range video cards making their way to market now support up to eight monitors.  Some day I can even upgrade the CPU with six or possibly more cores running a bit faster that the cores I have now.  The bottom line is there is a good chance that this box will carry me to the day where my development environment lives in the cloud and all I need at home is a terminal with a huge screen.

Oh, the Windows experience scores are as follows:

  • Processor 7.6
  • Memory 7.9
  • Graphics 7.4
  • 3d Graphics 7.4
  • Primary Disk 7.5