Ich glaube, ich habe soeben ein OSS-Projekt zerstört

Vielleicht nicht zerstört, aber dessen Reputation stark beschädigt.

Vor einigen Monaten bekam ich den Auftrag, einen Onlineladen einzurichten. Da wir vorwiegend PHP-Webapplikationen betreiben, sah ich mich nach einer Open Source-PHP-Lösung um. Der Platzhirsch Magento ist Overkill, das klassische osCommerce sieht langweilig aus, andere Lösungen kosten ein Vermögen oder haben ein komisches Preissystem.

Übrig blieb das nett aussehende OpenCart. Du kannst dir unsere Instanz unter http://www.meteo-shop.ch/ ansehen.

Ah, wie ich vom Design und vom Backend geblendet wurde: Der Code hat einige gravierende Schwächen in seiner Objekt-orientierten Architektur. Er funktioniert zwar, macht aber den Entwicklern von Erweiterungen (In meinem Fall eine Saferpay- und eine Postcard-Zahlungslösung) das Leben schwer.

Open Source-Projekte leben vom Feedback und Austauch, also poste ich im Community-Forum von OpenCart einen längeren Artikel mit Verbesserungsvorschlägen, sowie in einem anderen Thread eine Vorlage für weitere Erweiterungen. Ich bin der Meinung, dass ich dabei differenziert und sachlich argumentiert habe, sowie meinen Willen zur Mitarbeit aufzeigte.

Die Antwort des Entwicklers: Idiot. Plus noch ein paar Beleidigungen und Vorwürfe mehr.

Damit war das Projekt für mich gestorben und diese Geschichte eigentlich abgeschlossen.

Einen Tag später, allerdings, hat jemand einen Linke auf den Thread auf der populären Diskussionsseite auf Reddit gepostet veröffentlicht, inklusive Screenshot des Dialoges. Mit der Konsequenz, dass das Forum dem Ansturm nicht standhielt und offline gehen musste. Und dass die Reputation des OpenCart-Projektes jetzt ziemlich angeschlagen ist…

Tut mir leid, das war nicht Absicht. Aber etwas Schadenfreude verspüre ich trotzdem: Die Antwort des Entwicklers war völlig unqualifiziert und das negative Karma hat zu Recht eingeschlagen.

mtChart – Graphenbibliothek für PHP

mtChart LogoNicht ohne Stolz präsentiere ich die aktuelle Version meiner Graphenbibliothek: mtChart V0.1.2 (GPL V3).

Jetzt fühle ich mich auch langsam revolutionär: Nach Jahren als Anwender und Nutzniesser von freier Software ist das das erste Mal dass ich mich an einem komplett eigenen Projekt versuche. Wobei ich hier auch nur auf bereits getane Arbeit aufbaue: mtChart ist eine Abspaltung (Ein sogenannter Fork) von pChart. Dank der offenen Lizenz konnte ich den Code dieses ins Stocken geratene Projekt einfach übernehmen und meinen Bedürfnissen anpassen.

Greif zu und geniesse.

Temperatur Meteotest Dachstation
Beispiel: Lineplot aktueller Temperaturdaten (Dachstation Meteotest, Bern)

Drei Eclipse/PDT-Shortcuts

Das sind meine Lieblingsshortcuts aus Eclipse (In der PDT-Inkarnation) welche ich nicht auf Anhieb kannte. Und welche dir einen Griff zur Maus ersparen können:

  • Ctrl-Shift-P: Von einer Klammer zum dazugehörenden Gegenstück springen.
  • Ctrl-O und Funktionsname: Schon beim Tippen werden die Funktionen gefiltert, mit den Cursortasten zur gewünschten Funktion bewegen und mit Enter zur Implementation springen.
  • Ctrl-Shift-R und Dateiname: Alle geöffneten Projekte nach einem Dateinamen durchsuchen und anspringen.

Das sollte den Neid auf das unter Windows fehlende Textmate etwas lindern.

foreach-Schlaufen mit Referenz abkürzen (PHP)

Diesen Trick hatte ich offenbar überlesen: Um Array-Werte in einer foreach-Schlaufe zu verändern, kann man anstelle der üblichen Konstruktion hier:

  foreach($array as $index => $value) {
    $array[$index] = $value + 2;
  }

…einfach die Werte per Referenz adressieren:

  foreach($array as &$value) {
    $value += 2;
  }

Sortieren nach Wert in einem assoziativen Array (PHP)

PHP verfügt über ein Dutzend verschiedene Sortierfunktionen für Arrays, aber gelegentlich möchte ich ein assoziatives Array nach einem Feld im Array sortieren. Am einfachsten geht das mit einer Hilfsfunktion und usort:

function sortierNachFeld($a, $b) {
    return strnatcmp($a['feldname'], $b['feldname']);
}
 
usort($meinArray, 'sortierNachFeld');

Die eigentliche Vergleichsfunktion (Hier: strnatcmp) muss ich natürlich den Anforderungen jeweils anpassen.

Etwas unschön ist der hardgecodete Name des Feldes ('feldname'). Aber ich wüsste nicht wie man diesen flexibel ohne den hässlichen Umweg über globale Variabeln übergeben könnte.