ruby gem of the week 2007/25

22 06 2007

RealRand Echte Zufallszahlen erzeugen

Installation:

Kein Gem im technischen Sinne, trotzdem paßt es ganz gut hier rein.

Download und nähere Erläuterungen auf der Seite http://realrand.rubyforge.org/

Wer, aus welchem Grunde auch immer, echte Zufallszahlen haben will, sollte sich diese Tool ansehen.

Herkömmliche Zufallszahlen, die man in den üblichen Sprachen ermitteln kann sind nur pseudo-zufällig bzw. können, von einer Anfangszahl ausgehend sogar exakt wiederholt werden. Unter Linux gibt es ein Zufalls-Device, welches Zufallszahlen zurückgibt, die aus verschiedenen Quellen ziemlich nahe an Zufallszahlen herankommen.

Bei dem Tool, das ich heute beschreibe, werden Zufallszahlen geliefert, die aus dem zufälligen radioaktiven Zerfall, atmosphärischem Rauschen, bzw. aus mehreren zufälligen Quellen ermittelt werden.

Es gibt verschiedenen Web-Interfaces bzw. Web-Seiten, die Zufallszahlen anbieten. Dieses „gem“ faßt diese unter einer einheitlichen Oberfläche bzw. API zusammen. Zu beachten ist hier natürlich, daß eine Online-Verbindung ins WWW zur Verfügung stehen muß, wenn diese Services genutzt werden sollen.

Näheres zu den einzelnen Seiten bzw. deren Services unter der oben angegebenen Adresse.

Man kann in diesem gem nun bestimmen, von welcher Seite man Zufallszahlen abrufen will, sowie Anzahl oder Wertebereich der Zufallszahlen.

Ein Beispiel des Autors:

require ‚random/online‘

generator1 = Random::RandomOrg.new
puts generator1.randbyte(42).join(„,“)

# Roll the dice a 100 times.
puts generator1.randnum(100, 1, 6).join(„,“)

generator2 = Random::FourmiLab.new
puts generator2.randbyte(7).join(„,“)

generator3 = Random::EntropyPool.new
puts generator3.randbyte(5).join(„,“)

Die Beispiele dürften ziemlich selbsterklärend sein.

randbyte() und randnum() liefern Bytes bzw. ganze Zahlen zurück. Mehr Funktionen gibt es hier auch nicht – aber das reicht ja für dieses Tool aus.

Je nach Quelle gibt es unterschiedliche Parameter, was zum Beispiel den Wertebereich oder die Anzahl der zurückzuliefernden Zahlen angeht. Falls eine dieser Grenzen überschritten wird, wird von diesem Gem eine Fehlermeldung ausgegeben. Bei normalem Gebrauch sollten diese Grenzen aber nicht überschritten werden und nicht weiter interessieren.

Ausblick:

Gibt es Vorschläge, welches Gem ich nächste Woche hier beschreiben soll? Falls nicht, werde ich eines nehmen, das mir persönlich interessant erscheint.





ruby gem of the week

21 06 2007

Ich will versuchen, hier jede Woche ein interessantes Ruby-Gem vorzustellen.

In erster Linie orientiere ich mich daran, was für mich selbst interessant ist, oder in Zukunft vielleicht einmal verwendet wird.

Wenn von der Leserseite jedoch bestimmte Sachen vorgeschlagen werden, die ich mal beschreiben sollte, dann gehe ich auf solche Wünsche natürlich gerne ein, kann allerdings nicht garantieren, daß ich diese wirklich behandeln werde.

Bisher erschienene Artikel:





Roo

20 06 2007

Es ist ja grundsätzlich schon ziemlich interessant, woher ich Rückmeldung auf mein Ruby-Gem roo bekomme.

Zuerst jemand aus Deutschland aus http://www.rubyforen.de, dann jemand aus Brasilien und gerade noch jemand aus USA.





Wandert nach Belgien aus (flickr zensur)!

16 06 2007

Da flickr nun für deutsche Benutzer zensiert wird, was ich im Grunde weniger Flickr anlaste, sondern der deutschen Gesetzgebung, von der Flickr wohl eingeschüchtert wurde, bin ich Yahoo-ID mäßig nun nach Belgien ausgewandert – geht problemlos und ich kann dann bei meinen Einstellungen bei Flickr auswählen, welche Art von Bilder ich sehen will oder nicht.





ruby gem of the week 2007/24

15 06 2007

DateUtils

Installation:

gem install date_utils

Einbinden mit

require ‚rubygems‘
require ‚date_utils‘
include DateUtils

Was kann man damit machen? DateUtils erlaubt es, mit Jahres-, Monats-, Wochen- und Tagesobjekten zu arbeiten. Des ist vielleicht noch etwas nebulös, deshalb ein paar Beispiele.

# ein Year-Objekt anlegen
y = Year.new # aktuelles Datum wird verwendet
puts y.to_s
puts y.date
puts y.year
puts y.first_day
puts y.last_day

y = Year.new(Date.new(1961,11,21)) # bestimmtes Datum wird verwendet
puts y.to_s
puts y.date
puts y.year
puts y.first_day
puts y.last_day

y = Year.create(:year => 2007) # Year-Objekt ohne ein bestimmtes Datum
puts y.to_s
puts y.date # gibt den 1.1. aus
puts y.year
puts y.first_day
puts y.last_day

y = Year.new(Date.new(1961,11,21)) # bestimmtes Datum wird verwendet
m = y.get_month(2)
p m
puts m.first_day.to_s
puts m.last_day.to_s
puts m.month.to_s
puts m.num_days.to_s

w = y.get_week(23)
puts w.to_yaml
#— !ruby/object:DateUtils::Week
#date: &id001 1961-05-29
#first_day: 1961-05-29
#last_day: 1961-06-04
#month: !ruby/object:DateUtils::Month
# date: *id001
# first_day: 1961-05-01
# last_day: 1961-05-31
# month: 5
# num_days: 31
# num_week: 22
#
puts w.first_day.to_s
puts w.last_day.to_s

mo = y.months
#puts mo.to_yaml
mo.each {|monat|
puts monat.first_day.to_s
puts monat.last_day.to_s
puts monat.month.to_s
}

next_year = y.next
puts next_year.to_s
p next_year
p y.previous

we = y.weeks
puts we.last.num_week
puts we.last.date.to_s
puts we.last.last_day.to_s
monat_der_letzten_woche = we.last.month
puts monat_der_letzten_woche.to_yaml
#— !ruby/object:DateUtils::Month
#date: 1961-12-25
#first_day: 1961-12-01
#last_day: 1961-12-31
#month: 12
#num_days: 31

# Wochen Objekte
# Objekt mit aktueller Woche anlegen

woche = Week.new
p woche
puts woche.month.month
puts woche.month.num_days
puts woche.first_day.to_s
puts woche.last_day.to_s
puts woche.num_week

naechste_woche = woche.next
puts naechste_woche.to_yaml
vorherige_woche = woche.previous
puts vorherige_woche.to_yaml

tage = woche.days
puts tage.to_yaml

#include? anwendbar fuer Year/Month/Week-Objekte
puts woche.include?(Date.new(2007,6,7))
puts woche.include?(Date.new(2008,6,7))
puts y.include?(Date.new(2008,6,7))

offsets = DateUtils::GMTZone.offsets
puts offsets.to_yaml

Ich denke, die Beispiele sprechen für sich und müssen nicht großartig erklärt werden.

Falls doch noch eine Erklärung gewünscht wird, schreib mir oder kommentiere hier.

Wie man sieht, sind damit recht bequem Datumsberechnungen möglich, bei denen man bei den Standarddatumsfunktionen zuerst eigene Berechnungen schreiben müßte.

Ausblick:

Gibt es Vorschläge, welches Gem ich nächste Woche hier beschreiben soll? Falls nicht, werde ich eines nehmen, das mir persönlich interessant erscheint.





Testbericht W200i

14 06 2007

Insgesamt ein nettes Telefon mit vielen Möglichkeiten: Telefon, MP3-Player, Radio, Kamera.

Allerdings: wie ich gestern feststellte haben die Trantüten bei Sony-Ericsson ein Feature entfernt, das beim T610 noch drin war: Man konnte einmal Termine vom Typ ‚Meeting‘ planen (neben anderen Typen), und sobald die Zeit erreicht war, wurde man ggf. daran erinnert (soweit eingestellt) und das Telefon hat automatisch in das Profil ‚Meeting‘ gewechselt, in dem man je nach Vorlieben z.B. nur den Vibrationsalarm aktiviert hatte. Dieses Feature ist jetzt entfallen. Das W200i schaltet nicht automatisch in das Meeting-Profil um. Vielmehr muß man das manuell machen.

Ganz toll Sony-Ericsson! Ich habe das immer verwendet, wenn ich in Meetings oder auch ins Kino gegangen bin und das Telefon nicht laut klingeln sollte. Was soll das, so ein nützliches Feature wieder rauszunehmen?





Wagn

10 06 2007

Wagn ist eine Anwendung, ähnlich eines normalen Wikis, aber mit einem etwas anderen Konzept.

Aus der Originalbeschreibung:

Wagn is an innovative tool for gathering and structuring knowledge that is at once easy to use and very powerful. It brings the wiki spirit to structured data– making it accessible, organic, and evolvable.

Man kann damit Webseiten in der Art eines Wikis erstellen, kann es aber auch problemlos lokal verwenden.

Es ist eine Ruby on Rails Anwendung. Die Installation verlief mit der Anleitung auf der Projektseite (lokal) völlig problemlos. Der Autor verwendet standardmäßig eine Postgres-Datenbank – ich habe das in database.yml auf MySQL geändert, was auch problemlos funktionierte.

Informationen werden auf sog. Cards eingegeben. Dort kann mit Links auf auf anderen Cards verlinkt werden (wie bei einem herkömmlichen Wiki auch).

Jetzt könnte man das ganze als einfachen großen „Zettelkasten“ verwenden, bei dem jede Karte einen Titel und Textinhalt besitzt.

Standardmäßig ist nicht jeder Besucher schreibberechtigt. Neue Autoren können aber bequem per Email eingeladen werden und bekommen ein Passwort zugewiesen.

Darüber hinaus kann man jetzt sogenannte related cards anlegen, bzw. von einer Karte auf diese verlinken.Beim Anzeigen einer einzelnen Karte werden dann auch die damit verbundenen Karten angezeigt.

Man könnte beispielsweise auf einer Seite, die ein Projekt beschreibt auf die Liste der beteiligten Personen verweisen.

Scheint mir ein ganz interessantes System zu sein, allerdings habe ich noch nicht so ganz durchschaut, wie man solche Verbindungen richtig anlegt – da muß ich noch ein bißchen damit herumspielen.

Zur Zeit der Erstellung dieses Artikels war die Version 0.6.0 aktuell.

Download unter http://rubyforge.org/projects/wagn