Archive for 2011
Zwei Jahre PHP Blogging: Ihr werdet beschenkt!
*tröööt* Zwei Jahre, zwei kurze Jahre, wird dieser Blog gefüllt mit PHP- und anderen Webtechnik-Artikeln, und auch einige Gastautoren haben bereits hier veröffentlicht (es könnten aber gern noch mehr werden!), und dieser Blog wäre nichts ohne euch Leser, die ihr durch Feedback und Ergänzungen zur Diskussion und Wissensbildung beitragt. Deshalb möchte ich mich bei euch bedanken und euch mit einigen Geschenken eindecken.
218 Artikel in 2 Jahren, 2337 Kommentare (bereits spambereinigt), kein schlechter Schnitt, und ich habe viel gelernt von euch, Danke!
21 Firmen stellen insgesamt 192 Geschenke zur Verfügung, und es sind alles großartige Sachen, der Gesamtwert liegt bei ca. 4800 Euro, und einige sind nicht käuflich! Schaut euch die folgende Liste genau an (ihr könnte da auch draufklicken um Details zu erfahren):
——————————————————————————————
1 * International PHP Conference im Herbst 2011 von S&S Media
1 * Dutch PHP Conference 2012 (ohne Tutorial Tag) in Amsterdam von ibuildings
3 * 100 Euro Gutscheine von cloudControl, dem deutschen PHP Platform-as-a-Service Anbieter
3 * Basic Hosting Paket von Orchestra.io, 1 Jahr lang die PHP-Cloud genießen
10 * 29 Dollar Gutschein für PHPFog, ebenfalls ein sehr guter PHP PaaS Anbieter
1 * Zend Studio 8.0 Lizenz von Zend
10 * schwarze YubiKeys von Yubico
5 * Personal Lizenzen einer der folgenden IDEs von JetBrains: PHPStorm, IntelliJ IDEA, RubyMine, PyCharm, ReSharper, WebStorm
5 * Jahresabonement des PHP-Magazin
1 * PHP Design Patterns von O’Reilly
1 * Canvas – kurz & gut von O’Reilly
1 * jQuery – kurz & gut, 2. Aufl. von O’Reilly
1 * Der pragmatische Programmierer von Hanser
1 * Softwarequalität in PHP Projekten von Hanser
1 * Zend Framework im Einsatz von Hanser
1 * PHP Zend Certified Engineer Übungsbuch vom mitp Verlag
1 * Der leidenschaftliche Programmierer von mitp
1 * Web-Sicherheit von mitp
1 * Power-Workshops PHP von Video2Brain
2 * Plug-in-Entwicklung mit jQuery von Entwickler-Press
2 * MongoDB – Sag ja zu NoSQL von Entwickler-Press
2 * Onlinerecht für Webmaster von Entwickler-Press
2 * Websites optimieren für Google&Co von Entwickler-Press
1 * Agile Entwicklungspraktiken mit Scrum von dpunkt
1 * Leitfaden Web-Usability von dpunkt
1 * Die Pomodoro-Technik in der Praxis von dpunkt
1 * Gelungenes Webdesign von dpunkt
1 * Agile Softwareentwicklung von dpunkt
1 * Einstieg in PHP 5.3 und MySQL 5.5 von Galileo Press
1 * Linux Hochverfügbarkeit von Galileo Press
1 * CSS in der Praxis von Galileo Press
2 * vServer L für 6 Monate kostenlos von 1blu
2 * eco Server für 6 Monate kostenlos von 1blu
3 * Zeitmanagement für Webentwickler von Terrashop
5 * 2 Planning Poker Sets von Holisticon
2 * 5 Planning Poker Sets von agile42
100 * vServer Beta-Accounts Gutscheine von EUserv
——————————————————————————————
Na, ist das eine Liste? Und das ist alles FÜR EUCH! Ich hatte mir erst überlegt noch eine extra kleine Webseite zu bauen für die Verlosung, aus Zeitmangel ist sie aber nicht fertig geworden.
Doch die Verlosung wäre nicht möglich gewesen ohne die zahlreichen Unterstützer, DENEN ICH ALLEN GANZ HERLICH DANKEN MÖCHTE!! Ich würde mich freuen wenn ihr die ein oder andere Webseite besuchen würdet und dort immer schön fleißig einkauft und Dienstleistungen nutzt, so viele Geschenke zu bekommen ist wirklich toll und sollte belohnt werden!
Ihr müßt 2 Dinge tun um bei der Verlosung mitzumachen: Besucht mindestens 3 Links aus der Liste oben, und danach hinterlasst ihr einem Kommentar hier im Blog, JEDER NUR EINMAL TEILNEHMEN, und dann werden all diese schönen Geschenke verlost. Ihr habt Zeit bis zum 04.07.2011, dann wird die riesige Lostrommel gerührt! Also, spread the word, twittert, bloggt, sagt es allen weiter, dieser Tag ist ein toller Tag! Ihr macht diesen Blog zu dem was er ist! Danke.
Slides der php|tek 11
Die PHP Konferenz Saison ist in vollem Gange, und auch dieses Jahr fand wieder die php|tek statt, in der 11. Auflage kamen vom 24. bis 27. Mai 2011 viele PHP Interessierte in Chicago zusammen.
Das Programm inklusive Links zu den Slides:
24. Mai 2011
Mobile for PHP Developers
Ivo Jansch
Writing and Using PHP Streams and Sockets
Elizabeth Marie Smith
Zend Framework Tutorial
Rob Allen
Design Patterns
Jason E. Sweat
Optimizing MySQL Essentials
Ligaya Turmelle
NoSQL: Why, How and When
Benjamin Young
25. Mai 2011
Das Y2K38 Problem
Wer viel mit Terminen und Datumsangaben arbeitet kennt das Problem vielleicht, aber häufig fällt uns das Problem jetzt noch nicht auf, und in einigen Jahren werden wir dann Probleme bekommen.
Es geht um den Unix Timestamp, also die Anzahl der Sekunden seit 1970. In PHP arbeiten Funktionen wie time() und strtotime() mit diesem Timestamp, aktuell heute liegt diese Zahl bei ca. 1,3 Milliarden (1307428397). Wenn wir nun mit Geburtsdaten arbeiten und jemand hat vor 1970 Geburtstag, dann können wir bekannterweise nicht den Timestamp nutzen. Aber es gibt auch eine obere Grenze, und kaum jemand weiß wo diese liegt. PHP arbeitet im 32-bit-Modus mit 4-Byte signed Integers, also vorzeichenbehaftete Zahlen zwischen -2.147.483.647 und 2.147.483.647, aktuell sind wir mit 1,3 Milliarden bereits über die Hälfte vorangeschritten. Exakt am 19.01.2038 um 03:14:07 werden wir einen Überlauf haben, der Timestamp wird also von 2.147.483.647 auf -2.147.483.647 umspringen, und negative Timestamps bedeuten immer 01.01.1970.
Mit einem Zweizeiler können wir zeigen dass wir bei Timestamps größer 2038 ein Problem bekommen:
<? $date = strtotime('2037-02-01'); echo date('d.m.Y H:i', $date);
Die Ausgabe in diesem Fall lautet 01.02.2037 00:00.
<? $date = strtotime('2039-02-01'); echo date('d.m.Y H:i', $date);
Hier haben wir das Maximum überschritten, es wird ausgegeben: 01.01.1970 01:00.
Aber nicht nur PHP hat Probleme damit, sehr viele Programmiersprachen, Programme und Betriebssysteme sind betroffen. Und da wir alle wissen wie lang einige Programme laufen werden (na, wer muss noch mit alten Cobol-Programmen arbeiten, oder Intranetseiten von 1995 nutzen?), oder man Termine für die Zukunft plant, sollte man schon jetzt mit dem Problem vertraut sein, um nicht schwer zu findende Bugs zu produzieren.
Es gibt mehrere Lösungen um das Problem zu umgehen. Entweder man arbeitet mit 64-bit Systemen und Software, die 8-Byte signed Integers nutzen, um damit das Problem effektiv zu beseitigen. Eine zweite Möglichkeit ist die Zeit in einem String zu speichern, also einfach „2045-05-27“ speichern und dann mit Hilfe der DateTime Klassen diesen String umwandeln und mit ihm rechnen:
$date = new DateTime('2045-05-27'); echo $date->format('d.m.Y H:i');
Gibt aus: 27.05.2045 00:00.
Also kurz drüber nachdenken wenn ihr das nächste Mal Unix Timestamps nutzt die in der Vergangenheit oder der Zukunft liegen, oder falls euer Programm evtl. auch noch in 27 Jahren laufen wird.
Slides der Dutch PHP Conference 2011
In unserem Nachbarland gab es vorletztes Wochenende wieder viel wissenswertes auf der Dutch PHP Conference 2011 zu hören, an 3 Tagen gab es 35 Talks und 7 Tutorials auf die Ohren. Da ich leider dieses Jahr nicht dort sein konnte hier die Liste der Talks inklusive Slides soweit vorhanden:
19. Mai 2011
ZCE 5.3 Exam Preparation
Lorna Mitchell
Optimizing MySQL Essentials
Ligaya Turmelle
Caching on the edge
Fabien Potencier
Think like an ant, distribute the workload
Helgi Þormar Þorbjörnsson
XP Principles and Practices
Sebastian Schürmann
Doctrine 2
Juozas Kaziukėnas
Isolation for your tests
Giorgio Sironi
Eine Rechenaufgabe lösen mit PHP
Ich bastle gerade an einem kleinen Script, das aus einer Reihe Zahlen und arithmetischen Operatoren eine Rechenaufgabe erstellt und löst. Die Rechenaufgabe besteht nicht nur aus Additionen oder Subtraktionen, sondern enthält im einfachen Beispiel auch Multiplikationen, wobei dann auf die Punkt-vor-Strichrechung geachtet werden muss, was das ganze doch etwas erschwert.
Zuerst Beispielcode, damit ihr versteht was ich vorhabe:
<?php $numbers = array(5, 19, 45, 6, 7, 21); $operators = array('*', '+', '-', '*', '+'); // String bauen $mathString = ''; foreach ($numbers as $id => $number) { if ($id < count($numbers)-1) { $mathString .= $number . $operators[$id]; } else { $mathString .= $number; } } // $mathString ist nun '5*19+45-6*7+21'
Nun ist die Aufgabe, aus dem String $mathString das Ergebnis auszurechnen. Die einfachste und schnellste Lösung ist natürlich eval() (oder vergleichbare Funktionen wie create_function() oder assert() ). Folgender Code löst die Rechenaufgabe und gibt das Ergebnis aus:
eval('echo ' . $mathString . ';');
Wenn man nun eval() und Konsorten nicht benutzen möchte oder darf oder kann, wie lautet dann der PHP Code, um eine solche Rechenaufgabe zu lösen? Die beiden oben gezeigten Arrays sind natürlich nur Beispiele, der Algorithmus sollte auch mit anderen Zahlen funktionieren.
Folgende Dinge sind zu beachten:
- $numbers ist ein Array aus unbekannt vielen Zahlen. Im einfachen Fall nur positive Zahlen, im etwas schwierigeren Fall auch negative
- $operators beinhaltet so viele Operatoren wie nötig sind für die Rechnung (also count($numbers)-1 viele). Um es nicht allzu komplex zu machen beschränken wir uns auf die Addition, Subtraktion und Multiplikation (+, – und *)
- Es gilt die Punkt vor Strichrechung zu beachten
- In unserem Fall hier kommen keine Klammern vor.
Wie sieht das ganze nun aus wenn auf die einfache, aber unschöne eval() Lösung verzichtet wird? eval() ist deshalb unschön weil die Zahlen und Operatoren oder gar der ganze $mathString aus Usereingaben kommen könnten, dann muss man sehr gut filtern um keine Sicherheitslücke beim Einsatz von eval() zu erstellen. Oder auf manchen Systemen ist eval() sogar verboten (disabled_functions).