Archive for December, 2007

Winding Down Towards Christmas

Friday, December 21st, 2007

Today is the last day of work before a nice little break for Christmas and things are winding down nicely. I put in a few changes to the price feeders and helped out a few folks with some issues they were having - expiration weekend is coming up and they wanted to make sure that they'd have everything they need. They did.

The break is going to be good. I might rebuild my Macs - get a fresh install of Leopard to make sure I wasn't having any issues. If I have time, that might be nice. Simple enough to do, but it'll take a bit of time to rebuild two boxes. Thankfully, I'll have time this coming week. The kids will be playing with their new toys and I should have plenty of time to rebuild a couple of boxes.

A little rest... a little time doing nothing... just what I need for the start of the new year.

Catching a Networking Problem

Friday, December 21st, 2007

cubeLifeView.gif

I've been having a lot of problems lately with my Sun box at work. It's getting a lot of NFS errors, and on Solaris, that means the box locks up. If I unplugged the network, waited a minute, and plugged it back in, it would come back for a while. But it'd go away again. The Unix guys tried a new NIC in the box - no good... they tried different cables and ports on the switch... no good, finally we ordered a new box thinking that this was a bug we weren't going to find. Thankfully, I was wrong.

Yesterday, I looked at another box under my desk and noticed that it was on the same subnet as the troubled box. I decided to swap the network cables completely eliminating the network from the picture. Lo and behold... today my linux box (the one that I swapped the cable with) died. Yup... no pings. Never happened before in all the years it's been running for me. But it did today. So I called the network guys and told them of the problem. They found problems in the switch - maybe they weren't there before, don't know. But they found problems and they moved me to another port on the switch. Service was restored.

This was a super simple test that I should have looked into many months ago. There was no need to order the new box, but we'll keep it on hand as a spare, just in case. This test was able to completely isolate the network problem with a working machine and that's all it took. Now we know.

Whew!

Firefox 3.0 Beta 2 Runs as a 32-bit App on x86_64 Linux

Thursday, December 20th, 2007

Firefox.jpg

This is great news! I wanted to try the latest beta of Firefox 3 - Beta 2 as I've been reading pretty nice things about it. So I go to get the source to compile it on my Fedora Core 5 x86_64 box and realize that I'm missing cairo-gtk, and don't feel like tracking it down right now. The reason I built 2.0.x from scratch was that the tarball of firefox 2.0.x for linux simply didn't run on my x86_64 box in 32-bit more. Simply would not work. I looked at a lot of things to try and get it to work, but no luck.

So I think Hey, I'll give it another try! and downloaded the linux 32-bit code for Firefox 3.0b2. To my complete amazement it worked! I was stunned. I then was able to link in the 32-bit Java plugin just as nice as you please, and Bingo! I'm running Firefox distribution on my 64-bit machine. This is really great news.

I'm glad they have done this. It makes it a ton easier for me to stay up to date with the fixes, etc.

Skipping Acknowledgement of Your Contributions

Wednesday, December 19th, 2007

cubeLifeView.gif

I'd like to think that I'm not a fool. I know that capitalism is all about the smart, strong, clever, industrious, getting more from their efforts than others. It's Darwinism in business. So I'm not one to expect a lot of day-to-day patting on the back from the people I work with - or for. Every now and then a Thank You would be nice, and I get them often enough for me at the Shop. Yet today something happened that really upset me - and something I foresaw about two and a half years ago.

The CTO decided that he needed to have a Harvard Business School Org Chart for his part of the Shop. Why? Because he didn't want to have someone they are interviewing for his replacement look at the way things are now, and say "What kind of horrible manager are you?" Which to me begs the question of "I'm leaving, what do I care what you think?" or maybe even "The kind of horrible manager that instills great loyalty and affection in his troops, what kind are you that needs a Harvard Business School Org Chart to run an organization?" But I digress.

This Harvard Business School Org Chart acknowledges the alignment of the business into three pillars, and correctly identifies the technology leaders for each pillar. The org chat then takes a left turn there into the land of what might be, but isn't, and says that the pillar I'm in is then divided into three groups: development, production, and something else I can't remember for now so I'll call it 'candy canes'. Further, the head of development - because we have to have a head of an org chart box, is an old friend of the CTO and head of the pillar.

First, when they brought in this old friend two and a half years ago, I told my wife this was going to happen. When the going got tough, and they laid off tons of folks, they asked me to handle all the infrastructure of the pillar. Understandable, and I did it. Now they have a little breathing room and they want to put me back into a little box as if that's where I always was in the first place. Not so, Mr. Magoo.

The business isn't aligned like this. I do not sit completely in development - or production, or candy canes. I cover all three - and they want me to. They count on the fact that I cover all three and yet when they come to the Harvard Business School Org Chart, they don't want to draw it as it is - they want to draw it as they wished it were.

The truth is that we are aligned more by application in the pillars than by anything else. That makes the most sense in a small organization - who's responsible for what? That means doing everything for that project - soup to nuts. That's how it's really run. Putting in these mythical org charts about how they think it should be is just the caving into pressure to try t make a place that's unconventional look conventional.

Trust me, you may want to make this place look conventional, but the people in it are far from conventional, and like it that way.

So I was asked what I thought about this new org chart, and I told him it trivialized my accomplishments and daily contribution and sacrifice. He didn't expect me to react so personally, but when I reminded him that I take everything personally, and that's part of the reason I'm so good as my job, he knew I was right. This is a sham. I've got nothing against the guy that's now the Head of Development... he's a decent guy. He's just not my manager in any sense of the word. And putting it on paper in a Visio diagram is not going to make it so.

In fact, they don't want me to change how I do things. They want to leave things working just like they are - they just want a new org chart. Which comes back to the appearances factor. Trying to look like a cow when you're a horse. Silly. Dumb. And ultimately, disrespectful of those people that work very hard for you to make you a success.

OsiriX 3.0 is Out

Tuesday, December 18th, 2007

OsiriX.jpg

A while back, I got some xray CDs from the hospital for Joseph and Liza and wanted to look at the images because I thought at least Joseph would find them interesting. My travels lead me to locate OsiriX - an incredible Open Source viewer of the DICOM images. Really quite amazing. Well... today they have released ver 3.0 of OsiriX for Leopard (10.5). It's 64-bit, got lots of new features, and in general looks again like it's an amazing feat of Open Source coding.

Now, I'll admit that when I start it I still get the indication "32-bit" in the About box, but again, I'm guessing that it's likely that the "64 bits" support is in some of the libraries as it's not really necessary for the GUI. Minor point.

In general, it's great to be looking at the work. It really is inspirational.

Stop Trying to Beat the House

Friday, December 14th, 2007

cplusplus.jpg

OK, this afternoon I was testing out my market data server and I ran across a bug. It was an annoying little thing, and I deserve to have been bitten by it for trying to beat the house. And by this I mean trying to be smarter than the OS and library builders. The original method looked something like this:

/*
 * There are times that you might want to see the numeric
 * representation of the contents of this string. These methods
 * make that easy enough to do and take care of all the dirty
 * work for us.
 */
int CKString::intValue()
{
    bool    error = false;
    int     retval = 0;
 
    /*
     * We're going to loop over each character in the String until we
     * get to the end. As we're going, we'll be building up
     * the return value. If we find a character that's not a digit
     * then we'll return what we have to this point, just as atoi()
     * would.
     */
    for (int i = 0; i < mSize; i++) {
        // see if it's not a digit
        if (!isdigit(mString[i])) {
            break;
        } else {
            // accumulate the value
            retval = retval * 10 + (mString[i] - '0');
        }
    }
 
    return error ? 0 : retval;
}

the reason I chose to roll my own atoi() was that I was thinking that the system routine did too much and all I needed was to add up the value. How easy could that be?

I should have learned from Vegas - Never bet against the House!

The bug was the string '-1'. Clearly, I hadn't allowed for the '-'. When I added that into the code, and then added in the allowance for whitespace on the leading (left) side, I was looking at something that I realized that the system call was just as efficient, probably more so. When I realized how silly it was to try and beat the house, the new version of the method became:

int CKString::intValue()
{
    int     retval = 0;
    if (mSize > 0) {
        retval = (int) strtol(mString, NULL, 10);
    }
    return retval;
}

which works just fine and is probably more efficient than I could have easily written. Lesson to self: Never try to beat the House!

The Leopard has No Jikes!

Friday, December 14th, 2007

java-logo-thumb.png

I was doing my first building of java code on Leopard today and realized that jikes, the fast, Java compiler is missing. I'm guessing that with Java 1.5 as the default, and jikes not supporting 1.5 or later, at least not yet, they decided that they didn't need it.

I mean it makes sense, but it also means that all my Makefiles are going to have to change. Not the worst thing in the world, but a little disappointing as I've been using jikes since it was off IBM's alphaWorks site and I've built it on a ton of machines. Just a bit nostalgic.

Leopard Upgrade Ignores iTunes Library Location

Thursday, December 13th, 2007

Apple-logo.jpg

Today I was checking the podcasts in iTunes and noticed that all the music in my iTunes library seemed to be missing. What I found was that the location of the iTunes library was reset to be ~/Music/iTunes directory from whatever it was in the upgrade. Now with I got the first versions of Mac OS X, the iTunes library was installed in ~/Documents/iTunes and up until this upgrade, that was preserved. Well, not this time. So I decided to clean house a little and so I copied the files from ~/Documents/iTunes to ~/Music/iTunes and then tarballed the old directory up and put it on my external drive. Then I deleted it from the old location and started running it from the new location.

Seems to be working just fine. Just seems a little odd that they didn't pick up the preferences value.

When Training has No Educational Value

Wednesday, December 12th, 2007

cubeLifeView.gif

Today was the first of eight days of "training" for a package that the shop has purchased at great expense and very little long-term thought. This training is required because they require that you are a certified developer in order to get technical support from them. It makes sense... why answer a bunch of silly questions from users when you can force questions through developers that have gone through your "classes" and at least have a working knowledge of the product. That's the theory, at least.

The practice is something else. An entire day spent on SQL - or a derivative of it close enough to be considered SQL, and where it differs, they should have just changed the syntax to make it look like real SQL. Imagine that they changed the inequality operator from '!=' to '^=' - just to be different. Why? No idea. The guy teaching the class had no idea either. But there it is.

There are a few changes - no inner selects, you have to use temp tables, but that's not hard. But we spent hours there doing queries that we'd never do in practice without the schema right at our fingertips. It was educational for about the first hour, and after that, it was just moe of the same with a lot of waiting while we flipped through slides.

I realize this might not be this guy's main job, but he's representing the vendor to us, the customer, and when his response to a statement from use like "That's a bug, it should be fixed" is "That's the way it is, it's in the docs" he's missing what we in the biz call the Big Picture. I'm sure he's a nice guy, but come on! When your customers are telling you this is a bug, then you at least say, "Hey, I understand, and I've tried, but they aren't budging". And then when we say "Hey, an error message to that effect would be nice", you agree and talk to the product developers. You don't giggle at us, like you have so many times before and then say that's the way it is.

So for the first time in over a decade of class work, I got a headache from this class. That's bad. I can't believe I have seven more days of this. It's got to get better, or I've got to go through it quicker.

I’m Amazed I’m Surprised Anymore

Wednesday, December 12th, 2007

cubeLifeView.gif

I want to believe. I really do. I want to believe that people are basically good and honest and I want to believe that they will look out for each other - at least a bit, in a jam. I want to believe that people are honest and have honor, and work in a mode where they instill these characteristics in others.

I'm honestly shocked and hurt when this doesn't happen. More so when it doesn't happen around me with people I have known for years.

Some will say that I'm not learning from the historical evidence available to me. And I'd have to agree that they are right. If I look at the historical evidence, key members of the management team here have proven themselves to be somewhere between having selective memories and outright deception for their own ends. Yet I still want to believe that this time they are acting honorably and honestly.

Silly me.

So here's the story of the week... the shop has decided to buy this package without really technically diving into it's capabilities to see if it'll do all we need (not all we want, all we need), and so now, millions of dollars later, they need to ensure success. No surprise there... I've seen it happen time and again. Typically, this is where I come in. They come to me and say "It's got to work. Make it work." And I make it work - as best it possibly can. There are times that it hasn't been 100%, but it's always been good enough to declare success, and that's all the management wants.

So this time we're poised again to do the same thing. Then yesterday I get into a late meeting where it's now clear that the work I would be doing on the new version of the product has to be hamstrung by the fact that it's got to work with the old version that I had been told would never be deployed here. Hmmm... I see the selective memory popping up.

So now we have to deploy this old version that isn't even half of what we need but we have to do it because the guy really running the project says we have to. I can see his point of view - minimize the changes in the migration from old to new, but I disagree that the minimization of the changes should take precedence over the fulfillment of the potential of the new version. After all, we know the old version is not nearly what we can live with, why force us to live in it's limitations?

So it's now clear that I will not have the freedom I need to make sure this project succeeds. In a way, I've been given my freedom by that one simple meeting. Oh, I think the management team hasn't figured that out yet, but if not now, they'll see it soon when I say "Hey, I'm sorry, I can't do that, based on the schedule and work outlined by the project manager." Then it'll hit them that without power, responsibility is an impossibility.

As an aside, these interactions make me hold my management in contempt. If they don't want me to do a certain job, then just say so from the onset. If they do, then have the honor to do so, or tell me that things are changing and realize that they can't hold me to any sense of responsibility or a project that they themselves will not give me power to control.

Times like this I want another job. I know it happens everywhere, and when it happens where I've been, I've wanted to leave those jobs as well. I like to work. Period. Ask me to do a job, and I do it. Try to con me into some impossible situation and see if I'm dumb enough to take the bait and try to make this looming train wreck miss is not respectful nor honorable.