Archiv für die Kategorie „PHP“

Free Pear: 2 freie Pear-Channel Dienste

Montag, 11. Januar 2010

Update 1: 12.01.2010 13:00; Siehe Unten

Will man selbst PHP-Bibliotheken veröffentlichen, steht man vor einem schlichten Problem: Wie? Die übliche (und einfachste) Antwort ist die manuelle Lösung, bei der man sich das Paket selbst herunterladen und entpacken muss. Dabei gibt es für PHP schon seit Jahren mit PEAR eine Paketverwaltung, die allerdings im Laufe der Zeit etwas in Vergessenheit geriet. Third-party Bibliotheken sind oft effektiver, viele PEAR-Pakete werden garnicht oder nur noch sporadisch weiter entwickelt, und letzten Endes gilt das dazugehörige CLI-Tool als komplex. Letzteres gilt eigentlich zu Unrecht, denn als einfacher Anwender braucht man nur die 2 Kommandos channel-discover und install.

Will man nun allerdings für den PEAR-Installer Pakete bereit stellen, sieht man sich zwangsläufig dazu verpflichtet selbst einen PEAR-Server, wie Pirum bereit zu stellen. Mal abgesehen davon, dass das nicht für jeden möglich ist, führt das auch dazu, dass jeder seinen eigenen, verteilten Server bereit stellt, der womöglich nur ein einziges Paket enthält. Von einem Verzeichnis kann hier nicht mehr gesprochen werden. Genau das könnten jetzt zwei Dienste entgegen wirken:
Pearhub (Introductory Blog Post) und Pearfarm (Announcing Pearfarm). Da beide noch sehr jung sind, kann man zwar keine Wunder erwarten, aber endlich mal gibt es sowas überhaupt für PHP-Entwickler, die nicht selbst einen Server aufsetzen wollen oder können.

Pearhub

Pearhub ist ein Ein-Mann-Projekt und so auch sehr einfach aufgebaut. Wie der Name schon andeutet (“Github“) ist dieser Dienst sehr eng mit Versionierungssystemen verknüpft, was auch der einzige Weg ist neue Paket-Releases zu veröffentlichen. Pearhub holt sich dabei die Dateien der Releases selbstständig aus beliebigen Git- oder SVN-Repositories, indem es diese nach Versions-Tags — also Tags mit Namen der Form “vX.Y.Z” oder “X.Y.Z” — absucht, von dort bestimmte Verzeichnisse zusammen sammelt und zusammen mit Properties, die bei der Erstellung des Pakets angegeben wurden, das Paket schnürt.

Aus Entwicklersicht ist dies auch schon alles. Man meldet sich mit einem OpenID-Benutzernamen an [1], erstellt ein Paket an, wobei man dort bereits Lizenz, Maintainer, Dependencies, usw für alle Pakete angibt. Danach wartet man, falls es schon versionierte Tags gibt. In Zukunft braucht man sich garnicht weiter darum kümmern.

Aus Anwendersicht ist es fast nocht einfach: Man muss den Channel nur einmal “erkunden” (pear channel-discover pearhub.org) und kann dann beliebige dort registrierte Pakete mit “pear install pearhub/PaketName” installieren. Es gibt dabei nur einen Channel, in dem alle Pakete alle Benutzer laden. Das spart das erkunden weiterer, verstreuter Channels.

Etwas störend ist, dass die Tags zwar nach eigenen Aussagen nach “Semantic Versioning” abgesucht werden, eine Version “0.5.0dev” erkannte es im Test bisher allerdings nicht. So scheint es, dass als “Status” nur “Completed” möglich ist. Zudem fehlt es an ein paar, nicht ganz unwichtigen package.xml-Properties, wie zB API-Version, optionale Abhängigkeiten, sowie einige Dependency-Arten und automatisierte Task. Die wichtigen sind allerdings alle vorhanden. Man könnte Pearhub noch vorwerfen, dass es keine Dokumentation gibt, aber die würde sich sowieso wie eine Anleitung für einen Toaster anfühlen.

Pearfarm

Pearhub dagegen wirkt fast schon traditionell. Es versucht einen ähnlichen Service anzubieten, wie die Rubygems für Ruby. Das macht Pearfarm etwas komplizierter als Pearhub, dafür aber auch mächtiger.

Als Entwickler sollte man sich trotzdem nicht abschrecken lassen, dann pearfarm gibt einen dafür ein handliches CLI-Tool an die Hand. Mit init erstellt man die “pearfarm.spec”, die man erstmal bearbeiten muss. Danach erstellt man direkt mit build das Paket, was man direkt mit push meinpaket.tar.gz hochladen kann [2]. In Zukunft muss man in der Spec-Datei nur noch die Versionsnummern anpassen.

Im Gegensatz zu Pearhub gibt es pro Nutzer einen eigenen Channel unter “benutzername.pearfarm.org”. Ein Anwender muss also jeden Benutzer einzeln “erkunden”, wenn er Pakete von verschiedenen Nutzern installieren will. Ansonsten ändert sich nichts.

Leider merkt man Perfarm schon eher einen gewissen Beta-Status an. Zum Beispiel ist als Lizenz nur die MIT-Lizenz möglich, weil die Links zu den Linzenzen fest einkodiert sind, es gibt davon aber bloss zur Zeit nur diese eine. Die Dokumentation ist ziemlich lückenhaft, was grad für die Spec-Datei etwas ungünstig ist. Ob “Ein-Channel-Pro-Nutzer” ein Nachteil ist, ist schwer zu sagen: So kann sich jeder beliebig ausleben und vielleicht eigene Bibliotheken noch etwas feiner aufteilen und mit Abhängigkeiten verknüpfen, aber einfach zum Stöbern und Installieren bei beliebigen Nutzern lädt es nicht ein.

Abschluss

Beides sind vielversprechende Dienste, die sehr unterschiedliche Wege gehen. Bei Pearhub vermisst man die Flexibilität der Spec-Dateien von Pearfarm. Andersherum vermisst man bei Pearfarm Pearhubs Automatisierung. Vielleicht gibt es irgendwann eine Zusammenarbeit ;) , oder Einer klaut einfach geschickt vom Anderen. So wäre die Spec-Datei im VCS-Root [3] ebenso gut aufgehoben. Auf jeden Fall sollte jeder PHP-Entwickler ein Blick darauf werfen. Ein verbreitetes Paketmanagement, was auch noch auf bewährten Techniken aufsetzt, fehlt PHP mE noch.

Update 1

Entgegen meiner Aussage, mit Pearfarm sei nur die MIT-Lizenz möglich, kann man auch eigene Lizenzen setzen. Das ist allerdings ein “undocumented Feature”, was sogar der Entwickler selbst vergessen hat. Dazu muss man in der Spec-Datei die Lizens als assoziatives Array übergeben.

$spec->setLicense(array('name'=>'LGPL','uri' => 'http://www.gnu.org/licenses/lgpl.txt'));

Find ich persönlich nicht sooo elegant. Insgesamt ist der Quellcode des CLI-Tools recht spannend :D

[1] Übigens über Komponenten aus dem Zend Framework realisiert ;)
[2] Vorher muss man einmalig allerdings ein pearfarm keygen einen öffentlichen SSH-Schlüssel erzeugen, den man im eigenen Account hinterlegt.
[3] Vgl zum Beispiel .gitignore, die in der Regel auch versioniert werden.

PHP5.3: Designüberlegungen

Freitag, 2. Oktober 2009

Nun ist schon etwas Zeit ins Land gestrichen und manch einer mag sich vielleicht gefragt haben, wieso ich PHP5.3 noch nicht erwähnt habe, wo ich doch vorher in der Beta Phase gerne mal einen Beitrag darüber verfasst habe. Die größte und am meisten bejubelte Neuerung mag ich nun garnicht weiter erläutern, denn zum Beispiel Blackflash hat dazu 3 Links gesammelt, die das schon ausreichend beleuchten. Das Manual tut sein Übriges.

Überhaupt: So euphorisch vor dem Release die Namensräume gefeiert wurden, so ruhig wurde es doch plötzlich danach. Die Frage ist nun auch nicht wie man damit etwas macht. Die Frage nun lautet, wie man damit irgendwas besser, als vorher umsetzen kann.

(weiterlesen…)

Piwik web analytics tool

Mittwoch, 19. August 2009

Weil ich schon eine Weile nichts mehr gebloggt habe, möchte ich euch jetzt mal schnell etwas Vorstellen. Bei Piwik handelt es sich um ein “Open source web analytics”-Tool oder kurz — so bezeichnen sie sich selbst — als “open source alternative to Google Analytics“.

GA hab ich selbst nie verwendet, aber mir ging es schon auf die Nerven, wenn bei Aufruf x-beliebiger Seiten immer auch mit Google kommuniziert wird; Wenn ich eine Seite besuche, dann reicht es, wenn die davon wissen. Anders herum hat man auch als Seitenbetreiber wenig Einfluss auf das, was Google damit so anstellt.

Piwik stellt sich nun der Konkurrenz (seit 1.5 Jahren ;) ). Am Besten erkennt man die Bedienung und den Funktionsumfang über die hauseigene Demo, weswegen ich darauf garnicht weiter eingehe. Es arbeitet mit PHP und Javascript und läuft voraussichtlich meist auf den System, auf dem auch die zu überwachende Seite liegt, kann allerdings auch mit verschiedenen Seiten umgehen. So muss man auch nicht immer seine Besucher darauf hinweisen, dass seine Daten verschleudert werden.

Der voll Funktionsumfang hat sich mir bisher nicht offenbart, dafür hatte ich seit gestern Abend zu wenig Besucher ;) und ausserdem fehlt mir natürlich der Vergleich zum Vorbild. Besonders spannend finde ich allerdings den auf Adobe Air-basierende Desktop Web Analytics-Client. Dieser ist sehr hübsch anzusehen ;) Voreingestellt ist auch hier bereits die oben erwähnte Demo, wenn man es sich erstmal in Ruhe anschauen möchte.

Die Installation von Piwik selbst gestaltete sich als relativ idiotensicher, zumindest wenn man die Requirements erfüllt. Unterstützt wird nämlich einzig und ausschließlich der PDO_MYSQL-Treiber, was Schade ist, da Piwik (bei genauerer Betrachtung) auf dem Zend Framework basiert .. bloss in der hoffnungslos veralteten Version 1.0. Hat man die Anforderung erfüllt, klickt man sich durch die 5 oder 6 Schritte, wobei man brav die Fragen beantwortet oder den Aufforderungen nachkommt. Am Ende darf man die erste Seite bekannt geben und bekommt prompt den Javascript-Code zum Einbinden. Das wars dann auch schon, bei mir waren es effektiv 15min, real leider um die 2h, weil ich erstmal den Treiber aktivieren lassen musste :(

Danach muss man einfach warten. Nach der Erstinstallation ist Piwik erstmal richtig langweilig, weil man nichts sieht. Schön wäre vielleicht noch eine Möglichkeit für Imports, zB von GA, falls möglich. Oder vielleicht gibt es das ja auch schon. Vom subjektiven Eindruck ist Piwik einfach klein und schnuckelig. Es lässt sich gut bedienen und stellt die Daten anschaulich da. Kurz: Mir gefällts.

Nur so ganz nebenbei ist dies auch mein erster Beitrag verfasst mit ScribeFire. Mal sehen, ob es sich rentiert ;)

XTS Translate-Adapter für Zend_Translate

Mittwoch, 5. August 2009

Wie schon angedeutet habe ich beschlossen einen eigenen Adapter für Zend_Translate zu schreiben. Den Namen habe ich jetzt Ben R. zu verdanken ;) : “XML Translation Source”, oder kurz “XTS”.

(weiterlesen…)

Setter, Getter, public? Zugriff auf Attribute

Donnerstag, 23. Juli 2009

Angeregt durch ein Thema auf PHP hates me (und der dazugehörigen Diskussion) Stelle ich mich der Frage: Was?

Ehrlich gesagt fiel mir einfach kein besserer Einleitungssatz ein. Es handelt sich aber schon um ein Thema, dass mich länger beschäftigt, bisher gab es nur keine sinnvollen Gründe näher darüber nachzudenken, denn irgendwie sind die einzelnen Varianten sowieso austauschbar. Das Thema lautet: Suchen wir den Sinn hinter “Getter/Setter”, “einzelner Accessor” oder wieso nicht gleich “public”?

(weiterlesen…)

Libcrunch Application Erweiterung

Dienstag, 21. Juli 2009

So, nachdem die letzten Beiträge eher “Blabla” waren, heute endlich mal wieder was mit Inhalt. Es geht um meine eigene Erweiterung von Zend_Application mit dem Namen Libcrunch_Application_Application [1] natürlich zu finden in der hauseigenen Libcrunch-Bibliothek. Die Klasse nutzt zudem noch Libcrunch_Config_Config, weshalb man es (wie jede andere Bibliothek) nicht auseinander pflücken sollte.

Zend_Application wurde nun so erweitert, dass sie statt einer einzelnen Konfiguration (configs/application.ini) auch die Angabe eines ganzen Verzeichnisses (configs/) erlaubt, aus dem dann alle gefundenen Dateien geladen und integriert werden.

(weiterlesen…)

Webcrunch 0.2dev und KingCrunch2000 0.3dev veröffentlicht

Freitag, 19. Juni 2009

“Veröffentlicht” heißt hier, dass es für mich im Großen und Ganzen funktioniert ;) und einen Umfang erreicht hat, auf dem man aufbauen kann. Beide sind im Gegensatz zu früheren Veröffentlichungen lizensiert unter der LGPL [1][2], was allerdings genau genommen mehr Rechte einräumt, für euch also eher ein Vorteil ist. Um genau zu sein dürfen Änderungen an den Dateien der beiden Pakete jetzt auch (ebenfalls unter der (L)GPL) veröffentlicht werden, was unter der new BSD nicht erlaubt war.

KingCrunch

:
Bibliothek, die direkt auf dem Zend Framework aufbaut. Weiteres zum Download etc im Github Wiki.

WebCrunch

:
Web Anwendung, die auf das Zend Framework und KingCrunch 2000 aufbaut. Auch hier weiteres im entsprechenden Github Wiki. Nutzt PDO_SQLite als Datenbank-Schnittstelle, entsprechendes SQL-Skript liegt bei.

[1] GNU General Public License
[2] GNU Lesser General Public License

Zend Application Skizze

Mittwoch, 17. Juni 2009

Da die neue Komponente Zend_Application hier und da für mehr Verwirrung, als Hilfe sorgt, hab ich mal bisschen gezeichnet. Ja, wirklich: Mit Stift, Papier und zwei gesunden Händen.

(weiterlesen…)

KingCrunch2000 Github PHP-Schnittstelle

Sonntag, 14. Juni 2009

Ich weiß nicht genau, wieso, aber ich denke, ich wollte sowas schon immer mal machen. Von Github gibt es eine API, für die ich eben ein eine PHP-Schnittstelle in mein KingCrunch2000-Repository integriert habe (zu finden unter KingCrunch2000_Service_Github). Sie basiert auf die Zend_Http-Komponente, weswegen man das natürlich auch wieder braucht — vom ganz Rest in der Bibliothek ganz zu schweigen.

Das, was ich bei mir getestet habe, lief auch, wenn auch manchmal mit irritierendem Ergebnis: So lieferte eine Benutzersuche nach mir selbst garkein Ergebnis und eine Anzeige eines nicht existierenden Benutzers liefert “not authorized”, obwohl ich mich sehr wohl authorisiert habe… Da kann ich allerdings leider nichts gegen machen.

Sonstige Quellen zB für Downloads gibts immer noch auf der eigenen KingCrunch2000 Seite. Ansonsten viel Spass beim Spielen.

Grüße,
Sebastian

WebCrunch Anwendung

Freitag, 12. Juni 2009

Und noch einmal: WebCrunch veröffentlich, wieder als github-Project und wieder findet sich eine Seite mit Quellen. Wieder sind die Downloads als .zip und .tar.gz verfügbar und so weiter.

Was ist Webcrunch? Es ist meine Anwendung, die sowohl das Zend Framework, als auch meine hauseigene Bibliothek KingCrunch2000 nutzt. Insofern braucht man natürlich Beides. Diese Anwendung dient mir als Grundlage für alles weitere. Speziell versuche ich es so zu gestalten, dass man auch fremde Module mit möglichst wenig Aufwand einbinden.

Eine Besonderheit ist, dass die View-Skripte zunächst in res/views/ liegen (Module bekommen ein eigenen res/-Ordner). Sie sind nur als Vorlage zu betrachten, weswegen ich sie ausgelagert habe. Ebenso liegen die Module auch nicht im applications/-Ordner, sondern daneben, weil man (mal abgesehen von Abhängigkeiten) nur die Module kopieren braucht/soll, die man verwenden möchte.

Kommentare zur Installation stehen in INSTALL. Ich hoffe doch, die sind einigermaßen verständlich. Dann viel Spass damit. Für eventuelle Schäden etc kann ich nicht aufkommen usw.

Grüße, Sebastian