Bald ist Ostern und da ist es nur angebracht, wenn ich mich mal wieder mit dem Thema “suchen” beschäftige. Anlässlich eines neuen Projektes brauchte ich nämlich eine neue Methode, dem Benutzer eine Suchfunktion zu bieten, die sowohl Dateien, als auch Datenbankeinträge verarbeitet. Ein Kollege meinte, ich solle mir doch mal Lucene genauer ansehen. Davon hatte ich zwar schon gehört, bin aber bisher davon ausgegangen, damit nur Textdateien durchsuchen zu können. Außerdem ist das Java, und das wollen wir PHPler ja nicht so gerne…
Haha – falsch!!!
Im Zend-Framework ist eine PHP-Implementation von Lucene enthalten – und sie ist cool! Indexerstellung von Dateien und DB-Einträgen – gerne auch gemischt. Allet janz einfach – Kein Problem.
Ich habe zum Ausprobieren eine kleine, einfache Suchfunktion für mein neues, kommendes Blogsystem geschrieben (da hatte ich eben schon eine größere Textmenge in der DB). Die Aktion hat von ersten Anschauen der Dokumentation, über die Installation des Zend Frameworks bis zur fertigen Funktion gerade mal 3 Stunden gebraucht. Die Hälfte der Zeit hätte ich mir auch schenken können, wenn ich nicht versucht hätte, per PHP Texte aus PDF-Files zum Indiezieren herauszuziehen. Das machen wir am besten weiterhin mit externen Tools, genau wie für Word-Dokumente.
Das Indizieren dauert etwas, wie ich bemerkt habe, aber wichtiger ist die Suchgeschwindigkeit. Der nächste Schritt ist, das ganze mal auf große Datenmengen loszulassen und mit der Eieruhr daneben zu sitzen.
Über den Bundestrojaner war in den letzten 12 Monaten viel zu lesen. Eine gute Übersicht über das Thema haben Constanze Kurz, Andreas Bogk und Felix von Leitner Ende letzten Jahres auf dem Chaos Communication Congress (24c3) gegeben. Interessanterweise ging es dabei weniger um die technischen Fragen (Kenntnisse darüber wurden bei dem Publikum eines “Hackerkongresses” vorausgesetzt), sondern mehr um das Gesetzgebungsverfahren. Es gab interessante Einblicke in das Gerangel hinter den Kulissen und die Durchsetzungsstrategien.
Ich war leider nicht selber auf dem Kongress. Irgendwie verpasse ich den jedes Jahr, obwohl er genau bei mir um die Ecke stattfindet. Aber es gibt Videoaufzeichnungen. Das Video zur Veranstaltung konnte ich mir gestern auf der Zugfahrt endlich in voller Länge anzusehen.
Es ist recht lang (eine Stunde und zehn Minuten) und groß (304MB), aber sehr erhallend und dabei auch unterhaltsam vorgetragen. Infos zur Session und Downloadlinks für das Video gibt es hier:
“Der Bundestrojaner – Die Wahrheit haben wir auch nicht, aber gute Mythen”
Und für diejenigen, die Videos nicht per torrent (hier ist P2P Videodownload völlig legal!) ziehen,sondern direkt herunterladen möchten können das “Chaosradio Podcast Network” nutzen
Dirk Ollmetzer | Saturday, 19 January 2008 |
Development
Es reicht! Jetzt habe ich wirklich die Schnauze voll. Echt!!!
Ich hab ‘nen preiswerten billigen VServer bei Server4you. Nun bin ich gerade dabei, meine eigene Micro-mobile-bloggingsoftware zu programmieren. Auf meinem Laptop läuft allet schnieke. Jetzt zu dem tollen VServer:
– PHP 4, statt PHP 5. Das bedeutet, keine ‘richtige’ Objektorientierung, kein PDO, kein JSON, kein dies, kein das, kein jenes,… Scheisse! Da muss ich im Steinzeitstil programmieren. Alles umbauen.
– MySQL 3 ! Normal ist 5, wenigsten 4. Also nix mit FOREIGN KEYS, JOINS und auch kein UTF-8. Schön, daß ich alles auf UTF-8 ausgelegt habe. Ich freue mich auch, SQL-Kaskaden in PHP nachbauen zu müssen und selber auf die Datenintegrität zu achten. Noch mehr umbauen. Wie gut, daß ich alle DB-Abfragen in 2 Klassen gekapselt habe.
– Eingehende Mails mit PHP bearbeiten. Geht nicht. Der Mailserver hat keine Rechte, um den PHP-Interpreter zu starten. Stattdessen muss ich mittels CRON-Script die Mails alle paar Minuten pollen. Unnötige Last und Zeitverzögerung. Ach ja – die Scripte muss ich natürlich umbauen…
So, jetzt habe ich den Rotz soweit, daß es läuft – bis ich Bilder hochladen will. Ich kann mein Script keine Verzeichnissebäume anlegen lassen – Safe-Mode Restriction! Ich kann ein hochgeladenes Bild nicht in das richtige Verzeichnis verschieben – Safe-Mode-Restriction! Also mal wieder das Script umbauen! Ich breche ich mir einen damit ab, Bilder erstmal woanders hin zu verschieben und dann wieder zu verschieben. Funktioniert alles nur mit Dateiberechtigung 777. Also alles offen wie ein Scheunento. Soviel zu Safe-Mode!
Der Witz an meinem microblog ist, daß Bilder auf die notwendigen Größen skaliert werden, damit sie sowohl im Webbrowser, als auch auf verschiedenen Handies darstellbar sind. Tja, was soll ich sagen: “Allowed memory size of 8388608 bytes exhausted“. Bei einem 327 KB Foto vom Handy?
Was war noch? Auch ja, der Mailserver. Kein IMAP-Idle, kein Spamfilter auf dem Mailserver.E-Mail auf dem Handy kann man also getrost abschreiben.
Meine Software ist durch die vielen Workarounds mittlerweile völlig verkrüppelt, der Server unsicher und die Scheisse läuft immer nocht nicht. Ich hab’s echt satt. Auf meine Frage, wann denn die Technik mal auf den aktuellen Stand gebracht wird, sagt mir der Service: “Keine Ahnung, es ist da noch nichts Konkretes geplant.”
Immer noch nicht? PHP5 läuft seit 4 Jahren und ist seit 3 Jahren stabil. MySQL 3 war auch 2004 schon ein Auslaufmodell, und E-Mail ohne gut gewarteten Spamfilter geht schlichtweg überhaupt nicht mehr bei Spamanteil von ca. 99%.
Wer kennt einen guten Provider mit gepflegten Standardinstallationen?
Ich mag es ja auch lieber schlicht. Ob es so schlicht, wie das Blog von Matt Balara, nach dem jüngsten Redesign sein muß, sei mal dahingestellt. Aber das Ganze soll offensichtlich auch nur ein Zwischenstadium sein, wenn ich ihn richtig verstanden habe. Auf jeden Fall finde ich einige Grundüberlegungen in seinem Artikel “Naked Relaunch, Part I” recht überzeugend:
“For most people design means ‘how it looks’, or aesthetics […]. But if your content rocks, and your design sucks, does it matter? And if it’s the other way around, who cares about your site?“
“I’m coming more and more to the opinion that (good) web design is 60% thinking, 30% structure and 10% aesthetics.“
Klingt einleutend. Jetzt versuche ich mich einfach mal die letzte Überlegung anzuwenden.
Thinking
Ich komme gerade auf solche Fragen, weil ich auch meine Website mal wieder einem Redesign unterziehen möchte. Der Anlass dazu ist mein Wunsch, mindestens Teile der Website auch per Handy zugänglich zu machen. Das betrifft sowohl den normalen Zugang, als auch den Wunsch, von unterwegs bloggen zu können. Wenn ich den Theorien glauben darf, die ich damals in meiner Diplomarbeit aufgestellt habe, wird sich dadurch auch die Art des Inhaltes ändern. Mal sehen.
Structure
Der Einsatz eines einfachen Wap-Wrappers, der die Homepage auf die Handydisplays anpasst, kommt nicht in Frage. Inhalt, der auch mobil abrufbar ist, braucht eine eigene Struktur. Ich mag die bis jetzt genutzte Blogsoftware Serendipity von meinem geschätzten Ex-Kollegen Jannis Herrmanns sehr und nutze sie gerne. Es gibt auch einige Erweiterungen für moBlogging, aber die Vermischung von Textinhalt und interner und externer Multimediareferenzen steht der Nutzung, wie sie mir vorschwebt, leider entgegen.
Wenn sich die Datenstrukturen ändern, werden auch Usability und Layout geändert werden müssen.
Aesthetics
Bereits jetzt verwende ich ein relativ schlichtes Design. Die Richtung möchte ich auch weiterhin beibehalten. Ein wenig Feinschliff hier und da, aber keine großen Überraschungen. Wie sich das Ganze auf einem kleinen Handydisplay umsetzen lässt, wird sich zeigen.
Wer schon einmal Webseiten für Handies (WAP 2.0) gebaut hat, kommt schnell darauf, daß man die Ausgabe automatisch an das Endgerät anpassen sollte. Wenn man zum Beispiel Bilder anzeigen möchte, macht es einen erheblichen Unterschied, ob das Handy eine Displaygröße von 128×128 (z.B. ältere Nokia Series 40), 176×208 (ältere Nokia Series 60, viele SonyEricsson) oder 240×320 Pixel hat. Dazu benötigt man eine Geräteerkennung.
Hallo Handy, was kannst Du denn?
Eine gute Möglichkeit zur automatischen Geräterekennung bietet WURFL (Wireless Universal Resource File). Das funktioniert recht gut, aber der Server benötigt zum Parsen de riesigen XML-Datei viel Speicher. Mehr als mein Provider mir zubilligt. Aber es geht auch anders: Per UAProf.
Neuere Handies schicken im Request Header einen Link auf eine XML-Profildatei, in der die wichtigsten technischen Daten stehen. Heute möchte ich dem geneigten Leser und Softwarebastler eine PHP-Klasse zur Verfügung stellen, mit dem sich die wichtigsten Parameter aus diesen UAProf-Dateien auslesen lassen. Die Klasse ist PHP4 Kompatibel, da leider noch immer viele Hoster nicht auf PHP5 umgestellt haben. Man kann die Klasse leicht auf der Kommandozeile ausprobieren. Dazu den Inhalt der ZIP Archives in einen Ordner entpacken und die XML Dateien für die Handymodelle dazulegen. Den Pfad zur lokalen PHP-Installation in der ‘test.bat’ anpassen und starten.
uaprof.zip (1,8 Kb)
Wo bekomme ich nun Profildateien zum Testen her?
Das Beispiel enthält keine Profildateien. Diese muss man sich aus dem Internet laden. Das ist erlaubt, denn dafür sind sie ja da. SonyEricsson hat z.B. in dem PDF-Dokument ‘WAP User Agent strings and profiles’ ein Verzeichnisen aller Handymodelle mit den URL’S. Das Dokument liegt hier. Ansonsten ist Google gerne bei der Suche behilflich ;-). Bei der Suche nach “e61 uaprof” ist beispielsweise gleich der erste Treffer die entsprechende Profildatei für das Nokia E61.
Da ich ja jetzt offesichtlich immer ‘ne Portion Extra-Zeit im Zug habe, konnte ich maleben nebenbei eine neue Software ausprobieren: Magento – eine neue Open Source Onlineshop Software. Das hat mich schon interessiert, weil ich ja damals (Ende der 90er) ziemlich viel mit Online Shops gemacht hatte. OSCommerce hatte ich mir zwar auch mal angeguckt, aber für nicht so toll gehalten. Insbesondere wenn es um den Punkt “Flexibilität und Erweiterbarkeit” geht.
Megento scheint da von anderem Kaliber zu sein, soweit ich das nach 30 Min. herumprobieren und rumstochern im Code beurteilen kann. Es setzt PHP5 voraus und nutzt das Zend-Framework, was ja schonmal eine recht gute Basis ist. Dafür, daß es sich noch um eine Beta-Preview handelt sieht das ganze schon recht sauber aus. Auf die Watchlist damit!
P.S: Ich habe eben erst laufend Magneto geschrieben. Neenee, nix Magnetisch – Magento wie pinkrosa.
Tiny little Gizmos – als ich mit dem Blog anfing, dachte ich, daß ich vor allem über mobile elektronische Spielereien schreiben werde. Momentan scheint das hier leider eher ein Agit-Blog zu werden. Aber es gibt sie noch, die guten Dinge die Artikel zur mobilen Technik. Ich bin sehr gespannt, ob sich offene Technologien wie im Internet, auch im Mobilefunkbereich durchsetzen werden. Eigentlich glaube ich sogar fest daran. Daher finde ich den Ansatz von Googles Open Source Betriebssystem für Handys auch sehr interessant. Deshalb habe ich mir gestern das Android-SDK von Google gezogen und installiert.
Erster Eindruck: Es läuft. Das ist nicht so unbedingt selbstverständlich, wenn ich an die ersten J2ME-SDK von vor einigen Jahren zurückdenke.
Zweiter Eindruck: Dafür, daß fast alles in Java implementiert sein soll, ist die Bedienung erstaunlich flüssig.
Dritter Eindruck: Sehr spartanisch. Alles was für ein normales Handy wichtig ist, ist drin und außerdem noch Google Maps. Sonst nüscht. Aber ganau darum geht ja auch: Daß sich jetzt tausende neugierige und interessiert daran machen, neue Anwendungen für Android zu programmieren. Und damit sie auch wirklich anfangen, gibt es noch einen mit $10 Mio dotierten Wettbewerb. Das ist – trotz des bröseligen Dollars – noch immer eine ziemliche Stange, finde ich.
Für einen vierten Eindruck hatte ich noch keine Zeit
Seit Monaten brodelt die Gerüchteküche um ein gPhone – also ein Handy von Google. Nichts wäre langweiliger und öder gewesen. Heute wurden die Karten auf den Tisch gelegt: Google hat kein Handy gebaut, sondern eine riesige Allianz aus Mobilfunkprovidern und Handyherstellern um sich geschart um ein Open-Source Handy Betriebssystem marktreif zu machen. Sehr interessant ist zu sehen, wer dabei ist, noch interessanter ist zu sehen, wer NICHT dabei ist.
Letztlich scheint das ganze so eine Art rundrum-Befreiungsschlag der Branche zu sein. Vielleicht bin ich etwas zu optimistisch (aber warum soll ich immer nur rumgranteln), wenn ich hoffe, daß sich nun doch endlich in der Branche die Erkenntnis durchsetzt, daß der Durchbruch bei Datendiensten nur mit offenen Standards und offenen Services möglich ist. Walled Gardens sind bei den Kunden einfach nicht mehr durchsetzbar.
Hier sind Details zur Open Handset Alliance zu finden.
Sinn meines neuen Frameworks soll sein, meine bestehenden Applikationen auf PHP5 zu portieren und dabei auf eine einheitliche Codebasis zu stellen. Ich hatte mich zu einer Eigenentwicklung entschlossen, nachdem ich mir Frameworks, wie Cake und Symfony angeguckt habe und nicht wirklich Feuer und Flamme war. Den Plan werde ich wohl begraben und das kam so:
Aus beruflichen Gründen beschäftige ich mich seit kurzem mit dem Zend Framework. Ich habe in der letzten Woche die ersten kleineren Anwendungsdummies programmiert und bin sehr angetan. Das Framework stellt sehr viel zur Verfügung, was ich benötige. Viele sehr sinnvolle Klassen belegen, daß die Entwicklung an den Erfordernissen der Praxis orientiert ist. Anwendungen lassen sich leicht im MVC-Pattern erstellen, aber es gibt keinen Zwang dazu. Alles ist sehr durchdacht, passt gut zusammen und ist dennoch flexibel.
Dazu kommt die Erkenntnis, daß ich als Festangestellter und Fernpendler einfach kaum noch Zeit habe. Also werde ich aus Gründen der Effizienz die Content-Komponenten meines Frameworks auf Zend FW portieren.
Weiteres dazu folgt demnächst.
Dirk Ollmetzer | Monday, 24 September 2007 |
Development
Wie soll das Framework aufgebaut sein, auf dem meine zukünftigen Webanwendungen basieren? Beginnen wir mit Grundüberlegungen zur Architektur.
Contentmodule
HTML/WAP/XML-Dateien, die von einer Webapplikation ausgeliefert werden, bestehen in der Regel aus verschiedenen Contentbereichen. Bei einer klassischen Webanwendung sind dies z.B. Header, Navigation, ein oder mehrere Contentbereiche und ein Footer. Diese Contentmodule können je nach Context sehr verschieden sein. Die Navigation kann zum Beispiel auf jeder Seite gleich sein, sich aber andererseits je nach Benutzerrolle unterscheiden. Eingeloggte Besucher können auf derselben Seite andere Informationen zu sehen bekommen als Gäste, usw.
Ablaufsteuerung
Es ist also sinnvoll einen Mechanismus zu haben, der auf der Basis eines Seitenaufrufs und weiteren Parametern dynamisch die Erzeugung der Contentmodule steuert. Diesen Mechanismus nenne ich Pipeline. Der Request wird “oben hineingeworfen” und “unten” kommen die Daten für die Erzeugung der Ausgabseite heraus. Das Erzeugen der eigentlichen HTML/XML/WAP- oder sonstigen Ausgabe auf der Basis der Erzeugten Daten geschieht danach mittels Templates. Die Steueranweisungen werden der Pipeline mittels einer einfachen XML-Datei übermittelt.
Views
Die Pipeline kümmert sich um den Request-Kontext und stellt dabei ein Datenrepository zur Verfügung, in das Pipeline und Contentmodule schreiben und aus dem sie lesen können. Dieses Datenrepository wird im Anschluß dem Template übergeben.
Neben dem Request Kontext gibt es noch einen Sessionkontext, der mehrere Requests eines Nutzers zusammenfasst und einen Applikationskontext, der wiederum alle Sessions zusammenfasst. Somit ergeben sich für das Framework vier Basisklassen:
- Application
- Session
- Pipeline
- Template
Deren Methoden und Eigenschaften werde ich demnächst näher beschreiben.
« Previous Page — Next Page »