beaTunes News

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.

Labels:

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 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, May 11, 2016

Faster Graphics, no Blank Lines

beaTunes4 logo

Among other things, today's update fixes a couple of display issues. If you have ever seen blank lines in the main song table—this update is for you. In general, beaTunes will feel a little faster and scrolling around in huge lists should be more responsive. Also related to graphics: the choice of GPU (graphics adapter) on OS X. There really is no reason why beaTunes should use the high performance GPU. Thanks to a recent Java update (8u92), beaTunes is now able to request the integrated GPU instead of the high performance one, resulting in lower power consumption. And as beaTunes comes bundled with a Java runtime, there is no need for you to update your system's Java to get this feature.

Another important bug fix deals with Album Replay Gain. Because the beaTunes analysis queue processes multiple tracks in parallel and independently, computing Album Replay Gain is a little like dealing with a pink, spotted elephant: All tracks for an album have to be loaded, analyzed and the metadata has to be written, while another analysis thread may already work on one of those files. Compared to all other values beaTunes computes, this is a big exception and requires some extra synchronization logic. For 4.6.1, this logic has been completely rewritten.

I'm sure you'll enjoy this update. As always, you can download it from the download section of the website.

Most important changes in 4.6.1

  • Fixed dragging songs from the main table to other programs.
  • Fixed write failures of Album Replay Gain values.
  • Fixed main table repaint issue (blank list until scroll).
  • Fixed launch failure when installed in folder with + char.
  • Improved sort order of different genre issues (by artist).
  • Improved speed of table rendering code for iCloud songs.
  • Improved matching of online metadata when Earliest Release is checked.
  • Reduced power consumption on OS X by allowing use of integrated GPU.
  • Updated to FFSampledSP 0.9.13.

Labels: , , , , ,

Thursday, April 28, 2016

How to use multiple folders in a single, folder-based collection

beaTunes4 logo

A question that comes up every now and then is how to use multiple base-folders in a folder-based library. Folder-based libraries are those, that have nothing to do with iTunes, but basically contain all songs in a given base folder (more info). By default, folder-based libraries are based on a single folder and the beaTunes user interface does not let you add other folders. Despite this, beaTunes 4 is capable of basing folder-based libraries on more than one folder—but it requires a tiny bit of hacking.

beaTunes stores information about music collections in a file called preferences2.xml, which is stored in the folder ~/Library/Application Support/beaTunes/ on OS X and in %LocalAppData%\tagtraum industries\beaTunes\ on Windows. Unfortunately, the folders are a little hard to find on both operating systems. On OS X, ~/Library/ is hidden—use Go -> Go to Folder... in Finder to find it. On Windows, simply copy the mentioned path and paste it into the File Explorer's path field.

Before you open the file, please make sure that beaTunes is not running. Then take a look with your favorite text editor, e.g. Atom. If you're using multiple, folder-based libraries, you should see something like this:

<?xml version="1.0" encoding="UTF-8"?>
<preferences>
    <components>
        <component id="beatunes">
            <file-collection persistentid="7DB1A93611184EB2" selected="true" name="FileSystem">
                <root>/Users/demo_user/folder_a</root>
            </file-collection>
            <file-collection persistentid="7BAF626404544925" name="FileSystem">
                <root>/Users/demo_user/folder_b</root>
            </file-collection>
            [...]
        </component>
        [...]
    </components>
</preferences>

In essence, this describes two folder-based libraries: One based on folder_a and one on folder_b. All you need to do to combine both libraries into one, is to move the <root>-element describing folder_b to the <file-collection>-element containing folder_a. Once that is done, you can remove the now empty <file-collection>-element for folder_b. The result looks like this:

<?xml version="1.0" encoding="UTF-8"?>
<preferences>
    <components>
        <component id="beatunes">
            <file-collection persistentid="7DB1A93611184EB2" selected="true" name="FileSystem">
                <root>/Users/demo_user/folder_a</root>
                <root>/Users/demo_user/folder_b</root>
            </file-collection>
            [...]
        </component>
        [...]
    </components>
</preferences>

Now save the preferences2.xml file, start beaTunes and select the library we just modified. To identify which one it is, open the beaTunes general preferences and open the combo box that lists the existing libraries. When hovering over the items with the mouse, beaTunes will show all root-folders for each library in the tooltip (screenshot). Once the right library is selected, you may need to synchronize via the File menu, if beaTunes isn't doing it automatically.

The example above assumes that you already have multiple folder-based libraries and shows you how to merge them into one. However, multiple libraries are not strictly necessary to add another base-folder to a library. In fact, you can simply add a new <root>-element to an existing <file-collection>, save the file and then start beaTunes (again: don't edit the file while beaTunes is running!). The two things you have to pay attention to though, are overlaps and loops. You should never add a folder to the file collection that is in some form a sub-folder of an already existing <root>-element. Also, you should never create loops in your directory structure, e.g. via symbolic links.

I hope this helps some folks with sprawling libraries. If you have any questions, please don't hesitate to ask.

Wednesday, April 27, 2016

We're Having a Sale!

Only on 4/27&28 at bitsdujour.com.

Labels:

Wednesday, April 20, 2016

If you are using 32-bit beaTunes 4.x on Windows, update now!

At the end of the last post, there was a little note saying something about Apple's QuickTime. Even though it was stuck to the end of the post, it was important. Important enough to justify these extra lines. The gist of it is: If you are using the 32-bit version of beaTunes 4.x, you should update to beaTunes 4.6 and uninstall QuickTime. Why? QuickTime for Windows has known security issues that Apple will not fix. And beaTunes 4.6 does not require QuickTime anymore.

Why is this only important for the 32-bit version of beaTunes? Apple has never ported QuickTime into the 64-bit world, which is why the 64-bit version of beaTunes has never been able to use it. Instead, beaTunes uses the operating system's media libraries combined with FFsampledSP (a library based on FFmpeg).

Labels: , ,