Mittwoch, 31. Oktober 2012

Performance-Vergleich verschiedener Ruby-Implementierungen

Arthur Shagall hat die Performance verschiedenener Ruby und JRuby-Implementierungen verglichen. Die Ergebnisse hat er auf seinem Blog veröffentlicht.

Interessant ist der sehr große Performancegewinn von JRuby im Vergleich zu MRI Ruby (teilweise mehr als zehnfach) - sonderbar die Verschlechterung der Performance von JRuby 1.7.0 mit invokedynamic zu JRuby 1.7.0 ohne invokedynamic. Es handelt sich um synthetische Tests, evtl sieht das in der Praxis anders aus. Sonderbar ist es trotzdem.

Dienstag, 30. Oktober 2012

Trinidad Worker Extension: Background-Threads unter JRuby

Für den Trinidad-Server ist die Trinidad Worker Extension in Version 0.2 erschienen. Damit lassen sich JRuby-Hintergrund-Jobs neben einer Rails-Applikation betreiben. Trinidad Worker Extension unterstützt dabei Resque und Delayed::Job.

Montag, 29. Oktober 2012

JXInsight/Opus for JRuby 1.1 (JRuby performance management)

JINSPIRED hat JXInsight/Opus for JRuby 1.1 fertiggestellt. Mit dieser Software kann man Performance, Latenzen festellen, um  QOS von JRuby-Applikationen zu messen und zu profilen. In der neuen Version ist besserer Support für Java 7 enthalten.

Samstag, 27. Oktober 2012

JRuby mit Netbeans profilen

Patrick schreibt in seinem Blog, wie er die Netbeans-IDE aufgesetzt hat, um JRuby-Scripte zu debuggen. Das ganze geht remote, d.h. er kann direkt sehen, wo es auf dem Server klemmt. An Hand einiger Screenshots führt er vor, wie man vorgeht, um die kritischen Stellen zu finden. 

Donnerstag, 25. Oktober 2012

3D-Spiel mit JRuby und jMonkeyEngine


Jeremy Woertink hat zwei 3-D-Grafik-Spiele und Samples (Maze Craze und Waves) auf Github veröffentlicht, die er mit JRuby und jMonkeyEngine umgesetzt hat. jMonkeyEngine ist eine Java-Game-Engine, die unter der BSD-Lizenz steht. Mit JRuby lässt sich diese Library sehr einfach einbinden

Mittwoch, 24. Oktober 2012

Richard Huang: zero downtime deployment

Richard Huang beschreibt in seinem Ruby-Tip auf jrubytips.com, wie er zero-downtime-deployment unter JRuby erreicht. Das heißt, kein HTTP-Request geht verloren. Er hat dazu ein Script für capistrano veröffentlicht, das über einen Rolling restart genau dies erreicht.

Montag, 22. Oktober 2012

JRuby 1.7.0 ist da!

JRuby 1.7.0 wurde veröffentlicht und steht zum Download bereit! Glückunsch an das JRuby-Team. Wie üblich wurde die Geschwindigkeit und die Kompatibilität zu MRI-Ruby weiter verbessert. Der Ruby-1.9.3-Modus  ist nun Default. Es wird nun mimdesten Java 6 benötigt. invokedynamic wird nun unterstützt, muß jedoch wegen JVM_Problemen expizit aktiviert werden.

Sinatra-Deployment mit JRuby / recipes.sinatrarb.com

Auf http://recipes.sinatrarb.com gibt es jede Menge nützlicher Rezepte für Lösungen mit Sinatra, dem leichtgewichtigen Ruby-Framework. Sinatra läuft auch unter JRuby (hey, sogar auf dem Raspberry Pi). Deshalb gibt es auch Rezepte zum Deployment unter verschiedenen Szenarien und Servern (Trinidad, TorqueBox, etc) auf dieser Site.

Sonntag, 21. Oktober 2012

RedStorm 0.6.4 ist fertig (Big Data mit JRuby)

Colin Surprenant hat RedStorm in Version 0.6.4 auf github bereitgestellt. Das RedStorm-Gem stellt eine Ruby DSL durch JRuby-Integration des Storm Distributed Realtime Computation System bereit. Als Default installiert RedStorm Storm- and JRuby-jar-Abhängigkeiten. Andere Abhängigkeiten  können über ein Dependencies-File definiert werden. Das ganze kann auch im Cluster laufen. RedStorm kann sowohl im JRuby-1.8-Modus als auch im JRuby-1.9-Modus laufen. Zusätzlich gibt es jede Menge Beispiel-Konfigurationen. Wie bereits gestern gemeldet ist Tweitgeist eine Demo-Anwendung, die mit RedStorm erstellt wurde.

Samstag, 20. Oktober 2012

Tweitgeist wieder online - Big data mit JRuby

Colin Surprenants Tweitgeist ist wieder Online - nun mit Version 1.2. Tweitgeist analysiert einen Twitter-Stream in Echtzeit und zeigt alle fünf Sekunden die häufigsten hashtags. Ideal um auf einen Blick zu sehen, was dort gerade so los ist. Tweitgeist stellt eigentlich eine Demo von Colins RedStorm Gem dar, das wiederum ein Wrapper für das Storm-Realtime-Distributed-Computing-Framework ist. Sehr beeindruckend. Laut Colin kommt die Architektur mit einem vollen Echtzeit-Twitter-Feed (Twitter Firehose) klar.

Freitag, 19. Oktober 2012

Big Data mit Cascading (und JRuby)

Interessante Vortragsfolien von Paco Nathan zum Thema Building Enterprise Apps with Cascading. Cascading ist ein Framework, das auf Apache Hadoop aufsetzt. Damit kann man recht einfach Big Data-Applikationen bauen und das in verschiedenen Programmiersprachen (JRuby, Jython, Clojure, Scala und Java). Der Vortrag befasst sich mit den Hintergründen von Big Data und wie Cascading dabei helfen kann diese Daten auszuwerten.

Donnerstag, 18. Oktober 2012

JRuby 1.7.0 ist bald da - Tester gesucht

Tom Enebo (JRuby-Core-Commmitter) schreibt auf Twitter, daß JRuby 1.7.0 sehr bald kommen wird. Er bittet darum, gegen 1.7.0RC2 zu testen, damit die letzten Bugs ausgeräumt werden können.

Mittwoch, 17. Oktober 2012

Ruby Performance - Diskussion von Charles Nutter

Ganz interessante Dikussion von Charles Nutter (JRuby-Core-Committer) über die Performance-Apsekte verschiednere Ruby-Interpreter. Charles geht sehr ins Detail und behandelt verschiedene Dinge, die auf den ersten Blick nicht so offensichtlich sind: Umwandlung von Zahlen, Floating-PointPerformance, Closures, Parallelität und noch viel mehr. Sehr interessant mal zu sehen, was unter der Motorhaube der verschiedenen Implementierungen (JRuby, MRI,ubinius, Macruby)  so los ist. Sehr interessant!

Montag, 15. Oktober 2012

Raspberry Pi mit 512MB RAM (besser für JRuby)

Nach dem gestrigen Benchmark von JRuby/Sinatra auf dem Raspberry Pi sind nun Geräte mit 512MB RAM (Statt 256MB) aufgetaucht. Das wenige RAM war das Haupthindernis für sinnvollen JRuby-Betrieb - das sollte jetzt gelöst sein. Die Dinger sind auch schon bei element14 bestellbar. Habe ich natürlich gleich gemacht. Wenn er da ist, gibt es einen neuen Benchmark mit JRuby/Sinatra & Co.

JRuby auf dem Raspberry Pi: Webserver-Performance

Neulich habe ich mir mehrere Raspberry-Pi-Rechner zugelegt und probiere verschieden Sachen damit aus. Der Raspberry Pi ist ein kleiner, billiger (etwa 40€) Einplatinenrechner mit folgender Ausstattung: ARM-CPU, 256MB RAM, Ethernet, schnelle Grafik mit Debian Linux. Zielgruppe sind eigentlich Schüler, die damit programmieren lernen sollen.

Die Kiste lässt sich auch als Webserver benutzen, dazu habe ich mit Sinatra unter MRI-Ruby und PostgreSQL einige Performancetests durchgeführt. Die gleiche Anwendung habe ich nun auch unter JRuby (statt MRI Ruby) getestet.

Installierte Software:

  • Soft-Float Debian wheezy (nur mit dem Soft-Float-ABI läuft Oracles Java7) 
  • Java 7 JDK für ARM
  • JRuby 1.7.0RC2
  • Trinidad-Webserver (Tomcat mit Rack-Interface)
Die Installation von Java 7 JDK und JRuby habe ich hier beschrieben

Test mit Apache Bench (ab), 500 requests, keine Concurrency.

1. Baseline: Ergebnis für MRI-Ruby, siehe auch www.µc.net/2012/10/raspberry-pi-als-webserver-mit.html


Requests per second:    4.91 [#/sec] (mean)
Time per request:       203.817 [ms] (mean)
Time per request:       203.817 [ms] (mean, across all concurrent requests)


2. Ergebnis für JRuby mit Trindad (keine Concurrency) nach Aufwärmen, der erste Request dauerte über 10 Sekunden

Start des Servers mit jruby -S app.rb -s Trinidad

Requests per second:    3.03 [#/sec] (mean)
Time per request:       329.990 [ms] (mean)
Time per request:       329.990 [ms] (mean, across all concurrent requests)



3. Ergebnis für JRuby mit Trindad (Concurrency 10)

Requests per second:    3.01 [#/sec] (mean)
Time per request:       3323.769 [ms] (mean)
Time per request:       332.377 [ms] (mean, across all concurrent requests)
Transfer rate:          3.81 [Kbytes/sec] received


Unter JRuby war der Speicherverbrauch wesentlich höher als unter MRI-Ruby, es waren nur noch etwa 20MB RAM frei (unter MRI etwa 90MB).

Verhalten mit invokedynamic

Start mit "jruby -Xcompile.invokedynamic=true -S app.rb -s Trinidad"

Hier gibt es eine Exception beim Server-Start,
 file:/home/pi/jruby-1.7.0.RC2/lib/ruby/gems/shared/gems/jruby-rack-1.1.10/lib/jruby-rack-1.1.10.jar!/rack/handler/servlet.rb:22:in `call'

es kommen keine sinnvollen Ergebnisse zurück :-(

Fazit für JRuby auf dem Raspberry Pi

JRuby ist keine so gute Wahl für den Raspberry Pi und diesen Use Case: die Performance und der Speicherverbrauch sind schlechter als unter MRI-Ruby. Anders sieht es aus, wenn man Java-Libraries benutzen will.

Links

Sonntag, 14. Oktober 2012

invokedynamic - Vortrag von der JUDcon

Douglas Campos hat auf der JBoss Users & Developers Conference (JUDcon) im Juni einen Vortrag über invokedynamic von Java 7 gehalten. Das Video ist jetzt auf Youtube zu sehen.Mit invokedynamic bietet die Java 7 VM eine Schnittstelle für dynamisch typisierte Sprachen (z.B. JRuby), die eine enorme Perormancesteigerung verspricht.

Samstag, 13. Oktober 2012

JavaScript-Engine automatisch auswählen (für Gem-Entwickler)

Ganz interessanter Tip von sensible.io für Gem-Entwickler, die einen embedded JavaScript-Interpreter brauchen: benutzt das ExecJs-Gem von Sam Stephenson! Es wählt je nach Umgebung die passende JavaScript-Engine aus. Für JRuby ist das therubyrhino, für andere Ruby-Implementierungen natürlich was anderes. Durch ExecJS wird das dann portabel und als Gem-Entwickler muß man sich nicht mehr um die Plattform kümmern, auf der das ganze dann läuft.

Freitag, 12. Oktober 2012

Why JRuby - Vortrag von der Aloha RubyConf 2012

Charles Nutter kommt viel rum. Auf der Aloha RubyConf 2012 hat er einen längeren Vortrag über JRuby gehlaten und seine Slides online gestellt. Der Vortrag gibt einen Überblick über die Historie von JRuby, Performance, das JRuby-Team, das JVM-basierte Ökosystem und vieles mehr. Sehr interessant zum Durchklicken für Leute, die zwar von JRuby gehört haben, aber die Sinnfrage stellen.

Donnerstag, 11. Oktober 2012

Mittwoch, 10. Oktober 2012

JRuby 1.7.0RC2 (letzter RC?) ist da!

JRuby 1.7.0 wird bald fertig sein. Es ist gerade der RC2 erschienen, der als letzter Release-Candidate geplant ist.Schwerpunkt wurde auf das Verhalten bei high Concurrency gelegt, was die Enterprise-Entwickler freuen dürfte und vielleicht einge MRI-Nutzer zum Schwenk auf JRuby bringen wird. Als Default ist "invokedynamic" unter Java7 nicht noch nicht aktiviert (wg JVM-Issues). Unter Java 8 ist es aktiviert. Fürs Perfomance-Tuning gibt es eine extra Seite im Wiki.

Dienstag, 9. Oktober 2012

Charles Nutter - Rockstar

Ganz witzig: Charles Nutter (JRuby-Core), ist jetzt offiziell ein Rockstar! Die JavaOne-Konferenz zeichnet herausragende Sprecher mit diesem Titel aus. Hier gibt es ein kleines Interview dazu.

Montag, 8. Oktober 2012

Vortrag Lessons learned: use of modern JVM languages besides Java von Kai Wähner

Kai Wähner hat auf der JavaOne 2012 einen Vortrag mit dem Titel  Lessons learned: use of modern JVM languages besides Java gehalten. Die Vortragsfolien sind auf Slideshare zu sehen.
Er gibt einen Überblick über die Sprachen die auf der JVM laufen, über die Vorteile der JVM (concurrency!) und betrachte die Komplexität und Reife verschiedener Lösungen. Für seine Zwecke schneidet JRuby nicht am besten ab, aber es ist sehr interessant, mal über den Sprachen-Tellerrand zu schauen.

Sonntag, 7. Oktober 2012

Vorträge von der JavaOne-Konferenz von Charles Nutter

Charles Nutters Vorträge von der JavaObe-Konferenz sind online (Audio + Slides). Bischen schwierig zu finden, man muß rechts oben auf "Presentation Download" klicken..

Samstag, 6. Oktober 2012

JRuby auf der Grafikkarte?

AMD und Oracle arbeiten zusammen, um Java auch auf Grafikkarten zu bringen. Und zwar hat sich AMD am Projekt Sumatra beteiligt, wo der JDK in diese Richtung weiterentwickelt wird. Grafikkarten sind extrem gut in der Parallelverarbeitung per Hardware und damit passen sie sehr gut zu Java.

Freitag, 5. Oktober 2012

Concurrency mit JRuby auf der JVM

Alex Kira hat einen Vortrag mit dem Thema Concurrency using JRuby and the JVM gehalten. Die Vortragsfolien sind auf Slideshare abrufbar. Er gibt eine Übersicht über mögliche Techniken mit Codebeispielen in verschiedenen Sprachen.

Donnerstag, 4. Oktober 2012

SSH-Services mit JRuby und Apache MINA

Dylan Vassalo, einer der Autoren von Gitris (wir berichteten :-), hat auf seinem Blog beschrieben, wie er mit der Java-SSH-Implementierung Apache MINA einen SSH-Server in eine JRuby-Applikation integrieren konnte. Er zeigt auch, wie er die Authentifizierung über einen Github-Account bewerkstelligt hat. Sehr coole Sache.

Mittwoch, 3. Oktober 2012

Rubydoop: Hadoop Jobs in JRuby

Theo Hultberg hat Rubydoop 1.0 veröffentlicht. Damit kann man Hadoop-Jobs in JRuby schreiben. Apache Hadoop ist ein Big Data Framework zur Parallelverarbeitung extrem grosser Datenmengen. Rubydoops Quellcode liegt auf github zum Abholen bereit.

Dienstag, 2. Oktober 2012

Gitris: Multiplayer Tetris mit JRuby

Mal was sehr schräges: Dylan Vassallo und Victor Nilsson haben ein "Dual-Player-Remote-Tetris" entwickelt, das in einem Terminal-Fenster über SSH läuft. Authentifiziert wird über Github, der Server ist laut @headius in JRuby geschrieben (um beim Thema zu bleiben). Das ganze heisst gitris.


Montag, 1. Oktober 2012

Ruboto 0.9.0RC (JRuby auf Android) ist da!

Der erste Release Candidate von Ruboto 0.9.0 liegt zum Download bereit. Wichtigstes neues Feature ist Subclassing von Java-Klassen zur Laufzeit! Mit Ruboto können Ruby-Scripte auf Android-Geräten laufen und das komplette Android-API benutzen.