Deploy and run a load-balanced container with `docker push`

I have some problems when running on AWS Elastic Container Service. These are not showstopper problems, but they create enough friction that there is a potential product to fix them.

The number of pieces needed to get a container running in ECS is quite high. You need an EC2 instance, an ECS cluster, an ECS service, a load balancer, a target group, then a task definition. If you do not know what all of those are, you will be studying the documentation for hours, then experimenting to get your setup correct. After all of that, hopefully you finally have a container running in your infrastructure.

Now imagine your application is written in Erlang/Elixir and you want to cluster your nodes. This requires a number of different ports, but ECS will assign them random host ports (e.g. 4369 on the container may be exposed as 32567 on the host). Random hosts ports are not a problem when you can use an ELB and a target group, but ECS only allows one per service. Now you either need to setup your own service discovery with something like Consul, or lock yourself into one container per EC2 host by forcing the same port numbers in the container as well as the EC2 host (i.e. 4369 on the container is exposed as 4369 on the host).

There must be some room for convention over configuration here. If I push a container to a docker registry, why can’t it be deployed automatically just from that? If my container exposes port 80, can’t a load balancer be setup automatically to forward port 80 traffic to my containers? How about an automatic hostname with SSL? Smart auto-scaling should be built in with no configuration needed. If I expose multiple ports in my container, how about automatic service discovery?

It is time to start interviewing others who deploy containers to see if there is a real problem here.

Elm Workshop

I am hosting a two-day workshop in Boston on May 10 and 11 for the Elm programming language.

It has been almost one year since I started producing Elmseeds. I’ve really enjoyed putting them together to try to teach people the power of Elm. The way I see it, the more people who write Elm, the more likely I am to write Elm for a living. I’ve been doing what I can to speed up that process, but I want to take it to the next level, so I’m hosting a workshop.

It is a two-day workshop, hosted in downtown Boston with free lunch, snacks, and coffee. On the first day, we will walk through basic and intermediate topics including Elm the language, the architecture, navigation and http requests. The second day is advanced topics that help you get Elm into production: animations, testing, native modules, deployment, and more. By the end of the workshop, you will be prepared to return to work and embed Elm in an existing product seamlessly.

Sound interesting? See details on Eventbrite.


It’s an inside joke for multi-time WWDC attendees to watch the first-timers show up to registration in shorts and a t-shirt. The newcomers are thinking “California in the summer. No need for jeans and layers.” They quickly learn the value of a jacket, thanks in large part to Apple who hands out a free one to each attendee during registration. If you forgot to pack one, you can join the thousands of other look-a-likes on Market Street proudly sporting the current year on their backs.

With the move to San Jose, which does actually participate in California summers, one has to wonder if jackets will still be the swag of WWDC. Apple has handed out laptop bags in previous years, so they are a strong contender. On the other hand, air-conditioned convention halls are always frigid, and San Jose nights are cool enough for jackets, so it still might make sense to hand out jackets.

My money is on the laptop bags.

10 Year Update - Part 2

My semiannual update on the Marco Arment 10-Year Challenge. See Part 1 in the series.

The Red Ace

The Red Ace got a significant update in October: insurance and surrender support, both of which are a major part of counting cards. I also added split view support for iPad, hoping it might boost my search rankings or increase the odds of getting featured in the App Store.

Biggest disappointment from updating the app was the inevitable decline in sales. Starting around 27 December 2016, the current version finally had enough reviews for the App Store to display and sales resumed.


In 10 months, I’ve produced 20 screencasts. An okay number, but I really need to stick to a once a week schedule. The past two months have been much closer to that with six screencasts produced, only missing weeks around holidays.

I’d love to eventually run sponsorships à la Railscasts. Need to keep producing content on a consistent basis to get there.

One stat I want to track between these updates is number of followers on my @seedsofelm account. Currently at 211. I have other analytics to help gauge the number of video plays, but at this point, I’m more interested in the number of people who opt-in to updates.


My Elixir and Elm app is nearing launch. I have a lot of eggs in this basket, so a strong launch will go a long way toward keeping up my enthusiasm and monetary ability to pursue it.

User-testing has gone well so far. Every test is still revealing some pretty great insights. I’m looking forward to having some beta customers onboard within a week. They should drive the final changes necessary before the public announcement.

The Update Slump

I am certainly not the first to experience it, but if you were looking for hard data on the update slump, look no further. Below are two iTunes Connect App Analytics charts from before and after I released an update in the App Store.

Several things could be happening here.

  1. Lack of reviews turns buyers away.
  2. Latest version crashes a lot and is getting negative reviews.
  3. Updated keywords/description with new version destroys SEO.

I can’t prove number 1, but judging by these charts, I don’t think it’s number 2 or 3. Product page views and crashes are pretty consistent, implying people are finding the app, but not pulling the trigger on purchasing it.

"App Analytics, 9 September 2016 through 9 October 2016"

"App Analytics, 10 October 2016 through 14 November 2016"

Because I’m not the first to see this trend, I think it’s safe to say this is because of my lack of reviews. Five stars to no stars is a rough way to go.

If you’ve purchased the app and would like to help out, please write a review.

Convincing Myself

To buy a new MacBook Pro. Apple is unlikely to drop the price of this MacBook Pro or update its specs for at least 12 months, if not 18 or 24. Given that, right now is the best possible time to buy one. Every month I wait, I’ll get less value for the same price. If I buy it now, I can start getting some value from it rather than suffer through another several months of slow MacBook usage.

Exploit Prices

Zerodium’s Exploit Acquisition Program:

Product / Exploit Type New Price Previous Price
Apple iOS 10 (Remote Jailbreak) $1,500,000 $500,000
Android 7.x/6.x (Remote Jailbreak) $200,000 $100,000

An iOS remote jailbreak exploit is worth 7.5 times as much as an Android jailbreak exploit.

We know prices get set by supply and demand, so what drives up the prices for iOS? A greater demand or a lower supply?

I’ve never been interested in remotely exploiting someone’s phone, but I can muster a few guesses as to why someone would: to steal credit card data, distribute ransomeware, or form a botnet, to name a few. Are any of those worth more on iOS than Android? I don’t see how given Android’s greater market share. I expect the demand for Android jailbreak exploits to be greater, and thus drive the price up.

If we’re conservative and say the demand is equal for iOS and Android exploits, then the supply for iOS jailbreak exploits must be lower, implying they are more difficult to produce. I don’t know if any Apple engineers are patting themselves on the back, but this is a major testament to the iOS security team.

Ceramic Jet Black

Brian Roemmele via Quora:

Why is Apple moving to Zirconia Ceramics?

  1. Strength
  2. Radio Transparency
  3. Heat Conducton[sic]/Dissipation - with Alumina / Aluminum Nitride
  4. Scratch resistance
  5. Ease of manufacturing

The Apple Watch Edition Series 2 only comes in white, but it stands to reason a ceramic iPhone would come in both black and white. I’m a little surprised Apple would release the Jet Black iPhone this year rather than surprise us with a brand new color along with the ceramic housing.

Headphone = VGA?

Apple may wield significant sway in the industry, but is it enough to get other phone vendors to remove headphone jacks? In an apples to oranges comparison, HP and Lenovo still make laptops with VGA output. They may not be phone vendors, but I think it’s safe to say, if you really like headphone jacks, you’ll be able to buy a phone with one for a very long time.

Swift Subclassing

I’ve enjoyed watching the debates, but haven’t sided with one team yet. It’s hard to believe that you can be productive with subclassing unavailable by default, but looking at the Swift I’ve written the past couple of years, subclassing has not been my tool to solve problems.  Other than classes like NSManagedObject and UIView, I have hardly any subclasses, and each instance could use protocol extensions and remove the need for subclasses.

Even though I’m not convinced final by default is the best option, the evidence is pointing to it. I love Swift and am looking forward to spending more time in Swift 3 over the next year. Only real experience in the hands of developers will tell us if this is the right decision.