Podcast chapters 1.5 is here

… and 1.5.1 is right around the corner. (Correction: it too is out! App review is not as slow as it used to be.) Podcasters are clearly very good at delivering encouragement and eminently detailed problem reports, often in the exact same Twitter message. In this case @davidarribas provided not only a text description, but also a screen recording, screenshots, and the exact MP3 files involved in the process.

Not even I could manage to not find the error quickly with such excellent data. And so 1.5.1 is coming, submitted only two days after the big 1.5.

So what is the thing with 1.5?

A rewrite of most code handling reading and, especially, writing of ID3 metadata from and to MP3 files.

You know, the main thing the app actually does.

Both Thomas and I had been thinking independently of starting this job before I even took over. Podcast chapters used a surprisingly wide array of libraries and techniques to get metadata out of and into files, and while it worked well there was a lot of room for a cleaner solution. The major downside was in doing a lot of work for no immediate benefit to users, but the upside would be a nicer codebase and greater ease of adding new featuers. A little difficult to motivate in the moment, but of great possible benefit in the future. And I had another good driver to get me going: learning about the domain.

I now know where stuff is and how it fits together.

Doing the rewrite has had the great benefit of opening a lot of black boxes for me. If I knew all about the ID3 standard and working with files at the byte-level, I may have been able to move very fast with the old codebase. But I did not, and writing code to handle it has taught me the ins and outs and, eventually, increasingly, made them feel easier to work with. I have removed a lot of uncertainty in the form of code I did not know very well, and I have added the knowledge and excitement of being able to change and add things easily.

The black box is open, and I have a pretty long list of fun stuff to look into.

Restoring episode summaries, for example. I thought this would be like working with any other text, but it turns out to be a little bit more interesting, especially if I want to be a good metadata citizen and not remove other text a user may have put in the file through some other app. Before, that kind of thing looked strange, error-prone, and somewhat tiring. Now that the box is open, it is plain fun to think about how to do it best. (And then fiddle back and forth with reading and writing actual bytes, reading the ID3 spec with a magnifying glass trying to figure out what exactly is happening and why.)