Archiv für den Monat: Juni 2008

Buchtipp: RESTful Web-Services

Klassische Web-Services hinterlassen bei vielen Anwendungsfällen oftmals ein seltsames Gefühl. Ja, sie funktionieren. Ja, es gibt Unterstützung für in vielen Sprachen. Aber irgendwie ist das alles doch ganz schon kompliziert geworden. Hey, da hätten wir doch gleich bei CORBA bleiben können.

Ein einfacherer Ansatz lautet RESTful Web-Services. In dem Buch Web Services mit REST wird das Konzept sehr schön erklärt.

Eines jener Bücher mit dem „Ah, so geht das also“ Effekt.

Stress bei IT Fachkräften

Heute im Radio wurde berichtet, dass die Nutzung von Antidepressiva bei IT Kräften um 60% höher sei als bei anderen Angestellten. Hauptgründe sind, laut diesem Bericht, die Arbeitszeiten und der starke Druck durch die Vorgesetzten.

Erschreckend, oder? Regelmäßige Leser wissen, wie ich zu Überstunden stehe. Ich bin der festen Überzeugung, dass regelmäßige Überstunden ein absoluter Produktivitätskiller sind. Nicht ohne Grund probieren einige höchst erfolgreiche Firmen (wie z.B. 37 Signals) gerade die 4-Tage Woche aus.

Verantwortlich für diese Situation sind wir Führungskräfte. Wir haben (nicht nur laut Gesetz) eine Führsorgepflicht gegenüber unseren Mitarbeitern.

Frühere Firmenbosse kannten diese Verantwortung. Firmen wie z.B. Krupp (große Stahlfirma in Essen) haben ihren Mitarbeitern komplette Stadtteile inkl. Krankenhaus gebaut. Das haben sie nicht nur gemacht, weil sie so gute Menschen sind – es ging um den Profit. Krupp hatte sehr schnell erkannt, dass ein gesunder Mitarbeiter viel mehr für seine Firma bringt, als ein kranker Mitarbeiter. Auch war ihm klar, dass Erfahrung wichtig, und lange Betriebszugehörgkeit daher ein wichtiger Faktor ist.

Und heute? Heute begreifen viele Firmen ihre Mitarbeiter als austauschbaren Faktor. Ich kenne Beratungsfirmen, deren Hire&Fire Mentalität mich dermaßen ärgert, dass ich dort für kein Geld der Welt anfangen würde.

Nervös werden die Manager solcher Firmen erst, wenn einer ihrer Mitarbeiter übermüdet gegen den Baum gefahren ist (was ich – leider – schon mehrfach mit verschiedenen Firmen erleben). Aber die Nervösität kommt nur daher, dass sie dann plötzlich merken, dass sie mit einem Bein im Knast stehen – Das Arbeitszeitschutzgesetz ist eine interessante Lektüre …

Ruby On Rails Traps

Ich letzter Zeit habe ich eine größere Rails-Anwendung debugged. Dabei habe ich etwas über einige Stolperfallen gelernt. Wer also ähnliche Probleme hat, hier ein paar Tipps:

Niemals Mongrel und PStore zusammen einsetzen
Wir hatten einige Probleme mit Session-Handling. Der Grund lag daran, dass wir die Sessions im Filesystem gespeichert haben. Laut Mongrel-FAQ soll man das auch nicht machen. Aber weder ich, noch verschiedenste Entwickler und Firmen die ich mit meinem Problem genervt hatte, kamen auf diese Lösung.
Also: Sessions immer in der Datenbank, oder im memcache speichern!

Rails hat große Timeout-Probleme
Wenn Rails bei memcache in einen Timeout läuft, kann sich Mongrel aufhängen. Prinzipiell scheint die IO-Lib von Rails suboptimal programmiert zu sein. Ich bin durch einen Blog-Eintrag bei Rapleaf darüber gestolpert. Dort findet sich auch ein Code-Schnippsel, um das Problem mit memcache zu lösen.

memcache und gettext mögen sich nicht
Der ist auch super. Gettext (dient zur Lokalisierung von Web-Seiten) und der memcache-Client arbeiten nicht vernünftig zusammen. Details und Lösung gibt es hier.

Wenn ich jetzt noch herausfinde, warum memcache Probleme mit dem automatischen expire hat, wird es ein guter Tag.

OS X TextEdit

Apple schafft es doch noch, mich zu verblüffen.

Ich wollte mal eben etwas an einer HTML Datei ändern. Also habe ich die Datei mit TextEdit geöffnet. Bislang hielt ich das für das Gegenstück zum Notepad von Windows.

Aber was passiert? TextEdit öffnet mit eine HTML Ansicht in der ich editieren kann. Es ist also ein WYSIWYG-HTML Editor.

Erstaunlich

Wir machen das lieber selber

Schade, heute hat ein Kunde ein spannendes Projekt leider doch noch abgesagt. Mein Job wäre es gewesen, Schnittstelle zwischen Fachbereich und externer Dienstleister zu sein. Also Anforderungen aufnehmen, Prozesse dokumentieren, Lastenheft schreiben, Dienstleister briefen. Entwicklung begleiten, Test und Abnahme durchführen usw. Da ich genau das schon oft im ähnlichen Umfeld gemacht habe, hatte ich mich schon auf das Projekt gefreut. Solche Projekten ermöglichen es, am kompletten Enstehungsprozess dabei zu sein. Angefangen von den meist sehr oberflächlichen Fachanforderungen bis zu Diskussionen über Details in der IT-Architektur des Dienstleisters – sowas mag ich.

Der externe Dienstleister hat den Kunden aber davon überzeugt, dass eine solche Rolle gar nicht notwendig sei. Klar, hätte ich an seiner Stelle auch gemacht …

Die Absage ist eigentlich gar nicht so dramatisch. Ich werde mich bei dem Kunden einfach in einigen Wochen wieder melden. Entweder das Projekt hat dann doch nicht in dieser Aufstellung geklappt – dann können sie mich immer noch anfordern. Oder alles läuft glatt – dann hat der Kunde gute Laune und kann mich vielleicht für ein anderes Projekt buchen.

Absurde Meetings

Es gibt Menschen, die sind unglaublich wichtig. Die sind so wichtig, dass es fast unmöglich ist, sich mit den Leuten zu treffen.

Sehr gerne bekommt man dann Termine in der Art „Ich fahre um 16:00 Uhr zum Flughafen. Sie können mit ins Auto steigen. Wir haben dann 20 Minuten Zeit“

Mein neues Highlight:
Ein Kollege mus von Frankfurt nach Hamburg, steigt dort ins Flugzeug und fliegt mit einem dieser wichtigen Leute nach München – hat also rund eine Stunde Termin – der absolute Luxus. Anschließend fliegt er wieder nach Frankfurt.

Was für eine Verschwendung …

mod_rails ist wieder draußen

Nach mehreren schlaflosen Nächten habe ich mod_rails aus einem großen Projekt wieder entfernt.
Jetzt werkeln nginx&mongrel_cluster wieder.

Das Problem lag daran, dass mit mod_rails nach 4-5 Stunden der Server keine Anfragen mehr angenommen hat. Außerdem lief ständig der Speicher über.

Ich hoffe nun auf die nächste Version, vielleicht klappt es ja damit besser.

Spaß mit modrails / passenger und Speicherproblemen

modrailsaka passenger ist wie mod_php für Rails (ja, jetzt wird es technisch).

Man kann mit passenger extrem einfach Rails Anwendungen unter Apache laufen lassen. Leider haben viele Leute Speicherprobleme im Zusammenhang mit passenger gemeldet. Ich hatte dazu letzte Nacht ein sehr seltsames Erlebnis:

Eine große Rails Anwendung sollte auf einen neuen (virtualisierten) Server umziehen. Sicherheitshalber habe ich dem Server 2GB Speicher gegeben. Leider schien dies für passenger nicht zu reichen. Selbst mit nur 3 oder 4 Instanzen habe ich den Speicher zu >80% verbraucht. Und nach spät. 1-2 Stunden fing die Maschine an zu swappen oder Apache wollte gar nicht mehr mitspielen.

Da ich aber mal schlafen wollte, habe ich den Server von 2GB auf 3GB erhöht. Das ging aber leider nicht, da nicht mehr gengu Speicher für diese virtuelle Maschine verfügbar war. Ok, aber 2.3GB waren möglich – besser als nichts.

Also die Maschine mit dem leicht höheren Speichern neu gestartet. Ergebnis: Statt 1.7GB haben die Anwendungen nur noch 500Mb Speicher verbraucht. Also hätten die 2GB auch gereicht…

Auf jeden Fall ist es extrem kompliziert, passenger und Apache vernünftig zu konfigurieren. Meine Ergebnisse bislang:

1. Lieber weniger Instanzen aufsetzen:
RailsMaxPoolSize 4
RailsPoolIdleTime 800

3 ist ok, ab 6 wird es bei mir komischerweise wieder langsamer. Standard für RailsMaxPoolSize ist 20 – das würde ich mich
nicht trauen.
RailsPoolIdleZime habe ich einfach hoch gesetzt. Warum sollte ich eine Instanz wieder beenden? Braucht duch nur Zeit zum Neustart. Die Gefahr ist natürlich, dass die einzelnen Prozesse immer mehr Speicher verbrauchen. Das werde ich beobachten.

2. Apache prefork vs. Apache worker: prefork
Bei den Einstellungen muss man einfach mal ein wenig experimentieren.
Hier sind meine, but ymmw:


StartServers 3
MinSpareServers 2
MaxSpareServers 4
MaxClients 50
MaxRequestsPerChild 0

Wenn das dann erstmal läuft, rennt der Server wirklich gut. Ich erkenne einen spürbaren Vorteil gegebenüber einem mongrel-cluster