Wieee, Wii?

An sich bin ich ja bekennender Fan der Playstation Portable (PSP). Zumindest wenn man sich die Anzahl der Spiele ansieht, die ich für die PSP besitze. Unsere beiden Mayflower Standorte sind schon länger mit der Wii ausgerüstet, doch an Weihnachten war es auch bei mir soweit: mich hat das Wii Fieber erwischt. Wer Techcrunch liest, der weiß, dass Amazon zur Weihnachtszeit 17 Wii pro Sekunde (!) verkaufen konnte.

 

Doch was ist eigentlich das Faszinierende an der Wii? Die Auflösung ist, verglichen mit einer PS3 oder XBox, ziemlich simpel. Neuartig jedoch ist, dass man nicht mit einem simplen Daddel-Controller ausgerüstet wird, sondern man den Controller und das begleitende Nunchuk entsprechend mit vollem Körpereinsatz bewegen muss, um das jeweilige Spiel zu steuern. An dieser Stelle sei gesagt, dass „Rayman Raving Rabbits“ meiner Meinung nach ein unbedingtes Must Have ist. Wer schon immer mal auf einem Warzenschwein reiten wollte oder niedliche kleine Hasen erschlagen möchte, dem sei dieses Spiel ans Herz gelegt. :-) In der Grundausstattung ist neben einem Controller und einem Nunchuk (hier hätte man sich zumindest 2 Controller und 2 Nunchuks per default gewünscht) noch das Wii Sports Game dabei, bestehend aus Tennis, Bowling, Golf und Boxen.

 

So schaffte es Nintendo 2007, wieder ordentlich nach vorne zu kommen, wurden sie doch von Sony (Playstation) und Microsoft (XBox) ziemlich abgehängt. Wenn man innovativ sein möchte, lohnt es sich, auch mal Neues auszuprobieren, und nicht den Marktbegleitern einfach hinter her zu hecheln. Nintendo erschließt sich mit der Wii dabei neue Zielgruppen (insbesondere Familien oder Menschen, die aus dem Spielkonsolen-Alter „rausgewachsen“ sind), die sonst nie mit einer Spielekonsole spielen würden – Hardcore-Gamer, die sich lupenreine Grafik und Action wünschen, werden sicherlich eher zur XBox oder PS3 greifen.

 

Ein ausführlicheres Porträt zur Innovationskraft von Nintendo mit der Wii gab es in einer der letzten Ausgaben der WirtschaftsWoche, leider nicht online verfügbar.

 

In diesem Sinne: thumbs up für eine tolle Innovation – vielleicht infiziert Sie auch das Wii-Fieber? Einstweilen wünschen wir Ihnen ein gutes Neues Jahr 2008!

Disclaimer: Nintendo of Europe ist einer unserer Kunden.

Mayflower makes a security effort for PHPcity

Since we at Mayflower put emphasis on security, we would like our readers to visit the following link:

http://phpcity.myminicity.com/sec

This will help decrease the crime rate in our lovely city. :-)

Apart from that issue, a merry christmas and a happy new year to all our readers.

Managing Newsletter clusters with lamp & dojo

Edit an article in a language edition of a newsletter

While the newsletter engines like mailman or majordomo work robust and
mature since many years, the challenge of writing and managing many
newsletter editions in a bigger organisation can turn into a medium
project administration task.

 

The requirements for newsletters which follow the company style
gzuidelines are mostly:

  • Newsletter must be in HTML
    (but editors mustn’t write html)
  • Newsletter can be in more than one language
  • The content must be taken from various source

 

To manage those needs a „simple“ interface is needed.

The aim inside the project with our enterprise customer was to have the following workflow:

  • There can exist newsletters to diffrent Topics.
  • Each newsletter can have unlimited editions.
  • Each edition can exist in diffrent languages
  • Every language edition is a collection of some articles.

 

Well this is not enough, every article itself can be made of multiple parts like:

  • Headlines
  • Teasers
  • Contents
  • Images
  • Links
  • etc….

 

Using Dojo 1.0 and PHP5 in the backend we realized an application which allows editors to put in all the contents of the Newsletter without the knowledge of HTML.
By using Templates for rendering the final output it is guaranteed that the newsletter follows the desired corporate Design.

 

All communication with the Server is done via JSON if possible. When transferring uploads like images we use a hidden frame to send the informations. In this case the server sends back a HTML with a Javascript call like parent.window.foo.bar() back to the client to call an action after the successful POST.

Kickstart 1.3


1989 habe ich mit dem Amiga 500 angefangen und somit gleich den C64/C128 übersprungen, mich also direkt ins Erwachsenenlager begeben. Der Amiga war sowieso vieeeel besser. Coole Grafik (wenn ich nur daran denke, wie ich tagelang die Listings zum 3D-Renderer oder Mauszeiger-Sprite-Editierprogramm-mit-GUI aus dem Amiga Magazin abgetippt habe), ein „richtiges“ Betriebssystem und Amiga Basic zu programmieren war damals auch lustig (danach dann KickPascal bzw. MaxxonPascal und dann Modula-2 und Oberon und natürlich viel gespielt). Beim Robert gibt’s für uns alle mit viel Nostalgie ein bißchen zur Geschichte des Amiga zu lesen.

 

Was mich daran erinnert, den Amiga 4000 (mit „Vollausstattung“: 16 MB Fast-RAM, 2 MB Chip-RAM, 400 MB Festplatte! Und dann noch mit ner portierten bash, mit der Portierung des tin, AmigaELM und diesem Voyager-Browser oder wie der hieß) doch mal wieder vom Speicher meiner Eltern abzuholen … mit Pascal konnte man übrigens ganz cool entwickeln, besonders unter AmigaOS 2.0/3.0, schöne grafische Nutzeroberflächen mit automatischem Layouting der GUI abhängig vom eingestellten Font etc. Damals gab es eine Public Domain Diskettenserie (nein, nicht FishDisk, obwohl wir die konsumiert haben wie noch was) namens P.U.R.I.T.Y. Ich erinnere mich noch, wie ich zusammen mit jemanden aus Speyer eine Art Adressverwaltung mit GUI entwickelt habe, die dann auf der Purity veröffentlicht wurde. Mir fällt jetzt gerade nicht mehr ein, wie wir die Daten gespeichert hatten – gab’s da schon Datenbanken für den Amiga? Ist alles schon so lange her. Jedenfalls: Live long and prosper, Amiga! (1997 hatte ich mir dann übrigens gleich nen fetten Linux-Rechner mit SCSI & Co. gekauft und ebenfalls gleich Windows übersprungen)

 

Nachtrag: Fred ist tot. Gestorben im April 2007. Seufz.

Mayflower X-Mas 2007

Foto (C) by Sebastian Bergmann
Foto (C) by Sebastian Bergmann

 

Nein, das sind nicht die Protagonisten des Mayflower Gruselkabinetts. Es begab sich just nach Nikolausi, am 07.12.2007, die alljährliche Mayflower X-Mas Party (in diesem Jahr an unserem Münchner Standort), die wir immer gerne mit "Friends & Family" (dieses Mal unter anderem dabei: Kaj Arnö von MySQL, Lars Jankowfsky von OXID/Swoodoo, Wolfi von NFQ/Swoodoo, Frederik von Cosmotourist, Sebastian Bergmann, Wolfram Kriesing und weiteren zahlreichen illustren Gästen) feiern. Dieses Mal war auch unser Schwesterbaby, die SektionEins in Form von Stefan Esser und fukami, mit an Bord. Gerüchten zufolge ist es den Security-Experten nicht gelungen, das Buffet zu hacken ;-).

 

A propos Buffet. Neben der riesigen Käsetheke, den feinen Platten und dem tollen Nachtisch-Bereich durfte natürlich ein kulinarischer Leckerbissen nicht fehlen: Premium Thai Fingerfood von Sukhothai, das Venture unseres Freundes Tino Wunn (Ex-Pangora). Wer einmal in München ist, sollte die Sukhothai Location in Tal 43 nähe Isartor ansteuern. Leider habe ich noch kein Bild von unserem Thai Buffet gesehen, es hat jedenfalls sehr lecker geschmeckt. :-)

 

In diesem Sinne: thanks for all the fish und auf ein gutes Jahr 2008!

Liveshopping, „Woot!“ & Der Roundtable zum Thema an Nikolaus

Ich war gestern in Ismaning bei München
auf dem ersten Roundtable zum Thema „Woot!“ in Deutschland. Wem
„Woot!“ noch nichts sagt: „Woot.com“ ist seit 2004 das
weltweit erste Liveshopping-Portal.

Liveshopping ist eine Variante des
eCommerce, bei der es darum geht, einzelne Produkte nur für
einen kurzen Zeitraum anzubieten und durch den dadurch entstehenden
künstlichen Zeitdruck, Impulskäufe auszulösen.

Und das funktioniert recht Guut!
Das betätigten auch die rund 20 Vertreter der deutschen
Liveshopping-Szene, die gestern dabei waren.

Eingeführt hat Jochen Krisch mit
einer Präsentation über seine Analysen des amerikanischen
Vorbilds woot.com. An der nachfolgenden Diskussion beteiligten sich
u.A. die Gründer von Guut.de, iBOOD.de, Schutzgeld.de, Urdeal.de
und 123tv.de.

In den vier Stunden wurden interessante
Kontakte geknüpft, Erfahrungen ausgetauscht und neben der
Diskussion über die Erfolgsfaktoren und die Zukunft des
Liveshoppings in Deutschland, auch nicht an Geschichten aus dem
Nähkästchen
gespart.

Das Nähkästchen und Fotos
gibt’s auf dem Liveshopping-Watchblog.

Passing the Zend Certified Engineer exam

After successfully passing the MySQL 5.0 Developer exams earlier this year the next step was preparing for the Zend Certified Engineer.

For preparation I first took php|architect’s Zend PHP 5 Certification Study Guide from the bookshelf and started reading. The book gives a good overview of the topics covered in the exam and I even learned a few things while reading that I did not knew of before. Unfortunately it contains too many errors and mistakes in the printed examples and there is no errata on the internet.

After reading through the book I first did not really knew how to proceed in preparing for the exam. I did not have the feeling of being prepared to pass an exam, although I would think myself of a quite good and experienced PHP programmer. A really good thing is that everyone at Mayflower has the possibility to take some text exams at Vulcan, the Zend PHP 5 Certification Simulator (also from php|architect). I passed the first test exam but afterwards I knew which topics needed more attention and some serious learning. So back to the book and the PHP manual for some days reading. After passing another test exam I felt prepared enough for the real one.

Some days ago I finally went to the local testing center with some of my colleagues and all four of us passed the real exam.

MySQL: Too many connections

Mit max_clients definiert man bei einem MySQL Server, wie viele Client Connections die Datenbank maximal akzeptiert. Wird diese Anzahl erreicht, können keine weiteren Verbindungen zur Datenbank gemacht werden und MySQL schmeißt uns den Fehler „Too many connections“ zurück.

Bei großen Applikationen wie zum Beispiel Communities oder Shopsystemen kommt es durchaus vor, dass man nicht nur die Webanwendung, vulgo das PHP hat, die auf die Datenbank zugreift. Unter Umständen gibt es noch Backend-Systeme, Batch-Prozesse, Shell-Scripte und ähnliches, die sich ebenfalls zur Datenbank verbinden wollen. In Summa greifen da also ganz schön viele verschiedene System auf die Datenbank zu. Nun muss man noch wissen, dass bei einer typischen Konfiguration aus Apache + PHP pro httpd Prozess in der Regel mindestens eine Datenbank-Verbindung offen ist (es sei denn man versucht sich mit einem Connection Pooling über SQLRelay oder MySQL Proxy). Das schöne an der „shared nothing“ Architektur von PHP ist ja, dass am Ende des Requests die Verbindung zur Datenbank wieder geschlossen wird, also wieder ein Connectionslot frei wird.

Um also zu verhindern, dass es in Spitzenlastzeiten zu der oben erwähnten Fehlermeldung kommt, muss man über alle Architekturbereiche hinweg berechnen, wie viele Verbindungen maximal zur MySQL Datenbank gleichzeitig erreicht werden könnten. Diesen Mindestwert muss man dann als max_connections eintragen. Zu Problemen kann es kommen, wenn man langlebige Prozesse (Batch-Applikationen oder irre gelaufene Prozesse, die wirr im System „stehen“, Rekursionsbugs, die n Verbindungen ungeplant öffnen usw.) hat, die entsprechend viele Verbindungen zur Datenbank „besetzen“, ob nun gewollt oder ungewollt.

 

Zu Problemen kann es aber auch kommen, wenn man Peaks in den Seitenaufrufen hat. Da ja ein httpd Prozess dann mindestens eine Verbindung zur Datenbank aufmacht, sollte über die Apache Konfigurationsdirektiven, die die Anzahl der maximalen httpd Prozesse festlegen, die Gesamtzahl der Datenbankverbindungsslots konfiguriert und damit geregelt werden.

 

Kollege Köhntopp ergänzt noch, dass zum Debugging ein „SHOW FULL PROCESSLIST“ + date ein mal pro Minute in ein Logfile eine Möglichkeit wäre, um zu monitoren, ob es Überläufe gibt. Ich meine, dass die Non-Bastelvariante, der MySQL Enterprise Monitor (Codename Merlin) aus der MySQL Enterprise Distribution, ebenfalls geeignete Mechanismen fürs Monitoring und Logging zur Verfügung stellt. Zusätzlich sollte man bedenken, dass ein max_clients auch immer noch mit einem open_files_limit einhergeht, weil jeder offene Socket natürlich auch ein Filehandle belegt. Eine Tabelle belegt 2-3 Filehandles, somit ergibt sich die knackige Formel open_files_limit = (max_clients + table_cache * 2 bis 3).

Mit dem Nutzer kommunizieren



Gerade gesehen: nach dem Einloggen teilt mir iStockphoto durch ein sich aufziehendes Layer mit, dass es Updates beziehungsweise Bugfixes an der Applikation gab. Dabei wird mir die Information sehr unaufdringlich mitgeteilt, dass es Verbesserungen gab. So sollten Websites, insbesondere im E-Commerce, viel öfter mit ihren Kunden kommunizieren. Auch wenn es negative Dinge zu besprechen gibt – wie hier ein Bug in der Anwendung, wodurch ich meine bisherigen Sucheinstellungen verloren habe.