beaTunes News

Tuesday, July 26, 2016

Update: beaTunes 4.6.5

Two changes in this minor update are actually noteworthy:

  1. Auto-scrolling to a selected item when changing the sort order is one of those usability things that make your life much easier. To code it up took literally 2min after it was requested by a user. Small changes do matter.
  2. Potential hang during album ReplayGain analysis. This has been fixed. But! Here's a tip: When importing artist and/or album names from online sources, do not analyze album ReplayGain at the same time. When doing so, you are trying to hit a moving target, as the question "which song is part of an album" may be answered differently while the analysis progresses and new album/artist values are imported.

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

Most important changes in 4.6.5

  • Added auto-scrolling to selected song when changing sort order.
  • Fixed potential analysis hang due to database timeouts/pending writes.
  • Fixed table update notification for release year attribute.
  • Fixed Show All Columns menu item in column popup.
  • Fixed ClassCastException when setting image kind for id3 2.2 on Windows with iTunes.
  • Moved to Java 8u102.

Labels: , ,

Monday, July 25, 2016

Just a few more days...

Just a little reminder that our spectacular 10 Year Anniversary Sale is still going on (frankly, writing spectacular was quite hard—I'm an engineer at heart, not a sales person).
Still: Get your license for the very low price of US$ 9.95 (or less), or—if you already have one—let your friends and family know. This is truly a unique opportunity.


Thursday, July 21, 2016

10 Year Anniversary Sale

More than ten years ago, I started working on this little tool with no name. Something with music. Finally, in the early hours of 7/20/2006—ten years and one day ago—I sent out this email to a couple of people close to me:

It's been an amazing ten years. beaTunes has matured, has been improved and translated to Spanish, French, and German. Server-side code has been added and the signal processing has gotten a whole lot smoother. Unique features like auto-segmentation/semantic playback and the inspection process make beaTunes one of a kind. Needless to say, it's time to celebrate.

For the rest of the month of July 2016, beaTunes will be on sale for US$ 9.95.
Yep, that's more than 70% off the regular price (US$ 34.95).

You may say, this is already ridiculously cheap for such a comprehensive software... But wait... There's more!

During the same time—the rest of July 2016—you may also use the coupon code 10yearspecial on the coupon redemption page (deutsche Version) for an even lower price.

It's unlikely that you'll ever get beaTunes for less money. Grab it now, before the offer ends, spread the joy, and share the news.

Thanks for being my loyal customers through all these years. Obviously, without you this wouldn't have been possible.

Thank you.

Useful Links

You can download the free trial version here.
Regular purchase page.
Never heard of beaTunes before? Here's explained how it works.


Thursday, July 14, 2016

Update: beaTunes 4.6.4

beaTunes4 logo

Today's update fixes some minor nuisances, namely a harmless NullPointerException (NPE) in the lyrics lookup code, which leads to a confusing error message, and a rare MP3 playback failure, which also manifests itself in an unhelpful error message ("Failed to open item. 0"). The latter issue was caused by a bug in FFSampledSP, an open source wrapper for FFmpeg. Both problems are now fixed. Additionally, all communication with now happens via HTTPS.

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

Most important changes in 4.6.4

  • Fixed possible NullPointerException in lyrics task.
  • Moved to HTTPS endpoint.
  • Updated to FFSampledSP 0.9.14.

Labels: , ,

Wednesday, June 22, 2016

Update: beaTunes 4.6.3

beaTunes4 logo

Again, just want to let you know, that there is a new beaTunes version. As always, you can download it from the download section of the website.

Most important changes in 4.6.3

  • Improved color similarity rule.


Tuesday, June 7, 2016

Update: beaTunes 4.6.2

beaTunes4 logo

Just want to let you know, that there is a new beaTunes update. As always, you can download it from the download section of the website.

Most important changes in 4.6.2

  • Fixed potential infinite loop during list loading.
  • Fixed possible solution write failure of sort inspector.
  • Fixed no-new-songs-to-analyze issue.
  • Improved processing speed of ReplayGain.
  • Added workaround for dnd failure of images in Get Info on OS X caused by JDK-8156099.
  • Moved to HTTPS AcousticBrainz endpoint.
  • Updated to japlscript 3.1.6.

Labels: , ,

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

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: , , ,