Mit ‘PHP’ getaggte Artikel

Freie Dokumentenverwaltung: OpenDocMan

Mittwoch, 03. November 2010

Per Zufall bin ich auf das OpenSource-Produkt OpenDocMan gestossen, mit dem sich Dokumente (fast) aller Art online verwalten und pflegen lassen. Das unter GPL Version 2 lizenzierte Stück Software arbeitet mit PHP und MySQL. Es läuft also praktisch auf jedem Server, auf dem ein Apache (für Menschen von der dunklen Seite der Macht geht zur Not auch ein IIS), PHP5 und MySQL5 rennt. Es ist sehr einfach und vor allem schnell installiert, leicht zu bedienen und sogar ich habe recht schnell verstanden, wie die Verwaltung funktioniert.

Zunächst wünscht sich der Hersteller, dass ein Login auf seiner Website, welche witzigerweise mit WordPress gepflegt wird, erzeugt wird. Dieser ist rasch erstellt und kostet nichts. Danach ist der Download ab der Quellschmiede sofort möglich. Das ginge wohl auch ohne Login. Das tar.gz-File ist gerade mal 342 KB schwer, daraus lassen sich dann in der Version 1.2.5.7 216 Dateien entpacken, welche die gesamte Applikation darstellen (plus MySQL-DB). Ich kenne webbasierende Programme, die das 20-fache an Dateien ausliefern. Insofern meine ich, dass OpenDocMan schlank gehalten ist.

Zunächst sollte dann das obligate config.php File bearbeitet werden. Die notwendigen Einstellungen sind ziemlich selbsterklärend. Dort sind die Daten zum MySQL-Host, der Datenbank und der Userdaten zu hinterlegen, dann folgt ein grosses Array mit diversen Daten zu den einzelnen Funktionen. Wichtig daraus ist die base_url, site_mail, dataDir und revision_expiration und dazu file_expired_action. Die authorization habe ich auf Off gestellt, weil sonst beim jedem Dokument der Admin das Dokument zuerst genehmigen muss, damit es in die Ablage gelangt. Das Array allowedFileTypes beherbergt alle Dateitypen, die erlaubt sind.

Wenn alle Dateien auf dem Server liegen und die Datenbank erstellt wurde, muss nur noch Schreibrecht auf dem Ordner templates_c und dem Verzeichnis, in dem die Dokumente zu liegen kommen (dataDir), erteilt werden. Danach kann man die Applikation mit der URL

http(s)://DomainName.tld/opendocman-Verzeichnis/install

aufgerufen und den Anweisungen gefolgt werden. Die “Installation” ist dann sehr schnell erledigt und die Tabellen werden erzeugt.

Danach habe ich zunächst dem User admin ein Kennwort verpasst und dann einen neuen User erzeugt, mit dem ich OpenDocMan nutzen möchte. Das Arbeiten damit ist recht einfach und benötigt keine besonderen Kenntnisse. Dokumente können hochgestellt und dann bei Bedarf wieder ausgecheckt, bearbeitet und schliesslich wieder eingecheckt werden.

Eine Übersicht zeigt, was an den Dateien selbst allenfalls geändert wurde. Ausserdem lassen sich die Dateien in verschiedene Departments und diversen Kategorien ablegen; jene müssen aber vom Administrator erzeugt und gepflegt werden.

Lässt man die Standardeinstellungen ruhen, laufen die Dokumente nach 90 Tagen ab. Im der config.php unter file_expired_action kann man einstellen, was dann passieren soll:

  • (1) Remove from file list until renewed
  • (2) Show in file list but non-checkoutable
  • (3) Send email to reviewer only
  • (4) Do Nothing

Bisher habe ich (noch) nicht herausgefunden, wie und ob man Ausnahmen erzeugen kann, welche nach 90 Tagen nicht oder erst später ablaufen. Das kriege ich vielleicht aber noch raus, allenfalls muss man selbst Hand anlegen oder einen Request einschicken.

Die Startseite eines “normalen” Benutzers sieht nicht besonder modern oder “WebZweiNullig” aus, mindestens im Default-Theme nicht, aber die Funktionen sind meines Erachtens schon mal ganz gut. Damit lässt sich schon eine ganze Reihe von Bedürfnissen abdecken.

Zu diesem Punkt ist wichtig zu wissen, dass OpenDocMan die ISO-Norm 17025 erfüllt und nach der “OIE standard for document management” wirkt. Der erste Eindruck ist nicht schlecht und auch nach ein paar Aktionen halte ich die Software noch immer für geeignet, um kleinere Dokumentensammlungen gemeinsam im Internet zu verwalten. Gibt es freie Software für die Dokumentenverwaltung, die Ihr benutzt? Bitte her damit!

Endlich: RoundCube mit Adressgruppen

Mittwoch, 25. August 2010

Seit einiger Zeit ist die stabile Version 0.4 von RoundCube verfügbar. Das ist ein freier Webmailer auf Basis von PHP und MySQL, der praktisch jeden IMAP-fähigen Mailserver anzapfen kann. RoundCube nutzt die GP-Lizenz. In der eidgenössischen Entwicklung sind diesmal einige Verbesserungen, vor allem aus dem Bereich “Kosmetik”, enthalten. Was mich besonders freut, ist die Einführung der Gruppenfunktion in der Adressverwaltung. Damit drängt sich bei mir RoundCube an die vorderste Stelle bei den Webmailern. Diese Funktion fehlte mir nämlich seit der Version 0.1. Das Adressbuch hat einfach eine Ebene mehr erhalten, so dass sich die Kontakte besser gliedern lassen. Gleichzeitig können die Gruppen auch an das An-Feld, beziehungsweise an das CC oder BCC-Feld, beim Erstellen einer neuen Nachricht gesetzt werden, damit alle Mitglieder dieser Gruppe mit dem Mail bedient werden. Die Gruppe wird beim Einfügen in das entsprechende Feld sofort in die einzelnen Adressen aufgelöst.

Ebenfalls ganz gelungen finde ich das Gruppieren der Nachrichten. So werden zusammenhängende Nachrichten besser strukturiert; die Funktion lässt sich ein- und ausschalten. Ich brauchte allerdings eine Weile, bis ich die Einstellungen fand. Denn diese Funktion lässt sich nämlich einzelnen auf jedem Ordner ein- und wieder ausschalten. Deshalb befindet sie sich einerseits in den globalen Einstellungen unter Einstellungen / Mailbox Ansicht / Konversationen aufklappen und anderseits in der Verwaltung unter der Reiterkarte Ordner. Dort muss bei denjenigen Ordnern, die die Nachrichten gegliedert anzeigen sollen, der Haken gruppiert gesetzt werden.

Daneben sind etliche kleinere Sachen verbessert oder in Ordnung gebracht worden, so zum Beispiel die verbesserte Darstellung von HTML-Mails und das Einbinden und Anzeigen der Signaturen. Ein Blick auf die Roadmap zeigt, dass dereinst auch die Unterstützung von GPG/PGP geplant ist. Allerdings ist dazu noch nicht bekannt, in welchem Abschnitt das erledigt wird. Die nächstfolgende Version, die 0.4.1, wird “nur” zur Fehlerbehandlung und Korrektur benutzt.

RoundCube mauserte sich zu einem sehr beliebten Webmailer; auch einer meiner Hoster nutzt die Applikation als Webmailer für seine Kunden.

Die erste Mini-Anwendung mit CakePHP

Montag, 22. März 2010

Am vergangen Sonntag durfte ich bei der Schulung von Roland in Sachen CakePHP mit dabei sein. Das Framework interessiert mich an sich und ausserdem sehe ich es als eine Möglichkeit an, damit meine kleinen Webapplikationen neu zu zimmern. Alle Teilnehmer haben ein “nackiges” Framework erstellt und sind von dort aus gestartet. Das ist auch durchaus sinnreich und allemal besser, als wenn wir von Roland ein fertiges Päckli bekommen hätten. Wir haben zwar ein solches Paket erhalten, aber nicht um damit während der Schulung zu arbeiten, sondern um daraus einige Beispiele zu ziehen und natürlich auch für das nachträgliche Studium.

Im Vorfeld habe ich auf meinem kleine EEEPC 1000H einige Vorkehrungen getroffen. Darauf läuft ein Ubuntu 9.10. Es braucht also nicht zwingend ein Server zu sein, auch wenn das natürlich bei einer fertig gebackenen Applikation sinnreich wäre. Aber zum Entwickeln reicht also ein solch kleiner Kerl, der übrigens bloss ein Gigabyte flüchtigen Speicher besitzt.

Manchmal hätte ich aber dann doch lieber ein etwas grösseren Bildschirm gehabt, gerade bei der Ansicht der Konsole, die ab und an eine ziemlich lange “Backliste” anzeigt. Aber es ging letztlich auch so ganz gut. Ich installierte PHP, den Apache Webserver, den MySQL-Server und für mich noch optional PHPMyAdmin. Wer möchte, kann sich natürlich auch über die Konsole die nötigen Datenbanken Tabellen anlegen. Ich mag einfach lieber das GUI.

sudo apt-get install php5 php5-cli mysql-server apache2 phpmyadmin

Wichtig ist, dass beim Apache-Webserver das Modul mod_rewrite aktiviert ist. Das haben wir nach längeren Detektivarbeiten und Dank Ute herausgefunden. Auf ubuntusers.de gibt es dazu einen gesunden Wiki-Artikel. (Heisst es eigentlich einen gesunden Wiki-Artikel oder ein gesunder Wiki-Artikel?)

Anschliessend holten wir uns die aktuelle und stabile Source auf der Website von CakePHP und entpackten sie. Der Apache muss dann auf das Verzeichnis webroot im Baum des Downloads unter app zeigen. Die Datei default im Verzeichnis /etc/apache2/sites-available hat bei mir folgendes Aussehen, allerdings habe ich keine zusätzlichen virtuellen Hosts, sondern bloss eine Site erzeugt. Auch hier hat mich Ute unterstützt:

<virtualhost *:80>
	ServerAdmin webmaster@localhost

	DocumentRoot /home/roman/cakephp/app/webroot
	<directory />
		Options FollowSymLinks
		AllowOverride FileInfo Options

	<directory /home/roman/cakephp/app/webroot>
		Options Indexes FollowSymLinks
		AllowOverride FileInfo Options
		Order allow,deny
		allow from all
	</directory>

	ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
	<directory "/usr/lib/cgi-bin">
		AllowOverride None
		Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
		Order allow,deny
		Allow from all
	</directory>

	ErrorLog /var/log/apache2/error.log

	# Possible values include: debug, info, notice, warn, error, crit,
	# alert, emerg.
	LogLevel warn

	CustomLog /var/log/apache2/access.log combined

 Alias /doc/ "/usr/share/doc/"
 <directory "/usr/share/doc/">
 Options Indexes MultiViews FollowSymLinks
 AllowOverride None
 Order deny,allow
 Deny from all
 Allow from 127.0.0.0/255.0.0.0 ::1/128
 </directory>

</virtualhost>

Damit funktionierte CakePHP ganz gut. Die Installation war also recht einfach, die ersten vier kleinen Hürden betreffen die Schreibrechte auf Verzeichnissen, die sichergestellt werden müssen und der “gesalzenen Sicherheit” sind rasch erledigt. Danach kann man bereits loslassen.

Roland hat sein Projekt, das wir ansatzweise an diesem Sonntag erarbeitet haben, in das Netz gestellt, so dass jeder daran partizipieren kann. Auch das ganze Modell und die Anforderungen stehen dort bereit. Die Idee, welche sich hinter diesem Vorgehen verbirgt, soll echte OpenSource-Programmierung abbilden. Jeder von uns kann oder darf einen Teil zu diesem Projekt beitragen, bis ein fertiges Produkt entsteht. So macht “opensourcen” Spass. Ich hoffe, dass ich mir hin und wieder ein Stündchen Zeit nehmen kann, um da mitzuwirken.

Während dem Kurs sind ein paar wenige Bilder entstanden, die ich in eben jener Applikation bereitgestellt habe, die einst durch die neu zu backende Anwendung ersetzt werden soll: In meiner kleinen Bilderdatenbank. An dieser Stelle sende ich ein dickes Dankeschön an Ute und Roland für die Gastfreundschaft und für den interessanten Sonntagnachmittag! Ich komme sicherlich noch einmal auf das Thema zurück und kann dann hoffentlich etwas tiefer über Technisches berichten.

Bilder veröffentlichen ohne fremde Dienste

Donnerstag, 04. März 2010

Seit einer langen Zeit nutze ich Flickr. Das Bilderportal, das im Mitmachstil des Web 2.0 gefertigt ist, bietet einige Möglichkeiten für das Verwalten der eigenen Bilder und natürlich auch, um diese zu verbreiten und zu teilen. In der Mac-Szene, der ich einst angehörte – damals als Apple noch der David und Microsoft als Goliath ihre Rollen spielten – ist Flickr noch stärker verbreitet. Immerhin gehört das Teil nicht zum Google-Konzern, sondern zu Yahoo. Trotzdem stört mich, dass ich keine Kontrolle über den Verlauf und vor allem über die Speicherung der Bilder habe. Deswegen habe ich mir eine einfache, kleine Applikation geschaffen, die meine Bedürfnisse befriedigt. Mindestens einstweilen.

Noch immer betreibe ich ein virtuelles Serverli bei HostEurope, natürlich mit Ubuntu als Betriebssystem. Zwar noch Dapper, aber diese Version wird noch immer mit Updates versorgt. Dort baute ich mir mit MySQL und PHP die Sachen zusammen. Im Bereich PHP bin ich nicht so der Hirsch und so durfte ich bei der Erstellung der Technik einiges lernen. Im Web findet man ja zum Glück zu fast allen Herausforderungen mit PHP eine Lösung; manchmal sogar zu viele (verschiedene) Ansätze. Eigentlich hätte ich gerne mit CakePHP etwas gebaut, aber damit bin ich noch nicht so weit. Ich muss Roland nochmals dazu bringen, dass er erneut eine Session an einem Barcamp irgendwo im nördlichen Halbkreis anbietet.

Im Grossen Ganzen lade ich per PHP ein Bild hoch, vergebe einen Namen, erzeuge daraus ein Vorschaubild, übergebe den Namen als verstecktes Feld einem Formular, mit dem dann die Metadaten zum Bild erfasst werden. Danach wandert alles in eine Datenbank. Die Bilder liegen je in einem Album, welche wiederum in Sammlungen zusammengefasst werden; ganz wie bei Flickr. Dafür habe ich ein Backend erstellt, das multiuser-fähig ist.

Zurzeit suche ich noch nach einer besseren Lösung, um die Bilder automatisch zu verkleinern. Die Qualität passt mir nicht. Ich nutze ImageCreateFromJPEG und seine Artverwandten, dafür währe wohl imagemagick besser geeignet. Das habe ich aber noch nie benutzt; es wäre also höchste Zeit dafür.

Weiter stand ich zunächst bei der Verlinkung der Tags an. Ich schreibe alle Tags pro Bild in ein Feld, getrennt durch Kommas. Das ist wahrscheinlich nicht unbedingt die schönste Form der Normalisierung, aber es klappte dann doch noch mit der Funktion explode, mit der ich den String in ein Array wandeln und dann mit einer for-next-Schlaufe ausgeben kann. Ebenso fand ich bei Laut und Klar eine Anleitung, wie man mit PHP die Exif-Daten eines Digitalbildes auslesen kann. Funktioniert bestens! Daneben habe ich noch eine Kommentarfunktion, RSS-Feeds, Mitteilungen an identi.ca und Twitter, eine Suche, eine Lizenzform pro Bild und verschiedene Formen der Ansicht eingebaut.

Bis auf die Qualität der Vorschaubilder bin ich soweit zufrieden. Das eine oder andere kosmetische Element werde ich wohl noch einbauen und wahrscheinlich auch sonst noch etwas daran feilen. Aber mein Ziel habe ich erreicht: Ein selbstgehostetes Applikatiönli, mit dem ich spätestens an den Linux-Tagen zu Chemnitz einige Bilder präsentieren kann. Die sind ja schon bald; am 13. und 14. März 2010.

RoundCube und die Plugins

Montag, 08. Februar 2010

Über RoundCube habe ich schon öfters in diesem Blog eine Notiz angelegt, schliesslich finde ich den Webmailer ganz gut. RoundCube ist aber auch nicht mehr, als ein simpler Webmailer, der über einen bestehenden Webserver und dessen Konten gestülpt wird, um Nachrichten per IMAP zu empfangen, zu versenden und zu verwalten. Zurzeit ist die Version 0.3.1 aktuell, die natürlich auch unter der GPL veröffentlicht wurde. Der Webmailer läuft mit PHP und MySQL, sehr einfach und flink.

Obschon die Entwicklung inmitten der grossen Schritte steckt, kann man mittlerweile den Mailer schon produktiv einsetzen. Ich würde darauf achten, dass die Website mit dem Mailer bloss via https zu erreichen ist und wenn der Webmailer nicht auf dem selben Server wie der anzuzapfende Mailserver läuft, würde ich die Konfiguration so einrichten, dass auch dort eine Verschlüsselung stattfindet. Das klappt leider nur dort, wo der Ziel-Mail-Server IMAPS versteht und akzeptiert. Wird der SMTP-Teil bei RoundCube nicht konfiguriert, nutzt der Webmailer die Mailroutine auf dem Webserver, auf dem RoundCube rennt. Wird ein externer SMTP-Server eingesetzt, würde ich auch dort SMTPS oder eine andere, verschlüsselte Lösung (z.B. VPN) empfehlen. Inzwischen habe ich für mich auf einem öffentlich erreichbaren Ubuntu-Server (Hardy) RoundCube installiert und lasse halt bloss den 443er-Port für https rein.

Leider läuft RoundCube (noch) nicht optimal auf einem mobilen Gerät. Es gibt zwar offenbar irgendwelche Applikationen für das iPhone (Wer nutzt denn schon so etwas?), aber vom Service selbst ist noch nichts in Sicht. Eigentlich würde ja eine abgeänderte CSS-Datei schon fast reichen. Auf meinem HTC Magic mit Android sieht das Ganze noch nicht so toll aus:

Auch wenn ich das Gerät um 90 Grad neige, kommt nichts viel Besseres dabei heraus. Ich habe weder die Geduld, noch die Lust, eine eigene CSS-Datei für den mobilen Dienst zu erzeugen. Vielleicht wagt sich das sonst mal jemand an die Geschichte.

Mittlerweile schart sich eine beachtliche Community rund um RoundCube. Infolge der offenen und dokumentierten API sind auch schon einige Plugins entstanden, die teilweise sogar laufen. Aber es gibt etliche, welche entweder (noch) nicht der aktuellen Version angepasst sind, oder sonst nicht richtig laufen. Einige der Plugins werden mit den Archiv Complete ausgeliefert, alle Plugins sind im Archiv trunk-r-3239.zip enthalten, welches hier vorliegt.

Da gibt es beispielsweise den RoundCube-Calendar, der sich kosmetisch recht gut in das GUI integriert. Leider handelt es sich dabei um einen gefangenen Kalender, denn es fehlen – mindestens zurzeit – Schnittstellen, um die Daten zu importieren oder zu exportieren, beziehungsweise um sie abzugleichen.

Das Plugin für die Google-Kontakte brachte ich nicht zum Laufen. Ist auch nicht weiter wichtig, es hätte mich nur interessiert, ob man so einfacher als über den Export und Import von vCards die Adressen importieren könnte.

Das “hauseigene” Plugin für ein globales Adressbuch halte ich für sinnreich, falls sich auf der einen RoundCube-Installation verschiedene Benutzer aufhalten. Damit stehen dann mindestens zwei Adressbücher zur Verfügung, wobei das Globale vom Administrator oder einer andern Rolle verwaltet und das persönliche Adressbuch weiterhin pro Benutzer gepflegt wird.

Das Plugin emoticons dient eher der Erheiterung und der Kosmetik. Und so gibt es eine ganze Reihe von Erweiterungen, die für den einen oder andern Nutzer Vorteile bergen dürften. Mindestens halte ich es für interessant, durch die Liste zu surfen und dabei zu entdecken, was es alles gibt.

RoundCube lasse ich gerne in einem geschlossenen Prism-Browser laufen. Das bringt unter Karmic den Vorteil, dass sich der Browser auch dann in der unteren Gnome-Menü-Leiste bei Ankunft einer neuen Nachricht meldet, wenn er auf dem zweiten oder dritten Desktop läuft. Der Task “Prism” blinkt dann auf allen Desktops. Das ist praktisch und erspart irgendwelche “Notifier-Basteleien”. Das würde auch mit dem Firefox und wohl mit allen andern Browsern auch funktionieren. Für das Mailen habe ich gerne ein eigenes Fenster ohne siebenhundert Tabs.

Das sich bei der Ankunft neuer Nachrichten der Title-Tag der Website verändert (RoundCube holt sich selbsttätig alle n Minuten die Nachrichten ab), bekommt auch der Browser eine neue Beschreibung in der obersten Leiste, was Ubuntu dazu führt, die Aufmerksamkeit des Benutzers mit Blinken zu erhaschen. Klappt ausgezeichnet.

Webentwicklung mit CakePHP

Dienstag, 02. Februar 2010

Bücher aus dem Hause O’Reilly mag ich sehr, da sie einerseits eine hohe Qualität aufweisen – ich meine inhaltlich – und andererseits sind sie meist auch anspruchsvoll. Allerdings kosten die Schinken meist auch etwas mehr, als ein Buch von Markt und Technik, Franzis, Data Becker oder einem ähnlichen Verlag. Vor ein paar Tagen lag das Buch Webentwicklung mit CakePHP in meinem Briefkasten. Bisher hörte ich bloss am Rande von diesem Framework, ausser am BarCamp zu Liechtenstein; dort setzte ich mich in die Session von Roland und sah mir an, wie in knapp 45 Minuten eine Webapplikation entstand. Mit CakePHP.

Das Buch entstand im Jahre 2008, verfasst haben es Dirk Ammelberger und Robert Scherer. Beides sind Koryphäen im Bereich der Webentwicklung und dem dazugehörigen Umfeld. Ich befinde mich nun mitten in der Arbeit mit diesem Buch und darf mit Überzeugung sagen, dass nicht nur CakePHP eine feine Sache ist, sondern auch das Buch selbst.

Es ist nicht für Computer-Einsteiger geschrieben, das geht auch aus der Einleitung hervor. Ein paar Grundkenntnisse zu PHP, MySQL, SQL und den Relationen in einer modernen Datenbank sowie dem objektorientierten Verhalten einer Programmiersprache reichen aber aus, um gut damit zurechtzukommen. Mindestens nehme ich die Inhalte so wahr und ich bin bei weitem kein Profi in diesen Dingen, höchstens ein interessierter Amateur. Die Einleitung halte ich für sehr gelungen, denn darin bekomme ich sauber erklärt, was CakePHP ist, wozu ein Framework dient und welche Mittel ich brauche, um damit arbeiten zu können. Im Anschluss an die Einleitung folgen dann die Anweisungen und Tipps zur Installation, welche für Linux, Mac und sogar Windows erklärt werden. Dabei kommt nicht nur das Framework an sich zur Sprache, sondern auch die Datenbank, der Webserver und der PHP-Interpreter. Ich weiss zwar bis heute nicht, was PHP auf einem Windows-Rechner zu suchen hat und weshalb ein Apache auf dieses Betriebssystem gezwungen werden soll, aber das soll ja nicht meine Sorge sein. Wer ein WAMP haben will, soll es sich halt zurechtschustern. Leider wird im Buch die Installation von der CakePHP-Konsole für Linux mit keinem Wort erwähnt, bloss Windows und Mac werden behandelt. Dort stehe ich im Moment noch etwas vor dem Berg, aber das werde ich noch lösen.

Völlig neu war mir auch, dass CakePHP ein Abbild eines Frameworks ist, das sich bei Ruby wiederfindet. Ruby on Rails hat ja der Programmiersprache Ruby zu einer richtigen Renaissance verholfen. Es ist ein Framework eben für Ruby, das sich sehr erfolgreich verbreitet hat. CakePHP soll in etwa dasselbe für PHP sein.

Danach wird Schritt für Schritt mittels einem imaginären Projekt jede Funktion vom Framework besprochen und mit “lebendigen” Beispielen erklärt. Zuvor lernen aber die Leser noch eine Menge wichtiger Fakten über die Arbeitsweise von CakePHP. Für besonders spannend halte ich das Grundprinzip MVC, welches dafür sorgt, dass die Datenhaltung, die Darstellung und die Logik sauber voneinander getrennt werden – WordPress lässt grüssen… Aber auch DRY finde ich essentiell wichtig, denn ich wiederhole mich wirklich nicht gerne beim Coden; das ist langweilig und das Resultat birgt grosse Fehlerquellen in sich. Die Beispiele und Erklärungen im Buch weisen eine hohe Qualität auf und der Lerneffekt ist – mindestens bei meiner suboptimalen Intelligenz – sehr hoch. Es macht Spass, mit diesem Buch zu lernen.

Auch AJAX ist ein Thema in diesem Buch. Soweit bin ich aber noch nicht vorgestossen, ich habe aber gesehen, dass mitunter auch DHTML besprochen wird. Das ist ein heikles Thema, besonders die Barriere-Freiheit ist dort gefährdet. Ich bin gespannt, was dort zu lesen ist.

Für meine Tests und kleinen Applikationen habe ich die Installation von CakePHP auf meinem Server zu Hause durchgeführt. Das ist ein Uralt-PC, auf dem ein Ubuntu-Server 8.10 rennt. Die Maschine ist von aussen nicht zu erreichen. Ich mag es nicht besonders, wenn ich auf meinem Notebook PHP, MySQL-Server, Apache, PHPMyAdmin und allenfalls weitere Dienste sowie das Framework installieren soll. Genau für solche Anforderungen besitze ich noch immer diesen alten PC, der wohl aus dem Jahre 2003 stammt. Allenfalls braucht es noch das CLI-Paket für PHP:

sudo apt-get install php5-cli

Grundsätzlich könnte man unter Ubuntu das gesamte Framework über die Paketverwaltung installieren. Das habe ich aber nicht getestet, zumal andere Komponenten benutzt werden als Apache und Konsorten.

Zusammen mit diesem Buch kann ich mich mindestens in das Framework einarbeiten. Wer sich für CakePHP interessiert und noch nicht alle Feinheiten kennt, dürfte mit diesem Buch gut bedient sein. Aber auch Leute, die das Framework noch gar nicht kennen, aber das nötige “Meta-Grundwissen” mitbringen, werden damit sofort zurechtkommen.

Noch ein Satz zum Buch selbst, also zur Bindung: Ich kenne sehr viele verschiedene Buchbindungen, habe auch schon selbst Bücher gebunden. Ich werde es einem Buchbinder niemals verzeihen, wenn er kein Buchzeichen – in Form eines Stoffbandes, das im Rücken verleimt ist – einsetzt. Bei einem Buch dieser Preisklasse gehört mindestens ein Buchzeichen dazu. Die Bindung an sich ist sauber und qualitativ in Ordnung, aber es ist eben doch keine Deutsche Wertarbeit, wenn das Buchzeichen fehlt.

Webentwicklung mit CakePHP trägt die ISBN-Nummer 978-3-89721-863-5 und ist im Handel für ungefähr 30 Euro zu haben.

Simple Groupware: Gemeinsame Sache im Netz

Dienstag, 08. Dezember 2009

Sehr gerne arbeite ich mit phprojekt, aber jene OpenSource-Lösung leidet zur Zeit etwas. Die lang erwartete Version 6 kommt nicht aus den Löchern. Bisweilen nutze ich noch immer phprojekt, aber schaue mich hin und wieder gerne etwas um und erkunde, was es nebst den üblichen Verdächtigen wie OpenGoo, Zarafa, OpenXchange und dergleichen noch zu entdecken gibt. Dabei bin ich auf die Simple Groupware gestossen, einer Software, die unter GPL lizenziert und im Funktionsumfang in etwa ähnlich wie phprojekt ist. Es stehen etwa 60 Module zur Verfügung, die die Groupware zu einer breiten Anwendung aufpimpen können.

logo-sgwAktuell gibt es die Version 0.5.41, die Features und Module sind hier im Detail beschrieben. Zur Installation steht ein Installer zur Verfügung. Ich habe aber das Dateiarchiv heruntergeladen, um es hernach auf dem Server meiner Wahl einzusetzen. Simple Groupware läuft mit PHP und MySQL und ist sehr einfach zu installieren. Solange keine Probleme auftauchen, ist die Software mit ein paar wenigen Klicks einsatzbereit. Die Dokumentation dazu ist ebenfalls ausgereift und vollständig. Während der Installation kann schön verfolgt werden, was die Installationsroutine gerade tut.

Simple Groupware

Nach dem Hochladen der Dateien aus dem Archiv (oder nach dem Entpacken des Archivs auf dem Server) wird die Installation sogleich mit dem Browser begonnen. Die dazu benötigte URL zeigt direkt in das Root-Verzeichnis der Installation. Dort wird zunächst die Sprache ausgewählt. Danach folgt die Abfrage zur Datenbank-Anbindung, dem Administrator-Login sowie die Bestätigung der Lizenz.

Simple Groupware Installation

Anschliessend dauert es ein paar Sekunden, bis die Groupware installiert ist. Der Fortschritt ist dazu jeweils im Browser zu sehen. Danach ist die Software bereit und es wird sogleich mit einem anonymen Benutzer auf die Groupware zugegriffen. Das ist denn auch die erste Einstellung, welche ich geändert habe, so dass keine anonymen Zugriffe mehr möglich sind. Ausserdem erzwinge ich eine sichere Verbindung via SSL. Und es sollte – wie eigentlich überall – mit dem Administrator nicht produktiv mit der Software gearbeitet werden. Dazu kann ein eigener Benutzer erstellt werden, das ist deutlich sinnreicher.

Simple Groupware - der erste Zugriff

Einige der Module stehen global und individuell pro Benutzer in doppelter Weise zur Verfügung. So können zum Beispiel Lesezeichen für alle Benutzer erfasst werden und jeder Benutzer kennt seine eigenen, privaten Lesezeichen. Um auf die öffentlichen Module zugreifen zu können, muss der Administrator den entsprechenden Benutzern die nötigen Rechte zuweisen. Ebenso eröffnet der Administrator die Projekte, die dann den Benutzern zugewiesen werden.

Viele der Module werden über den Menüpunkt Einhängepunkt konfiguriert. So auch beispielsweise das Einbinden eines externen POP3 oder IMAP-Konto. Das funktioniert soweit ganz gut. So kann sich jeder Benutzer die einzelnen Module selbst zurechtlegen.

IMAP-Ordner einbinden

Die Synchronisationsmöglichkeiten und Offline-Ordner scheinen recht ausgereift zu sein, auch der Im- und Export. Diese Bereiche habe ich aber nicht im Detail angesehen, da ich sie nicht brauche. Dafür ist die Tabellenkalkulation ganz gut und ebenso die GraphViz-Einbindung. Damit lässt sich eine ganze Menge anstellen, immer aus der Sicht eines Online-Büros, das halt noch nicht alle Feinheiten einer lokal installierten Office-Suite kennt. Aber auch die Kalendereinbindung klappt ganz gut. Ich habe einen Test mit iCal gemacht und das funktionierte auf Anhieb. Auch der Datei-Upload funktioniert, ohne dass zunächst Rechte am Ordner verändert werden müssen. Das hat die Installation bereits erledigt. Die Foto-Gallerie ist in Ordnung, obschon ich eine solche Funktion bei einer Groupware dieser Gattung nicht unbedingt erwarte. Sie funktioniert und es ist möglich, die Bilder in der privaten Galerie mit andern Benutzern zu teilen.

Foto-Galerie

Weiter bietet Simple Groupware eine Passwort-Ablage an. Die würde ich aber nicht einsetzen. Passwörter gehören aus meiner Sicht nicht unverschlüsselt auf einen Server, auch wenn in der Datenbank nur die Meta-Daten dazu sichtbar sind. Ich setze KeePassX ein und nutze es ausschliesslich lokal. Daneben ist ein Wiki verfügbar; es handelt sich um ein PmWiki, das hier eingebunden wird.

Mit dem Administrator lassen sich Ressourcen wie Zimmer oder Orte, Benutzer und Gruppen eröffnen. Ausserdem koordiniert der Administrator, wer welche Module innerhalb welcher Projekte mit welchen Rechten nutzen darf. Weiter pflegt der Administrator oder ein berechtigter Benutzer das interne Helpdesk und unterstützt die Benutzer bei der Bewältigung ihrer alltäglichen Sörgeli mit Simple Groupware.

Diese Lösung gefällt mir ganz gut; sie weicht nicht stark von phprojekt ab, bietet aber einge andere Lösungsansätze. Wie bei jeder Software muss man sich aber zunächst darin einarbeiten, bevor sie nutzbringend eingesetzt werden kann. Simple Groupware eignet sich sowohl für kleine Projekte mit wenigen Mitarbeitern als auch für grössere Arbeiten mit vielen Nutzern und natürlich auch für viele kleinere Vorhaben, die alle auf der einen Installation liegen.

Kurze URLs nutzen

Sonntag, 29. November 2009

YOURLSAufgrund des Artikels von Dirk, der seinerseits durch Robert inspiriert wurde, versuche ich mich auch einmal mit einem “URL-Verkürzungsdienst”, den ich selbst hoste. Yourls ist rasch und einfach installiert, ist beschieden in den Ansprüchen in Bezug auf PHP sowie MySQL. Ausserdem scheint Yourls tadellos zu rennen. Ich habe mir dazu t4g.ch reserviert. Nun bin ich gespannt, ob ich das Teil zum Laufen bringe.

Kurze URLs bringen eine Reihe von Vorteilen, mit diesem selbsgehosteten Dienst natürlich vor allem die eigene Verwaltung und die Statistiken. Allerdings steht den Vorteilen auch ein Nachteil gegenüber: Wenn die Domain t4g.ch nicht verfügbar ist, sind meine Links mehr oder weniger wertlos.

PDF-Dateien mit PHP erzeugen

Freitag, 13. November 2009

fpdffpdf ist eine ganz feine Sache, um per PHP PDF-Dateien zu erzeugen. Die deutsche Dokumentation ist ganz gut ausgebaut; damit kam sogar ich klar. Ausserdem läuft das Teil ohne zu Murren, auch auf einem Windows-Kessel, sogar mit dem IIS zusammen. Da fpdf so breit parametrisierbar, ist, kann es nahezu für fast alle Aufgaben im Zusammenhang mit PDF erstellen, eingesetzt werden. Toll finde ich, dass man das erzeugte PDF speichern und/oder direkt öffnen kann Bisher kannte ich fpdf noch nicht. Das f steht übrigens für free.

FPDF ist eine PHP Klasse die das Erzeugen von PDF Dokumenten auf Basis von PHP ermöglicht, genaugenommen ohne die Verwendung von PDFlib. Der Vorteil gegenüber PDFlib ist, dass für eine kommerzielle Nutzung von PDFlib eine Lizenzgebühr verlangt wird, FPDF jedoch sowohl für die private als auch die kommerzielle Nutzung kostenlos ist. Sie können es nach Ihrem Belieben anwenden und nach Ihren Bedürfnissen anpassen um Ihre Anforderungen zu erfüllen.

Mit den zur Verfügung stehenden Funktionen lässt sich fast alles erzeugen. Da sich fpdf mit PHP nutzen lässt, kann man natürlich auch ganz einfach dynamische Inhalte, beispielsweise ab einem MySQL-Server, problemlos einbinden. Es hat mir Spass gemacht, diverse Aufgaben damit zu lösen, in deren Lösungen PDF-Dateien mit Inhalten aus einer Datenbank erzeugt werden.

Upgrade auf RoundCube 0.3.1

Sonntag, 08. November 2009

RoundCubeRoundCube ist ein Webmailer, der PHP und MySQL, wahlweise auch PostgreSQL oder SQLite, nutzt, um ein Mailkonto per Browser zu bewirtschaften. Das Produkt stammt aus der Eidgenossenschaft und unterliegt der GPL. Ich nutze schon seit der Version 0.1 RoundCube, allerdings nur auf meinem lokalen Server zu Hause, der von aussen nicht erreichbar ist. Mittlerweile setzen das Produkt aber schon Provider und Hoster wie Cyon produktiv ein. Vor Kurzem ist die Version 0.3.1 erschienen. Deswegen habe ich einen Upgrade von der Version 0.2 Alpha ausgeführt.

RoundCube setzt folgende Software und deren Eigenschaften voraus:

  • Apache oder Lighttpd Webserver
  • PHP Version 5.2.1 oder höher
  • MySQL, PostgreSQL, SQLite oder MSSQL-Datenbank
  • Einen IMAP-Server mit IMAP-4-Support (rev1)
  • Einen lokalen oder entfernten SMTP-Server, alternativ eine PHP-Konfiguration, um Mails zu versenden

Im Archiv des Downloads liegt eine Datei mit Anweisungen, um ein Upgrade durchzuführen. Ich habe mich an jene Anweisungen gehalten und konnte so ohne Probleme ein Upgrade realisieren. Folgende Schritte habe ich getätigt, nach dem ich ein vollständiges Backup der Dateien und der Datenbank gefahren habe:

Die Dateien in den nachfolgenden Ordnern müssen durch die neue Version ersetzt werden. Dabei habe ich die Dateien auf dem Webserver einfach überschrieben:

  • ./bin/
  • ./SQL/
  • ./program/
  • ./installer/
  • ./skins/default/
  • ./plugins/

Danach musste ich in der Konfigurationsdatei config/main.inc.php zulassen, dass ein Update per Browser durchgeführt werden darf. Dazu muss die Variable $rcmail_config['enable_installer'] auf true gesetzt sein. Und nun kann der Upgrade per Browser erfolgen. Dazu ruft man die URL zum RoundCube auf, gefolgt vom Wert installer:

http://url-to-roundcube/installer/

Der Rest funktioniert dann mehr oder weniger automatisch. Allenfalls wäre es möglich, dass ein SQL-Skript aufgerufen werden müsse, das war aber bei mir nicht der Fall, beziehungsweise der Installer hat das unter Umständen selbsttätig durchgeführt.

RoundCube upgraden

Zum Abschluss der Installation kann der Mailer getestet werden, was bei mir zu einem Erfolg führte. Danach rief ich das GUI auf und fand eine Warnung im Browser:

Warnung

Also löschte ich das Verzeichnis installer und setzte den Wert in der Konfigurationsdatei $rcmail_config['enable_installer'] auf false zurück. Damit verschwand die Warnung und ich konnte mit Mailen loslegen. In dieser Version wurden vor allem Fehler behoben, aber auch einige wenige Zusätze eingepflegt.

RoundCube im Einsatz

Aufgefallen sind mir beispielsweise die kleinen Grafiken am unteren, linken Bildschirmrand, mit denen die Nachrichten auf verschiedene Arten ausgewählt werden können. Damit lassen sich alle Nachrichten markieren, keine, oder bloss die Ungelesenen.

Nachrichten auswählen

Weiter sind einige Kleinigkeiten beim Mail verfassen hinzugekommen und einige Eigenschaften der Nachrichten lassen sich nun anzeigen. Ausserdem können Nachrichten nun direkt per Menü lokal gespeichert werden. Das Adressbuch präsentiert sich aber leider noch immer in der gleichen spartanischen Art und Weise.

Adresse erfassen

Nach wie vor lassen sich nur die wichtigsten Elemente wie Anzeigename, Vor- und Nachname sowie die E-Mail-Adresse erfassen. Nicht einmal eine Gruppenfunktion ist da. Deswegen nutze ich RoundCube nur sporadisch, weil mir dieses Feature tatsächlich fehlt. Innerhalb des nächsten Version, der 0.4 beta, soll dann die Gruppenfunktion realisiert werden. Aber ansonsten wird RoundCube immer ein kleines Stück erwachsener; in niedlichen Schritten, aber es geht vorwärts.

Wer die Entwicklung dieses schlanken und flinken Webmailers etwas vorantreiben möchte, kann sich nebst der technischen Beteiligung auch finanziell engagieren. Die Entwickler rufen nämlich zu Spenden auf:

Donations are welcome – Roundcube webmail is free of charge but your donations help us to pay some hosting bills and motivate our developers to continue their great work.

Auf der Download-Seite ist der Spenden-Button, der zu Paypal führt, zu finden, oder direkt auf dieser Seite.