„Zieht eine Mauer hoch...“

„… zwischen den Fahrspuren“ dachte ich mir heute.

Ganz Deutschland scheint nur noch den Klettverschluss zu kennen. Zumindest begreifen offensichtlich die Autofahrer das Reißverschlussverfahren nicht. Es waren heute drei (gefühlte 10) Kilometer Stau auf der A1 in Hamburg, weil die drei Fahrspuren aufgrund einer Baustelle zu einer Spur wurden. Nun ist den Leuten nach Kenntnisnahme des Schildes, welches das Entfallen einer Fahrspur anzeigt, nicht mehr gegeben, einen klaren Kopf zu behalten und scheinen nur noch zu denken: „Ich muss so schnell wie möglich runter von meiner Spur“, obwohl es noch 1500 Meter Zeit hat und die StVo §7 Abs. 4 aussagt, dass man am Ende der Fahrspur auf die nächste Spur wechseln soll.

weiterlesen »

Ganz neue Methoden der Volkszählung

Also dass man versucht, heute Geld zu sparen, kann ich ja verstehen, aber dass man für die Volkszählung jetzt auch Transportunternehmen benutzt war mir nicht klar. So gelesen in einer niedersächsischen Lokalzeitung:

Betrunkener von Bahn erfasst

Ich war doch sehr erstaunt, als ich ein paar Zentimeter weiter rechts dann noch folgende Überschrift las:

Stadtbahn erfasst 13-jähriges Mädchen

Methoden sind das heutzutage *kopfschüttel*

Hätte man diese Überschriften nicht besser anders formulieren können, damit sie nicht mehrdeutig sind?

weiterlesen »

Sicherstellen der Funktionalität

Derzeit überlege ich, wie man bei Webprogrammierungen die Funktionalität sicherstellt.

Klar, man kann einfach Unittests schreiben, die prüfen, ob eine Funktion/Methode genau das zurückgibt, was sie soll, nur ist das für dynamische Webseiten meiner Meinung nach etwas umständlich. Man müsste in den Unittests den auszugebenden String prüfen, ob der als Ergebnis herauskommt, aber was macht man in so einem Fall mit dynamischen Menüs? Fügt man einen Menüpunkt hinzu, muss man alle Unittests verändern. Macht man nur eine Teilprüfung der erstellten Seite, also nur den Content-Bereich oder Header und Footer, hat man ja wieder das Problem, dass der andere Teil nicht stimmen könnte.

weiterlesen »

Foxlin: VPI-Verarbeitung und GIFs

Hier mal ein aktuelles Update:

Nachdem ich jetzt erstmal ein Refactoring der ersten Tests gemacht habe, parst der derzeitige Foxlin-Stand jetzt nicht mehr nur die default.xml, sondern auch die restlichen VPI files inkl. der _vpi.xml, die man auf seiner eigenen Domain hinterlegen kann.

Ein Problem hat sich allerdings in dieser Woche herauskristallisiert: Man kann bei animierten GIFs mit einer Endlosschleife nicht herausfinden, wie viele Frames mit wieviel delay ein Frame hat, sodass man das Ende eines Loops nicht mitbekommt. Jetzt muss ich einen Workaround finden, um zu verhindern, dass ein Avatar bis zur nächsten Aktion winkt.

weiterlesen »

Spannende Aufgaben warten

In der kommenden Woche wartet die spannende Aufgabe auf mich, ein Webportal komplett von ISO-8859-1 auf UTF-8 umzustellen, inkl. der Templates, Languagefiles (die übrigens auf ihre Umstellung auf gettext warten) und am Interessantesten: die MySQL-Datenbank. Vielleicht stell ich dafür ein kleines Script zur Verfügung. Wünscht mir viel Glück.

weiterlesen »

Opera Mini gut aufgeholt

Hatte ich mich bis vor Kurzem noch geärgert, dass der Opera Mini auf meinem E61 irgendwie eine Zumutung war, weil er die aufgerufene Seite nach eigenem Ermessen angezeigt hat.

Nun hab ich doch einfach mal den Opera Mini 4 beta ausprobiert und muss sagen, dass das Ding einen grossen Schritt nach vorne gemacht hat. Die großartige Darstellung der Webseiten und der Smooth beim Scrolling sind spitze, sodass ich zumindest auf dem Handy den Switch auf den Opera anstreben werde.

weiterlesen »

Fehler immer sofort beheben

Heute wurde festgestellt, dass es wirklich sinnvoll ist, eine Software richtig zu testen. Problem war, dass eine Komponente einfach nicht mit einer anderen zusammenarbeiten wollte, obwohl es 10 Minuten vorher noch geklappt hat. Nach manuellem Aufruf der anderen Komponente war der Fehler nachvollziehbar.

Problem war, dass das Kommunikationsmodul refakturiert wurde, eigentlich auch getestet wurde, aber trotzdem nicht lief. Ein Hoch auf nicht durchgeführte Unittests. Problem ist einfach die Faulheit der Entwickler (mich eingeschlossen), sich vorher zu entscheiden, was eine Methode machen und/oder zurückgeben soll und dafür vorher den Unittest zu schreiben. Weiteres Problem ist, dass man PHP5-kompatible Unittest-Libraries installieren müsste, was der normale Programmierer natürlich selten einfach darf.

weiterlesen »

Werbespruch des Tages

Mein persönlicher Werbespruch des Tages ist „zurückgebrachte Schönheit“. Da stell ich mir ne hübsche Frau vor, die in den Laden kommt und sagt: „Hier, nehmt die Schönheit zurück - hab’ keinen Bock, andauernd angequatscht zu werden“.

Wer sich das wieder hat einfallen lassen.

weiterlesen »

Variablen durch die ganze Anwendung ziehen

Derzeit bearbeite ich Quelltext, der schon bestand, als ich angefangen habe, dem Projekt beizutreten. Eine Eigenart des Quelltextes ist, dass es in vielen anwendungskritischen Bereichen eine Variable $ok gibt, die über mehrere Objekte geschleift wird, wie z.B.:

function function1() {  
  $object = new Object();  
  $ok = $object->method();  
  return $ok;  
}  

$ok = function1();  
if($ok) {  
  /* hier folgen weitere Anweisungen */  
}  

Und so geht das immer weiter. Alles irgendwie hysterisch gewachsen. Setzt man sich jetzt hin und stellt alles auf Exceptions mit try … catch um oder lebt man in Zukunft damit?

weiterlesen »

Wer findet schneller - Datenbank oder Script?

Tja, wer machts denn nun schneller? Der konkrete Fall:

ObjectList()  
{  
 [liste] => Array {  
   [0] => [25]  
   [1] => [43]  
   [2] => [127]  
 }  
}

Nun wird das durch aus größere Array mit einem foreach durchlaufen und daraus dann folgendes produziert:

$objectList = new ObjectList();  
foreach($objectList->liste as $key) {  
 /**  
  * Hier werden die Daten aus der  
  * Datenbank gezogen, wenn das Object  
  * noch nicht im MemCache existiert  
  */  
 $object = new Object($key);  
 if($object->Eigenschaft == $zusuchenderstring) {  
   return $this->id; // or something else :)
 }  
}

um das mal grob darzustellen.

weiterlesen »