Scarcity, The Wizard of Oz, and Saturday Morning Cartoons

Scarcity, The Wizard of Oz, and Saturday Morning Cartoons

People of a certain age remember a time before VCRs, DVDs, Hulu and YouTube when you couldn’t wait for Saturday morning.

And cartoons. Oh man. Cartoons.

You probably also remember waiting for that one time a year that “The Wizard of Oz” was going to be on TV. And if you missed it, tough luck kid. There’s always next year.

Watching video with my kids now, there is no sense whatsoever of not being able to watch what you want, when you want. Pop in a disc. Click on a link. Instant gratification.

I’m not saying this is bad – simply that the scarcity of popular content made the watching of weekend cartoons and annual televised events more of a communal event than they seem today. And all the more special because the anticipation was as much a part of the event as the actual viewing.

The Christmas specials like Rudolph and A Charlie Brown Christmas still have a bit of that element of anticipation for me. Still, I can find a handful of online places to watch these at any time I want. But it’s not the same.

I think there’s an important role for delayed gratification, if for nothing other than to augment our experiences with that sense of anticipation.

Different age, a different world.

I wonder what my sons will look back upon 30 years down the road as those things they most looked forward to with the same anticipation I did, waiting to watch the Road Runner or the Banana Splits.

I hope it’s the stuff we did together. Because I sense that time is all too scarce with each passing day.

The Right Way… and The Best Way

The Right Way… and The Best Way

If you’ve ever wanted to put a custom image into the title bar of an iPhone app, no doubt you’ve used – or at least run across – code similar to the following:


UIImage * titleImage = [UIImage imageNamed:@"nav_bar_background.png"];
UIImageView * titleImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 42)];
titleImageView.image = titleImage;
titleImageView.contentMode = UIViewContentModeScaleAspectFit;
titleImageView.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleHeight;
[self.myBar addSubview:titleImageView];
[titleImageView release];

And this is a very workable solution.

It’s just not the BEST solution.

The problem with this approach is that if the navigation controller pushes another UIView on the stack, odds are the UIImageView is going to cover your navigation buttons.  Even if the title background image is sent to the back of the z-order.

Double-plus un-good.

The optimal approach to solving this is to implement a category for the UINavigationBar.

What’s a category?

It’s a handy way to extend the capabilities of a built in class without fully having to subclass the whole darn enchillada.  Technically, categories permit a programmer to add methods to an existing class without the need to recompile that class or even have access to its source code.

Take a look:

// UINavigationBar catergory for painting background image in a way that doesn't hide nav buttons.

@implementation UINavigationBar (UINavigationBarCategory)
- (void)drawRect:(CGRect)rect {
UIImage *image = [UIImage imageNamed: @"nav_bar_background.png"];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}

@end

Include this little nugget in your project, and voila – you have a navigation bar image background that works in any orientation and doesn’t hide navigation buttons.

Enjoy.

Feast or Famine

Feast or Famine

Business is a strange… business.

There are stretches where you can’t drum up leads or engagements for love or money.

And then there are periods when you’re so busy that you don’t realize the last time you took a shower, because you haven’t left your desk for a few days.

It comes with the territory.

Oh sure, you think that if you’re careful you’ll be able to “even things out”… “spread things around”… “save up for the slack times.”

But in reality, even with great business plans, everyone is dependent upon the macro business cycle – and even good, well run businesses can go bad in a hurry because engagements dry up – or conversely, become buried in an avalanche of new orders with insufficient resources to handle the onslaught.

Since 1996 (when I started my current company) I’ve been through the birth of the internet, two boom cycles, the internet bubble bust, 9/11, and the Great Recession.

In the course of that time, there were long periods where my business plan pretty much ran itself.  There were also other times when the company barely survived.

Anecdotally, and from my own person experience, the economy seems to be pulling back from the bottom.  The phones are ringing.  Work product is going out the door.  Things are resembling what was once considered “normal.”

This is the point where one might expect a set of bullet points with the secrets to life, love, business, and happiness in order to deal with the phenomena of Feast or Famine.

Not here.

I simply note that there are some aspects of life and business outside your span of control, and all you can do is gut it out.

Put on your big boy / girl underwear and go to work.

Take care of business.

And enjoy the banquet.

Blackberry – An Honest Assessment

Blackberry – An Honest Assessment

I’ve been heads down on a Blackberry assignment, that is thankfully coming to a close in the next few days.

I’m a pretty fair minded person.  And I am totally platform agnostic.

Hands down, Blackberry is the worst SDK of any ilk I’ve ever worked upon.

You know your platform has issues when:

  • You have to re-install your development environment numerous times in the course of a project (me? I’m on time five.  Imagine having to re-install XCode five times to finish one Apple app, because of an inexplicable issue with the IDE.  Yeah.  It sucks).
  • When the user community’s primary contribution to sharing knowledge is “use search”…
  • Your simulators leak like a sieve.  I checked my memory this morning: the simulator was taking over 300,000,000 bytes of RAM.  Yeah.  Tasty.
  • You don’t support the latest OS under which you purport to support your product.  My environment?  Well, I was running Eclipse and the BB Eclipse plug-in on my MacBook Pro using VMWare running a Windows 2003 VM… until of course the simulator stopped loading one morning for no reason.  I am now running the SDK under a Windows 2003 VM running under Windows 7.  Why not just run it under Windows 7?  Isn’t it supposed to be made for Windows?  Sorry Charlie – Windows 7 is not supported.  Oh, you can run the Eclipse plug in under 32 bit compatibility mode.  But the MDS service, which you need in order to communicate over the internet won’t load under Windows 7, period.  I feel like I’ve spent more time just getting the damn thing up and on it’s legs than actually working on product.
  • You would rather try to explain the plot of “Lost” than work on a project on the SDK.
  • No – zero, zilch, nada – screen design tools.
  • Missing language elements and libraries – like being able to use the String “split” function.  No support for Apache HTTP calls.  No support for ArrayLists.  No support for java.io.Serializable.  Shit – I’ve had to refactor standard “java” so much on this project I may have well written the damn thing in Esperanto.

I really hate to “hate” upon a platform before I even get product out the door.  But damn.  It.  Shouldn’t.  Be.  This.  Hard.

I’m not some noob.  I’ve been writing software for devices since the mid 1980’s (Omron credit terminals – that takes me back).  I’ve written code for Apple, Android, Palm.

Frankly, Blackberry’s SDK is just an embarrassment.  And it’s no surprise that even though they have market share and should be crushing the competition, they have no mind share among people doing cool things on mobile.

It’s because they have brought a stick to a gun fight.