My Christmas Story

My Christmas Story

When I was a fifth grader, I had a metal lunchbox that bore the hard, battle damage anything carried around by a 10 year old kid has; dented, scratched, with a busted plastic handle that was held in place by electrical wire.

I guess my family didn’t have the money to replace the lunchbox, and it didn’t really bother me. Or at least I don’t remember it bothering me at the time.

But it caught the notice of my teacher, Mr. Goldman.

One evening before Christmas, there was a knock on our front door. There was Mr. Goldman, with a gift.

I knew he didn’t celebrate Christmas, and was pretty sure he wasn’t making house calls to all of his students.

He spoke with my parents, and then left, leaving me to wonder what was now wrapped up under our tree from my teacher.

On Christmas Day, I finally got to see what Mr. Goldman had brought – a super cool new lunchbox (with a thermos!), shaped like a U.S. Mailbox. I was more than a little happy.

Over the years, I have come to appreciate Mr. Goldman’s act of giving all the more; giving when it’s not expected, paying attention to the plight of your fellow man, doing things because it’s the right thing to do.

Some years later, in the year prior to our marriage, my future wife and I were shopping in a mall in Nashville when I heard a voice that I immediately recognized – Mr. Goldman. It had been a good fifteen years or so since I had last seen him, but I immediately knew who it was simply by the sound of his voice. I retold the story of the Christmas lunchbox to my wife, and we invited Mr. Goldman to our wedding right then and there. I’m very happy to say he accepted and showed up.

And I have tried to pay forward the love behind his gift every year since.

Merry Christmas to you and yours.

Especially you, Mr. Goldman.

Advertisements
Making Breaking Changes

Making Breaking Changes

The decision to make – or not make – a “breaking” change is always difficult.

A “breaking change” is a change made to an application that either forces an upgrade to a new OS, a new piece of hardware, or in any way fundamentally changes the app in such a way that the application won’t work the way it used to.

Sometimes one must make a decision to roll out a breaking change because the gain is much more than the pain felt in not doing the breaking change.

And sometimes, developers make breaking changes for no good reason whatsoever.

Like, for example, the change made by Google’s Android SDK team when they changed the name of their “tools” directory – the directory where all of the utilities needed to build and deploy Android apps – to “platform-tools.”

No new features were added. No additional functions.

Just a change that caused every developer who downloads the latest sdk to have to change his system configuration. And waste 15 minutes or more for a change that adds no value. Zilch.

Even if a change only involves changing a PATH statement (as this change did), why make the change at all if it is only to satisfy some arbitrary naming aesthetic?

It’s stupid.

And makes me want to whup somebody’s tail for being stupid.

Listen – I can appreciate wanting to correct past wrongs. But sometimes, the gain (zero in this case) is not worth the aggravation you cause the entire community by your breaking change.

So please, consider that the most valuable asset we all have is our time.

And when you waste it doing stupid stuff like this, it shows disrespect and a total lack of consideration.

There are absolutely times when breaking changes are warranted. In this case, Google, changing the name of the tools directory was unwarranted and idiotic.

How to Detect the Height of a UIWebView

How to Detect the Height of a UIWebView

UIWebView

A nifty solution from Stack Overflow.

Here’s my particular implementation, where I simply measure the height of the document.body element:


    NSString *output = [myWebView 
                        stringByEvaluatingJavaScriptFromString:
                        @"document.body.offsetHeight;"];
    NSLog(@"height: %d", [output intValue]);