Posts by Benjamin Hofmann

Logo des imx.BattleGround vor einem Abfluss eines Waschbeckens, welches mit Blutspritzern gesprenkelt ist.

imx.BattleGround

Wer heute bei Twitter oder Facebook aufgepasst hat, hat bestimmt schon diese Umfrage gesehen, in der die Frage gestellt wird was wir am Freitag zocken sollen. Doch um ein klein wenig mehr Hintergrundwissen zur Verfügung zu stellen schreibe ich diesen kleinen Artikel.

Continue reading

Futuristisches, minimal und hell eingerichtetes Büro mit einem Mitarbeiter an seinem Schreibtisch.

Die ideale IDE

Wer PHP professionell entwickelt wird sich früher oder später auf die Suche nach einer geeigneten IDE begeben. Inzwischen gibt es hier auch für PHP einige interessante Stücke Software: PDT, Zend Studio, NetBeans for PHP, uvm.

Für welche IDE man sich entscheidet hängt entweder von den Präferenzen des Entwicklers ab oder davon was die Firma dafür ausgeben will. Immerhin hat man die Wahl zwischen ausgereiften kostenlosen Produkten und kommerziellen Varianten, die je nach Lizenztyp auch mal schnell ins Geld gehen können.

Eine weitere Frage, die man sich stellen muss ist die, was die IDE alles können soll/muss. Code-Completion versteht sich von selbst, aber was gibt es sonst noch? SVN-/Git-Integration? FTP? Automatische Erstellung von Dokumentationen anhand des Codes? Datenbank-Management? Debugger? Automatisierte Unit-Tests? Oder etwas ganz anderes?

Und wer sich bis jetzt noch nicht gefragt hat warum ich genau die drei oben genannten IDEs aufgezählt habe erfährt jetzt warum. Das sind nämlich genau diejenigen, die ich bisher verwendet und getestet habe. Hier also nun meine Eindrücke.

PDT

PDT ist eine freie IDE, die auf Eclipse basiert. Dadurch, dass hier schon eine ausgereifte IDE im Hintergrund arbeitet und die PHP-Integration eher durch Plugins erfolgt als durch Einbau in die Basis hat man viele benötigte Features quasi schon frei Haus.

Jedoch ist PDT in meinen Augen bei weitem noch nicht ausgereift und es fehlen viele Features, die man als professioneller PHP-Entwickler benötigt. Zudem laufen viele Prozesse in der IDE, die man für die Entwicklung von PHP gar nicht benötigt, was die Software teilweise mächtig ausbremsen kann.

Zend Studio

Wenn es nach Zend geht ist das Zend Studio die ultimative IDE für PHP. Früher war sie das auch, zumindest bis Version 5.5. Seit der Nutzung von Eclipse und PDT als Basis hatte ich nur noch Probleme. Also jetzt bitte nicht falsch verstehen, die IDE ist wirklich großartig, wenn sie funktioniert. Jedoch war zumindest in meinem Fall einiges an Handarbeit nötig bis es soweit war. Und da ich mich sehr über diese sündhaft teure verbuggte IDE geärgert habe will ich auch gar nicht mehr Worte darüber verlieren.

NetBeans for PHP

Seit einiger Zeit nutze ich NetBeans for PHP. Eine super IDE, die wirklich schnell und zuverlässig arbeitet und einige sehr interessante Features hat, die sonst keine IDE zu bieten hat. Natürlich gibt es auch hier nicht alles, was man sich wünscht, aber das was vorhanden ist funktioniert einwandfrei.

Und du?

Nun liegt es an dir. Welche IDE nutzt du und warum?

Langzeitaufnahme einer Straße mit vorbeifahrenden Autos, deren Scheinwerfer lange Lichtspuren ziehen.

(Mikro-)Optimierungen

Es gibt dutzende, wenn nicht sogar hunderte oder tausende, Wege eine Anwendung performanter zu gestalten. Einer der meistgenutzten Wege ist die Optimierung des Codes. Hierbei gibt es natürlich einige sehr interessante und gute Ansätze, aber auch viele, die die Wartungsfähigkeit des Codes einschränken oder schlichtweg nur minimale Gewinne bringen.

Vorweg wollen wir uns jedoch mit der Frage beschäftigen, ob Optimierungen wirklich nötig sind. Wenn eine Anwendung in einer für den Nutzer zumutbaren Zeit reagiert sollte man sich keine Gedanken machen hier noch etwas zu verbessern. Ebenso sollte man sich keinen unnötigen Aufwand zumuten, wenn sich das Problem durch Aufstocken der Hardware lösen lässt. Meist bringt das mehr und kommt günstiger. Man sollte jedoch dringend etwas unternehmen, wenn sich die Hardware sowieso schon auf einem Maximallevel befindet und diese an ihre Grenzen stößt.

Der übliche Weg ist dann mithilfe eines Profilers die Stellen im Code zu finden, die die Anwendung ausbremsen. Sobald man sie gefunden hat macht man sich Gedanken, was man verbessern kann. Beispiele hierfür sind weniger Datenbankabfragen ausführen, Ergebnisse zu cachen, Statements optimieren, etc.

Was man jedoch tunlichst vermeiden sollte sind Mikro-Optimierungen. In PHP gibt es hierfür einige tolle Beispiele, z.B. Strings in einfache Hochkommata schreiben, Prekrement statt Postkrement verwenden, kürzere Variablennamen zu verwenden, usw. Ich persönlich habe mir zwar einige Sachen davon angewöhnt, da es nie schaden kann hier und da eine tausendstel Millisekunde zu sparen, jedoch bringen diese Optimierungen meistens keine Verbesserung im Gegensatz zum vorherigen Stand. Viel wichtiger ist es seinen Code nochmal zu überdenken und alternative Methoden zu finden, die die Ausführung beschleunigen.

Irgendwie habe ich gerade das Gefühl, dass ich was komplett anderes geschrieben habe als ich ursprünglich wollte, aber die wichtigste Message habe ich genannt und darauf kommt es an. Übrigens gibt es auch bei PHP hates me einen Artikel dazu.

Stark im Farbton angepasstes Bild von Luftballons auf einem Tisch vor einem hellen Hintergrund.

Herzlichen Glückwunsch zu 500 Artikeln

Schule behindert. Zumindest dann, wenn man eigentlich zeitnah über ein großes Ereignis in der deutschen PHP-Community berichten will wie das Jubiläum von PHP hates me. 500 Artikel gibt es dort nun schon zu bestaunen und sein Vorsatz jeden Tag einen Artikel zu veröffentlichen hat bisher auch wunderbar funktioniert. Herzlichen Glückwunsch dazu!

Wie es sich für ein Jubiläum gehört feiert Nils natürlich nicht allein im stillen Kämmerlein, sondern hat ein Gewinnspiel auf die Beine gestellt mit einigen interessanten Preisen. Und als ob das noch nicht reichen würde ziert auch noch ein neues Design die Website, welches ich übrigens sehr gelungen finde.

So, genug geschwafelt. Auf gehts zur Party im Blog von Nils!

Ein Elefant auf einer grünen Wiese. Im Hintergrund sind Berge zu erkennen.

Warum PHP?

Dieser Artikel bezieht sich auf einen Beitrag im PHP Labor, der die Frage stellt „Warum PHP?„. Der Artikel ist sehr interessant zu lesen, da aber jeder seine eigene Meinung hat, was auch gut ist, will ich mich heute auch dieser Frage stellen und eine Antwort darauf geben.

Zuerst einmal der Weg wie ich zu PHP gekommen bin. Vor ein paar Jahren fing ich an mit simplem HTML Websites zu erstellen. Irgendwann folgte dann CSS und die Websites wurden komplexer. Gerade als ich soweit war diese beiden Sprachen zu verstehen hatte ich das erste Mal Kontakt mit PHP. Ich wollte damals ein Forum für die Mitglieder meines „Clans“ bereitstellen.

Leider hatte ich damals keine Ahnung was ich mache und habe einfach so lang rumgewurschtelt bis es gepasst hat. Dann fing jedoch recht bald danach meine Ausbildung zum Fachinformatiker (Anwendungsentwicklung) bei der infomax websolutions GmbH an. Dort hatte ich dann zum ersten Mal mit einer richtigen Anwendung zu tun. Unter Anleitung habe ich dann Schritt für Schritt die Sprache gelernt.

Heute, fast drei Jahre danach, wage ich zu behaupten, dass ich PHP durchaus gut kenne und auch kann.

Aber warum PHP und nicht Java, C#, Python oder sogar Delphi? Nun, jede Sprache hat ihren Reiz und auch einen mehr oder weniger festgelegten Einsatzzweck. Bei PHP fasziniert mich die Einfachheit. Es ist super einfach die Sprache zu lernen und damit Anwendungen zu programmieren. Von einfachen Skripten, die nur einen einzigen Zweck haben bis hin zu hochkomplizierten Anwendungen nach allen Regeln der Programmierkunst ist alles möglich. Und das meist recht schnell.

Auch der Einstieg ist schnell geschehen. Installiere dir einen Webserver mit PHP und lege los. Es muss nichts kompiliert werden, sondern Änderungen sind sofort sichtbar. Alles Dinge, die ich mag und so schnell nicht aufgeben will.

So, das war meine Meinung zu der Frage „Warum PHP?“. Was sagst du dazu?

Eine große grüne Wiese mit einigen Heustapeln, die mit Stöcken und Planen zusammengehalten werden.

Die Nadel im Heuhaufen, oder andersrum?

Erst vorgestern habe ich einen gewaltigen Bug im Code eines Projektes gefunden, weil PHP die Parameter anders erwartet hat, als ich sie angegeben habe. Daraufhin folgte ein Tweet und die Erkenntnis, dass es oftmals keine Gemeinsamkeiten gibt in der Parameterfolge von Funktionen.

Als Beispiel habe ich strpos() zu nennen, welches zuerst den Heuhaufen erwartet und dann erst die Nadel. Das Gegenbeispiel dafür ist in_array(), wo man zuerst die Nadel angibt und dann den Heuhaufen, in dem gesucht werden soll.

Wovon ich hier eigentlich spreche? Von Suchfunktionen auf diverse Typen in PHP. Mal gibt man zuerst das an, wo gesucht werden soll und ein andermal das, wonach gesucht werden soll. Das ist eindeutig doof und führt zu Verwirrungen. Man kann zwar behaupten, dass Funktionen, die Strings durchsuchen immer die gleiche Reihenfolge nutzen und die für Arrays auch, aber warum hat man sich hier nicht von Anfang an Gedanken gemacht und das angeglichen. Wäre das so schwer gewesen?

Nun gut, jetzt weiß ich es besser und passe auf, was wohin kommt. Auch trübt dies nicht meine Freude an der Programmiersprache an sich, aber eventuell macht sich ja nochmal jemand Gedanken darüber. Vielleicht für PHP 6?

Bild von Ezio Auditore da Firenze aus dem Spiel Assassins Creed 2

Ein „Attentat-to-go“ bitte…

So oder so ähnlich müsste man es sich wahrscheinlich in der heutigen Zeit vorstellen, wenn plötzlich Ezio Auditore de Firenze an einer Sprechanlage steht, die ähnlich der eines Drive-Ins einer Fast-Food-Kette aussieht und ein Auftragsattentat begehen will. Im Italien der Renaissance muss er dafür an einen Käfig für Brieftauben gehen, ziemlich uncool im Gegensatz zu den heutigen Mitteln.

Und für all diejenigen, die immer noch nicht wissen, um was es in diesem Artikel gehen soll hier die Auflösung: Assassin’s Creed II.

Continue reading

Collage aus diversen Albencovern und der Menge an Songs, die meine Installation von iTunes verwaltet.

48 Tage, 2 Stunden, 47 Minuten und 41 Sekunden

Schaut man sich meine Musiksammlung in iTunes an wird einem dieser Wert unten angezeigt. Im Klartext bedeutet das, dass ich momentan 16598 Songs besitze, und schon bald 2 Monate pausenlos Musik hören könnte, ohne dass sich ein Lied wiederholt.

Doch darum soll es in diesem Artikel gar nicht gehen. Das eigentliche Thema sollen meine Top-Alben des Jahres 2009 sein, also die Alben, die ich am meisten gehört habe und mir dementsprechend auch am besten gefallen haben.

Continue reading

Foto der Bühne, auf der die erste Keynote der International PHP Conference 2009 in Karlsruhe, stattfand.

IPC 2009 – Tag 1

Da ich, wie ich bereits geschrieben habe, pünktlich angekommen bin habe ich die Eröffnungssession auch noch mitbekommen, die einen kleinen Einblick in das vielfältige Programm der International PHP Conference und der webtech gab. Kurz darauf ging es dann auch schon mit der Session „Design Patterns“ von Cal Evans bei mir los und das war genau richtig als Einstimmung auf die nächsten drei Tage.

Design Patterns von Cal Evans

Gestartet hat die Session direkt mit einer Buchempfehlung: „Design Patterns“ von der Gang Of Four. Anschließend ging er dann großteils auf das MVC-Pattern ein und hat dessen richtige Verwendung erklärt, z.B. sollte ein Model niemals direkt auf eine Datenbank abbilden, da die Datenquellen eines Models wesentlich vielfältiger sein können. Sie können neben Datenbanken auch auf Webservices, etc. zugreifen und ihre Daten von dort beziehen.

Controller sollten ebenfalls keine großen Logiken beinhalten, sondern nur dafür Sorge tragen, dass die Daten vom Model zum View und umgekehrt gelangen. Jedoch sollten im Controller die Exceptions gefangen werden. Das Stichwort, welches ich vor kurzem dazu gelernt habe, nennt sich „Fat Model, Tiny Controller“.

Der View sollte logischerweise keine Logiken enthalten, sondern nur für die Darstellung sorgen. Dafür kann er, wenn nötig, auch direkt auf das Model zugreifen, darf jedoch keine Daten schreiben, sondern nur lesen.

Abgesehen davon ist er noch auf das Decorator Pattern eingegangen, welches anstatt multipler Vererbungen verwendet werden sollte, da man damit wesentlich flexibler ist.

NetBeans IDE von Petr Pisl

Die zweite Session stand ganz im Zeichen der aktuellen Betaversion von NetBeans, einer schlanken, aber sehr mächtigen IDE für die Entwicklung in verschiedenen Programmiersprachen. Da es bei der IPC logischerweise um PHP geht wurden auch nur die neuen Features dieses Pakets abgehandelt.

So soll die neue Version nach Plan am 10.12.2009 erscheinen und viele neue Fähigkeiten besitzen. Die erste genannte war eine Codevervollständigung ohne PHPDoc. Dafür scannt NetBeans den Code und versucht anhand verschiedener Indikatoren herauszufinden, was die Methoden und Funktionen für Rückgabewerte liefern. Auch soll PHPDoc nun eine Code-Completion erhalten, ebenso wie einzelne Elemente eines Arrays oder auch SQL, welches in Strings vorkommt. Man kann nun auch bestimmte Ordner aus dem Index für die Vervollständigung herausnehmen.

Abgesehen von diesen Features, die ich enorm spannend finde soll auch das Erstellen von Unit-Tests sehr einfach werden und die Ausführung dieser ebenso. Das Handling dieses Features erinnert mich stark an Zend Studio for Eclipse, wo das auch möglich ist.

Continuous Integration von Stefan Priebsch und Sebastian Bergmann

Diese Session war für mich extrem interessant, da ich mit diesem Thema noch nicht wirklich in Berührung gekommen bin. Die ersten Aussagen der beiden hat auch direkt beinhaltet, dass man unbedingt automatische Tests durchlaufen lassen soll und mindestens einmal täglich den aktuellen Stand zu integrieren, also zu committen.

Anschließend wurde der Wert von Continuous Integration angesprochen, der sehr hoch ist. Durch dieses Verfahren verringert man Risiken und reduziert gleiche Prozesse, da nicht überall die gleiche Software installiert werden muss. Abgesehen davon erzeugt man deploybare Software, sorgt für größeres Vertrauen in den eigenen Code und die Sichtbarkeit eines Projektes wird erhöht, da jeder immer den aktuellsten Stand einsehen kann.

Um mit diesem Verfahren starten zu können muss man zuerst einmal die Prozesse herausfinden, die automatisiert werden können. Hieraus soll dann ein „Non-Event“ gemacht werden, was im Klartext bedeutet, dass es sehr einfach sein soll diesen Prozess auszuführen, z.B. durch einen Klick auf einen Button oder ein kleines Skript.

Zuletzt wurden dann noch diverse Tools vorgestellt, die man nutzen kann und die ich hier einfach nur auflisten will, da ich mich damit noch nicht weiter beschäftigt habe: CruiseControl, phpUnderControl, Hudson, Atlassian Bamboo und Arbit.

Event Driven Architectures von Benjamin Eberlei

PHP an sich unterstützt nur bedingt Events, da es eine request-basierte Sprache ist. Jedoch gibt es zwei Patterns, die man nutzen kann, um so eine Architektur zu bilden: Das Observer-Pattern und das Event-Dispatcher-Pattern.

Doch auch dies reicht noch nicht aus, um auf Events reagieren zu können. Dazu sind weitere Tools notwendig, wie z.B. XMPP, dropr oder Gearman. Erst durch diese wird es möglich auch asynchron mit PHP arbeiten zu können. Von diesen drei Tools hat Benjamin noch Gearman etwas weiter vorgestellt, welches durch seine einfache Nutzung bei mir punkten konnte.

Wer langsam ist verliert von Dr. Johannes Mainusch

Diese Session war von der webtech und sehr interessant. Es wurde davon berichtet, welche Ziele sich XING gesetzt hat und wie sie es geschafft haben diese zu erreichen.

Die Performance von Websites ist sehr wichtig und jede Seite sollte innerhalb von zwei Sekunden komplett geladen werden, da ein Mensch in dieser Zeit eine Reaktion erwartet. Wenn nichts voran geht kommt Frustration auf und die Plattform wird verlassen. Diese Nutzer kommen auch meist nicht wieder. Dabei macht die Zeit, die der Server für die Datenverarbeitung benötigt, meist nur einen kleinen Teil aus, der größte Teil findet jedoch auf dem Weg vom Server zum Nutzer statt.

Um hier für mehr Geschwindigkeit zu sorgen ist es erstmal wichtig die Engpässe zu finden. Wie groß sind die ausgelieferten Dateien, werden diese vom Browser gecached, gibt es langsame Requests usw. Hat man hier alles identifiziert kann mit der Optimierung begonnen werden. Man kann dann anfangen Dateien zusammenzufassen, das Caching für den Browser zu beeinflussen usw.

Fazit

Alle diese Sessions waren sehr interessant und ich bereue es nicht andere Sessions besucht zu haben. Es waren viele spannende Themen von kompetenten Speakern, die zumindest mir einige neue Erkenntnisse gebracht haben.