Developer First Impressions of the 2016 MacBook Pro

I haven’t been an “Apple” person for long, but since I bought my first MacBook Pro in early 2013 I was really impressed with the quality of the hardware, the feel of the device, how small and lightweight it was was light-years ahead of any other laptop I could buy at the time. The MBP turned into my travel laptop of choice, I had 2 Windows laptops (1 from Dell the other from Asus) that I just stopped using and gave away. A .Net Developer only traveling with a Mac, that was crazy talk.

IMG_4038Fast forward, 3 freaking years without a meaningful hardware upgrade, and were now in 2016 and a new MacBook Pro has been announced. It’s a significant hardware upgrade over my 3 1/2 year old MBP, but not so much if you have a kitted out version of the last revision.

As I started to write this I’ve been using it off and on for a couple of days into my 10 day stress test, so not really stressing it yet. But I’ve already noticed a few things.


  1. Build Quality Is Amazing, as usual: When your paying top dollar for a laptop we expect it’s going to feel good. The system is solidly built, it it’s noticeably smaller and lighter then my 3 year old MBP, but has a solid heft to it. Opening and closing the screen is fluid and sturdy.
  2. Hardware Spec’s are “Meh”: I went for the upgraded processor and video card. For me when I travel I like the ability to play games. I only went with the 512GB SSD, as the 1TB model was an extra $400 bucks and I could not justify that, I’ll just carry around some 128GB Thumb Drives, not that big of a deal. But power wise the Surface Book seems to have the edge in terms of raw horse power.
  3. Ports aren’t “Portie”: Apple FINALLY went with standard ports, but unfortunately they picked ports that almost no one else uses. This means I had to replace my almost $200 bucks worth of adaptors for my old MBP. I was also a fan of the MagSafe charger, kinda sad to see that go.
  4. Screen: The new MBP’s screen is really nice, very crisp and bright, color seem good and vibrant.
  5. Trackpad: I am not a fan of the larger trackpad that takes up the entire middle of the front of the laptop. I don’t mind the loss of the mechanical press on the trackpad and instead going haptic, it still feels ok, not great. But the damn size, with my larger hands my palms routinely pour over the pad and that sometimes causes issues. Minus some ghost mouse movements, and clicks, it’s uncomfortable, there’s a lip around the pad and you can feel that on your palm.
  6. Touch Bar: Every review out there is glowing about the touch bar, but for a developer, this downright sucks. The touch bar is an OLED screen, and inset into laptop below the levels of the keys in the keyboard. When typing there is no way to correctly position your fingers to ‘feel’ if your pressing the right OLED button. To me this Touch Bar is a gimmick and a step backwards for any keyboard warriors.
  7. Keyboard: This is my biggest gripe with the new MBP. They keys are the new ‘butterfly’ design and have almost no key travel. There is a satisfying ‘click’ when typing but almost no physical feedback of a keypress. The keyboard layout changes also are not good, the arrow keys particularly are completely messed up, I guess they didn’t like the space above and below the left and right arrow key? Like serious WTF.

I’ve never before considered returning an Apple product, but after a day of use I looked up their return policies. Including taxes I spent $3,300 on the laptop and tack on another $400 for Apple Care. I still don’t know if I’m going to keep the new MBP, I’m seriously considering a Surface Book or Razor Blade as alternatives and keeping my old MBP for XCode builds.

If you’re a First Responder or know one check out Resgrid which is a SaaS product utilizing Microsoft Azure, providing logistics, management and communication tools to first responder organizations like volunteer fire departments, career fire departments, EMS, search and rescue, CERT, public safety, disaster relief organizations.

Angular2/Ionic2: No provider for ….

When your developing an angular 2/ionic 2 application and you get the the following error:

EXCEPTION: Error: Uncaught (in promise): EXCEPTION: Error in :0:0
ORIGINAL EXCEPTION: No provider for UserService!
Error: DI Exception
    at NoProviderError.BaseException [as constructor] (http://localhost:8100/build/js/app.bundle.js:2300:23)
    at NoProviderError.AbstractProviderError [as constructor] (http://localhost:8100/build/js/app.bundle.js:27491:16)
    at new NoProviderError (http://localhost:8100/build/js/app.bundle.js:27528:16)
    at ReflectiveInjector_._throwOrNull (http://localhost:8100/build/js/app.bundle.js:28516:19)
    at ReflectiveInjector_._getByKeyDefault (http://localhost:8100/build/js/app.bundle.js:28544:25)
    at ReflectiveInjector_._getByKey (http://localhost:8100/build/js/app.bundle.js:28507:25)
    at ReflectiveInjector_.get (http://localhost:8100/build/js/app.bundle.js:28316:21)
    at ElementInjector.get (http://localhost:8100/build/js/app.bundle.js:29890:48)
    at ElementInjector.get (http://localhost:8100/build/js/app.bundle.js:29890:48)
    at ReflectiveInjector_._getByKeyDefault (http://localhost:8100/build/js/app.bundle.js:28541:24)
[object Object]

Your module exists, it’s setup and your import is working. So what’s up? You need to make it available for your application. In your app.ts you have 2 approach’s add a new paramter to your @Component called providers that takes an array of modules.

Angular 2 (non-Ionic)

  templateUrl: “build/app.html”,
  providers: [UserService],

For Ionic you can also just pass it into the ionicBootstrap function, the second parameter to that is an array of modules:

ionicBootstrap(ConnectApp, [UserService]);

Hope this helps!

Bad User Experiences and the Listerine Cap

Over the years I’ve gained more and more respect to the men and women who design our User Experiences. UX isn’t just for software, but everything you interact with, your keyboard, TV, fridge, the gear selection on your vehicle, all of those are UX interactions.

These interactions are vital to our use of a product, in extreme cases bad UX design can even cost lives. Your own unique products UX also trains the users the nuances of your product over time. Where you place buttons or interaction elements, the colors you use or even the textures.

Which brings me to a major UX failure that’s annoyed me to no end, the new Listerine Cap. Previous versions of that cap looked like this:


The smooth section is where you place your fingers to squeeze the cap to release the child proof lock. Over years of using the product instinctively I knew what to do, so much so I could open the cap easily in the dark. Hopefully whoever designed this cap got a nice bonus.

Recently I bought some Listerine again and noticed immediately I was actually having difficulty opening the cap. I figured I was tried, distracted or whatever and moved on. But day after day I had the same trouble getting the cap off. It got to the point where after a long day driving a Water Tender around a Wildland fire I just hulked the cap off in a fit of rage. The issue, the cap design.


The bottom section, where they put the logo, classy BTW, is smooth all the way around. From touch it’s almost impossible using coarse motor skills to identify, without looking, where you need to squeeze to open up the cap. Hopefully whoever designed this cap, most likely someone from marketing, gets a swift kick in the genital.

This small change has actually soured my opinion of the product, so much so that at least in the near future I won’t be buying it again. But it’s a powerful reinforcement, if something so minor can turn me off of a very cheap product, how many minor UX issues in my products have turned people off from buy decisions?

Go to Top