Sunday, November 01, 2009

Retro Review - Star Trek: First Contact

Of the 3.5 Star Trek Next Generations movies (Generations is a bridge movie and only counts as half), the best Next Generation movie is clearly First Contact and quality goes down from there.

I've watched First Contact on Blu-ray now 4 times (hey a baby that doesn't want to sleep and being immobile from surgery leaves you with a lot of time on your hands). That includes all 3 audio commentaries. I think I am ready to finally, after nearly 13 years, put my feelings to bed on this film.

Not the Story I Wanted
When this film came out on November 22, 1996 (easy fact to drop in, First Contact is currently the only movie poster in my TV room), I was incredibly hyped for it. The Next Generation TV episodes Best of Both Worlds Part 1 & 2 where clearly the best of the show. If they just remade those episodes with movie quality sets and effects, it would have made an awesome movie.

That is obviously not the direction they went. What I expected was a sequel to Best of Both Worlds where the Borg come in force to take over the Federation. I imagined something like the Enterprise-E still being built in act 1 while the Borg invade Federation space and assimilate something big and shocking like the Klingon home world, symbolically replacing the original best Trek bad guys with the new best Trek bad guys. Then Picard and crew take the E out at the beginning of Act 2 with a smaller to medium size armada to stop another assimilation, nothing critical yet, but the ship isn't ready. The Klingon ships in the fleet, overcome with revenge and grief, stop following orders and coordinating their attack, everyone is destroyed except the E and a few Klingon ships. The E is damaged, but retreats before any critical damage is done. The E is meant as the Federation's Borg stopping ship. It's clear then the Borg are on their way to earth, and the E needs its full compliment of Borg stopping weapons. Then in Act 3, the Enterprise with every ship left in the Federation fleet, as well as old enemies and now allies like the Romulans, gather en masse to destroy the Borg ship. I didn't have character beats specifically in mind, but that was the general outline I had in mind back in 1996. That's not what we got.

It's clear listening to the Brannon Braga and Ronald D. Moore commentary on the First Contact Blu-ray that budget is the primary constraint to something like I was expecting and even hampers what is seen in First Contact. Even within the constraints of the budget, some things are just wrong with the story we get, and none of the audio commentaries address them.

Bad Time Travel Story
Whenever any story uses time travel, the danger is always that it's difficult to follow and just a little thinking about it will unravel any logic about its use. The Terminator movies have this problem, and sadly First Contact has this problem as well. If the Borg intended to go back in time and stop first contact, but they failed, why not try again until they succeed. Why would they need to travel to earth at all to travel back in time, just travel back in time in their own space and then travel to earth and assimilate it. Presto, no Federation. In fact, the Borg can take over the entire universe this way with no resistance. If a small ball ship can open a time travel worm hole, it can't be difficult.

It's also clear from the Bragga/Moore commentary the time the Borg go back to was arbitrary. It was originally going to be the middle ages, but then they set it at First Contact to be a kind of origin story of the Federation, which is nice to see, but making it all fit together sacrificed the Borg as being the smart and scary villain they originally where.

Bullshit Opening Sequence
OK, not the opening sequence, the Picard double-dream is pretty badass. Nope, I am talking about once the Borg are known to be heading toward earth, Starfleet doesn't want the Enterprise in the fleet. Totally crap, the audience knows within seconds, that this is a total contrivance that will be undone in a few minutes. There is absolutely no drama in it. Well, Picard listening to opera is a nice character move, but you could easily have that part when in warp as Picard prepares for this Borg confrontation.

Borg Stay on the Enterprise
Once the Enterprise destroys the Borg ball (all too easily, seriously 3 quantum torpedoes), them beam onto the Enterprise. Why not beam some Borg onto earth to take out Cochrane's first contact ship? Isn't that what they are there to do? Taking over the Enterprise is done for what reason? So they can get home? Surely the humans on earth are less capable of offering any resistance. The Enterprise isn't carrying anything like Marines, the Borg could have still easily assimilated earth.

Wrap-up
With these problems, the best things going for First Contact are the characters' stories, the Borg queen, and the humor of meeting and steering Zefram Cochrane into making first contact. For that, the quality of Frakes' direction, production values, and the too brief and small space battle, I give Star Trek: First Contact the following rating:

3.5 Inner Exceptions

Saturday, October 10, 2009

iTimeZone 1.3: Rejected from the App Store 2 times...so far

iTimeZone 1.3 - 1st Rejection
Another sad tale of multiple rejections from the App Store for a new version of an app already in the store. I've submitted 4 major releases of iTimeZone, two of them have been rejected on the first submission, but the still in review 1.3 release has been painful.

I was busting my ass to get this release done before my second son was born. I thought I got it done and was happy, proud even, that with the mountain of "getting ready for baby 2.0" work, I finally pushed out the latest release of iTimeZone.

The first rejection email came from  the night before, 8:43 PM to be exact, my wife was giving birth. 17 days after I first submitted it. In no way did it spoil the impending arrival of our new son, but it did hurt.

Take a look at the top image on the left. iTimeZone 1.3 was first rejected from the App Store for use of an "Apple trademark image", the Google Maps icon. The reason this bothered me so much was because the icon was already in the app, larger even, in 2 previous releases, and it wasn't rejected for it. Further, with iPhone OS 3.0's new MapKit, there wasn't guidance I could find on how to graphically refer to an in-app map, no UIKit standard icon to use. There still isn't  sample code on the iPhone dev center to even give you a clue on how to use MapKit, functional and UI wise. For the rejection,  kindly referred me to the relevant section of the developer agreement in the rejection email which is pretty clear that I was in the wrong.

So the night after son 2.0 was born, I pulled out the laptop in the hospital and get to work. Replacing the icon with another, simple, finding an icon was the hard part. I first started seeing if I could mimic , take a Google Maps view of my home neigborhood, then clean it up and make it an icon. Ultimately, two things stymied me. The skills and technique to make a similar icon, and time. Maybe I could eventually get there graphically, but with a new baby and many sleepless nights staring me in the face, buying an icon was the better, quicker move. So I googled around, and finally found eddit's nice iPhone UI Icon Set for $69. What I wanted was something that called back to the Google Maps icon without being that icon poorly done. As you can see in the bottom left screenshot, I used the street sign icon from eddit's set.

Change made and I submitted the new binary to Apple for review. I thought 1.3 was finally going to ship, but sadly it turns out I was wrong again.

iTimeZone 1.3 - 2nd Rejection
The image on the left was sent by  in the second rejection, 12 days after I submitted 1.3 again with the new icon. This rejection is on me. I made the call to try and ship without alerting the user of no or spotty network connectivity. I rationalized this decision by saying everyone knows Google Maps requires an Internet connection. It could easily wait, but  disagreed, and they were right.

I was willing to sacrifice the user experience until I got more time to digest the Reachability sample code and incorporate it into iTimeZone. Adding the alert was one of the few things I had on the 1.3.1 TODO list. With just about no desire to open Xcode during son 2.0 first month in the world, I didn't start work on it until 15 days after I got the rejection. In total it took me between 20-25 hours of development & testing with the sample code to implement this. Dropping the sample code in iTimeZone wasn't a big deal, but testing it and inducing dropped network connections during Map loading, then resolving my own bugs, as usual, took time. I also implemented KVO for the first time and reduced memory consumption by reusing an NSNumberFormatter that I was creating on every cell draw. It feels like I have taken another step on the road to being a complete Cocoa developer.

Positives changes to iTimeZone aside, the only thing I wish  did different was reject iTimeZone the first time with both issues. I can't complain too much, the review process improved the user experience of iTimeZone 1.3. I submitted the latest build on Thursday October 8th, so I'll see how long review takes this time. Hopefully 1.3 finally hits the App Store before Halloween. If not, I will of course log the ordeal here.

Update
iTimeZone 1.3 has been released to the App Store! It can be downloaded through the App Store.

iTimeZone App Store Approved/Rejected History

  1. 1.0 Approved ☺
  2. 1.1 Approved ☺
  3. 1.2 REJECTED 1 time - ☺  Thankfully caught a bug
  4. 1.3 REJECTED 2 times - ☹☹
    1.  told me to remove the Google Maps icon in the app since 1.1 for "copyright violations"
    2.  told me after removed the Google Maps icon & resubmitting that the in-app Google Map for OS 3.0 users wasn't displaying any error message without network connection.

Friday, October 02, 2009

UITableViewController and UIViewController don't handle observeValueForKeyPath:

In an iPhone 2.0 or greater app if you are seeing this error:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: ': An -observeValueForKeyPath:ofObject:change:context: message was received but not handled.

It might be because in YourClass's observeValueForKeyPath: method you are doing this:

// be sure to call the super implementation
// if the superclass implements it
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];

This could be because you saw in the Key-Value Observing Programming Guide those exact lines in the sample and didn't give it much thought.

If your base class doesn't implement observeValueForKeyPath:, like UITableViewController or UIViewController didn't, and you just assumed that the base class must even if it did nothing, like I did, then the above exception gets thrown.

Tuesday, September 08, 2009

Blocks in Snow Leopard Sound Awesome

John Siracusa's review of Snow Leopard is the definitive one. Of you
haven't read it, you should: http://arstechnica.com/apple/reviews/2009/08/mac-os-x-10-6.ars

The entire section called "Internals Ahead" really got me excited. I
felt the developer gravitational pull of new tech with Snow Leopard's
Grand Central Dispatch & Blocks as well a Clang built in to Xcode 3.2.

I never really understood anonymous functions before reading John's
stuff. I wouldn't say I oils apply this technique right now if called
to, but I really want to understand it.

I really want to start an OS X development project now just to use and
learn this stuff. Just need an idea...

Sunday, July 12, 2009

Happy 1 Year Anniversary iTimeZone!

iTimeZone has had a great year. Version 1.3 is going to be released, if Apple cooperates, by the end of July. Since being released on July 10, 2008 along with the iTunes App Store, all my expectations have been exceeded for the product. Here are some of the milestones:

To celebrate iTimeZone's 1 year anniversary, here are promo codes to get a free copy:

  • LLEW9FXNHWXF
  • NXRXXHYE49M4
  • RPWP997MKXA3
  • TA9W9JLT3K6N
  • N3PAPRLE36FW

Monday, April 27, 2009

A Letter To Senator Collins of Maine on Pandemic Flu Preparation

The Nation with Know-Nothings Fought Pandemic Preparedness reminded me that Senator Susan Collins of Maine (R) trumpeted that she took the lead role in stripping the Economic Stimulus bill of pandemic flu preparation. Comically and tragically, nature has "conspired" to make Republican complaints about preparing for extreme events, e.g. Bobby Jindal against volcano monitoring and now Susan Collins against pandemic flu preparation, look even more backward than before these events happened.

So I wrote Senator Collins this letter and I encourage you to do the same:

Mrs Collins,

Since you were the primary proponent in the Senate of stripping the Economic Stimulus bill of money for pandemic flu preparation, now that governments all over the world are actually confronting a possible pandemic flu, I want to know if you feel good about your irresponsible actions in order to play politics? My wife and I considered today whether I should commute to my job in NYC as a precaution against any possible outbreak, it doesn't take long to consider the massive financial impact a full blown outbreak would have on the economy if everyone stayed home because of potentially contracting a fatal disease like this swine flu.

I expect you to denounce your former actions and get ahead of this issue by introducing the pandemic flu portion of the Economic Stimulus bill as it's own legislation now that you can see first hand what could happen if a flu pandemic hits near panic proportions. Just look at the footage from Mexico of soccer games, the countries most popular sport, played in an empty stadium, and office buildings empty, and apply that to the US. Thankfully, it looks like DHS and the CDC are ahead of the swine flu in the US, but the next time we might not be as prepared or able to respond in an appropriate manor because those agencies don't have the funds to meat the threat.

Sunday, March 22, 2009

Silverlight 3 a tipping point, Mac development available

Nearly two years ago I asked Where are the Silverlight developer tools for Mac?. Well we have the answer, there is a plugin for Eclipse called eclipes4SL which allows Mac developers to write Silverlight applications.

Inflection Point
I am not vouching for these tools, I have installed them, but I don't know enough about the specifics of Silverlight (yet...) to make a claim either way, but the world has changed. With development tools in any form on the Mac, Silverlight as a long term cross-platform solution just became real.

Silverlight 3
I don't know if the Mac dev tools were out before Silverlight 3 was announced on Wed. March 18 at MIX09, but I found out about them through Tim Heuer's guide to Silverlight 3 features. Silverlight 3 addresses some more of my concerns for the environment. Native H.264 video/ AAC audio is included. Silverlight 3 applications can now run outside the browser, probably to compete with Adobe Air.

Evaluation Time
I recently started thinking about using Silverlight for a redesign of one of the day jobs primary .NET apps. The Silverlight 3 announcements, and I haven't even begun to process the actual development enhancements, make evaluating Silverlight an urgent day job task. The mental calculus also got a lot easier between Adobe Air and Silverlight with the alarming resource usage of a couple popular Adobe Air apps, Twhirl and TweetDeck, documented in this tweet and this one.

Monday, March 16, 2009

App Store Review System Still Broken

I have been extremely frustrated by the App Store review system. At first anyone could post anything they wanted about your app, whether they bought it or not. In September 2008, Apple stopped accepting reviews for apps that the reviewer hadn't bought. Good right, but then Apple didn't actually go back and remove old reviews recorded without owning the app until late February 2009! Great, another baby step toward a more fair system to app producers and consumers. But it still wasn't fair to app producers for a number of reasons:
  1. Apps were getting rated on deletes from devices. No way to log a rating without deleting.
  2. App rating distribution, meaning how many times your app had been rated a particular star level, weren't visible
  3. Reviews and ratings had no visible date associated with them
  4. Reviews and ratings had no visible app version associated with them
  5. The relationship between reviews and ratings was unclear
iTimeZone All Ratings
What Changed March 10, 2009 - March 13, 2009?
Apple slowly trickled out an overhaul of the review system for the App Store. It has been very strange how this has been done. Bits of functionality here, more there. It seems by March 13th, 2009 (Friday the 13th, must be an omen) Apple started breaking out the distribution of rating scores by stars. In the screenshot on the left, current version means iTimeZone 1.2.1
These changes made great strides forward, answering at first glance all of my bullet points above. Sadly, I have to conclude Apple still has a slight miss here.
What's Still Wrong?
Here's why based on my analysis of the data for iTimeZone:
  • Average Customer Ratings do not include Customer Reviews. The only way the math works, that Average rating for all versions is 3 stars, is if you exclude customer reviews. A 3 star rating has to at least fall between 3.0 and 3.25. Since we don't know Apple's rounding policy, and we know Apple does half-stars, it is entirely possible anything between 3.0 and 3.49 is a 3 star rating. Luckily for this exercise, the average of iTimeZone's customer reviews is 4.26. That happens to be just enough to make the combing ratings and review score 3.5, yet iTunes only shows a 3 start average rating for all versions. Thus, the aggregate rating can't include customer reviews, only ratings. So Customer Ratings are averaged for the current version, and across all versions, but customer reviews are not, they are only listed. If a customer took the time to write a review, surely that star score should be included in the ratings? That is just not intuitive at all. I would have to recommend at this point that if you write a review, you also leave a rating.
  • Tracking Reviews/Ratings by Version is too literal. The accepted convention for version numbers, and the one I am using follows Apple's generic versioning scheme. Major.Minor.Revision, X.Y.Z, 10.5.6, 1.2.1. Major means a platform release, minor means a feature release, revision means changes/fixes to existing features. Mac and iPhone apps are thought of feature stable when X.Y remains the same. This is not controversial, except the App Store is now boxing reviews by X.Y.Z. So reviews for version 1.2 of iTimeZone mean the current version doesn't have any reviews because the current version is 1.2.1, and there are no written reviews yet for that version. Current version literally means the one on sale, there is no intelligence behind it. This is going to result in developers being reluctant to release fixes quickly, and instead only take the version review reset hit when they are going to release features. The other possibility is gaming the version system so that the app gets updated, but the version number doesn't change so reviews don't get reset. I haven't investigated this thoroughly yet, but I am sure it has already crossed more than my mind. Sure, developers could try and game the review by version system the way I propose, but if Apple had clear rules posted on versioning and then bounced apps during review for adding features without upping the X.Y version, developers would get the hint.
But you don't take my word for it, download the spreadsheet in your format of choice and look at or mess with the data:

One More Thing..
I have real trouble drawing conclusions from data like this. Either people really like/love the app, or they just hate it. There is no middle ground. Even if you look at the ratings for all versions, the app is top heavy with 4 and 5 star ratings, but 1 stars are just as frequent as 2 and 3 star ratings. If you rate an app 1 star, you are saying it just flat out sucks, no mincing words. I would only give an app 1 star if it were a total failure at what it was doing. iTimeZone is not that. You may not like how some things are implemented, think things could be done better, but its not an out and out failure by any stretch. I haven't received any feedback from anyone that harsh, so if you think iTimeZone sucks, tell me why at tangerineelement.support at gmail.com. That said, 1 star ratings seem frequent enough I wonder if there isn't a systemic problem where users feel they have to go nuclear on an app.

Conclusion
I can only hope Apple further tweaks the system and fixes the problems I have highlighted. Given that it took 8 months from App Store launch to get the current changes pushed through and the amount of work they surely have ahead of them with iPhone OS 3.0, I am not very hopeful.

Update
Since I wrote the bulk of this, iTimeZone has received 2 more customer ratings both 5 stars. So the current version has a 3.5, yeah for me, but it doesn't change the unintuitive disconnection between Ratings and Reviews.

Friday, March 13, 2009

Recommended Custom Keyboard Shortcuts in Mac OS X

It all started by listening to the Customizing Keyboard Shortcuts episode of the Apple Quick Tips podcast. In Mac OS X, you can do all sorts of keyboard customization, assigning hot keys to any menus you see, with a built-in System Preference panel. I have been using OS X for over 5 years now, and it was only since Feb 2, 2009 that I actually started using this powerhouse feature. I know there are power OS X users out there that, like me, didn't know what you could do with this funtionality, because they have whined on Twitter that something should have a keyboard shortcut. But you can do that yourself!

This is where you start

Click on the Keyboard Shortcuts tab:

You can start adding your own shortcuts now by clicking the + button, but let me show you the ones I recommend:

ApplicationMenu TitleShortcut 
All ApplicationsSystem Prefernces...CMD-SHIFT-,⇧⌘,
SafariMerge All WindowsCMD-SHIFT-M⇧⌘M
Microsoft WordSave As...CMD-SHIFT-S⇧⌘S
Microsoft ExcelSave As...CMD-SHIFT-S⇧⌘S
PreviewAdjust Size...CMD-OPTION-T⌥⌘T

Notes On Creating Your Own

  • Custom Keyboard Shortcuts only work on menu titles.
  • The menu titles you enter in system preferences have to match exactly what is in the menu, including the ... on Save As... for example.

Fixing A Bad Default Finder Shortcut
There is one default shortcut choice in OS X that I find either a poor choice or just outright bad design. In the system wide Save dialog box, ⌘D goes to the Desktop. This is great for quickly saving something. The catch is that in the Finder, ⌘D doesn't bring you to the Desktop, it Duplicates whatever is selected. By default, to get to the Desktop in the Finder, you type ⇧⌘D. I can't stand this mismatch in keyboard shortcuts, and now I know how to change it. There is a catch though. The Finder does not appear to be an application that the Keyboard & Mouse System Preference wants you to find. This is how you can.

  1. After clicking +, scroll to the bottom of the Applications list and pick Other...
  2. Navigate to Macintosh HD/System/Library/CoreServices/ (or whatever you have named the main hard drive)
  3. Double-click on Finder
  4. For the Duplicate menu title type ⇧⌘D and click Add.
  5. Click + again, then for the Desktop menu title type ⌘D and click Add.

Now you should have the Finder configured to match the Save dialog, and your Finder keyboard shortcuts should look like this: