Saturday, October 17, 2020

Why the App Stores Takes a 30% Commission

Why do both the Apple App Store and Google Play stores take a 30% cut from apps they sell?

The answer is simple. When the Apple App Store launched in 2008, the going revenue share comission for content delivered to mobile phones was about 50%, give or take a few percent depending on the mobile network.

Back then, a 99¢ ring tone or $1.99 wallpaper, delivered over-the-air for mobile phone consumption, would net the developer about half of the price paid by the cell phone subscriber. The other 50% went to the mobile network provider. These charges would show up on a subscriber's phone bill as a premium SMS (PSMS).

In 2008, the PSMS market was worth about $5B/year. So, Apple's 30% take was a welcome 40% savings compared to PSMS.  

Friday, October 16, 2020

Steve Jobs User Stories: Start With the Customer Experience

Agile software development typically begins with user stories which are informal descriptions of software features from the customer's perspective (UX). When I worked at the Apple Online Store, my boss's boss would meet with Steve Jobs. Steve would tell us the user experience he wanted without trying to solution it, himself. In other words, he left the development details to the talent (developers and designers).

You got to start with the customer experience and work backwards to the technology. You can't start with with the technology and try to figure out where you're going to try to sell it. And I've made this mistake probably more than anyone else in this room and I've got the scar tissue to prove it.

– Steve Jobs



Start With Customer the Experience

In 2006, the iPod was booming along with the third party ecosystem it created. In a meeting, Steve Jobs let it be known to us that, when he was at the Apple Online Store website, he wanted to be able to see any product within three clicks. How long and how many clicks it takes to find what you're looking for is a good base metric for usability.

The challenge with three clicks, back then, was that Apple sold about two hundred different types of headphones. Displaying all of the headphones that Apple carried, at once, on a single web page would overload our servers. (Back then, there was no cloud computing.) Alternatively, paginating the results into batches of 10 or 25 wouldn't satisfy Steve's customer experience requirement. So, what to do?

One of my coworkers came across a new UI solution, infinite scrolling. Infinite scrolling allows content to load continuously as the user scrolls down the page, below the fold, eliminating the need for pagination. We now take infinite scrolling for granted on account that it's ubiquitous on popular social media sites. But, back then, it was new and it turned out to be the perfect solution for Steve.


Thursday, October 15, 2020

Section 230 Solution: My Thoughts On Content Service Providers vs Publishers

Summary

The current state of social media reminds me of the early days of e-mail in the late 1980s and throughout the 1990s. E-mail was a godsend in that we could communicate with people around the world in a matter of seconds; but security and spam were out of control. It was the Wild West. Now, we have an opportunity to fix social media the same way we fixed e-mail, through laws, technology, and regulation


Background

Section 230(c)(1) provides immunity from liability for providers and users of an "interactive computer service" who publish information provided by third-party users:

No provider or user of an interactive computer service shall be treated as the publisher or speaker of any information provided by another information content provider.

This protects social media websites since they’re not generating content like a news service. But, there’s obviously a problem since misinformation can be promulgated as truth, typically faster than fact. Also, the more content is amplified, the more authority it has, even if it’s false information.


Solution

Here’s my solution that doesn’t violate the First Amendment:

FCC Section 230 should differentiate between platforms that amplify content (e.g. retweeting on Twitter, resharing on Facebook, etc) and platforms that don’t allow amplification (e.g. Instagram, WordPress, etc). If a platform allows amplification, regardless if it’s done through manual curation or via an automated algorithm, then it’s no longer a service provider but rather a publisher.

If this degree of editing and censorship sounds like an administrative burden then take a look at the lack of child porn found through search engines like Google, Bing, Yahoo, etc. There is none, but certainly not from a lack of trying. And while the CAN-SPAM Act doesn't eliminate all spam, it does a great job (certainly much better than the wireless network providers when it comes to spoofing caller ID, etc).

Just as a news service doesn’t pass along fact as fiction without liability (libel) neither should social media. This clarification to Section 230 will cut into the profitability of social media companies, but they’ve reaped the benefits (and revenue) and now it’s time to take responsibility.

This post began as a tweet, but Twitter is down.

Wednesday, October 7, 2020

Elegant R Runtime Solution for Multithreading

Problem

A coworker came up with an elegant solution to an issue we’ve been facing with the R programing language. The R programming language is a popular open source environment for statistical computing. We run multiple R algorithms on a server using the Plumber framework which converts existing R code into web APIs by adding a couple of special comments. A key issue with R is that it’s single threaded (Microsoft’s solution is R Open). A single threaded language means that only a single block of code, inside an application, can execute at any given time. In other words, while that single block is executing all other code is blocked. This isn’t typically an issue unless there’s a block of code that takes a long time such as a complex algorithm or a call over a network; and our application, which supports multiple users, concurrently, does both so being single threaded won't scale for us.

One solution I’ve been pursuing over the last year was to use the AWS Lambda service which allows standalone functions to execute in the cloud. The challenge with Lambda is it doesn’t natively run R code; it’s better suited for Java, Python, and other languages. While it’s technically feasible to run R inside of Lambda, we hadn’t yet implemented it because it’s non-trivial.


Solution

The solution my coworker came up with was to run a Node.js server that simply makes calls to shell scripts (R scripts) running on the host operating system. Each shell script runs in its own process so one won’t block another. And, even though Node.js is, itself, single threaded, it uses non-blocking input/output calls which allows it to support tens of thousands of concurrent connections without incurring the cost of thread context switching.

Simple, elegant, and trivial to implement.

Saturday, September 26, 2020

iOS Feature Request

I use Siri and dictation frequently. My biggest frustration is when I go back to review my notes and I have no idea what I was trying to say because she heard, “Tickle your ass with a feather,” instead of, "Particularly nasty weather."


Wouldn’t it be great if iOS also recorded and stored my voice recordings, along with my transcribed notes, so I could replay it to hear what I actually said?

Can I get an Amen?


Monday, August 31, 2020

COVID is a Lot Like Driving

COVID-19 is a lot like driving. We look at the threats and calculate our personal risk vs reward.

I compare Coronavirus to a hurricane or blizzard. It is a blizzard where the snow is invisible and it can kill you; just like driving can kill you, even if you’re a pedestrian simply crossing the street.

If I’m jonesing for coffee, fresh fruit, etc, do I go out into the badness to get it? Most times... maybe nearly always... I’ll choose to say home rather than face the elements. But, every so often, I... we... go against our better judgement by increasing our risk to obtain a reward.

And, just the way we judge bad drivers, we judge bad citizens who take bigger risks than we’re willing to take, especially since their judgement can be our consequences.

One final thought I had about the car vs COVID analogy is that, a century ago, automobiles were more dangerous than they are now. No seatbelts or air bags with lousy intersection controls, etc. Today, we know how to deal with that when it comes to driving and the same is beginning to apply to COVID. We're learning how to navigate in a world with COVID until it passes.


Wednesday, August 26, 2020

Military Logistics vs. Commercial Logistics

Military Logistics 

Military logistics provides the means to translate national resources into combat power.

Specifically, logistics transforms human effort, natural resources, and industrial capacity into units, weapons, equipment, and supplies.

Logistics delivers these elements to the theater of operations at the time and place dictated by operational requirements and it sustains the military forces throughout the course of operations.

Logistics then returns those forces to their home bases when operations are concluded, rearming and reequipping them as needed in preparation for the next action.

Commercial Logistics

The term “logistics” is also used to describe activities in the civilian or commercial world. In this usage, logistics describes the process of procurement, maintenance, distribution, and replacement of resources conducted by corporations, firms, or industries. These activities have many points in common with military logistics and can serve as a source of concepts, techniques, and technologies of great interest to military logisticians. Nonetheless, civilian logistics lacks the warlike purpose that defines military logistics and is fundamentally different.

Source: Marine Corps Doctrinal Publication 4 (formerly FMFM-4)

Friday, August 21, 2020

Tips Following a News Interview

From time to time, we're fortunate to be interviewed by a news media outlet on topics related to our profession. Whether it's a big media company or a small outlet, you should share and save it. Save the written article as a PDF or download the audio/video to build your CV. Also, be sure to have the Wayback Machine archive the webpage.


After your media interview:

1. Post it to LinkedIn

2. Save it as a PDF, audio, or video

3. Archive the content in the Wayback Machine (archive.org)

Tuesday, June 16, 2020

How to Download and Save a Facebook Video

Click to enlarge
Sometimes you want to save and share a video from Facebook, but it's not sharable. 

Typically, on macOS Safari, you could simply right-click (or control-click) and save the video. But Facebook intentionally blocks this by running interference with JavaScript.

So, to save a Facebook video requires two steps, instead of one.

1. Disable JavaScript

2. Right-click on the video and choose Download Video which will be saved to your file system.

Sunday, May 24, 2020

Wrong Airport: Not Pilot Error


Occasionally, pilots will mistaken one airport for another, and even land at the wrong airport.

Today, though, an air traffic controller mistook another airplane for mine. It's an honest mistake by the controller and it wasn't a safety issue.

You can hear us discuss which airport I'm looking at in this two minute audio clip. (I compressed seven minutes of audio down to a couple of minutes by removing dead air and conversations with other aircraft.)

Here's what's happening in this audio clip from this morning...
(My call sign is "Skylane November Niner Three Bravo Zulu," sometimes shortened to "Three Bravo Zulu"):

1. I check-in with the tower controller at Palomar Airport in Carlsbad by letting him know that I'm 4,500' off the coast of Encinitas, south of the airport (heading north) and I ask for landing instructions.

2. He tells me to make "left traffic" (left turns) to runway 24 (two four), which makes sense based on my position.

3. About six seconds later, the controller changes his mind and tells me to continue north, up the coast, past the airport. He tells me that I'll be making "right traffic" (right turns) to the runway which makes sense since I'll be north of the airport. He clarifies that he'll tell me when it's time to turn in to the airport. This procedure isn't uncommon if there's other traffic congestion and the controller wants some extra time before having me join the airport's traffic pattern.

4. The controller tells me to turn right when I'm over the (Carlsbad) power plant.

5. The controller then tells me to turn right a minute or two later, which I do.

6. The controller then tells me that it looks like I'm heading to the wrong airport (Oceanside Airport).

7. I tell him that I'm looking at Palomar Airport and he tells me that I'm looking at Oceanside Airport.

8. I tell him that I'm lined up perfectly with the runway's centerline. At this point, I'm only a couple miles from the correct airport in Carlsbad (Palomar).

9. He asks me to "ident" which means he wants me to press a button on my airplane's transponder to send out a signal that will flash on his radar screen.

10. He sees my ident and realizes his mistake by saying, "Roger," and tells me to continue flying the traffic pattern I'm flying. He briefly asks me to maintain my current altitude before letting me descend. He points out some other traffic which he wants me to follow into the airport and then clears me to land.

Tah-dah! That was my Sunday morning. All's well.