Temenos

Yesterday at the last meeting of my local software craftsmanship group, Olaf Lewitz from Berlin held a short introduction to Temenos.

This was as quite interesting experience, so here is a little braindump from me.

Why

In many companies a huge amount of time is wasted by fear and politics. That can range from fear about the own job, the position to things like “watermelon reporting” (all green on the outside, but don’t look inside). All this interferes an open communication.

Effective teamwork needs trust and trust brings saftey which leads to a more open and therefore efficient communication, because if you trust each other, there is no more any need to question everything oneself or the others have to say, there is no need for politics and fear. This saves time, increases bandwith (by exchanging meaning and not just information). You also have more options in situations where you have to decide about things, because one knows about the otherwise hidden knowledge and skills of the other team members.

read more

Screencast: FizzBuzz kata

UPDATE (2014-08-01): I removed the link to Xamarin Studion on request of Xamarin

This week, at the meetup of my local software craftsmanship group, we did a mini code retreat with the FizzBuzz kata. In advance I had a discussion with Benjamin, that this Kata could be a bit to easy for a code retreat. My point was here, that IMHO is not done completely. Most people stop on a function like this:

public string Translate(int value)
{
    var result = string.Empty;

    if (value % 3 == 0)
        result += "Fizz";

    if (value % 5 == 0)
        result += "Buzz";

    if (value % 3 != 0 && value % 5 != 0)
        result += value.ToString();

    return result;
}

This is fine, as long you don’t want to extend the kata with different rules.

Imagine you got up to this point and now you get a new requirement:

Extend the Translation function so it prints

  • Bang“ for all values divisible by 7
  • FizzBang“ for values divisible by 3 and 7
  • BuzzBang“ for values divisible by 5 and 7 and
  • FizzBuzzBang“ for values divisible by 3, 5 and 7

Surely you could just add another if statement but how ugly is that. This is the point, where the TDD-Part of the kata converts to a refactoring kata.

Here you can see my take on this kata.

It features a solution completely free of if statements and is quite good extendable. The resulting Translator class must never been touched anymore. All you have to do for different rules is to write a different RuleFactory. If you want to play you could even implement a RuleFactory which reads its rules from an XML file.

The source can be found here.

You can get the music under http://www.jamendo.com/de/track/259936/scherzo-no.-4-in-e-major-op.-54-1843

Have Fun

YouTube Link for mobile viewers

The Monty Test - A revised Joel Test

read more

Screencast: Video store refactoring kata

This is the video store refactoring kata from the book “Refactoring: Improving the Design of Existing Code” by Martin Fowler, Kent Beck, John Brant and William Opdyke.

The project file for IntelliJ IDEA resides on http://github.com/magicmonty/videostore

You can get the music under http://www.jamendo.com/de/track/72960/w.-a.-mozart-1756-1791-sonata-in-c-major-k.-521-for-piano-four-hands

Have Fun

YouTube Link for mobile viewers

I’m attending BlackBerry DevCon Europe – 7-8 February 2012, Amsterdam

BlackBerry® DevCon Europe is the premier developer event where BlackBerry® enthusiasts will come together for sessions, demonstrations, keynotes, and more — all focused on creating mobile applications for the powerful BlackBerry platform.

I’ll be attending! Join me so you can also get the value from the conference content, including previews and demonstrations of the latest innovations and breakthroughs with BlackBerry technology. I’m looking forward to discovering tools that can help me make apps more profitable, technologies that lead to developing more engaging Super Apps, and hot topics such as the BBM™ Social Platform, BlackBerry® 7, Adobe®Flash® and Adobe® AIR®, BlackBerry® WebWorks™, and more.

I hope to see you there. Find out more about the conference at http://www.blackberrydevcon.com/europe.

Introducing AutoTest for Delphi

One of the main issues with doing TDD is the fact, that the cycle times between running the unit tests and the development of a feature has to be very short. In fact as short as possible.

In other languages there are always tools like autotest for ruby or infinitest or JUnitMax for Java.

I missed such a tool badly in Delphi, because it makes the development so much faster when the tests are running automatically in the background everytime the code has changed.

So I created autotest4delphi. It uses Growl as notify engine and outputs all relevant command line output of the compiler / test appropriately colored to the console and it’s configured via a simple INI-file.

The tool itself is written in Delphi 2006. I have not ported it yet to Delphi XE but this should not be a big problem.

Feel free to fork an use it.

Contributing code to one of my projects

Because some people asked me, how to contribute code to my MediaWiki Access Extension, here a short howto how to do this.

At first, you have to get yourself a free account on GitHub. This is as easy as clicking “Pricing and Signup”, selecting the Free Account, fill in the required fields and submit. Maybe you have to activate the account via email (don’t know, it a while since I got my account).

I leave the bold setup and finetuning up to you (maybe this will help on this issue).

After the account is set up you go the project you wish to contribute to (i.e. https://github.com/magicmonty/MediaWikiAccessControl) and click on the “Fork”-Button. With this you have made your own fork, where you can develop by your hearts content. If you are ready, the code is tested and so on, you can send me a pull request with the changes you want to contribute. I will review this changes as soon as my time it allows and if I happy with it, I will merge the changes into my code.

Hope that helps a bit.

Visit the archives!