Under The Microscope

Archive for June, 2012

The Developer News Window

As our user base has grown over the years, the ability to handle problems rapidly has become increasingly important for us. Even a brief service outage or rare bug can cause hundreds of emails to come flooding in. While we have a large user base, our team is still small, so heading off problems with fast updates and useful communication is essential.

Unfortunately, with the advent of Apple’s App Store and the associated review processes, it’s become more difficult both to push out updates in a timely fashion and to communicate directly with our customers. We don’t have any way of knowing when (or even if) an update will ship through Apple’s App Stores to our customers, nor do we have any idea who those customers actually are!1

Even for apps outside the App Stores, getting in touch can be difficult. Only a small portion of users follow our Twitter feed, have Liked us on Facebook, or read this site. While we have a well-subscribed mailing list, emailing everyone about a bug which won’t affect most of them is likely to be more annoying than helpful, and still won’t reach all relevant users.

The fact is, regardless of where they purchased our software, most customers have no contact with us at all after purchasing. That’s generally just fine, but when an emergency arises, everyone prefers a direct line of communication.

A Solution

Because of this, we’ve rolled out some new infrastructure in our applications. We call it the Developer News window. After exploring many different ways to talk to our active customers, we finally realized the best way to do it was right in the application itself. By talking to users inside the application, we can reach them as they’re most likely to need the information we’re providing.

Here’s a screenshot of Piezo’s Developer News window, informing users of a critical update for Mac OS X 10.7.3 and up:

Dev News In Action
Breaking News

We’re certainly not the first to have the idea to publish news directly inside a software application. Nevertheless, it seems most applications don’t do it, and they’re often left scrambling because of it. Because so few apps seem to have implemented something like this, and because getting all the little things right takes a fair amount of effort, it’s worthwhile to talk about it in depth.

In Action

Since we started shipping Developer News in our apps many months ago, we’ve been fortunate to need to provide users with critical information just once, and everything worked exactly as designed. Specifically, users with Piezo on Mac OS X 10.7.2 were alerted to an issue before they upgraded their OS, and many opted to hold off for a few days until we could issue a fix. After that, users on Mac OS X 10.7.3 who had the broken version were alerted as soon as a working version was available.

Though we hope emergencies will be rare, we do plan to utilize Developer News again in the future. In the past when we’ve had a paid upgrade, we generally made a single mention of it in our version checking window, without ever actually offering to download the new version (as doing so would mean changing out the user’s licensed copy for an unlicensed one). This was not terribly effective.

Worse, when Mac OS X 10.7 was released, it killed the quite-out-of-date-but-still-popular Airfoil 3 entirely. We needed to get the word out to all Airfoil 3 users on Lion that their new OS required Airfoil 4. Making the best of a lousy situation, we opted for the first time to use the version update window (which had previously only ever offered free updates) to move users to a paid upgrade:

Airfoil 4's Update/Upgrade
This is best avoided.

The majority of users read this notice and upgraded without incident. However, plenty of users missed the note in red, and were thus angered to find themselves suddenly using a trial copy. As we had expected from the get-go, this proved to be a less than ideal way to get users up to date.

In the future, we’ll be able to use the Developer News window for alerting users when an old version simply must be updated, as well as displaying a notice once or twice when a major new upgrade is available.

Our Implementation

Much like the version checking found in nearly all apps outside the App Store, the Developer News system starts out by invisibly determining if there’s any news to display (the answer is almost always no; more on that later). To check, the application downloads a control property list on our web server, which looks like this:

<dict>
	<key>uuid</key>
	<string>news-2012-02-07</string>
	<key>displayLimit</key>
	<integer>10000</integer>
	<key>url</key>
	<string>https://rogueamoeba.com/piezo/ping/news.php</string>
	<key>checkInterval</key>
	<integer>86400</integer>
</dict>

The control property list contains a UUID of the current news item, a count of the number of times to display it, the actual URL of the item, and a time interval as to when to check again for new news.

The Display Limit is a significant variable, as some news items should display persistently while others need only be shown a single time. In the example above, the older version of Piezo was permanently broken, necessitating an update. As such, that news will be shown each and every time the broken version is launched. However, if we want to alert the user to news that’s important but not critical, we certainly don’t want to bother them by mentioning it more than once or twice.

The Check Interval is a little trick we came up with years ago when working on Nicecast. Anytime we have code that is polling a server, determining what an acceptable polling rate is can be difficult. Most of the time there is no news, and we want a slow polling rate to preserve both the users’ and our own network resources. But during times when we need to inform users of critical updates, using those resources to inform the customers sooner (by lowering the polling rate to hourly) is worth it for everyone involved. By putting the polling rate on the server, we can save resources while still providing fast updates.

When the Developer News system reads the control property list and determines that there is news to display, it prepares to fetch the News URL. While we could simply fetch the URL and display it to all users, we built the system to provide finer-grained control. For example, the Piezo news item shown above was only relevant to users on Mac OS X 10.7.3 – there was no reason to show it to others.

To facilitate this fine-grained display, the News system sends along some anonymous information to the web server.2 The web server then determines if the news it has is relevant, and only sends it down if so. This has to be designed and thought through very carefully ahead of time though. If tomorrow we had a bug that only affected Mac Mini users, we’d have no way of delivering the news to just them, as we aren’t sending MachineType data.

The content itself is simply displayed in a WebKit view. Since we don’t know in advance how big our news content is going to be, we even send down an extra HTTP header (X-Rogueamoeba-Windowsize) to set the dimensions of the window. We do the same for the window title (X-Rogueamoeba-Windowtitle). Having the full power of HTML provides us with a lot of options that sending a simple text-only message wouldn’t, including the ability to include images, links, forms, and more.

A Light Touch

Earlier, we mentioned that there will almost always not be news to display. This relates to our philosophy for using the Developer News window. We plan to use this window only after careful consideration, and to err on the side of not using it if we have another choice. It would be very easy to fall into the habit of using this window to convey all sorts of information, but we feel that would be a serious mistake. Users don’t want to be spammed inside of apps they’ve purchased, so the Developer News window is only for crucial information. Information about minor updates, other products, and most anything else belongs on Twitter, Facebook, or this weblog. These are places where users have opted-in to receiving additional information.

Conclusion

If you’re a developer, we definitely recommend you consider a similar setup for your own applications. The ability to get in touch with active users and provide them with critical information has the potential to benefit both you and your users, and it’s even more important given the disconnection from our customers the App Store can cause. Be conservative in how you use it, and sooner or later, both you and your customers will be pleased you were able to get in touch.


Footnotes:

1. Most App Store users know very little about how things work for developers, and generally they shouldn’t need to. It is worth being aware, however, that developers have no idea if you’ve purchased their software via the App Store, nor any way to contact you about your purchase. 

2. Specifically: the application version, OS version, and a flag indicating if this is an AppStore build or not. 

Updates to Airfoil, Audio Hijack Pro, and Nicecast Bring Mountain Lion Support

We’ve got a trio of big Mac updates today, to our home audio streamer Airfoil, our powerful audio recorder Audio Hijack Pro, and our Internet radio station creator Nicecast. Their version number bumps are modest, but don’t be fooled – these new releases pack some important updates.

Instant On IconFirst up, all three applications include Instant On 6, a major update to our Instant On component. Instant On makes it possible to capture audio from applications which are already running, with no need to quit and relaunch them. It also provides the ability to capture all audio being played at once, with the System Audio source. Instant On 6 provides preliminary support for users running Mac OS X 10.8 (Mountain Lion). The new Instant On also removes the need to use the Soundflower audio device when capturing System Audio. While you won’t notice anything flashy from the new version, things will work far more smoothly after you update, right from the Install Extras window.

In addition, version 4.7.1 of Airfoil now features a source selector in its menu bar menu (first introduced in Airfoil 4.7), making it possible to switch sources right from the global Airfoil menu. Users have been thrilled with the new Menu Bar Mode in Airfoil, and we’re delighted to make it even better.

Of course, all three applications also received a multitude of small bug fixes and improvements, and we recommend updating immediately. These are all free updates, so grab them now by selecting Check for Update from the Airfoil, Audio Hijack Pro, or Nicecast menu. If you have any issues, be sure to let us know.

Airport Express (Dual-Band) Disassembly

With the announcement of the new Airport Expresses (they work great with Airfoil), and their obvious resemblance to AppleTV 2s, my first thought was “I wonder if it’s just an AppleTV 2 inside?”. With only one way to find out, we ordered our test units as well as one to go under the knife screwdriver. So to the workshop we go:

The new 2012 AirPort Express, laid bare
The AirPort Express, laid bare

The bottom case pops off with just a thin screwdriver around the edges. That said, I broke nearly all the tabs holding it on in the process. Putty knife might have been better, but the few remaining functional tabs still hold it in place after reassembly.

Inside the Airport Express is rather similar to both the AppleTV 2 and the old Airport Expresses. There is a power supply board and a logic board, and one giant anodized aluminum heat sink.

The new 2012 AirPort Express, logic board
The logic board top, and bottom

The logic board itself is not too different from previous Expresses. The main chips are an Atheros AR9344 and Atheros AR9582, with 64MB of RAM from a Hynix H5PS5162GFR. No A5 chip in here yet. Notably absent is a Flash memory chip, which the old models used to store their firmware and user settings. Presumably this is built directly into the CPUs now.

More pertinent to our customers, the audio digital to analog converter is an all-new 24-bit/192khz Asahi Kasei AKM4430. This chip is similar to the Cirrus Logic CS4344 used in the previous model, but should be a improvement over the Burr-Brown PCM2705 used in the original 802.11g Airport Expresses

On to the power supply, a 3.3VDC / 2A module made by Delta, similar to the AppleTV 2. Previous Expresses used a dual-output 12VDC/5VDC supply made by Samsung.

The new 2012 AirPort Express, power supply
The Delta power supply, in its case

The compactness of this little board is quite striking, with the main transformer suspended through the PCB to shave off a few millimeters of thickness.

The new 2012 AirPort Express, full psu
The power supply board, top and bottom

One thing to note here is that power is delivered from the power supply to the logic board by way of the 2 screw mounting holes that overlap between the boards (labeled V0 and GND on the PSU). If your power supply ever dies, you can just wire a 3.3VDC wall supply directly to these positions on the logic board and it’ll happily power up:

The new 2012 AirPort Express, powered externally
Powering the AirPort Express from an external power supply

All in all, the design of the new Express appears to be a mix of both old and new. It’s a beautiful little box which has thus far performed quite well in all our tests.

Interested in another look? Check out SmallNetBuilder’s Airport Express 2012 disassembly.

Airfoil Works Great With Apple’s Newest AirPort Express

We’ve just gotten our hands on some of Apple’s brand-new AirPort Express units, and we’re happy to report that Airfoil works flawlessly with these shiny new devices. If you’ve been waiting to buy this new router/audio device, you can now be assured that audio sending from your Mac to the new dual-band AirPort Express will work great via Airfoil.

If you haven’t seen the new AirPort Express, you can check it out on Apple’s site. The venerable AirPort Express, first introduced in 2004, finally has a new form factor. In fact, its case is essentially a white Apple TV (with a few different ports, of course):

The new 2012 AirPort Express
The New 2012 Square Dual-Band AirPort Express, Front and Back

We expect Apple will sell a whole lot of these great new routers, and we’re glad to be able to enhance the device’s functionality with Airfoil. Use Airfoil to send any audio from your Mac (or PC) to the new square AirPort Express, as well as many other outputs (including all versions of the AirPort Express and all versions of the Apple TV).

Get Piezo 1.2, With Improved VoIP Recording

Piezo IconIt’s a beautiful day, but we’re inside releasing software. Why? Because we’ve got a great update to our audio recording tool Piezo! If you haven’t yet tried out Piezo, you can learn more about it right on the Piezo page. If you’re already a Piezo fan, you’re no doubt wondering what’s new in version 1.2. Along with several small improvements and tweaks, we’ve got two big features. Read about them below.

Improved VoIP Recording From Skype and More

Skype IconFirst up, we’ve improved recording from Skype and other VoIP applications. While our own Audio Hijack Pro has long been a favorite among podcasters and more for this task, Piezo is great at recording Skype and others as well. It’s not as powerful as Audio Hijack Pro, but it’s a snap to set up – just select your source (such as Skype) in Piezo, then click Record, and you’ll be good to go. Both your audio and the other party’s will be recorded to one file. Piezo will even helpfully split it across channels, with your audio on the left and your caller on the right.

That’s pretty great already, but before our latest version things could be a bit finicky. Previously, you needed to make sure your Sound System Preferences matched Skype’s device settings. Now, however, Piezo will track Skype (and other VoIP apps) for you, automatically. With fewer adjustments required, even for complex setups, Piezo 1.2 makes it easier than ever to get the recording you’re after.

A New Audio Play-thru Toggle

That’s not all that’s new, however. Piezo 1.2 also adds a new toggle for audio play-thru, right in the Piezo menu.

Piezo's Play-Thru Toggle
Piezo’s new play-thru toggle

Now, if you’re recording from an audio input (such as a USB turntable or other device), you can enable audio play-thru to hear the audio as it’s being recorded.1 And if you’re recording from an application and don’t want to hear the audio as it’s recorded, there’s no need to mute your whole computer any more. Now, you can simply disable play-thru in Piezo to prevent the audio from being heard.

Get It Now

This is a free update, so if you’ve already got Piezo, you can get the latest version by heading over to the Mac App Store (if you bought it from the Mac App Store) or by choosing “Check for Update” from the Piezo menu (if you bought it directly through our store). If you haven’t purchased Piezo, you can give the free trial a spin, then purchase directly through our store or via Mac App Store.


Footnotes:

1. If you’re recording from a microphone, always be sure to avoid creating a feedback loop! To avoid loops, use headphones to monitor your audio play-thru.