Wir haben jetzt mal eine Seite zu unseren Ruby-Kursen in Berlin eingerichtet.
Ruby-Kurse in Berlin
11 08 2009Kommentare : Kommentar schreiben »
Schlagworte: Berlin, Kurs, Ruby
Kategorien : Berlin, Rails, Ruby, Ruby on Rails
Gems für Ruby 1.9.*
27 02 2009Da viele gems (aber natürlich auch andere Programme) noch nicht so gut mit Ruby 1.9.* zusammenarbeiten (ich habe mich darüber auch schon in www.rubyforen.de ausgelassen, weil es mich für meine eigenen gems auch betrifft, aber um dies zu testen und zu bereinigen, sind meine gems von anderen gems abhängig, die noch nicht mit 1.9 funktionieren, die wiederum von anderen gems abhängig sind, …. usw.).
Seit kurzem gibt es aber ein neue Seite, die es sich zur Aufgabe gemacht hat, zusammenzutragen, welche gems mit Ruby 1.9 funktionieren und welche nicht.
Man kann dort ein Gem auswählen, Version, Betriebssystem, Kommentar und seinen eigenen Namen angeben, sowie, ob das betreffende gem bei einem funktioniert hat oder nicht.
Eine sehr gute Sache, wie ich finde.
Andere Besucher können dann wiederum sehen, ob es bei einem bestimmten gem Probleme mit Ruby 1.9 gibt oder nicht, ohne es erst selbst ausprobieren zu müssen.
Man sollte natürlich auf die Versionsnummer der getesteten gems achten, da die neueste Version eventuell schon korrigiert wurde und nun keine Probleme mit Ruby 1.9 mehr macht.
Desweiteren ist das natürlich auch eine gute Sache für die Autoren der gems, da sie sehen, ob ihre Programme auch in Ruby 1.9 fehlerfrei laufen – insbesondere auch in Bezug auf unterschiedliche Plattformen
Ich weiß, daß meine eigenen gems auch noch nicht ganz perfekt unter Ruby 1.9 laufen, aber es sollte eigentlich keine allzugroßen Fehlerkorrekturen geben. Leider kann ich da aber zur Zeit nicht so recht weiter machen, da mir auch für die Entwicklung und Veröffentlichung noch einige Tools fehlen, die derzeit halt auch noch nicht nach Ruby 1.9 rübergezogen wurden. Das ist leider etwas frustrierend.
Kommentare : 3 Kommentare »
Kategorien : Ruby, Softwareentwicklung
Roo – Beispiele
10 12 2008Ich habe mal ein bißchen recherchiert, wer und wo roo verwendet wird (als Autor ist man da natürlich schon etwas neugierig).
Zum einen scheint es öfters generell in Rails-Anwendungen verwendet zu werden. Diesen Eindruck habe ich gewonnen anhand der Fragen und Feature-Requests in der roo-Group.
Ein kurzes Tutorial unter http://rubyonwindows.blogspot.com/2008/01/parsing-spreadsheets-with-roo-gem.html.
Ein Beispielprogramm zum Benutzen von Google-Spreadsheets von iamarf unter http://iamarf.wordpress.com/2008/11/19/cck08-a-little-learning-experience/.
Bei koders.com (http://www.koders.com/ruby/fidD47DEFAE86EEF70EE26921E8F46C0A52138EFDFC.aspx?s=proxy) ein paar Beispielprogramme, aber das sind auch nur die Beispielsprogramme innerhalb meines Gems.
Ein italienisches Beispielprogramm: http://www.ruby-forum.com/topic/170477
Oh, roo wird hier sogar aufgeführt als eine der coolsten Tools, die in der letzten Zeit für Rails erschienen sind (roo ist zwar nicht ausschließlich für Rails gedacht, kann aber auch da natürlich benutzt werden):
Und dann, was ich überhaupt nicht mitbekommen habe, in einem Rails-Podcast aus Amerika wird roo auch kurz erwähnt (http://www.railsenvy.com/2007/12/19/rails-envy-podcast-episode-11)
Kommentare : Kommentar schreiben »
Kategorien : Roo, Ruby, Ruby on Rails
Warum wir Unit-Tests für Ruby-Programmme schreiben sollten
29 12 2007Ein schönes Beispiel, wie nützlich Tests für Ruby (und auch für andere Sprachen) Programme sein können, habe ich vorgestern erlebt.
Ich habe ein Gem erstellt, welche Spreadsheet-Dateien verarbeiten kann (http://roo.rubyforge.org).
In einer Newsgroup fragte nun jemand, mit welchem Tool man am besten Excel-Dateien in CSV-Dateien umwandeln kann. Ich habe darauf geanwortet, daß das mit ‘roo’ gehen würde. Kurz darauf kam die Antwort, daß das nicht funktionieren würde, und daß die Methode ‘to_csv’ welche in meinem Programm eine CSV-Ausgabe entweder nach stdout oder in eine Datei schreibt, nur für Openoffice- und Google-Spreadsheets, nicht jedoch für Excel-Spreadsheets funktionieren würde.
Ich war ziemlich verblüfft, weil ich sicher war, daß ich dies auf für Excel-Dateien schon implementiert hatte und daß dies auch schon funktioniert hätte.
Ich habe das dann bei mir überprüft – und tatsächlich, bei Excel-Dateien funktionierte es nicht.
Was war passiert? Wie konnte das passieren, wo ich doch speziell für dieses Gem eigentlich alle Funktionen mit Testfällen abgedeckt hatte?
Ich muß einschieben, daß ich generell ein großer Freund von Test Driven Development bin und ich auch für dieses Programm danach vorgegangen bin, was eine große Hilfe bei allen Erweiterungen ist, weil man einfach die vorhandenen Testfälle immer wieder ablaufen lassen kann, um zu testen, ob alles noch wie gewünscht funktioniert.
Die Lösung des Problems war dann relativ simpel: Ich hatte beim ersten Entwurf meines Programms als erstes die Klasse ‘Openoffice’ (Spreadsheets) geschrieben und später die Klasse ‘Excel’ welche eine Kind-Klasse von Openoffice war, und deshalb auch deren Methode ‘to_csv’ für die Ausgabe als CSV-Datei geerbt hatte. So weit, so gut.
Im Lauf der späteren Entwicklung des Programms habe ich entschieden, daß dieses Design für den Benutzer zwar funktioniert hat, im Sinn der reinen OO-Lehre aber nicht ganz korrekt war, weil ein Excel-Objekt natürlich kein Kind-Objekt einer Openoffice-Klasse ist.
Ich habe dann eine generische Klasse ‘GenericSpreadsheet’ eingeführt, von der sowohl die Openoffice- als auch die Excel-Klasse (und später auch noch die Google-Klasse) erben.
Im OO-Sinn war dieses Design nun wesentlich besser, aber die Methode ‘to_csv’ war nun nur in der Openoffice-Klasse und nicht in der Excel-Klasse vorhanden. Ich hatte es in Kommentaren zwar schon zum Auslagern in die allgemeine Spreadsheet-Klasse markiert, dies aber noch nicht wirklich getan.
So – die Excel-Klasse war nun ihrer ‘to_csv’ Methode beraubt, da sie nicht mehr von Openoffice erbt.
Warum haben das die Tests nicht aufgedeckt?
Es gab zwar auch für Excel-Objekt Tests, die die CSV-Ausgabe abgedeckt haben, allerdings habe ich dieses Test nur im Rahmen von Tests für ziemlich große Spreadsheet-Dateien mit mehreren tausend Zeilen verwendet. Da diese Tests aber im Vergleich zu kleineren Spreadsheet-Testdateien relativ lange dauerten, habe ich die lange laufenden Test mit einem speziellen Schalter wahlweise abschaltbar gemacht. Dies führte dazu, daß mir dieser spezielle Fehler durch die Lappen gegangen ist, weil ich diese lang laufenden Test nicht mehr ausgeführt hatte.
Die Lösung wäre natürlich gewesen (und habe ich jetzt auch als Testfälle eingebaut), die CSV-Ausgabe nicht nur im Rahmen von großen Spreadsheets zu testen, sondern generell und auch mit kleineren Test-Spreadsheets.
Kommentare : Kommentar schreiben »
Kategorien : Roo, Ruby, Test-Driven-Development
roo – Version 0.8.0 fertig
16 12 2007Es ist vollbracht. Heute habe ich die Version 0.8.0 von Roo veröffentlicht. Die größte Neuerung daran ist, daß man mit roo nun auch auf Google Online Spreadsheets lesend und sogar schreibend zugreifen kann.
Desweiteren wurde die innere Strukur der Klassen etwas bereinigt, was für den Anwender jedoch keine Auswirkungen hat – mir hingegen war es wichtig, eine etwas bessere Struktur reinzubringen, was sich auch für die Zukunft bezahlt macht, wenn noch weitere Spreadsheet-Typen aufgenommen werden sollten.
Hiermit kann man jetzt von Ruby Programmen aus die eigenen Spreadsheets bei Google abrufen oder ändern. Außerdem kann man sogar fremde Spreadsheets von anderen Personen bearbeiten – soweit man dafür vom jeweiligen Eigentümer entsprechend authorisiert wurde.
Kommentare : Kommentar schreiben »
Kategorien : Roo, Ruby, open-source
roo – Version 0.8.0 (bald fertig)
9 12 2007An diesem Wochenende, wenn im Büro sonst niemand anwesend war, habe ich mich hingesetzt und den größten Teil der Version 0.8.0 von roo geschrieben, mit der nun auch Google-Spreadsheets möglich sind.
Im großen und ganzen sieht es gut aus – kleinere Ungereimtheiten müssen noch getestet und korrigiert werden.
Aber es ist schon cool, wenn man von der irb aus auf seine entfernten Spreadsheets auf dem Google-Server zugreifen kann.
Kommentare : Kommentar schreiben »
Kategorien : Roo, Ruby, open-source
roo – Google Spreadsheets in Kürze auch möglich
8 12 2007Lange aufgeschoben – habe ich mich in den letzten Tagen aufgemacht, jetzt auch den Zugriff auf Google-Spreadsheets von meinem gem „roo“ zu ermöglichen.
Google-Spreadsheets sind wirklich eine coole Sache, zum einen, daß Spreadsheets von jedem Rechner aus aufzurufen sind und zum anderen kann man sich tolle Anwendungen ausdenken, bei denen Daten aus eigenen oder fremden Spreadsheets im Netz gelesen und sogar geschrieben werden können.
Habt noch etwas Geduld – in den nächsten Tagen wird roo auch Google-Spreadsheets bearbeiten können.
Kommentare : Kommentar schreiben »
Kategorien : Roo, Ruby, open-source
roo – Release 0.7.0 veröffentlicht
26 11 2007Ich habe wieder etwas an roo weiter entwickelt und nach ausführlichen Tests die Version 0.7.0 veröffentlicht.
Die wesentliche Neuerung ist, daß alle Methoden, die bisher mit dem zuvor gesetzten Default-Sheet arbeiten, nun auch mit einem optionalen sheet-Parameter aufgerufen werden können, um ein sheet anzusprechen, das nicht das aktuelle Default-Sheet ist. Dies ist ganz praktisch, wenn man zusätzlich auf Werte eines anderen Sheets zugreifen möchte.
Desweiteren wurden folgenden kleinere Erweiterungen vorgenommen:
- Excel: CSV-Export optimiert. Dies wirkt sich insbesondere bei etwas größeren Spreadsheets auf die Geschwindigkeit (positiv) aus.
- column-Methode, um eine gesamte Spalte eines Spreadsheets anzusprechen
- info-Methode – Liefert allgemeine Informationen über das Spreadsheet als Text zurück
- find-Methode – eine GANZ SIMPLE Möglichkeit, mit Bedingungen a la Active-Record zu arbeiten. Wie diese anzuwenden ist: Siehe die mitgelieferten Testfälle.
Kommentare : Kommentar schreiben »
Kategorien : Roo, Ruby, open-source
ruby gem of the week 2007/27
17 08 2007Installation:
gem install blinkenlights
Was kann man damit machen?
Blinkenlights erlaubt es, die LED (auf der Tastatur) für Scroll-Lock, Caps-Lock und Num-Lock ein- und auszuschalten.
Das könnte man nun verwenden, um z.B. neu eingegangene Mails durch Blinken anzuzeigen. Oder man könnte Webserver damit überwachen und durch hektischen Blinken anzeigen, dass ein Fehler aufgetreten ist. Der Phantasie sind hier keine Grenzen gesetzt.
Der Autor hat auch noch ein schönes Beispiel im example-Directory seines Gems beigelegt: Je nach Systembelastung (mit xload auch graphisch anzeigbar), blinken keine, eine, zwei oder drei LEDs.
Hier nun einige Beispiele mit Erläuterungen:
require ‘rubygems’
require ‘blinkenlights’
# BlinkenLights laeuft sowohl unter Linux als auch unter Windows
# Aufruf mit Block:
BlinkenLights.open do |bl|
bl.off
#bl.circle
bl.flash(5)
end
#hierbei wird .close automatisch nach Verlassen des Block ausgefuehrt und
#der Status zurueckgesetzt
# oder mit explizitem .close
bl = BlinkenLights.new
bl.off
bl.circle
bl.close
bl.on # schaltet alle LEDs ein
bl.off # schaltet alle LEDs aus
bl.flash(5) # schaltet alle LEDS ein und wieder aus, optional Leuchtdauer in Sekunden, falls fehlend, so schnell als moeglich
bl.digital = 6 # setzt die LEDs entsprechend der binaeren Darstellung der angegegbenen Zahl (0-7), d.h. streng genommen darf man auch beliebige Zahlen uebergeben, intern wird aber nur der Rest beim Teilen durch 8 verwendet, d.h. die letzten 3 Bit der Zahl werden angezeigt.
bl.digital # gibt analog zum Setzen mit .digital= den Status zurueck, auf den die LEDs gerade gesetzt sind
bl.left_to_right(3) # blinkt von links nach rechts, Verzoegerung angebbar
bl.right_to_left(2) # das ganze andersherum
bl.circle(1) # zuerst von links nach rechts, dann wieder zuerueck
bl.reverse_circle(1) # oder auch anderherum
bl.random(verzoegerung) # zufaelligen Wert setzen, Verzoegerung angebbar
bl.converge(verzoegerung) # blinkt von aussen nach innen, Verzoegerung angebbar
bl.diverge(verzoegerung) # blinkt von innen nach aussen
bl.scr # Status der ScrollLock Taste (bzw. der LED)
bl.scr=(true) # schaltet die Taste ein oder aus (true/false)
bl.toggle.scr # wird angeschaltet falls vorher aus, bzw. andersherum
bl.cap # die gleichen Methoden fuer die Caps-Lock LED
bl.cap=(true)
bl.toggle_cap
bl.num # und auch fuer die Num-Lock LED
bl.num=(true)
bl.toggle_num
# das gleiche wie die obigen 9 Methoden gibt es auch mit der Benennung der
# LEDS als ‘left’, ‘middle’ und ‘right’
#
bl.set(0-7) # setzt den Wert der LEDs mit dieser Integer-Nummer
bl.get # ermittelt Wert der LEDs als Integer-Nummer
# diese beiden Methoden sind ziemlich low-level.
# Schoener sind die uebrigen Methoden zum Setzen, bzw. Abfragen der LEDs
bl.to_s # liefert Informationen zu einem Objekt
bl.inspect # alias zu .to_s
bl.reset # setzt auf den Status vor .new zurueck
Ausblick: siehe vorherige Artikel der Serie
Kommentare : 1 Kommentar »
Kategorien : Ruby, Uncategorized
ruby gem of the week 2007/26
16 08 2007Das Gem dieser Woche ist für Leute, die statistische Funktionen benötigen, aber nicht alles
wieder selbst implementieren wollen. Wozu auch, wenn ein einfaches
sudo gem install statarray
und anschließendes Verwenden in eigenen Programmen ausreicht?
Statarray verwendet Elemente, die in einem Array zur Verfügung stehen. Das können zufällige Würfe eines Würfels mit den Zahlen 1 bis 6 sein, Schülernoten einer Klassenarbeit oder irgenwelche anderen Meßwerte – kurz, alles was statistisch ausgewertet werden soll.
Beispielprogramm zur Verwendung dieses Gems:
require 'rubygems' require 'statarray' # neues Objekt wie ein Array a = StatArray.new([1,2,3,4,5,6]) # ... oder Umwandlung aus einem bereits vorhandenem Array b = [1,2,3,4,5,6].to_statarray # Mittelwert puts a.mean # Median puts a.median # Standardabweichung puts a.stddev # Standardfehler puts a.stderr # Varianz puts a.variance
fuer eine schon formatierte Ausgabe von Ergebnissen kann man folgendes verwenden:
puts StatArray.stats_header
puts a.stats
welches diese formatierte Ausgabe liefert: Sum Avg. Std.dev. Min. Max. Median Count 21.00 3.50 1.87 1.00 6.00 3.50 6.00
insgesamt stehen folgende Methoden zur Verfuegung:
absolute_mean_difference arithmetic_mean atkinson_index cdf ci climit gini_coefficient gini_coefficient2 kullback_leibler_divergence kurtosis md mean mean_difference median pearson_skewness2 pstddev pvariance relative_mean_difference rmd skewness stats stats_header stddev stderr sum summed_sqdevs theil_index to_stats variance
parseTValues t t90 t95 t99 t999
mit denen ich jetzt aber auf den ersten Blick auch nicht mit jeder Methode etwas anfangen kann ohne in weitere Statistik-Unterlagen zu schauen. Wer aber dieses Gem verwendet und mehr als den Mittelwert verwendet, der wird mit den Namen auch etwas anfangen koennen.
Ansonsonsten sind bei einigen „exotischen“ Funktionen in der Dokumentation Links auf z.B. Wikipedia-Artikel enthalten.
Kommentare : 1 Kommentar »
Kategorien : Ruby, Uncategorized

Neueste Kommentare