Despite all the fancy tools we have today, software projects fail as often as 15 years ago.

More frameworks & tools are not a solution. Instead we need to explore more humane ways of collaborating, establish a culture of continuous learning and strive for technical excellence.

Configuring Ubuntu/Xubuntu and Apache 2 for local development environments

Most Web server howtos out there are concerned with production environments, where you need a high level of performance and security. As a developer who runs Apache 2 on localhost, you have other requirements, such as quick configuration and flexibility. It’s inconvenient to edit (usually copy & paste) your virtual hosts configuration and add entries to /etc/hosts whenever you are working on new projects (e.g. on GitHub) – especially, if you just want to test something.

Niklaus Wirth about complexity

On both sides of this fence, complexity has and will maintain a strong fascination for many people. It is true that we live in a complex world and strive to solve inherently complex problems, which often do require complex mechanisms. However, this should not diminish our desire for elegant solutions, which convince by their clarity and effectiveness. Simple, elegant solutions are more effective, but they are harder to find than complex ones, and they require more time, which we too often believe to be unaffordable.

10 steps to become a great software engineer

After working in the industry for over a decade, this is my personal summary of the key elements for a successful and satisfying career as software engineer (and a reminder to myself): Contribute to open-source projects – ideally applications or libraries you already use yourself. Don’t blame me, if you end up “working” in your spare time. Read and understand The Risks Of Stopping Too Soon by David Parnas. Do your best not to stop too soon.

How to write an iPhone app with PhoneGap

PhoneGap lets you write smartphone apps with HTML, CSS and JavaScript. No need to learn Objective-C or get used to proprietary C/C++ libraries. Sounds good in theory, but how easy is it really? I found the official documentation a little bit confusing, so I wrote this streamlined howto while I’ve been testing PhoneGap myself. If you got about an hour of time, these are the steps to follow to compile & run your own iPhone app:

Update your bookmarks!

The primary domain for this blog is now lastzero.net and not nulldevice.de anymore. If you are using the old domain, you will be automatically redirected. Please update your bookmarks, links and RSS readers. The idea behind this move is, that I would like to see some more international visitors. I have the impression, that Web sites using a .de domain don’t show up in Google’s international search results or people don’t click on it (is that true?

Xubuntu 12.10 for Web software developers

Do you also think coding Web applications on OS X, Windows or even Ubuntu with Gnome 3 doesn’t feel right? There are reasons: First, the production servers for probably 85% of all Web apps run on Linux: If you need special extensions, libraries or other tools, you know how difficult it can be to get them compiled, installed and running on “non-standard” environments and how easy it can be on a Debian/Ubuntu system.

How to use the StealJS file loader as a stand-alone tool

Did you know that JavaScriptMVC comes with a very powerful file loader / dependency management system? It can be used independently of the MVC framework and is (in my opinion) much better than anything else I’ve seen (including RequireJS). It is not marketed as a stand-alone tool, which probably is the reason people don’t really notice/use it outside the JavaScriptMVC community so far. Why should you use it? StealJS can not only load JavaScript files, but also CSS, CoffeeScript and Less!

The evolution of modern music

Are you curious about the origins of some music genres? Well, I was too. That’s why I invested many hours reading Wikipedia and created this – in the meantime pretty comprehensive – diagram with Lucidchart. Please let me know, if you find an error or you think that an important genre is missing.  

Storing historized data in a relational database

There are quite a few concepts that deal with storing historized data in a relational database; that means creating an archive copy or journal when data is updated or deleted. Spontaneously, these options come into my mind: Using the built-in functionality (for example, in the latest Oracle database). Using black-box technology is dangerous, if you don’t understand it. It might also be hard to customize for your own needs.

Using SQL fixtures for database related unit tests

This is a short tutorial to show how to use fixtures for database related unit tests. The inspiration for this post came from a conversation I had at the recent PHP Unconference in Hamburg, Germany. From my experience, the usual way to test database related classes is to use a special test database, that needs a reset before each run (drop the existing tables and import the test dump). That approach has several severe drawbacks, all observed in real life projects many, many times: