Archive for July 18, 2018

Wednesday, July 18, 2018

App Stores and Monetization

Carolina Milanesi (via David Barnard):

It became quite clear early on that while searching for an app might not be that different than searching for a song, recommending an app was undoubtedly not the same. Suggesting a song based on genre or an artist did not translate into suggesting an app based on its type or a developer. I always remember getting suggestions to download subway maps in several different cities after downloading the London Tube app. Shame was, I did live in London, not in Moscow nor Paris and I was not even planning to visit those cities any time soon. It just does not work like that.


Interestingly, when it comes to paid apps, the leading drivers remain the same for both groups but only after the price of the app itself. I find this point interesting because it would suggest that smartphone users are not assessing the return of investment they would get from an app but they might, instead, be putting a limit to how much they are prepared to spend before they look beyond the price in what the app has to offer. In other words, great reviews, feature list, screenshots, and app description do not matter if the price is already beyond what the user perceives to be the right price for the app.


iOS panelists also seemed to keep developers at a higher standard asking that paid apps would be regularly updated through some additional payments but without having to require a subscription.

It’s interesting that, despite the App Store’s poor reputation for search, the Android panelists did not seem much happier with searching their store.

Previously: App Store Revenue Nearly Double That of Google Play.

Fantastical 2.5 for Mac

Flexibits (John Voorhees, MacRumors):

Fantastical now includes full support for Meetup. Add your Meetup account to Preferences > Accounts and view and respond to your Meetup events directly in Fantastical.


Open Preferences > Appearance to find a new option to display timed events that span more than one day in the all-day section of the Day and Week views.


Press the option key when editing the start time of an event to keep the end time the same. You can also select an event in Day or Week view and then press control-option-up/down arrow to adjust the start time of the event. Using control-shift-up/down arrow will adjust the end time instead.

I expect to use these modifier keys a lot.

Tracking Your Phone’s Location With GPS Turned Off

Jennifer Schlesinger and Andrea Day (via Hacker News):

Using Android phones running Google’s operating system, the researchers did the tracking using sensors in smartphones that were not designed to track location. Those tools included an accelerometer, which tracks how fast a phone is moving, a magnetometer, which works like a digital compass, and a gyroscope, which tracks rotation.


“In a place like Boston, which has a lot of unique turns and very curvy roads, you can get an accuracy of up to 50 percent of guessing the user’s location in the top five search results. In case of a place like Manhattan, which is mostly grid-like, it’s much more difficult,” Narain said.

This reminded me of the scene in Sneakers where they’re trying to figure out where Whistler Bishop was taken to, although it sounds like the Northeastern researchers did not use the microphone.

Update (2018-07-18): Adrian Tineo:

If it’s possible to create a plausible picture of a black hole with just a few pixels worth of data and plenty of algorithms, it should come as no surprise that the approximate location can be guessed from just orientation, speed and rotation (no GPS data)

How Omni Does Release Notes

Brent Simmons:

For major releases, our product managers (PMs) use our bug tracker (OmniBugZapper) to make sure there’s a note for each bug fix, new feature, and behavior change. […] We have a build phase that renders Markdown to HTML and also replaces some tokens[…]


Our PMs use TextMate and BBEdit, and we’ve done some customization to make editing these easier[…]


We try to localize the App Store release notes for major and feature releases.


We use fastlane to upload all the metadata for each release to App Store Connect.

My current workflow is to track issues in OmniOutliner. Before checking off a row, I use a LaunchBar snippet to insert some text, including the release note comment, into the row’s note. When it’s time to write up the release notes, I have an AppleScript that extracts them from the select rows’ notes and formats them in reStructuredText. This is then converted to plain text (for the mailing list and the Mac App Store), PDF (for the manual), and HTML (for the Web manual, Apple Help, blog, software update, and MacUpdate).

strftime’s Alpha-sorted man Page vs. Well-meaning People

Rachel Kroll (Hacker News):

What happened? Someone read the strftime man page, and %G alpha-sorts before %Y, so they found it first. Then they didn’t “get” the whole warning there, and it looked good enough, so they went with it. The rest pretty much follows from that.

The immediate fix is to change the %G to a %Y, naturally.

A better fix is to get people away from using format strings altogether. Do you really want all of your programmers learning this lesson? Or, do you want to have one person get it right, provide a handful of functions to render the approved formats for either “now” or a supplied time, and then ban all other attempts to use the strings directly, and then go on with life?


So, the next time your favorite site or app (or built-in tool, hello Apple!) breaks in the last week of one year or the first week of the next, and then “mysteriously fixes itself” three or four days later, it might just be this.

Rachel Kroll (Hacker News):

The question is: whatever will we do to stop the next new person from making the same honest mistake?

Put it another way: the me of 2018 knows this. The me of 1998 probably did not. Both of those people wrote code that’s still around running in systems all over the place. What’s the difference? 20 more years of experience. I did not show up knowing all of this stuff. Quite the contrary.


What if none of the values of X include the funky days where %Y and %G differ? The tests will all pass. You might even have 100% code and branch coverage… but the bug will still be there.