Wednesday, December 23, 2009

World of WarCraft: Ninja Raiders

Jeff Atwood tweeted about this YouTube music video WarCraft Ninja Raiders sung to Beyonce's Single Ladies and I just had to post it since I am back in the WoW habit and had minimized the game to read some stuff before continuing the grind.

12 Days of Promo Codes for iTimeZone for iPhone/iPod touch

iTimeZoneIn the spirit of the holidays and giving gifts, Tangerine Element has started the 12 Days of Promo Codes for iTimeZone, only on the App Store. To kickoff the promotion, I've tweeted the first batch of promo codes already and here are the same reposted below. For the next 11 days, I will blog another batch of promo codes. This promotion is only valid for users of the U.S. App Store.

ELYXAR4WMYKJ
LN646YJEAPYN
LA636LYHAA96
K4RHF947LF63
NR9H3PRN3EYK

History
Every release of iTimeZone brings with it new Promo Codes to give away free copies of paid applications to users of the U.S. App Store. At Tangerine Element, I try to use all the promo codes available by giving them away. iTimeZone 1.3.1 is the current version on the store, and I have been working on a bug fix release, 1.3.2, for submission to the App Store after the holidays. Since the promo codes available will reset soon, and I hadn't used any codes for 1.3.1, seemed like a good time to set them all free.

Friday, December 11, 2009

Used MacBook for sale on eBay

If you are looking for a used MacBook, I posted one for sale on eBay last night.

Check the listing for details, but its 2 year 10 month old with AppleCare until Feb 2010 in excellent condition. My wife used it mostly for Web browsing and spreadsheet crunching, with the occasional viewing of Twilight.

Update
Took 2 tries and one deadbeat buyer, but the laptop was finally sold.

Monday, December 07, 2009

Retro Review - Star Trek: Nemesis

Or as I like to think of it, the one that nearly sunk the franchise. Why watch it again? I didn't intend to make this a series after my recent Star Trek: First Contact review. I was at the library with my son and saw this on the DVD shelf and thought: "He can watch this. It can't be as bad as I remember it". Wow was I wrong. I still don't think it's as bad as Star Trek: Generations, but it's close. What went wrong?

It's so cheap it affects the plot
Of course this has happened before in Star Trek. Until J.J. Abrahms Star Trek, Trek movies were always made as cheaply as they could be. Extensive set reuse across all shows, reuse of effects (e.g. Klingon Bird of Prey explosion from both Star Trek VI & VII), and Starfleet only having the exact number of ship configurations for a long time that had made movie appearances. What happened in Nemesis?

Geordi is a parody of an engineer. Georgi never leaves the bridge. It's obvious the producers never wanted film anything more in Engineering once the shield (finally?) is put on the warp core. I guess extras cost to much money. There is one scene near the end of the movie that is laughably bad. The Enterprise takes another massive shot from the Romulan ship Scimitar, and transporters go offline. Georgi taps a few buttons on his screen and then gives up. He gives up. If this were Georgi from any previous Star Trek movie, or hell Scotty, engineer's don't give up, they keep trying stuff, even crazy stuff, until they save the ship.

Horrendously bad special effects. On the Scimitar, the hallways are wide for the couple phaser fights in them, but it's clear there are only one or two corridors. There is a hallway extension painting that is huge, but it's so obvious when watching the film "hey, there's a painting at the end of that hallway" it completely takes you out of the film. Also, the Romulan super weapon (I can't spell it) effect is bad CGI. The external CGI shot of the Romulan senate is also cheap CGI, and it's used twice.

Romulan Super Weapon on the Bridge?!? It just makes no sense at all that the Romulan Super Weapon power plant would be at the top of the bridge. It's crazy that isn't in engineering. Cearly the producer's just didn't want to design and build a Romulan engineering set. Obviously, showing engineering on any ship was off limits on this film, you have to show engine FX then.

Bad Music
Not all the music is bad, there is the appropriate use of the Star Trek theme from Star Trek The Motion Picture. Unbelievable, this is Jerry Goldsmith. What went wrong here? It pretty much comes down to much sythensizer that says "old tyme science fiction movie" and the "crazy strings" when the Romulans really go off the rails. This double-whammy of bad music is right in the opening Romulan senate scene, and I start to giggle as soon as I hear it.

Slow Moving Plot and Bad Choices
Shinzon and Picard talk to much about themselves when we everyone in the audience knows Picard and Shinzon are nothing alike in action. But that is only the least of the offenses

Boring Super Weapon. There is absolutely no tension behind what the Romulan Super Weapon can do, you are shown in the first scene. You know somebody called the Remans, have taken over. But you don't know who they are, all you know is they have a super weapon. The movie would have been much better to open on Riker and Troi's wedding.

How did Shinzon get his hands on beta Data? I could easily be mistaken, but I don't remember an explanation of where B4 came from, only that Shinzon got his hands on one and planted it in Death Valley, I mean a planet close to the neutral zone. How come Data has never heard of him before (I kill me with these puns)?

When did the Enterprise crew get lobotomized? Continuing on from the previous point, didn't anyone think that the sudden discovery of a beta Data near the Romulan Neutral Zone, on the way to a meeting with the Romulans, was a tad coincidental? How does Shinzon know the Enterprise is constantly scanning for positronic signals? How much radiation is Data emitting for a ship thousands of light years away to detect? But it gets worse.

Does no one on the Enterprise realize that while flying back to rendezvous with a fleet they are going to lose communications in a rift? Data, Picard, Georgi, hell even a red shirt navigator should have told you that. The flagship crew shouldn't be surprised they have plotted themselves into a trap!

Special Mention: Eyelight on Troi while she telepathically "zero's in" on the Viceroy. The whole rape of Troi could have been a powerful moment, the first moment in the bedroom mostly was, but then they ruin it by putting the eyelight on Troi while she tries to correlate the Scimitar's position by telepathy. Further, has no ever thought "Hey Troi, can't you read the emotions of an enemy ship cloaked?". I know there were TV show episodes where she read the intentions of aliens on other ships, does the cloak break this? How come no one asks her?

Nemesis == 80% Wrath of Khan
No mincing words (see I can do it too), Nemesis is almost a direct rip-off of Wrath of Khan. The Romulan Super Weapon is the genesis device, right down to the build up to detention and destruction of all life. The Scimitar and the Enterprise duke it out in a nebula rift. The Enterprise is heavily damaged. The villain has a personal vendetta against the captain. SpockData dies to save the Enterprise, but not before leaving his memories behind. It's so obvious, John Logan should have been sent to the principal's office for cheating.

Conclusion
I could go on, but this is enough to get Nemesis out of my head after enduring it again. In a way I am thankful this brought an end to the mostly ok, but not exceptional Next Generation movie line. It made room for the total reinvention of Star Trek with J.J. Abrahms, or did it? Perhaps another review is due...

3.5 Inner Exceptions

Sunday, December 06, 2009

What took so long for Google Public DNS?

In 2008 when PayPal was complaining about Safari, I agreed with Jeremiah that the best solution to stop phishing attacks was at the infrastructure level, with DNS. OpenDNS seemed to be the only game in town that was performance optimized and had built-in phishing filtering.

In 2009 Apple released Safari 3.2 with anti-phishing filtering. I revealed I had switched to OpenDNS and had been using it for 3 months. That continued until about 3 months ago when I mistyped some domain name in Safari and saw one of those OpenDNS branded error page with search results and ads. I knew they were going to do this, but hadn't seen it before and was annoyed when it happened. So I switched back to the DNS servers that Comcast assigns via DHCP, but performance was abysmal. I hadn't decided yet if I was going back to OpenDNS or not, but then Google launched free Public DNS.

What took so long?
I'm really struggling to come up with a reason Google hadn't already launched Public DNS. Of all the products that Google has released as public betas, capturing DNS traffic seems like that most natural way to make search smarter. Even if a customer isn't using Google search, their search could still be getting smarter through intelligence on the DNS stream. Linksys et all will soon be putting Powered by [VENDOR] DNS stickers on them to monetize their default DNS. Now that Google's done it, how long before Microsoft Public DNS is launched? Or do they buy OpenDNS to get into the game quick. DNS Wars 1.0 has just begun. Amazing that such a "low-level" networking service, around since the dawn of Internet time, stagnant for so long, will now be a hotbed of competition and innovation.

Why did Google do this?
The main reason is that excellent DNS helps Google make more money. Google doesn't have to own DNS to get some benefits, but by guaranteeing and controlling quality DNS, here's what Google gets:

  • Fast Performance
    • Chrome OS only runs Web applications. Slow DNS means slow apps. As Jason Kottke reminded us, Google knows that as little as a .5 sec delay in page load speeds means a traffic drop of 20%.
  • Request Info Aggregation and Analysis
    • See the section on privacy
  • Name Resolution Security
    • Implementing it's own DNS allows Google to hook into their existing anti-phishing lists.
    • This guarantees below the application layer interception of malicious sites that people might accidentally be requesting. If all your apps are Web apps, this goes a long way to eliminating Web app malware.

More on performance
I ran 100,000 pings to Google's primary public DNS server, 8.8.8.8, and 100,000 pings to OpenDNS' primary public DNS server, 208.67.222.222, and these where the response times (all in milliseconds):

serverminavgmaxstddev
Google Public DNS16.82327.5783901.46542.118
OpenDNS10.23819.2523895.15843.579

Surprisingly, OpenDNS performs better than Google's Public DNS. If anyone would be able to create the fastest DNS, everyone would have put money on Google winning this. This does change the decision making process on which DNS to use. Use OpenDNS and get the fastest performance today, but accept redirection on error to an ad-laden page or go with Google for slower performance but no redirection (today) on error. It's a tough call, I may switch back to OpenDNS.

More on privacy concerns
First thing I thought when I read Rentzsch's blog post headline was that this was another opportunity for GOOG to gather information about you. Of course, Rentzsch links out to another blogger because this is probably the first thought on anyone's mind whenever Google launches anything. Then I read their privacy policy and it's reasonable. Of course Google is going to anonymize and combine all the information now flowing their way. But they are not going to route queries for unknown servers to Google Search, they let the browser take care of that. This is very smart because you can easily see how this could turn into a future antitrust concern. That is the power of owning a users' DNS, you can send people to wherever you want. But until Google does something evil, I have switched to their servers.

Conclusion
You have to admire the response from OpenDNS founder David Ulevitch about Google's entry in the market. And really, why should be be scared? OpenDNS will still be able to sell their service to companies that are Google-phobic. They have also just become a prime acquisition target of at least Microsoft, and possible Apple. Faster and safer DNS improves everyone's Internet experience, whether you believe in Web-only apps or connected device apps, everyone wins.

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...