Showing posts with label ruby. Show all posts
Showing posts with label ruby. Show all posts

Sunday, February 24, 2008

Ruby hat heute Geburtstag und wird 15!

Um das gleich mal festzuhalten, Ruby wird heute, am 24. Februar 2008, 15! Habe ich hier: Ruby Turns 15 and Other Important Stuff - O'Reilly FYI gelesen:

David Flanagan, author of many books including most recently The Ruby Programming Language
observed that this month marks Ruby’s 15th birthday. David
confirmed with Yukihiro “Matz” Matsumoto–creator of
Ruby and David’s coauthor on the aforementioned book–that,
indeed, Ruby was conceptualized and named on Feb. 24, 1993. Mark your
calendars.
Zum 10. Geburtstag gratulierte David A. Black: [ANN] Happy Birthday, Ruby, and an announcement....

Today, February 24, 2003, is Ruby's 10th birthday.** Happy Birthday,Ruby! And congratz to Matz!
Und selbst in einem Kalenderblatt des bayerischen Rundfunks vom 24.02.2005 geht es um Ruby, das war dann wohl anlässlich des 12. Geburtstags.

Tuesday, June 19, 2007

Ruby: "dynamic hash-tree"

Beim Stöbern auf RubyForge: Snippet Library entdeckt: dynamic hash-tree, der
...stores objects in a tree structure, creating nodes automatically when needed.
Wenn man jetzt meint, dass das eine Menge Code wäre..., weit gefehlt! (Wie war das? The best code is no code at all, und das zweitbeste so wenig Code wie möglich?):

class Node < Hash
attr_accessor :value

def method_missing(key)
self[key]==nil ? self[key]=Node.new : self[key]
end
end

tree = Node.new

tree.branch.leaf.value = 'Hello World!'
tree.branch1.leaf.value = 'Hallo Hallo!'

tree # => {:branch=>{:leaf=>{}}, :branch1=>{:leaf=>{}}}
tree.branch.leaf.value # => "Hello World!"
tree.branch1.leaf.value # => "Hallo Hallo!"

Irgendwie magisch! Node erbt von Hash. Wird ein Node (tree = Node.new) mit einer unbekannten Methode aufgerufen (tree.branch), wird diese einfach in dem Node, d.h. dem Hash, es ist so einfach, dass ich es gar nicht gescheit ausdrücken kann....letztendlich entstehen mit dem method_missing - Trick in sich geschachtelte Hashes. Echt erstaunlich!

Thursday, May 17, 2007

Ruby, creating classes dynamically

Eine Klasse "Klass" mit einer Methode "meth" würde man ja normalerweise so definieren und instanzieren:

class Klass
def meth
"soso"
end
end

Klass.new.meth # => "soso"

Angenommen, man hätte den Inhalt der Klasse als String vorliegen, könnte man das Gleiche so machen:

s = <<eos
def meth()
"soso"
end
eos

Klass = Class.new() # neue leere Klasse erzeugen und der Konstante "Klass" zuweisen
Klass.class_eval s # "Evaluate" String (mit der Methodendefinition) im Kontext der Klasse

Klass.new.meth # => "soso"

Angenommen, man hätte auch den Namen, den die Klasse erhalten soll, als String vorliegen, so:

s = <<eos
def meth()
"soso"
end
eos

Kernel.const_set("Klass", Class.new())
Klass.class_eval s

Klass.new.meth # => "soso"

Angenommen, der Name, den die Klasse erhalten soll, wäre auch in dem String mit dem Inhalt der Klasse als Konstante definiert:

s = <<eos
NAME = 'Klass' # <= so soll die Klasse später mal heißen
def meth(); 'soso'; end
eos

c = Class.new
c.class_eval s
Kernel.const_set(c::NAME, c)

Klass.new.meth # => "soso"

Schon erstaunlich, oder?

Friday, March 23, 2007

Fundstück: "Fleck the Web!"

Beim "Kramen" im Internet wieder mal folgende Ideen beim Lesen einer hochinteressanten Seite (Eli Bendersky’s website » Blog Archive » Understanding Ruby blocks, Procs and methods) mit vielen Ruby-Beispielen gehabt:
  • Es wäre schön, die Ruby-Beispiele auf der Seite ohne großen Aufwand adhoc ausführen zu können (dazu evtl. mehr in einem späteren Beitrag).
  • Es wäre schön, irgendwie Notizen an die Beispiele "anheften" zu können.
Meine Idee des "Anheftens" hatten andere natürlich auch schon, dies wird u.a. Web annotation (Wikipedia) genannt, Diigo ist so ein Tool, das noch viel mehr kann (Social Annotation: Seamless Integration of Social Bookmarking, Web Highlighter, Sticky-Note & Clipping), aber auch einen markierten Text mit einer Bemerkung (Sticky-Note) versehen. Der Text wird unterstrichen dargestellt, und beim Überfahren erscheint die Notiz.

Ein anderes Tool ist Fleck.com - Fleck the Web!, das sich mehr auf die gelben Zettel konzentriert, und wahrhaftig, man kann "Notes oder Bullets", die wahrhaftig wie gelbe Zettel aussehen, an beliebige Stellen einer Seite "kleben" und sie entweder so lassen oder zu einem platzsparenden gelben Knubbel "collapsen".

Die eingangs erwähnte Seite habe ich gleich mal mit Kommentaren versehen, und so schaut sie dann aus: Eli Bendersky’s website » Blog Archive » Understanding Ruby blocks, Procs and methods

Nett, im Vergleich mit Diigo (das ich auch benutze, aber eher für's Bookmarking), ist:
Die Notizen können frei (z.B. neben einem Bild) plaziert werden (bei Diigo muss man einen Text markieren).
Die Notizen schauen wie "gelbe Zettel" aus (bei Diigo ist das nicht so prickelnd).
Die Notizen können "aufgeklappt" oder "geschlossen (gelber Knubbel)" gespeichert werden (bei Diigo werden sie beim Überfahren des markierten Textes angezeigt).
Das Plazieren und Ausfüllen der "gelben Zettel" "fühlt sich echt gut an" (Diigo ist ansonsten auch nicht schlecht, aber ein paar Kleinigkeiten scheint Fleck da besser hinzukriegen).

Wednesday, October 18, 2006

Nach all den Jahren...

Ruby Beispiele kommen in der Regel so daher:
a, b = "foo", "baz"
a + b # => "foobaz"
a.size # => 3
Im Kommentar sieht man gleich das Ergebnis der Ausführung der jeweiligen Programmzeile: Sehr schön, informativ, aber auch ein wenig mühsam jede Zeile mit dem entsprechenden Ergebnis zu versehen.

Aber siehe da, es gibt das eigenclass - xmpfilter: automagic Test::Unit assertions/RSpec expectations and code annotations Tool. Aus solchem Ruby Code:
a = 1
10.times do |i|
i ** 2 # =>
a += i
end
A = 1
A = 1
wird nach Aufruf von xmpfilter.rb -a example_02.rb
folgender wunderbarer Output:
a = 1
10.times do |i|
i ** 2 # => 0, 1, 4, 9, 16, 25, 36, 49, 64, 81
a += i
end
A = 1
A = 1 # !> already initialized constant A
D.h. nach "# =>" wurden die Ergebnisse der Ausführung von "i ** 2" beim Schleifendurchlauf eingefügt, und die Zeile, die eine Warnung hervorruft, wurde direkt mit der Warnung als Kommentar vermerkt.

Ich hatte dieses Tool schon mal vor längerem entdeckt, aber auch wieder vergessen, weil es nicht unter Windows funktionierte, und nun: Es geht einfach! Wunderbar!! Nach all den Jahren!!!

Saturday, September 09, 2006

Was geht denn jetzt ab?

Nicht nur, dass Tim Bray an der Spezifikation von XML und XML Namespaces beteiligt war, dass er der "Director of Web Technologies at Sun Microsystems" ist, nicht nur, dass er Ruby attraktiv (was?), und dafür sehr nette Worte findet (s. ongoing · On Ruby) (nein, wirklich?):
"Ruby is remarkably, perhaps irresistibly, attractive....unreasonable amount of work done in a ridiculously short period of time...intuitive enough...getting it right first time...Ruby code shouts its meaning out louder and clearer than any other language...find Ruby easier to read, only a week in...low barrier to entry...results in me writing little teeny methods..."
Nein, und jetzt werden auch noch auf seine Initiative hin zwei OpenSource Entwickler bei SUN eingestellt, die bisher an JRuby, einer Portierung des Ruby-Interpreters nach Java, gearbeitet haben, und dies jetzt hauptberuflich bei SUN fortführen sollen.

Was geht da ab? SUN goes Ruby? Sollte ich das jetzt mal anführen, wenn mir wieder mal Unverständnis über die Verwendung von Ruby entgegenschlägt? Dass selbst einer der Direktoren bei SUN, und übrigens einer der Väter von XML, und überhaupt, auch.....?!