reapers blog
Don't live with Broken Windows
geschrieben von: reaper, 22.10.2010
Manchmal ist es schon kurios. Beim Design von Software achtet man auf schöne Strukturen, sauberen Quellcode und irgendwann kommt der Zahn der Zeit. Üblicherweise in Gestalt eines Kunden oder Benutzers der unbedingt dieses oder jenes Feature haben möchte. Die schönen Strukturen werden etwas aufgeweicht, der Quellcode bekommt ein paar Entscheidungsbäume mehr und alle sind erstmal zufrieden. Natürlich nimmt man sich vor das alles im nächsten Release besser zu machen aber sind wir mal ehrlich, wer macht das wirklich, bzw. wer hat die Zeit dafür.
Und das ganze kommt oft noch schlimmer, nach ein paar Monaten wird die Funktion gar nicht mehr gebraucht. Eine neue Implementierung wird hinzugefügt und das Design wird weiter aufgeweicht, denn den unbenutzen Code tastet man inzwischen nicht mehr an, weil man nicht mehr weiß wer ihn noch braucht oder man meint ihn nochmal brauchen zu können.
Ich für meinen Teil habe in letzter Zeit an mehrfach festgestellt wie befreiend es sein kann alten Ballast über Board zu werfen. Und solches Refaktoring macht sogar noch Spaß, denn am Ende sieht man wieder ein wenig Licht. Die Strukturen die man sich einstmals erdacht hat schimmern wieder durch das Gewirr von Anpassungen hindurch und plötzlich wird einem wieder klar wie schön Software doch eigentlich sein kann.
So habe ich im Backend meines CMS immer daran festgehalten Texte mittels BB-Code zu formatieren und war auch irgendwie der Meinung das ein Umbau nicht lohnt und wahnsinnig aufwendig sei. Inzwischen habe ich das System umgebaut, die Daten migriert und alles was mit BB-Code zu tun hat weitestgehend entfernt. Und siehe da das System ist ein wenig schneller geworden, der Code etwas lesbarer und ich kann sogar ohne Probleme einen WYSIWYG Editor im Backend verwenden, einfach nur indem ich eine Altlast beseitigt habe.
Um den Pragmatic Programmer zu zitieren: "Don't live with Broken Windows", wenn der Code hässlich oder ineffizient wird dann tu etwas dagegen. Die Zeit verzeiht keine Fehler und wenn man etwas nicht mehr braucht sollte man den Mut haben es zu entfernen, genauso wie man eine fehlerhafte Lösung korrigieren sollte wenn man sie entdeckt.
Was ist schlimmer als fehlende Dokumentation...
geschrieben von: reaper, 18.09.2010
... eine fehlerhafte Dokumentation. Es gibt da draußen Orte an denen sind Quellcode-Kommentare ganz wichtig. Sind sie ja manchmal auch. Ich bin zwar der festen Auffassung das Quellcode sich selbst-dokumentieren sollte und das Quellcode der einer umfangreichen Erklärung bedarf eigentlich gar keine Daseinsberechtigung besitzt aber es gibt Zeiten da geht es eben nicht anders.
Gerade stoße ich auf Quellcode aus meiner eigenen Vergangenheit, aus einer Phase als oben geschriebenes noch nicht galt und ich selbst der Meinung war es wäre schick jede Methode zu dokumentieren, dabei bemerke ich einfach das ich diese Dokumentation zwar angelegt, aber nie aktualisiert habe.
Und voller Scham fällt mir das Kapitel "The Evils of Duplication" aus dem Pragmatic Programmer ein, denn Quellcode Kommentare sind, so sie von Hand geschrieben werden eine ganz klare Form von Duplikation. Merke: DRY - Don't repeat yourself!!!
Neue Web-Frontend-Technologien in den Browsern
geschrieben von: reaper, 17.09.2010
Unter dem verheißungsvollen Titel "When can I use..." habe ich gerade eine schöne Übersicht über die ganzen schicken neuen Webtechniken wie HTML5, CSS3, SVG & Co. gefunden. Übersichtlich gegliedert werden die allgemeinen Browsergruppen (IE, Firefox, Webkit, Chrome und Opera) in ihren verschiedenen Versionen und deren Unterstützung für verschiedene Features dargestellt.
Schöne Übersicht wenn man mal wieder rumspielen will und sicherstellen will das wenigstens die aktuellen Browser später mit dem neuen Spielkram auch umgehen können.
Dinge für die man kastriert werden sollte
geschrieben von: reaper, 07.11.2009
Da hab ich doch in einer .htaccess Datei folgendes gesehen:
AddType application/x-httpd-php php pdf
Wie Gehirnkrank muss man bitte dafür sein. Kein Schwein kann ahnen das man in dieses Verzeichnis was cleverer weise auch noch Download heißt keine PDF-Dateien ablegen kann. Ehrlich dafür gehört der Zuständige kastriert. Allein der Gedanke ein durch ein Skript generiertes PDF aussehen zu lassen wie eine echte Datei indem man sie entsprechend nennt und den Webserver anweist alle PDFs wie ein PHP-Skript zu behandeln lässt mich schaudern.
Wenn man sowas sieht versteht man die Vorurteile gegen PHP-Coder...
Verständlicher Hass auf SEO Fritzen
geschrieben von: reaper, 15.10.2009
Derek Powazek erspart mir mit seinem SEO-Bashing Eintrag viele Worte. All die Gedanken die ich mit SEO (Search Engine Optimisation) verbinde sammelt er in seinem Post. Seine erste These lautet: The good advice is obvious, the rest doesn't work und damit hat der Mann ja so was von Recht. Alles was über gute Inhalte und ordentliche Seitenstruktur hinausgeht ist Unfug. Ebenso Recht hat er mit der These: SEO is poisoning the web, denn statt sich auf gutes Ranking zu konzentrieren und auf Google zu optimieren sollten manche Seiten einfach mehr ordentlichen Inhalt bieten.
Einfach mal den Beitrag lesen, lachen, erleichtert sein und dann den Flamewar in den Kommentaren genießen. Inzwischen hat er seine Meinung zu den Kommentaren auch noch einmal zusammengefasst.
Reguläre Ausdrücke online testen
geschrieben von: reaper, 18.09.2009
Reguläre Ausdrücke (RegEx) sind ein wahrhaft mächtiges Werkzeug wenn sie funktionieren. Einfache Ausdrücke gehen meist schnell von der Hand aber bei komplexen Ausdrücken kann das Testen ziemlich ausarten. Einen schnellen Test findet man unter auf der Seite Regexplanet.
Tools zu dem Thema gibt es natürlich auch, beispielsweise den RegExCoach. Dieser allerdings ist in neuen Versionen nur noch für Windows verfügbar. Für unterwegs ist aber die Online-Lösung durchaus tragbar.
Aufräumen mit dem UCDetector
geschrieben von: reaper, 04.09.2009
Große Projekte und vor allem alte Projekte neigen gelegentlich zur Vermüllung, alte Methoden die eigentlich nicht mehr gebraucht werden bremsen den Build-Prozess und schlimmer noch werden langwierig getestet obwohl sie längst nicht mehr gebraucht werden. Das mach den Code zum einen unübersichtlich und zum anderen kostet es Zeit da die Methoden bei größeren Refakturierungen immer mit bearbeitet werden müssen.
Eigentlich, so sagt ja die Theorie passiert so etwas gar nicht, weil man immer ordentlich schaut ob mal Leichen hinterlässt aber Softwareentwicklung ist eben eine moderne Form von Krieg und da sind Leichen nun einmal nichts besonderes. Will man aber ein Projekt entschlacken wird es schwierig diese Leichen zu finden. Hat man eine konkrete Methode an der Hand kann man in Eclipse mittels Strg-G schnell nach Referenzen suchen und Leichen identifizieren aber zum Aufräumen taugt das leider wenig.
Der UCDetector (Unused-Code-Detector) ist nun ein Plugin das genau diese Aufgabe übernimmt und den Code nach Unreferenzierten Methoden und Klassen durchsucht. Es ist dabei nicht gerade schnell aber das Ergebnis ist durchaus gut. Wichtig dabei ist natürlich das man mit dem Tool nur wirkliche Referenzen prüfen kann, seltsame Magie oder Reflektion Aufrufe kann man damit nicht untersuchen. Beim entfernen von altem Code ist also weiterhin Vorsicht angebracht.
Neben den reinen Referenzchecks findet der UCDetector auch Klassen und Methoden die nur in Tests verwendet werden oder gibt Ratschläge für die Sichtbarkeit von Methoden. Wird eine Methode beispielsweise nur innerhalb der eigenen Klasse verwendet schlägt das Tool vor diese doch private zu setzen.
Die Konfiguration könnte etwas besser sein, so habe ich leider keine Möglichkeit gefunden bestimmte Klassen oder Dateimuster auszuschließen was in Verbindung mit generiertem Code teilweise etwas nervig ist.
Subversion 1.6 für Ubuntu Jaunty
geschrieben von: reaper, 05.08.2009
Nachdem mir die Installation der aktuellen Subclipse Version mal wieder ein lokales Repository auf Version 1.6 aktualisiert hat funktionierte der in den Repositories von Ubuntu enthaltene Subversion-Client natürlich nicht mehr. Abhilfe schafft ein Update auf Version 1.6 über das Launchpad-Repository:
https://launchpad.net/~anders-kaseorg/+archive/subversion-1.6
Wieder ein wunderbares Beispiel für die Vorteile von Paketmanagementsystemen.
Galileo has arrived
geschrieben von: reaper, 26.06.2009
Seit heute ist die neue Version der Entwicklungsumgebung Eclipse Galileo (aka Eclipse 3.5) im Umlauf. Ich hab gleich mal das PHP-Bundle ausprobiert und bin angenehm überrascht. Viele Details die ich von den Java Views gewöhnt und in der PHP Ansicht vermisst habe sind jetzt dort mit eingezogen. So werden zum Beispiel endlich alle nachfolgenden Vorkommen einer markieren Variablen angezeigt.
Gefühlt ist die IDE auch schneller geworden (ich hoffe mal auf meinem Arbeits-PC hat sich dann auch der Bug beim Öffnen von Dateien erledigt). Auch wenn Eclipse allgemein auf einem modernen PC mit genug Arbeitsspeicher flüssig läuft sind manche Denkpausen schon recht lang :P Allein das Starten dauerte bei mir hier mit Ganymede sowas wie 30 Sekunden und ist jetzt runter auf 15 Sekunden (nicht das die Startzeit wirklich relevant wäre).
Was mit definitiv fehlt ist eine Intgration von SVN. CVS ist mit dabei aber SVN muss mal durch Subclipse immernoch leicht nachrüsten. Da würd ich mich wirklich wünschen das hier mal was out-of-the-box kommt. CVS ist ja nun wirklich ein Großvater unter den Versionskontrollsystemen :P
SVN in Nautilus integrieren
geschrieben von: reaper, 21.05.2009
Normalerweise brauche ich zur Arbeit mit Subversion (SVN) keine fette GUI. Das Kommandozeilentool ist leicht zu bedienen und wenn man die grundlegende Arbeitsweise verinnerlicht hat erledigt die automatische Vervollständigung der Zsh den Rest. Bei der Arbeit mit Eclipse habe ich normalerweise noch Subclipse installiert was ein paar nette Features (Vergleich von Revisionen, Annotations, usw.) in die Entwicklungsumgebung integriert.
Die Kollegen mit Windows haben es da teilweise in ihrem Explorer mit TortoiseSVN noch ein Stück komfortabler, denn durch Tortoise sieht man dort auf den ersten Blick ob ein Verzeichnis oder eine Datei bereits versioniert ist, ob sie lokal verändert wurde und was svn status sonst noch so über sie aussagen kann. Unter Linux fehlt mir so ein Tool ehrlich gesagt, es ist schon echt komfortabel auch über den Dateibrowser Zugriff auf die SVN Metadaten zu haben.
Seitens des mit Gnome verknüpften Nautilus Dateibrowsers gibt es neben einer Reihe einfacher Skripte für commit und update auch NautilusSVN welches sich nahtlos in den Dateibrowser integriert. Über das Kontextmenu bietet NautilusSVN alle denkbaren und sinnvollen SVN Funktionen an und zeigt über kleine Symbole auch auf Datei und Verzeichnisebene den Zustand der Dateien an. Sehr praktisch und aufgeräumt wie ich finde. Also eine prima Adaption von TortoiseSVN aus der Windowswelt, nur besser weil Open-Source.
Neben einem fertigen Paket für Ubuntu steht selbstverständlich auch ein Pakete zur manuellen Installation unter anderen Distributionen zur Verfügung.




