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)

EFI Shell mit Ruby

von bovi am 21.05.2012 (09 Uhr)

Jemand hat Ruby, oder besser gesagt mruby, im BIOS Ersatz EFI startfähig gemacht. Damit ist es nun mögich eine Ruby Instanz ohne Betriebssystem zu nutzen. Das Ganze ist verfügbar auf Github. Masamitsu MURASE (der Autor) hat eine Übersetzung für 32bit und 64bit hinbekommen. Er selbst arbeitet jedoch nur unter 32bit und damit ist diese Version wohl die stabilere. Das ganze lässt sich z.B. mit VMWare testen.

Ruby im EFI (Bios)

 
Kommentare (0)

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)

Matz wechselt den Arbeitgeber

von skade am 12.07.2011 (22 Uhr)

An sich ist ihm das ja komplett frei gestellt, aber ich dachte, es könnte doch interessant sein: Matz arbeitet neuerdings bei Heroku.

 
Kommentare (0)

Das Anzählen hat begonnen

von skade am 08.07.2011 (10 Uhr)

Irgendwann kommt die leidige Diskussion ja immer wieder auf. Ruby 1.9 oder 1.8? Wer Argumente gegen 1.8 für neue Projekte sucht, der wird ab heute ein neues bekommen: Die Gespräche über das End-Of-Life von Ruby 1.8 haben begonnen. Das altehrwürdige 1.8.6 wird eh kaum mehr gepflegt und 1.8.7 ist seit Jahren im Maintenance-Mode. Beide entwickeln sich nicht mehr fort, können allerdings auf eine breite Installationsbasis verweisen, was die Pflege durchaus noch sinnvoll macht. Gerade 1.8.7 wurde vor einigen Tagen mit einer neuen Version bedacht.

Wer die Diskussion gleich live verfolgen will, kann das im Redmine Issue 4996 tun. Momentan steht ein Ende der Maintenance im Juni 2012 im Raum, die Einstellung von sicherheitsrelevanten Fixes im Juni 2013. Aber das ist erstmal nur ein Vorschlag, es wäre nicht das erste Mal, dass sich in solch einer Situation ein Maintainer findet, der die Pflege unbedingt fortführen will.

 
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 (17)

Ruby-Talk-ML und comp.lang-ruby getrennt

von quintus am 21.06.2011 (22 Uhr)

James Edward Gray II. hat heute überrschend das Gateway zwischen der Ruby-Talk-Mailingliste und der Newsgroup comp.lang.ruby heruntergefahren, da ihm die Wartung ein zu großer Aufwand würde und er meint, dass die Ruby-Community zu groß für diese Verbindung geworden sei, sie habe sich ohnehin schon in einzelne Themenbereiche aufgespalten. Die ursprüngliche Funktion, die Ruby-Community zusammenzuhalten, als sie noch klein war, sei überholt und nicht mehr vonnöten.

Heute um 22:25 Uhr hat James verkündet, dass das Gateway geschlossen sei. Das bedeutet, dass die Usenet-Posts auf comp.lang.ruby nun nicht mehr auf der Mailingliste erscheinen werden, und umgekehrt auch Postings auf der Mailingliste die Newgroup nicht mehr erreichen.

 
Kommentare (0)

Methoden in Ketten legen

von skade am 02.04.2011 (16 Uhr)

Method chaining - also die implementierung einer Methode durch verketten mehrerer anderer ist durch Ruby on Rails zu einer gewissen Popularität gelangt. Während sich Rails hier auf ein einfaches Namenschema und alias verlässt, bietet DataMapper hier eine Technik an, die sich vorzüglich für einen Ausflug in Rubys Objektmodell eignet. Diese Gelegenheit will ich nicht an mir vorüber gehen lassen und die Implementierung namens Chainable hier vorstellen.

Chain


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

Ruby demnächst nur noch Closed-Source

von quintus am 01.04.2011 (00 Uhr)
Wie unterrichtete Kreise erfahren haben wollen, übernimmt die Oracle Corporation die maßgeblich an der Ruby-Entwicklung beteilgte Firma EngineYard für umgerechnet 240 Millionen Euro. Dem Sprecher von Oracle zufolge solle Ruby nun "um die Qualität, Produktivität und Attraktivität der Sprache zu fördern" nur noch als Closed-Source entwickelt werden. Die Binaries, die auf der noch nicht öffentlich zugänglichen Website ruby.oracle.com zu haben sein werden, sollen jedoch nach wie vor kostenlos sein. Man werde auch weiterhin Binaries für Linux- und Mac-Systeme anbieten, verspricht die amerikanische Firma. Oracle werde aber eine kostenpflichtige "Cloud Edition" von Ruby veröffentlichen, die offenbar anstelle der bisherigen Makro-Funktion von Oracles "Cloud Office" benutzt werden kann.

Der Hauptentwickler und Erfinder von Ruby, der Japaner Yukihiro "Matz" Matsumoto, äußerte sich bestürzt. Er werde sich fortan vollständig aus der Ruby-Entwicklung zurückziehen, und mit ihm der größte Teil des bisherigen Core-Teams. Er empfehle für die Zukunft einen Boykott der Sprache, postete er auf einer japanischen Ruby-Mailingliste:
私たちに向かって、Oracleの敵対的な態度は、私たちは、Rubyプログラミング言語で開発を停止させる。これは、私が言うのは難しいが、もうRubyを使用しないでください。そのような組織をサポートしていません。
Zugleich kündigte Oracle an, mit der demnächst erscheinenden Version 7 der Programmiersprache Java deren Lizenz so abzuändern, dass jegliche Software, die auf der Java Virtual Machine aufsetzt, nur noch als Closed-Source vertrieben werden darf. Dies veranlasste den führenden Kopf der JRuby-Implementation, Charles Oliver Nutter, zu einem hier nicht weiter zitierten, aber überaus unhöflichen Statement gegenüber Oracle. Alle Hoffnungen ruhen nun auf der letzten freien Ruby-Implementation Rubinius, deren Entwicklungsteam sich zwar gleichfalls geschockt zeigte, aber verlauten lies, man werde nun mit Hochdruck an der Fertigstellung von Rubinius 1.5 arbeiten, das vollständige Kompatibilität zum bisherigen MRI 1.9.2 besitzen solle.

Update

Kommando zurück, das war nur ein Aprilscherz. Das Matz-Zitat ist auch nur ein passender vom Google-Übersetzer von Englisch nach Japanisch übersetzter Text. :-)
 
Kommentare (6)

Mono 2.10 veröffentlicht

von skade am 17.02.2011 (12 Uhr)

Novell hat die Version 2.10 der alternativen .NET-Implementierung Mono veröffentlicht. Inwiefern ist das für Rubyisten relevant? Ab diesem Release enthalten die Installer für Linux und OS X einen Release von IronRuby und IronPython. Wer also bequem mal IronRuby ausprobieren möchte, kann nun den Installer installieren und einfach ir aufrufen:

[ skade Florian-Gilchers-MacBook-Pro ~ ] ir
IronRuby 1.1.2.0 on 2.10 (tarball Mon Feb 14 16:04:48 MST 2011)
Copyright (c) Microsoft Corporation. All rights reserved.

>>> RUBY_VERSION
=> "1.9.2"
>>> 

Für FOSS-Anhänger wie mich: IronRuby ist übrigens seit geraumer Zeit zusammen mit der DLR (Dynamic Language Runtime) unter Apache 2.0 veröffentlicht.

 
Kommentare (0)

Die drei Großen (2): Sequel

von skade am 11.02.2011 (18 Uhr)

Sequel ist wohl die DB-Zugriffsschicht, mit der sich die wenigsten Rubyisten auskennen. Dabei ist sie meiner Meinung nach die beste reine Skripting-Bibliothek von allen dreien. Das äussert sich schon darin, dass Sequel mit keinerlei Core-Extensions wie ActiveSupport oder Extlib daher kommt. Einige werden zwar optional mitgeliefert, aber nicht standardmässig geladen.

Wie bereits erwähnt, beschäftigt sich Sequel nur mit SQL und das mit nur minimalen Abstraktionen - Sequel ist also kein ORM. Dafür kommt Sequel mit der größten Anzahl an Datenbank-Adaptern, momentan über 20. Implementierungen für verschiedene Connection-Pooling-Strategien und Sharding finden sich auch.

Plugins gibt es für viele interessante SQL-Funktionen, zum Beispiel für Windows (also, nicht das OS) oder Recursive Table Expressions.

Darüber hinaus kommt Sequel mit einem Kommandozeilentool, dass sich als Ersatz für den datenbankspezifischen Client verwenden lässt, allerdings im Grunde nur IRB mit vorgeladener Datenbank ist.


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

Syntax-Sonntag: Noch mal picky

von skade am 09.01.2011 (09 Uhr)

Diesmal nur ein ganz kurzer. Über das Picky Lambda kann man gerne ewig lange diskutieren, aber mir ist gestern noch folgende, selten erwähnte Kleinigkeit aufgefallen: wenn man das picky lambda verwendet, können die Argumentklammern weggelassen werden.

1
2
  f = -> a,b { puts a,b }
  f[1,2] 

(Eigentlich will ich ja nur wissen, ob CodeRay damit zurecht kommt.)

 
Kommentare (1)