Das gute Trac lief bei mir zuerst über mod_python und ich war auch ganz zufrieden damit, da ich so ziemlich der einzige Nutzer des Tracs war. Ein paar kleine Tests mit dem ab (Apache Benchmark) Tool brachten jedoch hervor, das in 30s nur knapp 100 Requests verarbeitet werden konnten. Auf der Suche nach Verbesserungen habe ich gelesen, dass mod_wsgi eine Performancesteigerung bringen soll. Erste Tests haben das auch erwiesen, denn nun schafft mein Apache knapp 200 Requests in 30s.

Auch der Wechsel von SQLite zu Postgres hat meiner Meinung nach eine spürbare Verbesserung ergeben.

Zuletzt sollte man auch noch bedenken, dass Trac doch einige Statische Inhalte serviert, wie das Logo und die CSS Files. Am günstigsten ist es hier diese Dateien aus dem lokalen Webbrowsercache zu laden. Alle statischen Inhalte liegen bei Trac im Verzeichnis chrome.

<LocationMatch /chrome>
	SetHandler None
	Order allow,deny
	Allow from all
	ExpiresDefault "now plus 12 hours"
</LocationMatch>
 

Mit sudo können ausgewählte Benutzer Befehle als Superuser (root) ausführen. Um sudo auf einem Debian System einzurichten muss man mit visudodie sudoer Datei bearbeiten. In dieser fügt man am Ende unter user privilege folgendes ein:

%sudo   ALL=(ALL)       ALL

Diese Zeile bedeutet, dass alle Benutzer die in der Gruppe sudo sind sudo benutzen und alle Befehle als Superuser ausführen dürfen. Bevor sie dies machen dürfen müssen sie sich jedoch mit ihrem eigenen Passwort authentifizieren. Um einen Benutzer zur Gruppe sudo hinzu zufügen führt man am besten folgendes Kommando aus.

gpasswd -a <username> sudo
 

Um nach einem Domainumzug möglichst schnell wieder auf seine eigene Domain zugreifen zu können, benötigt man die richtige IP, die ja im Internet per DNS ermittelt wird. Damit aber nicht immer ein DNS Server nach der IP gefragt werden muss legen die Betriebssysteme lokal einen Cache an. Um bei Mac OS X den DNS Cache durchzuspülen, damit die neusten DNS Einstellungen vom Server geladen werden gibt man in Terminal.app eines der beiden Kommandos ein.

OS X <= 10.5.1
lookupd -flushcache
OS X >= 10.5.2
dscacheutil -flushcache

Tadaa Cache geflushed. Sollte trotzdem immer noch die Auflösung nicht richtig klappen, nicht vergessen dass Router auch einen DNS Cache haben ;)

 

Heute habe ich bei Heise gelesen, dass es von Safari einen Preview zur Version 4 gibt. Eigentlich bin ich ja kein Freund des Apple Browsers, da ich von Firefox doch sehr verwöhnt war. Besonders hat mich immer der blaue Ladebalken genervt, warum auch immer.

Safari 4 präsentiert sich von der Oberfläche her wie sein Vorgänger, auffällig ist aber auch den ersten Blick dass die Tabs nun oben in der Fensterleiste sind, meiner Meinung nach sehr angenehm. Zudem präsentiert uns das neue Browserfenster direkt eine Übersicht über unsere Top-Sites, die voll im Applestil gehalten ist. Die Previews in der Topsite view werden angenehmer weiser auch aktualisiert. Zwar hat Apple hier ganz klar bei Opera abgeschaut, es aber doch ganz eigen umgesetzt.

Ein weiteres Ohhhh kam, als ich die erste Website geladen habe. Ich hatte subjektiv noch nie das Gefühl das eine Seite so schnell geladen wird (Vorrausgesetzt der Webserver gibt es her).

Ich bin sehr gespannt, was sich noch alles an der Version 4 tuen wird bis zur final Release. Fest steht aber für mich schon mal, dass FF erstmal nur 2te Wahl bei mir ist.

 

ist immer noch der Landing Fail.

 

Beim durchsehen meiner Musikbibilothek fiel mir auf, dass einige meiner Alben nicht in iTunes auftauchen, aber die entsprechenden Ordner gab es?!
Es Rätsels Lösung war einfach, damals in grauer Vorzeit als ich noch keinen Mac besaß habe ich mir diese Alben mit dem Windows Media Player von CD auf Platte kopiert. Nur kann der WMP bekanntlich ja nur wma. Wie aber bekomme ich jetzt diese Dateien in ein anderes Format, wie MP3, FLAC etc. pp.

Die Freeware Switch war meine Rettung. Switch ist kein überladenes Programm, sondern erledigt den Job den es erledigen soll. Besonders imponiert hat mir, dass Switch Codecs on demand herunterläd. Somit wird das System nicht einfach mit Daten zugemüllt die dann nur brach liegen.

Aber Switch kann nicht nur wma, sondern auch mpc, ogg, flac, rm etc. konvertieren. Und selbst bei dem Zielformat ist man nicht auf MP3 beschränkt, sondern kann hier zwischen verschiedenen Formaten wählen.

 

Appels OS X hat leider nur die Version 2.6.16 von libxml und 1.1.12 von libxslt von Haus aus an Bord. Ich hatte letztens das Problem, dass Agavi nicht will it diesen Verionen von libxml.

Das Problem lässt sich für PHP relativ einfach lösen und zwar in dem wir uns die neusten Verionen von libxml und libxslt compilen. Zu finden sind die neusten Versionen auf dem FTP von xmlsoft. Eine gute Anleitung hat James Clarke geschrieben. Da ich öfters gelesen habe, dass man die aktuelle Version von Leopard nicht einfach ersetzen kann, habe ich mich dazu entschieden, nach dem Compile der Programme die dynamischen Links entsprechend zu ändern.

Compile von PHP 5.3

Ich habe vergeblich versucht, PHP mit dem xmlreader zu compilen, aber keine Chance da anscheinend die Version der System libxml und libxslt zu alt sind. Zum Erfolg hat folgender configure command geführt.

CFLAGS="-arch x86_64 -I/usr/local/include -I/usr/local/php5/include/" LDFLAGS="-L/usr/local/include -L/usr/local/php5/include/" ./configure  \
'--prefix=/usr/local/php5.3' \
'--with-apxs2=/usr/sbin/apxs' \
'--with-config-file-scan-dir=/usr/local/php5.3/php.d' \
'--with-openssl=/usr' \
'--with-zlib=/usr' \
'--with-zlib-dir=/usr' \
'--with-gd' \
'--with-ldap' \
'--with-xmlrpc' \
'--enable-exif' \
'--enable-soap' \
'--enable-sqlite-utf8' \
'--enable-wddx' \
'--enable-ftp' \
'--enable-sockets' \
'--with-bz2=/usr' \
'--enable-zip' \
'--enable-pcntl' \
'--enable-shmop' \
'--enable-sysvsem' \
'--enable-sysvshm' \
'--enable-sysvmsg' \
'--enable-mbstring' \
'--enable-bcmath' \
'--enable-calendar' \
'--with-mhash=shared,/usr/local/php5' \
'--with-kerberos=/usr' \
'--with-libxml-dir=/usr/local/' \
'--with-xsl=/usr/local/' \
'--with-gettext=/usr/local/php5' \
'--with-curl=shared' \
'--with-png-dir=/usr/local/php5' \
'--with-jpeg-dir=/usr/local/php5' \
'--enable-gd-native-ttf' \
'--with-freetype-dir=/usr/local/php5' \
'--with-mysql=mysqlnd' \
'--with-mysqli=mysqlnd' \
'--with-pdo-mysql=mysqlnd' \
'--with-pgsql=shared,/usr/local/php5' \
'--with-pdo-pgsql=shared,/usr/local/php5' \
'--with-mcrypt=shared,/usr/local/php5' \
'--with-iconv' \
'--without-pear' \
'--disable-xmlreader'

Post Compile

Wie ich schon erwähnt hatte, müssen nach dem compilieren noch die dynamischen Links geändert werden.

# Show dynamic links
otool -L libs/libphp5.so
# Change the dynamic links
install_name_tool -change /usr/lib/libxml2.2.dylib /usr/local/lib/libxml2.2.dylib libs/libphp5.so
install_name_tool -change /usr/lib/libxslt.1.dylib /usr/local/lib/libxslt.1.dylib libs/libphp5.so
install_name_tool -change /usr/lib/libexslt.0.dylib /usr/local/lib/libexslt.0.dylib libs/libphp5.so

Nicht vergessen das ganze nocheinmal zu verifizieren, ob auch alles geklappt hat. So jetzt noch mit “make install” PHP installieren, Apache neustarten und testen.

 

Wenn man den FormPopulationFilter (kurz FPF) des Agavi Frameworks benutzt, gibt es einige Sachen auf die man achten sollte.

Keine HTML Special Charaters verwenden

Warum nicht? Nun ja, ich habe mein Output auf XHTML & UTF-8 eingestellt, so dass ich mit dem FPF meine Formulare dynamische ausfüllen kann. Nun ist das Problem, wenn man z.B. eine Navigation erstellt, dass man Sonderzeichen wie “>>” oder “<<” benutzen möchte für Vor und Zurück. Das Problem welches hierbei auftritt ist, dass der FPF denkt, dies seien Open- bzw. Endtags was ihn letztendlich aus der Bahn wirft und uns einer Exception beschert. Aber nicht nur diese Zeichen auch an “&rarr;” verschluckt sich der FPF.

Deswegen ist es am besten, wenn man Sonderzeichen benutzen möchte, den numerischen Code dieser zu verwenden. Eine gut strukturierte Übersicht findet der interessierte Leser unter http://webdesign.about.com/library/bl_htmlcodes.htm

 

PHP im Apache aktivieren

PHP 5.2.6 wird standartmäßig mit OSX Leopard ausgeliefert. Damit der lokale Apache PHP nutzen kann muss dieses noch nachträglich in der /etc/apache2/httpd.conf aktiviert werden. Dies geschiet dadurch, dass man die # vor LoadModule php5_module libexec/apache2/libphp5.so wegnimmt. Nun noch die Konfigurationsdatei von PHP kopieren und den Apache Webserver neustarten.

sudo cp /etc/php.ini.default /etc/php.ini
sudo apachectl restart

MySQL installieren

Die Installation von MySQL gestaltet sich relativ einfach. Einfach unter http://dev.mysql.com/downloads/mysql/5.0.html#macosx-dmg das richtige Packet herunterladen, mounten, installieren und fast fertig. Ich habe mich für die x86_64 Variante entschieden, da mein Core2Dou ja ein “64bit” Prozessor ist.

Nach der Installation dann noch einen Doppelklick auf MySQL.prefpane um MySQL dann später bequem aus den Systemeinstellungen starten zu können.

Um die MySQL Installation abzuschießen kopieren wir noch die Konfigurationsdatei nach /etc.

sudo cp /usr/local/mysql/support-files/my-small.cnf /etc/my.cnf

Man kann sicherlich auch eine andere cnf wählen, aber da es sich nur um eine lokale Entwicklungsumgebung handelt, sollte die small Konfiguration ausreichen.

Nun ist MySQL installiert und bereit gestartet zu werden. Dies wir einfach über die Systemeinstellungen -> MySQL gemacht. Wer den MySQL Server automatisch starten möchte kann dies dort durch setzen des Harkens bei Autostart erledigen.

PHP 5.3 installieren

Nach der MySQL Installation kann man PHP 5.2.6 mit MySQL benutzen, wem das genügt der kann hier nun aufhören zu lesen und sich ans entwicken machen.

Vorbereitungen

Nun gut: Here we go, bleeding edge of PHP.
Zur Vorbereitung benötigen wir ein Leopard PHP Packet von entropy.ch und die Xcode Tools von Apple. Das aktuellste entropy.ch Packet, welches ich beim schreiben des Artikels gefunden habe, ist Version 5.2.5-6-beta. Wichtig sind für uns allerdings nur die Bibliotheken des Packetes.

sudo -s
cd /usr/local
curl -O http://www2.entropy.ch/download/php5-5.2.5-6-beta.tar.gz
tar -xzvf php5-*-beta.tar.gz

Nun laden wir uns einen Snapshot von PHP 5.3 herunter und entpacken dann auch diesen in /usr/local und wechseln in das Verzeichnis.

Compilen von PHP

Kommen wir nun zum Compilen von PHP. Als erstes benötigen wir ein Configure Command, welches wir der einfachheit halber aus dem Entropy.ch Packet übernehmen.

/usr/local/php5/bin/php -i | grep "Configure Command"

Nun müssen wir noch das richtige –prefix und –with-config-file-scan-dir setzen. (Achtung nicht die Pfade zu den Bibliotheken verändern!). Ein fertiges Configure Command könnte dann so aussehen:

CFLAGS="-arch x86_64 -I/usr/local/php5/include/" LDFLAGS="-L/usr/local/php5/include/" ./configure  \
'--prefix=/usr/local/php5.3' \
'--with-apxs2=/usr/sbin/apxs' \
'--with-config-file-scan-dir=/usr/local/php5.3/php.d' \
'--with-openssl=/usr' \
'--with-zlib=/usr' \
'--with-zlib-dir=/usr' \
'--with-gd' \
'--with-ldap' \
'--with-xmlrpc' \
'--enable-exif' \
'--enable-soap' \
'--enable-sqlite-utf8' \
'--enable-wddx' \
'--enable-ftp' \
'--enable-sockets' \
'--with-bz2=/usr' \
'--enable-zip' \
'--enable-pcntl' \
'--enable-shmop' \
'--enable-sysvsem' \
'--enable-sysvshm' \
'--enable-sysvmsg' \
'--enable-mbstring' \
'--enable-bcmath' \
'--enable-calendar' \
'--with-mhash=shared,/usr/local/php5' \
'--with-kerberos=/usr' \
'--with-libxml-dir=/usr/local/php5' \
'--with-xsl=/usr/local/php5' \
'--with-gettext=/usr/local/php5' \
'--with-curl=shared,/usr/local/php5' \
'--with-png-dir=/usr/local/php5' \
'--with-jpeg-dir=/usr/local/php5' \
'--enable-gd-native-ttf' \
'--with-freetype-dir=/usr/local/php5' \
'--with-mysql=mysqlnd' \
'--with-mysqli=mysqlnd' \
'--with-pdo-mysql=mysqlnd' \
'--with-pgsql=shared,/usr/local/php5' \
'--with-pdo-pgsql=shared,/usr/local/php5' \
'--with-mcrypt=shared,/usr/local/php5' \
'--with-iconv' \
'--without-pear'

Der -arch Parameter bei CFLAGS kann auch weggelassen werden, er deutet nur an für welche Architektur PHP compiled wird. Wer noch weitere Optionen für PHP aktivieren will, der kann sich mit

./configure --help

einen Überblick über die Optionen verschaffen.

Nachdem der Configure Command ohne Probleme durchgelaufen ist, kommt nun ein gepflegtes

make -j4

und wir holen uns erstmal einen Kaffe.

Post make

Nachdem make durchgelaufen ist müssen wir noch etwas an den dynamischen Links von PHP ausbesseren. Um sich die dynamischen Links anzeigen zu lassen kann otool verwendet werden.

# show dynamic links
otool -L libs/libphp5.so
 
# correct linking
install_name_tool -change /usr/lib/libxml2.2.dylib /usr/local/php5/lib/libxml2.2.dylib libs/libphp5.so
install_name_tool -change /usr/lib/libxslt.1.dylib /usr/local/php5/lib/libxslt.1.dylib libs/libphp5.so
install_name_tool -change /usr/lib/libexslt.0.dylib /usr/local/php5/lib/libexslt.0.dylib libs/libphp5.so
 
# backup der libphp5.so von leopard
mv /usr/libexec/apache2/libphp5.so /usr/libexec/apache2/libphp5.so.leopard
 
# Installation der neuen PHP version
make test
make install
 
# Kopieren des neuen Apache Modules in unser Standalone Packet
cp /usr/libexec/apache2/libphp5.so /usr/local/php5.3

Abschließende Konfiguration

So und fertig ist die Installation von PHP 5.3 unter Mac OS X. Einen letzter Feinschliff muss jedoch noch an der Installation durchgeführt werden. Dies aber nur schnell Stichpunkt artig.

cp php.ini-recommended /usr/local/php5.3/lib/php.ini
mkdir /usr/local/php5.3/php.d
cp /usr/local/php5/php.d/* /usr/local/php5.3/php.d
sed -e 's/php5/php5.3/g' -i "" /usr/local/php5.3/php.d/10-extension_dir.ini
sed -e 's/20060613/20071006/g' -i "" /usr/local/php5.3/php.d/10-extension_dir.ini
apachectl restart

Um PHP nach den eigenen Wünschen zu konfigurieren einfach die entsprechenden Werte in der /usr/local/php5.3/lib/php.ini ändern.

Quellen:

 

Pear einzurichten unter Leopard gestaltet sich als relativ einfach. Eine gute Anleitung hier für hat das phpmagazin.de geschrieben. Die Installation sollte am besten als SuperUser druchgeführt werden. Um SuperUser zu werden benutzt man am besten das Command sudo -s.

© 2011 Börngen-Schmidt IT Consulting Suffusion theme by Sayontan Sinha