Rants Technology

Recycled Software

What’s up with everything being ported to .NET? There’s nothing more boring than copying somebody else’s idea, unless of course, your own ideas are pretty crap 🙂

And (sup)porting a dozen applications to be used with the .NET framework surely cannot be considered as innovative either- it’s real name is “market strategy”. I must confess though, we’ve (that is, i) benefitted much from having tried and trusted Java libraries (example, NHibernate) ported across, but i’ve also wondered many a time, why not just use Java then? And now

An aside, what i loved about the marketing around NHibernate is that it builds on the solid reliability and legacy robustness of Hibernate in a Java world 🙂

But it’s all just recycled software ideas and methinks a large pop of the lemming community are looking for “innovation” in all the wrong places.

<warning>Massive Generalisation About to Occur</warning>

Software developers are more into being “advertained” (advertisement + entertainment) than any other population group i know. Trouble is, i always presupposed we’re more critical than most. But perhaps we’ve reached a point where we’ve started buying into our own hype? Afterall, we can make it fly with words like interoperability, multi-platform and integration. Oooooo… :p

Rants Technology


Much has been said about quality of software, and even more attention has been given to it. Further, a lot of methodology, and general how-to-do-stuff from project management to code implementation, even design and testing is focused on quality, including the ubiquitous “best practices” and framework collections out there. But then it struck me. All the software i “actually” work with is buggy.

It’s good enough, get’s the job done and i live with it, mostly. And like any good web-theme, the software will be replaced (read: recycled) soon enough, so why the big fuss about quality anyway?

If you got a good idea, get it out, sort the bugs out later, and if your idea is any good, you’ll break even before you manage to iron out most your major bugs, by which time it won’t really matter anyways. Uhuh, i hear a lot of “but that won’t work with real business software”. Really?

How many projects you code, pick up, migrate, port, patch, fix, debug or rewrite because business was complaining that they were (now) “too buggy”? But they were using them, right? And probably surviving pretty well with the “broken software” since now they can afford a software team to code, pick up, migrate, port, patch, fix, debug or rewrite. And the job would be done “ok” except that now, quality is an issue.

Reactionary management has a lot to do with it, but it leads astray and breeds a buzz which forges a plethora of blogging on delivery quality, all under the guise and good name of “it’s what the customer wants”- which they do. But not actually :p

When last did you use bug-free software to pay the rent?

Disclaimer: naturally, this is not a call to “down with quality”, or even “forget about tests”. it’s just a very radical and extreme (for me, at any rate) reflection on the focus we give to quality. For one, i groove on quality 🙂 while at the same time i can secretly admire that *some* manage to manage buggy software better than they can actually write it 😀


Marking Time

Jessie turned 6 months today. In the bigger scheme of things, it might not be all that significant; for “new-born parents” 😉 it’s quite a milestone!

But beyond reaching milestones, without actually even reaching/trying, it occurred to me today that there’s nothing we can do to recapture/relive these last 6 months. They’re gone. Whatever joys and discoveries we shared these last 6 months, they’ve come and gone and making way for new ones. Freaky awesome 🙂

Yet i can’t help but reflect that time passed, is, well, time passed and it only lives on in memory, yet at the same time, just how absolutely precious this time gone by has been. And then i got to thinking about our own rat race. When 6 months go by we don’t even blink or bat an eyelid. Maybe at the end of the year we spare a moment, pause as it were. Even then, we’re too busy planning 2008, 9 and 10 to really indulge the road travelled…

Yip, we plan ahead (and we need to) but not at the sacrifice of today.


Bitnami Application Stacks

If you’re looking for an application stack to run on *any* OS, particularly one of the very famous and useful open source applications (subversion, wordpress, joomla, drupal, apache, ruby, moodle, mysql, php, trac, …) and want to get started quickly, i would suggest bitnami for most your needs.

And especially if you’re stuck with a Windows server :p but really need to set something useful (server application) up and running, chances are, bitnami will have a stack you can download, click and install. They even have got Ruby on Rails. And the growth in the last few weeks has been quite considerable (ito offerings) so there’s very little excuse for not trying out (self-hosting) any of these wicked-cool apps on your internal networks 😉



I been biting to write on this for a bit now… piracy. Music, movie, software, whatever. If you illegally “own” it, it’s piracy. And not agreeing with the law is not an argument to support your position and justify your actions to pirate anything. Not even a TV-episode. This wouldn’t be such a huge problem, except that….

A lot of people in this country (South Africa) complain about crime. No argument there. We live in a particularly violent and crime-riddled country at the moment. Does that mean that “lesser” crimes cannot be considered as crimes since we reserve the word crime for rape, murder, hijacking, theft…? Certainly not for copying a music CD, software program or even documentary. You can hardly call that crime, now can you? Or can you?

Indeed you can. The lawmakers of this (and other countries) deem that illegal. So it’s criminal. You break the law, you’re as lawless as the rest of the bunch. When you start to complain about the lawlessness of the country, and own (heck, even redistribute) illegal media, you border on major double-standards. And if you are actively not campaigning against the lawmakers to actually change the law (doing anything about the situation) you’ve got a long way to go, a big mouth to match.

When the laws change, superb. Copy to your heart’s content. Until then, buy legal.

Business Technology

Enforcing DDD

So you’re all excited about TDD by now. You’ve also hooked into DDD and cutting your teeth on some of the more progressive methods for delivering software accurately, and, fairly rapidly. And with time, you probably need to start leading a team in DDD. Or you just need to interface with a team but want to make sure everyone’s on the same page. That is, the last thing you need is DDD-mutiny…. 🙂

We were putting the domain together and started adding in the NHibernate mapping files. One of the many beautiful things about NH is the ability to generate the schema based on the mapping file data. Now, strictly speaking, the database is not all that important from a design perspective. At least, that is, not initially if you try remain true to your DDD-allegiance. Anyway, this post is not about all that. This post is about enforcing DDD and one of the things you might want to do is remove the temptation to do some fundamental ERD analysis during the domain design. And if you don’t want to, then don’t 🙂

So how’s this for aggressive and extreme?

<?xml version="1.0" encoding="utf-8" ?>

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">

    <class name="NHibernate.Examples.QuickStart.User, NHibernate.Examples" table="[2239987-9382WED-23D23]">

        <id name="Id" column="[LKJDSA-98DSJHDS-9D76SD]" type="String" length="20">

            <generator class="assigned" />


        <property name="UserName" column="[130SF98-08JDY-98BNXDS]" type="String" length="40"/>

        <property name="Password" column="[10DDD398-08EFHJDY-98CVBDDS]" type="String" length="20"/>

        <property name="EmailAddress" column="[1098-0KHS8JDY-98DDDS]" type="String" length="40"/>

        <property name="LastLogon" column="[10998HG-08JDY-98DS]" type="DateTime"/>



You get the idea? And replace those funny column/table names with GUIDs for extra spice. Or even better, random base64-encoded strings. Of course, you can write a script to generate random table and column names for all your mapping files in a release build if you’re not comfortable with the idea of a “random” database schema during development.

Imagine trying to decipher the following while debugging:
select KJHDSA-AS878, SL-983LD23-2J FROM ASLKAJS8-32JH INNER JOIN ASLOE-876-35 ON DAS-3FE-43 = 321JDH-8786 WHERE ALOYWI-9876D = 2

For me, the bigger question would be: why are you trying to debug the SQL when you’re effectively abstracting that part of the solution and ‘supposed’ to be treating it like a black box?

But before anyone gets me (too) wrong, I’m not suggesting this as a standard practice, just a far-out idea which opens up some possibilities for managing DDD adoption 🙂