Posts

The way I solved my daughter's "iMessage Activation" error

Writing these notes in case they help someone.

My daughter recently tried to add her Apple ID to her iPhone'sApple Messages app. (Settings > Messages > Send & Receive > Add Apple ID)

When she tried this, she got a dialog box where she could type in her Apple ID and password. After a 15 second delay she got an error dialog box:

iMessage Activation
  An error occurred during activation.
        Try again

She got a similar error message if she tried to activate FaceTime:

FaceTime Activation
  An error occurred during activation.
        Try again

I searched the Internet, and tried the various remedies that Apple and others suggested:

Reboot Phone.Make sure the phone can receive SMS messages.Enable/disable iMessage and FaceTime.Log the iPhone out of iCloud and log back in again.Visit icloud.com and check the iCloud account to see if there's any warnings or errors.Update the phone OS to the latest release version of iOS.Try to register with WiFi enabled but Cell disable…

2018 iPad Pro 12.9" Report

After weeks of research and thought, I bought a iPad Pro 12.9" 3rd Generation.
My impressions, based on a week's use: It's too expensive, especially once you include the pencil and keyboard case.It's a significant improvement over the 1st generation iPad Pro 12.9".It's physically much smaller.The new keyboard is nicer.The new pencil's magnetic charger makes it much more useful than before, because now it's always charged when I want to use it.FlawsThe magnets holding the pencil to the iPad are too weak. It's easy to knock the pencil off the edge of the iPad when picking it up or carrying it.When the keyboard case is folded back, your hands touch the keys. This feels weird at first.The hardware is held back by iOS 12 and Apple App Store limitations. FWIW I think for most people the ordinary 2018 iPad, with a Logitech Crayon, would be a better purchase.
But I do enjoy using it!

Solving the anemone puzzle in Botanicula

Botanicula is a whimsical graphical adventure game for the iPad and other computers. One of the puzzles near the end of the game requires a bit of thinking to solve. When I came upon it, after a couple of hours of play, I was too tired to think. So I wrote some code to brute-force the solution. I'm unreasonably pleased that it worked the first time. Here's the code, cleaned up and commented:



Computer History Museum Oral Histories

Image
The Computer History Museum Oral Histories are a wonderful project. They are deep, long, interviews with many different programmers. Lots of never-before-made-public details about important projects.

For example, this oral history by Oral History of Kenneth Kocienda and Richard Williamson goes into details of how iOS was designed:




Or if you prefer PDFs:

Oral History Part 1

Oral History Part 2

One of the interesting things I found out was that there was an attempt to use HTML/Web APIs to write iPhone apps, and that for the first two or three iOS releases some of the apps, including the Stocks and Weather apps were implemented as HTML/Web apps.

Girls Who Code iPhone App Development Course Review

One of my daughters recently took the Girls Who Code iPhone App Development course.

This was a two-week summer course, taught 9 am to 4 pm in a high school computer science classroom. The first week the girls were taught the basics of the Swift programming language and iPhone App development. The second week the girls formed into 4-person teams and wrote their own iPhone apps.

The girls learned how to use modern software development tools like Stack Overflow, GitHub, and Trello.

Much of the instruction during the first week was by way of working through examples from a private Girls Who Code website.

What worked well:
The girls learned the basics of iOS app development, especially the Interface Builder.The girls learned how to work in small teams, how to design apps, how to meet deadlines, etc.The girls were motivated by the assignment of writing an app to improve society/the world.The girls learned how to present their final project to a group. What could have been better: From watchin…

On-the-cheap Machine Learning, revisited

A short update on my On the Cheap Machine Learning blog post. After almost a year of use, I’m still pretty happy with the setup. The hardware has worked well. I haven’t done as much independent ML research as I had hoped, but I have contributed many hours of night-time GPU cycles to the Leela Zero open-source Go-game-AI project. I don’t think I would change anything about the build, and there’s nothing about it I want to upgrade yet.

However, in the past year a new option has appeared for on-the-cheap machine learning: Google’s Colaboratory project. Colaboratory is a free web-based IDE for writing machine learning applications. What’s especially cool about it is that comes with access to a cloud-based GPU. The GPU they provide is the NVIDIA K80, which is not the fastest GPU, but it’s still plenty fast for experimenting with machine learning. [Disclosure: I work for Google, but not in any groups related to Google Colaboratory.]

Colaboratory puts machine learning within the reach of any…

What I learned in 2017

Shipping an Audio Pipeline In 2017 I shipped a new audio rendering pipeline for the iOS version of Google Play Music. I use it to render a particular flavor of fragmented MP4 that we use in the Google Play Music streaming music service. It was quite a learning experience to write and ship real-time audio code on iOS.

If you are looking to write an audio pipeline for iOS, I highly recommend basing it on The Amazing Audio Engine 2. Core Audio is a powerful library with an peculiar API. TAAE2 provides a much nicer API on top of Core Audio, without adding much overhead.

I had designed and implemented much of my new audio pipeline in 2016, but 2017 was the year that I deployed the pipeline to production.

I learned that shipping an audio rendering pipeline comes with a long tail of bugs, most of which have the same symptom: "I was listening to a song when it stopped". I was able to find and fix most of my bugs by using a combination of:
Great base libraries. (TAAE2 and Core Audio)…