Coding – home vs work

One thing many of my non-developer friends ask me is why I would code at home when I do the same for work. For me, there is a world of difference between coding at home and coding at work.

Coding at work means that you are basically stuck with the technology and project that management decided. If you are lucky, you might be part of a project from the beginning and can influence some of the decisions. Still, once decided, there are probably not enough time to make changes later (as much as the agile paradigm promises otherwise).

Working at home means you set the speed. If you do something you are unhappy with, whether it works or not, you can always change it. Since you are basically the management team, you can choose the technology and tools. I also feel like I learn more coding at home, since there is more time for experimentation.

One thing that you need to be conscious of when coding without deadline is limiting the scope. It’s much easier to never be happy with the work, and therefore never finish. One of my favourite windows managers, Enlightenment, seems to be a example of this (DR17 has been in development since 2000).

Still, tinkering at home keeps me interested in coding, so that’s why I do it…

Working: Norway vs US

I’ve been working in Norway for six months now. It’s been an interesting experience, especially compared to my work experience in the US.

Salary in Norway and the US is about equal in monetary terms for software engineers. Now, it’s worth mentioning that as I write this, the USD is historical low compared to the NOK (although not as low as it was during the summer). Since most things are cheaper in the US (at least in CA), the actual purchasing power is better in CA than in Norway.

Benefits and bonuses
Healthcare is about the same in the US and Norway, the difference is who is paying for it. In the US, health insurance is paid for by the company you work for while in Norway it’s the State. Which means that in-between jobs, in Norway you would still be covered, while in the US you wouldn’t. The service is about the same (choose your own doctor etc).

As part of the package in Norway, I do get mobile phone and high-speed Internet access, even though I don’t work from home (the mobile has pretty much replaces the office phone for everybody in the company). These seems to be standard benefits in Norway these days. At least all the companies I interviewed with had it in their standard benefits package. I don’t believe high-speed Internet has become standard in the US, unless you work from home.

Vacation time is much better in Norway. In the US, I got 10 days of vacation each year. In Norway, I get 4 weeks (20 days) a year (plus 5 days if I have saved enough working hours). Meaning I can actually get away when I have a vacation (instead of a long weekend, which seems to be more normal in the US). Sick leave is not included in these four weeks of vacation. You also get the standard maternity/paternity leave in Norway (not existing in the US).

Working hours is a little saner in Norway than in the US, but I’m not sure it’s because I’m working for relatively big company, or because it’s just part of the working culture (not that many people work past 17:00)

There is a 3 months notice of leave in Norway (or at least at my Norwegian company). That’s somewhat weird coming from a State where employment is at-will. At the very most, I don’t think you have more than 2 weeks notice even at the most generous companies in the US. Not sure which is better yet.

Oslo is mostly a bank and telecom city. Along the coast, it’s mostly jobs in the oil industry. Silicon Valley is a lot more diverse when it comes to different industries.

The technology used is also much more diverse in Silicon Valley, where you can get work doing C++, Java, .Net, Perl, Python, what have you. Most of the jobs advertised in Norway was basically either Java or .Net (C#) jobs. Couple of companies, like, was Perl jobs. UNIX (Linux) and Windows are both present in Norwegian companies

The people and Work
The US, being the melting pot it is, is really diverse. At least in Silicon Valley, you basically get to know the world.

Norway is pretty diverse too, at least when dealing with technology. I work with Norwegians, English, Vietnamese, Bangladesh, Indians. Oslo might not be as diverse as San Francisco, but London and Paris is just a hop away.

English seems to have become the lingua franca when it comes to dealing with technology.

Engineers being engineers, there aren’t that much difference between an US nerd and an European nerd. Both are interested in technology and discuss it. Work culture itself (when thinking about the people/technology aspect) is not that different.

The company I work for seems to be really focused on the health of the workforce. When in the US, most tech companies have free soda and chips, the company i work for now is really encouraging us to eat healthy (free fruit basket once a week, free tea, coffee and water, but no soda), and have a balanced work life (discourage us from working too much overtime). In the US, it seems more companies are working people to death, mostly because there are other desperate people out there waiting for you job. It’s going to be interesting to see how the environment in Norway changes if there is a recession in the next few months.

Since public transport actually (more or less) work in Norway, I can take the train to work instead being stuck in traffic every morning and evening for hours. I love that part.

I do like working in Norway. I’m not as stressed as working in the US (mostly because of the visa issues I had when working there). There is some excitement in working in places like Silicon Valley, and stability in working in a country like Norway. I miss places like Fry’s Electronics or huge bookstores like Barnes & Noble or some of the more corner bookstores like the one in Mountain View. Working public transport really reduces the stress level.

Maybe it’s too early to make a definite conclusion, but so far so good…


I forgot my password.

I had this brilliant idea of protecting the documents on my laptop with encryption some time ago in-case it ever gets stolen. And of course, encryption is useless without a good password. And now I forgot the password. And the backup doesn’t cover the latest stuff…

At least I decided to cut down on the number of unique password I have to remember. If only I could figure out what the password was for this particular set…

JavaZone ’08

I went to the JavaZone conference this week, my first conference in Norway.

The first thing that struck me was how small everything was. Now, I didn’t expect Comdex or JavaOne size, but still, I kinda expected something bigger. Especially since it billed itself as “the largest developer conference in Scandinavia”. If the smaller conferences in the US is probably twice if not three times as big as this one.

The second thing that struck me was how rubbish most of the speakers were. Not rubbish in the sense that the topic wasn’t interesting, but rubbish in the sense that the speakers weren’t any good at presenting their topic. The best speakers were those who came from the US and England. That was somewhat weird, considering some of the speakers billed themselves as “professional speakers”. Had a talk with someone at work about it, and he mentioned that the speakers in Norway probably hadn’t had formal training yet, and probably amateurs. Still, if you want to make a living as a speaker, hire a Speaking Coach, or take a class. I would think it would be worth it.

In any case, here are some of my favorite speakers from the conference

Jim Webber had a presentation entitled “Guerrilla SOA”. Basically put words to everything I have found weird about working with SOA the last couple of months.

Mary Poppendieck had a presentation on Lean Software Development, which I really found interesting. Lean software development seems to what all this agile programming people really are striving for. Got me thinking about what kind of decision you need to do right now…

Michael Feathers presentation on how to “see” good and bad code.

Robert C. Martins on writing good functions.

Not only are all these people really good presenters, but the topics were pretty interesting too. They are highly recommended if you ever get a chance to listen to them speak.

Amending the checkin

After finishing a particular software feature, I like to check in my work. The problem is, I get into a dilemma. Do I check in now, or wait until I’m sure the feature works as advertised. If I check in now, then I might discover that forgot to add something else to the checkin. If I don’t check in now, I might start on another feature, and then it gets messed up.

git has a wonderful feature that fixes this. git commit –amend. Basically, you commit your changes. Later on, you realize there were some other files that should have been committed alongside the first commit. So you just amend the previous commit with your new files. Really nice feature, and should make the history logs much nicer to look at.

Nokia E-65

I received a Nokia E-65 for work. These days, at least in Norway, people don’t get a desk phone. Rather, they get a mobile phone. It does make it easier if you have to move around according to which project you are in, since your phone number then always stay with you.

The initial impression is that’s it’s a really good phone. It feels nice, with the leather back, really light-weight, really clear screen.

Functionality wise, I don’t think there are any complains. It syncs with my Notes calendar, which make it much easier to remember all the meetings you have to go to. The email functionality has also been upgraded, compared to the Nokia N-70. That is, you can custom define the different ports you need to use to email. Wireless works great, and it’s a great way to save money on my the surfing habits. I installed Google Maps on it, and it seems to work pretty well.

E-65 comes with a mapping software, but you need to have GPS receiver, which kinda defeats the purpose, I think. If you have a GPS, you don’t really need the E-65 to show you the maps, do you?

The one thing I don’t really like about the phone is the camera. No, not because it has a “low” quality camera, but that there is a camera on it in the first place. It seems to me that a business phone like the E-series try to be, shouldn’t have a camera. There are places where you aren’t allowed to bring a camera into the office. And a camera doesn’t really fit in to the functionality of a business phone. Not that the camera is that good either. So, it seems Nokia put a camera there just to get past the reviewers that would complain about it, but not that good of a camera that would make it unusable in a business setting (no zoom, no flash etc).

Looking at the Nokia E-serie offerings, they have all cameras. I would love to get a phone with the functionality of E-65 without the camera. But other than that small thing, it’s a fine phone.

updating website

After months of procrastination, I decided to update my website. One of thing that had been bothering me was that it was getting too hard to update. Not the look. With css, updating the looks are somewhat easy. The problem was more that if I wanted to update, say the menu system, I had to edit a ton of pages. Small changes like updating the copyright just wasn’t happening unless it happened to be on page that I was editing a lot.

At first, I was considering installing a CMS or the very least, just let WordPress manage the site (which is quite capable of). But the software engineer in me doesn’t really like a solution that basically creates static pages dynamically. Waste of resources. Most CMS only forces your pages into their look and feel, and though I could work until I got my look ‘n’ feel, it would be too much work for too little gain.

But what is a CMS, anyways (at least web kind)? Well, it helps managing the files. You create templates, so that you can focus on the content and still get a consistent look’n’feel.

Managing files are easy. Being a software engineer, I’m used to source control systems, so that part was pretty much taken care of. The creating templates isn’t that hard either, if you are on an unix-like system. The scripting support on those systems are superb, so it wouldn’t really take much effort to write a template system to generate the static files.

Since I was going to make this change, I decided to do it in Perl while I was at it. Mostly because I haven’t worked much in Perl, and it would be an interesting challenge. It actually went really well. Took me a couple of hours, mostly because I needed to look up different functions in Perl, but in the end, I think I got the flexibility I wanted.


I’ve been playing with KDE4 for awhile now since Kubuntu released 8.04. Although it’s a little more polished and useable than when I tested the 4.0 release, it’s still not quite there yet. That is, it doesn’t give compelling reason to switch from KDE 3. That said, KDE4 is beautiful.

One of the complains against KDE that it wasn’t very beautiful. It was very functional, but beauty… To me, it was like most enterprise level software. Functional, does what you need it to do, but it’s not a thing of beauty (if you want beauty, check out what Apple is doing with their stuff). KDE4 is beautiful. The artwork team in KDE has done a really good job. And with the addition of 3D accelerated graphics, it actually feel smoother too.

I really look forward to what the KDE team has in store for v4.1 and beyond. It’s going to be an exciting year.

cross-platform development

One of the problems of doing cross-platform development, is that you don’t necessary know what the environment will be at the person who is compiling your software. So, you need to be able to check this and maybe notify the user what additional software needs to be installed. You also want your build system to be flexible enough to maybe work around issues and options.

I used to write the build system for the unix development at my previous work. Since the target was limited to HP-UX and Solaris, it was somewhat easy to just create a script which figured out which platform we were at, and then copy the platform specific Makefile to the right location. When I started working on my own private projects, I wanted to make it more robust. Initially I was looking at the automake/autoconf systems. I found it a little too complicated for my needs, although autoconf by itself might have been useful. I still find it somewhat troubling to have to learn another language (M4) to write the configuration files. To me, configuration files that generate the Makefiles should be as simple as possible.

While I was investigating and trying out build systems, I heard that KDE had started using cmake. This made me at least a little curious about it.

The initial impression was that cmake makes it really easy to get started. I was up and running faster with cmake than I did with the autotools chaintools, and almost as fast as writing my own Makefiles. Now, my projects aren’t as big as the KDE project, but if it works for them, it should work for me.

One of the problem I found is the some problem I have found with most cross-platform tools: it has to target the least common denominator. Some of the features seem to indicate that cmake was first developed on Windows, or that developers were primary Windows developers. For instance, there wasn’t a good way to clean up custom generated files using cmake, as in you could make clean target in Make have a dependency on something else, so that that something else also got removed when clean was called. Reading the faq, this seems to have been fixed in 2.4.

Although I haven’t done anything complicated with cmake yet, so far I have been pretty happy with it. It isn’t much more complicated than handwritten Makefiles, and it should save me tons of work on porting.

Kubuntu 8.04 (Hardy Heron)

I’ve decided to reinstall my Linux system, and in the process upgrade to the next Kubuntu version, 8.04, also known as Hardy Heron. I usually don’t like to reinstall my OS when I upgrade to a new version. One of the reason I decided to move to a Debian distribution was that I didn’t have to reinstall during upgrade. Unfortunately, when I initially installed Kubuntu 6.06 (Dapper), I made the / partition too small. Although it was big enough for normal usage, during upgrades, with multiple versions of the kernel, firmwares and kernel modules, it got too tight. Hopefully, the current size of 1 Gb should be enough.

In general, I hate reinstalling an OS. Mostly because I spend some time customizing it, writing scripts to help me in the day-to-day work. Most of the time, I forget to backup these scripts, so I have to recreate them once I notice they are missing. Mostly finding everything to make the desktop look and feel exactly as I had it before I made the upgrade do take time. Of course, I’m also finding functionality that I’ve never noticed because they have been hidden because of customization, or I just hadn’t looked.

Although I stopped installing beta software (unless force to it), I’ve been pleasantly surprised by the stability of Hardy. Stuff like hibernation and suspension that I previously had problems with, works now. I never got the kernel in Gutsy to boot, so I had to be content with the kernel from Edgy, but 2.6.24 works perfectly now. And Kontact seem more stable than previous versions. The addressbook has gotten a much needed speedboost (when using LDAP), although it still doesn’t expose all the fields. This version seems to be a keeper.