Gesammelte Links: Git

12. Februar 2010

Ursprünglich wollte ich diesen Beitrag schon eher verfassen, aber da verließ mich die Motivation und die Zeit. Nun hat mich allerdings Blackflash auf Git und Github angesprochen und das Versprechen, dass ich in seine März-Links komme, führte dann zum kurzfristigen Motivationsschub.

Die Links sind allesamt in den letzten Monaten immer mal wieder aufgeschnappt worden. Falls noch jemand den! Link hat, kann ich ihn ja noch ergänzen, aber eigentlich solls auch nur ein ersterer Einstieg sein. Die meisten Beiträge und Artikel enthalten selbst Links zu anderen Quellen (hin und wieder bewegt man sich dabei im Kreis ;) ) und wenn man denen aufmerksam folgt, bekommt man einen recht guten Eindruck.

Diesen Beitrag weiterlesen »

Free Pear: 2 freie Pear-Channel Dienste

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.

Warnung vor Egit

15. Oktober 2009

Schade eigentlich, Version-Control-Plugins für Eclipse find ich immer sehr praktisch. Nach einem Kommentar vom 13.10. kam es, wie es kommen musste: Auch bei mir streikte erneut ein Repo auf Github, zwar mit etwas anderer Fehlermeldung, aber mit gleichem Effekt. Bei der erneuten Suche nach einer erneuten Lösung, die ohne Neu-Anlegen auskommt, stieß ich immer wieder auf den Namen “Egit” als Schuldigen. Es ist zwar normalerweise nicht meine Art eine Software kategorisch abzulehnen, aber was hilft ein Entwicklungstool, was die Entwicklung unbrauchbar macht?
Also zurück zur Kommandozeile. Wer damit Schwierigkeiten hat, der kann sich mal Githubs Guides anschauen (alternativ im alten Wiki). Die sind auch deshalb empfehlenswert, weil sie mehr Git selbst, als Github beschreiben, man braucht also nicht unbedingt dort ein Konto, um sie gut zu finden.

PHP5.3: Designüberlegungen

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.

Diesen Beitrag weiterlesen »

Piwik web analytics tool

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

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”.

Diesen Beitrag weiterlesen »

ZEUGS: Namespace, Spam, Farben

4. August 2009
  • Über Zeugs: “Entliehen” von USA erklärt (zB hier), viele Sachen sind einfach eines ganzen Themas nicht wert. “USA erklärt” ist übrigens ein wunderbar geschriebenes Blog für jeden, wer sich etwas offener gegenüber der amerikanischen Kultur zeugen möchte. Der Sprachstil macht zumindest Spass.
  • Über Spam: Seit dem 21.07. um 2Uhr hat Bad Behaviour zwischenzeitlich bis zu 11114 Zugriffe in 7 Tagen blockiert. Mittlerweile sind diese aber auf etwa ein Zehntel gesunken. Schön, auch Botnetzwerke sind lernfähig.
  • Über Namespace: Jetzt ist es geschehen, PHP hat doch tatsächlich Namespace-Unterstützung erhalten. Bleibt nur noch zu hoffen, dass sich PHP5.3 in naher Zukunft durchsetzen kann, damit man dieses neue, tolle Feature auch einsetzen kann. Was ich mich allerdings noch frage ist, wie man denn jetzt seinen Code strukturiert. Natürlich kann man so weitermachen, wie bisher, bloss dass nun die Klassenbezeichner auffällig kürzer werden. Meines Erachtens wird man damit dem Konzept — gerade in Hinblick auf anderen Sprachen, die es schon länger implementieren (vgl Python Modules) — nicht gerecht. Eigentlich wäre dies auch ein guter Zeitpunkt Funktionen und Konstanten wieder für sich zu entdecken.
  • Über Setter-Methoden: Ja, quasi eine Erweiterung des letzten Themas, jetzt bloss etwas, worüber man nachdenken darf, während man schlaflos gegen die Decke starrt. Was sollte eigentlich eine Setter-Methode zurück geben? Als da wären:
    1. Das Objekt selbst, Fluent Interface: Ja, nicht jedermanns Sache, führt sie doch gerne mal zu abstrakten/abstrusen Aufrufketten.
    2. Den alten Wert: Nagut, wenn mans braucht… Falls mans braucht … Wieso setzt man einen neuen Wert, wenn man den alten Wert haben will?
    3. Den neuen Wert: Kenn ich doch schon…
    4. Den Erfolg der Zuweisung: Eigentlich hinfällig seit Erfindung der Exception
    5. Nichts: Semantisch perfekt, bloss recht schweigsam…
    6. Was vergessen?!?

    Das ergänzt sich übrigens wunderbar zu der Frage, warum Getter keine Parameter haben sollten. Ich glaube, ich finde Variante 2) aus dem alten Beitrag doch ganz cool.

  • Link tagdocs.de: Grob zusammengefasst gibt es hier Beiträge zu Software im Webbereich, die einen Entwickler das Leben erleichtern können, wenn man gerade sowas gesucht hat. Den Link hab ich aus der aktuellen c’t ;)
  • Link PHPAnywhere: Über tagdocs.de fand ich dann auch direkt PHPAnywhere, ein Browserbasierter PHP-Editor. Ich werd es mir mal anschauen.
  • Link phphatesme.com: Auch schnell erklärt. Ein mittlerweile 1 Jahr altes, deutsches Blog über PHP, was aber hier und da auch mal über den Tellerrand hinaus schaut. Einmal fand es schon Erwähnung in meinem Beitrag über Getter und Setter.
  • Über Farben: Gerüchteweise ist das übliche Farbschema “Schwarz auf Weiß” nur kulturell bedingt. Wie sollte man früher auch schwarzes Papier und weiß-schreibende Stifte herstellen? Gesünder, weil weniger anstrengend für die Augen, ist allerdings “Weiß auf Schwarz”, so heißt es. Verstellt man nun sein Farbschema am PC gibt es eine böse Überraschung: Viele Webseiten setzen die Farbangaben nicht für alle Elemente konsequent um. Bei mir sind zum Beispiel die Input-Elemente in Wordpress schwarz … als einziges Element … und auch nicht bei allen Inputfeldern. Auch beliebt ist “Schwarz auf Schwarz”, wenn der Hintergrund zwar gesetzt wird, die Schriftfarbe allerdings nicht. Als einzige Lösung blieb nur das Überschreiben der Farbangaben zu verbieten. Macht zwar ein ziemlichen Einheitsbrei aus den Seiten, hat aber auch den Vorteil, dass jede Seite irgendwie gleich aussieht. Achja, es schont die Augen wirklich :)

Setter, Getter, public? Zugriff auf Attribute

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”?

Diesen Beitrag weiterlesen »

Eigener Translate Adapter: SimpleXml

22. Juli 2009

Viele meiner Ideen entstehen aus Frustration: Vorhandene Lösungen sind

  • Zu einfach: Sie können nicht das, was ich erwarte
  • Zu groß: Sie können zu viel
  • Zu kompliziert: Ohne 22 seitige Spezifikation ist man aufgeschmissen
  • Zu .. unheimlich. Ernsthaft :X

So auch diesmal. Ich nutzte lange Zeit den Gettext-Adapter für Zend_Translate, aber wenn man die Scan-Funktion von PoEdit nicht richtig nutzen kann, wird es unbequem. Zunächst tippt man sich selbst eine pot-Datei, daraus erstellt man eine oder mehrere po-Dateien, in denen man endlich übersetzen kann. Letzter Schritt ist bekanntlich die Kompilierung in eine mo-Datei.

Der auffälligste Nachteil ist, dass man nicht mal eben einzelne Strings übersetzen kann, man muss immer gleich kompilieren. Übersetzung per Webfrontend wird damit schon mal schwieriger. Der nächste logische Schritt war demnach eine textbasierte Übersetzungsquelle, die allerdings fast alle ursprünglich als Übersetzungsspeicher dienen, nicht direkt für multilinguale Anwendungen, wodurch deren Umfang unschön wird (zB Spezifikation von TMX). PHP-Arary, CSV oder Ini-basierte Textquellen schlossen sich von selbst aus.

Es keimte dann die Idee auf mein eigenes Übersetzungsformat zu entwickeln. Standardisierte Formate haben immer den Vorteil, dass entweder “der Betroffene” sie kennt, oder es zumindest offene Quellen gibt, wo man sich informieren kann. Sowas funktioniert bei Eigententwicklungen eher selten. Da kann man nur hoffen, dass diese a) sooo cool wird, dass jeder sie haben will, b) sie sooo einfach wird, dass man nicht mal den Zaunpfahl braucht, damit irgendwer sie versteht, oder c) es einen einfach egal ist. Ich entschied mich für b).

Die bisherige (nicht öffentliche) Implementierung basiert auf XML und orientiert sich so nen halben Meter an Gettext. Da ich mich für b) entschieden habe, sollte ich nicht mehr viel Reden müssen

<sxt>
  <msg msgid="Access denied">
    <msgstr locale="de">Zugang verweigert</msgstr>
    <msgstr locale="en">Sry, youre out</msgstr>
  </msg>
</sxt>

Ein Hauptmerkmal ist, dass sie im Umfang stark reduziert ist, deshalb auch die Orientierung an Gettext. Der Hauptunterschied zu Gettext wiederum ist, dass eine Datei mehrere Sprachen fassen kann. Und das es XML ist, da lässt sich schwer verbergen. Grundsätzlich soll die Implementierung so stehen bleiben, Details können sich allerdings noch ändern. Eventuell bring ich das “One Language per File” zusätzlich noch mit ein?

Soweit stand der Dinge. Bei mir funktioniert es und ich denke, ich werde es so auch nutzen (sonst hätte ich es nicht entwickeln müssen). Eine Veröffentlichung erfolgt dann wie gehabt im Rahmen von Libcrunch. Vielleicht freut sich sogar jemand darüber :) Wer noch etwas über meine innere Zerrissenheit über diese Thema wissen will, kann sich das dazugehörige Thema antun.

Grüße, KingCrunch

Nachtrag:
Der Name wird sich nochmal ändern, SimpleXML gibts ja schon -.- Das ist insofern peinlich, da ich intern SimpleXML auch nutze …

Libcrunch Application Erweiterung

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.

Diesen Beitrag weiterlesen »