Saturday, December 18, 2010

How to fix Xcode build error 'Directroy "/XYX/" following -F not found'

I started working on iTimeZone HD, the iPad release, for real today and something pretty weird happened.

I created a new target as a stand alone iPad application based on my current iTimeZone iPhone target. Once I built, first thing I see is this message:

warning: directory '"Macintosh HD/Users/YourName/Code/Project"' following -F not found

This doesn't happen on the iPhone target, and it took me a while to figure out what was going on. Here's what you do to get rid of this annoying message:

  1. Get Info on your Target (e.g. iTimeZone HD)
  2. Click on the Build tab
  3. In the Configuration drop down, select All Configurations
  4. In the search box enter Framework
  5. You should see Framework Search Paths in the results. Click on it.
  6. Press delete
  7. Close the info window and rebuild

You're warning should now be gone.

Saturday, December 04, 2010

Best Way to Implement Private Methods in Objective-C

Since the iPhone SDK came out, I've been using the following syntax in my Objective-C implementation file (the .m) to implement private methods:

@interface ClassName (Private) - (void)privateMethod; @end

@implementation ClassName - (void)privateMethod { //keep this private }
@end

This style just creates a Category for your class that's not in the header, so other classes can't read it. Turns out there was an even better way introduced in the Objective-C 2.0 spec using Extensions, which are like anonymous categories, but the improvement is the implementation must exist in the main implementation block for the class. Here's the example re-written:

@interface ClassName () - (void)privateMethod; @end

@implementation ClassName - (void)privateMethod { //keep this private } @end

Not much has changed, instead of decorating your category with a name, (Private), you just put empty parenthesis, ().

Once I switched over the iTimeZone code base, realized I was carrying some dead weight method declarations, so win!

Here's Apple's documentation.

Update
Check out bbum's comment for additional syntactical sweetness to make private/public properties with property redeclaration.

Thursday, November 11, 2010

Software Development Paradox: The Closer You Are To Zero Bugs The Less You Want To Test

iTimeZone 1.4 reached zero known bugs earlier today and I feel some paralysis. Part of me doesn't want to test anymore because then I will likely find bugs I didn't know about, putting zero known bugs at risk! The other part of me is screaming "Run the fraking test scripts and ship already!"

So yeah, writing this was a stalling tactic, but it made me feel like I was back in control of why I was feeling some paralysis. If nothing else, at least I got to revel in the glory of zero known bugs for a few hours.

Wednesday, November 10, 2010

iTimeZone 1.4 Coming Soon

I've been working on iTimeZone 1.4 iPhone and iPod touch for a long time. iTimeZone 1.3.5 shipped in May 2010, which ended a serious of releases containing incremental bug fix and feature adjustments. I had originally intended to finish an iPad version of iTimeZone for release in early summer, but it got totally derailed. Here's what's coming in iTimeZone 1.4 and what took so long.

iPhone 4 Retina Display Graphics
As iOS developers quickly discovered, the increase over original iPhone - 3GS in required pixels for images means a redo of all assets. I certainly didn't have enough foresight to create all my image assets @2X the needed size, some probably did. iTimeZone 1.4 won't be the last app to get Retina Display images, but in hindsight, should have got the images done and shipped 1.3.6 until holding them until now.

iOS 4 Multitasking
No big deal, it's just a simple recompile right? Yes and no. Yes, you get multitasking enabled in your app for "free" once you recompiled with a 4.x SDK. But you still had to handle those state changes gracefully, for example dumping unnecessary memory caches to be a good citizen. Also, apps that use the Settings app have to handle settings changes once an app is brought out of sleep and made active. Sounds easy, but it took more time to get right than I would have thought because changing the way your app starts exposes all kinds of bugs you never dreamed of.

Better Location Detection
iTimeZone 1.3 added location detection so users could look up cities based on where they were. In my testing before that release, it worked really well. A developers famous last words. Through user feedback post-release and subsequent testing, I realized that the algorithm I used was just not working well enough in large cities. This was a case of App Store reviews being fair, for some it wasn't working and I was getting "1 starred" for it, and rightly so.

I don't know how tough of a problem correlating location data to a database of cities is for other apps or developers, but this has been by far the hardest feature to get to "It Just Works". This feature alone has taken months of development, and caused numerous cascading refactors. The biggest refactor was for the database controller code. I had wanted to clean up this technical debt for other upcoming features, but it burned a lot of time.

There is more testing to be done but in iTimeZone 1.4, location detection is much much better. If more testing confirms, it might even be "It Just Works" good using a combination refinements to the algorithm I used in 1.3 and a reverse geocoding service. This was my first web service call in iOS, so a lot of learning on how to do that right as well. This happens in parallel so as soon as the app gets location info from the device, the user should see results very fast, and should never be left with "Couldn't determine location" unless the device doesn't give it to the app.

This is also the main culprit for iTimeZone for iPad not shipping, I didn't want to ship another big release without fixing this feature.

70,000 More Cities, Fastest Searches Ever
Users always ask for more cities, even the tinniest cities, so I want to give them that. iTimeZone 1.4 is using the biggest city database my existing data provider freely offers. When you increase the size of your data by 4.5X, query performance usually goes down. I saw a decrease in search times putting the new database in 1.3, not even making some of the other changes I wanted to for grouping results.

Grouping the results really slowed things down, and I hate waiting for a device to give me data. Since I was partially refactoring the database controller for the location querying requirements, I just decided to go the whole way to get the maximum parallelism I could using modern OS structures, NSOperationQueue and NSOperation, instead of a query thread with critical section locks in numerous methods. On iPhone 4 and iPhone 3GS with iOS 4.x, a queries first result returns in 1-2 seconds, with lower importance results streaming in a little later.

User Experience Improvements
All of the above are certainly UX improvements, but this part is purely about app flow. In iTimeZone 1.3, when you first opened the app, you immediately got herded into the "Find Current City" screen. If location detection didn't work for you, you had a really bad experience. Now, the app loads into the main screen with some simple directions for the user on what to do. There are a couple other places this happens as well, I think by going just a little slower, the app feels better because users understand the spatial model of the app as soon as the open it. The previous approach could be categorized as "why are you prepared, just go".

The other feature I am constantly asked about is how to change the current city. For a long list of releases, if the user double-tapped any city in their list, it would swap places with the current city. There were also specific buttons in a couple that could be tapped on, but not on the main screen. Problem with a gesture like that, users have to know it's there. So I added a tip on the bottom of the user's city list table telling them how to change the current city. I will definitely be tweaking this again in upcoming releases, maybe implement something on swipe as well, but I hope this makes it more obvious.

Pruning The Source
For the source code to remain healthy, some things had to be removed. Upgrading from the 2.5 year old iTimeZone 1.0 user city storage format was dropped. This slowed every app load down, and highly likely no one left in the world is on iTimeZone 1.0.

iTimeZone 1.4 will only support iOS 3.2 and higher, so long 3.1.3. I posted about SQLite versions in iOS the other day because the SQLite build on iOS 3.1.3 is just not working with one of my queries. Every other device I have & simulator with iOS 4.x works great. Don't think I'm going to revisit this, Apple has moved on, so am I.

What Didn't Make It?
iOS 4 for some reason dropped a lot of time zone abbreviation data iTimeZone was using. I'm going to add my own data set for this, including military time zone names, in iTimeZone for iPad 1.0 and iTimeZone for iPhone 1.4.1

What's Next?
A beta release to private testers in the next couple days, more testing, and then start putting the iPad version back together. I have multiple Subversion merges to look forward to.

Tuesday, November 09, 2010

SQLite Versions Correlated to iOS Versions

As part of developing and testing iTimeZone 1.4 (still in development), I ran into an issue that is only reproducible on iOS 3.1.3. I hadn't been paying attention to the version of SQLite that Apple has been shipping with iOS, but I gathered the info to try and see if that might be the cause of the bug I was seeing. Here it is for posterity:

iOS VersionSQLite Version
3.1.33.6.12
4.0.23.6.22
4.1.03.6.23.2
4.2.03.6.23.2

Wednesday, October 27, 2010

iOS & Mac App Betas Should Be Distributed by the App Store

David Chartier strongly suggested on Twitter that every iOS developer drop what they are doing and sign up for TestFlight, which allows beta testers to download builds of your app over the air.

I had heard of and registered for TestFlight a few weeks ago, but the apps in private beta and I haven't got passed the velvet rope.

After seeing the FaceTime for Mac registration process, it hit me that signing up beta testers should be that easy and handled by Apple. I mean no offense or disruption to the people at TestFlight who sound like they have done amazing work, but this is a job for the App Store itself.

The current Ad Hoc distribution system, which iOS developers use for beta testing, is a huge source of friction. To manage this process, developers have to:

  1. Educate users about what UUIDs are, how to get them, and send them in.
  2. Register a finite number of devices per year on the app store to use for Ad Hoc distribution.
  3. Manage the Ad Hoc provisioning profile to include beta tester devices.
  4. Keep the Ad Hoc profile current on all developer machines.
  5. Distribute the beta build, profile, and instructions on how to get the build into iTunes.
  6. Support strange or busted configurations for testers when things go wrong.
  7. Repeat 1-6 whenever a tester gets a new device or replaces an existing device.

If the App Store handled beta build distribution, here's how it would work:

  1. Tester gives developer their beta tester handle (think like Game Center)
  2. Developer adds that handle to the beta tester tab in iTunes Connect.
  3. Developer uploads beta builds to iTunes Connect.
  4. Tester is notified they've been asked to be a tester for App X. Tester agrees and gets builds through the App Store on device or in iTunes.

This proposal brings the following benefits:

  • Tester devices are managed by the App Store, developers never have to know many there are or when they change.
  • Registering testers for a developers app is a one time process. Of course, either the tester or developer could opt out.
  • Testers get installation and app updates just as they expect with production apps. (Beta's could be badged by the OS).
  • Developers could get crash logs and perhaps console output of their apps through iTunes Connect.
  • Apple could add a crash reporter panel to iOS that only appears to when a beta crashes.

The overall result though would be an increase in quality of apps since more builds would be tested by more people since the process gets so much easier. I hope something like this comes in iOS 5.

Monday, October 11, 2010

Note To Future Time Travelers, Bring Me To The Future!

David Frampton, maker of Chopper and Chopper 2 for iOS, tweeted that we live in crappy times because we're between earth and space exploration periods. I responded saying we don't have a problem because time travelers can just bring us to the future where all the space exploration goodness is.

I want to make it explicit. If somehow you are reading this in the future and we've figured out time travel, please come take me to the future so I can experience time and space travel for myself.

Thanks, Dave

P.S. Trust me, I am totally ready for space and time travel.

Friday, September 03, 2010

iTunes 10 Icon Needs Replacing and Here's a Great Candidate

Completely stunning that Apple shipped iTunes 10 with the icon pictured to the left. I don't know why they didn't finally kill the iTunes brand and replace it with something more consistent with all that iTunes does, but small victories, at least the CD is gone. But this icon is just a blue background, with a highlight behind the note, and that's it. Feels seriously amateur, like it was whipped up in an hour or two without much thought to it, just sloppy branding.
Thank Twitter and Dan Benjamin for tweeting this link which has an awesome iTunes 10 desktop icon replacement that uses the visual identity Apple has already established with the iTunes icons on iPhone, iPod touch, and iPad. I won't spoil it for you by posting the image here, just click this link for the iTuned 10 icon replacement you need but Apple doesn't think you deserve!

Saturday, July 17, 2010

The Real Lesson for Apple over the iPhone 4 Antenna Issue

The July 16 iPhone 4 Special Press Conference was an interesting affair. If you haven't watched the video or read a live blog, you need to. Also check out Apple's site on smartphone antenna performance.

The Real Lesson
Let's state for the sake of argument the following:

  • All smartphone's have at least 1 spot on then where a wrap-around hand hold can attenuate the signal
  • iPhone 4 is the only smartphone that has a permanent bullseye on its weak spot
  • The ability to attenuate any smartphone is due to a number of variables including:
    • Hands wetness/dryness
    • Position relative to cell tower, i.e. is your body between smartphone and tower
    • Signal strength algorithm is non-standard between mobile OSes
    • Build quality, aka fit and finish, of individual units.
You may or may not be able to attenuate your phone at any given time using a death grip due to the interaction of all the above (and likely more) variables. I only today after owning an iPhone 3GS for over a year learned how to attenuate the device at will when holding it bare. I can't replicate this at work in NYC so far. In a case, I can't attenuate anywhere.

The conclusion seems obvious: signal attenuation due to hand position is a mobile industry open secret.

Apple, re-emergent in the last decade as a tech powerhouse, is the seeming antithesis of nearly all other consumer electronic and software companies. Apple doesn't settle for the good enough solution, they go for the best within their constraints and look good doing it. That's their MO, it's their DNA. The perception that Apple is only as good as the competition would be a company and brand damaging situation. They set themselves up, and users hold them to, the highest possible standards with their products. You tend to do that when words like magical and revolutionary are being thrown around. Except this time, Apple accepted a trade-off that signal attenuation performance was good enough.

Apple listened to its antenna engineers, surely some of the smartest folks on the planet. I'm betting they said signal attenuation performance comparable to competitive smartphones was acceptable, much better could not currently be achieved. You could think of this as the "but everyone's doing it" defense we all at one time as children use, but that doesn't make it right. Remember, putting the antenna inside the iPhone 3GS does not eliminate attenuation, only an electrically insulated material can do that, like rubber, latex, or plastic, hence the free bumper offer for iPhone 4 buyers. So Apple signed off on iPhone 4 design because in they're testing, the iPhone 4 as other's have reported has better reception in weak signal areas, no doubt due to its new external antenna design.

Once the story broke that iPhone 4 could be attenuated and the reproduction steps were easy, due to the visible gap, the eyeball whore media ran the story into the ground. Few "news organizations" were doing any real scientific reporting (AnandTech was a notable exception, within their limits) on this being an industry wide problem, they just smelled blood in the water, on a tech titan.

This is where Apple has their Microsoft moment, not specifically a Vista moment, but an "attack the winner" moment characterized by negative poorly researched hit pieces that only come when you are the alpha dog, or very close to it, which Microsoft has endured for ages. The lesson from this incident should be sobering: The sharks are going to come for Apple now whenever the tinniest drop of blood is smelled in the water. Since they've set themselves up as the premier high quality consumer electronic and software company, they won't get a meter of wiggle room, especially on flagship products. As thorough as Apple seems to have been on testing iPhone 4, they have to raise their game. They shouldn't accept, and their users certainly don't, a scenario where Apple goes along with the status quo. That seems to be what happened with iPhone 4 signal attenuation performance. I don't think Apple as it currently is could survive to many more negative press drubbings like this without permanent damage. But hey if it all goes south, Apple could just put Steve Jobs shirtless on a horse and sent personalized twitter video replies instead of emails to turn the ship around. Or just hire Isiah Mustafa, the Old Spice guy!

Saturday, July 10, 2010

iTimeZone 2 Year Anniversary Sale For $0.99 & U.S. Promo Codes

iTimeZoneToday is the 2 year anniversary of the release ofiTimeZone for iPhone and iPod touch on the App Store. Of course, it runs on the iPad and iPhone 4, but versions optimized for those devices are still in the works.

To celebrate the anniversary, iTimeZone is going on sale for $0.99 through the weekend. Sale should kick off any minute now. I've already started the party with a batch of 5 U.S. promo codes through a twitter post, but here are 10 more:

96JJRRYTH67H
M4YNTFMNH3L4
3NJEFEWALM99
MENFJL7HTRLM
Y3KXFY3WP34N
ARMLFWY7PR43
94YML9RA4KA3
XLNHTEJRJWEP
W6LFFXW34TPA
WTKFR6NNJY3W

Thursday, June 24, 2010

iOS and Mac OS X Developers Should Get Early Hardware Pre-Order

It's iPhone 4 launch day and seeing an iOS developer unable to get a device seems like a problem Apple could easily solve. Here's my proposal: Paid Developer Program Members Pre-Order Early!

Why Should Apple Do This?
I'm sure of three things about most iOS and Mac OS X developers:

  1. They really want to develop for iOS or Mac OS X
  2. They are gadget junkies and need a yearly fix
  3. They feel exposed when shipped apps aren't testable on new devices and only the simulator ahead of device availability
Apple can easily solve all these problems and engender goodwill just by letting paid developer program members pre-order and receive new devices a little bit early.

The Plan
The buy-in into this scheme is the yearly paid developer program fee, currently US $99/year. Of course, you have to try and head off abuse right away, so there are some limits:

  1. Shipped 0 Apps. Limit 1 Pre-ordered Device
  2. Shipped 1 App. Limit 2 Pre-ordered Devices
  3. Shipped 2-5 Apps. Limit 4 - 10 Pre-ordered Devices
  4. Shipped 6+ Apps. Limit 15 Pre-ordered Devices
It's almost exactly a 1 app = 2 phones algorithm, but you have to cap the more prolific developers from sucking up tons of inventory.

Using this benefit would have to guarantee receipt of pre-ordered devices at least 1 day earlier than the general public.

Of course the benefit could be abused, but Apple could have some significant penalties in place, like developer program revocation or elimination of the benefit for people found to be abusing the system e.g. buying and eBaying devices. That kind of penalty should be in place from the start. Any further device pre-ordering limit complexity, like pre-order amounts based on how recent app updates were published, I would avoid when the benefit was first offered.

More Upside, No Downside
This plan also gives bloggers or other smaller reporting organizations a chance to get access to a device before public launch day so they can prepare or finish off their content and publish on launch day. This would be the 1 potential device pre-ordered group.

The other additional upside for Apple and whomever are their cellular partners (*cough* hint) is spreading pre-order load out across more time. If Apple keeps producing very compelling devices, the rush to pre-order only gets worse the more devices that are sold the last generation. This plan splits the initial demand up.

I can't think of any real downside, other then the probable small amount of work needed to setup this developer program benefit. Seems like the benefits to all parties more than outweighs the cost

Thursday, June 03, 2010

What The Matrix Trilogy Was About

Yes, an analysis on what The Matrix Trilogy was about is 7 years late. But like most computer geeks, The Matrix blew me away when it came out in 1999 and I still think about the series. The 4 year wait for The Matrix Reloaded & The Matrix Revolutions in 2003 was the most agonizing sequel wait since Return of the Jedi.

Like a lot of people, The Matrix trilogy felt like it declined in quality and satisfaction as the series went on. I've watched all three films numerous times, but I recently did so again since I ripped the Blu-ray's to H.264 720p HD. I wanted to finally put to rest for me what The Matrix Trilogy meant, to finally find peace, and I think I have.

What Did It All Mean
*** Spoilers ***
After watching the films again, google revealed these essays which nail probably 95% IMHO of what is going on in the story:
The Matrix: Reloaded, Explained
The Matrix: Revolutions, Explained

Short version: The Matrix Trilogy plot fundamentally becomes the plot of Star Trek: The Motion Picture. To recap, in Star Trek TMP, VGER returns to Earth seeking the creator. It doesn't know that humans are its creator, only that the creator can be found at Earth's coordinates. But VGER, which is a Voyager probe from the early 1970s, as a pure machine has learned all it can in the universe, and wonders if it can become anything more. VGERs theory is that it can evolve further by physically merging itself with its creator. For VGER to become whole, both the logical and the emotional must become one. Ultimately, VGER and a human merge into pure energy and "disappear" from the known universe.

The Matrix Trilogy ends up being about the same idea. Two separate halves, man and machine, unable to evolve without the other. When you strip away the religious symbolism, kung-fu, and special effects, the real plot is that simple. Of course, machines are in total control of the situation. They've attempted numerous times (read the essays for an exact count) to build a better Matrix, and finally succeeded with the iteration we find in the start of The Matrix. This keeps most humans under control, but they block that doesn't accept the simulation always break off, and then the machines kills the whole group and start over. The machines have decided at the end of the trilogy to try a new status quo, with humans that want to be out of the Matrix freely released, letting those in Zion live without interference, and learning from humans the ability to make choices. They achieve this goal by integrating "The One", guided by choices made for love, into "The Source", and thus starting a new age of man/machine evolution. To be even more clear, machines have decided they have stagnated without better understanding and learning from humans, their creators. Just like VGER.

Of course humans are still completely subjugated by the machines and could be destroyed at any time, but at least its better than where the trilogy started!

Does The Story Satisfy?
The Matrix was a very satisfying story because it showed humans rebelling against a heavily machined existence which for a lot of viewers feels like their real life. The end of The Matrix promises a super powered Neo freeing humans from the machines like he was.

So what happened in Reloaded and Revolutions? My going theory before discovering the essays was that Zion, really the whole "Real World" was another matrix. The essays call this the Liar Theory because for it to be true, nearly the entirety of the trilogy is a big none of this matters because the machines are totally in control of the situation, there is no hope for humanity.

Instead, we are left with a smidgeon of hope that humans could ever defeat or live peacefully with the machines. No great rebellion, no turning the tables on the machines, humans only survive this version of the Matrix because machines have decided its in their best interest to evolve as intelligences!

Sadly, even with a much better understanding of what the story actually was, it wasn't what I expected and I can't claim it satisfies. Now as for the movies as entertainment instead of philosophy, sadly the sequels also fail

From Innovator to Stagnator
When The Matrix was released, part of the rush the film delivered was not just the exiting story of rebellion against machines, but the innovative use of F/X to better explain the story. From bullet time, to slow motion kung-fu wire work, to a lot of audiences, it was a revelation.

What did we get in Reloaded & Revolutions that was truly new, not seen in The Matrix? Really not much. We saw the burly brawl, with some bad at the time CG actors, Neo flying in the best Superman impersonation that we haven't even seen that character deliver yet, and well, nothing more is coming to mind. There seems like so many things they could have done in the Matrix. Neo could have flown so fast time could have actually stopped. He could have teleported, how hard is that once you can control the system. In short, Neo shows no imagination about what he can do in the Matrix once he can fly. The people that are free but in the Matrix doing stuff could have shown more skill, become more enlightened, just by seeing Neo do all the crazyness he could do. Why not show bits of code coming off agents as Neo hits them? Why not explode them into code when he has won a fight? It just seemed like once you had control over the code, they could have kept ratcheting up his powers. I know though, that's not the story the Wachowski Brothers told or perhaps wanted to tell, but it would have been more satisfying because that is perhaps what was expected after the end of The Matrix. We certainly didn't expect to sit through a huge number of kung-fu battles that result in draws. Just felt like padding, and don't even get me started on the mechs shooting down sentinels for like 30 minutes.

Conclusion
Warts and all I still enjoy The Matrix Trilogy because of its complexity, there are some great special effects, and the ideas of man overthrowing machines they have lost control of. I just wish they told that story in the sequels instead of seeing humanity under the machines control, only slighty less of it.

Monday, May 24, 2010

What I Think Lost Was About

*** Spoilers Ahead ***

Update
Adding insult to injury, the dumbasses at ABC added the final images of the plane wreckage on the beach to the Lost finale so the "transition to the nightly news was softened". The wreckage wasn't actually part of the show. WTF? That changes everything and I really wanted to stop thinking about this POS. Giving up on my "it was all purgatory" theory, this semi-official Bad Robot post by a writer that worked on Lost has to be the best explanation of anything I've read on what happened on the show. It was still religious crap though.

Original Post

I only feel relief Lost is over. This is the second big TV series for me, Battlestar Galactica was the first, that appeared to be sci-fi but were really Trojan horses for religion. When Battlestar Galactica ended this way, I was so deeply invested in the show it crushed me. I was prepared to be disappointed in Lost, but after the show ended in the worst possible scenario, I am going to be extremely cautious about watching any long running serialized sci-fi show. If you're watching one of these shows right now, here's how you might spot one of these shapeshifters:

WARNING: If your "sci-fi" show runners start talking about how the show is about "the characters" when asked for answers to various unanswered plot holes, watch out, the answer to your plot questions might all be "god did it". Cancel your season pass, bittorrent searches, or get a refund from iTunes.

This is not to say that a sci-fi show needs to be able to scientifically explain everything shown on screen, their is a difference between magic and religion.

Magic > Religion
Magic in a science based show is not the same as religion. Magic are feats that are unexplainable with our current technology. For example, the communicator in Star Trek The Original Series I argue was magic for people that watched the show live. Viewers accepted it and the show never explained how it worked, no technobabble. Less than 20 years after the show, we had the functional equivalent.

A religious show is one that foists the dogma of a religious institution(s) on its viewers without calling them out by known names. If I knew what I was watching in Lost for sure before last nights finale, I would have turned it off long ago and never looked back. When you have to hide your religious propaganda for fear of losing viewers, it is not the same as magic as a plot device, and it borders on proselytizing.

Stargate SG-1: Science, Magic, Religion and Gods Done Right
By comparison, Stargate SG-1 treated the possibility of gods and associated ideas as alien species. Some were benevolent, and earth stories of myth were created by a technologically simple people to explain the wonders witnessed, e.g. teleportation. Other aliens abused their advanced technology to trick simple people into worshipping them, purely for the adulation or their own financial enrichment. These were the shows bad guys. That part of the show was great.

Which brings us back to what Lost was about
After perhaps season 2 or 3 of Lost, I suspected after reading numerous theory sites we were getting the old bait and switch. It looked like a sci-fi show, but its really about religion. Not even religion as a plot device, but the point of the whole show was to document a religious process. I continued watching because I do love a good mystery, and at least Lost provided that. After seeing the finale, if you are still confused about what the show was about, you have over-thought what you just saw. I could easily be wrong, but here's what I think happened on Lost:

A plane with a lot of people crashed on an island and died.

If you are an atheist like me, here's what happened after the plane crash:

The End.

If you are a christian, the explanation of what the show was has been hiding in plain site all along. Jack's father is Christian Shephard. More precisely, Jack's father is a christian shepherd. Here's what Lost meant:

Dead passengers were not ready to go to heaven, they went to purgatory, the island. This holding cell for sinners created tests to determine if they were going to heaven or hell. Like a dream, it won't all make sense. By the end of the series, everyone but Linus was ready to go to heaven.

That's it. I am not going to watch the show over again to try and convince myself there was something else there, that I missed a plot point, it really was all internally consistent and there is another explanation. There isn't. The end of the series, the last 10 minutes, could only been more clear if Christian Shephard had said:

Jack, you died when the plane crashed. You were a mess of a person when that happened. The island is purgatory and you worked out all your issues of being alone and not believing in god there. Good thing you didn't let the island break apart and sink into hell. Now your ready to go to heaven. Just give me a second while I open the pearly gates.
Was the island real at all? No, I argue for one simple reason. The last shot of the show is intended to hammer this home, the beach is littered with a broken up crashed airplane and NO PEOPLE. That was the only real shot of the island you saw the entire series. Even if the island were real in the show, it doesn't matter, the island is still purgatory.

What about Fringe?
Fringe appears to be Bad Robot's (J.J. Abrams television and movie production company that made Lost makes Fringe) antidote for Lost. By the end of season 1 and now through season 2, Fringe has been moving fast. There has been very little that seems likely or even possible they could attempt to answer with religious explanations. The plot and the characters are evolving together and so far remain internally consistent, at least it seems that way to me.

Conclusion
I felt like writing this was necessary to move on with my life, nearly 4 days of which were spent watching Lost. It certainly did not deserve that time. The older I get and the larger the disappointments become, the more I conclude that no individual entertainment is worth committing that much time to. So if nothing else, I thank Lost for showing me that what has been lost was my time.

Tuesday, May 04, 2010

Tip: Merging Interface Builder XIB Files Easier with Same Version Settings

Last month I posted Setting XIB Deployment & Development Targets Correctly. The article explains Interface Builder version settings in each XIB file and recommends sane settings to keep busywork to a minimum.

During a Subversion merge operation from the iTimeZone 1.3.5 branch to the trunk, I just about started to cry looking at merging the one XIB file I had changed on the branch. It was hundreds of lines of conflicts and not much had really changed. Why was their such a conflict?

Turns out that changing Deployment Target and Development Target in a XIB file dramatically restructures the XML. The large number of conflicts I was seeing, all gone once I had the inbound branch version of my XIB on the same version settings as the trunk.

This message on osdir.com explains the ongoing changes to XIB files to make them more efficient and readable. Just make sure you sync versions before doing merges.

Monday, May 03, 2010

Tip: iPhone only apps can NOT include iPad size icons

Update 2
Here is the exact error message iTunes Connect shows:

The binary you uploaded was invalid. The Info.plist contains the key CFBundleIconFiles, which may not be used in applications that do not target the iPad device family. Use CFBundleIconFile instead.

After thinking about this some more, still might be possible with a truly "iPhone-only" app to get better icons on iPad by building against iPhone OS 3.2, keeping deployment target as 3.1.3. Have to try that tomorrow...

Update
Even though including iPad size icons and CFBundleIconFiles in Info.plist worked fine across the non-iPad devices I have running 3.1.3, iTunes Connect auto-rejects an app if it includes CFBundleIconFiles. Also note that the Valid Build Product step that Jeff LaMarche blogged about does not catch this!

Original Post
The iPad has landed! Like somewhere over 1 million people, I got my iPad 3G last Friday. First thing I did was load up all the apps I own, including mine, iTimeZone.

Immediately noticed that the icon looked like shit. Upscaling from 57px to 72px was not kind to iTimeZone. I was a few hours from shipping iTimeZone 1.3.5, a bugfix release, but I couldn't leave the icon in that state, what a bad first impression. Sure the app is being run either letter & pillar boxed, or pixel doubled, but I couldn't quickly whip up iTimeZone for iPad. Maybe though I could universalize iTimeZone for iPhone's icons so they at least look good on iPad for users that don't eventually buy iTimeZone for iPad.

After looking at a bunch of resources, this Apple article App Icons on iPad and iPhone spells out exactly what you have to do in iPhone-only, iPad-only, or Universal Apps for icon settings. It doesn't make it clear if you can follow the Universal directions for an iPhone-only app. Turns out you can.

I've testing the directions on an iPhone 3G, iPad 3G, and original iPod touch, works perfectly. Even better, I re-resized the iPhone icon from the original 512x512 source icon, and the latest version of Flying Meat's Acorn makes even the small sizes much crisper than before, score!

Monday, April 05, 2010

Setting XIB Deployment & Development Targets Correctly

Interface Builder has a couple of settings in each XIB file that could be important to the correct operation of your application, or at least your expectations. Here's a screenshot with the important bits highlighted:

The  Developer Documentation contains the standard definition.

I won't regurgitate what  has already said, go read that stuff if your not familiar with it. The most important setting is the Deployment Target. If you have been developing for iPhone OS for a few years, your Deployment Target might be hard-coded (like mine where) to a specific release of iPhone OS instead of to Default - Matches your Base SDK from Xcode Settings. The documentation suggests leaving it to Default..., and it seems like the right idea, one less bit of busy work.

The Development Target for a single developer or small team seems like an unneeded setting. Everyone is going to upgrade at the same time to the latest version of Interface Builder. I would walk your XIBs every couple versions to update the setting to the latest. Doesn't seem like any reward for being diligent here.

Saturday, April 03, 2010

Got my first iPad

Here it is:

Sadly not a real iPad yet, this is all I have until the 3G model ships in a couple weeks...

Saturday, March 20, 2010

Computer Science Gets No Respect: A Talk with Son 1.0

From my son whose nearly 6 years old.

Son: Dad, when I get bigger I want to be a scientist.

Me: You know I'm a computer scientist.

S: No, I want to be a real scientist!

M: You don't think I'm a real scientist?

S: Yes, but I want to make a shrink ray. That's going to need a lot of
thinking because I have to create the formula. Then I can make people
small, or make them into giants.

M: It sure will!

Wednesday, January 20, 2010

iTimeZone participating in Indie Relief

indie Relief

I am late to the announcement, but Tangerine Element is participating in the Indie+Relief charity program for Haiti. iTimeZone isn't on the main page, couldn't get organized soon enough for that, but we are listed on Justin Williams (organizer of this excellent event) Bonus Indie+Relief Participants.

I also put out a Tangerine Element press release to commemorate the occasion.

Now go buy some software and donate to Haiti at the same time!

Tuesday, January 05, 2010

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

iTimeZoneDay 12 of Tangerine Element's 12 Days of Promo Codes for iTimeZone is ending, the batch of promo code below are the last.

XFKNPTTAW96H
KHYTEHKP49W6
AXATHTYLNJ7N
A3RHLYT69MWX

History
You can read about the promotion here.

Saturday, January 02, 2010

Day 11: 12 Days of Promo Codes for iTimeZone for iPhone/iPod touch

iTimeZoneDay 11 of Tangerine Element's 12 Days of Promo Codes for iTimeZone starts now. Wish me luck as I try to install Windows XP on the 27" iMac to prepare for Star Trek Online

JM3W4AYAWAJW
6J4H9FX76TLR
HKX7WTTMAM9Y
E3WKK96FLLL6

History
You can read about the promotion here.

Friday, January 01, 2010

Day 10: 12 Days of Promo Codes for iTimeZone for iPhone/iPod touch

iTimeZoneDay 10 of Tangerine Element's 12 Days of Promo Codes for iTimeZone is for New Year's Day. Go 2010! I doubt it will be the year we make contact though (can you spot the movie reference?)

TPK93FKYR4LN
36PXJHH3WN7H
97KWKEHXRF46
6YNLPEJ346AH

History
You can read about the promotion here.

Day 9: 12 Days of Promo Codes for iTimeZone for iPhone/iPod touch

iTimeZoneDay 9 of Tangerine Element's 12 Days of Promo Codes for iTimeZone is for New Year's Eve

NHNM4JY6KPEJ
NFFJ6RY3JTXA
XYK6EFTPJ969
NMMKW6NRFLEL

History
You can read about the promotion here.