Archive for May, 2010

My Cousin Rob

Thursday, May 6th, 2010

I'll always think of the three families I grew up with: my Mom's side, my Dad's side, and us, as my Mom's side being the wilder group, my Dad's the more conservative, and us right smack in the middle. My cousins on my Mom's side were very interesting to me as a simple, Midwestern kid: they were far more cosmopolitan. They traveled all over, they did dangerous things that I'd never consider doing. They were exciting. On my Dad's side, my cousins were nice and fun, but not going to be jet-setting to Martha's Vineyard, or discussing R-rated movies with their parents. Just not gonna happen.

My cousin Rob is the adopted youngest son of my Aunt Jo and Uncle David. He was as wild as they came, and whenever we got to spend time with them, and it wasn't very often, it was always something that left lasting impressions on me. I just wanted to write down a few of these today.

Going to Camp

When we were kids, we would visit their summer home in Vermont. Stop right there - a Summer Home... in Vermont. Come on! How cool is that? Answer: Super Cool. They got to have a summer home on the side of a mountain. For kids, that's about as cool a summer place as there is.

As I was saying, we'd go to Vermont and a few times, Rob and his sister, my cousin Ann, would be at camp. Now this wasn't some wussy Church Camp like I'd been to... no, this was super cool, with cool people and all. I'm sure this was just a camp, but to me at the age of 9, it was as cool as it got. They just oozed cool.

Back then I just wished I was a tenth as cool as Rob - we were about the same age, I think he's about a year older than me, but no more. I'll never forget parts of the song they sang at their final concert... Something about a hen laying eggs now, every since that rooster came back in the yard... Too cool.

The Matches

One summer, I'm not sure which, Rob, my brother Terry, and I were playing on these enormous rocks in the yard of the house on the mountain. These rocks are about the size of a VW Bug - maybe some bigger. They are a formidable place to play as a kid, because you can play on them for hours and never touch grass. It was a blast.

This particular summer we seemed to have a pension for burning things. In retrospect, on the rocks, there was very little we could do. However, had the matches hit the long, dry grass at the base of the rocks... well... then we might have had a much different story. So we're on these rocks, and Rob had several packs of matches, and we were building little huts of sticks and grass, and then lighting them on fire and making story lines about the poor people inside.

Typical boys, and typically dangerous.

So as we're done, I put the pack of matches Rob gave me into my pocket - just to be cool. I was really glad he didn't ask for them back. You see, matches were completely forbidden in my house. There had been too many incidences of trash cans set on fire, and houses burned to the ground for my Mom to allow kids, and we were kids, no mistaking that, to walk around with the ability to make us all homeless.

That evening when I was getting ready for a tub, I was sitting on the bed as I took off my pants. My Mom was right there, and before I knew it she had picked up my pants! I panicked! "They're Rob's!" I said very fast and far too loud. She had a very puzzled face until her hand hit the fateful pocket and then it turned very quickly to anger.

I totally ratted him out. I left out the part where I thought it was cool... where I thought it was neat... I just said they were his, and totally dumped it at his feet.

I'm sorry, Rob. I never should have said that.

My Grandparent's 50th Wedding Anniversary

Many years later my Mom's parents were having a big 50th wedding anniversary bash. It was going to last a week. Big Deal. My Mom and her sister and brother rented a cabin at the local lake for all the grandkids, in a move of unspeakable trust, and foolishness, they failed to staff it with a single parent.

Not one.

So here are ten teenagers living in a house on a lake for a week. Can you possibly spell d-i-s-a-s-t-e-r more clearly? I can't imagine doing it now, but they did it then.

So we're staying at this cabin, and it's a blast. I can't remember who started it, but we had the longest game of ping-pong round-robin I've ever played. It was really fun. But then Rob got the idea that the firecrackers he brought needed to be put to better use than tossing into the lake to make mini-depth charge columns of water.

So out comes the can of gas for the boat.

He splashes a little on the ground, lights a firecracker, and drops it into the middle of the "spill". A few seconds later, BANG! and then the flames leap up, and go out a few seconds later.

COOL!

SO for the next 20 mins or so, he plays dumping a little more gasoline each time. Finally, he has a dud of a firecracker. After it fizzles, he picks it up and before he lights another one he "re-applies" the gas to the spot. Yeah... you can see this a mile away...

This time, the BANG! is accompanied by flames about six feet high, and licking up the side of a tree! For a few seconds I thought: "Oh no! We've set the house on fire!" - right back to the matches incident! My Mom is going to kill me!

Thankfully, it died down and we didn't continue with this particular set of experiments any longer. Rob, thanks for teaching me not to "re-apply" gas to the mix.

Rob, the Boy, the Myth, the Legend

Over the years, I have thought a lot about all the things I was allowed to participate in with Rob. There was the time he, Terry and I tied up my little sister's Snoopy stuffed animal and hung it from the third-floor staircase in their house in Englewood, NJ. It was cruel to my little sister (I'm sorry, Elaine), but to be included was to be special. He allowed me to be included when my brother Terry didn't.

Rob was always cooler, seemed smarter, seemed to have everything I wish I had. Just an amazing guy to look up to.

This morning, I got this email from my Mom:

Dear Ones,

Aunt Jo just called and they received word that Rob had committed suicide in a motel in San Diego. He had been drinking again and who knows what demons tormented him. But he put an end to his suffering. Sadly he left a young son to try to deal with the aftermath. As of right now, Jo and David are still heading to VT via Indy. That may change if they should decide to turn back west.

I'll keep you updated. I love you all. Mom

I don't understand. I don't think I'll ever understand. Mostly, I feel guilty. I hadn't been in touch with Rob a lot in the recent years. I knew he did a stint with Ziff-Davis on the technology scene out on the west coast, which, of course, only added to his "cool factor", but I hadn't taken the time to get in touch and see what he was up to.

All this technology and I never dropped him an email.

What kind of cousin does that make me?

It's the first time I've really known someone that killed themselves. I realize that it really does leave people wondering what could I have done? It's inevitable, I guess. I just wish I'd reached out... maybe I wouldn't have changed a thing, but maybe I would. I'll never know.

I get bummed like everyone else. But I just can't imagine how horrible his life must have been for him to believe this was the best thing to do this week. Maybe it was just loneliness, I can only imagine. I really wish I'd have tried to reach him.

But I have these stories to tell my kids, and in that, I guess, Rob still lives: The Myth, The Legend.

I'm sorry, Rob.

Transmit 4.0.2 is Out

Wednesday, May 5th, 2010

Transmit 4

As with all new, major releases, very soon after it's initial release, Transmit 4.0.2 is out with a lot of bug fixes and new little features. It's really nice to see the responsiveness to the user's issues.

I still need to enter in all my hosts to Transmit from Cyberduck. But I've at least got the biggies.

DataGraph 2.2.3 is Out

Wednesday, May 5th, 2010

This morning I saw that DataGraph 2.2.3 is out and in this update there are a few bugs fixed with regards to the data importing and grouping. It's got some pretty advanced features for data importing, as I've used it heavily for plotting some simulation runs, so it's good news to see these bugs fixed.

Nice to see the updates, but I'd really like to see him include the 3D plots like isobars and heat maps to the tool. It'd make it a lot more powerful for my simulation plotting.

Google Chrome dev 5.0.375.29 is Out

Tuesday, May 4th, 2010

GoogleChrome.jpg

This morning I noticed that Google Chrome dev was updated to 5.0.375.29 and with it are a few more improvements in the V8 JavaScript engine and the typical stability and security fixes. I have to say, Chrome is getting to the point that it's supplanted Firefox as my backup browser. And when I say backup browser I really mean that it's my second browser that I always run with my hosting service pages always loaded - just in case. So you could think of it as my primary HostMonster browser.

It's fast, it's gotten rid of the problems with a page crashing taking down the entire browser... and the connectivity issues I noticed. It's solid, stable, and while it may not have all the bells and whistles of some browsers, or even the stability of Safari, it's good. Good enough for my second choice.

MarsEdit 3.0 is Out

Tuesday, May 4th, 2010

MarsEdit 3

Well, he finally did it - MarsEdit 3.0 is out with a nice WYSIWYG editor - not that I use that input method, but the HTML syntax highlighting is much improved and that I use. Nice.

The Media Manager is very nice, and it'll make it a lot easier to pick out things to slap in the posts, but it's big, I mean, really big, and I guess that's OK for now, but I'd have liked to see it smaller like the previous version. Oh well... so it goes...

One thing... in the Template Preview, if you reference a file on your machine, like I did:

  <link rel="stylesheet" href="file:///Users/drbob/Sites/CSS/WPdefault.css"
   type="text/css" media="screen" />

then you need to be sure not to use the file:// URL scheme. You have to use the http:// URL in order for it to be read in properly and used:

  <link rel="stylesheet" href="http://peabody.local/~drbob/CSS/WPdefault.css"
   type="text/css" media="screen" />

I seem to remember this a long time ago, but when I looked at my MarsEdit 2.x template it still had the file:// URL, so I let it go. Now I'll have it here and it'll be harder to forget.

UPDATE: I sent this into Daniel and he said he's looking into it. It's odd that I remember this happening a while back, but I can't find it in any of my posts, and I wonder if I imagined it all. In any case, it worked this morning with 2.4.2 and with 3.0 it has to have the http:// URL. We'll see if he comes back with a fix.

The Difference Between Average and Really Good (again)

Monday, May 3rd, 2010

Crazy Lemon the Coder

This morning I was pulling in code that had been checked in by one of the other developers in the group. Steve's code is, well... an interesting mix of optimistic code and a very obvious trial-and-error process. It's there, and it works, after a fashion, but even the Old Guard guy at The Shop called Steve's work "...slow and a little, you know, problematic." It's not that Steve isn't trying, he's working "hard enough" for The Shop, but had The Shop not had the "employment for life" plan, I'm guessing Steve would have been pushed out in one of the cuts.

Nice, but that's not really the issue - it's about making good, solid, reliable code in a short amount of time that is reasonably easy to maintain and has a minimal set of bugs that need to be fixed. It's about productivity, not popularity.

So today I knew I had to integrate some of Steve's code into the core of the web app I started and Steve's been adding pages to. I knew this because he asked me about it on Friday before I left - and I knew what to expect. I've had to do this a few times before.

When I got into the code, it was pretty much just what I expected - the basics were there, but a lot of the detail work was missing. For example, checking for nulls, putting in a new ivar's test in the Java equals() and hashCode() methods... things that aren't really killer bugs, but they could very well be a major pain in the rear trying to figure out if you didn't know that there were these weak points in the code.

So I fixed up all the problems so that the code looked like the rest of the code in the servlet, and helper class. I checked it in and sent Steve an email about the changes I'd made. What I didn't expect was Steve's response: mildly miffed.

You see, when I'd changed Steve's code for the helper class to check for the null on the new ivar, and changed:

  public class UserInfo extends Object {
    ...
    private String[]    _pages = new String[0];
    ...
  }

to:

  public class UserInfo extends Object {
    ...
    private String[]    _pages = null;
    ...
  }

and then added the tests in the methods to check for null - as it was always possible to have the user set a null in the setter, I had broken his page. His page didn't check for nulls returned from methods, and Steve's point was that he didn't like making methods that returned nulls.

I can appreciate that he has a style, while I'm struggling to see why he'd want to make code that left out such a beautifully expressive value like null, I can see that he likes to write code a certain way. Good for him. But this isn't his code. It's not my code. It's The Shop's code. And because of that, we need to make it better than it needs to be for our private, individual use. It's got to work when we get bad inputs, when we get bad method outputs. It's got to just plain work. Period.

This is one of those seminal differences between average developers and good developers. The god ones know that they aren't writing it for themselves. They are writing code that's as good as they can make it. They know this doesn't take that much more time - but the effect is dramatic. It's the details.

Why would the return value from the servlet break the page? It should at least gracefully degrade capabilities. You don't want to have a page bomb just because the server died. Have a nice error message and then let the user see what they had last.

It's stuff like this that makes me wish I were in a group of a few, very hard working, very good, developers. Yes, it's a lot more work per person, but you don't have to worry about this kind of thing. You can divide the work and just know that the pieces will fit together and work well when it's all brought together.

What amazes me is that management knows this too, but they are seemingly happier with the idea that they'll be banking their success on the 'average' and just hope they can deal with things as they come up. Still kind of amazing.

Who’s Keeping Score?

Monday, May 3rd, 2010

This weekend I tried to do something nice for Liza - let her sleep in a little, as I took Angelina to school (early) for a track meet. I got home after dropping her off, and Liza seemed to get grumpy at me just after waking up for not waking her up before I took Angelina to school.

"Did you make sure she had water?"

"Uh... nope, sorry."

"Did she have a snack for later?"

"Uh... sorry again... We'll take it to her."

She seemed steamed at me. She was steamed at me. Here I'd gone and sent my daughter out to a track meet with no water, nothing to munch on, and I was supposed to be expecting something other than a slapdown? Not bloody likely.

But I got a little miffed... "Hey, I was trying to let you get a little more sleep. I was trying to be nice."

So there it was: we were both right, and on opposite sides of this argument. Ugly place to be. We continued on in silence for quite a while Saturday morning. Right up until I was in the shower and pretty chapped about being unappreciated... I had my flaws that morning, but hey... what about a little appreciation?

And then it came to me: Who's Keeping Score?

Does it matter if I'm right? Really? Am I going to get a present every 100 times I'm right, like S&H Green Stamps? Am I going to be a better person because I was right? Will my kids like me more? Will my life be any better at all?

Not in the least.

Not one bit.

No one is keeping score - except us. We're the score keepers, and we need to stop. I need to just say Hey, I tried, and it didn't turn out well... so it goes. It's hard to do, yes, but what's the real alternative? Keeping grudges? Keeping scores? Really?

No, there's no real alternative. It's about realizing that at 48 years of age, it's time to stop worrying about who's right and who's wrong. Do your best, try with everything you have to do right, but in the end, if it's misunderstood, then realize that's relationships. They are made up of people, and I guarantee you that for every time you forgive, you'll be forgiven by the other guy.

So stop keeping score. No one else is.