BenBE's humble thoughts Thoughts the world doesn't need yet …

23.06.2012

RRDTool für PHP 5.4

Filed under: Software — Schlagwörter: , , , , , , , — BenBE @ 22:58:54

Nach dem letztens endlich das Packaging für die von mir etwas für aktuellere PHP-Versionen gepflegte RRDTool-Extension abgeschlossen war, dachte ich eigentlich, dass das soweit auch für PHP 5.4 funktionieren sollte. Da ich wegen dem ausstehenden Support für den Suhosin-Patch aber noch nicht upgraden wollte, gab es natürlich wenig Chancen, das selber zu überprüfen.

Vor knapp 4 Wochen habe ich mich dann aber doch hingesetzt, um meinen Server auf PHP 5.4 zu aktualisieren. Nachdem das Update selbst recht unproblematisch verlief und bis auf wenige Extensions, die einen expliziten Arschtritt zum Compilen haben wollten, alles lief, war die RRDTool-Extension dran. Und (Grüße an Murphy) es wollte nicht compilieren. Aber glücklicherweise waren das nur ein paar Kleinigkeiten, die sich im Wesentlichen darauf beschränkten, den Typ pval durch zval beim Abfragen von Parametern auszutauschen.

Sobald das durch war, funktionierte das auch mit dem Compilieren und alle Scripte mit der Extension liefen wieder wie immer.

Die neu, nun mit Support für PHP 5.4, gepackagedte Version gibt es ab sofort; nach dem ich nach einer stressigen Zeit dazu gekommen bin, das alles zusammenzupacken. Außer der oben genannten Änderung ist nix an Features hinzugekommen. Wird also PHP 5.4 nicht benötigt, reicht auch die alte Version. Die neue RRDTool-Extension für PHP 5.4 (Version 0.2) gibt unter dem genannten Link.

Flattr this!

26.03.2012

RRDTool mit PHP nutzen

Filed under: Software — Schlagwörter: , , , , , — BenBE @ 00:03:40

Wer meinen Blog bereits ein wenig verfolgt hat, wird mitbekommen haben, dass manchmal Graphen auftauchen, die mit RRDTool erzeugt wurden. Nun habe ich ja bereits einmal zu RRDTool etwas geschrieben, aber den von mir geschriebenen Wrapper, sowie den aktuellen Code-Stand (nach angewendetem Patch) hatte ich bisher noch nicht weiter veröffentlicht. Das werde ich hier jetzt einfach mal nachholen, damit sich keine weiter beschweren kann, dass RRDTool mit PHP so kompliziert zu nutzen geht.

Das Projekt besteht hierbei aus zwei Teilen: Neben der PHP-Extension, die sich um die Anbindung an librrd4 kümmert, zusätzlich aus einem Userland-Teil, der einen Wrapper um die API bildet und eine ganze Menge der Operationen in OOP kapselt. Die API dazu ist zwar nicht die schönste, aber für meine Projekte hatte das bisher immer vollkommen gereicht und die wichtigsten Funktionen sind leicht nutzbar. Zusätzlich hab ich einen Log-Parser basierend auf meinem Wrapper als eine kleine Demo-Anwendung eingebaut, so dass man sich die Funktionsweise etwas anschauen kann. (more…)

Flattr this!

29.01.2012

Zu faul zum Suchen

Filed under: Server — Schlagwörter: , , , , , , , — BenBE @ 02:07:54

Hätte ich nicht schon wieder zwei Abende damit zugebracht, die Ursache für einen Fehler bei einem Joomla-Update zu suchen, würde ich es ja unter der Kategorie „Running Gag“ verbuchen, dass die Joomla-Entwickler jedes Mal auf’s Neue sich in der Kreativität ihrer Bugs übertreffen. War es beim einem Komponenten-Update noch das Unvermögen konsistente Datenstände zu halten, so ist es in Sachen Software-Update die Abwärtskompatibilität zu seinen eigenen, früheren Versionen. (more…)

Flattr this!

12.07.2011

Es funktioniert doch!

Filed under: Software — Schlagwörter: , , , , , , , — BenBE @ 15:31:26

Eine der schlimmsten Krankenheiten, wenn nicht gar Geschwüre unter Programmierern ist der Satz „Aber es funktioniert doch!“, wenn man sie darauf hinweist, dass ihre Software fehlerhaft implementiert ist. Unabhängig davon, was wirklich falsch ist, oder wie groß die nötige Änderung ist. So aus Prinzip halt. (more…)

Flattr this!

14.06.2011

Komponenten-Update mit sehr viel Fail

Filed under: Software — Schlagwörter: , , , — BenBE @ 01:50:56

Heute gibt es wiedermal ein Leckerli aus der Kategorie „Soviel Fail gibt’s nur bei Joomla“. Wer also schon immer über Joomla lästert, findet hier nun genau einen weiteren Punkt, wie Software nicht aussehen sollte. Aber gehen wir einmal der Reihe nach.

Für ein Projekt baue ich derzeit eine Komponente in Joomla, die eine Reihe von Erweiterungen in der Oberfläche implementiert. Die Komponente ist auch soweit fast fertig und ist im Backend wunderbar angebunden. Da im Laufe der Entwicklung noch zwei Menüpunkte zu ergänzen waren, musste diese kurzzeitig deinstalliert und wieder neuinstalliert werden, was an sich auch kein Problem darstellt, wäre da nicht … ähhhm … Joomla.

Die Komponente implementiert im Frontend nämlich die Erzeugung von SEO-freundlichen Links, die – aus einem Vorgängerprojekt stammend – auch bereits wunderbar funktionierten und im Produktiveinsatz keinerlei Probleme zeigten. Seitdem die Komponente jedoch zwischenzeitlich neu im Joomla eingebunden wurde, um die Anpassungen im Menü des Backends zu übernehmen, sah man nur die Joomla-typischen ItemId-Parameter in der Adresszeile. Die vormals funktionierenden Routen (wie die SEO-URLs im Joomla-Slang heißen) wurden nicht einmal mehr noch beachtet. Aufrufbar waren die Links dennoch. Auch ein erneutes Abspeichern der Menüeinträge, nachdem der Item-Type neu gesetzt wurde, bewegte Joomla nicht dazu, wieder SEO-URLs anzuzeigen.

Also fängt das Debugging an. Und wer jetzt als Admin nicht zumindest die Postfix-Konfiguration oder eine Einsendung zum IOCCC gewohnt ist, sollte u.U. erstmal was essen; auf nüchternen Magen verträgt man das nämlich sonst nicht. Also gut: Schauen wir zuerst einmal in die Joomla-Datenbank, um zu sehen, was Joomla bei der Komponenten-Installation so feines anstellt. Als erster Kandidat erweist sich hier die Tabelle jos_extensions. In dieser stehen alle Komponenten, Themes, Plugins und wie die Teile im Joomla-Slang wohl noch so alle heißen. U.a. findet sich hier auch ein Eintrag unserer Komponente, die nicht mehr geht. Nunja: Normal wäre ein Eintrag, seltsamer Weise hat es Joomla aber geschafft, hier mehrere Einträge draus zu machen, weshalb die Komponente zwei Mal auftaucht. Auch übrigens im Admin-Panel. Naja, passiert. Löschen wir also beide Einträge, deinstallieren die Dateien aus dem Joomla-Verzeichnis, die unsere Komponente betreffen und spielen die Update-Datei erneut ein.

Wer nun mit einer Meldung „Juhu, erfolgreich installiert“ gerechnet hat, darf bitte noch einmal das Thema dieses Posts verinnerlichen: Joomla! Stattdessen wirft einem Joomla eine Meldung „Error building admin menu“ an den Kopf. Naja, schauen wir noch mal in die Datenbank und finden da eine Tabelle jos_menu. Ja, hier handelt es sich, wie der Name vermuten lässt, um die Tabelle, in der jegliche Menüeinträge aufgeführt werden. Und wie es sich für ein unsauber konzipiertes System wie Joomla gehört, auch anwendungsübergreifend Frontend und Backend gemischt. Wer also mal so richtig sein Backend zerschießen will, darf in der jos_menu-Tabelle gerne anfangen. In besagter Tabelle fanden sich nun die von der Komponente in der XML-Datei registrierten Menü-Punkte. Jedoch nicht von der aktuellen Installation, sondern – fein säuberlich aufgehoben – von der Erstinstallation der Komponente. Also jos_menu aufräumen, die Komponente aus jos_extensions deinstallieren UND die Komponente wieder aus der Joomla-Installation entfernen.

Womit wir den nächsten Anlauf starten können. Komponenten-Package hochladen und auf die Meldung warten. Diese teilte uns diesmal (rot untermalt) mit, dass kein Fehler aufgetreten sei … bei der Ausführung einer Datenbank-Funktion. Womit wir bei vielsagenden Fehlermeldungen wären, denn in einer Fehlermeldung mitzuteilen, dass kein Fehler aufgetreten sei, ist nur bei Status-Code 0 unter Windows witzig, weil es dort zumindest der Erwartungshaltung des Anwenders entspricht. Denn wenn kein Fehler aufgetreten ist, obwohl man einen erwartet, spricht das entweder dafür, dass man sein Programm in die Tonne hauen sollte, oder etwas schief gelaufen ist, was einfach nicht bedacht wurde. Da die Fehlermeldung leider den Informationsgehalt einer Nachricht über einen umgefallenen Sack Reis in China hatte, ging der Weg erstmal zur Suchmaschine der Wahl, wo gleich der 3. Treffer aus einer Bündelung von Forendiskussionen zu dieser Fehlermeldung auf die 3. Tabelle in der Joomla-Datenbank verwies: jos_asset, die manchmal, unter nicht ganz nachvollziehbaren Umständen, noch Datenmüll beinhaltet, den Joomla selber nicht aufräumen will. Also auch hier kurz mit dem Datenbank-Tool der Wahl kurz gekehrt, die beiden anderen Tabellen wieder gereinigt und die Komponente nochmals installiert. Überraschenderweise diesmal sogar ohne Fehlermeldung.

Einzig die SEO-URLs, wegen derer ich diesen ganzen Aufriss angestellt hatte, waren immer noch nicht in Sichtweite.

Wobei, nicht ganz. Ich erwähnte ja besagte Tabelle jos_menu, in der Joomla jeglichen Datenmüll, der Menüeinträge betrifft, hinterlegt. Unter anderem finden sich hier die URL des Menüeintrags, die Art des Menüeintrags, sowie eine seltsame Zahl, die mit der Spaltenüberschrift component_id versehen ist. Wie jetzt? Sagt euch nix? Naja, schauen wir mal, ob sich da was finden lässt?

Ein Ansatzpunkt für die Lösung des Rätsels stellte – nahezu offensichtlich, wenn man sich die Werte anguckte – die Tabelle jos_extensions dar. Ja, DIE Tabelle jos_extensions, in der wir vorhin angefangen haben. Und nein, wir haben vorhin auch nicht die falsche der doppelten Komponenten-Registrierungen gelöscht, wie man zuerst vermuten könnte. Das ließ sich nämlich recht einfach anhand der – richtig – component_id feststellen, die es zum Ausgangszeitpunkt nämlich auch schon nicht (mehr) gab.

Was passiert war, ist an sich nämlich recht einfach – und genauso hirnrissig so zu implementieren; aber wir reden ja grad über Joomla, die tun sowas einfach: Menüeinträge sind statt auf den component_name (also ‚com_foo‘) auf die (installationsabhängige) component_id fixiert. Diese wird jedoch nicht aktualisiert, wenn eine Komponente nicht über den Upgrade-Mechanismus aktualisiert werden kann. Stattdessen zeigt diese dann ins Leere, obwohl anhand der URL die Beziehung zur zuständigen Komponente wieder hergestellt werden kann. Auch ein erneutes Speichern des Menüeintrags sorgt bei Joomla nicht dafür, dass dieser offensichtliche Integritätsfehler korrigiert wird. Wenn Joomla also die SEO-URL für diese URL erzeugen soll, beachtet es ein Feld, dessen Integrität offensichtlich defekt ist, statt die im Router eh ausgewertete Information zur Komponente heranzuziehen. Ändert man manuell für alle Menüeinträge, die noch auf eine alte, ungültige component_id zeigen, diese auf die aktuelle Kennung, so geht es. Ach ja: Wer Spaß haben will, darf das Routing übrigens auch sein Template machen lassen; man muss nur die richtigen IDs in die DB und Dateien auf die Platte schreiben.

Was immer die bei Joomla rauchen: Das Zeug muss gut sein!

Flattr this!

10.04.2011

Dropbox und Verzeichnis-Listings

Filed under: Software — Schlagwörter: , , , — BenBE @ 00:13:45

Manche Leute nutzen ja ihre Dropbox ja als Fileserver. Was in dem Zusammenhang aber etwas störend ist, sind die Fehlenden Directory-Indizes. Aber da lässt sich, auch ohne einen lauffähigen Apache, schnell Abhilfe schaffen. (more…)

Flattr this!

01.03.2011

Parser-Bau für Einsteiger

Filed under: Software — Schlagwörter: , , , — BenBE @ 17:56:05

Wenn man in seinem Programm mathematische Ausdrücke, die vom Nutzer eingegeben wurden, auswerten möchte, so kann man dies entweder mit Hilfe bösartiger Konstrukte tun, oder aber, mit Hilfe eines Parsers, die Ausdrücke selber auswerten und dann in einer kontrollierten Umgebung ausführen. Die Möglichkeit einer solchen kontrollierten Ausführung ist in Script-Sprachen wie JavaScript notwendig, kann aber auch in Template-Systemen gute Dienste leisten, wenn mit den dem Template übergebenen Daten noch Berechnungen zu erledigen sind, oder einfache Transformationen zu implementieren sind. (more…)

Flattr this!

03.12.2010

mod_fcgid und Anfragenbegrenzungen

Filed under: Server — Schlagwörter: , , , , , , — BenBE @ 09:10:03

Eigentlich wollt ich ja nur, dass ein paar Urlaubsbilder auf dem Server einsortiert werden, aber daraus wurde nicht gleich was. Denn statt fein einsortierter Urlaubsbilder erhielt ich nur eine plumpe Meldung von ispCP, die mir einen internen Fehler mit HTTP-Statuscode 500 ansagte. Also ganz ohne weitere Details versteht sich, denn die wären Luxus. (more…)

Flattr this!

01.09.2010

Possible rework on the GeSHi parser waiting for review

Filed under: GeSHi — Schlagwörter: , , , — BenBE @ 12:27:04

As announced earlier here’s some external work by Simon Gábor that might get into the GeSHi core IF I can get enough confidence in those changes to work properly and don’t cause any major regressions – which I currently lack nor can confirm by reviewing this patch. (more…)

Flattr this!

GeSHi 1.0.8.9 trapped in congestion of packaging pipeline

Filed under: GeSHi — Schlagwörter: , , , , , — BenBE @ 11:22:06

Hi folks,

maybe some of you already noticed, but there has already been an 1.0.8.9 release of GeSHi about a month ago. If you now wonder why there is no download yet: Well, there was no time for packaging it yet, thus the only way for now is to grab the RELEASE_1_0_8_9 tag from the GeSHi SVN.

Again there are quite some changes in the release thus don’t forget to read the changelog to fetch ‚em all 😉

The next steps in getting the release out will be a small revise of a PHING release script by cweiske at the IRC channel, that aims to automate some of the stuff that has to be done for packaging, even though not necessary when just doing the tagging part of the releases. Just in case you wondered why actually packaging takes so long 😉

There will be a kinda preview of the next GeSHi release for 1.0.8.10 sometime soon for all the changes that already got integrated so far. Mostly this affects a lot of new language files and changes to existing ones but minor patches to the LangCheck script are waiting too. To grab it just have a look at the RELEASE_STABLE branch at the GeSHi SVN; updates will go there. Currently I’m still trying to reduce the backlog of mails that accumulated, But I’m mostly done with it.

There’s one somewhat bigger patch still waiting in the pipeline that addresses an issue with „highlight-within-highlighted“ situations but due to major changes to the parser this patch introduces I didn’t review it yet. But more on this in another post.

Flattr this!

« Newer PostsOlder Posts »

Powered by WordPress