Archive for June 26, 2018

Tuesday, June 26, 2018

macOS Mojave: Back to the Mac

Jason Snell:

macOS Mojave feels like a macOS update that’s truly about the Mac, extending features that are at the core of the Mac’s identity. At the same time, macOS Mojave represents the end of a long era (of stability or, less charitably, stagnation) and the beginning of a period that could completely redefine what it means to use a Mac.

Is macOS Mojave the latest chapter of an ongoing story, the beginning of a new one, or the end of an old one? It feels very much like the answer is yes and yes and yes.

Update (2018-06-29): Daniel Eran Dilger:

While reviewing the Public Beta in advance, it repeatedly occured to me that the overall intent of this release is to make the Mac the ideal computing system for iOS users. As I run through the new features, you’ll see what I mean.

Update (2018-07-26): Colin Cornaby:

New App Store has Marzipan patterns and they just feel weird to me. Navigation controllers and in window modal sessions. The navigation controllers feel least weird. But the in window models just leave me feeling like things are in the wrong place with a Done button.

(New App Store is not a Marzipan app, but if this is the direction Apple wants to go with AppKit apps, bleh.)

Git Tower 3 Switches to Subscription

Tobias Günther:

Today, after years of work, we are finally launching a brand new version of Tower! It’s packed with awesome new features like Pull Requests, Interactive Rebase, and our unique “Quick Actions”. It reinvents many existing features like Search, File History, or Blame.

Here’s some more information about the new design and features. I like the new back/forward buttons and the quick actions. Hopefully, I won’t need to use the Reflog, but it’s good that it’s now available. Search is improved, but GitUp is still better as searching content. The file history view is better in some ways, but it no longer lets you see the full commit messages, and there’s still no way to invoke it without first navigating to the file within the app. The new commit details view is much better in that you can more easily see the changed files. I prefer the old icon.

In this context, we can also announce that we’re finally moving Tower’s license model to an annual fee. This is probably neither surprising nor unusual news: many other companies have made similar changes already years ago.

For brevity’s sake, let me just state the most important reason why we decided to make this change: Although we had shipped countless small and medium-sized features for free since we launched version 2 in 2014, we had to save up the big features for a new major release. Now, we will finally be able to ship big features more quickly to our customers.

Previously, the app was $79; now it’s $69/year. Including discounts, I paid $53.10 for Tower 1 in 2011, $26.55 for the Tower 2 upgrade in 2014, and $34.50 for a 1-year subscription for Tower 3 today. Presumably that will go up to $69 next year. So this is a huge price increase. But it’s also a really good app, and I use it every day.

Tower is an interesting case study for subscriptions because:

As a customer, I still dislike subscriptions. However, I expect this change will be a success for Tower because it’s a solid professional tool, and if you’re the type of person who likes and uses it there’s no obvious alternative.

Previously: Productivity Apps and Subscription Pricing.

Update (2018-06-26): Ian Beck mentions Fork, which seems like a promising newcomer that’s similar to Tower but less mature. It supports syntax highlighting and has a command-line tool for quickly opening a file’s history.

Update (2018-06-27): Tyler Fox:

Regarding @gittower’s switch to subscriptions: I think a subscription model is completely fine, but the annual subscription cost should generally be much less (1/2 or 1/3) than what the normal purchase price was. Regular users don’t re-purchase their software every year.

See also: Hacker News.

Update (2018-06-29): Morgan Sammons:

Dear software companies who want academics to buy their software, Please let me buy a perpetual license. I have money now that I need to spend. That money won’t exist next year…so I can’t “subscribe” to your software…

Update (2018-07-24): Tobias Günther:

Tower for Mac now supports Image Diffing for a variety of formats (including PNG, JPG, GIF, BMP, TIFF, JPEG2000, and HEIC). In both the Working Copy and various History / Changeset views, you can now see the actual images - and how they were changed!

iOS 12 Beta: Easier-to-Access Trackpad Mode

Federico Viticci:

Previously available only on 3D Touch-enabled iPhones or with a two-finger swipe on the iPad’s keyboard, trackpad mode can be activated in a much easier way in iOS 12: just tap & hold on the space bar until the keyboard becomes a trackpad. This mode (seemingly inspired by Gboard and other custom keyboards with a similar implementation) gives owners of iPhones without 3D Touch a way to more precisely control the cursor in text fields.

Update (2018-06-26): Craig Pearlman:

Leaving the 3D Touch alive/dead argument aside, I actually find the spacebar activation easier and more responsive even with 3D Touch.

Fibonacci Hashing

Malte Skarupke (via Hacker News):

Everyone uses the algorithm that’s unnecessarily slow and leads to more problems, and nobody is using the algorithm that’s faster while at the same time being more robust to problematic patterns. Knuth talked about Integer Modulo and about Fibonacci Hashing, and everybody should have taken away from that that they should use Fibonacci Hashing, but they didn’t and everybody uses integer modulo.


So what’s happening here is that Knuth uses the term “hash function” differently than we use it today.  Today the steps in a hash table are something like this:

  1. Hash the key
  2. Map the hash value to a slot
  3. Compare the item in the slot
  4. If it’s not the right item, repeat step 3 with a different item until the right one is found or some end condition is met

We use the term “hash function” to refer to step 1. But Knuth uses the term “hash function” to refer to something that does both step 1 and step 2. So when he refers to a hash function, he means something that both hashes the incoming key, and assigns it to a slot in the table. So if the table is only 1024 items large, the hash function can only return a value from 0 to 1023. This explains why “integer modulo” is a hash function for Knuth: It doesn’t do anything in step 1, but it does work well for step 2. So if those two steps were just one step, then integer modulo does a good job at that one step since it does a good job at our step 2. But when we take it apart like that, we’ll see that Fibonacci Hashing is an improvement compared to integer modulo in both steps. And since we’re only using it for step 2, it allows us to use a faster implementation for step 1 because the hash function gets some help from the additional mixing that Fibonacci hashing does.

But this difference in terms, where Knuth uses “hash function” to mean something different than “hash function” means for std::unordered_map, explains to me why nobody is using Fibonacci hashing. When judged as a “hash function” in today’s terms, it’s not that great.

Privacy News

Carole Cadwalladr and Emma Graham-Harrison:

Facebook used its apps to gather information about users and their friends, including some who had not signed up to the social network, reading their text messages, tracking their locations and accessing photos on their phones, a court case in California alleges.


Facebook has not fully disclosed the manner in which it pre-processes photos on the iOS camera roll, meaning if a user has any Facebook app installed on their iPhone, then Facebook accesses and analyses the photos the user takes and/or stores on the iPhone, the complainant alleges.

Brian Krebs (via John Gruber):

Craig Young, a researcher with security firm Tripwire, said he discovered an authentication weakness that leaks incredibly accurate location information about users of both the smart speaker and home assistant Google Home, and Chromecast, a small electronic device that makes it simple to stream TV shows, movies and games to a digital television or monitor.

Young said the attack works by asking the Google device for a list of nearby wireless networks and then sending that list to Google’s geolocation lookup services.

Jon Brodkin (via John Gruber):

“After my investigation and follow-up reports revealed that middlemen are selling Americans’ location to the highest bidder without their consent or making it available on insecure Web portals, Verizon did the responsible thing and promptly announced it was cutting these companies off,” Wyden said. “In contrast, AT&T, T-Mobile, and Sprint seem content to continuing to sell their customers’ private information to these shady middle men, Americans’ privacy be damned.”

AT&T changed its stance shortly after Wyden’s statement.