Too Cool for Internet Explorer

Hitzeprobleme beim iMac


Die iMacs leiden offenbar unter Hitzeproblemen. Bei mir machte sich das seit ein paar Wochen bemerkbar, als mein weisser 24" iMac (von 2006) anfing nach längerem Arbeiten Grafikfehler zu produzieren. Angefangen hat es mit horizontalen Linien über den Bildschirm, zum schluss waren es Verzerrungen, merkwürdige Ränder an den Programmfenstern, verschwundene Dock-Icons und Pixel-Müll auf dem Bildschirm. Im Apfeltalk Forum gab man mir den Rat den Apple Hardware Test, der sich auf der ersten Installations DVD des iMacs befindet, zu benutzen, um Hardwarefehler auszuschliessen, da ähnliche Symptome offenbar auch bei Leuten auftraten, deren iMac-Grafikkarten defekte VRams aufwiesen.

Der Apple Hardware Test verlief glücklicherweise fehlerfrei. Ich hatte auch schon eine Vermutung, dass es möglicherweise ein Hitzeproblem sein könnte: der iMac ist superleise, einen Lüfter hört man praktisch nicht, da die Drehzahl von Haus aus sehr gering eingestellt ist. Ich habe mir also das Programm Temperaturmonitor besorgt und sah hier meinen Verdacht als durchaus begründet, da der Netzteilsensor über 80° gemessen hat und die Grafikkartensensoren zwischen 50° und über 60° anzeigten.

Beim Googeln entdeckte ich einen Artikel in einem Blog, der meinen Verdacht dann bestätigte: die Temperaturen sind viel zu hoch. In diesem Artikel wird das Programm smcFanControl erwähnt, das ich mir sogleich installiert habe. Über diese Software lassen sich die Drehzahlen dreier Lüfter im iMac einstellen. Ich habe mir im smcFanControl nun ein Profil angelegt, mit dem ich die Lüfter auf maximale Drehzahl laufen lassen kann. Damit konnte ich die Temperaturen laut Sensoren um 20° bis 30° absenken und siehe da -- keine Grafikfehler mehr.

Ich bin erleichtert, dass es offenbar "nur" ein Hitzeproblem ist und kein Hardware-Defekt. Mit verschiedenen Profilen im smcFanControl kann man sich optimale Lüfterdrehzahlen zusammenstellen. Ich habe festgestellt, dass die Grafikfehler bei mir bei den Werten "Grafikprozessor Kühlblech 1 > 40° und Grafikprozessor Temperaturdiode > 55°" (etwa) auftauchten. Deshalb habe ich nun ein Profil, welches die Werte konstant darunter hält. Das funktioniert eigentlich ganz gut. Ich bin noch nicht sicher, ob das ein Dauerzustand sein kann -- die Lüfterdrehzahlen sind zwar immernoch so niedrig, dass die Geräuschentwicklung nicht wirklich störend ist, evtl. aber ist der iMac innen verstaubt und man müsste ihn mal zum Reinigen öffnen. Aber für den Moment bin ich zufrieden -- so wie es ist.



"Ports of Call" auf dem iPhone


Wem der Spieleklassiker "Ports of Call" (POC) nichts sagt, ist entweder zu jung und / oder hat die Zeit der Homecomputer nicht erlebt, hatte keinen Amiga oder kannte niemanden der einen Amiga sein Eigen nannte. "Ports of Call" ist ein Handelsspiel, in dem es darum geht eine Reederei aufzubauen und Handel über Seewege zu treiben. Das Spiel war seiner Zeit aber irgendwie voraus, denn es war nicht nur ein Handelsspiel, sondern beinhaltete auch einen Simulator. So konnte man sein Geschick versuchen und die Hafen ein- und ausfahrten selbst steuern. Oder man fuhr eine Route mit Eisbergen und musste diese umschiffen.

Seit geraumer Zeit schon wird das Spiel weiterentwickelt. Inzwischen gibt es Portierungen für aktuelle Windows Versionen und sogar einen richtigen 3D Simulator.

Gestern erschien nun die iPhone / iPod Touch Portierung von POC und ich dürfte einer der ersten gewesen sein, die das Spiel im App Store erworben haben. Bei der Portierung handelt es sich um die alte Classic Version und mit entsprechendem Charme kommt sie auch daher. Bedienen lässt sich das Spiel natürlich über den Touch Screen. Der Bildschirm wird leider nicht voll ausgenutzt, da dort wo es nötig ist, zusätzlich Kontrollflächen eingeblendet werden. So wurden z.b. Schaltflächen zum Manövrieren des Schiffes an den Seitenrand gepackt. Aufgrund der Tatsache, dass die Kontrollflächen des Spiels ansonsten nicht angepasst wurden, sind diese gemessen an der Bildschirmauflösung teilweise recht klein. Deshalb weiss ich auch nicht ob es an meinen grossen Fingern liegt oder ob es tatsächlich so ist, dass die Schaltflächen nicht immer beim ersten "Klick" bzw. Anfassen reagieren.

 

 

Alles in allem macht es selbst nach 20 Jahren, die das Spiel inzwischen auf dem Markt ist, noch spass damit zu spielen. Auch auf dem iPhone macht es Spass ein Schiff aus dem Hafen zu navigieren oder den Riffen in schwierigem Gewässer auszuweichen. Das Spiel ist mit seinen 3,99 € sicher nicht eines der günstigen im App-Store, dafür bekommt man aber einen echten Klassiker, der nichts von seinem Charme verloren hat und der für viele Stunden Spielspass sorgen kann.



ssh von unterwegs


Es kam schon oft vor, dass ich unterwegs gerne einen Blick auf einen Server geworfen hätte. Wie habe ich mich deshalb gefreut, als vor ca. einem Jahr die erste SSH Software für das iPhone angekündigt wurde -- pTerm. Leider erwies sich diese Bezahlsoftware als nicht wirklich ergiebig. Die ersten Versuche zu Hause im WLAN waren zwar erfolgreich, unterwegs über edge wollte das ganze jedoch leider nicht funktionieren. Bis heute weiss ich nicht warum -- die pTerm Diskussionsgruppe war in dieser Hinsicht auch nicht wirklich hilfreich. In der Zwischenzeit wartet man auf ein Update der Software, das nicht kommt.

Nun habe ich kürzlich ein wenig im App-Store gestöbert und bin bei dieser Gelegenheit auf das Tool TouchTerm gestossen, welches -- im Gegensatz zu pTerm -- auch in einer kostenlosen Variante erhältlich ist.

Auf den ersten Blick bietet TouchTerm in der kostenlosen Variante ähnliche Features wie pTerm, mit dem einen Unterschied: es funktioniert auch von Unterwegs über edge problemlos. Die kostenpflichtige Pro Variante -- derzeit mit einem Preis von € 11,99 nicht gerade eine der günstigen Anwendungen im App-Store -- bietet zusätlich Gestures (wobei ich da bei einer Shell Angst hätte versehentlich rm -rf zu erwischen ;-) ), Copy/Paste innerhalb der Anwendung, grafische Verzeichnisnavigation sowie umfangreichere Einstellungsmöglichkeiten.



multiple ssh


Heute wollte ich mal den "slave status" unserer 5 Datenbank Server bei Pixelio ansehen. Natürlich ist es schrecklich umständlich sich auf allen Servern einzeln anzumelden um immer und immer wieder den gleichen Befehl auszuführen. Hierfür gibt es Tools, die ein Kommando auf mehreren Servern ausführen können (sollen). Ausprobiert habe ich pssh und dsh. Jedoch, mit beiden bin ich nicht klar gekommen. Da ich wie gesagt nur eben schnell mal einen Befehl auf den Slaves ausführen wollte, habe ich auch keine Lust gehabt, mich intensiv mit den Tools zu beschäftigen:

pssh ist python basiert, schon der erste Minuspunkt -- aber gut, da OSX eh python mitbringt, hab ich's halt installiert und konfiguriert. Allerdings wollte pssh keine Ausgabe zurück liefern und nach dem Ausführen hatte ich plötzlich jede menge SSH prozesse laufen, die ich manuell killen musste.

dsh hat imo eine mehr als rudimentäre Dokumentation. Nach Ausgiebigem googeln wusste ich dann auch, dass man offenbar eine Liste der Server benötigt, mit denen man sich Verbinden will und ausserdem noch Servergruppen anlegen kann. Klingt gut. Allerdings kann dsh offenbar meine "~/.ssh/config" nicht lesen und kennt daher auch meine hosts nicht. Da ich auf die Schnelle nicht in Erfahrung bringen konnte, wie ich in der Serverliste den Port spezifiziere (mit ":" ging es jedenfalls nicht), habe ich das also auch sein lassen.

In der Zwischenzeit hätte ich sicherlich auch 5x manuell den slave status ausführen können -- aber gut, man ist ja faul. Nachdem ich also pssh und dsh von meiner festplatte verbannt hatte, habe ich mir dann in ca. 1 Minute selbst ein kleines Shell-Script zusammengezimmert, das zwar bei weitem nicht die Features von pssh und dsh bietet, aber dafür für meine Zwecke problemlos funktioniert:

#!/usr/bin/env sh
SERVERS=`cat ~/.dsh/$1`

for i in $SERVERS
do
        echo $i
        ssh $i $2
done

Das Script habe ich unter "/usr/local/bin/dsh" abgelegt und ist damit in meinem Pfad erreichbar. In der Datei "~/.dsh/dbslaves" habe ich mir eine Liste meiner Slaves angelegt:

slave-1
slave-2
slave-3
slave-4
slave-5

Diese Hosts habe ich ohnehin schon in meiner "~/.ssh/config" drin. Ausserdem sind auf den Servern meine Keys für passwortloses Login installiert. Nun kann ich über:

dsh dbslaves "mysql -uroot -p... -e 'SHOW SLAVE STATUS\G'"

bequem meinen Slave Status abfragen oder andere Kommandos ausführen.



ScreenSharing
















Linux auf einer Neoware Neostation 3000


Ich habe nun endlich meinen alten, äusserst lauten und stromfressenden FujitsuSiemens PC ersetzt, der mir in meinem Heimnetz als Print- und DNS Server diente. Ich war schon lange auf der Suche nach einem hübschen kleinen und kostengünstigen Rechner und bin vor kurzem bei ebay mit einem ThinClient der Firma Neoware fündig geworden. Für knapp 18,- inkl. Versandkosten habe ich bei ebay das schon etwas ältere Modell Neostation 3000 ersteigert - zu sehen auf dem Photo unten rechts ohne Gehäuse.

Die Neostation hat einen äusserst leisen Netzteillüfter und ansonsten keine weiteren mechanischen Bauteile. Da ein Prozessor für Embedded Systeme auf dem Mainboard steckt, benötigt dieser zur Kühlung lediglich einen Kühlkörper. Meine Neostation kam mit einem 32MB SO Dimm Laptop Speicher und einer 8MB DOC (Disc-on-Chip), auf der Windows CE 1.0 installiert ist. Die Neostation kann über einen Speichersteckplatz auf maximal 256MB Ram erweitert werden, bietet eine Schnittstelle zum Anschluss von IDE Geräten, sowie einen Slot zum Einstecken einer ISA oder PCI Karte - mehr als ausreichend für meine Zwecke. An Anschlüssen bietet die Neostation Audio Ein- und Ausgänge, VGA, eine parallele sowie zwei serielle Schnittstellen und einen 10/100 Netzwerkanschluss, 2 PS/2 Anschlüsse für Maus und Tastatur sowie zwei USB Anschlüsse. Das Netzteil wird über einen handelsüblichen Kaltgerätestecker mit Strom versorgt. Schön ist, dass auf dem Board Standardbauteile verwendet wurden, die von Linux gut unterstützt werden. So verwendet das Netzwerkinterface z.b. einen Chip von Realtec.

Mein Plan war es die vorhandene Windows CE Installation durch eine auf einer CF Speicherkarte installierten Linux Distribution zu ersetzen. Die Speicherkarte lässt sich über einen Adapter an die IDE Schnittstelle des Rechners anschliessen und von dieser kann dann das Linux gebootet werden. Die Suche nach einer passenden Distribution gestaltete sich indes nicht einfach: da ich mit den Jahren die Lust am Frickeln verloren habe, möchte ich ein System, das schnell und ohne lange Bastelei aufgesetzt ist. Meine Versuche ein eigenes Image für die CF Karte zu erstellen scheiterten deshalb auch ziemlich schnell - fdisk, mkfs, dd und debootstrap sind Deine Freunde? Wenn's denn so einfach wäre! Beim Booten oder spätestens beim Laden des Kernels in der Neostation blieb das Linux hängen. Verschiedenste Seiten im Internet, die ich bei meinen Recherchen gefunden habe, erwecken den Eindruck, dass das Erstellen eines ext2 Images auf der Speicherkarte hochproblematisch ist und es auch nicht gesagt ist, dass es mit den Speicherkarten eines jeden Herstellers funktioniert.

Ich bin schon etwas überrascht - wenn nicht gar enttäuscht, dass dieses Thema von den einschlägigen Distributionen eher stiefmütterlich behandelt wird. Selbst für die Distributionen, die sich Aufgrund ihrer geringen Grösse für ein derartiges System eignen würden (z.B. DSL), findet man erstaunlich wenig Informationen - und noch weniger "offizielles", geschweigedenn ein CF Image oder ein Tool, mit dem man ein solches erzeugen kann. Bis auf ASTlinux, welches ein Image für die Geräte von Soekris bereitstellt, brachte ich keine Linux Distribution von Haus aus zum Laufen. Allerdings eignet sich ASTlinux Aufgrund der starken Ausrichtung auf Asterisk basierte Telefonielösungen nicht wirklich für meine Zwecke.

Nachdem die Neostation dann also ein paar Tage aus Zeitmangel nicht mehr angerührt wurde, stolperte ich vor ein paar Tagen bei del.icio.us zufälligerweise über eine erfrischend andere Linux Distribution: PuppyLinux. "Puppy's Goals" sind laut Webseite:

  • Easily install to USB, Zip or hard drive media.
  • Booting from CD (or DVD), the CD drive is then free for other purposes.
  • Booting from CD (or DVD), save everything back to the CD.
  • Booting from USB Flash drive, minimise writes to extend the life indefinitely.
  • Extremely friendly for Linux newbies.
  • Boot up and run extraordinarily fast.
  • Have all the applications needed for daily use.
  • Will just work, no hassles.
  • Will breathe new life into old PCs
  • Load and run totally in RAM for diskless thin stations

... und diese Ziele werden erstaunlich gut erreicht. Ich habe mir das ISO Image von PuppyLinux 3.01 heruntergeladen und auf meinem Mac über Parallels gebootet. Da ich im Moment keinen CF Kartenleser für USB habe, habe ich meine Digitalkamera als CF Leser benutzt und an den Rechner gehängt, sodass die CF Karte in PuppyLinux/Parallels als USB Wechselmedium erkannt wird.

PuppyLinux bietet nun etwas, was ich so bei keiner anderen Distribution gesehen habe: eine Anwendung über die man auf Knopfdruck eine PuppyLinux Installation auf einem (USB) Flashdrive anlegen kann. Dabei bietet dieses Tool sogar die Option das System auf eine CF Karte zu installieren, die zwar zur Zeit der Installation über einen USB Kartenleser an den Rechner angeschlossen ist, im Zielsystem aber über einen IDE Adapter betrieben werden soll - also exakt die Anforderung, die ich habe!

Das System wird problemlos installiert: optional kann die CF Karte partitioniert werden. Installiert wird das System in einer FAT Partition, durch das anlegen dreier Dateien - dem Linux Kernel, einer Datei zum Anlegen und Starten von Linux in einer RAM Disk, sowie dem Kompletten PuppyLinux - gespeichert in einer einzelnen Datei, die als Container für das System dient. PuppyLinux wird komplett in den RAM des Computer geladen. Da meine Neostation bei Lieferung nur 32MB Ram hatte, musste ich den 256MB DDR RAM Riegel aus meiner UltraSPARC, die für Notfälle im Abstellkeller steht, in die Neostation einbauen.

Mit 256MB Ram funktioniert das Linux einwandfrei. Es wird komplett in den Hauptspeicher geladen und kann von dort genutzt werden. Dennoch habe ich meist zwischen 100MB und 200MB RAM zur Verfügung. Die Distribution kommt mit zwei X Systemen: x.org sowie xvesa. Letzteres kann genutzt werden, wenn x.org aus irgendeinem Grund scheitert. Bei mir war das so - deshalb habe ich ohne lang herumzufrickeln xvesa gewählt, welches ausgezeichnet funktioniert und für meine Zwecke absolut ausreichend ist (mir würde ja schon die Konsole reichen).

Die Installation von weiteren Paketen funktioniert über das PuppyLinux eigene Paketformat und den Paketmanager einwandfrei. Abhängigkeiten werden automatisch aufgelöst. CUPS - was ich zum Betrieb des Rechners als Print-Server benötige - funktioniert einwandfrei und steuert meinen Laserdrucker an, den ich über den parallelen Port an den Rechner angeschlossen habe. Zum Konfigurieren von PuppyLinux gibt es verschiedenste Wizards, die die Konfiguration zu einem Kinderspiel machen. Leider Fehlen in der Distribution ein SSH Server, sowie dnsmasq - letzteres ist für mich die erste Wahl wenn es um den Betrieb eines kleinen DNS für das Heimnetzwerk geht. Der Umstand, dass solcherlei Pakete fehlen ist nicht weiter verwunderlich, da PuppyLinux als Desktop-Betriebssystem konzipiert wurde und auch ganz klar darauf ausgerichtet ist.

Einen ssh Server (openssh) habe ich inzwischen im dotpups Repository gefunden. Die Suche nach einem dmasq Paket gestaltet sich indes noch ein wenig schwierig. Die Pakete können über einen Browser oder z.b. auch wget heruntergeladen werden, ein Klick im ROX Filemanager auf das Paket führt den Anwender durch die Installationsprozedur.

Persönliche Einstellungen speichert PuppyLinux auf einem beliebigen Speichermedium - ich habe noch genügend Platz auf meiner 512MB grossen CF Karte, deshalb speichere ich die Einstellungen dort. Beim ersten Anlegen einer "Save-Datei" kann man sogar auswählen, ob diese verschlüsselt angelegt werden soll, um persönliche Daten vor unbefugtem Zugriff zu schützen.

PuppyLinux bietet noch viele weitere interessante Funktionen mehr - alles in allem sind Neostation und PuppyLinux deshalb meiner Meinung nach eine empfehlenswerte Kombination um kostengünstig und ohne lange Frickelei einen Print-Server oder Router für das Heimnetz einzurichten.



PHP5 mit IMAP unter Mac OS X


Als kleine Merkhilfe für mich zum o.g. Thema. Kürzlich wollte ich meiner lokalen PHP Installation unter Mac OS X 10.4.11 IMAP support hinzufügen. Meine Konfiguration dafür sah folgendermassen aus:

'./configure' '--prefix=/opt/php5' '--enable-force-cgi-redirect' '--disable-debug' '--enable-pic' '--disable-rpath' '--enable-inline-optimization' '--with-bz2' '--with-curl' '--without-gdbm' '--with-gettext=/opt' '--with-iconv' '--with-openssl' '--with-regex=system' '--with-xml' '--with-zlib' '--enable-exif' '--enable-sockets' '--enable-track-vars' '--enable-trans-sid' '--with-mysqli=/usr/local/mysql/bin/mysql_config' '--enable-memory-limit' '--enable-fastcgi' '--enable-memcache' '--enable-zip' '--enable-http' '--without-pdo-sqlite' '--without-sqlite' '--enable-mbstring' '--with-imap'

... und resultierte in folgender Fehlermeldung:

...
checking for IMAP support... yes
checking for IMAP Kerberos support... no
checking for IMAP SSL support... no
checking for utf8_mime2text signature... new
checking for U8T_CANONICAL... no
configure: error: utf8_mime2text() has new signature, but U8T_CANONICAL is missing. This should not happen. Check config.log for additional information.

Ein Blick in die config.log zeigt, dass das Include-File c-client.h nicht gefunden wird, und in der tat scheint c-client unter OSX nicht vorhanden zu sein:

conftest.c:240:22: error: c-client.h: No such file or directory

C-client ist Bestandteil des IMAP Paketes der University of Washington. Das komplette IMAP Paket kann über deren FTP Server gezogen werden: ftp://ftp.cac.washington.edu/imap/. Dort habe ich mir das Paket imap-2006k.tar.Z heruntergeladen. Nach dem Entpacken des Paketes wird dieses zunächst per:

$ make oxp

für Mac OS X gebaut. Das IMAP Paket enthält eine komplette IMAP Umgebung und die Installation dafür wäre deshalb auch dementsprechend umfangreich. Für PHP wird jedoch lediglich c-client benötigt, deshalb wird auch nur dieses "installiert", z.b.:

$ mkdir -p /usr/local/imap-2006k/include /usr/local/imap-2006k/lib
$ cp c-client/*.h /usr/local/imap-2006k/include
$ cp c-client/*.c /usr/local/imap-2006k/lib
$ cp c-client/c-client.a /usr/local/imap-2006k/lib/libc-client.a

Anschliessend kann man PHP mit folgenden Parametern neu configurieren und bauen:

'./configure' '--prefix=/opt/php5' '--enable-force-cgi-redirect' '--disable-debug' '--enable-pic' '--disable-rpath' '--enable-inline-optimization' '--with-bz2' '--with-curl' '--without-gdbm' '--with-gettext=/opt' '--with-iconv' '--with-openssl' '--with-regex=system' '--with-xml' '--with-zlib' '--enable-exif' '--enable-sockets' '--enable-track-vars' '--enable-trans-sid' '--with-mysqli=/usr/local/mysql/bin/mysql_config' '--enable-memory-limit' '--enable-fastcgi' '--enable-memcache' '--enable-zip' '--enable-http' '--without-pdo-sqlite' '--without-sqlite' '--enable-mbstring' '--with-imap=/usr/local/imap-2006k' '--with-kerberos'


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.



DeskBrowse - WebBrowser


DeskBrowse ist ein schlanker und schneller WebBrowser, der auf der WebKit / KHTML Engine basiert, derselben Engine, die auch von Safari verwendet wird. DeskBrowse verzichtet auf den meisten Schnickschnack anderer Browser und stellt nur die nötigsten Funktionen - wie Tabs und Lesezeichen - zur Verfügung. Zusätzlich gibt es jedoch noch einen passwortgeschützten Kiosk-Modus.

Das praktischste an diesem Browser ist neben der Schlankheit wohl, dass man ihn ber Hotkey ein- und ausblenden kann. Ich denke ich werde ihn wohl zum Browsen von Online-Dokumentationen verwenden, ist es doch äusserst praktisch, wenn man einen Browser beim Programmieren schnell zum Nachschlagen einer Funktion o.ä. per Hotkey in den Vordergrund holen kann.

Deskbrowse ist Open-Source und steht unter der GNU General Public License.



visor - terminal window


Ich habe mal wieder ein super praktisches Tool entdeckt, das mir die tägliche Arbeit komfortabler gestaltet.

"visor - systemwide terminal window" ist eine Erweiterung für das Terminal von Mac OS X ab Version 10.4. Wenn das Terminal gestartet ist, kann über einen Hotkey ein Terminalfenster am oberen Bildrand eingeblendet werden. Per default liegt der Hotkey auf ^F1 - schon nach kurzer Zeit merkt man, wie praktisch die ganze Sache ist. Normalerweise ist es doch so, daß das Terminalfenster immer verdeckt im Hintergrund liegt - oder sich gar auf einem anderen Desktop befindet, wenn man es gerade braucht. Per Visor lässt sich ein Terminalfenster aus jeder Applikation heraus schnell in den Vordergrund holen.

Ich habe Visor mit dem desktop manager getestet - es funktioniert problemlos und das Terminal wird immer im aktuellen Desktop eingeblendet. Der einzige Nachteil mag sein, dass das OSX Terminal bereits gestartet sein muss, damit Visor funktioniert. Ich finde es jedoch nicht weiter schlimm - das Terminal wird seit neuestem bei mir gleich beim Hochfahren des Systems gestartet.

Visor ist frei und Open Source - unter welcher Lizenz es steht, konnte ich jetzt leider nicht herausfinden - diese Information wird ggf. nachgereicht.



Merkwürdiger OSX Absturz [update]


Ich wollte vorhin eine Web Anwendung einem kleinen Test unterziehen, dabei stürzte OSX komplett ab - mit einer äusserst merkwürdigen Meldung, die ich mit meiner Digi-Cam festgehalten habe. Wie man auf dem Bild erkennt wollte ich lediglich die Web Anwendung mit dem Apache Benchmark Tool (ab) einem kleinen Stresstest unterziehen und hatte dafür aber eigentlich keine wirklich hohen Werte eingestellt.

[update]

Der Fehler lässt sich reproduzieren :-(. Lasse ich den Benchmark dreimal laufen, friert OSX ein. Jetzt muss ich mal herausfinden, woran das liegen könnte. Ich teste gerade diverse locking-mechanismen um eine brauchbare Möglichkeit zu finden 'race conditions' zu vermeiden. In diesem Speziellen Script wollte ich einen Mechanismus testen, der über Semaphoren funktioniert - möglicherweise geht dabei etwas schief.



SDO mit PHP unter Mac OS X


Eigentlich möchte ich mich mal mit den SDOs (Service Data Objects) unter PHP beschäftigen. Die Erweiterung ist in der PHP Welt noch relativ jung und bisher nur über PECL zu bekommen.

Leider habe ich im Moment ein Problem die Erweiterung unter Mac OS X zum Laufen zu bringen. Ich habe bereits eine laufende PHP 5.1.2 Installation mit allen nötigen Erweiterungen. Sobald ich SDO jedoch aktiviere, verweigert PHP seinen Dienst. Über die Console erhalte ich folgende Fehlermeldung, mit der ich wenig anfangen kann:

dyld: NSLinkModule() error
dyld: Symbol not found: __ZTI19SDORuntimeException
Referenced from: /usr/lib/20050922/sdo_das_xml.so
Expected in: flat namespace

Trace/BPT trap

Ich habe bereits das Usenet bemüht und hoffe, dass mir dort jemand helfen kann... mal gespannt.

[Update #1 - 19.02.2006 20:45]

Ich habe eben nochmal die Version von libxml2 bei mir überprüft. In der PHP Dokumentation wird libxml2 ab Version 2.6.19 empfohlen, ich hatte jedoch Version 2.6.16 installiert. Also schnell die aktuelle Version (2.6.23) runtergeladen und alles nochmal compiliert - geht trotzdem nicht :-(.

Wenn ich die Erweiterung für den Data Access Service (DAS) XML deaktiviere, startet immerhin PHP mit der SDO Erweiterung ohne irgendeinen DAS - ich bekomme jedoch ein Warning:

PHP Warning: Interface SDO_PropertyAccess cannot contain non abstract method /abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890=[]._#() in Unknown on line 0

IRC mit Mac OS X


Gelegentlich schaue ich noch ins IRC. Für Mac OS X hatte ich bisher jedoch keinen Client, der mir besonders gut gefallen hat. Mit MacIrssi bin ich jetzt aber fündig geworden.

MacIrssi hat eine sehr spartanische Obefläche und man kann den Entwicklern sicherlich vorwerfen, dass Ihre Applikation alles andere als nach einer typischen Mac OS X Anwendung ausschaut. Mir gefällt es jedoch, errinnert mich die Bedienung doch sehr an die guten alten Zeiten mit ircii auf der Console einer beliebigen Unix Workstation. Die Bedienung kann so komplett per Kommandozeile erfolgen und statt irgendwelche Buttons zu klicken oder sich umständlich durch Menüs zu hangeln arbeitet man mit den gewohnten Befehlen wie '/connect', '/join' etc.

In manchen Netzen wie z.b. dem IRCnet kann es nötig sein einen sogenannten identD server auf dem Rechner, über den man sich ins IRC verbindet, laufen zu haben. Ein identD Server soll die Vertrauenswürdigkeit eines Benutzers stärken. Vor allem für Benutzer, die sich über T-Online einwählen ist z.b. im IRCnet ein identD server nötig, damit man sich im Netz "frei" bewegen kann.

Unter Mac OS X kann man sich ganz bequem den identD Server von Gallerand Sébastien installieren, der anschliessend über die Systemkonfiguration von Mac OS eingerichtet und aktiviert werden kann.