Lebenszeichen!

Juli 5th, 2008

Wie schnell die Zeit vergeht! Anfänglich hatte ich vor, ungefähr jede Woche einen Beitrag auf diesem Blog zu veröffentlichen. In Wirklichkeit konnte ich ungefähr einen Zwei-Wochen-Rhythmus einhalten, womit ich ganz zufrieden war (schließlich hat dieser Blog einen engen Themenfokus).

So, nun hat sich aber längere Zeit nichts getan. Ich bin sehr beschäftigt mit dem Spekunauten-Projekt. Vorallem die Vorbereitung für Marketingmaßnahmen, aber auch die Implementierung weiterer Features kostet viel Zeit.

Leider musste ich dabei auch die Entwicklung meines geplanten Rails-Hosting Angebots vernachlässigen. Letzteres steht aber noch fest auf meiner To-Do-Liste und ich hoffe ich werde in Zukunft wieder etwas Zeit dafür finden.

Was das Bloggen betrifft- ich habe wieder ein paar Interessante Beiträge in der Pipeline, die ich demnächst veröffentlichen werde. So muss ich für einen anderen Auftrag zur Zeit etwas über den Tellerrand schauen und mich mit CakePHP beschäftigen. CakePHP ist ein MVC-Framework welches sich stark an Ruby on Rails anlehnt. Es gibt dort ein paar nette Ideen, aber durch die sprachlichen Unterschiede ist das entwickeln unter CakePHP natürlich nicht ganz so komfortabel wie unter Rails.

Also dann, schaut mal wieder vorbei.

P.S. Sehr gefreut habe ich mich über den ersten Kommentar, der nicht von einem Bekannten von mir (sondern von einem zufällig hier gelandeten Besucher) stammt.

Daten aus der IRB-Console speichern mit einer Zeile

Mai 27th, 2008

Rails bringt ein Konsolenskript mit, welches IRB mit der Rails-Umgebung lädt. Dort stehen dann alle im Rails-Projekt verwendeten Klassen zur Verfügung. Erreichen kann man diese Konsole unter der Eingabe von “ruby script/console [environment]” Wird keine Umgebung (environment) angegeben, ist die Development-Umgebung gewählt. Das bedeutet, die Datenbankverbindung wird zur Development-Datenbank aufgebaut. Alternativ kann man hier auch “production” (oder “test”, etc.) angeben.

Nun kann man beliebige Ruby-Befehle eingeben und das Ergebnis gleich begutachten. Aber darum soll es hier jetzt gar nicht im Detail gehen. Die Konsole ist ungeheuer praktisch, wenn man Daten aus der Datenbank auslesen möchte, die über komplexe Models verknüpft sind. Statt direkt auf der SQL-Konsole mit langen JOINs rumzubasteln, benutzt man einfach ein die Model-Klassen aus dem Rails-Projekt.

Dateien schreiben mit der File-Klasse

Aber wie bekommt man diese Daten aus der Konsole? Die File-Klasse ermöglicht es Dateien mit einem Block zu schreiben, so dass der ganze Befehl nur eine einzige Zeile benötigt:

File.open("output.txt", "w") { |f| f.puts "Ausgabe" }

Das erzeugt eine Datei output.txt im aktuellen Verzeichnis und schreibt den Inhalt “Ausgabe” hinein. (Das “w” als zweiter Parameter gibt den schreibmodus an, vorherige Inhalte der Datei werden gelöscht!)

Nehmen wir als einfaches Beispiel an, uns interessieren alle Benutzernamen eines fiktiven Projekts, nach Name sortiert. In der Konsole erhalten wir durch Eingabe von

User.find(:all, :order => :name)

eine solche Liste als Array von User-Objekten. Mit einem kurzen Block können wir die gewünschten Namen Ausgeben:

User.find(:all, :order => :name).each { |user| puts user.name }

Um diese Liste jetzt aus der Konsole zu bekommen, setzen wir diese Zeile innerhalb des File-Blocks ein. Wichtig hierbei ist, dass die puts-Anweisung auf das File-Objekt angewendet wird, damit die Ausgabe dorthin umgeleitet wird!

File.open("output.txt", "w") { |f| User.find(:all, :order => :name).each { |user| f.puts user.name }  }

Fertig! Jetzt kann die Konsole mit der Eingabe von quit oder exit beendet werden und im gleichen Verzeichnis findet sich eine Datei mit dem Namen output.txt, die die Liste enthält.

Die Abfrage im Beispiel ist natürlich trivial- bei komplexeren Abfragen mit viel Model-Logik ist es aber eine große Erleichterung.

Charts und Diagramme mit der Google-API in Rails erzeugen

Mai 21st, 2008

Herzlich Willkommen zum ersten Artikel in meiner neuen Kategorie “Gem Review” :-)

Vor einen halben Jahr wurde von Google die Google Chart API veröffentlicht. Völlig unkompliziert, ohne Anmeldung, API-Keys oder weitere Einschränkungen können dort schicke Diagramme erzeugt werden. Alle notwendigen Parameter werden mit der Bild-URL übergeben.

Damit genug Datenpunkte zum Erstellen eines Diagramms in die URL passen, verwendet die API eine ungewöhnliche Kodierung der Zahlen aus Buchstaben und Sonderzeichen.

Um sich darüber nicht den Kopf zerbrechen zu müssen, gibt es zwei Gem-Lösungen für Ruby: gchartrb und googlecharts. Ich habe zwar zuerst den Blog-Beintrag über gchartrb gefunden, bin dann aber über den Kommentar dort zu einem Blog-Beitrag über googlecharts gekommen, welcher mich mehr angesprochen hat. U.a. deshalb weil mir dort direkt ein Beispielcode entgegensprang.

Im Moment gibt es wohl das bestreben, die beiden Projekte zu vereinen unter gchart, welches allerdings erst mit Version 0.5 angegeben wird. Ich verwende daher erstmal das googlecharts-Gem.

Installation

Installiert wird das gem durch Eingabe von
gem install googlecharts
Rails-Projekte, die dieses Gem verwenden, sollten in config/environment.rb noch die Zeile

gem 'googlecharts'

hinzufügen- damit wird erreicht, dass die Anwendung nicht startet, sollte das Gem nicht installiert sein.

In jedem Controller, dessen Views googlechart benutzen, sollte require ‘gchart’ eingefügt werden. Falls diese Charts sowieso von fast jedem View benutzt werden, kann man das require auch in application.rb (ApplicationController) einfügen, dann ist es überall geladen.