Too Cool for Internet Explorer

PHP Anwendungen als Service unter Windows


Unter Linux/Unix ist es kein Problem ein PHP Script als Dämon zu entwickeln und als Hintergrundprozess zu verwenden. Schwieriger gestaltet sich das unter Windows. Wez Furlong hat nun eine Erweiterung für PHP entwickelt, mit der es möglich ist PHP Anwendungen über den Service Control Manager (SCM) von Windows als Dienst zu starten.

Sehr interessant und sehr nützlich.

Gedanken zu WordPress


Wenn man eine Weile mit einer Software arbeitet, fallen einem so nach und nach Punkte auf, die man gerne mag oder die einem mißfallen. WordPress ist ein nettes Tool, allerdings gibt es mittlerweile so einige Dinge, die mich nerven.

Der Editor beispielsweise funktioniert nicht richtig mit Safari. D.h. Tags werden grundsätzlich am Ende eines Textblocks eingefügt, auch wenn man einen Text nachträglich editiert und irgendwo innerhalb eines Textes ein Tag einfügen möchte. Das ist prinzipiell nicht weiter schlimm, da ich über die Tastatur ohnehin schneller bin. Trotzdem würde ich mir für die Zukunft einen aufgebohrten Editor wünschen, der zusätzlich auch noch WYSIWYG fähig ist - funktioniert dann halt nur noch im Firefox, aber das nehme ich gern in kauf.

Im Prinzip ist WordPress ja schon ein eigenes kleines CMS. Da wäre es doch schön, wenn man auch Seiten pflegen könnte, die nicht im Blog auftauchen - wie z.b. das Impressum. Das scheint jedoch nicht so ohne weiteres möglich zu sein. So gibt es keine Möglichkeit bestimmte Kategorien aus dem Blog auszuschliessen. Ich habe mir insofern geholfen, daß ich dem 'post status' (Publish, Draft, Private) noch den Status 'Intern' hinzugefügt habe. Ein Artikel, der als 'Intern' markiert ist, taucht im Blog nicht auf, kann aber dennoch an einer anderen Stelle publiziert werden.

Ansonsten gäbe es da noch ein paar 'nice to have' Features wie eine Funktion zum Prüfen der Rechtschreibung und die Möglichkeit ein Preview im Design der Website anzeigen zu lassen - ich fürchte ich werde früher oder später nicht um meine eigene Software herum kommen ;-).

Update:
Es wäre nett, wenn man eine "Update" Funktion hätte, d.h. ein Text, der nachträglich einem Artikel hinzugefügt wird - so wie dieser hier - wird sowohl im Artikel als auch in den Metainformationen als Artikel-Update gekennzeichnet.

Zum Schluß ärgert es mich regelmäßig, wenn ich nach dem Editieren eines Artikels nicht wieder in der Übersichtsliste aller Artikel zurückfalle, sondern ein leeres Eingabeformular zum Schreiben eines neuen Artikels erhalte.

Wenn ich mal mein eigenes Blog entwickeln sollte, ist außerdem ein richtiger redaktioneller Workflow Plicht: Artikel schreiben < -> Artikelfreigabe etc. Na ja, ein Fehlen dieser Funktionen kann man sicher nicht an WordPress festmachen - dafür ist das Konzept der Software einfach ein anderes...


FreePascal - Version 2.0 kommt


Die Version 2.0 des freien cross platform Compilers FreePascal steht in den Startlöchern. Ein Release Candidate mit der Versionsnummer 1.9.6 wurde vor ein paar Tagen veröffentlicht und verspricht 100%ige kompatiblität zu bestehenden (Borland)Pascal und Delphi Projekten.

Ich habe früher sehr gerne in Turbo- bzw. Borland Pascal entwickelt, habe es jedoch mit den Jahren etwas aus den Augen verloren. Mir gefällt auch heute noch das Sprachdesign und die damit verbundenen Möglichkeiten von Pascal sehr gut. Deshalb überlege ich derzeit ob ich mich wieder mehr damit befassen soll - das würde für mich aber nur Sinn machen, wenn man auch wirklich cross platform GUI Applikationen entwickeln kann.

Für Linux und Windows scheint das kein Problem zu sein - bzw. habe ich das selbst vor ein paar Jahren in Verbindung mit GTK schon getan. Lazarus verspricht dies sogar noch komfortabler zu machen und ein Programm - relativ - unabhängig vom einzusetzenden GUI Toolkit zu halten.

Allerdings tue ich mich im moment noch etwas schwer Informationen zu finden, was die GUI Programmierung unter Mac OS X angeht.


PHP Frameworks - Prado


Prado macht weiterhin rasante Fortschritte. Mit dem nun veröffentlichten Release Candidate der Version 2.0 unterstützt Prado die sehnlichst erwartete Internationalisierung (i18n) und Lokalisierung (l10n) von Projekten. Das Framework unterstützt dabei sogar mehrere Möglichkeiten:

Internationalisierte Texte können wahlweise in einem XML Format (XLIFF), im gettext Format oder in einer MySQL oder SQLite Datenbank abgelegt werden.

Komponenten wie <com:TDateFormat ...> zur Formatierung eines Datums oder <com:TNumberFormat ...> zur Formatierung von Zahlen und Währungen wurden so erweitert, daß sie über einen Lokalisierungsparameter in das gewünschtes Format eines bestimmten Landes umgewandelt werden können. Damit ist es mit Prado glücklicherweise möglich ein Template für unterschiedliche Länderversionen zu verwenden.

Ein Tutorial zum neuen Feature i18n/l10n kann hier eingesehen werden.

Ich bin eigentlich recht angetan von Prado. Ich bin beeindruckt, wie schnell die Entwicklung vorangeht und wie sehr die Entwickler auf Vorschläge aus der Gemeinschaft eingehen und diese in der Weiterentwicklung des Frameworks berücksichtigen.


Listen gestalten mit CSS


Auf der Seite A list Apart gibt es u.a. den sehr interessanten Artikel Taming Lists in dem es um die Gestaltung von HTML Listen mit Hilfe von CSS geht. Der Artikel zeigt sehr gut, wie mächtig cascading stylesheets sind, wie flexibel diese eingesetzt werden können sowie die vielfältigen Gestaltungsmöglichkeiten, die sich beim Einsatz von CSS ergeben.


PHP API zum Zugriff auf Audio- und Videodateien


FFMPEG-PHP ist eine Erweiterung für PHP, die eine objektorientierte API zum Zugriff auf Video- und Audiodateien bietet um Informationen und - bei Videodateien - Frames zu extrahieren.


PixelQuelle.de Foto Contest


Der 5. PixelQuelle Fotocontest mit dem Thema "Die Welt im Detail (Makroaufnahmen)" ist gestartet. Bis zum 13. Februar können Fotos eingereicht werden. Hauptpreis ist diesmal ein Einbeinstativ der Marke Manfrotto.

PHP Database Abstraction Layer


Mit Creole steigt ein weiterer Kandidat in den Ring der Datenbank Abstraktions Schichten. Eigentlich hatte ich mich schon mit ADOdb angefreundet. Vor allem daß es für ADOdb eine PHP Erweiterung in C gibt, gefällt mir gut. Allerdings wartet Creole mit einigen interessanten Features auf, wie eine einheitliche Typisierung, die auf JDBC basiert. Außerdem basiert Creole auf PHP5 und es gibt ein paar nette Projekte, die auf Creole aufsetzen und dessen Funktionsumfang erheblich erweitern.

PHP Distributed Memory Cache


memcached is a high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load.


Zu dieser Software gibt es auf dieser Seite eine PHP Erweiterung. Memcached wird erfolgreich auf großen Community-Sites wie livejournals.com und slashdot.org eingesetzt, um Anfragen an die Datenbank zu reduzieren und somit die Datenbanklast zu senken und die Performce der Applikation zu steigern.

Klingt sehr interessant.

PHP und Templates


Schon vor einigen Jahren erschien auf der Seite phppatterns.com ein interessanter Artikel zum Thema PHP und Templates, in der über den Sinn zur Verwendung von Template-Systemen in Verbindung mit PHP diskutiert wurde. Das - meiner Ansicht nach - richtige Hauptargument dort: PHP selbst ist schon eine Template Engine.

Jeder, der schon einmal eine eigene Template Engine entwickelt hat, oder auch ein bestehendes System wie z.b. Smarty verwendet hat, sollte einmal einen Blick auf diesen Artikel und die Argumente dort werfen. Ich selbst habe mehrere Template Systeme entwickelt und habe mich erst kürzlich bei einem Projekt zur Entwicklung eines CMS' wieder an den Artikel erinnert, als ich nämlich begann einen komplett neuen Interpreter inkl. PHP Converter zu entwickeln. Zwei berechtigte Fragen, die dabei auftauchten:


  1. Kann man Menschen zumuten, eine Templatesyntax wie die von Smarty oder eine vergleichbare zu erlernen, wenn man eben diesen nicht zutraut mit der Syntax von PHP zurecht zu kommen?

  2. Ist es Sinnvoll das Rad neu zu erfinden?



Natürlich ist es unbedingt notwendig die Programmlogik von der Ausgabe zu trennen. Daß dies aber auch anders funktioniert, zeigen Template Engines wie Savant, die PHP selbst als Templatesprache verwenden.


Probleme mit DarwinPorts


Ich habe mich kurzerhand enschlossen, meine darwinports installation komplett neu zu installieren. Vor einiger Zeit hatte ich schon einmal das Problem, daß ich eine Software nicht über das ports system installieren konnte, bzw. eine ältere Version der Software sich nicht upgraden ließ. Das Problem war, daß eine Bibliothek nicht ordnungsgemäß im System registriert waren und sich über das ports system deshalb weder upgraden noch deinstallieren ließen.

Bei meiner Suche nach Leidensgenossen für dieses Problem, stieß ich auf den Eintrag in Paul Beard's Blog, der diese Symptome, sowie ein Lösungansatz, sehr schön beschrieben hat.

Heute nun wollte ich endlich meine installierte Version von The Gimp upgraden und was muß ich feststellen? Das ports system zickt schon wieder rum! Dabei waren die Abhängigkeiten so verschachtelt, daß ich beschloß das System einfach komplett neu aufzusetzen.


PHP Frameworks


Mittlerweile gibt es einige sehr interessante Frameworks für PHP. Drei der für mich interessantesten sind:


  • Studs begann als Port des in der Java Welt sehr verbreiteten MVC Frameworks Jakarta Struts. Mittlerweile ist es viel mehr als das. Studs bietet eine objekt orientierte API, einen HTTP Servlet Container, sowie eine Server Pages Engine für PHP.

  • Prado ist ein Komponenten- und Ereignisbasiertes Framework. Das Entwickeln einer Anwendung mit Hilfe von Prado ähnelt der Entwicklung von Anwendungen mit Hilfe von RAD Toolkits wie z.b. Delphi und Visual Basic: das Verwenden und Konfigurieren von Komponenten, sowie das Reagieren auf die durch Komponenten ausgelösten Ereignisse. Prado ist der Gewinner des Zend PHP5 Coding Contest

  • Kong42 ist ein ereignisorientiertes Framework, welches bei der Weiterentwicklung der Online Platform von VIVA TV entstand und dort u.a. als Basis der Community Tools dient.



Jedes dieser Frameworks nimmt von sich in Anspruch besonders leicht zu erlernen zu sein - natürlich. Ich werde das zu schätzen wissen, wenn ich eines dieser Frameworks für zukünftige Projekte verwenden werde ;-).

Eine Liste weiterer PHP Frameworks kann unter diesem Link gefunden werden.


PNGs optimieren


Oft hat man das Problem, daß PNG Dateien Aufgrund der Möglichkeit zur Verwendung von Transparenzen verwendet werden müssen, die fertigen Dateien aber zumindest für das Web zu groß sind. Die Titelgrafik auf meiner Homepage beispielsweise war über 260kb groß - zu viel, um sie auf einer Website benutzen zu können. Zur Lösung dieses Problems gibt es zum Glück einige sehr praktische Hilfsprogramme.

Eines davon, das für mich das optimalste Ergebnis lieferte, ist pngquant. Pngquant wandelt eine Grafik, die im 32-bit RGBA Format vorliegt, in eine 8-bit Datei um, ohne die transparenten Bereiche zu verlieren. Die Titelgrafik auf meiner Seite konnte so von 260kb auf unter 62kb reduziert werden - ohne nennenswerte Qualitätseinbuße.

Pngquant ist open source. Ausführbare Programme gibt es für Linux und Windows, der Source Code läßt sich ohne weiteres unter anderen Betriebssystem z.b. Mac OS X compilieren.

Ein weiteres nützliches Tool zur Kompressionsoptimierung ist pngcrush. Pngcrush bietet viele Optionen zur Anwendung verschiedenster Kompressionsfilter. Außerdem gibt es einen "brute" Modus, der über 100 verschiedene Kompressionsalgorithmen auf die jeweilige PNG Datei anwenden kann und dann den Algorithmus mit dem besten Ergebnis zur Generierung der Ausgabedatei verwendet.

Auch Pngcrush ist Open Source, unter Mac OS X kann es auch über die DarwinPorts installiert werden.


Demnächst an dieser Stelle...


Nachdem meine Homepage in den letzten Jahren immer seltener aktualisiert wurde und schließlich praktisch nur noch eine Baustelle mit wechselnden Links war, habe ich mich nun endlich entschlossen unter die "Blogger" zu gehen. Vielleicht gelingt es mir so ja die Inhalte auf der Seite aktuell zu halten bzw. überhaupt irgendwelche sinnvollen Inhalte anzubieten ;-). Als netten Nebeneffekt verspreche ich mir ein wenig Ordnung in das Chaos der gesammelten Informationen und Links zu bringen.

Bis die Seite komplett fertiggestellt ist, muß sich freilich noch einiges zu tun. Aber ich denke, daß ich zumindest ab kommender Woche das Blog starten und mit Inhalten füllen kann.

Als Backend verwende ich das meiner Ansicht nach sehr gute wordpress, das ich mir etwas auf meine Bedürfnisse hin angepasst habe. Vor allem die Funktionen zum Füllen der Templates lassen meiner Ansicht nach was die Flexibilität angeht sehr zu Wünschen übrig - leider. Für die - hoffentlich demnächst - verfügbare Linkdatenbank verwende ich XBEL als Ablageformat, sowie ein einfaches selbst gestricktes Backend.