Webseite in diversen Versionen testen

Vor einigen Tagen wollte ich eine Webseite in einer älteren Version vom IE testen. Dies stellte sich allerdings schwieriger raus als gedacht. Auf meinem Rechner (dienstlich) läuft Windows Server 2003 mit dem Internet Explorer 8, testen musste ich die Seite aber im IE7. Nun hat man folgende Optionen zur Auswahl:

BrowserShots und ähnliches:
Diese Seiten haben den Vorteil, eine Vielzahl an Browsern in den unterschiedlichsten Versionen abzudecken. Sind nur leider vorrangig für visuelle Tests gedacht. Da es in meinem Test rein um JavaScriptfunktionalität ging, war es leider ungeeignet. Da man zudem nur eine URL angeben kann, schied diese Option auch aus, da die Testversion der Seite nur auf meinem lokalen Rechner lief.

Internet Explorer 7 Standalone installieren:
Es gibt im Netz einige Installer, die einen vollwerten Internet Explorer 7 auf dem Rechner versprechen. Meine Erfahrungen waren leider nicht so gut, mal abgesehen, dass „meine“ Version nur Fehlermeldungen verursacht hat, sie hat auch dafür gesorgt, dass ich meine Favoriten nicht mehr im 8er Client öffnen konnte. Erst eine Deinstallation des 7er Clients, die Deinstallation des 8er Clients sowie anschließende Neuinstallation des 8er Clients haben mein System wieder in den Ursprungszustand versetzt. Absolut nicht akzeptabel.

Virtuelle Maschinen:
Microsoft bietet bereits fertig konfigurierte virtuelle Maschinen, diverse Windows Version mit unterschiedlichen Versionen des Internet Explorers. Die Windows Versionen sind nur eine begrenzte Zeit lauffähig, daher ist keine Lizenz notwendig.

IETester
Ein kleines aber feines Programm. Es simuliert alle IE Versionen seit der Version 5.5. Sogar die aktuelle 10er Preview (sofern man es installiert hat).

Für mich hat sich das letzte Tool bewährt, zumindest für meine kleinen Funktionstests, ob ich separate Fallbacks für Javascript-Funktionen benötige.

(ich bezog mich nur auf den IE, da man sonst eigentlich alle Browser separat installieren kann, der IE ist dafür allerdings zu stark im System verankert, gerade bei Windows 2003)

WiiMC – Steuerung

Falls noch wer WiiMC nutzt, der sollte sich mal die Dokumentationsseite ansehen. Dort ist schön aufgelistet, welche Knöpfe auf der WiiMote welche Bedeutung haben, grade im Videomodus. Habe mir den wichtigen Teil ausgedruckt und liegt nun unterm Tisch, so kann ich im Film zum Beispiel zwischen den Sprachen hin- und herschalten.

Wii Homebrew: WiiMC

Ich nutze auf meiner Wii eine Homebrew namens WiiMC, das Programm macht aus einer Wii eine doch nette Multimedia-Station. So kann ich meine DVDs schauen, Filme übers Netzwerk oder USB-Stick. Aber auch Musik oder Bilder kann ich mir anschauen. Einzig mit HD-Material kommt die Wii nicht klar, dazu ist der CPU einfach zu langsam.

Also die App WiiMC ist eigentlich nur ein grafischer Aufsatz für den MPlayer. MPlayer ist zwar sehr mächtig, doch absolut nicht bedienbar. Einstellungen müssen umständlich am PC gemacht werden usw. Bei WiiMC kann man alle Einstellungen direkt an der Wii über eine virtuelle Tastatur machen. Nun habe ich dort eine SMB-Freigabe eingerichtet. Diese hat allerdings den Nachteil, dass man dort nur eine IP und keinen DNS-Namen angeben kann. Leider kam es schon ein paar mal vor, dass die IP geändert werden musste. Also erstmal am PC schauen, wie lautet die IP und dann nachpflegen. Das ging mir auf den Keks, mithilfe eines Computers geht auch ein qualifizierter DNS-Name.

Dazu greift per PC auf die SD-Karte zu und schaut mal in den Ordner /apps/WiiMC/. Dort befindet sich eine settings.xml. In der Sektion „Network“ könnt ihr nun die IP finden:

<section name="Network" description="Network Settings">
	<smbshare name="0">
		<variable name="ip" value="192.168.0.10" description="SMB Share IP" />
		<variable name="share" value="MyShareName" description="SMB Share Name" />
		<variable name="user" value="username" description="SMB Share Username" />
		<variable name="pwd" value="password" description="SMB Share Password" />
		<variable name="displayname" value="displayName" description="SMB Display Name" />
	</smbshare>
</section>

Nun einfach unter „ip“ den DNS-Namen eintragen, speichern, fertig. Klappt ohne Probleme, jedoch konnt ihr den Namen nicht auf der Wii anpassen. Ich vermute mal, der DNS-Name funktioniert auch bei FTP-Verbindungen, getestet habe ich es aber nicht.

Random() = 2

Aktuell geht ja Sony gegen Hacker vor, wie lange schon kein Unternehmen mehr. Auch verlangen sie Daten von Twitter, Youtube und co. Bei so einem Verhalten freu ich mich ja ein wenig über das Importverbot der PS3. Ich verfolge gespannt das Geschehen rund um den PS3-Jailbreak (obwohl ich gar keine PS3 habe), da ich HomeBrews befürworte. So interessiert mich natürlich auch, wie die Hacker das Sicherheitssystem der PS3 geknackt haben. So kann man bei Golem nachlesen:

[..] dass Sony bei der Verschlüsselung auf einen Zufallsparameter verzichtet hat und stattdessen immer die gleiche Zahl verwendet.

(ich bin der Meinung, dass ich mal irgendwo gelesen habe, dass eine Zufallsfunktion im System immer den selben Wert zurückgab, das würde meine Geschichte ungemein lustiger machen aber auf die schnelle fand ich den Artikel nicht mehr im Netz).
Das ist also ziemlich doof und selbst Schuld.
Nun gibt es von Sony noch viele anderen elektronischen Schnickschnack. Unter anderem den Sony WalkMan, ein MP3-Player mit Radio und was halt so alles dazugehört. Dort habe ich mir halt ein paar Lieder drauf gespielt, alle in einen Ordner geklatscht und jeden Tag von vorne angehört. Irgendwann fing es an langweilig zu werden, man hörte sich die ersten Lieder immer wieder an, bis ans Ende hab ich meistens nicht geschafft. Also habe ich den Zufallsmodus für den Ordner eingestellt. Tja zufällig ist doch sehr relativ. Während eigentlich alle Lieder zufällig durcheinander gewürfelt sind, weiß ich ganz genau, welches Lied als zweites gespielt wird. Nämlich genau jenes, welches im normalen Abspielmodus an erster Stelle steht. Schon mit div. Liedern ausprobiert, es bewahrheitet sich jedes Mal. Ein Kollege musste mir schon einen Kaffee ausgeben, da er mir dies nicht geglaubt hat.
Also, man kann random() auch definieren 🙂

Mein persönlicher Coding Style Horror

Seit ich bei meinem neuem Arbeitgeber tätig bin, refactore ich viel Code von meinem Vorgänger. Er hat leider nur sehr funktionell gedacht, selbe Funktionen mehrfach implementiert anstatt ordentliche Überladungen oder ähnliches zu nutzen und sich leider auch nicht an vorgegebene Coding Styles gehalten. Mittlerweile habe ich hier schon sehr viel Zeit investiert, finde jedoch immer wieder Stellen, bei denen ich einfach nur die Hände über den Kopf zusammenschlagen kann. Einige Dinge passieren mir auch gerne mal, was ich dann aber doch viel schlimmer finde, ist die Tatsache, dass es andere Kollegen kopieren, den Variablennamen ändern und sich den Mist nicht einmal anschauen. Und sich so natürlich Fehler einschleichen können, welche sich durch die ganze Anwendung ziehen. Und das bereits seit einigen produktiven Versionen. Hier mal ein paar fiktive Beispiele:

if(!string.IsNullOrEmpty(groupName) && (groupName != "Wert1" || groupName != "Wert2")) { .. }

So eine Code-Stelle war bereits seit 2 1/2 Jahren implementiert. Die if-Bedingung ist immer wahr, sobald groupName gesetzt ist. Die hinteren beiden Bedingungen waren total sinnfrei. Glück im Unglück, in der if-Bedingung wurde zufällig noch mal gefiltert, so dass es hinhaute.
Oder das hier:

public bool MyProperty {
    get { 
         bool myProperty = MethodeSowieso(..);
         return myProperty;
    }
}

Warum erst in eine Variable packen?

if(irgendeineTrueFalseBedingung) {
      return true;
}
else {
       return false;
}

Brauch ich ja nicht weiter zu erläutern oder?
Einen kleinen Trieb bekomme ich persönlich beim Klammern. Nehmen wir noch mal das Beispiel von ganz oben, diesmal korrekt aber ohne Klammern:

if(!string.IsNullOrEmpty(groupName) && groupName == "Wert1" || groupName == "Wert2") { .. }

Ich muss erstmal genau Nachdenken, um zu sagen, bei welchen Werten die Bedingung erfüllt ist. Mit zwei Klammern wird dieses Problem sofort gelöst und man kann es als Entwickler nicht mal falsch interpretieren. Ein anderer Kollege klammert auch gern zu viel:

return (variable);

Es stört meiner Meinung nach nur beim Lesen und Sinn erkenne ich hier absolut nicht.

Ich erwarte ja keinen perfekten Code, sicherlich habe ich auch einige Coding Styles an mir, welche andere zum Würgen bringen. Aber ist es zu viel verlangt, zwei mal darüber nachzudenken, was man grade programmiert hat? Und das es auch andere verstehen müssen?

JM2C