Archives for : meta

#import [Time code];

Hey, look, I ported the blog to Swift! [Time code]; is now Time.code(), which means I’ve lost the warm hug of the Objective-C square braces, but at least I don’t need a semicolon at the end of every line either.

What’s really going on is that after freeloading off my friend Michael’s; web hosting account, I finally decided that I really ought to take hosting into my own hands. So, I’ve brought everything over to a t2.nano instance on AWS and hopefully haven’t lost too much in the move.

Continue Reading >>

Click Here to Fund this Blog

Don’t mind me, just testing links from the new iTunes Affiliate Program.

Interestingly, it seems you can’t create affil links to Apple apps (Mac or iOS) anymore. But the format is so simple (append at= and your affil ID to the usual iTunes URL), that it’s easy to do by hand. Like this: Final Cut Pro X. Question is, does it count?

Practical upshot of these programs: I get a 7% cut of anything you buy on iTunes for 24 hours after you follow one of these links. Doesn’t change your price; it’s just a payment from Apple to me for sending them traffic. And it’s never very much money (average $20 a month), but infinitely more than I made with a brief Google AdSense experiment (never got to $1, and the Apple and Amazon affil links are way less intrustive than banners), and it’s also a little more than I make off my old apps in the App Store.

EDIT: one huge improvement I forgot to mention is that the URLs no longer begin with… which scared off some users who moused over them and rightly worried where they’d be taken. Since the URLs are now all with just an additional key-value pair in the parameters, users should feel more comfortable clicking them. They’re probably a lot more Twitter-friendly in this format too.

Notes on “A Moral Code Cast in Steel”

The Prags started a forum for readers to discuss their thoughts about Steve Jobs, following his death yesterday, and asked some of their writers to prime the pump with some initial posts.

Mine, A Moral Code Cast in Steel, takes its inspiration from a quote from Ayn Rand’s Atlas Shrugged, about the expression of human genius and creativity in the form of physical things, the things we create.

It’s a dicey book to be quoting because there are a lot of people who hate, absolutely hate, Ayn Rand, and to co-opt a dead person and attach them to the selling of a product or belief system is potentially tasteless and offensive (yes, irony, thanks for noticing). And some of the objectivists doing so are being pretty ham-handed about it. The only reason I thought it was OK to proceed with is because we have that interview of Steve Wozniak saying that Jobs was inspired by Atlas Shrugged in his youth. That’s a sterling source, and easily verifiable, and that made the Jobs-Atlas analogy a viable and fair angle to take.

Plus, I think the central points really hold: that the will and ingenuity of the creator can be perceived in his or her works (indeed, it is what separates them from being raw materials), and that Jobs was particularly fascinating in finding inspiration and truth from many different sources: East and West, spiritual and physical, technology and liberal arts.

Of course, one can’t help but bring one’s own beliefs to the table. Here’s the scene immediately to my left while I work (click for full-size):

Standing desk flanked by bookcases with Rand's Atlas Shrugged and Tezuka's Buddha

Anyways, Bill got on board back in the NeXT days, and he’s got a great post too, so be sure to check that out.

Bandwidth blues

So, this site is at 90% of bandwidth capacity for the month, something that’s never happened before. And that’s after I upped the quota.

I went looking in the logs to see what was going on and found some interesting items. First, whereas I thought my readership was in the hundreds (according to Feedburner’s stats on my RSS follows), awstats says my monthly unique visitors in the 8,000 – 10,000 range. And in the months when I got linked from Daring Fireball, it’s been a lot higher.

The real pressure is coming from people downloading the .zip files of the examples from my AV Foundation sessions at the Voices That Matter conferences. Because these zips include a small (20 MB) QuickTime movie as a source for the editing examples, they end up being disproportionate contributors to the bandwidth use.

Also interesting: a lot of the downloads of the sample code are coming from the .cn top-level domain. Users in China account for less than 3% of the blog reads, but 75% of the overall bandwidth, because they seem to be mostly interested in the sample code. Maybe that’ll change once WWDC is done and Apple has new samples up, assuming that Apple samples should be the first word in developer how-tos, and assuming they feel the need to put out new AVF sample code.

Anyways, so that I don’t go over quota and lose the site for the rest of the month, I’ve moved all the conference sample code over to the public folder of my Dropbox (referral link). I’ve also searched through the blog entries and repointed the links to these examples, so if you start from the blog entries and follow a link, you should be fine (whereas if you have an old link in the form, you can likely expect a 404).

Sayonara, spammers

Every week, I get a few e-mails from my WordPress installation telling me that new users have created accounts on this blog. The new accounts almost never post any comments, and often have user names that are obviously spammy.

These users haven’t posted any spam, but I’m not going to take the chance — I’m going to start deleting accounts that don’t have real names, valid metadata, or a history of posting anything. Apologies if I blow away your account, but most of the legitimate posters are using OpenID anyways.

Connecting the Dots

Philip Hodgetts e-mailed me yesterday, having found my recent CocoaHeads Ann Arbor talk on AV Foundation, and searching from there to find my blog. The first thing this brings up is that I’ve been slack about linking my various online identities and outlets… it should be easier for anyone who happens across my stuff to be able to get to it more easily. As a first step, behold the “More of This Stuff” box at the right, which links to my presentations and my Twitter feed. The former is updated less frequently than the latter, but also contains fewer obscenities and references to anime.

Philip co-hosts a podcast about digital media production, and their latest episode is chock-ful of important stuff about QuickTime and QTKit that more people should know (frame rate doesn’t have to be constant!), along with wondering aloud about where the hell Final Cut stands given the QuickTime/QTKit schism on the Mac and the degree to which it is built atop the 32-bit legacy QuickTime API. FWIW, between reported layoffs on the Final Cut team and their key programmers working on iMovie for iPhone, I do not have a particularly good feeling about the future of FCP/FCE.

Philip, being a Mac guy and not an iOS guy, blogged that he was surprised my presentation wasn’t an NDA violation. Actually, AV Foundation has been around since 2.2, but only became a document-based audio/video editing framework in iOS 4. The only thing that’s NDA is what’s in iOS 4.1 (good stuff, BTW… hope we see it Wednesday, even though I might have to race out some code and a blog entry to revise this beastly entry).

He’s right in the podcast, though, that iPhone OS / iOS has sometimes kept some of its video functionality away from third-party developers. For example, Safari could embed a video, but through iPhone OS 3.1, the only video playback option was the MPMoviePlayerController, which takes over the entire screen when you play the movie. 3.2 provided the ability to get a separate view… but recall that 3.2 was iPad-only, and the iPad form factor clearly demands the ability to embed video in a view. In iOS 4, it may make more sense to ditch MPMoviePlayerController and leave MediaPlayer.framework for iPod library access, and instead do playback by getting an AVURLAsset and feeding it to an AVPlayer.

One slide Philip calls attention to in his blog is where I compare the class and method counts of AV Foundation,, QTKit, and QuickTime for Java. A few notes on how I spoke to this slide when I gave my presentation:

  • First, notice that AV Foundation is already larger than QTKit. But also notice that while it has twice as many classes, it only has about 30% more methods. This is because AV Foundation had the option of starting fresh, rather than wrapping the old QuickTime API, and thus could opt for a more hierarchical class structure. AVAssets represent anything playable, while AVCompositions are movies that are being created and edited in-process. Many of the subclasses also split out separate classes for their mutable versions. By comparison, QTKit’s QTMovie class has over 100 methods; it just has to be all things to all people.

  • Not only is smaller than AV Foundation, it also represents the alpha and omega of media on that platform, so while it’s mostly provided as a media player and capture API, it also includes everything else media-related on the platform, like ringtone synthesis and face recognition. While iOS doesn’t do these, keep in mind that on iOS, there are totally different frameworks for media library access (MediaPlayer.framework), low-level audio (Core Audio), photo library access (AssetsLibrary.framework), in-memory audio clips (System Sounds), etc. By this analysis, media support on iOS is many times more comprehensive than what’s currently available in Android.

  • Don’t read too much into my inclusion of QuickTime for Java. It was deprecated at WWDC 2008, after all. I put it in this chart because its use of classes and methods offered an apples-to-apples comparison with the other frameworks. Really, it’s there as a proxy for the old C-based QuickTime API. If you counted the number of functions in QuickTime, I’m sure you’d easily top 10,000. After all, QTJ represented Apple’s last attempt to wrap all of QuickTime with an OO layer. In QTKit, there’s no such ambition to be comprehensive. Instead, QTKit feels like a calculated attempt to include the stuff that the most developers will need. This allows Apple to quietly abandon unneeded legacies like Wired Sprites and QuickTime VR. But quite a few babies are being thrown out with the bathwater — neither QTKit nor AV Foundation currently has equivalents for the “get next interesting time” functions (which could find edit points or individual samples), or the ability to read/write individual samples with GetMediaSample() / AddMediaSample().

One other point of interest is one of the last slides, which quotes a macro seen throughout AVFoundation and Core Media in iOS 4:


Does this mean that AV Foundation will appear on Mac OS X 10.7 (or hell, does it mean that 10.7 work is underway)? IMHO, not enough to speculate, other than to say that someone was careful to leave the door open.

Update: Speaking of speaking on AV Foundation, I should mention again that I’m going to be doing a much more intense and detailed Introduction to AV Foundation at the Voices That Matter: iPhone Developer Conference in Philadelphia, October 16-17. $100 off with discount code PHRSPKR.

Yes, the font changed

In addition to other arbitrary changes on my system (ruining file-app association, losing the ability to stay asleep), Snow Leopard changed the default gamma, which made the white-on-black text on this blog significantly less readable at its default (small) point size. So I’ve increased the body font size slightly.

Snow Leopard also adds a new monospaced font, Menlo, which I’ve swapped in as the default font for code tags, ahead of Panic Sans, DejaVu Sans, Inconsolata, and a few other programmer favorites. If you’re getting Courier (or, heaven forbid, Courier New), you’re either not a programmer, not on a Mac, or both. FWIW, if you’re on a Mac, you should be getting Lucida Sans as the body font.

And if you read the blog with RSS, then none of this applies to you. Thanks for playing.

A word from Wordle

Have my first iPod / Music Library code for iPhone SDK 3.0 working… still adding a few more things before writing the chapter.

While I’m busy, I thought this was amusing: Wordle word clouds of recent activity on this blog:


and my Twitter activity:


Testing WP-Poll

Just installed WP-Poll, and I’m now testing it out.
[poll id=”2″]

Doesn’t seem to entirely agree with my theme (extra bullet points next to the radio buttons is unhelpful), but it’ll do.

Update: After a few hours, it seems this plug spins a “Wait” cursor and does little else. Does not seem to process votes or show results. Fail.

Later still (5/15/09): It’s crap. Deactivating the plug-in.

Waiting for bandwidth

No DSL at the home office until Friday, so this will likely be a slow week for [Tc]; blogs.

BTW, it’s been a while since I had DSL hooked up. At the Atlanta house, a tech had to come out and split out one twisted pair into its own line, which I then connected the DSL modem to. Here in GRR, I guess the DSL and voice are on the same line, and I’ll need to use DSL filters for the purely voice devices? Makes me feel foolish for having thrown away at least 5 never-used line filters as I was moving out of the old house. I truly didn’t know what they were, as I believed DSL always required splitting out a separate twisted pair.

Oh, provider is DSL Extreme, who are well-reviewed on Broadband Reports. Wish us luck…