Too Cool for Internet Explorer

Multiple IE und Windows Vista


Zum Testen von Webanwendungen auch mit älteren IE Browserversionen gibt es ein Tool, über das sich problemlos ältere IE Versionen auf ein und demselben Rechner installieren lassen - Multiple IE (Achtung: unbedingt die EULA von Microsoft beachten!).

Leider funktioniert der Installer nicht unter Windows Vista, da die älteren IE Versionen unter Vista nicht lauffähig sind. Es gibt jedoch Abhilfe:

  • Microsoft stellt seit geraumer Zeit den Virtual PC, eine Anwendung zum Installieren von Betriebssystemen in einer virtuellen Maschine, kostenlos zum Download zur Verfügung.
  • Microsoft bietet ausserdem eine zeitlich beschränkte Version von Windows XP in Form eines Virtual PC Festplatten-Images kostenlos zum Download an.

Nach der Installation von Virtual PC und Aktivierung des Windows XP Festplatten-Images - man sollte hier das Image mit der Version 6 des IE herunterladen - lässt sich anschliessend wie gewohnt Multiple IE innerhalb der Windows XP Umgebung installieren.



Sowas kann einem wahrscheinlich auch nur unter Windows passieren!


Ein Freund ruft mich gerade an und sagt:

"Ich habe gerade ein altes Spiel gespielt und jetzt ist plötzlich mein Bildschirm um 90° gedreht."

Da dieses Problem sicher wieder mal auftreten wird, merke ich mir die Lösung hiermit:

Windows -> Startmenü -> Ausführen -> "igfxcfg"

da kann man den Bildschirm wieder "zurückdrehen". Und ich bin mal wieder glücklich, dass ich einen Mac habe :-).



(PHP) Entwicklungsumgebung unter Windows


Mein eigenes PHP Framework, das ich für all meine (privaten) Web Anwendungen verwende, benötigt für einige lokale Tools sowie für Build und Deploy Prozesse unter Unix übliche Tools, wie die Bash, GNU Make, awk, sed und wie sie denn alle heissen. Ausserdem mache ich Gebrauch von einigen Eigenheiten des Dateisystems, wie symbolische Links, wie sie so nicht im Windows Dateisystem implementiert sind, bzw. nur umständlich erreicht werden können. Ausserdem setzt mein Framework LightTPD als Web Server voraus, da ich einige spezielle Module dieses hervorragenden Web Servers gerne verwende.

Nun haben aber nicht alle, die dieses Framework verwenden müssen Linux, Mac OS X oder ein anderes Betriebssystem, bei dem von Haus aus all diese schönen Dinge vorhanden sind. Nein, es gibt in der Tat noch Leute, die ein Windows bevorzugen und für die muss eine vernünftige Lösung her.

Nach einigem Überlegen bin ich auf die Idee gekommen, mein Setup unter Cygwin auszuprobieren. Cygwin ist eine Emulation der Linux API für Windows, die es - kurz gesagt - ermöglicht z.b. Linux Anwendungen auf Windows zu portieren. Mehr dazu bei Wikipedia. Cygwin bringt auch eine portierte Bash mit.

Nach Herunterladen der Distribution von der Cygwin Web Seite und der Installation von Cygwin inkl. der Entwicklungstools, war also das Fundament vorhanden. Wer mit einer Debian basierte Linux Distribution vertraut ist, wird das praktische 'apt-get' Tool kennen, mit dem man nachträglich Software installieren kann. Auch für Cygwin gibt es ein derartiges Tool - cyg-apt. Ich kann nur empfehlen, dieses Tool einzusetzen, erleichtert es doch die nachträgliche Installation von z.b. von PHP benötigten Libraries erheblich. cyg-apt ist in Python geschrieben, weshalb bei der Installation von Cygwin auch die Installation von Python berücksichtigt werden sollte.

Als nächstes habe ich mir die Quellen des aktuellen PHP (5.2) besorgt. Wenn man MySQL Support wünscht, wird ausserdem noch der Quellcode von MySQL benötigt.

Zunächst muss man also MySQL kompilieren - da wir unter Cygwin nur die Client Bibliotheken benötigen, werden auch nur diese compiliert:

./configure --prefix=/usr --without-server
make
make install

Als nächstes kann man dann PHP mit fastCGI Unterstützung compilieren. Man beachte hierbei, dass 'fastCGI' unter Windows zu Problemen führen kann. Falls es später tatsächlich zu Problemen kommt, kann man dann aber PHP immernoch als CGI Anwendung unter LightTPD verwenden. Eine PHP Configuration könnte z.b. folgendermassen aussehen:

'./configure' '--prefix=/usr' '--with-config-file-path=/etc' '--with-config-file-scan-dir=/etc/php.d' '--enable-force-cgi-redirect' '--disable-debug' '--enable-pic' '--disable-rpath' '--enable-inline-optimization' '--with-bz2' '--with-curl' '--with-freetype-dir=/usr' '--with-png-dir=/usr' '--with-gd' '--enable-gd-native-ttf' '--without-gdbm' '--with-gettext' '--with-ncurses' '--with-gmp' '--with-iconv' '--with-jpeg-dir=/usr' '--with-openssl' '--with-png' '--with-regex=system' '--with-xml' '--with-expat-dir=/usr' '--with-dom=shared,/usr' '--with-dom-xslt=/usr' '--with-dom-exslt=/usr' '--with-xmlrpc=shared' '--with-zlib' '--with-layout=GNU' '--enable-bcmath' '--enable-exif' '--enable-ftp' '--enable-sockets' '--enable-track-vars' '--enable-trans-sid' '--enable-wddx' '--with-pear=/opt/pear' '--with-mysql' '--with-mysqli=/usr/bin/mysql_config' '--enable-memory-limit' '--enable-bcmath' '--enable-calendar' '--enable-dio' '--enable-mcal' '--enable-mbstring=shared' '--enable-dbx' '--enable-mbstr-enc-trans' '--enable-mbregex' '--enable-fastcgi' '--enable-force-cgi-redirect'

Alle Bibliotheken, die PHP zusätzlich noch benötigt, kann man i.d.R. per 'cyg-apt' nachinstallieren.

Nachdem auch PHP compiliert und installiert wurde kann man sich nun die Quellen von LightTPD besorgen. Ein einfaches './configure --prefix=/usr' und 'make; make install' reicht hier in der Regel aus, um LightTPD mit den wichtigsten Modulen zu Compilieren und zu Installieren. Die Konfiguration für LightTPD findet man anschliessend unter '/etc/lighttpd/lighttpd.conf' und könnte wie folgt aussehen:

# default document-root
server.document-root = "/data/www/htdocs"

accesslog.filename = "/var/log/lighttpd/access.www.log"

server.port = 81

$SERVER["socket"] == "127.0.0.1:80" {
server.username = "nobody"
server.groupname = "nogroup"
server.errorlog = "/var/log/lighttpd/error.www.log"

fastcgi.server = ( ".php" =>
(( "host" => "127.0.0.1",
"port" => 1026,
#"socket" => "/tmp/php-fastcgi.socket",
"bin-path" => "/usr/bin/php",
"bin-environment" => (
"PHP_FCGI_CHILDREN" => "4",
"PHP_FCGI_MAX_REQUESTS" => "100"
),
"bin-copy-environment" => (
"PATH", "SHELL", "USER"
),
"broken-scriptfilename" => "enable"
))
)
# configure server
$HTTP["host"] == "localhost" {
simple-vhost.server-root = "/data/www/"
simple-vhost.default-host = "localhost"
simple-vhost.document-root = "/htdocs/host/"
}

server.document-root = "/data/www/htdocs/host/"
}

# index filenames index-file.names = ( "index.php", "index.html", "index.htm", "default.htm" )

# selecting modules
server.modules = ( "mod_rewrite", "mod_auth", "mod_access", "mod_accesslog", "mod_fastcgi", "mod_redirect", "mod_simple_vhost" )

# disable directory listings
server.dir-listing = "disable"

# mime types
mimetype.assign = (
".pdf" => "application/cation/pdf",
".ps" => "application/postscript",
".gz" => "application/x-gzip",
".pac" => "application/x-ns-proxy-autoconfig",
".swf" => "application/x-shockwave-flash",
".tar.gz" => "application/x-tgz",
".tgz" => "application/x-tgz",
".tar" => "application/x-tar",
".zip" => "application/zip",
".mp3" => "audio/mpeg",
".m3u" => "audio/x-mpegurl",
".wma" => "audio/x-ms-wma",
".ogg" => "application/ogg",
".wav" => "audio/x-wav",
".gif" => "image/gif",
".jpg" => "image/jpeg",
".jpeg" => "image/jpeg",
".png" => "image/png",
".xbm" => "image/x-xbitmap",
".xpm" => "image/x-xpixmap",
".xwd" => "image/x-xwindowdump",
".css" => "text/css",
".html" => "text/html",
".htm" => "text/html",
".js" => "text/javascript",
".dtd" => "text/xml",
".xml" => "text/xml",
".mpeg" => "video/mpeg",
".mpg" => "video/mpeg",
".mov" => "video/quicktime",
".qt" => "video/quicktime",
".avi" => "video/x-msvideo",
".asf" => "video/x-ms-asf",
".asx" => "video/x-ms-asf",
".bz2" => "application/x-bzip",
".tbz" => "application/x-bzip-compressed-tar",
".tar.bz2" => "application/x-bzip-compressed-tar"
)

Da unter Windows fastCGI nicht über Sockets funktioniert, muss es über TCP durch Angabe der Parameter Host und Port konfiguriert werden. Testweise kann man nun LightTPD folgendermassen starten:

/usr/sbin/lighttpd -f /etc/lighttpd/lighttpd.conf

Abschliessend soll man LightTPD noch als Windows NT Service installieren können. Hierfür benötigt man das Dienstprogramm 'cygrunsrv', das man ggf. per 'cyg-apt' nachinstallieren muss. Der Befehl zum einrichten von LightTPD als Service sollte nach meinen Recherchen dann wie folgt aussehen:

cygrunsrv --install lighty --path /usr/sbin/lighttpd --args "-D -f /etc/lighttpd/lighttpd.conf" --disp "cygwin - lightTPD"

Leider hat die Installation als Service bei mir noch nicht geklappt.

Nachdem nun also PHP und LightTPD installiert sind, fehlt nur noch die Datenbank - MySQL. Da für PHP schon mit den Client Bibliotheken compiliert wurde, reicht es aus, wenn über die MySQL Web Seite der MySQL Installer für Windows heruntergeladen wird. Darüber kann man dann MySQL komfortabel über den Setup Wizard installieren und mit dem Testen und Entwickeln loslegen.

Das hier vorgestellte Setup funktioniert übrigens nicht nur wunderbar für PHP, sondern z.b. auch für Ruby (on Rails), Python oder Perl.



Symbolische Links unter Windows


Ein 'nettes' Feature von Unix Dateisystemen sind symbolische Links. Über symbolische Links können Verweise auf andere Pfade im Dateisystem realisiert werden. Unter Windows gibt es sog. 'Verknüpfungen', die allerdings nicht viel mit symbolischen Links unter Unix gemein haben. So ist die Verknüpfung kein wirkliches Alias für den Zielpfad und es können z.b. keine Unterverzeichnisse des Pfades, auf den die Verknüpfung verweist, direkt über die Verknüpfung angesprochen werden.

Auf der Seite shell-shocked.org habe ich kürzlich einen Artikel zum Thema 'Windows Symbolic Links and Hard Links' gefunden. der ein scheinbar un- bzw. wenig dokumentiertes Feature des Dateisystems NTFS 5 (seit Windows 2000) beschreibt, mit dem auch symbolische Links unter Windows möglich werden. Der Artikel ist eine interessante Lektüre und nennt auch Tools, mit denen symbolische Links unter Windows angelegt und verwaltet werden können.



Unix Tools für Windows


Seit einigen Tagen habe ich einen neuen Arbeitgeber. Auf meiner Workstation dort läuft leider kein Linux sondern Windows XP. Deshalb werde ich zukünftig wohl auch verstärkt die Windows Welt beim Suchen von nützlichen Tools berücksichtigen.

Welche Tools benötigt ein Linux-verwöhnter Anwender unter Windows?

Über TweakUI von Microsoft kann man sich ein Tool installieren, dass das Verhalten 'focus follows mouse', wie man es unter X gewohnt ist, emuliert. Dies funktioniert jedoch nicht 100%, denn ein Klick in das Fenster genügt, um es in den Vordergrund zu holen - eben das möchte man aber in vielen Fällen vermeiden. Ich habe ein wenig gesucht und habe eine bessere Lösung gefunden:

'True X-Mouse Gizmo' - oder kurz: TXMouse. Nach der Installation fühlt es sich schon annähernd an, wie unter Linux. 'Focus follows mouse', jedoch wird das Fenster nicht mehr beim Klick in den Vordergrund geholt, es sei denn, man klickt auf die Titelleiste des Fenster. So kann man also endlich in das Eingabefeld eines Fenster im Hintergrund klicken und Eingaben machen, ohne dass das jeweilige Fenster in den Vordergrund kommt.

Aber das ist noch nicht alles: Das Markieren eines Textes über die Mouse kopiert diesen endlich wieder automatisch in die Zwischenablage - wie man es unter einer vernünftigen Arbeitsumgebung eben gewohnt ist. So weit ich es verstanden habe, sollte eigentlich auch 'Paste' über die mittlere Mouse-Taste funktionieren - bei mir jedoch - warum auch immer - nicht!? Das muss ich mir in den nächsten Tagen, sofern es die Zeit erlaubt, nochmal näher ansehen.

Als nächstes habe ich mir dann noch die GNU Utilities für Win32 (unxutils) installiert. Dabei handelt es sich allerlei Unix Tools, die - im Gegsatz zu Cygwin - 'nativ' nach Windows portiert wurden. Bei Cygwin wird ja eine Art Emulations-Layer geschaffen, der allerlei Abhängigkeiten mit sich bringt. Die unxutils benötigen lediglich eine Microsoft C-runtime Bibliothek, die ohnehin unter jedem Windows vorhanden sein sollte.

Nach dem Entpacken der Tools sollte man in der Systemsteuerung noch die PATH Umgebungsvariable ändern, damit die Tools auch von überall im Dateisystem gefunden werden können. Nun stehen wieder die gewohnten Befehle wie ls, grep und find zur Verfügung und zahlreiche Tools mehr - vollständige Liste finden man auf der Projekt-Webseite. Ausserdem wird noch eine Shell mitgeliefert, die jedoch bei weitem nicht an die bash von Cygwin heranreicht - dennoch: besser als der Command-Prompt von Windows ist sie alle mal.