Blog Archive

Capo 1.3 for iOS

Today I released Capo 1.3 for iOS, and you can buy it now from the link at http://capoapp.com/iphone.html.

In this release, I added a much-requested feature. That is, you can now import MP3, WAV, AIFF, and MPEG-4 audio files from other applications...


Help Wanted

I'm going to level with you: I'm drowning here on my own with four products on my plate and a fast-moving set of platforms to support. I'd rather be focusing on adding features, but lately I am spending too much time on playing catch-up.

So instead...


TapeDeck 1.5

It might appear that I've not done much to the app in a while, but TapeDeck 1.5 represents months of technical debt repayment, plus a few new features.

First off, the new stuff. I added Retina support and improved the quality of YouTube uploads. Now...


#pragma mark CALayer Texture Atlases

Here's a nifty trick I used recently to implement the fast-moving low-overhead time display in Capo. Maybe you can use it somewhere that you might have fast moving digits in your UI.

The naïve implementation of my time display actually involved a...


#pragma mark vDSP (ab)use

Have you ever wished you could memset() with a stride parameter? Are you also using floating-point values?

OK, let me frame this a different way. Suppose you're drawing a waveform on the screen. You'll need to set a list of points, where the X values...


Building the Fast Fourier Transform

I wrote a guest post over at Mike Ash's blog about the Fast Fourier Transform. Check it out if you're interested in learning a bit more about how it works.

I have a lot of potential follow-up post ideas to continue this series on Fourier Transforms...


Coding for high resolution on OS X? Read this.

I don't ever want to see this in your layer-backed and/or layer-hosting view's code:

someLayer.contentsScale = [[NSScreen mainScreen] backingScaleFactor];

Because it makes the following assumptions:

  • Your view is running on a Mac with a single...


We've Moved!

Since early 2011, I have been planning a set of large-scale moves that would impact my work life greatly. My wife and I decided to build and move into a new home, and I needed to finally incorporate SuperMegaUltraGroovy.

Quite naïvely, I initially...