How to hire a programmer, a.k.a. tech recruitment explained

Today’s post is not a recipe at all. Maybe a little. More of viewpoint than a recipe. Here’s what I think the tech recruitment should look like. It won’t be cheap. And yes, I have conducted a lot of interviews in my life. Start by describing the position. Who are you looking for, what would they do for you, how would they bring money to your company. Use words, not techie talk. I found most of the job descriptions online do not match the real expectations of the employer. You just want a good programmer, a person who thinks about what they does. It really doesn’t matter if they know Haskell and you write in Erlang. I doesn’t matter if they think in asm when you’re looking for Forth. I doesn’t matter if they are Linux nerds and you’re Windows-only, if they know how a computer works. As long as they think about what they do and know what’s that for and agree with your goals, that’s perfectly fine. If you translate your desire for a good programmer into a bulletpoint list of tech words you dehumanize it. Don’t look for skillsets, look for people I say. How to check whether someone is a good programmer then ? How to score people against such a vague job description ? You don’t score people I say, you just sort the set of people. I start by a rather loose conversation. Tell me about the point in life you’re in, tell me something about what fascinates you in the programming and finally what’s your motivation for changing the job and why do you want to work with us ? Somewhere in the middle I ask about the projects, what technologies you do like, what not, why not. Do you feel comfortable teaching others ? Then the talk gets momentum. We do focus on computers finally, why should it slow down, really ? If someone is fascinated by The Machines you should already noticed that, to be honest. Same with boring people or annoying people. If you do not want to work with them then do not hire them. Even if they’re brilliant. How does the computer work then ? How does this happen that I have this text file full of strange writings and suddenly they make the computer do stuff ? Why it’s not a good idea to get the modern pc to fly a space shuttle ? What’s a stack and what’s a heap ? Is the stack memory different from the heap memory ? Why so. And the why. The most important question for me is the mighty why. Not only should they understand how something works, but more importantly why it works like that. I enjoy working with people who are microwave-curious than the hex-feared ones. How does the microwave oven heat things ? Does the DEADBEEF scare your ? Maybe it needs some heat treatment then. Talk with people, make notes. What annoys you, what impresses you. Do the exercises with them. Ask them how would they solve a simple but a reallife problem. Design the solution with them. The more lifelike the work scenario the better. Do the things you’d normally do with your work colleague. And order the set of candidates. Work as the simple max function. Take the first one and the second one,. Decide which one seems better suited for you. Then take the next one and compare her to the current max. And please hire people only when you’re ready to hire them. UPDATE. After writing this post I've stumbled on this 37signal's art . Worth reading.

Speeding up Eclipse/Aptana

As some of you know Aptana is Eclipse. And Eclipse is a Java-based IDE which means it's not particularly a speedy one. However if you have a decent amount of ram, like 4gb, it's fairly easy to speed the Eclipse up. Go ahead and find eclipse.ini or aptana.ini or other file which contents look similar. These settings are from my Linux box, I know that MacOS might be kinda scared by so high values, try lowering the Xmx and/or others in such a case.


These settings are for the 4gb ram box, try to find the ones which suit you best. MaxPermSize stands for the maximum amount of the memory to be used by the Java internals, Xms gives the amount of heap allocated on the VM start and Xmx is the heap size limit. Start with upping Xms value as it's often too small which causes the Java VM to make lots of heap resizes on the app start.

Installing MacOSX Server 10.6 on VirtualBox

It all started with my work assignment of installing MacOSX Server 10.6 on the XServe rack. Of course nothing went really well. The universe keeps on picking up the most faulty scenarios for me, I think it's just less boring. Briefly speaking, after debugging some hardware problem with the CPU temperature meter I managed to install the base OSX server system there. Hardware boy inside me is not amused with Apple's ideas there. After that I needed to set up VMs with 10.6 64bit and 10.4 32bit on top of that. Why so if already having 10.6 as the base system ? Simply I wanted to avoid constant reinstallation of the base system, as the machines are meant to be used for development and testing. Also the XServe hardware was needed instead of classic blade system to meet Apple license requirements. Having the internet read twice I decided to give VirtualBox a try. My way of thinking was that I am already familliar with that piece of software and know it as a easy to use one. In addition to being pretty idiot-proof it also enables more enterprisely features like operating from the commandline only. So what's the deal ? Bring up VirtualBox GUI, click on new virtual machine creation button, choose MacOSXServer, insert the iso file made from the installation dvd and volia ? Not even remotely close. It appears that Apple has embedded some kind of valid processors db into the system and checks the processors present against it on every boot. Fine. But I am running this thing on the Apple hardware. The only configuration I managed to install and launch was single-core. Both 32 and 64bit guests seem to be working fine. But what's the point of having many cores there if only one can be used per a VM ? As with many other interesting problems I took it home. Some time after that I found brilliant blog pair by prasys and nawcom. It seems that the latter one produces what's called ModCD which allows booting with the processor checks disabled. Recipe for amd64:

  • create new MacOSX vm in VirtualBox
  • change it to non-EFI type
  • boot ModCD
  • swap iso image for the one with the MacOS install
  • press f5
  • type -force64
  • press enter

For me the installer crashed on the last step before reboot, but then it rebooted successfully and continued on with the installation. Don't forget to donate to nawcom if you can.

How not to blog

Today's post is definitely not a tech one. Or maybe just a bit. It's about blogging, from the other side of the keyboard. PEBKAC-style. Fun-fact: Did you know that 'kac' in Polish means 'hangover' ? To the point. I realised that I have dozens of posts in the state of started but definitely not finished. Why is that so ? Is it that I am superbusy with my new work ? Kinda. Is that that I am the guy responsible for the installation of the sound system in one of the new Wrocław's clubs ? Sounds pretty serious but still not a perfect excuse. The thing is that there is no right excuse for not doing something you want to do. Do it or don't. Don't pretend to. The funny thing is that the smallest possible posts, like this, brought me the most views. I don't wanna loose you guys because I don't feel like blogging recently. Mine unfinished tech posts won't probably make it because I just don't remember what were these small tech tricks I used to solve that problems. Not even wrote them down as I was so enlightened by the superiority of my solutions. Don't do that. Take notes about everything which you would possibly need and start working on the sentences and wording. Rigth now. Go. Hit publish and let the world know. Thanks go to TC & Mark Suster.

Netbeans 6.9 for Rails 3 on Ubuntu 10.10

I am a lazy person. I do like things to just work, run out of the box, name it. I like Ubuntu for it's packaging system and ease of installation of various software. However using Netbeans from the default repo could cause you a headache when developing Rails 3 apps. These just won't run. Let us start with installing the newest version of the IDE

sudo apt-get install netbeans
#then go to the Tools->Plugins->Available and install all regarding Ruby

Now go ahead and try running some Rails app.

/var/lib/gems/1.9.1/gems/activesupport-3.0.3/lib/active_support/dependencies.rb:239:in `require': /var/lib/gems/1.9.1/gems/activesupport-3.0.3/lib/active_support/cache/mem_cache_store.rb:32: invalid multibyte escape: /[x00-x20%x7F-xFF]/ (SyntaxError)

you say ? Here's a quick fix

#edit /usr/share/netbeans/6.9/etc/netbeans.conf
#=> append to the the netbeans_default_options and volia
# the whole line im my case goes like that:
netbeans_default_options="-J-client -J-Xss2m -J-Xms32m -J-XX:PermSize=32m -J-XX:MaxPermSize=200m -J-Dapple.laf.useScreenMenuBar=true -J-Dsun.java2d.noddraw=true -J-Dsun.java2d.pmoffscreen=false"

Long term solution ? Wait for Netbeans 7.0 as the devs promised it to be fixed there

Hello Sharpdevelop

For years I've been involved in the open source community. I encouraged company managers to use open source solutions, I reported bugs, I did tests. Since this Monday I am officially a part of Sharpdevelop team, pursuing the goal of better F# support within the IDE. The project itself made has made a impressive progress last years, had MonoDevelop forked from it and has some pretty good people working on it right now. What more can I say.

VPS Adventures part two

After some not so pleasurable experiences with the previous VPS hosting provider I started my search for some other one. This time not only google was involved but also aardvark and some of the "top XX best hosting providers" sites. Two results kept showing up. server4you and tilaa. Which one to choose then ? I wanted to give both of them a chance.

server4you. I really tried to buy a VPS there and I failed. Lots of forms to fill and no instant money transfer available. I entered my credit card details only to receive the email after a day or so stating that they were unable to process my payment.

tilaa. What caught my attention there was that clean website of them. I like such a design style, as you can also see it here. Not so cheap, I must admit, but definitely easy to buy. Payment transfered and after about a minute I had a full access to the VPS. That's how I like things to work. I am using tilaa's the most simple VPS plan since then and I am pretty happy with it. Here gathered are some things I like or don't about its services.

  • friendly, responsive staff
  • 2x RAM amount of swap space - seems great compared to no swap on other VPSes
  • KVM+qemu based, you get full control of your system
  • good overall system responsiveness - I experienced occasional lags when using OpenVZ virtualization before, there's no such thing here
  • they work fast - the day the new Ubuntu 10.10 was released, they had the VPS image ready !
  • their motto "We try to be good open source citizens" just convinces me
  • the only disadvantage is the price, it's 8.95 euro net montly, it's also easy to miss that info on the site

As I already have a safe place to tinker with my system the real work on the server configuration begins. Stay tuned for the next episode.

VPS adventures part one

As every guy in the software industry I need ways to promote my humble self. A decent web page and online resume plus a blog maybe are a must these days. The question remains where to put them.

Previously I had my site published within one of the polish hosting companies for free, as my friend was involved in its operations. Thanks Kajetan for 5 years of support ! And maybe it'd stay that way if not of that desire of mine to tinker and have control of every aspect of the technology power. Some platform with ability to boot the system I want up would be appreciated.

Real servers are good when you have a place to put them. And want to pay electricity bills, provide UPS, KVM, BGP and other three-letter abbreviations. And oh, I simply don't like the fan noise anymore. VPS then it is.

Since I recently made contact with Ubuntu Server edition and liked it for its simplicity, I started searching for a cheap VPS which supports the newest Ubuntu. Two googles later I found 6$ for 25Gigs of space and 256MB RAM seemed ok, so I bougth the VPS1 plan. Payment went without problems, they support PayPal. With 6$ less on my account I was waiting for them to give me the IP + login & password. I didn't expect that I would take the whole day long.

My first contact with the machine was that of apt-get update, which failed. Because of lack of network connectivity. I was logged by ssh to that machine, so definitely some sort of connectivity had to be in place. I dug into and found not working DNS servers, so I made VPS connect to the other ones and everything started working. I jumped into their 'live' tech support line just to hear that it was really bad of me to change the resolv.conf and I just shouldn't do that. In the meanwhile their DNSes went back so I in fact did revert the resolv.conf after all.

It's OpenVZ-based hosting, so policy of "no-no's" is pretty much embedded in the very system. No kernel reinstallation. No swap space. No system clock write access. No clicking too fast in the administration panel. Never heard of such virtualization platform property. Back to google then my search for VPS is. Stay tuned for the next part.

It's raining bullets

I have always been fascinated by works of Adrian Chmielarz, from the times of Metropolis Software on. Naturally then, I am following really closely on the development of Bulletstorm. Damn, I even hoped to talk to The Guy or Mieszko Zielinski at the gameaiconf in Paris, but Alex told me that "whoa, PCF is so busy with the new IP that they didn't have time to come this year, next year they'll be here, hopefully".

Having something so deeply embedded in your mind that you're always thinking of it. While you eat, while you talk, in your sleep. That's the way I do like to work. Reading about making of Bulletstorm gives me creeps as I do feel their hyperenthusiasm about the thing, I do feel that they take this game everywhere with them. To dinner, breakfast, party. That's the way I do like to work.

Now back on track, an interview which triggered this urge to flush my thoughts here. Interview with Tanya Jessen, producer at Epic.

People make games so other people can have fun. How selfless.

Google AI Challenge

It seems that being so much into other programming things I missed the Google AI Contest announcement. It's supercool that they sponsor such challenges but also it's really uncool [so like warm ?] that apparently I won't have time to participate.

About the challenge itself - it involves working with GalconFusion-like game. Easy to learn, difficult to master type. As they provide starter packs with a sample bot it's easy to start. However, getting some decent place would involve some really long time of good old hard work.

As a side note on .NET being spread around the unix world,  there's a C# starter pack. Good. After few secs I realised that the code will be run under antique Mono 1.2.6, therefore none of my young C# friends would be there. No type inference, no linq, no other fancy stuff.  Not good.