Archive for April, 2010

Decided to Pick up Books on Groovy and Clojure

Friday, April 23rd, 2010

Given the way things have been heading at The Shop lately, I thought it would be a good idea to pick up a book on Groovy and another on Clojure. I didn't know nearly enough about them to be efficient and proficient with them, and I have a feeling that if things continue to develop as they have, I'll be needing them sooner, rather than later.

I have heard a little about Clojure, and it's an interesting take on solving the concurrency problem with software. I can see why it's popular, and it'll be interesting to see it in action, but Groovy was a complete mystery to me.

After the first few pages, I can see it's a Ruby-style of language with extensions to any and all objects. Looks interesting. I haven't done a lot with Ruby, and as Groovy is Java-based, it should work well into what I do. We'll have to see.

Anyway... picking up new tools is always fun.

Upgraded to Git 1.7.0.3 on MacBook Pro

Thursday, April 22nd, 2010

gitLogo.gif

I was reading a few tweets from GitHub today and saw that they had a few new features that need Git 1.6.6+, and it got me to wondering: What version am I on, and what's the latest? I thought I was on 1.6.5.something, but I wasn't sure. So I decided to check. Simple enough.

Because I had tried the "build it yourself" for Mac OS X 10.3.9, I knew that with 10.5, I'd used the git-osx-installer that's hosted at Google Code. I looked there and saw that the 'current' version was 1.7.0.3, and I did a simple:

  $ git --version
  git version 1.6.5.2

OK... we have some work to do.

I got the package from Google Code, and then simply installed it. I'd done it before, so I didn't have to worry about the MANPATH and other things, I just needed to update it.

Now I get:

  $ git --version
  git version 1.7.0.3

and I can take advantage of the new features on GitHub.

I just need to remember to update my machines at home as well. Gotta do that tonight.

UPDATE: Interesting... according to the Git website, the "current" version is 1.7.0.5. That's OK, I'm a lot more current with 1.7.0.3 than 1.6.5.2.

Getting Spun Up Again

Tuesday, April 20th, 2010

Today the pod is still as quiet as a cemetery - primarily, I believe, because of the "issue" that occurred yesterday between my manager, Ralph, and myself, that I wrote about yesterday. Looking back at it, there was bound to come a time when we were going to have a clash like this. If he's convinced that he can code better than I can (and that was what this was really all about), then it was going to come up sooner or later. I'm glad it's out there, but it does tend to put a damper on the group dynamic for a while.

This morning I'm trying to get spun up and excited about being here, for as long as I'm here - or maybe as long as Ralph's my manager here, I'm open to all kinds of ideas now. Anyway, I'm doing some of the work Ralph asked me to do this month, and it was actually a little fun, which is great, as that's just what I needed.

Then I started updating the release notes for my web app and things dipped again.

One of the problems voiced by me as well as Ralph's managers is that he's asking me to build things that no one asks for. He's really doing speculative development, which isn't bad if it's small things like workflow changes, or helpful features, but when it's wholesale new data sets and features, it can cause problems. Such was the case this morning.

I have written a new component to the web app, and it's based on data that we can't possibly hold right now. We've had a database on order for months, memory on order for weeks, and it's taking a long time to get these things in house and installed. While I don't resent any of that, I do resent the idea that Ralph expects me to write the new features on hardware we don't have.

It's not really a compliment, it's an annoyance. It's arrogance on his part, because I'm telling him not to push, but he's saying "do it anyway". The result is, of course, that I'm doing the best I can, but on very limited data sets, so that when he looks at my work, it's all about "now switch it to this one... now this one..." in order to get the value without having to do his job of tracking down the acquisition of resources.

But I try to let that pass because, in the end, he's made my life easier for having made it clear I can't work with him long-term.

But when it rains, it pours.

His next brilliant idea is marketing.

He believes that we need to work to get more folks in The Shop using the application we have developed. Now technically, he agrees that the only customers we have are very satisfied with the work we've done, but that's not good enough. Still, if someone outside our customer group asks for something, I do my best to provide it to them. Again, that's not enough. His next goal is to get user who don't need our application to use it.

He wants is to market the application to internal users.

Now if this mattered to our group's existence, I'd say "OK, let's get out the mass-mailers", but it doesn't. In fact, Ralph has already been accused of doing too much with the platform by his managers. We have already gotten rave reviews by everyone, but still that's not enough.

I'm convinced it's about visibility and recognition. I can see that Ralph can't get enough of either, but I have no idea what happened in his past to make him this way. What I can say is that I'm all for new users using my stuff. I think that's great. But I've done marketing. I'll do some, but that's not what I'm going to want to do for several hours every week. I'd rather be talking to our real users and seeing if I can help them.

It's hard to get excited about your job when you're in a situation like this.

The Deciding Factor

Monday, April 19th, 2010

There are a lot of times in my life when I'm really on the fence about something. I want to get the new 17" Unibody MacBook Pro with the quad cores and the 512GB SSD, but we're trying to sell our house and move to Naperville, and I think maybe I should hold off until we're moved, and see how things look then. On the fence.

I've been on the fence for the last several months about what to do about my position in The Shop. I've entertained the idea of leaving, and I've talked to the management about my concerns that might move me to make that decision. I've asked for relief - in the form of working at home for a while, and that was rejected as I was considered too vital to the team to allow the remote work option. Again, on the fence.

There's a lot to like about The Shop. There are plenty of people I enjoy in a lot of different spots. There's a new pseudo-CTO that has promised a "cut 10%" policy that promises to get rid of the deadwood that's a significant problem here. He's also understanding of the fact that there are serious problems in such fundamental things as the market data, and is working to address them. There's a lot to like, and a reason to think it's going to steadily get better.

But then there's the one really significant downside: I work directly for Ralph.

On a normal day, Ralph is a micromanaging, untrusting, manager that believes he's always the smartest one in the room. And while I agree with these words, they were first spoken to me by Ralph's managers. It's not a good situation, but when Ralph is busy in meetings, or quietly working on something else, it's easy to forget he's sitting six feet to my right. But when he chooses to assert his management over me, it can get very uncomfortable.

I was raised with a serious work ethic, and respect for those over you. Not that I would hold doors for Ralph if I saw him out on the street - but in the workplace, he's the manager, and the organization has made that decision, and deserves my obedience to that decision. If I don't like it, I am always free to pick up and leave. That's my choice.

So I'm again on the fence. If Ralph is quiet, it's not too bad to do my job and get some decent measure of satisfaction, and go home at night feeling that I offered a great service to the company for the salary they paid me. Even when Ralph is asking me to check on a few things, or add a few things, it's something I can handle. But when he goes off on one of his micromanaging binges, it's hard to keep my mouth shut.

Such was the case today.

Today, he was trying to find out the reason some group's end-of-day P/L wasn't matching what we had, and wanted to have me make some changes to the system we have that generates our numbers. I tried to explain that the difference between what we had and what he wanted was a design decision - specifically, there were a few "prices" we could use for a future, and the difference was between two, and we were using one, and the change would move to the other.

The problem would be that this would impact a lot of people, and the reason that the one was chosen in the first place (by the original developer) is now totally lost because he doesn't remember, and didn't comment why he did it. I was trying to explain that I didn't know why the system was the way it was, and Ralph get pretty testy.

"Can you send me the code?" he asked. 'Sure', I thought... with absolutely no coding experience in Java (limited to Matlab and Excel), he's got no chance to actually figure this out. I'll send him the files out of the SVN repository - even sending him different revisions of the file to show what I meant: the change was made, but the "why" was missing.

After a few minutes, I hear over my shoulder: "Bob, what's the code doing here?" I turn to see that he's got the latest code up and focusing on the location I highlighted in the email with the links to same. I got a little frustrated, but said nothing. I rolled over, and I'm guessing it showed on my face, or in my tone, but after about 30 seconds of me explaining the code to someone that doesn't know an object from a chair, he said rather loudly: "Hey! I need you to clam down!"

"Ralph" I said, "I'm frustrated because I feel that you don't trust me."

"Do you know the answer to the problem?" He asked me. "No? Then I think I might, so I wanted to look at the code."

Now this is a guy that's got no idea of what Java is. He doesn't understand references, objects, links, he's well intentioned, but clueless, in this regard. I try to explain a few things to him and he's not getting it. I have to explain several times over. It's getting out of hand.

In the end, he tells me to remove several lines of code (I suggested we not do that), and even get rid of error messages that he says are not errors at all. I realize that Ralph has gone off the deep end, and it's not worth having any further conversations with him. I agree to do what he's asked, do it and am done with it.

After about 15 mins, I realized this was a blessing in disguise. Ralph got me off the fence. He made it a very black and white decision for me: stay here and work with him, or go to a place that's actually nice to work.

No question.

When I made that decision, I was actually happy that the blow-up happened. Yeah, it was noisy, and yeah, it was out there in front of the entire group, but in the end, he made it possible for me to make a solid decision.

Thanks, Ralph. You made it easy on me.

DataGraph 2.2 is Out

Monday, April 19th, 2010

This morning I saw that DataGraph 2.2 was out, and while I haven't been pushing that too much, it's nice to see the significant improvements that he's been making in the application and framework as time goes on. It's also very interesting to me that a significant portion of his libraries are in C++. Interesting.

Anyway, great to see the improvements.

Fantastic Take on the DIfference Between Intelligence and Stupidity

Thursday, April 15th, 2010

This morning Gruber had a re-tweet about the real take on stupidity, and the original tweeter referenced this Wikipedia page. It's priceless.

It talks about the reason that so many uneducated (stupid) people are so sure of themselves, and so many really intelligent people are not. The crux, in my opinion, is that those with more knowledge know how much they don't know. Those that know very little feel they have it all pretty much under control.

Yeah.

From the article:

The unskilled therefore suffer from illusory superiority, rating their own ability as above average, much higher than in actuality; by contrast the highly skilled underrate their abilities, suffering from illusory inferiority. This leads to a perverse result where less competent people will rate their own ability higher than more competent people.

which also includes this fabulous quote from Bertrand Russell:

The trouble with the world is that the stupid are cocksure and the intelligent are full of doubt. -- Bertrand Russell

This helps me feel much better about what I've been feeling lately. It made me giggle... it's made me feel much better about where I've been, where I'm going, and how I'm going to get there. What a lift.

Skitch 1.0b8.6 is Out

Thursday, April 15th, 2010

Skitch.jpg

This morning after I updated with the Security Update 2010-003, I noticed that Skitch said the beta period had expired and I needed to update. Yikes! I'd hate to be without Skitch, and I typically get these updates long before the beta expires. So I immediately updated and while it took a lot longer than normal (maybe a ton of people in the same boat as me?) it was back up and running.

It's far far too valuable in what I do to not have Skitch.

Apple Releases Security Update 2010-003 for Mac OS X 10.6.3

Thursday, April 15th, 2010

This morning I noticed that Apple released Security Update 2010-003 on Software Updates for the expressed purpose of fixing the remote code exploit in the Font handling. Pretty amazing that someone found that - in the fonts, of all places, but hey, if it's there, they will probably find it.

It's a touch annoying to have to reboot the box, but that's what it takes.

A New First: Being Asked to Not Use Boolean Algebra

Wednesday, April 14th, 2010

Crazy Lemon the Coder

Today I had the very uncomfortable first of a co-worker coming up to me and telling me that they couldn't understand the code I'd written. It contained boolean algebra, and while it's not as easy as '1 + 1', it's not a lot harder to anyone that's been actually trained in the field of programming.

The code in question was using bit-mapped flags like the following:

  public static long ERROR_404          = (1 << 0);
  public static long ERROR_408          = (1 << 1);
  public static long ERROR_500          = (1 << 2);
  public static long CONNECTION_REFUSED = (1 << 3);
 
  // set up which errors you don't want to log
  long  ignoreErrs = ERROR_404 | CONNECTION_REFUSED;
 
  try {
    // ...snip...
  } catch (FileNotFoundException fnfe) {
    if ((ignoreErrs & ERROR_404) == 0) {
      log.error("Got an Error 404 (FileNotFoundException)!");
    }
  }

where it's clear that we don't need a full integer for each of the errors I wish to not log. Just a bit. Which makes perfect sense - so long as the number of errors you're trapping for are less than the bits in a Java long datatype. But in our case, it was jsut fine - I think we had a total of five errors to look for.

So my co-worker was clearly flustered about the code that allowed for the selective logging of each error type. They didn't understand that the code snippet:

  if ((bunchOfFlags & aMask) != 0) {
    // ...blah...
  }

is just saying: "If the aMask bit is set in the bunchOfFlags". It's a simple true/false condition, that (unfortunately) Java won't allow to be written:

  (bunchOfFlags & aMask)

because it says it can't compare a long to a boolean. Ugh... OK, fine. I'll put in the == 0 and Java will be happy. Still... I'll admit it's a little trickier when you're working with "negative logic" like what errors not to log, but really... is it all that hard?

Clearly, the answer is Yes for this person.

So I spent some time today, and I'm sure I'll need to finish it up in the morning because the big motivation for this level of control over the logging is my belief that errors in the log of any application should be a call to action and not "noise". Unfortunately, this isn't universally agreed in the group, and we have people that want to see errors that they have no intention of putting a halt to, where as I want that particular noise eliminated.

But being asked to remove boolean algebra from my code... that's a first. Amazing.

It’s Amazing How Shameful Some Folks Can Be

Wednesday, April 14th, 2010

This afternoon, Gruber tweeted about this article from a writer I'd never heard of. I decided to read it and was stunned by the complete and utter lack of understanding about the human condition displayed by the writer.

He said:

David Brooks: Yes. I was going to say that for the first time in human history, rich people work longer hours than middle class or poor people. How do you construct a rich versus poor narrative when the rich are more industrious?

I mean really? To think that the rich actually work harder than the poor? What planet is this guy on? Clearly, he's never worked manual labor on a construction site. I've done that. Not even close, baby.

Thankfully, he's shown to be the ridiculous idiot he clearly is. But still... this is the kind of slop that gets the Republicans voting for Sarah Palin. Yikes.