Friday, June 01, 2012

iReality: The promise of iPad like fun, the delivery of Windows Vista fail

IMG 0742
IMG 0739Was on the way to Great Grandma's house and stopped at the Palisades Center in West Nyack, NY because of heavy traffic. Wandering around looking for a way for the kids to burn off some energy and what do we find but a small cluster of motion rides.

The heavy hitter was the iReality. It takes some serious arrogance for a mall ride to claim The World's First FULLY Interactive Simulator. Even better, it's blatantly using the iPad to sell this as a ride of the future.

Of course, kids were all over it, and mine were clamoring for a ride. I swing around the side and what do I see but Windows Vista! A classic bait and switch.

Not only is this "ride" not using anything resembling Apple technology, but what's this, the software has crashed and is showing a DOS prompt. DOS, the future is yesterday.

Ducking inside to look closer at the screen, I see that some script is caught in an infinite loop waiting to receive a message from a network service that never answers. I was laughing to hard to take a more clear photo.

So glad I couldn't give these clowns $2.

IMG 0741

Friday, May 25, 2012

How Rogue Amoeba's Airfoil Speakers could get pulled from the App Store for using a non-private API

Apple says Rogue Amoeba's Airfoil Speakers was pulled from the App Store for using a private API.


To recap, using a private API is sure to get your app rejected from the App Store. Unless Rogue Amoeba open sources their app, no one knows for sure if they're using a private API. I believe them when they say they aren't using one. But there is another way to get in the situation they're in.


Let's say an app developer unknowingly uses an API that was previous not flagged as private. Perhaps it's a publicly "known" API, even an open secret, but technically not part of the public API set. Your app passes the automated private API check and gets through manual review. A little while later, Apple adds the previously not-private API you used to the catalog of private APIs. Perhaps Apple realized their oversight, and given how serious they are about apps not using this API, ran an automated check against all App Store apps for usage. They discovered that Airfoil Speakers used this private API. Clearly they choose to pull the app in this case.


I offer this possibility because something similar happened on a project I was working on. A number of versions of the app had been approved and where for sale on the App Store when a small bug fix release was stopped cold during App Store manual review for private API use. The team was mystified at first and insulted, we hadn't used any private APIs, and had barely changed the app, what gives? But we did use a private API without even knowing it. The app used MAZeroingWeakRef for weak pointers, almost exclusively for delegates, but also for KVO notifications. Turns out the version of MAZeroingWeakRef we were using was intercepting a private API call!
@interface NSObject (KVOPrivateMethod)
- (BOOL)_isKVOA;
@end
In a later version of the library, there was a #define to not use that API. We turned it off, the app came crumbling down with memory issues. It was not a fun few days working to solve all the memory management issues MAZeroingWeakRef had hidden from view when there was a critical bug fix update to ship.

Tuesday, May 22, 2012

How Stephen King's "Under the Dome" Made Me A Reading Coward

Stephen King's "Under the Dome" was the first eBook (Kindle if you're keeping score) I ever bought. Reading it took me nearly as long as it took Mr. King to write it, close to 2 years, because I was a coward. Why? Because for most of this book, at least up to the halfway point, I had no idea how it was going to end. That's a good thing you say? I agree, which is why my reaction was so surprising. 

Warning: light spoilers

How does King pull off the "not sure who's going to make it" feeling? The cast of characters is huge, and they die all the time, even the ones that have got significant page time. It sort of feels like Game of Thrones in that regard. Maybe I wasn't being cynical enough, because once you make the halfway turn, the characters that seemed most likely to make it do. The character most likely to be the villain is in fact the villain, or at least the secondary villain. The cause of the dome, the main "villain", I can honestly say was one I didn't fully expect. Does this tie into the Dark Tower somehow? All the "19" references leads me to believe so, but not in any significant way that I can see.

But my cowardice in continue reading the story was shocking once I identified why I took such long breaks. I read other stuff in between, including King's hopefully not final Dark Tower book "The Wind Through the Keyhole" (loved it). I didn't have any issues finishing those stories. If dawned on me as I was finishing Under the Dome that I haven't been watching many movies & shows, playing many story driven games, or reading many books that don't have a long running story. I think this is what sequelitis must feel like, the damage never ending or long running stories do. Maybe it's just me, but it feels like I've been unconditioned from enjoying stories that actually end. Under the Dome was going to fast, the plot was to chaotic, is he going to explain the whole universe?

While I love stories connected to a larger universe (and any Dark Tower connection is tangential), sometimes you just need a story that's self contained, and which leaves a little to the imagination. Sometimes the best stories are the ones that end.

Monday, March 12, 2012

Apple.com Ad Shows New Apple TV Had Different App Names

I was surprised to even see an ad for TV on apple.com. Apple has barely been marketing TV, this seemed like a big deal.


Then I looked closer. The top three apps are named iTunes Movies, iTunes TV Shows, and iTunes Match! Click the ad, and at the full site you see the names as they actually are on the TV: Movies, TV Shows, and Music.


I have two theories. The marketing department intentionally changed the names to more clearly call attention to iTunes, or the new TV was going to ship with the iTunes derived names until a very late date and it slipped into marketing department.


Either way, and interesting alternate universe view in the new TV.

Tuesday, March 06, 2012

Fix Radar or GTFO (my duplicate rdar://10995271)

If you're a 3rd party Apple developer,  please go to Fix Radar or GTFO and follow the steps. My duplicate is rdar://10995271

Another blog post The psychology of Radar is broken is also worth your time reading.

This always amuses File a Radar

And the always amusing Radar or GTFO, which is of the always dapper Apple developer evangelist Michael Jurewitz. Note that Apple has never actually said "Radar or GTFO", it just became a joke meme that stuck.

I think we have Daniel Pasco @ Black Pixel to thank for really bringing this issue to a head in his blog post Radar or GTFO

Thursday, February 16, 2012

Dear Apple, Please Bring Free Updates from iOS "Back to the Mac" with OS X 10.8 Mountain Lion

I'm not cheap. I pay for all my software. Suggesting to Apple that OS X 10.8 Mountain Lion be a free update isn't about saving $30 bucks. I've gladly paid for every OS X update and will continue to do so if that's the direction Apple takes.


But I think the best idea from iOS, free updates, should come "Back to the Mac". This policy would allow developers to use the latest APIs as quickly as possible and help developers & Apple reduce support cost for older OS X versions more quickly. Any kind of monetary transaction is going to slow down OS X update adoption. Any iOS developer with access to analytics can see how quickly iOS 5 adoption has taken off (I've seen 60-75% already). Lion has sold 17 million copies, Apple's best selling release ever. The last reported install base was 58M Macs. Lion is on roughly 29% of all Macs. Pretty good, not nearly free iOS 5 adoption good. 


17 million Lion copies is a $510M gross, no small stash of cash to throw away. Except Apple has nearly $100B (or more by now) in cash, and making up that revenue is only 398k Macs at an average selling price of $1281


Imagine the ad Apple could deliver promising free software updates for 2 years on all their devices! Contrast that with the Android 4.0 upgrade schedule from Motorola or the confusing array of costly and confusing Windows upgrades, the comedy gold practically writes itself.


I think Apple replaces the revenue easy with a combination of Apple's cut of increased Mac App Store sales, decreased support costs, but more importantly new users. They could really amp up the expectation that when you buy a Mac, Apple "takes care of you" unlike with all those razor thin margin PCs. More importantly, it hits Microsoft where it really hurts, their wallet.

Tuesday, February 07, 2012

Easily Localize Custom NSDateFormatter Date Format Strings in iOS 4+

Apple ships a lot of new APIs with every major iOS release. They claimed iOS 4 had over 1,500 new APIs, and the same claim is repeated for iOS 5!
Any way you slice it, a lot of new code
It's easy for a new API that is developerlife altering to slip through a release undetected.

Which is exactly what happened to me for new in iOS 4 API [NSDateFormatter dateFormatFromTemplate:options:locale:]

Why is this API such a big? It gives developers an easy way to generate a custom date or time string for display to the user. Cocoa Touch (and Cocoa before it) have had predefined NSDateFormatterStyle that correlated to specific date or time display representations. For example, NSDateFormatterShortStyle used for dates would be 11/23/37 and for time 3:30pm. But the really big deal was that if you use these predefined styles they would get localized based on the NSLocale of the device. Meaning the short date format in the U.K. would output 23/11/37 and 15:30 respectively.

If you wanted a custom format and localization, like just month and day, you were out of luck without writing it yourself, which means you usually just used the pre-defined styles. Until iOS 4 that is!
Starting in iOS 4, you could not do stuff like this (straight from the documentation):
NSString *formatString = [NSDateFormatter dateFormatFromTemplate:@"EdMMM" options:0
locale:[NSLocale currentLocale]];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:formatString];
NSString *todayString = [dateFormatter stringFromDate:[NSDate date]];
NSLog(@"todayString: %@", todayString);

Which results in this output formatted for the US like this:
2012-02-07 09:32:16.725 Untitled 2[1803:707] todayString: Tue, Feb 7

And when the locale is, for example, Great Britain, the output is this with the same code:
2012-02-07 09:36:32.439 Untitled 2[1839:707] todayString: Tue 7 Feb

Notice this even puts a comma in or not as required by the locale!

BTW, the excellent CodeRunner (available on the Mac App Store) is perfect for quickly running these kinds of code snippets to see the output.

Friday, February 03, 2012

A Lack of Sandboxing Leadership: Apple's AirPort Utility 6.0 for Mac OS X 10.7 Lion is NOT Sandboxed

AirPort Utility 6.0, the iOSified and Lion only update to Apple's excellent WiFi network and base station management app released on January 30, 2012, is not sandboxed.
All Shall Sandbox


Apple decreed all apps submitted for Mac App Store review on or after March 1, 2012 must be sandboxed (there's no direct link, screenshot captures for posterity). The previous deadline was November 1, 2011.There has been a ton of debate on whether sandboxing as currently implemented actual solves the problem it sets out to. I'm not going to re-litagate that here. Introducing App Sandbox (Apple developer account required) from WWDC 11 makes as persuasive a case as I've ever seen for sandboxing. 


There are problems with sandboxing in Lion that Apple needs to solve, and 10.7.3 implements or fixes (Apple dev forum) a number of sandbox issues. Good arguments, documentation, fixes, and mandated deadlines that have already been pushed back aren't going to conclusively prove to 3rd party app developers they must implement sandboxing now.


Leadership does. Look at a list of Apple apps, and you're just as likely to see them not sandboxed as sandboxed. A lot of Apple's high profile apps are not sandboxed:
  • Safari 5.1.3 (Apple.com)
    • Some of the parts of the app like Safari Web Content are, but the main UI app isn't
  • Pages 4.1 (Mac App Store)
  • iBooks Author 1.0 (Mac App Store)
  • AirPort Utility 6.0 (Apple.com)
  • iPhoto 9.2.1 (Mac App Store)
  • iTunes 10.5.3 (Apple.com)
  • Xcode 4.3 (Mac App Store - Released February 16, 2012)
Maybe Apple's going to drop sandboxed versions of these apps any minute. But the closer we get to the submission deadline without even Apple's brand new apps (iBooks Author I'm looking at you) being sandboxed, the harder the deadline is to take seriously.

I've already taken one shot at sandboxing SleepMute in its current development cycle on Mac OS X 10.7.2. SleepMute has a UI app to write preferences and a helper that reads preferences and mutes or unmutes sound. Sandboxing completely broke the app. Both apps read/write preferences (with CF functions) to the same file preference file. This feature works perfectly without sandboxing, has to be completely rewritten for sandboxing. Also, simply launching the helper from the UI app wasn't working. That may have been fixed by 10.7.3, so I'll probably give it another shot, but not until Apple's apps start getting sandboxed.

Thursday, February 02, 2012

Netflix is my new HBO

 When I grew up in the 80s, a particularly life changing event was when my family subscribed to HBO.

There were no parental controls in those days. If you had parents like mine that put a TV in your room with HBO on it, you could watch all sorts of stuff that you had no business seeing. HBO's always had loads of cheap crappy movies to round out the expensive good stuff and original series. HBO would play those crappy movies over and over, I'd watch'em over and over again. The later at night the better, especially if it was some horror or mind fuck flick. Past midnight, I'd watch stuff that I'd never give time during the day. Nightmare on Elm Street 4? Why not, I've got time. Swamp Thing? I've only seen it 15 times, what's one more viewing.

It hit me tonight that Netflix is my new HBO. Insomnia at 3 AM? Why not Don't Look Back, subtitled because it's French, starring The Matrix Reloaded's Monica Bellucci and The World Is Not Enough's Sophie Marceau? I've got nothing better to do.

The perfect kind of late night crappy movie is the one you:

  • Can fall asleep to if you get tired again
  • Don't mind turning off at any point because you really don't care about the story
  • Might show you a bit of skin, no matter how fleeting
  • Is unintentionally funny, so you laugh at it not with it
  • You can watch in the background while you do something else (like write this post)

Plus, Netflix has mostly crappy content and it's getting worse as movie studios refuse to cut deals for newer better streaming content in reasonable timeframes. Which makes Netflix kind of perversely perfect for my late night insomnia needs. I won't be turning it off again if it stays anywhere close to $8/month and keeps the obscure content and/or bad content. And to think, I haven't even entered the time wasteland of TV-MA rated Japanese anime yet!

Wednesday, February 01, 2012

Exhibit A. On Why iOS 5 Newstand Apps Should Always Be Universal

I've had the New York Times app on my iPad since Newstand launched alongside iOS 5. I don't read the content, it's just not part of my workflow. What I love however are the notifications of important events just for having the app installed. The editorial selection is perfect, so I downloaded the NY Times app to my iPhone to get the notifications there as well.

I didn't realize what I downloaded on the iPhone was not a universal app. Imagine my surprise when I got back to my iPad & through the magic of App Store automatic downloads it appears I now have two NY Times!

When the iPad first came out, I would've agreed it was acceptable to ship separate apps for one actual app to pay for the cost of adding iPad features. No more. A universal app is really just table stakes at this point  There's no user experience case to be made for shipping separate iPhone & iPad apps. Multiple apps for the same app just creates user confusion on the App Store, and in cases like this, on the device as well.

And it just looks really dumb in Newstand!