ruby gem of the week 2007/27

17 08 2007

Installation:

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





ruby gem of the week 2007/26

16 08 2007

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