How Tesla Will Change The World

Nov 20, 2015

Some websites are life-changing. I don't know why I have never heard of "Wait But Why" before. Now that I have, it has completely consumed me. To see smart & funny writing, written for smart people in a smart way is delightful.

The post I want to talk about is about Tesla on the surface, but it is really about energy, climate change, and cars. It is not a post that can be read in one sitting and it is not a post that can be skimmed through. It requires thinking. It may even lead you to have a conversation about it with actual people. I read this post weeks ago and I still find myself frequently thinking about it.

Here is an excerpt I liked:

We use “the food chain” as a cute euphemism for this murder/theft cycle, and we use the word “eating” to refer to “stealing someone else’s joules and also murdering them too.” A “predator” is a dick who always seems to want your joules over everyone else’s, and “prey” is just some sniveling nerd you particularly like to bully and steal lunch money from. Plants are the only innocent ones who actually follow the Golden Rule, but that’s just because they have the privilege of having the sun as their sugar daddy—and humans are the biosphere’s upsetting mafia boss who just takes what he wants from anyone he wants, whenever he wants. It’s not a great system, but it works.

I said life-changing, which sounds like a cliché. When I read this post, I had just sold my car and hadn't purchased a new one. It probably made sense for me to get a car, but I decided to tough it out for a couple years to see how the electric market turns out. As a side note I think that no matter what type of car I buy, it will likely be my last car (as cities will be fundamentally transformed by self-driving cars).

The Relative Value Of Software

Nov 09, 2015

Apple is my default platform. I earn my living building iOS apps for clients. I have been using Apple exclusively for over a decade. You could say that they are my favorite computing platform. But lately, their actions have made me consider diversifying my skills.

Since the arrival of the App Store over the past 7 years people have been constantly devaluing software. This is not surprising since the App Store has lowered the barrier to distribution. For apps that don't require a server, there is no additional cost to distributing an app. Since there is no cost associated, it is completely rational to solve for the greatest $ where:

C = Number of customers
P = Price of the app

C * P = $

The graph of that formula is different for each app, but you can imagine more people will buy it at 1.99 than 9.99. If there are more than 5 times more people at 1.99 it is logical to lower the price from a purely financial point of view. There are other non monetary reasons that go into app pricing, but we won't get into those now.

But when the price goes to 0, there is no number of customers that can "make up for it in volume." You either need to make money on it indirectly or not make money on it. Indirect ways of making money include, hardware sales, advertisements, selling the user's data or selling an upgrade. I am intentionally not talking about services that are supported by an app or apps that sell things, because those are not dependent on the app store for monetizing.

Apple themselves has done this with most of their software, including their operation system upgrades. This is great for developers building apps for those devices, but it sets an expectation with consumers that software is cheap, even complicated software. You frequently hear customers say, "I never pay for apps." That is a completely rational thing to say. If you try an app and it is good enough most of the time, you would never pay for an app.

On the flip side of the coin, you hear developers saying, "It is cheeper than a cup of coffee. You buy coffee and don't think about it." The real question they are asking is, "why do you value software the way you do?". There are a couple reasons why developers think software is worth more than non developers. Obviously, they built it, so they know how much effort it takes and they value their time more than customers do. The other reason is a developer's definition of good enough is going to be much higher than a customer's definition. A typical developer sees ads and only sees the wasted screen space, bandwith, battery and user attention. A typical user just ignores the ads and never thinks about it again.

Apps have to be at least 1 of 3 things to make any money:

  • Very good
  • Very lucky
  • Justifiable for work

Even better they are more 2 of those or more.

Based on all of this, I have sadly come to the conclusion that building an app and selling it is not a very good use of my time. The question becomes, what is a better use of my time?

Don't Panic

Feb 05, 2015

In a recent AMA, Bill Gates was asked:

Mr Gates, Do you feel that we are facing an overpopulation problem on this planet? If so, what do you think needs to be done about it?

He gave a short answer, stating that as people become more healthy they choose to have fewer children. To back this up he referred to the work of Hans Rosling from Gapminder. At times I found his style a bit odd. That didn't detract from how amazing it was at tying together so many topics that seem big and hard to fix.

Over population, extreme poverty, birth rate, infant mortality, climate change, education, access to healthcare, and ignorance of the west are all interconnected in this video. The basic gist is that since birth rates are falling the population will begin growing much more slowly in the near future. He outlines a number of reasons why birth rates are falling like education, lower infant mortality rates and a general cultural shift in poor countries.

I am not sure about everything being as cut and dry as he makes it. You really should watch the whole video and judge for yourself.

DON'T PANIC — Hans Rosling showing the facts about population from Gapminder on Vimeo.

Be Promiscuous

Aug 20, 2014

A friend of mine decided it was time to move on from his current long-term job. We were chatting about what he was going to do next. He wasn't exactly asking me for advice, but I was giving it to him anyway :) It felt weird because he has done many more things than I have, worked for huge companies, small companies, consulted, etc. Still, it seemed he was unsure of what he should do next. The best advice I could come up with was "Be Promiscuous."

When you don't know what you want in life, the best thing to do is try a bunch of things quickly. In our society, promiscuity gets a bad rap. I think, as time goes on the stigma associated with promiscuity decreases. Our grandparents picked a company and stuck with them. Back then, you didn't experiment - you were a company man and, as such, you were rewarded for that loyalty.

Times change. In most cases you are rewarded for jumping between companies. Constantly proving yourself over and over. By far the best way to get a raise or more responsibility is to find a new job. When an employer sees someone that has been successful again and again, their confidence increases. Crazily, they don't reward the people who stick with them long term. I assume they do a calculation in their head about how likely a person is to leave vs how much it would cost to insure the person stays. When employers think in aggregate about talent retention, they tend to undervalue individuals. Everyone understands that people come and go. Employers know that getting 12 months of a successful engineer's time is better than getting 4 years from someone who can merely keep their job.

Similar to life, the best time in a career to experiment is when you are younger. You need to figure out what you actually want to do with your life. Do you crave solving hard problems? Or is making people's lives easier more important to you? Maybe an easy job, so you can take care of your family is best for you. You should experiment with the tools you use and the domains you work in. You should try anything you think you might like, and only change when you are bored, unhappy or generally feel stuck. When you make a change, at least have a vague understanding of how the change helps you accomplish one of your goals. If your change isn't working for you, start over at square one.

Even if you are not young you should feel free to experiment with your career. It can seem like there is risk in switching jobs, but think how easy it is to get a new job with the skills you already know. Now consider how much easier it will be to find a job with the new skills you will learn. There is a saying, "the best time to plant a tree is 20 years ago, but the second to best time to plant one is now."

I used to worry that switching jobs so often would reflect poorly on me in interviews. However, no one has ever asked me why I switched jobs so often, but it might be because I usually stay at least a year in a position. That is how long it takes me to get bored. Sometimes I stayed longer, if I was interested. Ultimately as I advance in my career, I value the feeling of change above all. Contracting was the perfect fit for that, you get to work with a team for awhile, learn from them, and when they don't need you anymore you get to move on; no hard feelings.

I may end up taking a full time job again some day. I may end up starting a company and cursing all my employees who leave with their "institutional knowledge." But ultimately doing my best work depends on me being motivated and happy. Until then, promiscuity awaits.

Things Are Better

May 29, 2014

In 2007 I was working at Taxi Magic. The iPhone had been announced, but it wasn't clear how big it would be. There was no Appstore in sight. Our goal was to let corporate users book, track and expense taxis from their smartphones. This was an ambitious goal that had a lot of moving pieces. We had to integrate with taxi dispatch systems, build a smartphone application and integrate with expense management companies. It was a lot for a small start up to take on. For most of the first 2 years there were 6ish of us on the engineering team.

I remember the integrations being annoying, but never difficult. Integrations are time consuming, the most difficult part is convincing a 3rd party that you are something they should spend time on. All that pales in comparison to the hell that was getting an app onto a person's BlackBerry.

As you know the smartphone king in the United States those days was BlackBerry (RIP). You could write apps for Blackberry, but pre Appstore you not only had to advertise but also help people install it. Our sign up process was hilarious, in a sad way. We had a wizard that would walk you through, signing up, configuring a payment method, deciding how you wanted to pay, installing the application and finally testing that application worked.

Here is something you probably didn't know about Blackberry, some of the models didn't come configured with the ability to hit https endpoints. Yes you read that correctly you couldn't use secure endpoints without configuring your APN on a few of the carriers (I think cingular for sure). So you had to add a step to the wizard, "What carrier do you have?" I would not have gone through the wizard if I were a user, it was horrible.

But the funniest step of the whole configuration came after you went through that shitshow. Some models of Blackberries had to be rebooted to have their new settings take effect. And worse some of them didn't take effect unless you pulled the whole battery out. So, add a step to the wizard, "remove your battery." I remember we had one customer who called and wanted to use our system, but he didn't want to reboot his device. When we asked him why he couldn't reboot his device he said, "I don't want to lose my Brick Breaker game." Apparently he could pause his game of Brick Breaker and resume it. Obviously losing his score was a deal breaker. Tough to reason with that.

I say all this not just to walk down memory lane. Sometimes, I think that all the horrible restrictions in the Appstore are holding us back from advancing computing to the next level. But I don't want to lose sight of how difficult it was for technical and nontechnical people to install 3rd party software on their Smartphones. We are now around 6 years from the announcement of the app store and the painful memories of getting software onto someone's phone have slowly faded away. In those 6 years we went from a 10 step wizard to a a single link; that is progress. Unfortunately, in those 6 years not much has changed, probably because the current system is working fine for the user. In 6 years I hope, we will all be talking about how terrible today's system was and be gleeful that the goals of the user, developer and platform provider are aligned. But in reality, I will probably just rewrite this article and increment all the numbers by 6 years ;)

Time for Xcode to Grow Up

Apr 17, 2014

It is fair to say that Xcode has gotten immeasurably better since the early times of Xcode 4. Long forgotten are the days of selecting a different /Developer directory to install Xcode betas. Soon forgotten will be the days of random crashes. Everything seems reasonably snappy, you don't have to wait 15 seconds if you hit CMD-T on accident (or on purpose).

The whole system seems much more predictable. That said things are not perfect. You still don't want to press a button that says Fix when it comes to provisioning, because (spoiler alert) it doesn't fix your problem. Sometimes restarting Xcode fixes random things, sometimes you have to sweet talk Xcode* into compliance.

Since Xcode has stabilized so much people are tentatively optimistic about its future. We are currently in a Renaissance of Xcode plugins. Unfortunately, the best plugins have yet to be written. Companies are hesitant to build plugins because there is no official support from Apple. Every new version of Xcode is likely to break your plugin. As a company it is difficult to do capacity planning if there is no official api or support from your platform owner.

A formalized system benefits apple in a few (mostly theoretical) ways:

  • If developers are able to be more productive, they can spend extra time creating more amazing things for the platform.
  • The more comfortable developers are using a tool, the less they want to switch. Creating voluntary vendor lock in for mid to junior developers.
  • If a company had an official Xcode plugin you can be sure they would put an Xcode logo on their website, subtly extending apple's brand.

But I think an official plugin api for Xcode is highly unlikely. Apple has a track record of supporting people who make apps, but not people who support app makers. Helping tool makers doesn't make Apple more money, in the short. Not having to support an official plugin architecture allows them to iterate more quickly. If I were running Apple I might make the same choice. But I still pine for a streamlined workflow that supported plugins could partially provide.

* this doesn't work, I've tried

Time for a change

Dec 14, 2013

I have been in the DC area for 9 years. It is the longest I have lived anywhere in my adult life. I can't believe it has been that long.

DC has been amazing for me. I have made lifelong friendships. I was one of the first employees at Taxi Magic. I started my own business. I changed my career direction multiple times for the better. I attended the 2008 Obama inauguration when people were excited. I was able to do things I never imagined being able to do.

I say all that because when people relocate, I think there is a tendency to think they were unhappy. I was not unhappy. That said DC is a place that is difficult to call "home." It is big and people are constantly leaving (now I am one of them). I am mostly looking for a place that is a bit smaller with a bunch of new adventures.

Starting in March, I am going to be calling Portland, OR home. I have been there on multiple occasions and have loved it. I am looking forward to exploring the west coast for a while. If there is someone you think I should meet, please do an intro I would like to have a few more friends when I get there.

Some things are not changing though. I am still going to be running 2 limes, my consulting company. I am still going to be pursuing my own commercial and open source products. My day to day will probably not be changed, which is good since I am happy.

Keep being awesome and call me up if you are going to visit Portland.


Dec 14, 2013

A childhood dream

Like many teenagers, I loved video games. When it was time to decide what I was going to do with my life, I thought it might be fun to make video games for people. So, I studied software, I built things, and somewhere along the way I stopped playing all but the most casual video games. This year when Apple announced SpriteKit, a 1st class iOS game framework, I decided to follow through on that dream.

The game

Linkage 1
Linkage 2

Linkage is the type of game I play now. Super easy to start playing, the longer you play the better you get. It feels like if you play longer you will get better at it. There is some strategy to it and you can get a better score by thinking. Most importantly, you can't buy your way to a better score.

The general game play is inspired by Bejeweled. You swap and rotate tiles a make connections. There are two game modes. One is for people who like to go faster and be pressured. The other is for people who like to think. I think they are both fun. I would be honored if you would play it and let me know what you think. It is free so have fun.

Lapse the World

Oct 18, 2013

Origin Story

I am excited to announce my first new personal project in awhile. It is called Lapse the World. It is a app for making time lapses on your iPhone. It is my first (completed) project that involves AVFoundation. It took me way out of my comfort zone in the best possible way.

It started as a proof of concept because a job required me make extensive use of a framework I wasn't comfortable with. I didn't end up getting the job for a variety of reasons. I did end up getting a taste for audio and video programming. It is different than the usual consume web services and do something on the device. My friend calls this type of programming being a "bit dump truck driver".

I knew I wanted to finish this project, I also knew that I sucked at finishing things on my own. I recruited my friend, Seth, to help with the code and keep me motivated. Between the two of us we were able to wrap this up and get it launched.

Lapse List Screen

Lapse List Screen

Recording Setup Screen

Recording Setup Screen

The Recording Process

Many time lapse apps record the video in real time then compress it later. This is good for some reasons and bad for others. The best part about this approach is that you can choose how fast to make the video look after it has been recorded. The downside is that the recording is stored in it's original size which is a deal breaker for me since the iPhone is storage constrained.

We decided to go a different route. We let you specify a number of different compression ratios before you start recording and only record the frames that are needed. A normal video is recorded at 30 frames per second. Say you want to make a recording that appears 30 times faster than real time. So, we grab 1 frame per second instead of 30. Then when you play the video back, you view it at 30 frames per second making 30 seconds fly by in 1 second.

We are allowing you to pick up to 3 compressions while you record, because if you are like us, you don't really know what compression to use to make it look cool. As you can see in the above screen shot, we have a couple presets and a way to customize it if you want to experiment, or know what you are doing.

Other Stuff

We decided to make it free with In App Purchase. Enough digital ink has been spilled talking about app store pricing and the race to the bottom, so I am not going to go into further detail about it. But suffice to say, since Seth and I don't have huge internet followings, we thought it would sell better if it were free and people could pay to export their videos after they have tried it out.

Seth also build a custom video scrubber that shows frames from your lapse. It is awesome and Seth will be open sourcing it shortly. For time lapses, it isn't that cool because most time lapses kinda look the same throughout the video, but if you use Lapse the World while you are driving or something the scrubber should help you see different parts of your video while you are scrubbing.


If you make any lapses with the app drop us a line we would love to see them.

Real Quick: Template Images

Oct 15, 2013

iOS 7 introduced the concept of image templates. This builds on the idea of an app having a tint color. When you use a template image any nontransparent pixels get colored to your application's tintColor.

In order to support this concept UIImages have the concept of renderMode. There are three unique render modes:

  • UIImageRenderingModeAutomatic
  • UIImageRenderingModeAlwaysOriginal
  • UIImageRenderingModeAlwaysTemplate

As you can guess, automatic is default. In the documentation, Apple says that automatic render mode is context sensitive. The context in this case is the type of UIKit element the image is rendered in. For instance, UIBarButtonItems render in template mode when you use the automatic render mode.

The general rule is that if you are interacting with the element, automatic mode will probably render as a template. Elements that follow this rule are:

  • UIBarButtonItem
  • UISegmentedControl
  • UIButton (foreground images)

One borderline exception to this rule is background images for UIButtons. They act like UIImageViews, automatic mode acts like original mode.

Overall it is pretty straight forward. Below are two images showing these items rendered with different tint colors and only 1 image packaged. I shared the code for this post github.

Blue Tint Color

Blue Tint Color

Red Tint Color

Red Tint Color