beaTunes News

Wednesday, June 1, 2016

Why Free OS Upgrades Suck

Here's how Apple reacted to my last OS X 10.10 bug report:

That's right:

No plans to update Yosemite.

But let me start from the beginning... and yes, this is a little bit of a rant, something I felt I needed to get off my chest.

I develop and sell a small music app for Windows and OS X. Software veterans know, maintenance is an integral and probably the largest part of the development process. Since the software runs on customer machines, it's essential that it sends home crash reports (after asking for consent) so that I am aware of those really nasty, hard to reproduce bugs. These crash reports can easily be grouped by OS version, app version and probably most importantly, offending frame. This lets me prioritize and decide, on which bug I should spend the most time. The bug that eventually led to Apple's response from above was identified this way (rdar://22948498). It's one of the most frequent causes for crashes of my app on OS X 10.10. And it will never be fixed.

Because my app is written in Java, most crashes (let's define a crash as an event that produces a crash log) are caused either by the Java Runtime Environment (JRE) or by the OS. Solving JRE problems is not easy, but doable: The JRE is open source, there is a public bug database and there are a bunch of mailing lists that let me talk to Oracle engineers and other involved parties. Plus, and now we're getting closer to the actual topic of this article, I can freely choose which version of the JRE to ship with my app. Heck, I can even patch it myself and ship a custom OpenJDK version, if I want to. Not that that is typically a great idea, but still...

Solving OS problems is much harder. Neither OS X nor Windows are open source, there is no official and open bug database (Open Radar is great, but not official), and I don't get to choose the OS version my customers use.

But, you may say, you can require users to use OS version X.Y.Z in your system requirements blurb.

Yes. Indeed, I can.

But remember what I wrote about maintenance being part of software development? De facto, system requirements only shield you from old OS versions. What happens, when the customer updates her or his system, because the new UI is so much prettier? Or, as illustrated by Apple's response, when the OS manufacturer decides that it is no longer fixing certain bugs in its "old" OS (released 7/2014!) and actively urges customers to update their systems?

Why can Apple afford not to fix its OS?

From Apple's point of view, 10.11 is the bugfix for 10.10. And it's free as in you-already-paid-extra-for-the-hardware. So users just need to install this free upgrade, no need for Apple to fix the 10.10 branch, and everything is fine. Or is it not?

It is not.

Twitter is full of people bemoaning the fact that Apple is semi-forcing OS upgrades upon them. And they suffer when essential applications don't (yet) run on the new OS version, the vendor decides not to support the new OS at all, or the app is old but paid-for and now requires a paid upgrade.

What does Apple do about this? It's almost comical. OS X moves known incompatible software into a separate folder. Out of sight, out of mind. Problem solved. Frankly, I have my doubts the mechanism works well for anything but software built for the wrong architecture—be it 32-bit or PowerPC. If you really want to know, whether some app runs under a certain OS version, you might want to check a site like roaringapps.com.

But let's be fair. I'm sure that Apple tries hard not to break compatibility. Unfortunately, trying is not enough. Users and app developers inevitably have to deal with software that simply does not work anymore. If this happened every five years or so, it wouldn't be a big deal. But Apple likes to release often, push innovations out the door, and throw away legacy code. A new OS version is presented almost every year. So we are facing this problem quite frequently.

How much does a free OS upgrade really cost?

To be clear: I'm not saying that short release cycles are necessarily bad—they have their advantages. But contrary to what Craig Federighi claimed in 2013, the yearly OS X upgrades are not free. A price needs to be paid for each new version. Either by app developers, who have to spend a lot of time on making sure that their apps still work, or by users, who loose perfectly good apps or have to pay for upgrades. And that's why I'm so annoyed that Apple won't fix that 10.10 bug mentioned above. The price for that bug is paid by us, because it only leaves us with the unfortunate choice between occasional app crashes and an OS upgrade with associated hidden costs.

Most likely, Apple will announce another free upgrade for OS X at this year's developer conference (WWDC).

Will you upgrade once it's released? How much will it cost you?

Labels: , , ,

Wednesday, August 19, 2015

Looking good: beaTunes 4.5

beaTunes4 logo

It is done. Just a couple of weeks after I posted the first EA version of beaTunes 4.5, I'm extremely happy to announce the immediate availability of the final beaTunes 4.5. As already mentioned earlier, this update focuses on eye candy, usability, and “stuff under the hood”.

Eye Candy

Let's start with the obvious: Eye Candy. beaTunes 4.5 features a fresh new UI, fitting in well with the Yosemite/El Capitan look—simple, flat, yet stylish. Beyond the superficial, the UI has been gently re-organized. Top level view selectors (Library, Inspection, Charts, …) have been moved to the left edge of the application window. Similarly, list-specific sub-view buttons (Matching Songs, …) have been moved to the right edge. As a result, the status bar (bottom edge) has become optional and can now be turned on and off via the View menu. The same is true for the side bar, containing the list of playlists, charts or inspections.

Usability

I have to admit, this seems like a very small thing to mention. But in the Matching Songs table, I have added a button that allows instant adding of the selected song to the current playlist (as long as it's editable!). What's so nice about this is, that the newly added song is automatically selected and the new matches are computed right away. Because the button has a keyboard shortcut (Alt-Enter), you can incrementally add songs to the main list without your hands leaving the keyboard. I should mention that this feature was originally suggested by a user. Thanks!

A feature that has previously been realized in the form of a plugin, is the new ability to write the computed key to the song's comment field. This can now be achieved via new options for the key analysis task. There you can also choose which format you'd like the key to be written in. Related, but slightly different, is the new ability to embed Open Key Notation keys into your files. I have fought this for a long time, because the ID3 specification simply forbids it and it endangers interoperability. But since pretty much everybody else does it in one way or another, not bothering to separate information from presentation, I figured it's time to give in. So beaTunes 4.5 gives you the choice between the ID3 TKEY format and Open Key Notation. You can configure this in the general preferences.

Under the Hood

Much has changed under the hood. Most significantly, many of the open source libraries beaTunes depends upon have been updated. Thus this new version benefits from general development progress. Additionally, caching and memory management have received some attention, resulting in some general performance improvements.

The Little Things

Naturally, that's not all that has changed. There are a whole lot of little things that were improved, fixed, or added. For example, some inspectors got additional solutions and there's even a whole new inspector making you aware of missing track counts. When importing tags from Last.fm, mood-related ones can now be properly embedded into the ID3 mood field. You can now choose, whether beaTunes should write track or album replay gain into the proprietary iTunes iTunNORM tag. … Frankly, there's no point in listing it all.

Free

Worth mentioning though, is this: The update is free for existing beaTunes 4.0 users—yes! you can simply download and install the new version from here. beaTunes 2 and 3 users can use the same download, but need an upgrade license to unlock it.
I sincerely hope you enjoy this update.

Thanks so much for your ongoing support.

Labels: , , , ,

Tuesday, May 19, 2015

Free BeatGauge Licenses

BeatGauge Logo

I'm giving away 10 free BeatGauge licenses to beaTunes 4 users. If you're interested, please simply leave a comment on http://blog.beatunes.com/2015/05/free-beatgauge-licenses.html. The first 10 comments, that are verifiable from people who have purchased beaTunes 4 for OS X, qualify.

Please note, that BeatGauge requires OS X 10.10 (Yosemite).

To give you an idea what BeatGauge looks like in action, here's a little demo video (this is not speeded up in any way):

I'm also quite happy to report, that a British customer had the following to say about version 1.0.0 (current version is 1.0.1):

Astonishingly good, accurate and easy to use ★★★★★
by Nick65423 - Version - 1.0.0 - May 13, 2015

This just works. I used to use an old piece of software (ltjBPM) to determine BPM. This involved listening to each track and tapping the space bar in time with the music. Each track took about a minute to do. My 4571 tracks would have taken seven and a half hours to finish, but I would have given up long before that. BeatGauge did all 4571, with no interference or supervision from me, in roughly seven and a half minutes and never made a mistake. For interest, I tried to trick it to see what, if any, error messages came back, or if it would crash. I fed it one-second orchestra stings (Message: Unable to determine BPM). I fed it voice memos (Message: Unable to determine BPM). I fed it DRM-protected tracks (Message: Illegal operation. DRM protected?). Finally, I moved the parent file of a track to break its link with its listing in iTunes. (Message: File does not exist). None of these tricks would be done by anyone in day-to-day use, but it is interesting to see that the software coped with everything I tried and came back with an accurate result. The best software is simple, accurate and works with as little user supervision as possible. BeatGauge is one of those apps. Brilliant.

Labels: , ,

Tuesday, May 12, 2015

BeatGauge: Automatic BPM detection for iTunes

BeatGauge Logo

I'm happy to announce, that beaTunes got a little brother today. His name is BeatGauge and he's a dead-simple, automatic BPM calculator. While beaTunes aims at the larger goal of improving metadata to build great playlists, BeatGauge does only one thing, but it does it very well:

It computes BPM values for your iTunes songs.

Simply drag your tracks from iTunes onto the app and it will automatically start calculating, reporting the results back to iTunes immediately. Honestly, I don't know how this could be done any simpler.
Under the hood, BeatGauge uses multithreaded GCD code, taking advantage of your computer's multiple cores. It's written in Swift for OS X 10.10 (Yosemite)—in other words: Apple's latest technologies.

As of today, BeatGauge is exclusively available via the Mac App Store (MAS). If you're using iTunes on Yosemite and are looking for a light-weight BPM calculator, BeatGauge is definitely a nice addition to your audio tool-belt. Give it a try!

Demo

Labels: , , , ,

Thursday, August 28, 2014

Playing nicely with Traktor

beaTunes4 logo

As it turns out, Traktor Pro 2 unfortunately does not understand the M3U8 playlists exported by beaTunes (right-click on playlist, export), but only the less capable, bare-bones M3U format. Since Traktor is the software of choice for many, I naturally want beaTunes to play nicely with it. Therefore today's update contains two new playlist exporters: M3U and PLS. The M3U implementation makes sure to not include any comments or such and encodes its content as required by the "spec" with the ISO-8859-1/Latin 1 character set. This implies, that any non-Western characters not representable in this character set, must not be used in filenames. M3U8 on the other hand, uses Unicode and does not have this shortcoming. Just as a reminder: If you ever want to write your own exporter, you can.

Also, if you intend to use analysis results like BPM and key in third party apps like Traktor, please make sure to embed your results in the audio files. Otherwise Traktor won't be able to see them. To read more about where beaTunes stores its data, please read this article.

The second feature addition in 4.0.5 will hopefully make some people with lots of audiobooks happy. As requested, beaTunes now allows you to exclude audiobooks and iTunes U files from inspection and bulk analysis. To enable this, you have to check the appropriate boxes in both the analysis and inspection preferences (see screenshot).

As always, you can download the software from the download section of the website.

Most important changes in 4.0.5

  • Fixed Discogs search URL.
  • Fixed memory allocation issues in playlist sync.
  • Added M3U playlist exporter.
  • Added PLS playlist exporter.
  • Added code to attempt import of mood tags on library creation.
  • Added ability to ignore audiobooks and iTunes U files in inspection and analysis.
  • Update of playlist sort order during analysis.
  • Updated bundled JRE.
  • Show OutOfMemory dialog at most once.
  • Switched to G1 garbage collector.
  • Updated Yosemite support.

Labels: , ,