Montag, Juni 18, 2007

Lingua Franca

Ich habe mich dazu entschlossen, ein neues Blog zu eröffnen, das nur auf englisch geführt wird. Da ich mit den Funktionen von Blogger nicht zufrieden war, bin ich zu WordPress umgezogen. Mal sehen, wie meine Erfahrungen dort sind.
Dieser Blog hier ist somit geschlossen.

Mittwoch, Juni 13, 2007

Skalieren mit Amazon S3 und EC2

Ein Highlight meines Besuches beim LinuxTag war dieser Vortag zum o.g. Thema. Die Slides dazu gibt es hier. Ich habe schon selbst S3 für eine Rails-Anwendung verwendet, um Daten zentral abzuspeichern. Möchte man auf Nummer sicher gehen und je nach Benutzerlast virtuelle Server ein und wieder ausschalten, so ist dies sicherlich die günstigste und eleganteste Lösung.

Mein Negativ-Highlight war übrigens diese Veranstaltung, bei der ich ein paar mal eingenickt bin ;-)

Labels: , ,

DI und AOP für Ruby

Möchte man die beiden großen Komponenten von Spring wie Dependency Injection
(DI) bzw. Inversion of Control (IoC) und Aspect Oriented Programming (AOP) in auch mit Ruby bzw. Rails verwenden, so sollte man sich zuvor Gedanken machen, ob diese beiden Techniken bei einer dynamischen Sprache wie Ruby überhaupt Sinn machen, da die Klassen im Gegensatz zu Java nachträglich verändert werden können.

Die strikte Trennung zwischen Konfigurationsdateien und Sourcecode ist nämlich nicht mehr zwingend erforderlich. Um also wie in Spring DI und AOP in XML-Dateien zu definieren kann man das gleiche mit ein paar Zeilen Rubycode in einer separaten Kontrolldatei erzielen.

Für DI gibt es eine Reihe von Bibliotheken, das umfrangreichste scheint Needle zu sein.

Bei AOP bietet sich AspectR an, das analog zu Aspect/J entwickelt wurde.

Labels: , ,

Apache2 mit Mongrel-Cluster konfigurieren

Möchte man auf einem Webserver einen Mongrel-Cluster laufen lassen, so muss man von Apache den LoadBalance aktiveren, indem man die Datei /etc/apache2/extra/httpd-vhosts.conf anpasst:



NameVirtualHost *:80



<Proxy balancer://mongrel_cluster>

BalancerMember http://127.0.0.1:8000

BalancerMember http://127.0.0.1:8001

</Proxy>



<VirtualHost *:80>

ServerName myservername.de

DocumentRoot /var/www/rails/myrailsapp/current/public

<Directory
"/var/www/rails/myrailsapp/current/public">

Options FollowSymLinks

AllowOverride None

Order allow,deny

Allow from all

</Directory>



RewriteEngine On



# Check for maintenance file and redirect all requests

RewriteCond %{DOCUMENT_ROOT}/system/maintenance.html -f

RewriteCond %{SCRIPT_FILENAME} !maintenance.html

RewriteRule ^.*$ /system/maintenance.html [L]



# Rewrite index to check for static

RewriteRule ^/$ /index.html [QSA]



# Rewrite to check for Rails cached page

RewriteRule ^([^.]+)$ $1.html [QSA]



# Redirect all non-static requests to cluster

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f

RewriteRule ^/(.*)$ balancer://mongrel_cluster%{REQUEST_URI}
[P,QSA,L]

</VirtualHost>






Es laufen zwei Mongrel-Prozesse, die auf Port 8000 bzw. 8001 lauschen. Kommt ein Request über Apache auf Port 80 herein, so wird dieser an die lokalen Mongrels weitergereicht. Dies kann natürlich beliebig mit anderen Rechner skaliert werden.

Labels: , ,

Bald bin ich weg

Ich habe Ende März gekündigt und werde zum 01.07. eine neue Stelle bei einem anderen Arbeitgeber antreten. Um meinen KollegInnen die Zeit, bis ich weg bin, jeden Tag vor Augen zu führen habe ich mir folgendes kleines Ruby-Skript ausgedacht, das über die AppleScript-Bridge mit Adium und dem Bildschirmschoner spricht:



#!/opt/local/bin/ruby

require 'date'
require 'rubygems'
require 'appscript'
include Appscript

# Meinen Status bei Adium auf "nicht verfügbar" setzen
app('Adium').my_status_message.set('Bin kurz weg')
app('Adium').my_status_type.set(:away)

# Den Bildschirmschoner (blockierend) aktivieren
app('ScreenSaverEngine').activate

# Prüfen, ob der Bildschirmschoner wieder deaktiviert wurde
while `ps axc | grep -i screensaverengine | wc -l`.strip.to_i != 0
sleep 3
end

# Bin zurück
this_day = Date.today

last_day = Date.new(2007, 06, 30) # mein letzter Arbeitstag

# Noch offene Urlaube
vacations = [ Date.new(2007, 05, 16)..Date.new(2007, 05, 28),
Date.new(2007, 06, 25)..Date.new(2007, 06, 29) ]

# Ausrechnen, wieviele Arbeitstage noch übrig sind
days_left = 0
((this_day)..(last_day)).each do |day|
week_day = day.wday
day_off = (week_day == 0 || week_day == 6) # Samstag und Sonntag nicht berücksichtigen
unless day_off
vacations.each do |away|
if away.include?(day)
day_off = true
break
end
end
end

if !day_off
days_left += 1
end
end

# Meinen Status in Adium wieder auf verfügbar setzen
app('Adium').my_status_message.set("Noch #{days_left} Tage anwesend.")
app('Adium').my_status_type.set(:available)




Dieses Skript habe ich mit Platypus in eine ausführbare Datei umgewandelt, die mit einem Tastenkürzel über Quicksilver aktiviert wird. Sobald ich also meinen Arbeitsplatz verlasse wird mit dem Tastenkürzel beim Rechner gesperrt, mein IM-Status gesetzt und der Bildschirmschoner läuft. Bei der Rückkehr

Labels: ,

Montag, Juni 04, 2007

NEO 2 Tastaturlayout

Ich schreibe schon seit 1987 mit 10 Finger auf QWERTZ-Tastaturen. Wird also Zeit, mal etwas effizienteres zu Lernen. Ich hatte immer mal wieder was vom Dvorak-Tastaturlayout gelesen, aber nie so recht Zeit dafür gehabt. Als ich mich neulich wieder genauer mit dem Thema beschäftigt habe, stieß ich auf das NEO-Tastaturlayout, welches für mich ein besseren Eindruck macht, da für Deutsch optimiert.

Da ich natürlich immer Bleeding Edge bin, nahm ich mir natürlich die neue Version 2 vor, die es nicht für den Mac gibt. Nachdem ich das Keylayout für die Version 1.1 mühselig angepasst hatte, es aber aufgrund eines Fehlers nicht funktioniert, versuchte ich es nochmal mit dem Programm Ukelele, um damit ging es viel einfacher.

Ich hätte das neue Layout auf der NEO-Projektseite gerne zur Verfügung gestellt, habe aber bisher noch keine Antwort vom Autor erhalten.

Die neue Layout-Datei kopiert man nach ~/Library/Keyboard Layouts, meldet sich ab und wieder an und kann es über die Systemsteuerung aktivieren. Da ich die Tasten nicht rausreißen und neu anordnen möchte, habe ich mir die Tastaturübersicht-Anwendung aktiviert. Man soll ja sowieso nie auf die Tasten schauen ;-)

Der nächste Schritt war, ein gescheites Schreibmaschinenlernprogramm zu finden. Da ich bereits mit MacPorts KDE installiert habe, holte ich mir noch KTouch über das kdeedu3 Paket. Die Tastaturdefinitionsdatei von KTouch muss man für NEO 2 auch anpassen, da nur das alte NEO-Layout mitgeliefert wird. Diese muss in das Verzeichnis /opt/local/share/apps/ktouch kopiert werden und kann in KTouch über das Menü Einstellungen - Tastaturbelegungen ausgewählt werden.

Sodann ging es ans Lernen. Irgendwann fielen mir die schönen Übungstexte früher im Schreibmaschinenunterricht ein und ich machte mich daran, ein kleines Ruby-Script zu schreiben, das für die gelernten Buchstaben Zufallstexte generiert. Die mit KTouch mitgelieferten Texte für NEO sind nämlich nicht sehr spannend. Da ich aber faul bin, gibt das Programm einfach nur zufällig ausgewählte Zeilen mit den Wörtern aus, die mit den übergebenen Tasten eingegeben werden können.

Da ich das Wörterbuch von aspell verwende, muss man dies zuvor mit MacPorts installieren:
sudo port install aspell-dict-de
Nach dem Aufruf mit

ruby generate_tests.rb uiaeosnrtdy
wird folgende Ausgabe generiert:

Reusing last search result
Found 5176 words
internierter ortet Sauerei unstarr erneuter anreisest ersinnter ausradierte
anordnendes Isis Etui antun ersinnende rasanter startetet rationiertest
Satins staute Nonnen dto residiertest rodender Dessert stationiertest entstandenen
eiserne stresste Situationen ersonnenen anrennenden enttarnenden renitenter
tristestes steuerst storniertet Ren unsteteste ausredete neunter Deserteurs
durstete ausartet dessen ernanntes Tennen Erdens reine Tasse sonnen ersinne
Initiierens eintrat Dinar radierenden Arrondieren einredender sendender
unterordnetet ansteuerten interessiertest naturreines ausreisen sauerer
einredenden Taster Orion Teint Stresssituation Staatsdienst Tasse dotierenden
startende erster resident sinnende trist unstetestes attestierter erneuerter

Es werden immer 10 Zeilen generiert, die man mit Copy&Paste in die KTouch-Lerndatei übertragen kann.

Übrigens erstaunlich: mit dem QWERTY-Keyboard kann man auf der Grundlinie vom Aspell-Wörterbuch gerade mal 79 Wörter schreiben, bei DVORAK sind es 1680 und bei NEO sage und schreibe 5176!

Labels: , ,

Dienstag, Dezember 19, 2006

Apache2 und SVN im Source kompilieren

Möchte man unter Linux Apache2 und Subversion vom Source kompilieren, um Rails zusammen mit Mongrel, Capistrano und Apache zu verwenden, so muss man Subversion die Apache Runtime Verzeichnisse mitteilen:

cd /usr/src
wget http://ftp.plusline.de/ftp.apache.org/httpd/httpd-2.2.3.tar.bz2
tar xvfj
httpd-2.2.3.tar.bz2
wget http://subversion.tigris.org/downloads/subversion-1.4.2.tar.bz2
tar xvfj
subversion-1.4.2.tar.bz2

cd httpd-2.2.3
./configure --enable-deflate --enable-proxy --enable-proxy-html --enable-proxy-balancer --enable-rewrite --enable-cache --enable-mem-cache --enable-ssl --enable-headers --enable-dav
make && make install

cd ../subversion-1.4.2
./configure --with-apr=/usr/src/httpd-2.2.3/srclib/apr --with-apr-util=/usr/src/httpd-2.2.3/srclib/apr-util
make && make install

Labels: ,

Ant startet nicht unter Eclipse 3.2

Beim Starten von Ant in Eclipse kam in der Konsole keine Meldung, aber Prozess wurde als "" gekennzeichnet. Ich hatte die Default-Einstellungen unter "Ant Build..." - Classpath bei Ant Home. Als ich jedoch Ant direkt von Apache heruntergeladen hatte und den Installationspfad des Archivs als Ant-Home verwendet hatte, ging es wieder.

Labels: ,

Syntax-Einfärbung und Vervollständigung mit IRB

Um in IRB und in Rails mit script/console eine Einfärbung der Syntax und eine Auto-Vervollständigung zu bekommen kann man das Ruby-Gem Wirble mit
sudo gem install -y wirble
installieren. Ich habe die Resourcedatei ~/.irbrc noch angelegt und angepasst, damit ein anderes Farbschema verwendet wird:



require 'rubygems'
require 'wirble'

#
# Available colors
#

# :nothing :green :light_purple
# :black :light_blue :purple
# :blue :light_cyan :red
# :brown :light_gray :white
# :cyan :light_green :yellow
# :dark_gray :light_red

#
# Default Wirble color scheme.
#
DEFAULT_COLORS = {
# delimiter colors
:comma => :blue,
:refers => :blue,

# container colors (hash and array)
:open_hash => :green,
:close_hash => :green,
:open_array => :green,
:close_array => :green,

# object colors
:open_object => :light_red,
:object_class => :white,
:object_addr_prefix => :blue,
:object_line_prefix => :blue,
:close_object => :light_red,

# symbol colors
:symbol => :dark_gray,
:symbol_prefix => :dark_gray,

# string colors
:open_string => :red,
:string => :cyan,
:close_string => :red,

# misc colors
:number => :cyan,
:keyword => :green,
:class => :light_green,
:range => :red,
}

Wirble.init
Wirble.colorize
Wirble::Colorize.colors = DEFAULT_COLORS




Labels:

Montag, Dezember 18, 2006

Subversion und Radrails

Ich hatte etwas Probleme, die aktuelle Radrails-Version 0.7.2 mit Subversion 1.4.2 zum Laufen zu bekommen.

In einem anderem Blog fand ich den Hinweis, dass das SVN-Interface von Subclipse mit SVNKit (Standard) und einer Subversion 1.4.x nicht richtig funktioniert.

Da die Update-Funktion von Radrails kaputt ist, habe ich sicherheitshalber mit einem separaten Eclipse noch die aktuelle Subclipse-Version 1.0.4 über die Update-Funktion geladen und die Dateien von features und plugins manuell in Radrails rüberkopiert.

Dann habe ich mir laut Anleitung von Jan Krutisch die Java-HL-Bindings heruntergeladen und installiert und in Radrails aktiviert.

Labels: , ,

Donnerstag, September 21, 2006

Der Grundstein

LiebeR BesucherIn,
ich heiße Markus Kirschner und arbeite als fest angestellter Programmierer in Berlin.

In diesem Blog möchte ich meine täglichen "Pits and Downfalls" und deren Lösungen dokumentieren, um sie für die Nachwelt zu erhalten. Die Anregung dafür habe ich aus dem sehr empfehlenswerten Buch "Practices of an Agile Developer".

Mein Arbeitsplatz:
  • Power Mac G5 Quad mit 4 x 2.5 GHz, 2 GB RAM und 250 GB Festplatte
  • Mac OSX 10.4
  • Linuxrechner MSI Hetis, Pentium IV 2.8 GHZ, 2 GB RAM
  • Debian Linux
Ich setze folgende Tools ein:
  • Eclipse 3.2
  • Java 1.4.2 und 5
  • Ant
  • CVS
  • SVN
Das war's auch schon mit den Grundvoraussetzungen. Mal sehen, wie lange ich das Blog pflege ;-)