madcats[welt]

Wunder der Technik

Das ist eine österreichische Wetterstation. Der Stein am oberen Bildrand hängt an einer Kette und die Tafel darunter beschreibt die einzelnen Zustände bzw. das dazu passende Wetter.

Gefunden am Baumkronenweg in Kopfing.

Frak you, NBC!

Nach den Querelen um die Preise, ist NBC nun wieder im amerikanischen iTunes Store vertreten. Schöne Sache, nur sind wir Europäer mal wieder die Deppen vom Dienst. Während man mit einem US-Account sogar die erste Folge der vierten Battlestar Galactica-Staffel kostenlos in HD bekommt, wird man hier mit der zweiten Staffel auf RTL 2 abgespeist.

Auf die grottige Übersetzung sowie die – immerhin gut besetzte – Synchronisation kann ich verzichten und ich bin gerne bereit für jede neue Folge pro Woche 2,99 EUR hinzulegen. Aber firmenpolitische Spielchen, in denen Europa immer den Kürzeren zieht, lassen das einfach nicht zu.

Die Globalisierung hat hier hat die Film- und Serienbranche noch nicht erreicht. Stattdessen verstrickt man sich in lizenzrechtliche Streitereien, die einem das Hirn bluten lassen. Stichwörter: House M.D. und Teardrop. In der heutigen Folge auf ORF1 (Staffel 4, Folge 2), war aber endlich das Lied von Massive Attack zu hören.

Ich habe keine Lust mehr, mich als letzten Idioten behandeln lassen zu müssen, nur weil ich in Europa wohne. Hier muss man schon froh sein, wenn etwas in HD ausgestrahlt wird – wäre aber noch erträglich, wenn man zeitnah und ohne Zugriff auf dubiose Quellen, an die neuen Folgen seiner Lieblingsserie kommen könnte.

Von den verzögerten DVD-Veröffentlichungen fange ich besser gar nicht erst an …

WAAAAGH!

Mit etwaz Glück konnte ich noch’nen Beta-Key für Warhamma Onlinä ergattan. Da Client wird gerade auf meine Plattä geschaufelt un’ morg’n geht’s loz.

Geradä alz Dark Age of Camelot-Veteran bin ich sehr auf da Spiel gespannt. Ein Büro-Kollegä, da scho’ in da geschloss’nen Beta dabei war, is’ sehr angetan.

Mal seh’n, wie ich mit da Szenario zurecht komme. Warhamma 40.000 is’ eher mein Fall, aba bei da grundsätzlich’n Ding’n, sin’ sich ja beide Warhamma-Univers’n sehr ähnlich.

Wenn GOA morg’n kein’ Mist baut, hinterlasse ich hier noch Namä un’ Serva.

Google Chrome

Die Katze ist nun seit ein paar Tagen aus dem Sack und ich kann das dauernde Lamentieren über Datenschutz und Spionage nicht mehr hören. Bei einem Open Source-Projekt ist so eine Diskussion überflüssig. Jeder kann sich den Quelltext herunterladen und prüfen. Google Suggest in der Adressleiste lässt sich abschalten und die Browser-ID ebenso umgehen – letztere nutzt übrigens auch Mozilla Firefox beim Auto-Update …

Leider geht die technische Seite in diesem Theater etwas unter. Dabei ist gerade das doch die Stärke von Chrome. Eine virtuelle Maschine (im Sinne einer Java-VM) für Javascript, die dazu keinen Bytecode, sondern gleich x86-Code generiert, hat massive Geschwindigkeitsvorteile und ist durch Einkapselung auch noch sicherer. Zumindest solange keine schwerwiegenden Fehler auftreten, die es erlauben ins eigentliche Betriebssystem einzudringen.

Letztendlich wird es aber zur Philosophiefrage werden, ob man nun einen normalen Interpreter oder eine kompilierende VM benutzt. Als reiner Interpreter wird Tracemonkey in Firefox 3.1 wohl gleich auf liegen. Allerdings sind Tracemonkey, Squirrelfisch und V8 noch neu, so ist sicher noch viel Luft nach oben.

Dass die Wahl der Render Engine dagegen auf Webkit fiel, ist schon etwas verwunderlich. Schließlich ist Google der Hauptgeldgeber der Mozilla Foundation und es bleibt die Frage: warum nicht Gecko? Als Grund wurden die guten Erfahrungen mit Webkit während der Entwicklung von Android und geringer Ressourcenhunger angeführt.

Soweit so richtig, aber ich glaube eher, dass Mozilla nicht dem Tempo folgen kann, welches Google vorschwebt und man sich daher gegen Gecko entschiedt. Neue Firefox- und Thunderbird-Versionen verzögern sich meist gewaltig. Bei den anderen Projekten wie z.B. Sunbird, sieht es auch nicht besser aus.

Chrome soll offensichtlich ein schneller Schlag gegen Microsoft bzw. den Internet Explorer werden. Aus meiner Sicht als beruflicher Web-Entwickler, kann ich das nur befürworten. Die Jungs aus den Redmond müssen endlich ganz aus ihrem Dornröschenschlaf aufwachen. Zwar hat sie Firefox geweckt, aber noch taumeln sie schlaftrunken durch die Gegend.

Nach fünf Jahren absolutem Stillstand (2001 – 2006) und auch dem IE 7, muss endlich mehr passieren. Version 8 ist ein richtiger Schritt, aber Microsoft hat sicher mehr Möglichkeiten, als mehr schlecht als recht mit Gecko, Presto und Webkit gleichziehen zu können. Wir mussten und müssen uns in der Branche immer noch mit den Hinterlassenschaften dieser technischen Stagnation rumschlagen. Das kann und darf so nicht mehr weitergehen.

Darum wünsche ich Google viel Erfolg, auch wenn ich vorerst bei Firefox bleiben werde. Es gibt einfach zu viele Extensions, die inzwischen unverzichtbar geworden sind – zumindest für uns Entwickler.

Umzug (Update)

So, der Umzug ist überstanden. Bei den meisten sollten die DNS-Einträge schon aktualisiert sein.

Dank der neuen Server, läuft nun alles mit MySQL 5. Daher kann ich nun endlich Views (für die zukünftige Multi-Weblog-Funktion) auch außerhalb meiner lokalen Entwicklungsumgebung nutzen, sowie auf MySQLi als objektorientierte Schnittstelle für die Datenbank-Anbindung zurückgreifen.

Letzteres ermöglicht auch ein neues Sicherheitsfeature, das ich momentan in einer alternativen Version zum Testen einsetze: mysqli::prepare(). Damit werden die Werte über einen Platzhalter in die SQL-Abfrage eingefügt und vorher auf Datentyp bzw. SQL-Injections geprüft.

Leider müssen dafür sämtliche Models komplett umgestellt werden, da die Werte nicht mehr direkt in die Abfrage geschrieben werden.

Stellenanzeige

Wir, eine galaxisweite Großmacht, suchen ab sofort Nachwuchs für unsere Führungsebene.

Ihr Profil:

Belastbarkeit ist kein Thema für Sie. Selbst wenn man Ihnen sprichwörtlich an die Kehle geht, erfüllen Sie Ihre Arbeit vorbildlich. Sie verfügen über hervorragendes Basic in Wort und Schrift, sind zielstrebig und schrecken nicht vor Mord an Ihrem Vorgesetzten zurück, um in der Hierarchie voranzukommen. Ihre Grausamkeit wird nur noch von Ihrer Rücksichtslosigkeit übertroffen und Sie verstehen es Untergebene sowie evtl. Gefangene zu quälen bzw. Informationen aus ihnen herauszuholen.
Außerdem verfügen Sie bereits über Basiskenntnisse der Macht und ihrer effektiven Nutzung. Kampferfahrung mit Lichtschwertern ist von Vorteil, aber keine zwingende Voraussetzung.

Unser Profil:

Wir sind eine galaxisweit herrschende Organisation. Unsere zwei Vorstandsvorsitzenden sorgen sich stets um Ihr und das Wohl der gesamten Galaxie. Dazu verfügen wir über zahlreiche Geheimdienste, einen umfangreichen Militärapparat sowie diverse – von uns kontrollierte – innovative Rüstungs- und Forschungsfirmen.
Der Hauptsitz unserer Aktivitäten ist auf dem zentral gelegenen Planeten Coruscant und unser Einflussgebiet erstreckt sich bis weit in das Outer Rim.
Wir sichern seit fast 20 Jahren Frieden und Wohlstand in der gesamten Galaxis, durch gnadenlose Unterdrückung und Terror.

Wenn Ihr Interesse geweckt haben, melden Sie sich einfach bei Ihrem regionalen Außenposten.

Darth Vader
stellv. Aufsichtsratsvorsitzender

Singleton mit PHP 5

Singleton ist ein sog. Design Pattern, zu Deutsch Entwurfsmuster. Einfach gesagt, sind es Standardlösungen für bestimmte Problemstellungen innerhalb der objektorientierten Programmierung, die immer wieder auftreten.

Eines der einfachsten Muster ist das Singleton. Es stellt sicher, dass von einer Klasse nur eine Instanz erzeugt werden kann und keine weitere. Bei bestimmten Objekten, z.B. für die Datenbank-Verbindung, kann das sehr hilfreich sein. Da ein Singleton über eine statische Methode aufgerufen wird, ist es außerdem möglich dieselbe Instanz einer Klasse ohne Probleme überall im Script aufrufen zu können – widerrum sehr nützlich bei Datenbanken.

So sieht in Singleton in PHP 5 aus:

<?php

class Demo {
    
    /**  
     * @access private   
     * @static
     * @var object   
     */
    
    private static $_instance = null;

    /**  
     * Singleton     
     * 
     * @access public    
     * @static   
     * @return object self::$Instance    
     */
    
    public final static function getInstance() {
        if(!self::$_instance instanceof Demo) {
            self::$_instance = new Demo();
        }
        
        return self::$_instance;
    }

    /**  
     * Constructor   
     *
     * @access private   
     */
    
    private function __construct() {
        // Code 
    }

    /**  
     * No Clone Wars     
     * 
     * @final    
     * @access private   
     */
    
    public final function __clone() {
        return null;
    }

}

?>

Zuerst wird das statische Attribut $instance als null definiert, gefolgt von der statischen Methode getInstance(). Die überprüft, ob in self::$instance bereits eine Instanz der Klasse hinterlegt ist. Falls nein, wird ein neues Objekt erstellt und die Referenz in self::$instance gespeichert. Anschließend gibt getInstance() die Instanz der Klasse zurück.

Wichtig ist, dass der Konstruktor der Klasse als private definiert ist. Somit ist sichergestellt, dass nur getInstance() ihn aufrufen kann und man keine weiteres Objekt der Klasse erzeugen darf. Ebenso muss die Methode __clone() als private deklariert werden, damit das Objekt nicht kopiert werden darf.

Mit folgendem Code erhält man nun die Instanz der Klasse:

$demo = Demo::getInstance();

Dieser Aufruf funktioniert überall, sobald die entsprechende Klasse eingebunden wurde.

Das Singleton Pattern ist aus diversen Gründen recht umstritten. Viele sind der Ansicht, dass man es gar nicht bräuchte. Das mag vielleicht in der normalen Anwendungsentwicklung zutreffen, aber für Web-Programmierung mit PHP, ist es insbesondere bei Datenbank-Verbindungen sinnvoll. Gerade Anfänger begehen oft in dieser Hinsicht, da die alte MySQL-Schnittstelle verwendet und auf die Verwaltung der einzelnen Verbindungen zum Datenbank-Server gepfiffen wird. Eine DB-Klasse mit Singleton stellt sicher, dass es nur eine Verbindung gibt und das entsprechende Objekt überall verfügbar ist.

Hinweis: aufgrund der mangelhaften Objekt-Unterstützung in PHP 4, ist ein Singleton dort – in der oben gezeigten. Form – nicht möglich.

Blut und Morde

Age of Conan ist erfrischend anders: dreckig, brutal, nackt. Man könnte fast behaupten, es ist das Battlestar Galactica der Online-Rollenspiele: Erwachsenenunterhaltung ohne Kompromisse. Dummerweise richtet sich auch der Schwierigkeitsgrad danach.

Meine MMORPG-Wurzeln liegen in Dark Age of Camelot und ich will nicht behaupten, dass das ein leichtes Spiel wäre. Aber ich habe das Gefühl, dass ich in den zwei Jahren mit meinem Level-50-Hüter nicht so oft im Dreck lag, als nach einer Woche in Hyboria.

Vielleicht bin ich durch World of Warcraft und die Ein-Mann-Gruppe namens Paladin zu sehr verwöhnt, trotzdem übertreibt es Funcom etwas: die Balance zwischen den einzelnen Klassen schwankt noch stark. Ich sehe die Nahkämpfer momentan klar im Nachteil. Magier, insbesondere der Nekromant, walzen problemlos Gegnergruppen platt, während mein Barbar bei der gleichen Anzahl Feinde den Heldentod sterben würde oder Fersengeld geben muss.

Dafür ist das aktive Kampfsystem deutlich abwechslungsreicher, als die immer gleiche Button-Klickerei der meisten anderen MMORPGs. Kombos bestehen zwar immer aus derselben Tastenreihenfolge, dennoch muss man sie geschickt einsetzen, damit sie nicht an der Deckung des Gegners verpuffen.

Leider sind die Hardware-Anforderungen recht hoch, dafür stimmt die Optik. Ohne die kürzliche Aufrüstung von der Geforce 8800 GTS 320 auf eine Radeon HD 4870, verkäme es aber wohl zum Dia-Vortag: »Hargh, der Barbar«. Trotzdem ruckelt es immer wieder. Gerade die Hauptstädte verkommen oft zum Daumenkino. Hoffentlich wird das noch weiter verbessert.

Im späteren Spielverlauf gibt es wohl noch viele Probleme, aber bis ich in diesem Level-Bereich bin, vergeht wohl viel Zeit. Immerhin habe ich in Dark Age of Camlot zwei Jahre für Level 50 gebraucht (war noch vor den Vereinfachungen) und in World of Warcraft, hat es in drei Jahren auch nur zu Level 54 gereicht.

Insgesamt gefällt mir Age of Conan momentan sehr gut. Es hebt sich deutlich von anderen Online-Rollenspielen ab und bietet gute Unterhaltung – trotz eines stellenweise überzogenen Schwierigkeitsgrads.

Report August

DVDs: SeaQuest Season 1

Buch: Michael Crichton – Jurassic Park

iTunes: Frank Klepacki – Command & Conquer Tiberian Dawn

Spiele: Age of Conan, Mass Effect

Es muss nicht immer Flash sein

Samus AranOne girl in all the world

Umgesetzt mit Dhonishow. Basierte früher auf Prototype, wurde nun auf jQuery umgestellt und macht so manche Flash-Animation neidisch. Gepackt hat das Script gerade mal 8 KB, dazu kommt ein Stylesheet und ein paar Grafiken. Insgesamt sind es knappe 20 KB.

Eine Galerie damit zu bauen, ist kinderleicht. Man muss nur das Stylesheet und die jQuery-Erweiterung einbinden – ggf. noch jQuery selbst, wenn es bisher nicht nutzt. Die Galerie-Bilder packt man nun in ein div-Element und weist diesem einfach ein paar Klassen dazu, die man sich einfach per Klick auf der Dhonishow-Website, je nach gewünschten Effekten, zusammenstellen kann.

Die Samus-Artworks stammen von Ivan Flores.