Der virtuelle Nachsendeauftrag

Passend zum vorherigen Eintrag Der Umzug ein kleiner HTTP Redirect Tipp:

Ich habe mich ein bisschen schlau gemacht, wie man der Welt im allgemeinen und Suchmaschinen im speziellen am besten mitteilt, dass sich eine URL geändert hat.

Der goldene Weg ist der entsprechende HTTP Header: 301, permanently moved. Das ist mit wenigen Zeilen PHP schnell erledigt:

<?php
	header("HTTP/1.1 301 Moved Permanently");
	header("Location: http://info.michael-simons.eu");
	exit();
?>

Diese Methode ist auf jedenfall einem Refresh über Meta Tags vorzuziehen, da die Bots der Suchmaschinen so ihre Indizes aktualisieren.

In dem Zusammen stieß ich auf folgenden Artikel: Redirects using HTTP 301 headers. Dort wird anschaulich dagelegt, dass es für das Suchmaschinen Ranking einer Seite nicht gut ist, wenn z.B. www.michael-simons.eu auf www.michael-simons.eu zeigt, michael-simons.eu auf michael-simons.eu. Suchmaschinenbetreiber stufen dadurch teilweise beide Seiten schlechter ein, weil identischer Content über unterschiedliche Domains zu erreichen sind.

Das kann vermieden werden, indem entweder beide Domains auf michael-simons.eu verweisen oder beide auf www.michael-simons.eu. Beispiel: Wird www.michael-simons.eu als Zieladresse in den Browser eingegeben, landet man genauso auf michael-simons.eu, als wenn man es direkt eingibt. Umgekehrt ist es genauso in Ordnung.

Das Problem lässt sich durch einen Eintrag in die .htaccess Datei mit aktivierten mod_rewrite leicht lösen:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.michael-simons\.eu [nc]
RewriteRule (.*) http://michael-simons.eu/$1 [R=301,L]

| Comments (0) »

09-Sep-06


Umzug!

Es ist erstaunlich, so habe ich mein kleines Nerdblog noch nicht erlebt: Schnell, wie andere WordPressblogs sind.

Gehostet wird die Domain michael-simons.eu bei Tiggerswelt.net und davon profitiert jetzt auch Just another nerd blog, dass von msimons.info nach info.michael-simons.eu umgezogen ist.

So macht das Bloggen mit WordPress tatsächlich Spaß und deshalb wird hier in Zukunft auch öfter etwas erscheinen.

| Comments (4) »

08-Sep-06


Oracle JDBC Driver und AspectJ

Edit for non-german speakers:
This is a solution for “java.lang.ClassNotFoundException: oracle.security.pki.OracleWallet” or “java.lang.ClassNotFoundException: oracle.security.pki.OracleSecretStore”

The Oracle OJDBC driver is missing the two classes oracle.security.pki.OracleWallet and oracle.security.pki.OracleSecretStore. Normally not a problem but with a class loader that preloades all referenced classes, runtime will certainly fail. A work around is to create these to classes as stubs with the exact package name. That will do the trick.

Edit: As an alternative, you can add ${ORACLE_HOME}/jlib/oraclepki.jar to your classpath if you did a full install of a recent oracle client.

Der Oracle OJDBC Treiber hat mir mittlerweile schon mehr als einmal Ärger bereitet.

Der vorläufge Höhepunkt ist sein Nichtfunktionieren im Zusammenhang mit dem Load Time Weaving Class Loader aus dem AspectJ Projekt.

Dem normalen Java Classloader fällt es nicht auf, wenn ich per Class.forName “oracle.jdbc.driver.OracleDriver”, dass zwei Klassen fehlen: oracle.security.pki.OracleWallet und oracle.security.pki.OracleSecretStore. Dem Weaving Classloader hingegen schon.

Ich weiß nicht, was diese beiden Klassen machen, ich sehe nur, dass die entsprechende private Methode in OracleDriver unweigerlich auf einen Fehler laufen muss, so sie denn benutzt wird.

Jedenfalls, das Weaving schlägt fehl, bums, aus die Maus mit LTW Aspekten.

Auf dem Klo hatte ich die simple Idee, einfach in meinem Projekt obige Klassen leer anzulegen. Und siehe da: Wenn sie im Klassenpfad sind, kann ich OracleDriver instanzieren und alle sind glücklich.

Edit: Als Alternative kann man auch ${ORACLE_HOME}/jlib/oraclepki.jar zum Klassenpfad hinzufügen, falls man eine vollständige Installation eines halbwegs aktuellen Oracle Clients hat.

| Comments (3) »

26-Jul-06


DailyFratze on Rails

Die letzten Posts über Rails und Co. enstanden natürlich nicht aus heiterem Himmel. Ich entwickle zur Zeit eine neue Version von DailyFratze.de auf Basis von Rails.

Das ganze macht extrem viel Spaß und auch zügig Fortschritte. Es wird eine ganze Menge neuer Features geben, ein vollständig neues Layout, auf jedenfall: Ganz toll.

Development Version von DailyFratze.de

Das Bild ist ein kleiner Screenshot der Anwendung. Im Vordergrund sind man den Inspector aus Webkit. Webkit ist die Entwicklungsversion vom Mac OS X Browser Safari, den man sich auf der nightly Seite von Webkit.org kostenlos laden kann. 

Alleine der Inspektor ist superpraktisch. So zeigt er zum Beispiel die vollständige CSS Kaskade für jedes Element an, inklusive überschriebener Properties. Mit ihm kann man im DOM Baum suchen und vieles mehr.
Webkit beherrscht darüber hinaus nativ SVG, auch etwas schönes.

Man darf also gespannt sein, sowohl auf die neuesten Entwicklungen von DailyFratze.de als auch von neuen Safari Versionen.

(Der Header im Screenshot enthält zur Zeit Bilder von anderen, täglichen Photoprojekten, die ich schätze und die mich inspiriert haben. Falls ich diesen so eines Tages in einer Onlineversion die ich nicht nur privat nutze, verwende, werde ich natürlich alle Rechteinhaber vorheransprechen. Nicht, dass sich jetzt jemand durch sein Konterfei in diesem kleinen Screenshot gestört fühlt. Wenn doch, bitte Bescheid sagen.) 

| Comments (6) »

06-Jul-06


Rails mit FastCGI und Apache unter Mac OS X

Die vorherigen Artikel Ruby on Rails mit Mac OS X und Rails: Rolling into production on Mac OS X beschäftigten sich mit der Installation von Ruby on Rails unter Mac OS X bzw. mit der Produktivumgebung von Rails.

Prämisse für mich war jedesmal, dass der eingebaute Mac OS X Apache genutzt wird und nicht ein zweiter Serverprozess.

Heute soll es um die FastCGI Integration gehen. CGI war mir bis jetzt zum Testen nicht zu langsam. Fängt man aber mit AJAX Spielerein an und nutzt Rails mit CGI, kann man das auch getrost ganz sein lassen. Vorweg: FastCGI zu CGI ist ein Unterschied wie Tag und Nacht.

Was braucht man? (Die Links verweisen direkt auf die benötigten Dateien)

Die Installation ist relativ einfach.

FastCGI SDK:

./configure
make
sudo make install

mod_fastcgi

apxs -o mod_fastcgi.so -c *.c 
sudo apxs -i -a -n fastcgi mod_fastcgi.so

Ruby Bindings

ruby install.rb config
ruby install.rb setup
ruby install.rb install

Fast geschafft. Es folgt ein Apache Neustart mit

sudo apachectl graceful

Anschliessend gibt es einen kleinen Pitfall. Man muss zwei Tempverzeichnisse für FastCGI chmoden:

chmod 777 /tmp/fcgi_ipc
chmod 777 /tmp/fcgi_ipc/dynamic

sonst geht es in die Hose.

Anschliessend zur Apache Konfiguration. Diese habe ich wieder auf zwei Dateien aufgeteilt. In der httpd.conf wird das Modul mod_fastcgi geladen. Der Installer hat diesen Eintrag bereits automatisch erzeugt. Wenn nicht, folgende Zeilen ergänzen:

LoadModule fastcgi_module     libexec/httpd/mod_fastcgi.so

Danach den Handler einrichten:

<IfModule mod_fastcgi.c> 
FastCgiIpcDir /tmp/fcgi_ipc/ 
AddHandler fastcgi-script .fcgi 
</IfModule>

und wir sind fast fertig. Die eigentliche Rails Anwendung wird wieder in der Userspezifischen httpd.conf eingestellt, zu finden unter /etc/httpd/users/name.conf:

<IfModule mod_fastcgi.c>
   FastCgiServer "/Users/msimons/dev/rails/test/public/dispatch.fcgi" -
initial-env RAILS_ENV=production -processes 15 -idle-timeout 60
</IfModule>

Die Werte fürs Timeout und die Anzahl Prozesse sind aus dem Buch “Agile Web Development with Rails”.

Die Anwendung nutzt fastcgi, sobald man die entsprechende Rewrite Rule in .htaccess im public folder setzt:

RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]

bzw. die ursprüngliche Regel

RewriteRule ^(.*)$ dispatch.cgi [QSA,L]

ändert.

Danach ist ein letzter Apache Neustart fällig und man sieht seine Anwendung auf einmal in einem ganz anderen Tempo.

| Comments (0) »

28-Jun-06