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 10.255.120.119
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.

Well, that was a huge waste of time

I noticed my picture gallery was showing a couple of albums twice, and when you clicked either of them, you got an error page. After trying about a million different things from various FAQs and from a guy who was being very helpful in the forums, I finally discovered something strange: the table g2_itemattributesmap had many duplicate entries. I deleted one of the dups (and manually reentered one, because there was no primary key or other way to uniquely identify one of the rows), one of the duplicate albums stopped showing twice, and when you clicked on it it worked correctly. So I did the same with another row, and suddenly the main page of the gallery stopped working. Oops. But in for a penny, in for a pound, so I continued on with the other duplicates and when I finished everything was working great.

I’m a little concerned about how this might have happened before. One thing I’ve noticed using Gallery is that the developers mainly seem to work in MySQL, and PostgreSQL (which I use) appears to be an after thought. And if there is one thing I know about MySQL, it’s that it implements a smaller subset of SQL than PostgreSQL, and it does some incredibly bizarre things that violate the SQL standard, especially when it comes to nulls. So I’m not surprised that MySQL-focussed developers don’t add unique contraints to a database table where the presence of duplicates causes things to break badly. I wouldn’t be surprised if MySQL doesn’t even support unique contraints correctly.

iPhone location data

Much has been made today about the fact that iPhones evidently collect some location data and store it in your backup files. I’ve only had my iPhone for a few weeks so it might be interesting to see what it’s collected so far.

Overview
All the location data for my phone
This is all the data on my phone. Although I’ve driven to Ithaca and back with the GPS on, and driven around Rochester with the GPS on, the data seems far too regular and grid like to correspond to anywhere I’ve actually been. There is a cluster of points in and around the town of Auburn NY, even though I haven’t been nearer than about 10 miles from there. There is a small smattering of points along the route between Rochester and Ithaca, but not what you’d call a smoking gun showing where I’ve been.

Rochester
Zoomed in on Rochester
Here I’ve zoomed in on Rochester, and I defy you to find some correlation between the position or size of those dots and where I’ve been since buying the phone, especially where I live.

The regularity of the grid makes me think that either the iPhone data or the analysis program is doing some sort of grouping of the data into regular intervals. Either way, I’m not sweating this.

Continuing Saga, last (I hope) episode

Continued from here. I got the disks out to the colo facility, and swapped them in. At first, things didn’t come up right because it didn’t have a network. Funny, because I’d remembered to fix /etc/network/interfaces and /etc/resolv.conf back to the values they need in the colo facility before I’d shut down at home. Grepping through the dmesg results showed that for some reason, eth0 had been renamed to eth2 and eth1 had been renamed to eth3. Something tickled my memory about the last time I’d been through this – it remembered the MAC addresses on the machine you set it up on, so when it boots the new machine it thinks “aha, I already know where eth0 and eth1 are, so these new MAC addresses need to be mapped somewhere else”. Unfortunately my own blog was down, so I couldn’t find what I’d written about this before, but a quick google on my iPhone and I removed /etc/udev/rules.d/70-persistent-net.rules, and rebooted, and it all came up.

Made sure I was talking to the net, and I could ssh into it from home, and then started up the guest domains. Made sure they were up and talking to the net as well. Made sure one of my web sites showed up on my iPhone. Buttoned up and went home.

Once I got home, I made some further checks that everything was up. As far as I can tell, it is. Now to run tiobench on the updated system.

Let’s have a look at some of these compared to the results I got with the Caviar Green disks running on the same hardware.

Test Old New
Sequential Read best rate 44.49 168.26
Random Read best rate 0.39 1.37
Read Max Latency 1036.44 743.22
Sequential Write best rate 10.36 82.46
Random Write best rate 0.09 1.76
Write Max Latency 143896.67 1748.55

Basically the huge latency will be the biggest difference. I don’t know if that’s because of the WD Caviar Green “spin down” or because there were disk errors, but either way, it’s going to be a relief to see some performance again.

Raw results after the cut.
Continue reading “Continuing Saga, last (I hope) episode”