Downsizing to a 12 inch Macbook for development

I’ve had my 12 inch macbook for a little more than 24 hours and my 2012 Retina Macbook Pro already looks like a brick in comparison. Truth be told, I’ve had mixed feelings about the rMBP. I bought the 1st generation right after WWDC 2012 and a few months later it was being repaired due to the ghosting bug, a few months after that more crashes and the logic board had to be replaced.

Even during periods of stability, the mabookpro was heavy (4 lbs) and battery life really only lasted between 3-4 hours per charge. So while the MacBook Pro was great for development for iOS apps and services, it wasn’t that portable as the battery wouldn’t last very long. When the weather is nice, it is great to sit at a local lake close to where I live and work outside. Can’t do that for very long if your battery doesn’t last longer than 2-3 hours at a time.

I initially looked at the 2015 MacBook, but due to my experience with Apple’s first retina notebook, I decided to skip and wait a year and try a gen 2 device instead. So I ordered a 2016 MacBook with a 1.3 GHZ Core M7 “Skylake” processor, 8GB of ram, with 512GB of storage to replace my MacBook Pro. I figured if the machine wasn’t for me I could still return it and get a full refund and I wouldn’t get rid of my MacBook Pro until I was satisfied with the MacBook.

This isn’t a comprehensive review or anything, just a collection of notes while the feeling is still fresh.



This machine isn’t going to win any speed records, it is noticeably slower than my MacBook Pro for certain tasks. Compiling software is a little slower but not too much. To be fair, the MacBook has a dual core CPU while the 15 inch MacBook Pro has a quad core.

Memory Capacity

Both my 2009 MacPro and my 2012 MacBookPro both have 16GB of ram, so initially I was a bit concerned with only having 8 GB to work with. I haven’t started up any virtual machines yet, but I’m sure I’ll have to make some adjustments to the VMs (single core vs dual core for example).

No MagSafe

After being used to MagSafe on the MacBook Pro for years, not sure what to think about it being missing on the new MacBook. The USB-C connection is pretty firm so if a pet or child, significant other, etc kicks that cable, the laptop will take flight.

Small Display

12 inches is the absolute smallest I am willing to go. Especially from a 15 inch display, 12 looks small but doable. 


As with all things Apple, I wish things would be a bit cheaper, but I do realize that these things get cheaper over time. The original MacBook Air cost $1,799 before any upgrades back in 2008.



Single USB-C Port

I understand how people feel about only having one port that is used for both power and data. I see this a pro instead of a con simply because most of the time (> 99%) the only thing I have plugged in is an iOS device I am debugging. And even then, I mostly work using the iOS simulator and don’t have anything plugged in except for power.


Keyboard is definitely different (shallow but bigger keys) and for some it takes some getting used to. For me, this means I don’t have to type like I’m on a typewriter.

Battery Life

Battery life is really the main reason I bought this  machine and so far I am pleased with the results. I seem to be getting closer to 9 hours of usage on this machine


At 2lbs, it really is much more portable as it reduces the weight in my laptop bag. It also means I could probably get smaller bag too.



A lot of the criticisms against the 12 inch MacBook were also leveled against the original MacBook Air. Doesn’t mean that the criticisms aren’t warranted, it just means for me at this time the portability and battery life are much more compelling. We’ll see after a week if I still enjoy the machine or will go back. At this point though, it would be hard to go back to a bigger laptop. It is entirely possible that I feel this way because I have a MacPro at my home as my main computer (and a server for storage).

It is also a bit strange to have a iPad that is larger than your laptop

Macbook On iPad Pro


Thanks for reading

Treating your customers with respect

I am writing this post sitting in a local tire repair shop getting the wife’s tire replaced. A couple came in after me and I was shocked at what I saw and overheard. The black couple were verbally berated for having too much air in their tires. “Bob" is a sales manager for this location. 

Bob: “Who puts air in your tires?"

Woman: "Excuse me?"

Bob: “Who puts air in your tires?"

Woman: “Either me or him (gestures over to the man holding the baby)"

Bob: “Well you have one tire with 90 lbs and another one that has 80lbs of pressure and the other two tires are right around 30-35. You only need 30-35 lbs per tire. So you can go to Walmart and buy a tire gauge for $0.99 and you should be ok the next time you put air in there” <further discussion about tire pressure and the ride quality>

As the couple left to get into their vehicle, the anger on the man’s face was unmistakable. No one wants to be talked down to and the tone definitely was condescending in nature and Bob and I would have had words if he would have talked to me like that.

When it was my turn to be helped, Bob had a more neutral tone. I have no idea whether it was my clothing or the fact I whipped out my MacBook Pro to write this post. 

The way Bob should have interacted with the couple:

Bob: “Hello Ma’am. The good news is that we found your problem"

Woman: “What was the problem?"

Bob: “Two of your tires have too much air pressure. You only need 30-35 lbs and two of your tires had between 80-90lbs. There is a safety risk driving on tires with the wrong pressure. You can pick up a tire pressure gauge at a gas station or even at Walmart for $0.99. I recommend checking the tire pressure with the gauge every time you put air in your tires"

Asking who puts air in the tire doesn’t matter. Regardless of how the customer is dressed they should be treated with respect. 

Revisiting my blog in Go

It has been exactly a year since I announced my blog was rewritten in Go. Since then a couple the go-lang team has released a few updates.  I am no longer running the blog on a VPC but actual hardware with other processes and websites.

The memory usage continues to be phenomenal ( a little more than 8MB of memory ). This was my first Go project so I ended up making a lot of mistakes. Maybe I will clean the code up with the new practices I’ve picked up over the last year or so.

I have been using Go for new web/api projects and I don’t see that changing anytime soon

Wireless safety at airports, libraries and coffee shops

IMG 3848 As an independent developer, everything I need to be productive for my projects and clients fits within my backpack. I am constantly on the move and am rarely at the same physical location throughout the entire day.

Because of that mobility and Edward Snowden’s NSA leaks, I have become increasingly aware of doing work within untrusted network environments such as airports, libraries, coffee shops, etc. Or really anywhere where there is an open wifi connection.

I use a custom .mobileconfig file that configures my mac and iOS devices to use a custom VPN tunnel to a server that I rent specifically for this purpose. Basically it works by setting up an IPSec tunnel whenever the device needs to connect to do anything on the network. That includes calendar, email, iTunes Match, web browsing, etc. This trusted VPN tunnel configuration only works outside of my home network. So when I go to the local coffee shop, the tunnel is setup. When I am at a client’s office for a meeting, tunnel is setup. I don’t have to think about it.

This isn’t for the faint of heart though. My configuration on the server is still evolving ( like how to have multiple iPSec clients from the same ip address such as the iPhone and mac are on the same coffee shop wifi ) but it is better than it was before. In fact, this configuration also works when I am tethering or just browsing on the cellular network.

This is a sample mobile config I use on my devices:

A few notes on this file: 

  • The assumption is that there is an IPSec server already setup. Setting that up is outside this post's scope.
  • PayloadUUID should be a random uuid. You can use uuidgen on OS X to generate a new one.
  • Under DNSServerAddressMatch put in the ip address of the routers/dns servers that if reachable will tear down the vpn connection. Like a home router as an example.
  • The connect action in the OnDemandRules section will establish the VPN tunnel if can be reached. Feel free to change to another url if needed
  • OnDemandEnabled will not allow any traffic from your device unless the tunnel has been setup. If this causes problems you can disable the on demand feature in the vpn settings on iOS or disable the configuration in OS X.
  • OverridePrimary ensures that all traffic is transmitted over the tunnel.

I use a variation of this file on both iOS and OS X and both work fine with the exception that the on demand generates an error on iOS 7. While at WWDC 2014, I sat down with with an Apple security engineer and he reported that iOS 8 beta 2 would have it fixed ( which it did ). Hopefully this will be also fixed in the iOS 7.1.2 update.

Apple's configuration profile documentation:

To Install:

  1. Copy the plist data into a file with a .mobileconfig extension
  2. Configure the file to your own setup as suggested earlier.
  3. Get it unto your device securely ( I emailed it to myself from my mac since I host my own email ).
  4. Tap or click to install and enter in your username and password when prompted.

While it was a few steps to setup, I have more confidence about my devices transmitting data securely when going about in my daily activities whether going to the grocery store, shopping or working away from home.

Protecting Net Neutrality

I couldn’t find a better way to explain Net Neutrality than John Oliver