This time I think it was the cache…

As I wrote about in 2007 in articles and , back in 2004 I wrote a cache for part of the product I was working on at Kodak. In the first release to QA, I made sure that area of the code got tested thoroughly, and they found a bug, and fortunately I got it fixed before it went out to the customers. But to my chagrin, my boss and other people on the project got it in their heads that somehow any problem anywhere near that part of the product must be the fault of my cache, even though time and time again it was proven that there were no further bugs in that code for the following 3+ years.

Now flash forward to the product I’m working on now. We have a “go live to the very important customer” happening in just a few days, and we’re supposed to be in code semi-freeze. But the “Performance Project” just put their performance cache into the product, evidently without giving the local QA much chance to test it before it went to the customer’s QA. That seems just a little bit dangerous to me. But no matter, they assure me they’ve written tons of unit tests. So what could possibly go wrong?

Today the customer called up saying that they’re setting up a new client on the admin site, but every time they go to the “branding setup” for that new client, they see some other client’s branding setup. This branding consists of things like the client logo and some “terms and conditions” text and the like. Since they’ve got literally hundreds of QA people hitting this site, I naturally wondered if they weren’t seeing some interaction between multiple people messing with the setup. But after hours of poking around on their site, one of my peers and I (neither of us members of the “Performance Product”, I might add) are convinced it’s the performance cache. Evidently if you use one browser to look at one client’s branding, and then use a different browser to look at the branding of the client who hasn’t been setup yet, you see the branding from the client that you’d looked at in the first browser. Somehow the cache is reacting to the absence of information in the database for a client by pulling up information from some other client out of the cache. That’s not good.

Hopefully that will get fixed, and hopefully somebody will set up a test plan that actually tests what the cache does not just on a cache miss, but also on a database miss as well. And hopefully the important customer won’t think we’re all a bunch of idiots for not testing this properly.

My new system

Back in 2007, I build a new box, mostly to act as my home server. It’s been a pretty decent home server, and I hadn’t really seen the need to upgrade it. But recently, my laptop, which has been my “everything desktop” machine was showing signs of not having enough RAM for everything I do with it. Mostly because every few days I’ll notice that Microsoft’s Remote Desktop Client (RDC) is grabbing absurd amounts of RAM – I’ll notice things getting slow, see that RDC is using 1 Gb of RAM, then look back in 2 minutes and see it’s up to 1.2 Gb. Since the laptop is topped out at 4Gb of RAM, there’s nothing more I can do about the lack of RAM, except stop trying to use it for my work and my personal stuff.

So I hit on the idea of using my home server as a home desktop. I’d used it once before when my laptop was in the shop, and so I knew I could open a VPN and remote desktop into work. There were only two problems with it – it had less RAM than my laptop, and it couldn’t support 2 monitors. So I had a few choices:

  • Max out its RAM (I think it could support 8Gb) and buy a new video card
  • Replace motherboard/RAM/CPU/Video card with something more modern
  • Buy an entirely new Linux computer
  • Buy a Mac Pro

Unfortunately, the Mac Pro is *way* expensive. A new Linux computer would cost a hair over $1000, but an equivalent Mac Pro would be over $2500. I decided to re-use the old box’s case, power supply (more on that later) and disks, and just replace the motherboard, RAM, CPU and video card. I spec’ed out a bundle from my go-to supplier, J & N Computer Services:

I also bought a second LCD monitor, this one a 24″ ViewSonic to go with my 24″ Dell. The bundle from JNCS was about $745 and the monitor was about $170.

Frankly, the extra CPU is probably not all that important, since I’ve never been CPU bound before and I didn’t see that becoming a problem. But you can never have too much RAM, and 16Gb has me thinking that I might be able to run my development environment, Websphere and Oracle here instead of RDC into work. Maybe I can even run a VirtualBox or two.

Anyway, I got all that home and was setting it up, and discovered that the “connector conspiracy” has been at work again. The old power supply had a 20 pin, two 4 pin and one 6 pin power connector. The smaller ones are all pairs of +12VDC and ground. The new motherboard required the 20 pin and one of the 4 pins in the main socket, and then an 8 pin connector in the auxiliary socket. The 6 pin connector was keyed so I couldn’t use it in the 8 pin socket, and there were dire warnings about not running it with just the 4 pin. So I ran down the road to FrozenCPU and got a PC Power and Cooling “Silencer Mk II” 650W supply to replace the CoolerMaster 500 that probably would have been perfectly adequate for the job if the connectors lined up.

Anyway, as is my custom, here’s a comparison:

Old Machine New Machine
Processor 1 64 bit dual core Intel Core2 Duo E6320 1.82GHz 4MB cache 1 64 bit Quad Core Intel i7-2600K LGA-1155 3.4GHz 8MB cache
RAM 2 1Gb DDR2-800 RAM 4 4Gb DDR3-1333 Kingston RAM
Disks 2x500Gb SATA-II, 2x1Tb SATA-II 2x500Gb SATA-II, 2x1Tb SATA-II
Ports 6xUSB 2.0, 2 Firewire, 10/100/1000 Ethernet, Serial, Parallel, 6xSATA-II, Audio, Video 2xUSB 3.0, 12xUSB 2.0, 2 Firewire, GigE Ethernet, PS/2, 2xSATA 6Gb/s, 4xSATA 3Gb/s, Audio, Video, DVI, Display Port, HDMI, etc.
Fans 2 12mm case fans, 1 7mm heat sink fan, 1 12mm power supply fan 2 12mm case fans, 1 7mm heat sink fan, 1 12mm power supply fan

After I got it set up, I discovered a couple of problems.

The first problem was trying to get the second monitor set up. The “non-free” drivers in Ubuntu didn’t support this video card. I had a hell of a time getting the binary drivers from the nVidia web site to load – basically instead of just running the “.run” file that you download, I had to extract it with “–extract-only” and then run it and run it again with the “-K” option, or something like that. Whatever I did, it was a mixture of black magic and cargo culting, and it eventually worked. I had to borrow the HDMI cable off the DVD player, but we use the DVD player so infrequently that we hadn’t noticed that the cable had fallen off and had cobwebs on it.

The second problem I discovered is that a /tmp partition sized for server use isn’t big enough for interactive use – especially when you watch youtube videos (it appears to cache them in /tmp). Fortunately I used lvm, so it was possible to resize the partition. The only problem was figuring out how to boot in single user mode so I could do it without /tmp being in use.

I’m still trying to figure out how to set up the VPN tunnel to work. I copied the config files I use on the MacBook, and I copied the setup I used back when I used the Linux box to VPN into our old location in Genoa, but I couldn’t get it to work. Eventually I got it so I can open a VPN using the command line “sudo openvpn –config ~/ovpn/dmr.ovpn”. What I need to do next is figure out how I can simultaneously open a second VPN to Genoa, because our SVN server lives there and I want to be able to check stuff from there.

I also had a bit of a problem with the remote desktop client. When I first set up things, I’d open the remote desktop client “full screen”, and it would only take up one of my two screens. But I made a few minor changes (or so I thought) to my configuration, and now when I specify “full screen”, it covers both screens, which I don’t want. Fullscreen other apps only takes up one screen. So again, I resort to the command line.
rdesktop -g '1920x1080' -D -r sound:local:driver:oss -r clipboard:PRIMARYCLIPBOARD
Unfortunately that usually ends up on screen 1 instead of screen 2, so I have to do some tricks to make it work. Also, every now and then cut and paste stops working in the session, even within Windows. In that case, I have to use the Task Manager, find the “rdpclip.exe” process and kill it. That gets cut and paste working within Windows, but unfortunately kills cut and paste between Linux and Windows.

Last night I upgraded Ubuntu from 10.04LTS to 11.04 to see if it would help the rdesktop and some other minor issues. We’ll see.

Yeah, I think I’ll pass

As an hourly rate contract programmer, I feel it necessary to always keep my eye on the local tech job postings, and apply for anything that looks interesting. Because there is no job security in my position, my goal is always to be ready to take something else either before or as soon as possible after my existing job ends. That means not just looking to see if there is anything better than what I’ve got now, but also making sure my resume is still attracting attention and making sure my interview skills are honed and practiced.

I’d never take an interview just for the sake of an interview, though. I always intend that if the job is sufficiently good, I’ll take it. (But “sufficiently good” will vary depending on how much I like my current job and how secure I feel in it.) It just wouldn’t be fair to the other people to waste their time just for the sake of practice. But because you can’t get a full sense of how good a job is just from a description on Monster or LinkedIn, though, you may not know if the job is one you’d take until you’ve been there and talked to the other developers and managers about the project. That’s especially true if you’re going through a head hunter because they try to hide details from you so you don’t bypass them and apply directly. (I’ll bypass the rant about the time that the head hunter hid the minor little detail that the job was only open to US citizens until after I’d accepted the job and handed in my resignation on my current job.)

I saw this ad on LinkedIn. It was pretty vague, so I asked about it. The person gave me a few more details so I sent her a resume. The only problem is that their main line of business is SEO (Search Engine Optimization) and SMM (Social Media Management). That’s a bit of a red flag – there are two ways of doing SEO and SMM, the ethical way, and the “spam every blog and forum and Facebook and Twitter with links to your site” evil way. So I knew I’d be spending any interaction with them examining them minutely for any sign of which side of the fence they sit.

I got an invitation to an interview. Ok, I hadn’t noticed before that they are in Buffalo, not in Rochester. That’s not a deal breaker, but I’m not happy about it. They also sent a “Employment Application”, and it’s a typical one you see from certain companies that look like they wrote it for every position in the company from janitor to CEO. I find it slightly insulting to be asked if I have any “Special skills” with checkboxes including Word and Internet Explorer as special skills. As far as I, or just about any other software developer in the world, is concerned, the only special skill you need with IE is how to use it to download a real browser. Again, not a red flag, but annoying.

And then I got to the “Consent and Disclosure Form”. The form asked for permission to produce this “investigative consumer report” for processing my application. It said “the report may include, but is not limited to, searches of … financial or credit agencies; criminal history information… and motor vehicle records”. It authorizes them to do this report “now, or at any time while I am employed by the Company”.

I wrote the HR person back and said I’m not interested in signing away those sort of rights to a company before I’ve even talked to them. She insisted that they wouldn’t actually do the search until after they’d made a conditional offer and accepted it, and said that they wouldn’t actually look for credit information or motor vehicle records. To which I replied that if they don’t want those rights, don’t make people sign papers giving them to them, and reiterated that I wasn’t coming to interview with them.

New Years Resolutions

Start this off with a look back at last years, because for once I did a pretty fair job.

Here are my resolutions from last year:

break 20 minutes in the Baycreek time trial
I actually broke 19 minutes, so chalk that one up as a win.
finish the Long Lake Long Boat Regatta long race (9 miles)
I didn’t just finish, I came in 5 seconds behind Mike Finear, after dragging him in my wake for several miles. Another win.
figure out if I want to continue flying or not.
Gave up flying, didn’t really miss it. Found myself obsessing over every mistake I ever made in the air and about how blasé I was about the danger at the time. Trying to tell myself that’s because I was on my game back then so I could handle it, and now I’m out of practice I wouldn’t handle it so easily if it happened now. Can’t tell if that means I should never go back, or if I need to really practice a lot if I go back.
develop an ajax web site, using either GWT or jquery or ruby on rails or something
I started an iPhone app, but hit a snag and put it aside. Realized that the GWT web site would be a better help with my job search, and made some half decent progress on this before I actually got a job.
That went pretty well. Between February and June I lost 40 pounds and then hit a plateau. Unfortunately it’s the same plateau I hit every time I go on a diet. Spend most of the fall still within spitting distance of being on the diet (it’s hard to be strict when you’re home all day) but not losing any weight. However, I think I was building some muscle mass in my arms and core, so maybe it wasn’t all that bad. Managed to gain 10 pounds of it back between Thanksgiving and now. Still a win, I think.
Yeah, pretty much. I started out the year being barely able to paddle 2 miles, and now a 10 mile workout holds no terror for me. Still trying to figure out how to keep that fitness over the off season. (Yeah, I know, “Off season? What’s that?” – getting out to paddle once in a blue moon is no substitute for paddling three or four times a week)
get a better job
Well, it took until a week before Christmas, but I got a decent contract job. Hopefully it will lead to more decent jobs.
once more subject myself to the psychological torture of trying to get more treatment for my pain
I didn’t actually do anything about this one. But between not having to sit at a desk, not having to drive much, losing weight and exercising more, my knees weren’t that bad. Of course after a week of driving 3 hours a day to my new job, my knees are now the worst they’ve been since back when I used to drive to Ottawa twice a month. Hopefully that will recover now that I’m working more from home.
How about 1920×1080 on the left, and 1920×1200 on the right. Now *that* is resolution, baby!

That was the year that was. This is my list for this year:

  • Break 17:30 in the Baycreek Time Trial. I’d like to break 17, but I think 17:30 is more attainable.
  • Join NYMCRA and start competing for points. I’d like to do at least 5 of the points races this year, but they haven’t put out the 2010 calendar yet so I don’t know which ones those will be. Last year I did Tupper Lake, Armond Bassett, and Long Lake, and I could easily extend that to 5 by doing Round The Mountain or Bear Mountain and the long course at the Rochester Open Water Challenge. I probably won’t get a lot of points, because unlike the other guys I don’t get any handicap points because I’m not over 50 and my Thunderbolt is Unlimited Class. If I’m reading the points system right, at Long Lake I would have gotten 85 points because although I was only 5 seconds behind Mike F, he got handicap time for being in an EFT, a Touring Class boat and time for being over 50, so his adjusted time is 3:34 ahead of me. Competing for points might add a new twist to races, but mostly I see it as a reason to go to more races.
  • Start building up my training volume. This year my GPS recorded 670 miles of kayaking, and that’s not including the early part of the season before I bought it, and the few times I forgot to charge the damn thing. I’d like to increase both the number of paddles and the length of them. If I can manage a few 20 mile plus days, I’d be slowly working towards doing the “90 Miler”, maybe in 2011 as a 50th birthday thing.
  • Get the diet back on track and try to break through this plateau I was stuck at this fall.
  • Finish revamping my site into GWT so it doesn’t look like something designed in 1992, which it probably was.
  • Figure out the GRIB thing that Laurie wants me to do.
  • Hold onto this job, or find another one quickly when it ends.
  • And that’s about it for the public ones.

Hopefully I’ll do as well this year as I did last.

Impressions after a few days at work

My office
Woo hoo, I have a job!

A few short impressions from 2.5 days of work:

  • The drive sucks. It’s about an hour and forty minutes each way, and today it was snowing so it was a bit longer. I’m going through a tank full of gas every two days, which even with a Prius seems expensive. They told me in the interview I’ll be able to start working from home soon, so I’ve got to get that set up.
  • The construction trailer I work in sucks. I sit next to the door, and it’s cold and drafty, even when people remember to close it behind them. Right behind me is a meeting room with paper thin walls where everybody uses the speaker phone. Worse still, the heater outlet is there so most times when the meeting is on, people turn off the heater. If we’re lucky, they remember to turn it back on afterwards, but yesterday we didn’t discover that nobody had turned on the heater until my toes were about to drop off.
  • My computer has two screens. I had two big screens when I was at Kodak, and I’d forgotten how useful that is when you’re programming to be able to devote an entire screen to Eclipse while you used the other window for running the app, as well as other web browsing and the like. As soon as I have my first paycheck, I think I’m going to buy a cheap LCD panel for my home office.
  • The pace is hectic. My supervisor never has time to show me anything, but he’s expecting results immediately. That can be frustrating. On the other hand, it’s good to have something to do and a project where things actually happen.
  • They wrote their own web framework. As if the world doesn’t have enough Java web frameworks, they wrote their own. And it has its good points and bad points. Each page starts with an XML page description document and an XSLT document. But it’s not what you think – the XSLT document doesn’t process that page description document. Instead, the page description document specifies the Java beans that either produce or consume nodes in a different XML document, which the XSLT document then processes into an HTML page. The forward and back buttons on the browser don’t work on many of their pages, for reasons I don’t entirely understand yet. They use Javascript a lot. I’m going to come out of here with a lot of experience in XSLT and JQuery, I hope.
  • The company seems equally split between people who are friendly and helpful, and people who refuse to look up when you speak to them. Fortunately it appears I’m mostly going to be working with people in the first category.
  • I’m genuinely getting a good feeling about working here. It’s such a refreshing change from the place I worked last winter.