Programmer Testing

One issue about hiring programmers is how to test their technical competencies. If you merely look at their CV, that is only part of the story. I would like to propose a simple way to actually test their ability to problem solve by writing a program.

There are many on-line testing sites available. However, these are all language dependent. Therefore, a programmer’s experience in the language does make a difference. Hiring for a narrow language is a bad idea and it’s better to test on general logic capabilities.

This is where I think that something like the LLVM intermediate language is useful. It is unlikely that anyone has ever learned to use that language before as it is exclusively generated by the compiler. Therefore, this eliminates any language bias that may inadvertently affect the candidates.

To be fair, I think that the candidate should be assigned the tasks and given a suitable time frame to learn the language and complete the task as necessary. I believe that a one-week time-frame should be sufficient to learn enough of the language to write simple programs. This also tests the ability of the candidate to pick up new languages, which is a necessity in our line.

It is also a powerful enough language to do anything. So, the programming tests can be designed to be as easy or as complicated as necessary.

Furthermore, it is an actual programming language that can be compiled into real machine code. This allows the written programs to be tested for functionality as well as performance. It is possible to throw a barrage of test cases at the generated application to see how it performs. The entire system can even be run in a sandbox.

The only thing that is needed then, is an interface to the system. Technically speaking, the candidates can use whatever text editor that they want, and they would only need to upload the code to a centralised testing server, which would then compile and test the code.

For testing digital design skills, an equivalent method can be drawn from using a dead meta language like Confluent. It is, again, highly unlikely that any person has had much experience with the language. The output can be used to generate syntactically correct Verilog/VHDL and tested with standard tools.

I think that this would be a cool project to work on, if I only had the time. Maybe it’s time to hire another intern to do it.

Ubuntu 12.04 LTS with Missing Dota2 Textures

There is a pretty well known bug with Dota2 under Linux on Intel graphics hardware. Essentially, models textures are missing as can be seen from the screenshot below:

I had at first tried installing lts-raring hardware enablement but that did not solve the problem and created new ones with my hardware. According to the bug-report, the problem was solved in Mesa 9.1.5 but lts-raring came with 9.1.4 only.

So, I downgraded back to lts-quantal and looked for another solution.

In the end, all I had to do was to add a 3rd party PPA to solve the problem:

# apt-add-repository ppa:glasen/intel-driver
# apt-get update
# apt-get -y dist-upgrade

This would install the Mesa 9.1.6 and Intel drivers, which solved the problem.

Now, I get to experience Dota2 in all its glory!

Quantal to Raring Upgrade

I faced the same Quantal to Raring upgrade problem on Ubuntu 12.04 LTS with Hardware Enablement as reported here.

In order to get it to work, I had to remove Xorg for Quantal then upgrade everything to Raring. I did this from the command line terminal:

$ service lightdm stop
$ apt-get autoremove xserver-xorg-lts-quantal
$ apt-get --install-recommends install linux-generic-lts-raring xserver-xorg-lts-raring libgl1-mesa-glx-lts-raring
$ apt-get install linux-tools-lts-raring

That was it. Upgraded to LTS-Raring hardware enablement kernel and Xorg.

PS: The only issue with this upgrade was that I lost back-light control on my XPS13 laptop as reported here.

RTL8192CU Issues

The TL-WN725N nano dongle is a cheap way to get 802.11n wireless connections up. However, the RTL8192CU chipset has issues under Linux.

After a whole day of trouble-shooting and digging, the best solution that I came to is this: use the driver supplied by Realtek!

First, the built-in kernel driver rtl8192cu needs to be disabled.

$ echo "blacklist rtl8192cu" >> /etc/modprobe.d/rtl8192cu.conf

Next, download, unzip and build the Realtek driver. Just run the included script.

$ bash

That’s it! All other configurations as per usual.

HP ML110 G7 Fan Noise

I love the fact that HP sells servers retail in Malaysia. It’s so convenient to just pick one up from the local store instead of going through all the procedures of issuing a PO etc.

However, the ML110 G7 that I picked up a couple of weeks ago, has one rather major problem – its fans run at full speed all the time.

Granted, the server room in the office is not air-conditioned but I keep the windows open for natural ventilation. The temperature itself is just normal room temperature, as confirmed by the air-intake sensors of the server.

Although the server is the main work-horse of the entire office, it’s a small office and the work-load isn’t heavy. Most of the time, the load average is only at about 11% with the CPU clocked down to the slowest possible speed.

So, it was a pain to find that the three fans were running at a 100%:84%:10% ratio all the time. There’s no real reason to do this since the temperatures are all within a very reasonable range.

Now this wouldn’t be too much of a problem except that the fans running at those speeds sound like a jet plane taking off. It’s a small office and the noise is noticeable above the air-conditioner’s even though it sits in its own room.

It took me a little bit of sleuthing and experimenting but the final trick that did it was to simply upgrade both the BIOS (10-Aug-2012) and ILO (1.50) firmware to the latest versions.

Now, the fans only hover at a very reasonable 78%:66%:11% ratio on a very hot afternoon.

Disappearing User Dirs

My current setup places the user’s home directory in a glusterfs volume. This causes problems with a recent Ubuntu 12.04 update and a user’s XDG user directories get reset to $HOME during the X11 login. It only happens for X11 logins and not shell/ssh logins.

A quick fix to this issue is to do the following:

  • Make a copy of the existing X11 session XDG configuration.
  1. # cp /etc/X11/Xsession.d/60xdg-user-dirs-update /etc/X11/Xsession.d/61xdg-user-dirs-update
  • Edit the copy to force the user directories to their defaults.
  • # nano /etc/X11/Xsession.d/61xdg-user-dirs-updateif [ -x /usr/bin/xdg-user-dirs-update ]; then
    /usr/bin/xdg-user-dirs-update --force