Tag archive: Spiele

Screenshot des Indie-Spiels Minecraft, welches vier hohe Türme zeigt.

Minecraft FTW!

Vor ein paar Wochen (oder sind es bereits Monate?) bin ich auf Minecraft aufmerksam geworden (bereits vor GameOne). Ein geniales, auf Blöcken basierendes, Indie-Spiel von Mojang aus Schweden, welches sich weltweit einer immer wachsenden Beliebtheit erfreut und eine rasant wachsende Community hat. Anders als bei anderen Spielen gibt es hier jedoch kein bestimmtest Ziel zu erreichen, was es ideal macht für eine kleine Runde zwischendurch, aber es kann auch abendfüllend für Spaß sorgen.

Continue reading

Digiart eines Affen mit einer Steampunk-Brille vor einem farbenfrohen Hintergrund, der technischen Fortschritt und Evolution verkörpern soll.

Evolution statt Revolution

Kein Plan wie ich auf dieses Thema gerade gekommen bin. Wahrscheinlich liegt es daran, dass ich mich momentan in mehreren Projekten damit beschäftige, aber vielleicht auch nicht. Jedenfalls habe ich in diesem Moment einen starken Drang darüber etwas zu schreiben, auch wenn dieser Artikel höchstens eine lose Gedankensammlung wird.

Continue reading

Screenshot einer Canon-Kamera nachdem ein Update eingespielt wurde.

Software-Updates und dergleichen

Wir leben in einer vernetzten Welt und das inzwischen nicht mehr nur am Rechner. Nahezu alle unsere Gerätschaften, die wir im täglichen Leben benutzen sind irgendwie mit dem Internet verbunden. Sei es ganz klassisch der Rechner daheim, das Handy, die Spielkonsole, der Fernseher, der MP3-Player, ja sogar der Kühlschrank kann manchmal bereits online gehen.

Continue reading

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

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.

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

Ein altes, verwittertes Buch neben einem ebenso altertümlich wirkenden Eimer.

String Klasse: Version 1.1.0

Diese Version gammelt nun schon seit weit über einem Monat auf meinem PC herum, hat aber erst heute ihre Vollendung gefunden dank dem Kommentar von Phil. Er hat mich darauf gebracht zwei magische Methoden einzubauen, mit denen die Möglichkeiten der Klasse enorm gestiegen sind.

Neue Features

Da dieses Release neue Features beinhaltet und nicht nur Bugs und Optimierungen enthält verdient es auch den Sprung von Version 1.0.1 auf 1.1.0. Welche Features das genau sind werde ich jetzt versuchen zu erläutern.

String erweitern

Es gibt jetzt gleich vier neue Methoden einen String zu erweitern: add(), addMore(), insert(), insertMore().

Mit der add()-Methode ist es möglich einen anderen String oder auch ein String-Objekt an das bisher bestehende anzufügen oder voranzustellen. Man kann auch mit einem Parameter angeben, was zwischen den Strings stehen soll. Mit addMore() kann man im Grunde genommen genau das Gleiche machen, nur kann man hier ein Array aus Strings oder String-Objekten übergeben.

Mittels insert() kann man einen String oder auch hier wieder ein String-Objekt in das bisherige String-Objekt einfügen. Dabei gibt man über einen Parameter den Offset an. Hier macht insertMore() auch wieder das Gleiche, nur dass es die in einem Array übergebenen Strings nacheinander einfügt.

String kopieren

Es ist nun auch möglich ein String-Objekt zu kopieren mittels der Methode copy(). Zurückgegeben wird ein neues String-Objekt, welches den gleichen Inhalt hat, wie das, welches kopiert wurde.

Magische Methoden

Mit PHP 5 wurden magische Methoden in Objekten eingeführt. Wie eingangs erwähnt habe ich heute erste die beiden Methoden __call() und __toString() eingebaut.

Erstere ist dafür zuständig die Möglichkeiten dieser Klasse enorm zu erweitern, da man dadurch jede beliebige String-Funktion aufrufen kann und diese dann auf das Objekt angewendet wird. Beispiel:

// Gibt 'is is the new st' aus
$string = new String('This is the new string.');
$string->substr(2, 16)->show();

Wie man sieht ist diese Methode ein wirklich mächtiges Werkzeug und auch Simon sollte jetzt zufrieden gestellt sein

Die Methode __toString() sorgt dafür, dass das Objekt direkt ausgegeben werden kann. Normalerweise würde eine Warnung auftreten, doch jetzt wird schlicht und ergreifend der String zurückgegeben. Das kann dann so aussehen:

// Gibt 'This is the new string.' aus
$string = new String('This is the new string.');
echo $string;

Vererbbarkeit

Als letzte gravierende Änderung ist es nun möglich von der String-Klasse abzuleiten, um eigene Erweiterungen dafür zu schreiben. Man kann in den abgeleiteten Klassen jede Methode verwenden, die die String-Klasse selbst hat, da alles entweder von außen zugänglich, also public ist oder geschützt (protected).

Diese Möglichkeit habe ich mir auch direkt zunutze gemacht und eine Ableitung geschrieben: JavascriptString. Mit dieser Klasse ist es möglich viele String-Funktionen, die in Javascript zur Verfügung stehen auch in PHP zu nutzen.

Dokumentation

Dieser Artikel ist nicht allzu ausführlich und das soll er auch gar nicht sein. Ich muss nicht jede einzelne Zeile oder Methode ausführlich erklären, denn die Klasse selbst ist ausführlichst dokumentiert und mit Beispielen versehen. Wer jedoch einen schnellen Blick riskieren will findet hier eine ausführliche Dokumentation, die mit phpDocumentor erstellt wurde.

Subversion

Da ich inzwischen Subversion auch privat nutze war es nur logisch das Projekt auch damit zu versionieren. Den aktuellen Entwicklungsstand findet man ab sofort immer unter dieser URL: http://dbsvn.agitos.de/public/string/trunk/

Committen darf momentan nur ich, aber um den aktuellen Stand auschecken zu können gibt es den User anonymous mit dem gleich lautenden Passwort.

Download

Zu guter Letzt kommt schließlich noch der Download der aktuellen Version. Download.

Wer auch hier Subversion nutzen möchte kann dies über den von mir angelegten Tag erledigen:http://dbsvn.agitos.de/public/string/tags/1_1_0/

Ein Kind mit einer Spielzeugwaffe in der Hand. Dahinter sind noch weitere Spielzeugwaffen zu erkennen.

Waffen verbieten?

Um auch mal etwas zu den momentanen Diskussionen um die Verschärfung des Waffenrechts und zur Problematik mit Amokläufen zu sagen will ich jetzt einfach mal meinen Standpunkt zu diesem Thema niederschreiben.

Continue reading