The Amazing Arrogance of Youth

May 28th, 2013

Code Monkeys

It probably shouldn't be surprising to me at all that the event that got me back to writing is arrogance of Code Monkeys. These are the young Rock Stars of the community that think that Ruby is the only language you need to know, and everything else is so much less that it's hardly worth their time. Bash, C++, Python - all "toy" languages to the Code Monkey, as the One True Language is ruby.

Of course, they are pumped up by people telling them they are amazing. They solve a few problems by throwing hardware at it, and they think they are the Oracle at Delphi of everything software, and as long as they can do just a little bit more than the next guy, their confidence and assurance grows. It's kinda sad.

I can remember experiencing several humbling experiences in grad school, and for those I am eternally grateful. I have no desire to ever be like these guys, but I can realize that I probably was back before grad school. But that was a long time before I got out into "The World". By then I knew… I was not all that. I was just a hard worker.

So this came to mind this morning I looked at a failed job in a cron email. I sent the guys responsible for the job an email saying they might want to up the memory for the JRuby JVM, as that was the cause of the failure. The Code Monkey responsible for the job said that he upped it for the run, but didn't change it in the code in the git repo because it wasn't needed.

Now in my mind this isn't possible. If the code is a one-time (a.k.a. throw-away) script, or code, then it's not in the repo as it has no value past it's one use. But if it has value past it's one use, then it's in the repo. If it has value, then it should be fixed for the memory problem. So he's either wrong in putting it in the repo, or wrong for not updating it. I know this, but I try to be nice and ask him "What's the harm in updating it?"

His response I could have guessed: "It's done, there's no reason to update it." Spoken like a true Code Monkey. They hate comments. Why? All ruby code is self-documenting. What they really mean is that everyone should get used to re-reading and re-understanding the code every time they approach it. Documentation just gets in the way of that constant process of self-re-learning. He had no belief that the script would ever be used again, but that's because he's got the time horizon of two weeks. And because he can't see it, it must not be needed. Done.

So I'm going to let it go. He's convinced he's shown me a thing or two. In reality, he's shown his inability to be a tech lead for me. That's his position in the group - Tech Lead. Not a chance in the world. I respect my boss - he's a sharp guy, and I respect his skills. But if he really thinks this guy has serious skills, then he's fooled. But hey… anyone can be fooled - look at me - fooled for 27 years.

Anyway, it's just amazing to me that these Code Monkeys are as plentiful as they are. Sure, I knew plenty of C++ coders that weren't any good. I knew plenty of Java coders that weren't any good, either. But it's the consistency of these Code Monkeys that's really throwing me for a loop.

But you know… maybe that's a good thing. After all, he got me to write something. Maybe I'm making a little progress?

Month Four of my Most Painful Year

May 5th, 2013

Sad State of Affairs

I'm trying to feel like writing, but it's just not yet in me. There's a lot of sadness, and I can't really move on because things have to move at what seems like a glacial pace due to all the people and things involved. I need to force myself to write about things, but I still can't seem to force myself to do it.

I wish I could… any maybe I just need to make the effort - no matter how difficult it is. I don't know… that sounds like I'm just setting myself up for more pressure and pain. Maybe it's something to shoot for every week. That might be a good start.

Month Three of My Most Painful Year

April 1st, 2013

Sad State of Affairs

I wish I could write about all this, but it's still just too painful. I'm talking to friends - trying to stay in the here and now, but it's hard to even watch TV. After 27 years, almost everything reminds me of Liza - commercials, vacations, work, cars, home, and then there are the times I reach out to her only to be snubbed. It's not a good time for me.

I want to believe that God has a plan for me, but I have no idea what that plan is - other than to just wait for the time being. So I wait. And I hurt.

Turning a Very Painful Corner

March 15th, 2013

Sad State of Affairs

This evening Liza wanted to talk. She told me what was up with the kids, which was nice, because they aren't texting or calling me back, so it's nice to hear about what's up with them. Then she asked me how I was doing, and there wasn't a lot I needed to say other than it's been horrible. But I could tell there was something she needed to say, and she was just working up to it.

After I explained that I wanted to work together towards a future where we were both happy, she explained to me that she wanted a divorce. That the year that we weren't supposed to 'do anything' during was really too long. She wants to sell the house and get on with her life. She believes that I'll be "snapped up" by one of the ladies at church - after all, I have good teeth and a well-paying job.

I was upset that she so easily passed off my pain as something that was easily "fixed" by "someone else"… and that she told the same thing to the kids when they said to her that I'd be alone for the rest of my life.

I asked if she was sure, and she was. She is.

I don't think I've felt quite that hopeless in my entire life.

At our rehearsal dinner, I made a toast to her:

Everyone that knows me knows I'm as serious as death.
But Liza has given me something I didn't know one person could give another.
She has given me hope.

Tonight, at least for a while, she's stripped it away.

I don't think it's gone forever. I sure hope it's not. But this is a horrible feeling.

But I'm glad I know. I'm glad there's no more questions about what might be. What might happen. It's clear now that she has no interest in being married to me. So I can close this chapter in my life and move on.

As difficult as those two things might be, I have to do them.

I've turned a corner. Like it or not.

Still Alive, Just in a Deep Hole

March 13th, 2013

Sad State of Affairs

I'm still alive… I'm still coming to work… but the things happening with Liza and the kids have just gotten me into a state where I don't care about pretty much anything. If it weren't for this job, I might just get in a car and drive somewhere… No real idea where, probably not any better for me because I have to face my future and not run away from it, but given that my future is being (not) decided by Liza, and she's making no indications that she's interested in talking to me - let alone seeing me, or even living with me again, I'm really at a loss of where to go and what to do.

The kids aren't even texting back, and when their Mom is being like Liza, I can't really say that I blame them. She's not taking me seriously, so why should they? They are teenagers, after all, and that is almost the definition of self-absorption. So they aren't communicating, Liza isn't communicating… it's like they are dead - but I know they aren't, and their ignoring me is purposeful.

Sticks and stones can sure break bones when aimed with angry art.
Words can sting like anything, but silence breaks the heart.

Yup. Wonderful times I'm living in these days. Just wonderful.

I Love Magic – as Entertainment

March 5th, 2013

Clojure.jpg

I love a magic show. Even one that my friends might think of as lame. I love the well-done illusion. I know it's not real, but it's fun to believe that it is. After all - it's entertainment, and if you don't enjoy entertainment, then watch something else. It's your time, your life, your choice. But where I don't like magic is in languages and coding - there I absolutely hate it.

Take clojure, and for that matter, ruby falls into this category as well. The Ruby-ism of Convention over configuration is a nice thought, and can be helpful for new coders starting out, but it obscures all the details, and in that obscurity, it masks all the performance-limitations, and that includes threading. Clojure is the same. What's really being done? Don't quite know with a lazy sequence, do you? What's loaded when? If it's a database result set, does the code load in all the rows and then construct them as a lazy sequence, or does it read a few rows at a time and leave the connection open? Big difference, right?

So I'm not a fan of this kind of code - except for simple one-off scripts and manual processes. You just have no idea what's really happening, and without that knowledge, you have to dig into the code and learn what it's doing. Don't forget to stay abreast of all the updates to the libraries as well - things could change at any time simply because of the cloaking power of that abstraction.

Why does this mean so much to me? Because there's never been a project I've been involved in in the last 15 years that doesn't come down to performance. It's always coming dow to how fast can this all be done, and how much can be run on a single box, and so on. All these are performance issues, and without the in-depth, continual, knowledge of every library in use, I'm bound to have to make some assumptions - until I'm proven wrong by the code itself.

And what's worse, is that I know to look, whereas plenty of the junior developers that I have worked with simply assume that it's par for the course, and don't even think about the performance consequences of their code. They've always had enough memory, and CPU speed, and if it takes 20 mins - so what? It takes 20 mins! I wonder if they would feel that way if it was charging a defibrillator for their parents? I'm guessing not.

Time is the one limited resource we all have. Waiting is not acceptable if you can figure out a way to reduce or eliminate the wait. That's what I've been doing for the better part of 15 years now: removing the wait.

Starting late yesterday, I realized that we have a real performance problem with the clojure code we are working with. I'm not sure that the code is really all that bad, as it works fine when the database isn't loaded, but when it is - and it doesn't have to be loaded very much, things slow to a crawl, and that's not good. So bad, in fact, that several processes failed last night as it was cranking through a new data set.

So what's a guy to do? Well… I know what to do to make JDBC faster, I just need to know what to do in clojure to get those parameters into the Statement creation code in the project. Unfortunately, there's no simple way to see how to do it. Clojure, like ruby, isn't well documented for the libraries - for the most part. This bites because I can see what I need to set, but not how to set it.

So I'm going to have to wait for our clojure expert to show up this morning and tell him to dig into it until he can give me a list of examples that I can work from. I have no doubt he's capable of doing it, but it's not terribly nice to have to wait for him to walk in.

But that's my problem, not his.

But Boy! I hate "magic" code.

Month Two of My Most Painful Year

March 5th, 2013

Sad State of Affairs

Well… I haven't been writing a lot lately, and frankly, that's because I'm entering month two of my most painful year to date. I'm not silly enough to think that this will be my most painful year ever, but insofar as 'ever' is 'to date', then it's ever. I just haven't had the emotional energy to write. I can't bring myself to write about anything. Work is OK… life is horrible… but in that, it's normal.

I'm going to try to get back into the swing of writing, but I know that it's a little optimistic to think that I'll get back into the swing right away. I'm just hoping to write a little more than I have been.

Hopefully, it'll cheer me up.

Google Chrome dev 27.0.1423.0 is Out

February 27th, 2013

Well, it looks like the major version just jumped with Google Chrome dev to 27.0.1423.0, and it looks more like a semantic change than a real significant update based on the release notes. Still… it's nice to see that they are still on their schedule of moving things along as they promote from dev to beta to release.

Google Chrome dev 26.0.1410.12 is Out

February 22nd, 2013

This morning I noticed that Google Chrome dev 26.0.1410.12 is out with what appears to be a good set of updates from the release notes but the minor version update indicates that they see this as minor bug fixes. Interesting take on how they see these changes. In any case, the new maintainer seems to be generating good release notes, and I'm all for that. Maybe the quick succession of bug releases is signaling a shift to 27.*… we'll have to wait and see.

Doing a Lot of Skut Work

February 21st, 2013

Code Clean Up

Today has been a lot of skut work - clean-up stuff that has been sitting in the queue for months but no one wants to do. But if the project is going to really work, someone actually has to do it. So since I finished up a lot of tasks today, it seemed like a natural thing to just get to it and clear the decks.

None of this is hard stuff, it's just not very fun, and it takes time.

First off, I followed up with a request for backups to be made of all the database machines we use in the group. This includes CouchDB as well as PostgreSQL. It's nice in that the install of each of these packages places the data files in the largest partition on our boxes: /var/groupon/ so it's simple to just back up that partition. I submitted the request a few days ago, but hadn't heard anything back, so I followed-up asking if I was going to get a completion notice when the backups were working.

Response was: "Yup, likely tomorrow". Good enough.

Next, we needed to get Nagios monitoring of the free disk space on the boxes as well - so that should a process go crazy and start to fill up the disk, we can fix it before it becomes a database killer. This has happened to us on several occasions, and it's something to be avoided as the main processes can't run if the database is offline.

Finally, needed to do what I could to compact the CouchDB databases on the production and UAT hosts because we're at 93% disk space used, and there's very little headroom left. If the compaction of the views doesn't work, then I'm going to just drop the database and start fresh. We have a replicate of the production data, and with the backups (above) we'd be able to go back to it anyway. But this is something I'd rather not do, but it's certainly a sure-fired way to get the space.

It's not glamorous work, but it needs to be done, and no one else is picking it up, so I might as well just do it all and have it done.