Archiv für den Monat: Juli 2007

Ruby On Rails: Einfach ist besser

Folgendes Problem: Ich hatte zwei Listen. In Liste 2 sollten nur die Elemente zu sehen sein, die nicht schon in Liste 1 vorhanden sind.

Nachdem ich 10 Minuten gegrübelt habe, ich ich einfach mal „Liste2 – Liste1“ versucht. Und siehe da: Es klappt.

Dinge, die früher unter Turbo-Pascal nicht so einfach waren …

Tipp: Mindmeister

Wie viele von uns auch, habe ich mich im Laufe der Zeit sehr an Mindmaps gewöhnt. Normalerweise nehme ich dafür FreeMind. FreeMind hat den Vorteil, dass es in Java geschrieben ist und daher auf vielen Plattformen läuft. Außerdem ist es kostenlos.

Sehr hübsch finde ich allerdings auch das Onlinetol Mindmeister

Anmerkung am Rande: Mindmeister ist eine Rails Applikation. Ich bin darüber gestolpert, als ich mir deutschsprachige Rails Sites angeschaut habe.

Ein Vorteil dieser Site: Man kann sich kostenlos anmelden und MindManager Dateien (wie auch Freemind) importieren. MindManager ist ein kommerzielles MindMap Programm. Es passiert mir immer wieder, dass mir in einem Projekt ein Kollege eine MindManager Datei schickt. Ich habe mich aber bislang immer geweigert, eine Lizenz zu kaufen – ich habe ja FreeMind.
Mit Mindmeister kann ich diese Dateien jetzt lesen und (wenn ich den kostenpflichtigen Account kaufe) sogar in Freemind umwandeln.

Update: Freemind kann (in der aktuellen Version) auch MindManager einlesen. Wieder was gelernt …

Außerdem kann man mit Mindmeister MindMaps im Team erstellen und veröffentlichen.

Ein Wort allerdings zum Design: Ich kann dieses Pink, Mint, Hellblau nicht mehr sehen. Warum nehmen alle Web 2.0 Sites genau diese 3 Farben?!? Haben die früher zuviel MiamiVice geschaut?

Tipp: Weltmarktführer

Da ich momentan wenig unterwegs bin, komme ich gar nicht dazu, mir Zeitschriften zu kaufen. Die aktuelle brand1 aber hat eine nette DVD als Beilage:

Weltmarktführer, die Geschichte des Tan Sieckmann

Es geht in dem Film um den Niedergang der Firma Biodata, eine der Firmen, die in der New Ecomomy Zeit kurz leuchteten um anschließend zu verglühen. Biodata hatte den besten Börsengang aller Zeiten hingelegt. Dies lag allerdings weniger an den IT Produkten, sondern daran, dass viele Leute dachten, Biodata sei eine Biotech Firma …

Meine Erinnerungen an Biodata: Ich sollte dort eine auf eine von mir geschriebene Software schulen. Ab Abend vor der Schulung erfahre ich nebenbei, dass es darum geht, indische Entwickler zu schulen. Tja, da konnte ich meine deutschen Folien also erstmal neu schreiben.
Nach dem ersten Tag bin ich dann zu meinem Hotel. Das hatte Biodata für mich gebucht. Dumm nur, dass die im Hotel einen Ruhetag hatten und ich niemanden dort gefunden habe. Jetzt muss man wissen: Biodata hatte seinen Firmensitz in einer netten Burg mitten im Sauerland – also mitten im Nichts. Also ab ins Auto und verzweifelt durch die Dörfer gefahren. Irgendwann habe dann aber ein nettes Hotel gefunden.

Wie auch immer. Der Film ist wirklich gut. und da man die Brand1 auch gut lesen kann, lohnt sich der Kauf.

Warnung: Die DVD auf keinen Fall mit einem Mac abspielen. Die Laufwerke kommen wohl mit der DVD nicht zurecht und man darf anschließend die DVD per Hand ‚rausfummeln.

Rails Bug? “Expected FOO do FOO-Controller

Das war seltsam.

Auf meinem Entwicklungsrechner klappte alles super. Als ich es aber auf den Server spielte, bekam ich die die Fehlermeldung, dass er einen Controller (den edit_controller) nicht finden könnte. Allerdings gab es die entsprechende Datei.

Google brachte mich ein wenig weiter. Das Problem scheinen mehrere Leute zu haben. Bei mir hat folgendes funktioniert:
In der Konfiguration (enviroments/production.rb) die Werte:
config.action_controller.consider_all_requests_local = false
config.action_controller.perform_caching = false

ändern. Anschließend neustarten und: Es klappt.
Dann habe ich das Caching wieder auf TRUE gesetzt und: Es klappt immer noch.

Da scheint sich ein gemeiner Bug in das Caching eingeschlichen zu haben.

Ruby on Rails 1: Das Datenmodell

Ich hatte ja schon vor laaanger Zeit mal ein wenig über Ruby geschrieben.

Da mein aktuelles Projekt abgeschlossen ist und ich jetzt ein wenig Zeit für ein paar eigene Projekte eingeplant habe (hach, welch ein Luxus), beschäftige ich mit jetzt wieder mehr mit Ruby On Rails (RoR). In nächster Zeit könnte es also hier ein wenig technischer werden.

Es gibt reichlich RoR Einführungen im Web. Ich beschränke mich daher, quasi als Anheizer nur ein paar Highlights der Sprache bzw. des Frameworks zu beschreiben

Zum Anfang:
Wer selber damit herumspielen möchte, dem sei Für Windows Instant Rails empfohlen. Das ist eine Umgebung, welche ohne Installation mit allem Zip und Zap (Web-Server, MySQL) läuft. Unter Mac OS gibt es das auch: Locomotive. Es kommt sogar noch besser: Die neue MacOS Version 10.5. – Leopard – wird RoR Support integriert haben!

So, jetzt aber los.

Was ist die eigentliche Idee?
Ruby On Rails ist ein MVC Framework. MVC steht für Modell, View, Controller. Es geht dabei um die Trennung von Datenmodell, Oberfläche und Geschäftslogik.
MVC Anwendungen sind sehr flexibel. Durch die Trennung der einzelnen Bereiche lässt sich z.B. einfach die Datenbank austauschen oder eine Applikation für verschiedene Frontends schreiben.

Teil 1: Das Modell
Sprechen wir zuerst über das Datenmodell. Es gibt dabei u.a. folgende Anforderungen:
1. Ich will die Definition meiner Daten nicht ständig wiederholen müssen.
2. Datenobjekte stehen untereinander in Beziehung. z.B. hat eine Person mehrere Adressen
3. Ich will möglichst unabhängig von der benutzen Datenbank sein
4. Andere Entwickler sollen schnell verstehen, was ich programmiert habe.

Ok, schauen wir uns mal an, wie RoR das löst.
Zuerst legen wir ein Projekt an. Ich arbeite gerade an einem Projekt zum Vokabellernen (URL kommt in ein paar Tagen). Also legen wir erstmal das Projekt an:
rails lernkartei
Dieser Befehl legt das Verzeichnis lernkartei an und erzeugt einige Dateien.
Es soll User geben, die User haben Lernkästen und in den Lernkästen gibt es Lernkarten. Also los:
cd lernkartei
ruby script/generate model user
ruby script/generate model box
ruby script/generate model card

Damit haben wir in dem Verzeichnis db/migrate 3 neue Dateien:
001_create_users.rb
002_create_boxes.rb
003_create_cards.rb

Hä?!? Warum steht denn dort „users“ statt „user“? Tja, RoR versucht Einzahl von Mehrzahl zu unterscheiden. Ein Objekt mit dem Namen card wird also in der Tabelle cards gespeichert.

In diesen Dateien wird nun das Datenmodell definiert. Nur mal als Beispiel, hier die Lernkarte:
class CreateLernkartes < ActiveRecord::Migration def self.up create_table :lernkartes do |t| t.column :frage, :string, :null=> false
t.column :antwort, :string, :null => false
t.column :anmerkung, :string, :default => ""
t.column box_id, :integer
end
end

def self.down
drop_table :lernkartes
end
end

Ich denke, dass kann man recht gut lesen.
(Definition für User und Box lassen ich hier aus)

So, und jetzt wird es spannend. Wir erinnern uns, Benutzer haben Lernboxen und die Boxen haben Karten.
Datei: app/models/user.rb
class User < ActiveRecord::Base has_many :boxes end

Ok, jetzt die Box.
Datei: app/models/box.rb
class Box < ActiveRecord::Base belongs_to :user has_many :cards end

Ist das cool, oder was? Auch, wer gar keine Ahnung von Softwareentwicklung hat, versteht das: Eine Box gehört zu Benutzern und besitzt viele Karten. Man kann sämtliche Beziehungen abbilden, also 1:1, 1:N und M:N.

Jetzt sagen wir rails, dass wir das Datenmodell in der Datenbank anlegen wollen:
rake db:migrate

Und wie durch Zauberei werden die benötigten Tabellen angelegt (ok: nur, wenn man in db/database.yaml die richtigen Parameter eingetragen hat).

Wie greift man nun auf die Daten zu? So zum Beispiel:
currentUser = User.find_by_name("heinzel") # die SQL Abfrage wird hier gekapselt
currentBoxes= currentUser.boxes # hier greifen wir also auf die Objekte zu
aCard = Box.find_by_frage("dog")
aCard = Box.find_by_frage_and_antwort("dog","hund") # Nett, was? Man kann auch so suchen
firstUser = User.find(:first)

Wer will, kann auch SQL benutzen: User.find_by_sql(„select * from (usw usw.)“)

Projektvermittler

Auch wenn ich meine Projekt fast ausschließlich über persönliche Empfehlungen bekomme, ich freue mich immer sehr über den Anruf eines Vermittlers. Man weiß ja nie, was dabei heraus kommt. Und außerdem halte ich es für eine Art Wertschätzung, wenn mich ein Vermittler für gut genug hält, dass er sich Zeit für ein Gespräch mit mir nimmt.

Wenn ich aber die letzten beiden Kapitel des neuen Harry-Potters lese und mich dabei gleich 2 Vermittler anrufen, werde ich schon etwas ungeduldig. 2 Wochen ruft mich niemand an. Aber ausgerechnet jetzt.

Für die letzten 10 Seiten habe ich mein Telefon ausgeschaltet …

IQ Test

Das kannte ich noch nicht. Ich muss zugeben, ich bin durchgefallen.

Aufgabe: Bitte alle „F“ in dem Text zählen:

FINISHED FILES ARE THE RE-
SULT OF YEARS OF SCIENTIF-
IC STUDY COMBINED WITH THE
EXPERIENCE OF YEARS

Zur Auflösung:
Weiterlesen

Faustformeln Aufwandsabschätzung

Aufwandsabschätzungen in IT Projekten sind immer ein Problem. Um eine solide Abschätzung zu machen, benötigt man viele Informationen und viel Zeit.
Es gibt zu dem Thema verschiedene mehr oder weniger komplexe Methoden. Ein Beispiel ist das Function Point Verfahren. In der Praxis sieht es aber – leider – oftmals so aus: Fachbereich oder Geschäftsführung haben eine Idee und würden sich freuen, wenn das Thema in einer vorgegebenen Zeit umgesetzt ist. Eine Antwort – ob das alles so klappt – muss bis maximal binne 2 Stunden erfolgen und natürlich gibt es mal wieder viel zu wenig Informationen.

Trotzdem schaffen es gute Projektleiter, auch in solchen Situationen eine einigermaßen gute Abschätzung auf den Tisch zu bringen. Wie sie das machen? Tja, ich habe lange mit mir gerungen, ob ich die bittere Wahrheit wirklich ausplaudern soll. Ich befürchte, ich werde jetzt aus der Gilde der Projektleiter wegen Geheimnisverrat ausgeschlossen. Nun gut, die Wahrheit ist manchmal hart, aber einer muss es ja sagen:

Wahrheit 1:
80% aller Projektleiter machen ihre Aufwandsabschätzungen aus dem Bauch heraus.

Ok, das klingt nicht gut. Ich formuliere es vielleicht anders:

Wahrheit 1B:
80% aller Projektleiter machen ihre Aufwandsabschätzungen aus der Erfahrung heraus.

Dabei gibt es Projektleiter, die das wirklich drauf haben. Leider gibt es da noch die …

… Wahrheit 2:
80% dieser Projektleiter haben nicht genug Erfahrung, um Aufwandsabschätzungen zu machen.

Oftmals sind die Anforderungen auch so schwammig, dass eine saubere Abschätzung einfach unmöglich ist. Um trotzdem auf eine einigermaßen saubere Abschätzung zu kommen, habe ich mir im Laufe der Zeit ein paar Regeln definiert mit denen man erstaunlich korrekten Vorhersagen machen kann. Und hier sind sie nun:

Die Guerilla-Projektleiter Faustformeln zur Aufwandsabschätzung

1. Die Verhältnisregel
In einem sauberen Projekt brauchen Analyse-Design, Entwicklung und Test jeweils 1/3 der Zeit.Bei Analyse und Design benötigt das Lastenheft (die Anforderungssammlung) 1/3 der Zeit.
Hat also ein Fachbereich eine Woche für ein Lastenheft benötigt, dauert das komplette Projekt mindestens 9 Wochen (eine Wochen Lastenheft 2 Wochen Pflichtenheft und Design, 3 Wochen Entwicklung, 3 Wochen Test).

2. Die Webseitenregel
Jede Web-Seite benötigt einen Tag Entwicklung.
Es gibt Seiten, die sind in 10 Minuten fertig (z.B. Impressum – es sei denn, die Rechtsabteilung zickt ‚rum). Bestellseiten für eine E-Commerce Seite benötigen vielleicht ein paar Tage. In der Summe kommt es aber gut hin: Einen Tag pro Seite. Bei Frontends, die nicht im Web sind, ist es schwieriger. Die Regel funktioniert daher so gut, da es im Web einen engen Zusammenhang zwischen Seiten und Prozessschritten gibt. bei anderen Oberflächen (wie auch bei Ajax-Oberflächen) muss man die Bildschirmseiten daher etwas anders betrachten.

3. Die Schnittstellenregel
Jede Schnittstelle zu einem externen System benötigt 5 Arbeitstage.
Diese Regel ist in letzter Zeit ein wenig aufgeweicht. Es gibt Web-Services, die habe ich in 3 Minuten angebunden. Aber die Erfahrung zeigt einfach, dass Schnittstellen immer länger brauchen als man vorher dachte. Dabei ist Technik und Syntax der Schnittstelle selten ein Problem. Oftmals finden sich beim Test viele Probleme mit der Semantik (also der Bedeutung der übertragenen Daten). Schnittstellen kann man gar nicht oft genug testen.

4. Die QS und Konfigurationsregeln
Für die Themen Qualitätssicherung, Paketverwaltung, Konfigurationsmanagement sollte man 20% auf das Projekt aufschlagen. Im oberen Beispiel (9 Wochen) sind wir also bei 11 Wochen.

5. Die Dokumentationsregel
Für Dokumentation sollte man 20% auf das Projekt aufschlagen.

6. Die 1. Teamregeln
Softwareentwickler sind bzgl. ihrer Produktivität extrem unterschiedlich. Bei gleicher Qualität unterscheidet sich deren Geschwindigkeit bis zum Faktor 10. Daher sollte man bei jeder Abschätzung einen Buffer einplanen dessen Höhe individuell die Leistung des Teams wiederspiegelt: Mind. 20%, besser 50%, manchmal 100% der bisherigen Abschätzung.

6. Die 2. Teamregel
Wenn man statt 3, 6 Personen mit einer Aufgabe betraut, ist man nicht automatisch doppelt so schnell. Die Leute müssen koordiniert werden, sie werden krank usw. usw. Für jedes Teammitglied müssen 15% der theoretisch möglichen Produktivität für Koodination abgezogen werden. Das bedeutet: Ab ca. 7 (bis 10) Mitgliedern benötigt ein Team einen Teamleiter der sich nur um Koordination kümmert – das Projekt wird also in Teilprojekte zerteilt. 7-10 Teamleiter werden dann wieder zu einer Einheit zusammengefasst. Wichtig: Ich spreche hier von einer Ordnungsstruktur, nicht von einer Hierachie.

7. Die 6-Monate Regel
Komplexität zerstört jede Abschätzung. Komplexität ist nichts für uns Menschen. Die Erfahrung (und viele Unterschungen zeigen), dass Projekt mit einer Laufzeit von über 6 Monaten sehr, sehr selten den vorgegebenen Zeitrahmen einhalten. Wenn es Projekt also in seiner Planung eine Laufzeit von über 6 Monaten hat, muss man das Messer ansetzen. Das Projekt wird in mehrere möglichst unabhängige Teilprojekte zerteilt und neu geplant. Achtung Falle: Es ist absolut wichtig, Teilprojekte wirklich von Grund auf neu zu planen. Aus einem Projekt über 8 Monate macht man nicht einfach 2 Projekt über 4 Monate. Das ist grober Unfug.

Das klingt einfach, aber wie Zuverlässig ist diese Schätzung? Mit etwas Übung bekommt man so eine Genauigkeit von ca. 30% hin. das ist nicht besonders exakt, aber es ist viel besser als viele andere Abschätzungen.

Entwarnung

Glück im Unglück. Der Server wurde gar nicht gehackt.

Der Hoster hat IP-Bingo gespielt und die Anfragen auf den falschen Server geleitet.

Auch das darf nicht passieren. Wenn ich ein Angebot für Grundschüler online stelle und die URL plötzlich zu einem Erotik-Portal auflöst, könnte das keine gute Idee sein.

Ich werde mir wohl über kurz oder lang einen neuen Anbieter suchen müsse.

Hey Andreas: Hast du nicht Lust, für kleines Geld einen Ruby On Rails Server zu hosten?