Smart spreadsheet reading with Ruby

28 01 2013

Ein schönes Beispiel zur Anwendung von Roo: https://gist.github.com/radaniba/4166025





Simulation sucht Hardware – Nachführung von Solarpanels

7 03 2012

Ich habe – in der Programmiersprache Ruby – ein Programm geschrieben, welches es ermöglicht, Solarpanels zur Stromerzeugung so zu steuern, dass diese immer zum aktuellen Sonnenstand ausgerichtet werden und so eine optimale Stromgewinnung möglich ist.
Mein Programm ist so entworfen, daß keine umständliche Ausrichtung oder Kalibrierung nötig ist – einfach das Solarmodul irgendwo im Freien aufstellen, und es folgt automatisch dem Stand der Sonne. Das Programm kann prinzipiell eine beliebige Anzahl einzelner Solarpanels ansteuern. Derzeit iat das Programm als reine Simulation ausgelegt. Das heißt, die Solarpanels und der Stand der Sonne existieren nur als Software. Das Programm kann jedoch leicht dahingehend erweitert werden, daß damit auch die Steuerung realer Solarpanels möglich ist. Alles was hierfür nötig ist, ist prinzioiell, die Bewegung der simulierten Panels auch an die realen Panels weiterzgeben, sowie die simulierte Sonne im Programm durch eine Möglichkeit, die Stärke der Sonneneinstrahlung am realen Panel festzustellen zu erweitern.An diesem Punkt suche ich nun nach jemandem (in Berlin), der sich mit solcher Art von Elektronik und Mechanik beschäftigt und inteessiert ist, am Hardware-Bereich mitzuwirken. Prinzipiell geht es darum, ein Solarpanel mittels Mikrocontroller und Motoren um die vertikale und horizontale Achse bewegen zu können, sowie feststellen zu können, in welcher Ausrichtung die Sonneneinstrahlung stärker oder schwächer ist. Das Ganze ist erstmals nur „Just for fun“ gedacht – falls sich das jedoch auch kommerziell nutzen läßt, wäre ich auch nicht abgeneigt.
Wenn du so etwas mit mir zusammen realisieren willst, melde dich bitte bei mir: thopre@gmail.com – ebenso, wenn du jemanden kennst, der interessiert sein könnte oder weißt, wohin ich mich vielleicht sonst noch wenden kann.





Ruby-Kurse in Berlin

11 08 2009

Wir haben jetzt mal eine Seite zu unseren Ruby-Kursen in Berlin eingerichtet.





Gems für Ruby 1.9.*

27 02 2009

Da 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 http://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.





Roo – Beispiele

10 12 2008

Ich 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):

http://www.ozmox.com/?p=33

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)





Warum wir Unit-Tests für Ruby-Programmme schreiben sollten

29 12 2007

Ein 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.





roo – Version 0.8.0 fertig

16 12 2007

Es 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.