ruby-mine

exploring the mine

HPC Ruby

von bovi am 12.06.2012 (23 Uhr)

Im Moment ist echt eine Menge los um Ruby. Nicht nur das es Ruby nun für den embedded Bereich gibt, jetzt wurde auch ein Dokument über das sagenumwobene HPC Ruby veröffentlicht. Ich kann mich noch dunkel erinnern das um 2009 oder 2010 Matz mal im Zuge von mruby auch erwähnt hatte, dass an einem High Performance Ruby gearbeitet wird, welches potentiell Fortran Konkurrenz machen soll. Das Resultat wurde auch von der japanischen Regierung gefördert und bestand aus einem längeren Forschungsauftrag wie man Ruby effizient kompilieren kann.

Für die Leute die das Paper nicht komplett lesen können, hier ein paar Stichpunkte die recht beeindrucken sind:
 
Kommentare (1)

mruby

von bovi am 20.04.2012 (20 Uhr)

Das mruby Repository wurde soeben auf Github geöffnet. Sofern es nicht bekannt sein sollte: mruby ist eine vollständige Neuimplementierung von Ruby mit dem Fokus auf Embedded-Systems, Mikrocontroller oder auch als Integration in vorhandene Applikationen (ähnlich zu Lua). Insofern sehr interessant da die Entwicklung von der japanischen Regierung gesponsert wurde und von matz angeführt wird.

 
Kommentare (0)

Germany.rb 2011 review

von bovi am 23.09.2011 (17 Uhr)

Das war sie nun unsere zweite Iteration der Germany.rb am 20. und 21. August 2011. Es waren ca. 25 Leute da und es gab insgesamt 13 auf Video aufgezeichnete Vorträge. Hier eine kleine Zusammenfassung wie es ablief und wie es weitergehen könnte.


Vollständigen Artikel lesen...
 
Kommentare (0)

RubyKaigi 2011

von bovi am 14.08.2011 (16 Uhr)

Vom 16 bis 19. Juli 2011 fand die 6. und letzte RubyKaigi in Tokyo statt. Dabei handelt es sich neben der RubyConf und EuRuKo um die wichtigste jährliche Ruby Konferenz.

Hier gibt es ein paar Notizen von den aus meiner Sicht interessantesten Vorträgen.


Vollständigen Artikel lesen...
 
Kommentare (0)

Ruby + 10 Quine

von bovi am 04.07.2011 (04 Uhr)

Ich habe gerade folgendes Quine von Yusuke Endoh gefunden:

1
2
# ruby
l=92.chr;eval s="s=s.dump[r=1..-2].gsub(/("+l*4+"){4,}(?!\")/){|t|'\"+l*%d+\"'%(t.size/2)};5.times{s=s.dump[r]};puts\"# python\\nprint(\\\"# perl\\\\nprint(\\\\\\\"# lua"+l*4+"nprint("+l*7+"\"(* ocaml *)"+l*8+"nprint_endline"+l*15+"\"-- haskell"+l*16+"nimport Data.List;import Data.Bits;import Data.Char;main=putStrLn("+l*31+"\"/* C */"+l*32+"n#include<stdio.h>"+l*32+"nint main(void){char*s[501]={"+l*31+"\"++intercalate"+l*31+"\","+l*31+"\"(c(tail(init(show("+l*31+"\"/* Java */"+l*32+"npublic class QuineRelay{public static void main(String[]a){String[]s={"+l*31+"\"++intercalate"+l*31+"\","+l*31+"\"(c("+l*31+"\"brainfuck"+l*64+"n++++++++[>++++<-]+++++++++>>++++++++++"+l*31+"\"++(concat(snd(mapAccumL h 2("+l*31+"\"110"+l*31+"\"++g(length s)++"+l*31+"\"22111211100111112021111102011112120012"+l*31+"\"++concatMap("+l*32+"c->let d=ord c in if d<11then"+l*31+"\"21002"+l*31+"\"else"+l*31+"\"111"+l*31+"\"++g d++"+l*31+"\"22102"+l*31+"\")s++"+l*31+"\"21002111010120211222211211101000120211021120221102111000110120211202"+l*31+"\"))))))++"+l*31+"\","+l*63+"\""+l*64+"n"+l*63+"\"};int i=0;for(;i<94;i++)System.out.print(s[i]);}}"+l*31+"\")))))++"+l*31+"\",0};int i=0;for(;s[i];i++)printf("+l*63+"\"%s"+l*63+"\",s[i]);puts("+l*63+"\""+l*63+"\");return 0;}"+l*31+"\");c s=map("+l*32+"s->"+l*31+"\""+l*63+"\""+l*31+"\"++s++"+l*31+"\""+l*63+"\""+l*31+"\")(unfoldr t s);t[]=Nothing;t s=Just(splitAt(if length s>w&&s!!w=='"+l*31+"\"'then 501else w)s);w=500;f 0=Nothing;f x=Just((if x`mod`2>0then '0'else '1'),x`div`2);g x= reverse (unfoldr f x);h p c=let d=ord c-48in(d,replicate(abs(p-d))(if d<p then '<'else '>')++"+l*31+"\"."+l*31+"\");s="+l*31+"\"# ruby"+l*32+"n"+l*31+"\"++"+l*31+"\"l=92.chr;eval s=\"+(z=l*31)+\"\\\"\"+s+z+\"\\\""+l*31+"\"++"+l*31+"\""+l*32+"n"+l*31+"\""+l*15+"\""+l*7+"\")"+l*4+"n\\\\\\\")\\\")\"########### (c) Yusuke Endoh, 2009 ###########\n"

Das besondere an diesem Quine?

1
2
3
4
5
6
7
8
9
10
11
$ ruby QuineRelay.rb > QuineRelay.py
$ python QuineRelay.py > QuineRelay.pl
$ perl QuineRelay.pl > QuineRelay.lua
$ lua QuineRelay.lua > QuineRelay.ml
$ ocaml QuineRelay.ml > QuineRelay.hs
$ runghc QuineRelay.hs > QuineRelay.c
$ gcc -Wall -o QuineRelay QuineRelay.c && ./QuineRelay > QuineRelay.java
$ javac QuineRelay.java && java QuineRelay > QuineRelay.bf
$ beef QuineRelay.bf > QuineRelay.ws
$ wspace QuineRelay.ws > QuineRelay.unl
$ unlambda QuineRelay.unl > QuineRelay2.rb

Und abschliessend:


$ diff QuineRelay.rb QuineRelay2.rb

Ich bin verstört…

 
Kommentare (2)

Germany.rb 2011 Ruby User Treffen in Leipzig

von bovi am 23.06.2011 (16 Uhr)

Wir haben wieder einen Termin gefunden! Am 20. und 21. August 2011 treffen wir uns zur zweiten Germany.rb in Leipzig im sublab. Wie immer gibt es keine Teilnahmegebühr und kein statisches Programm. Statt dessen gibt es Platz für Jeden um seine Ideen vorzutragen und sein Wissen zu teilen und zu erweitern.

Mehr Informationen gibt es auf der offiziellen Ruby Webseite.

Der Bericht mit allen Videos zur Germany.rb 2010 ist auch verfügbar.

 
Kommentare (3)

EuRuKo2011.initialize

von bovi am 07.01.2011 (00 Uhr)

Beim rug-b Treffen in Berlin scheinen heute weitere Neuigkeiten über die nächste EuRuKo bekanntgegeben worden zu sein. U.a. ist die Veranstaltung auf den 28. und 29. Mai 2011 fixiert worden. Und der Veranstaltungsort wird das Kino International sein, nur knapp 600m von meinem Zweitwohnsitz in Berlin entfernt. Sehr cool!


Quelle: http://dnbutler.com/
 
Kommentare (0)

RubyConf X

von bovi am 15.11.2010 (21 Uhr)

Zum 10. mal trafen sich nun Rubyisten aus der ganzen Welt in den Vereinigten Staaten (das liegt unterhalb von Kanada) um über Ruby zu sprechen, zu singen und zu philosophieren. Mit knapp 800 Teilnehmern, drei parallelen Tracks und 61 Vorträgen über drei Tage war es wohl eine der größte Ruby Veranstaltungen jemals. Hier ein paar Notizen von den Events die ich mir angeschaut habe.


Vollständigen Artikel lesen...
 
Kommentare (2)

Refinement

von bovi am 13.11.2010 (05 Uhr)

Shugo hat eben folgenden Änderungsvorschlag vorgestellt:


Vollständigen Artikel lesen...
 
Kommentare (3)

Ruby Community trifft Zed Shaw

von bovi am 13.11.2010 (04 Uhr)

Ganz witzig zu lesen aber im Endeffekt unglaublich traurig, dass so viele Leute Ihre Zeit mit solchen Diskussionen verschwenden. Es geht um eine Copyright Verletzung des Buches Learnng Python The Hard Way von Zed Shaw.

 
Kommentare (0)

Aktive Sterbehilfe für 1.8

von bovi am 12.11.2010 (15 Uhr)

Basierend auf einem Draft von Dethix.

Immer wieder kommt es zu Problemen, die durch unterschiedliche Ruby Versionen verursacht werden. Die Entwickler werden dabei gezwungen, viel Zeit und Energie in eine möglichst große Kompatibilität zu investieren. Dies treibt jedoch die Kosten in die Höhe, erweitert die Komplexität der Software und behindert die technische Weiterentwicklung.


Vollständigen Artikel lesen...
 
Kommentare (4)

MiniTest Benchmark

von bovi am 12.11.2010 (03 Uhr)

Ganz frisch und noch nicht mal im Trunk zu finden, ist das neuste Kind der MiniTest Familie: minitest/benchmark. Diese Bibliothek stellt die Möglichkeit zur Verfügung, die Performance eines Codestückes zu testen. Dabei werden jedoch nicht die absoluten Zahlen als Maßstab genommen, sondern die Wachstumsrate eines Algorithmus. Das Ganze könnte z.B. so aussehen:

1
2
3
4
5
6
7
8
9
10
11
require 'minitest/benchmark'

class TestAlgo < MiniTest::Unit::TestCase
  def bench_my_algorithm
    assert_performance_linear 0.9999 do |n|
      n.times do
        @obj.my_algorithm
      end
    end
  end
end

Dieser Test ist erfolgreich, solange @obj.my_algorithm linear wächst. Die folgenden Assertions stehen zur Auswahl:

Bei all diesen Assertions kann ein Schwellwert für die Abweichung angegeben werden. Individualisten können weiterhin assert_performance verwenden, dort kann die Wachstumsrate selbst definiert werden.

Das alles bald auch in der Standardbibliothek eures Vertrauens…

 
Kommentare (0)

ShanghaiOnRails

von bovi am 10.11.2010 (03 Uhr)

Unverhofft kommt oft. Und so ergab es sich, dass ich vorletztes Wochenende (30. und 31. Oktober) planmäßig nur 300km von Shanghai entfernt war und mir die Chance nicht entgehen ließ, der größten Rails-Usergroup in China einen Besuch abzustatten.

ShanghaiOnRails


Vollständigen Artikel lesen...
 
Kommentare (0)

Ruby im Chaos 2

von bovi am 10.10.2010 (15 Uhr)

Da es wahrscheinlich zu Recht einiges an Kritik am letzten Artikel gab. Hier eine andere Version der Betrachtung des CRE163 Podcasts welche hoffentlich nicht ganz so polemisch daher kommt.

2010-10-11 (05:22 CST): Ergänzung von Florian eingebaut.


Vollständigen Artikel lesen...
 
Kommentare (1)

Ruby im Chaos

von bovi am 02.10.2010 (23 Uhr)

Gestern hatte ich einen genialen Tag. Dem Hannover Zoo habe ich einen Besuch abgestattet, es gab leckeres Essen und der Abend gestaltete sich in zwei Bars sehr nett. Und dann hörte ich kurz vor Mitternacht, dass sich die aktuelle Chaos Radio Express Ausgabe um Ruby dreht. Der perfekte Tag. Bis ich mir die Folge anhörte…


Vollständigen Artikel lesen...
 
Kommentare (13)