Archive for January, 2012

Wenn Herr Maierrings dreimal klingelt…

Wednesday, January 18th, 2012
TV-Testscreen (openclipart.org, Public Domain)

TV-Testscreen (opebnclipart.org, Public Domain)

Teile meiner Familie haben bereits vor rund dreißig Jahren ihre Rundfunkgeräte entsorgt – damals wahrscheinlich noch ein recht ungewöhnlicher Schritt. In meinem Freundes- und Bekanntenkreis sind jedoch heute Haushalte ohne (Fernseh)empfangsgerät nichts Ungewöhnliches. Das Fernsehen ist sicher nicht per se verkehrt, kann es aber nunmal als Massenmedium nicht allen Recht machen. Ob die gebotene Leistung 210€ pro Jahr wert ist muss jeder mit sich selbst ausmachen.

Zugegebenermaßen bin ich ein großer Freund des Deutschlandfunks. Dass zum Angebot ein Ogg-Vorbis-Datenstrom gehört, so dass man sich bei Bedarf interessante Beiträge gleich digital mitschneiden kann, ist ein feiner Service. Nicht dass ich davon Gebrauch gemacht hätte – aber ich könnte, wenn ich denn wollte :) .

Mein Versorger ist bemüht. Regelmäßig schaut Herr Maierrings persönlich vorbei. Wenn er gerade keine Zeit hat, schreibt man mir, damit ich was zu lesen habe. Die Schreiben sind anspruchsvoll gestaltet und die Wortwahl bietet einen hohen Unterhaltungswert – man sieht gleich, dass man es mit Profis zu tun hat :) .

Leider waren die jüngeren Schreiben deutlich langweiliger. Mir kam auch zu Ohren, dass Herr Maierrings vielleicht bald nicht mehr so oft vorbeikommen könne. Ob das mit der kommenden Haushaltsabgabe zu tun haben kann?

Ab nächstem Jahr gilt eine haushaltsbezogene Abgabe – IMO ein überfälliger Schritt, der grundsätzlich zu begrüßen ist.

Einige Mitbürger werden jedoch hart getroffen. Komplettverweigerer etwa zahlen plötzlich für eine Leistung, die sie überhaupt nicht in Anspruch nehmen, einen nicht unbedeutenden Betrag. Und da heutzutage ein Rechner mit Internetzugang zur kommunikationstechnischen Grundausstattung gehört, wird es keine Ausnahmeregelungen geben.

Auch Radiofans müssen eine Preissteigerung von etwa 312 % verkraften. Da die Gebühr für Fernsehgeräte gleich bleibt, stellt sich die Frage, wer die geplante Entlastung für (beispielsweise) Handwerksbetriebe erbringen wird. Überspitzt ausgedrückt zahle ich tagsüber dem Handwerker sein Hitradio auf der Baustelle und bekomme dafür nachts um 0:30 Uhr einen Livemitschnitt vom Münchner Klaviersommer geboten. »Das ist einfach ungerecht« :) .

Cool wäre, wenn

  • politische Einflussnahme zuverlässig ausgeschlossen würde.
  • der Teilnahmebeitrag 100€ pro Jahr nicht überstiege.
  • die öffentlich-rechtlichen Sender komplett auf Werbung bzw. eine Beteiligung an werbefinanzierten Sendern verzichteten.
  • die Anbieter Qualität statt Quantität lieferten.
  • das Radio- und Fernsehangebot über IP-Netze zuverlässig zu empfangen wäre.
  • die von den Teilnehmern finanzierten Beiträge dauerhaft in einem öffentlich zugänglichen Archiv zum Herunterladen bereitstünden.
  • ausschließlich unverschlüsselte und möglichst lizenzfrei zu nutzende Dateiformate Verwendung fänden.

Stimmt. Das geht alles nicht. Ich nahm mir ausnahmsweise heraus, eine völlig unrealistische Vision zu skizzieren :) .

Die Haushaltsabgebe ist in Ordnung. Das Verhältnis aus Preis und Leistung ist es nicht.

Kommunikationsmittel, Konvention, Präzision und Ästhetik

Tuesday, January 17th, 2012

This posting about means of communication, accuracy, and aesthetics, appears in german language only due to german language references. International readers, I apologize.

Kommunikationsmittel

Die Sprache, die Schrift, eine technische Zeichnung oder ein Blatt Noten sind »Kommunikationsmittel[…], mit deren Hilfe sich Menschen untereinander verständigen können.«. Ein Architekt vermittelt mit einer Zeichnung anderen, wie das geplante Gebäude aussehen soll, während ein Komponist durch Noten ausdrückt, welches Musikstück sich in seiner Vorstellung entwickelt hat. Damit das Ganze funktioniert, bedarf es einer Konvention – beide müssen “die gleiche Sprache” sprechen.

Interpretationsspielräume in der Kommunikation

Trotz der Konvention gibt es Interpretationsspielräume durch Unschärfen im Kommunikationsmedium. Ein Notenblatt beispielsweise kann weder Tonhöhen noch Rhythmus beliebig fein auflösen. Kommunikation enthält außerdem auch unbewusste Komponenten, die vom Empfänger in seiner Vorstellung in einen entsprechenden Kontext gesetzt werden. Speziell in der schriftlichen Kommunikation kann man zudem gelegentlich feststellen, dass der eine sich präziser artikulieren kann und dabei auch Wert auf ästhetische Gesichtspunkte legt, während der andere wesentlich pragmatischer zu Werke geht. Wer ein Bild malt wird bezüglich der Ästhetik andere Maßstäbe anlegen als jemand, der eine Einkaufsliste verfasst.

Was aber hat das mit agiler Softwareentwicklung zu tun?!?

Code ist ein Kommunikationsmittel

Wie eine technische Zeichnung ist ein Stück Code in der Softwareentwicklung auch die Repräsentation der Gedanken desjenigen, der ein bestimmtes Problem lösen möchte. Mit dem Code, den er schreibt, teilt er nicht nur der Maschine, sondern auch seiner Nachwelt mit, was er dabei erreichen wollte – der Code ist also ein Kommunikationsmittel. Die Wahrscheinlichkeit, dass später entweder der Autor selbst oder ein anderer Fehler beheben, Verbesserungen oder gar neue Funktionalität hinzufügen möchte, ist groß. Sofern der Code bestimmten Konventionen folgt, präzise formuliert und gut strukturiert ist, wird es in einem halben Jahr deutlich einfacher sein, die dann anstehenden Änderungen vorzunehmen.

Wer agile Softwareentwicklung als Profession betreibt wird vielleicht sogar auf testgetriebene Entwicklung setzen, in der die Tests zum Ausdruck bringen, welches Bild der Programmierer beim Schreiben des Codes im Kopf hatte.

Der Softwarearchäologe

Boris Gloger hat vorgestern in seinem Posting Agile Architektur ist änderbar! das Problem beschrieben und ein paar nette Metaphern genutzt. Das Verstehen und effiziente Ändern von Code, den man nicht selbst geschrieben hat, ist für alle Mitglieder eines ScrumTeams ein wichtiger Baustein zum Erfolg.

Boris schreibt:

Lesbarkeit: Der Code sollte so strukturiert und geschrieben sein, dass er leicht verständlich und lesbar ist.

Eigentlich sollte das eine Selbstverständlichkeit sein. Allerdings erfordert das Disziplin. Es ist einfach, Code zu schreiben, der etwas Nützliches tut. Es ist aber aufwändiger ihn so zu schreiben, dass die Gedankengänge auch später noch nachvollziehbar sind – sei es für den Autoren selbst oder für andere. Und nicht zuletzt spart lesbarer Code, der in »Usable Software« mündet, eine Menge Dokumentationsarbeit ein.

Doch halt – was ist mit Kommentaren? Boris schreibt weiter:

Inline-Dokumentation der Entscheidungen: Es sollte im Code erklärt sein, warum gewisse Entscheidungen so getroffen wurden, wie sie getroffen wurden. Der Code selbst ist ja die Dokumentation dessen, was der Code macht. Nur wieso man die Dinge so angegangen ist, wie sie vorliegen, wäre wichtig zu wissen.

Kommentare sollten nur dort zum Einsatz kommen, wo der Code nicht mehr selbsterklärend geschrieben werden kann. Beispielsweise weil man um eine Unzulänglichkeit des Betriebssystemes (»Was macht er denn da?!?«) herumkommen musste.

Kommentare wie

// Traversing the list
for ( int i = 0; i < lst.size(); i++ )

oder

// Checking whether we can open the file
if ( !f.open() )

sollten gelöscht, dafür die Bezeichner etwas sprechender gewählt werden.

Vor ein paar Tagen habe ich eine Codestelle geändert. Gestern bemerkte ich, dass ich vergessen hatte, den darüberstehenden Kommentar zu ändern. Den Bug habe ich gefixt. Indem ich den Code so umgeschrieben habe, dass der Kommentar überflüssig wurde.

Interlude

Goke hält mit ausgestreckten Armen ein iPad so vor sich, dass er die Noten gut lesen kann. Mit spitzen Lippen pfeift er die Melodie. Nach wenigen Sekunden stimmt Peek mit ein.

Schlussfolgerung

Jedes Mitglied eines ScrumTeams, das vom Erfolgsfaktor der kollektiven Codeverantwortlichkeit in der agilen Softwareentwicklung überzeugt ist, wird darauf drängen, dass der Code als Kommunikationsmittel lesbar geschrieben wird. Jeder kann damit aus dem Stand gleich morgen anfangen. Wichtig ist nämlich nicht das Wollen, sondern das Tun in kleinen Schritten.

Wenn sich später noch die Lektüre von Büchern wie Agile Developer Skills (ISBN 3868020608) von Christoph Mathis und Andreas Wintersteiger oder Clean Code (ISBN 3826655486) von Robert C. Martin anschließt - umso besser.

Since MoNav learned to speak

Friday, January 6th, 2012

About two weeks ago I blogged about my first attempts to teach MoNav to provide speech output. While everything worked well on my desktop machines, MoNav did tend to crash every now and then on the N900, rendering it pretty useless for the intended use.

As debugging was a bit difficult, I have just rewritten a suspicious part of the code. Et voilà, a test drive through the city of Karlsruhe the past evening was of great joy and pleasure.

The speech output still is not mass compliant, though. MoNav is too verbose, instructions are spoken too late, and MoNav needs too long to detect that the vehicle left the precomputed route. But that’s just tedious work in progress to be done during the next weeks and months.

And though I’m complaining, do not forget that MoNav in its current state actually is capable to guide you to your destination, while I’m pleased with what I achieved during the past weeks.

I’ll continue the work on speech output for car drivers before I’ll dive into making it compliant with the needs of cyclists.

In case you want to play with the current code, you’ll need to compile the branch from source:

  • hg clone https://code.google.com/p/monav/ monav-permaroute
  • cd monav-permaroute
  • hg update permaroute
  • qmake monavclient.pro
  • (/Developer/QtSDK/Desktop/Qt/474/gcc/bin/qmake monavclient.pro on Mac OS X)
  • make

You’ll also need updated map packages for this version to run properly. I’ve already precomputed some mapsets:
Germany_big
Germany
Alsace
Rheinland-pfalz
Baden-Wuerttemberg

The above lines are not intended for end users. It’s for all those openstreetmap addicts who are interested to follow the current development of MoNav.

Have fun!

Recently, as Maths made my Xmas Break

Tuesday, January 3rd, 2012

In the last posting I mentioned that I made the routes in MoNav more persistent:

As a consequence, I’ve just written some code that detects whether the vehicle is still “on track”. The route only gets recalculated in case the vehicle left it for more than x meters. This makes the route much more persistent and will cause far less headache than the previous approach.

Since the GPS position is always a bit inaccurate, it will almost never be exactly on the computed route. Instead, it will aberrate a bit from it. What you want to achieve is to detect whether the current position still is either near the route, e.g. left or right of it, no more than x meters away and still in direction to the planned target, or in the opposite direction.

(more…)