Benutzerprofil des gewählten Autoren: - Michael *Byte* Haszprunar
Dez 1

PHP Word Kongress - Tag 1

Keynote:

Die Keynote betrachte ich mit gemischten Gefühlen. Zum einen war es interessant, noch einmal die Historie von PHP aufzurollen, andererseits war zum eigentlichen Thema, nämlich der Zunkunft von PHP, nicht viel zu hören. Es brauchte eine konkrete Frage bevor die Sprache darauf kam...

Die eigentliche Kernbotschaft von Pierre war: PHP wird als Sprache unwichtiger, aber als Applikationsplattform gewinnt es immer mehr Anhänger. Konkret kommen zu einem PHP Kongress nur wenige Leute (wie man gesehen hat kommen diese wenigen nicht einmal pünktlich), Wordpress oder Typeo3 Konferenzen ziehen auf der anderen Seite teilweise die 50-fache Benutzermenge an. Offenbar ist PHP also nicht deshalb beliebt (70% Marktanteil bei den Domains weltweit!) weil es PHP ist, sondern weil die bekannten Systeme wie Wordpress, Magento und Typo3 auf PHP-Basis entwickelt wurden.

Auch bezüglich der aktuell nachgefragten Features gab es für mich Überraschungen. So gibt es den Treiber zu MongoDB (einer NoSQL-Datenbank) schon seit 3 Jahren, obwohl das Thema erst in den letzten Monaten hochkocht. Ebenso wurde der Support für Google's neu vorgestelltes WebP-Grafikformat bereits 2 Tage nach der Veröffentlichung in die gdlib eingecheckt.

Konkret auf die Roadmap angesprochen wurde es etwas vage. Traits sind wohl definitiv in nächsten Major-Release (ob PHP6 oder doch PHP 5.4 ist offenbar noch umstritten). Sehr stark wird hinter den Kulissen auch am Thema Performance gedreht, Pierre sprach von bis zu 30% reduziertem Speicherbedarf, speziell bei String-Operationen ist hier viel zu erwarten. Ein weiteres Themfeld sind die Extensions, die zum Teil überarbeitet werden und optimiert bzw mit neuen Features released werden. Die Unterstützung von WebP (wie pben angesprochen) ist Teil davon, auch das Thema Unicode rückt damit mehr in den Vordergrund.

Alles in allem eine nette Keynote, die ich mir aber eher in gutem Englisch statt in eher gebrochenem Deutsch gewünscht hätte.


XML gegen den Rest der Welt:

Ein Vortrag, der mir viel neues Wissen gebracht hat. Zu Beginn wurden die drei großen Datenaustausch-Formate (XML, JSON, YAML) vorgestellt und dann en detail die jeweiligen Stärken und Schwächen beleuchtet. Nützliche Tipps - speziell zu XML-Tools wie Schematron - waren breit gesäht, auch mit Kritik - u.a. an HTML5 - wurde nicht gespart. Das war zunächst immer eher ein Hau-drauf Kommentar ("HTML5 ist blöd"), nach Erläuterung der Gründe war die Kritik aber vollkommen nachvollziehbar und brachte zum Teil auch mein Blut in Rage :)

Alles in Allem ein sehr guter Vortrag, der einen doch zum Nachdenken brachte und sicherlich Entscheidungsprozesse in der Zukunt beeinflussen wird, wenn mal wieder die Frage des richtigen Datenaustausch-Formates ansteht. Es klangen auch bereits Elemente des Talks am späteren Nachmittag an (Thema REST), auf den ich mich nach diesem Vortrag umso mehr gefreut habe.


Microsoft und PHP:

Um ehrlich zu sein war das ein Vortrag, den ich nur gewählt habe weil das Alternativthema - Neuerungen in Typo3 - für mich absolut uninteressant war. Allerdings war der Vortrag dann eine sehr positive Überraschung. Als einzig englisch sprachiger Speaker hat uns Brian in die Historie PHP und IIS eingeführt und sprang dann sehr schnell zu Demos. Dabei muss ich dann doch sagen: einige der MS-Tools für IIS hätte ich auch gern für Apache. So kann man im PHP Manager einfach per Mausklick für unterschiedliche Directories unterschiedliche PHP-Versionen zuweisen. Man kann auch php.ini Sessting einfach verändern und sie werden sofort übernommen, ohne dass - wie bei Apache - ein Serverneustart notwendig ist.

Ebenso können von Apache mod_rewrite Rules übernommen werden und natürlich selbst welche angelegt werden, das Interface dazu war sehr intuitiv und schnell. Auch die Ergebnisse des WinCache - ein Byte-Cache zum Beschleunigen von PHP-Applikationen - konnten überzeugen. In der Demo war das Tempo direkt 3x schneller.

Es folgten Demos zum Thema Windows Azure und SQL Azure. Speziell wurde dabei eine SQLServer basierte DB mit wenigen Klicks in die SQL Azure CLoud übertragen und die Applikation soweit angepasst, dass diese verwendet wurde. Ebenso wurde anschließend die gesamte Applikation nach Windows Azure übertragen. Verschiedenste Gimmicks wie zum Beispiel die Auto-Installation von verschiedenen Standard-Applikationen (u.a. phpMyAdmin) rundeten das Ganze ab, noch dazu ist der Azure-Manager pluggable, so dass hier in Zukunft mehr Applikationen oder erweiterte Features wie automatisch Updates der installierten Applikationen zu erwarten sind. Alles in Allem ein sehr interessanter Vortrag, der zeigt was man alles machen kann wenn alles aus einem Guss kommt. Man ist fast versucht in Zukunft auf Windows/ISS zu entwickeln ;)


Der erfolgreiche Programmierer:

Der folgende Vortrag drehte sich - wie der Titel schon sagt - um das Thema: wie werde ich ein erfolgreicher Programmierer, welche Fähigkeiten brauche ich dazu und weche Stolperfallen gilt es zu vermeiden. Dabei ging es aber nicht pur um das Programmieren ansich, sondern eher um Karriereplanung und wie ich meinen Job am besten machen kann. Diesen Vortrag könnte man also auch gut und gerne woanders halten, die Prinzipien bleiben letztendlich gleich...

Anhand von allerlei Superhelden ("Minute-Man", "Dr. Copy & Dr. Paste", "General General" u.v.m.) wurden all diese Themen gut erläutert, Best Practices vorgestellt und mit Anektoten aus dem Alltag mit Leben gefüllt. Insgesamt war vieles zumindest für mich bekannt, im Alltag dürfte eher der innere Schweinehund und das Arbeitsumfeld entscheidend sein, was man davon umsetzen wird.

Eine wichtige Sache habe ich aber doch mitgenommen: unentbehrlich zu sein mag zwar den Arbeitsplatz erhalten, man selbst bleibt dem Arbeitsplatz aber auch erhalten und eine Beförderung zu Höherem rückt damit in weite Ferne.


PHP Objektpersistenz:

Für mich eines der Highlights des Tages. Angekündigt mit Referenz zur NoSQL-DB "MongoDB" hatte der Vortrag dann doch wesentlich weniger NoSQL als man vermuten dürfte. Zunächst ging es um die pure Basis, also was Objektpersistenz eigentlich ist, warum man sie braucht und welche Lösungen aktuell en vouge sind (Stichwort Active Record).

Dann ging es flott weiter zu einem Vergleich von klassischen Objekten (eigentlich Sprachen-unabhängig) mit relationalen Datenbanken. Obwohl beide Welten auf den ersten Blick sehr ähnlich aussehen hat Stefan doch eine ansehnliche Zeit damit zugebracht, diese Ähnlichkeit Stück für Stück zu zerlegen und die Qualen der Objektpersistenz für alle sichtbar zu machen.

Es gab natürlich auch Best Practices aus dem Umfeld zu hören (z.B. das VirtualProxy Pattern) und auch der versprochene Ausflug zu MongoDB wurde kurz abgehandelt. Aber das Fazit war schlicht: es ist schwer und hart, egal welche DB man verwendet. Keine Lösung ist die Beste, alle haben ihre Haken und Ösen und die eigentliche Frage ist: welche passt am besten zu mir und bereitet mir die wenigsten Schmerzen, sowohl jetzt als auch in Zukunft.

Mit diesem Auftakt hatte ich mich schon sehr auf das LiveCoding gefreut, wo es ein Wiedersehen mit dem mitreißendem Redner geben sollte.


RESTful Services:

Zum Abschluss gab es einen weiteren Vortrag von David Zülke, diesmal zu REST-Interfaces. Einiges klang ja bereits in seinem früheren Vortrag an, diesmal wurde es ernst. Zuerst wurde erstmal erklärt, was REST denn eigentlich ist (bzw. sein sollte) und dass fast alle sog. REST-Services, die es aktuell gibt, diese Vorgaben höchstens teilweise umsetzen. Anhand von zwei Beispielen (Twitter und Lovefilm) wurde dann erläutert, woran man gleich beim Entwurf einer Rest-Schnittstelle denken sollte. Ebenso wurden hier (speziell bei Twitter) alle denkbaren Fallstricke erläutert und Best Practices vorgestellt.

Ein ausführliches Q&A am Schluss sollte die Zeit doch etwas überziehen, man spürte aber doch, dass das Publikum trotz eines ganzen Tages Knowhow-Transfer noch voll dabei war und das Thema interessiert verfolgt hat. Fazit bleibt aber: solange Browser kein vollständiges REST unterstützen wird es wohl immer Krücken geben...

Soviel zum Tag 1. Viel passiert, viel gehört, viel Neues erfahren. Der Bericht zu Tag 2 & 3 folgen in Kürze, allerdings deutlich kürzer. Das waren zwar jeweils 2 Vorträge bzw. ein ganzer Tag Live-Coding, aber alles kann man hier unmöglich wiedergeben...

Geschrieben von Michael *Byte* Haszprunar

Twitter Bookmark Bericht PHP World Kongress  at del.icio.us Facebook Google Bookmarks FriendFeed Digg Bericht PHP World Kongress Technorati Bericht PHP World Kongress Print this article! E-mail this story to a friend! Identi.ca

Okt 3

Es ist soweit. Seitdem ich mich intensiver mit PHP beschäftige (wenn auch nur als Hobby) waren immer alle großen Konferenzen irgendwo in weiter Ferne. Zum Beispiel in Amerika oder sonstwo in der Weltgeschichte. So gerne ich auch hinwollte: mehrere Hunderte Euro (wenn das mal reicht) für Flug, Unterkunft, Teilnahme,... als Privatmensch eigentlich ein Ding der Unmöglichkeit. Andere Leute geben für ihr Hobby zwar auch viel aus, aber ich bin da eben nicht so.

Aber dieses Jahr kommt sie endlich nach München (was zumindest Anreise und Übernachtung spart). Der PHP World Kongress. Ich machte mich auf nach einer Programmübersicht (die ich, wie auch die Ankündigung des PHPWK ansich, auf der Seite der PHPUG München gefunden habe) und siehe da: überall spannende Themen. Als Hobby-Programmierer kommen auf Konferenzen ja gerne eher Enterprise-Solutions und -themen aufs Tablett, aber nicht hier.

"Meine Pläne für den PHP World Kongress" vollständig lesen

Geschrieben von Michael *Byte* Haszprunar

Tags für diesen Artikel: , , ,
Twitter Bookmark Meine Pläne für den PHP World Kongress  at del.icio.us Facebook Google Bookmarks FriendFeed Digg Meine Pläne für den PHP World Kongress Technorati Meine Pläne für den PHP World Kongress Print this article! E-mail this story to a friend! Identi.ca

Sep 29

Hallo PHPUG München,

Nach längerer Abwesenheit hier wieder ein kurzer Artikel von mir. Ich weiß nicht, ob nur ich bislang so unwissend war, aber vielleicht geht es euch ja wie mir...

Ich arbeite in meinen Projekten eigentlich durchgängig mit UTF-8 Kodierung. Fragt mich nicht warum, hab irgendwann damit angefangen (sicher mit gutem Grund), in der Zwischenzeit ist das Standard bei mir.

Letztens hatte ich aber ein eigentümliches Problem: wenn in einem String, den ich mit wordwrap fix umbreche (also auch innerhalb von strings, zusatzparameter "cut" auf true setze), an der Umbruchstelle ein Sonderzeichen stand (z.b. doppelte Anführungszeichen), dann wurde aus diesem einen Zeichen auf einmal 3 oder sogar 4. Es sieht so aus, als ob wordwrap nicht vorher bzw. nachher umbricht, sondern irgendwie IM Sonderzeichen und es zerreißt. Dass die inneren Quarks des Sonderzeichen-Atoms natürlich hässlich waren (und teilweise weitere Probleme verursachten) versteht sich von selbst.

Das Spannende dran: in meinen Tests konnte ich das jederzeit reproduzieren, aber nur, wenn ich das Zeichen selbst in den Quellcode geschrieben habe. Wenn ich das Zeichen über dessen ASCII-Code von PHP erzeugen lasse, war alles ok. Straaange...

Ich hab lange Zeit nichts darüber gefunden (vielleicht suche ich falsch?)und diese Funktion dann schließlich in JavaScript geschrieben, da die ganze Sache einfach zu unsicher war.

Letzte Woche hatte ich nun Gelegenheit, bei Mayflower mit zwei Experten zu sprechen und siehe da, die Lösung ist ganz einfach: wordwrap ist einfach nicht "utf-8 safe". Ihr hört richtig: man kann bzw. sollte keine utf-8 kodierten Strings mit wordwrap verarbeiten. Zusätzlich zu diesem Sonderzeichen-Bug erkennt wordwrap wohl auch die Länge des Strings nicht immer korrekt (utf-8 zeichen brauchen mehr Byte), es kann also auch hier zu Fehlern kommen.

Da es bislang noch keine utf-8 safe Variante gibt, bleibt euch wie mir nur übrig, entweder eine Alternative in PHP selbst zu schreiben (bzw. das Netz danach abzusuchen) oder das Thema z.b. JavaScript zu überlassen (was aber z.B. bei PDF-Generierung nicht funktioniert).

Ich hoffe, das hilft euch weiter!

Geschrieben von Michael *Byte* Haszprunar

Twitter Bookmark Auf Kriegsfuß mit UTF-8  at del.icio.us Facebook Google Bookmarks FriendFeed Digg Auf Kriegsfuß mit UTF-8 Technorati Auf Kriegsfuß mit UTF-8 Print this article! E-mail this story to a friend! Identi.ca

Okt 19
Hi,

Ich bin bei einem Portal das ich programmiert habe über eine ziemlich fiese Sache gestolpert die ich euch nicht vorenthalten will. Im Prinzip geht es um ein Eingabefeld das ein Datum im Format "Monat/Jahr" (m/Y) erwartet.

Da ich schon ein paar Teiel vom Zend Framework verwendet habe wollte ich hier mal die geniale Funktion "isDate()" verwenden, die verspricht einen String gegen einen gegebenen Formatstring zu prüfen. In meinen Ohren klang das wie "Regex für Datum" und ich bin mir sicher ich bin nicht der Einzige dem das so geht.

Mein Formatstring war also "MM/yyyy", so wie es das ZF-Manual angibt. Es klappte zunächst auch wunderbar, denn "1/2009" wurde genau schön als true validiert wie "12/2009". Die Positives funktionierten also schonmal.

Aber das Problem ist: isDate() arbeitet nicht wie ein Regex. Es versucht nämlich - wie Excel auch - den Anwender zu bevormunden und irgendwie ein gültiges Datum zu erkennen. Das ist nicht nur nervig, es macht damit den Sinn des Ganzen zunichte. So wird ein String wie "03.2009" auch als true erkannt, obwohl in meiner Formatvorgabe ganz klar ein Slash drinsteht. Noch viel schlimmer ist dass total unsinniges Zeug auch als true validiert.

Ein Beispiel [1]:
isDate('1111','dd.MM.yyyy') ==> true WTF?
Hintergrund hier ist dass Zend_Date das so liest:
1111 -> 1.1.11 -> 01. Jan.2011 -> true

Erinnert wie gesagt stark an Excel wo genau dieses Verhalten auch jeden nervt weil es einfach nicht das tut was man dem Ding sagt sondern es tut das was es meint das man wollte. Es gibt echt nix Schlimmeres als Doftware die versucht intelligent zu sein statt einfach nur so zu funktionieren wie es sollte.

Spätestens mit dem letzten Beispiel hat isDate() für mich jeglichen Nutzen verloren. Aus dem "super, ich hab eine einfache Regex für Datumseingaben gefunden" wurde ein "verdammter Dreck, der macht ja alles falsch. Muss ich wohl doch selbst schreiben". Darüber hinaus wird isDate() auch bei Zend_Form_Validator_Date verwendet, also passt auf wenn ihr das verwendet, es kommt auch lauter komisches Zeug als true durch...

Byte gefrustet vom ZF

[1] nachzulesen ist das hier: Zend Bug #7583

Geschrieben von Michael *Byte* Haszprunar

Tags für diesen Artikel: , , , ,
Twitter Bookmark Zend Date isDate() oder "Ich hasse Software die mich bevormunden will"  at del.icio.us Facebook Google Bookmarks FriendFeed Digg Zend Date isDate() oder "Ich hasse Software die mich bevormunden will" Technorati Zend Date isDate() oder "Ich hasse Software die mich bevormunden will" Print this article! E-mail this story to a friend! Identi.ca

Feb 25
Hallo PHPUG,

Ich hab gestern eine echte Perle im Heise Newsticker gefunden. Die Firma "Xenocode" bietet als Demo ihrer tollen Virtualisierungsprodukte an, sämtliche aktuellen Browser als Single-EXE rutnerzuladen und auszuführen.

Das heißt, dass man seien Webseiten und -applikationen nun ohne Umwege mit allen Browsern testen kann, auch mit IE6/7/8 parallel!

Ich habe bereits erste Tests damit gemacht, funktioniert einwandfrei. Beim IE hab ich nur festgestellt, dass Einstellungen unter allen Versionen geteilt werden, d.h. wenn amn im IE8 die Startseite verändert wirkt sich das auch auf eine installierte Version 7 aus. Wen das nicht stört bekommt damit ein komplettes Paket, das sich auch im USB-Stick schön mitnehmen lässt.

Viel Spaß!

Die Links hab ich natürlich auch noch:
http://www.xenocode.com/browsers/

Geschrieben von Michael *Byte* Haszprunar

Twitter Bookmark Browser-Tests ohne Installation  at del.icio.us Facebook Google Bookmarks FriendFeed Digg Browser-Tests ohne Installation Technorati Browser-Tests ohne Installation Print this article! E-mail this story to a friend! Identi.ca

(Seite 1 von 3, insgesamt 14 Einträge)