Montag, 31. Dezember 2012

StairCar: Matrix-Library für JRuby

Ryan Stout hat verschiedene Java-Matrix-Libraries für JRuby gewrappt und als Gem veröffentlicht. Es liegt auf GitHub zum Download bereit. StairCar ist für zweidimensionale Matrizen gedacht und kann auch mit sehr großen Matrizen umgehen.

Sonntag, 30. Dezember 2012

fastruby heißt jetzt RubyFlux

Charles Nutter hat seinen statischen Ruby-zu-Java-Compiler, der bisher fastruby hieß, zu RubyFlux umbenannt. Der Compiler erzeugr auf Ruby-Programmen Java-Quelltext, der dann mit normalem Java weiterverwendet werden kann. Auf dem RubyFlux-Wiki gibt es mehr Hintergrund und auch Beispiele,

Samstag, 29. Dezember 2012

JRuby-rack-worker: Thread-basierte Worker

Karol Buceks jruby-rack-worker-library implementiert Worker-Threads für JRuby. Threads sind näher an der Java-Philosophie, als Background-Jobs. Im README sind die Vorgehensweise und potentielle Gotchas erläutert.

Freitag, 28. Dezember 2012

JrSerialPort: serielle Schnittstelle mit JRuby ansprechen

Wer einen seriellen Port mit JRuby ansprechen will, hatte bisher nicht viele Möglichkeiten. Für Java gibt es das plattformübergreifende RXTXcomm.jar. David Crosby von Atomic Spin hat dafür einen Wrapper für JRuby geschrieben, den er JrSerialPort nennt. In seinem Blog-Post bespricht er den Sourcecode und hat auch Beispiele zur Benutzung in JRuby parat.

Donnerstag, 27. Dezember 2012

Multimeter - Profiling für JRuby

Theo Hultbergs Multimeter-Gem ist ein JRuby-Wrapper um Yammers Metrics-Library. Damit kann man auf einfache Weise das Laufzeitverhalten seines Produktionssystems beobachten und sehen, welcher Code wie oft und mit welcher Performance ausgeführt wird.

Mittwoch, 26. Dezember 2012

Rails auf Windows - mit JRuby

Rocky Jaiswal hat eine Schritt-für-Schritt-Anleitung geschrieben, wie er eine JRuby-on-Rails-Applikation auf Windows zum Laufen gebracht hat.Als datenbank verwendet er PostgreSQL, sein Webserver ist Tomcat. Zum Bau der Webapp verwendet er Warbler.

Dienstag, 25. Dezember 2012

neo4j.rb, Version 2.2.1 ist raus (für JRuby 1.7.1)

Version 2.2.1 von neo4j.rb ist veröffentlicht. Das ist ein Bugfix-Release, um die Kompatibilität mit JRuby 1.7.1 herzustellen. Neo4j ist eine Graphen-Datenbank, die über neo4j.rb von JRuby aus zugänglich ist.

Montag, 24. Dezember 2012

JRuby Hackfest in Berlin?

Florian Gilcher hat ein JRuby-Hackfest in Berlin im Auge. Er plant das für Ende Januar/Anfang Februar 2013, hier ist das Annoncement:

Sonntag, 23. Dezember 2012

Per JDBC von JRuby auf MSSQL zugreifen

ZPH verwendet JDBC, um auf einen Microsoft-SQL-Server zuzugreifen. Eine Alternative wäre ODBC, was aber komplizierter zu konfigurieren ist. In einem Blog-Post zeigt er Schritt für Schritt, wie er die Verbindung hergestellt hat - vom Download der Treiber bis zum Einbinden in sein JRuby-Projekt.

Samstag, 22. Dezember 2012

Multithreaded HTTP-Client: jruby-httpclient

Adam Esterline hat einen Wrapper um Apache HTTPClient geschrieben, weil Net:HTTP auf JRuby nicht threadsafe ist. Version 1.1.1 liegt jetzt auf Github zum Download bereit.

Freitag, 21. Dezember 2012

Tutorial: Recommendation Engine mit JRuby und Mahout

Vasily Vasinov, der Autor des JRuby-Mahout-Gems, hat ein Tutorial geschrieben, in dem er beschreibt, wie er eine Recommendation Engine mit JRuby und dem JRuby-Mahout-Gem baut. Apache Mahout ist eine hochskalierbare Java-Machine-Learning-Library die wiederum auf Apache Hadoop basiert. Im Tutorial zeigt er anhand eines Beispiels Schritt für Schritt, wie so eine Recommendation Engine programmiert wird.



Donnerstag, 20. Dezember 2012

Multithreading-Probleme im Development-Modus lösen

Interessanter Artikel Fixing multithreading for Rails in development mode von

Mittwoch, 19. Dezember 2012

Dienstag, 18. Dezember 2012

Heroku: Ruby-Anwendung auf JRuby umziehen

Auf dem Heroku-Devcenter ist ein Artikel erschienen, der genau beschreibt, wie man eine bestehende Ruby-Anwendung auf Heroku nach JRuby umzieht. Er fängt bei der Installation eines lokalen JRuby auf der Entwicklermaschine an, zeigt wie man einen JDBC-Teriber einbindet und hat Tips für den Umgang mit JRuby-inkompatiblen Gems.

Montag, 17. Dezember 2012

Concurrency-Probleme mit Hamster vermeiden

schreibt in seinem Blog, wie er Concurrency-Probleme unter JRuby durch die Verwendung der Bibliothek Hamster vermeidet. Hamster stellt Datenstrukturen bereit, die threadsafe sind uns so ConcurrenyErrors vermeiden.

Sonntag, 16. Dezember 2012

TorqueBox auf Heroku (JBoss/JRuby Application Server)

Ben Browning (RedHat, TorqueBox Core Contributor) beschreibt, wie man TorqueBox auf Heroku zum Laufen bekommt. TorqueBox ist eine Ruby-Application-Plattform, die auf RedHats JBoss AS aufsetzt und Enterprise-Features (Clustering, HA, Scheduling, Messaging usw) zur Verfügung stellt. Dazu wurde TorqueBox an das Heroku-Environment angepasst, ein paar zusätzliche Schritte sind aber dennoch nötig und von Ben Browning genau beschrieben.

Samstag, 15. Dezember 2012

Heroku nun mit JRuby-Unterstützung

Es war bisher schon möglich, JRuby-Applilationen auf Herokus Infrastruktur laufen zu lassen, aber dazu war etwas Handarbeit nötig. Nun hat Heroku direkte JRuby-Unterstützung angekündigt und Hacks sind nicht mehr nötig! Heroku ist ein fantastischer Service, da es das Deployment von Websites/Webservices extrem einfach macht - und nun auch mit JRuby arbeitet. Einfach mal ausprobieren, für kleine Projekte fallen keinerlei Kost

Freitag, 14. Dezember 2012

JRuby Mahout - Machine Learning mit JRuby und Apache Mahout

Vasily Vasinov hate einen JRuby-Wrapper für Apache Mahout geschrieben. Apache Mahout ist ein verteiltes Machine-Learning-System, das auf Apache Hadoop basiert. Mit JRuby Mahout kann man bequem von JRuby aus auf Apache Mahout zugreifen.

Donnerstag, 13. Dezember 2012

Puma: Perfromancedaten (multithreaded Ruby)

Mike Perham schreibt in seiner Blog-Post-Serie 12 Gems of Christmas im ersten Teil über puma, einen in Ruby geschriebenen multithreaded Webserver. Er testete gegen eine nichttrivial Webanwendung, die zwei Datenbankqueries und eine Templateextrapolation durchführte. Ergebnisse mit JRuby und MRI-Ruby hat er miteinander und mit derselben Anwendung unter dem Unicorn-Server verglichen. Puma/JRuby ist klar am schnellsten, hier kommt die Muticore-Untertützung von JRuby zum Tragen.

Mittwoch, 12. Dezember 2012

Spieleprogrammierung mit JRuby und Entity-Component-Architektur

Chris Powell hat eine Serie von Blog-Posts über Spieleprogrammierung mit der Entity-Component-Architektur geschrieben. Dazu verwendet er JRuby und libGDX. Bis jetzt sind fünf Teile erschienen. Fünf Teile sind schon fertig und mindestens drei weitere angekündigt. Faszinierende Sache..

Dienstag, 11. Dezember 2012

Rubydoop: Haddop aus JRuby aufrufen (Big data)

Eine neue Version von Rubydoop ist auf github verfügbar.Rubydoop ist eine Integration von JRuby in die Hadoop-Runtime. Damit kann Apache Hadoop direkt von JRuby aus benutzt werden. Es liegen einige Beispiele bei, so daß man einen einfachen Einstieg hat.

Montag, 10. Dezember 2012

Mitschnitt vom 3rd Ruby Hangout auf Youtube

Der Mitschnitt vom 3rd Ruby Hangout vom 5.12. ist nun auf auf Youtube. Sehr interessantes Q&A mit Charles Nutter, dersich viel Zeit nimmt, den Stand von JRuby und insbesondere Performanceverbesserungen mit invokedynamic zu erklären. Ein grosser Teil nimmt auch eine Diskussion über die Vorteile der JVM, (Garbage Collection JRuby vs MRI, bessere Performance durch abwarten einer neuen JVM usq.)

Sonntag, 9. Dezember 2012

imgry: gem für Image-resizing und -cropping

Eine neue Version des  imgry-Gem ist raus. Dieses Gem ist auf hohe Geschwindigkeit unter JRuby optimiert  funktioniert aber auch auf MRI-Ruby.

Samstag, 8. Dezember 2012

TorqueBox 2.2.0 erschienen (JRuby Application Server)

TorqueBox 2.2.0 ist erschienen und steht zum Download bereit. TorqueBox ist ein Ruby-Application-Server und basiert auf JRuby und JBoss AS7. Diese Version enthält das brandneue JRuby 1.7.1 und einige weitere Goodies: torquebox-console, Steuerung von scheduled jobs über ein neues API und viele Bugfixes. Clustering, Loadbalancing und HA-Features ebenfalls sind in TorqueBox enthalten.

Freitag, 7. Dezember 2012

Benchmark mit JRuby, MRI und verschiedenen Webservern

Marek Jelen von RedHats OpenShift hat einen Benschmark auf der Plattform mit verschiedenenen Webservern und Ruby-Versionen durchgeführt.  Er verglich MRI-Ruby 1.9.3, JRuby 1.7.0 unter Mizuno (Jetty), Trinidad (Tomcat), Puma und Thick (Thick stammt von Mark Jelen selbst) Es gibt keinen eindeutigen "Sieger" - Fazit war, daß die Auswahl von der Art des Problems abhängt, das man lösen will.

Mittwoch, 5. Dezember 2012

heute Nacht (6.12, 01:00 MEZ): Ruby hangout mit Charles Nutter

Wer heute Nacht (6.12.2012, 01:00 MEZ) Zeit & Lust hat kann auf Google plus (https://plus.google.com/events/cve767iu4nma86ivisc6k9quad8) mit Charles Nutter und anderen über JRuby chatten. Bisher haben schon über 60 Leute zugesagt.

Ruby-Refinements und die Auswirkungen auf JRuby-Performance

Charles Nutter hat hier einen sehr interessanten Text über die Refinements geschrieben, die mit Ruby 2.0 kommen sollen. Refinements schränken die Möglichkeit für Monkey-Patching ein, um  negative Effekte besser kontrollieren zu können. Refinements haben aber sehr negative Auswirkungen auf die Performance, die Komplexiät der Sprachimplementierung und außerdem ist das Verhalten bei Edge-Cases nicht genau definiert. Auf Grund dieser Diskussion werden Refinements nur in eingeschränkter Form ins kommende Ruby 2.0 einfliessen.

Montag, 3. Dezember 2012

JRuby 1.7.1 scheint fertig zu sein (Update: ist fertig!)

Jedenfalls ist die Version auf github bereits auf 1.7.1 gestellt worden. Was fehlt ist noch das offzielle Announcement und die Binaries zum Download. Wer jetzt schon damit anfangen will, kann sich JRuby 1.7.1 aber gleich selbst bauen :-)

Update

JRuby 1.7.1 ist offiziell fertig! Hier das Announcement von Tom Enebo. Eingeflossen sind hauptsächlich Bug- und Securityfixes - also möglichst bald von 1.7.0 auf 1.7.1 updaten!


OpenShift Enterprise, RedHat PaaS ist nun nicht mehr "beta"

RedHats OpenShift ist nun nicht mehr im beta-Status, sondern offiziell als OpenShift Enterprise verfügbar. Interessant an OpenShift ist, daß es komplett Opensource ist und man damit  seine Applikationen in eine private Cloud verlagern kann, falls man es nicht von RedHat hosten lasen will. OpenShift ist polyglot, neben Java werden JRuby, Perl, PHP und Python unterstützt, als Datenbanken mySql und PostgreSQL.

Announcing OpenShift Enterprise – an On-Premise Platform as a Service from Red Hat

Sonntag, 2. Dezember 2012

Ruboto 0.10.0 ist fertig (JRuby auf Android)

Ruboto 0.10.0 ist fertig. Uwe Kubosch vom Ruboto-Team hat die neue Version auf Github bereitgestellt. Wichtigste Änderungen: es wurden einige legacy-Features entfernt, viele Bugs gefixt und die Dokumentation erweitert. Mit Ruboto kann von einem JRuby-Script direkt auf das komplette Android-API zugegriffen werden.

Samstag, 1. Dezember 2012

JRuby 1.7.1 kommt am Montag, 3.12.2012

Tom Enebo hat hat das Releasedatum von JRuby 1.7.1 auf Montag verschoben. Eigentlich sollte es  schon diese Woche fertig sein, doch das JRuby-Team will noch einen Bug auf Windows zum Release fixen.

Freitag, 30. November 2012

Neue Tweitgeist-Version (Realtime twitter top-hashtags)

Colin Surprenant hat eine neue Version seines Online-Realtime-Top-Hashtag-Visualisierungstools online gestellt. Tweitgeist analysiert in Echtzeit Twitter und erstellt mittels JRuby, Redstorm, Coffeescript und D3.js fortlaufende Grafiken der Top-hashtags. Sehr beeindruckend!

Donnerstag, 29. November 2012

perfer - Benchmark tool für alle Rubies

Interessantes Benchmark-Tool für Ruby (alle Implementierungen): perfer. perfer wurde in einem Google Summer Of Code-Projekt verwirklicht. Ein Beispiel für die Anwendung gibt es hier.




Mittwoch, 28. November 2012

Umfrage auf InfoQ: What's Your Next JVM Language?

Auf InfoQ läuft momentan eine Umfrage What's Your Next JVM Language?
Es ist keine plumpe "diese Sprache ist die beste"-Umfrage, sondern man kann dieverse Sprachen nach verschiedenen Kriterien ranken. Zusätzlich gibt es eine Auswertung, die man sich anschauen kann - und man kann sich die Votes einzelner Leute anschauen. Sehr interessant.

Dienstag, 27. November 2012

Benchmark: Performance Multithreading JRuby vs MRI Ruby

Jack Slingerland hat einen Artikel über die Performance von Standard (MRI)-Ruby vs JRuby geschrieben. Die Ergebnisse seines Beispieles sprechen eindeutig für JRuby, da die benötigte Zeit bei JRuby mit der Anzahl der Threads sinkt bis alle Cores ausgenutzt sind. Unter MRI-Ruby bleibt die Geamtzeit konstant, es wird nur ein Core genutzt.

Montag, 26. November 2012

log4jruby: JRuby-Wrapper für log4j

Wer seinen JRuby-Code in Java integriert, muß sich oft an die dortigen Konventionen halten und mit log4j loggen. Um die Integration zu erleichtern, hat Lenny Marks einen Wrapper für log4j geschrieben und ihn log4jruby genannt. Der Wrapper ist nun in Version 0.5.0 als gem auf github verfügbar.

Sonntag, 25. November 2012

Interface-Testing mit Sikuli und JRuby (Video)

Sehr interessantes Video von einem Vortrag auf der RubyConf 2012. Rodrigo Franco nimmt als Beispiel Diablo III und erläutert, wie er mit Sikuli und JRuby einen Bot gebaut hat, mit dem er Diablo automatisiert. Sikuli arbeitet mit Bilderkennung und braucht deshalb kein explizites Interface von der Software, die damit gesteuert wird!
Da Sikuli in Java geschrieben ist, kann es ohne Probleme von JRuby benutzt werden - es stellt dazu eine eigene Scriptsprache bereit, die Rodrigo für Diablo III in JRuby-Methoden gewrapped hat.

Samstag, 24. November 2012

Freitag, 23. November 2012

JRuby und JMX

Ganz interessant für die Java-Enterprise-Leute: ein HowTo von Oracle Use JRuby with JMX for Oracle WebLogic Server 11g. Der Text Ist zwar schon ein bischen älter, sollte aber auch mit neuen JRuby-Versionen funktionieren: Pas Apicella zeigt Schritt für Schritt, wie man mit dem jmx4r-Gem remote Java-Applikationen von einem Ruby-Script aus managen kann.

Donnerstag, 22. November 2012

Tips zum Upgrade auf JRuby 1.7.0 von Fiona Tay

Fiona Tay hat einige Tips zum Upgrade auf JRuby 1.7. Diese neue Version bringt vor allem Performance-Vorteile und Erleichterung bei der Integration von Java.

Mittwoch, 21. November 2012

Schneller JRuby-Startup mit drip

Drip ist ein Launcher für JRuby, der die Startup-Zeit minimiert. Das wird dadurch erreich, daß Drip eine frische Java VM vorhält, zu der sich das Script dann verbinden kann. Nach Gebrauch wird diese VM verworfen und eine neue, frische im Hintergrund gestartet. Das ist anders als bei nailgun in JRuby schon eingebaut), das eine einzige, persistente VM vrhält. Nachteil ist da, daß die persistente VM nach einigem Gebrauch Fragmente alter Programme enthalten kann, die das Verhalten irregulär machen.

Dienstag, 20. November 2012

activerecord-postgres-hstore: noSQL mit Postgres

Wer einen key-Value-Store ausprobieren möchte und schon eine PostgreSQL-Datenbank am Laufen hat, kann einfach PostgreSQLs hstore benutzen. Für Ruby gibt es dazu das activerecord-postgres-hstore-Gem, das nun auch direkten JRuby-Support bekommen hat. Wahrscheinlich ist das die schmerzloseste Möglichkeit, schnell an eine noSQL-Datenbank zu kommen.

Montag, 19. November 2012

jruby-pgp: PGP-Gem für JRuby

jruby-pgp ist ein Java- und JRuby-Wrapper für das Bouncy Castle PGP API. ScottGonyea hat ihn geschrieben, um die PGP-Einbindung in JRuby zu erleichterm.

Sonntag, 18. November 2012

JRuby success stories

Auf den JRuby-Wiki auf github gibt es eine Seite mit JRuby-Success-Stories. Vielleicht ganz interessant wenn man selbst dort was eintragen möchte.

Samstag, 17. November 2012

jruby-pg: nativer Postgres-Treiber für JRuby

jruby-pg ist ein drop-in-Ersatz für das MRI-ruby-pg Gem. jruby-pg benutzt direkt das API von Postgres und  umgeht damit Einschränkungen von JDBC, die es in einigen Fällen  schwierig machten, Prjekte, die mit pg-ruby arbeiten auf JRuby zu portieren. Das ist mit jruby-pg jetzt kein Problem mehr.

Freitag, 16. November 2012

Faker-Gem für Java

Luca Simone hat das Ruby-Faker-Gem mit Hilfe von JRuby so verpackt, daß man es von Java aus benutzen kann. Mit Faker kann man Testdaten (Namen, email-Adressen usw) erzeugen um z.B. Datenbanken für Tests zu bestücken.

Donnerstag, 15. November 2012

Migration nach JRuby - Success story von Richard Huang

Sehr interessanter Blogpost von Richard Huang. Er berichtet über die Migration von OpenFeint (einer social Plattform für mobile Anwendungen) von REE-Ruby nach JRuby. Hintergrund war eine Verbesserug der Skalierbarkeit und Satbilität. Es gab ein paar Stolpersteine (Gems mit C-Erweiterungen), er hat jedoch dafür Lösungen gefunden und erfreut sich jetzt einer wesentlich verbesserten Response-Time (30ms statt 50-60ms). Interessant ist die Beschreibung der Hintergründe der Entscheidungen und des Vorgehens mit Performancetests, Migrationsstrategie, Auswahl des Servers, Monitoring und vielem mehr.

Mittwoch, 14. November 2012

orientdb-jruby: Zugriff auf Graph/Document-DB mit JRuby

orientdb-jruby wrappt die Graph-Datenbank orientb. Orientdb hat einige interessante Features und ist unter der Apache2-Lizenz verfügbar.

Dienstag, 13. November 2012

Am 14.11.2012 in Münster: JRuby und Chef (Vortrag der Java Usergroup)

Vielleicht ganz ineterssant für Leute aus der Gegend von Münster: am Mittwoch den 14.11.2012 gibt es einen Vortrag der Java Usergroup Münster

Kochstunde: In kurzer Zeit aus JRuby und Chef ein wohlschmeckendes Gericht zaubern

Wie ist es möglich, innerhalb eines Jahres mit zwei Entwicklern einen neuen Mobile Payment Service inklusive der notwendigen Apps und des Backends zur Produktionsreife zu bringen?


Montag, 12. November 2012

Vortrag: Why JRuby Works (Video, Charles Nutter, Tom Enebo)

Auf der Rubyconf 2012 haben Tom Enebo und Charles Nutter (die beiden JRuby-Guys)  zusammen den Vortrag Why JRuby Works gehalten. Das Video ist nun Online auf Youtube. Themen sind die Implementierung, Performance, Einbindung von Java-Libraries, invokedynamic, Benchmarks und viele andere Sachen. Sehr interessant um sich einen Einblick in die Hintergründe von JRuby zu verschaffen. Die beiden bringen dazu viele Beispiele, Zahlen und Code.

Sonntag, 11. November 2012

JRuby mit jstack debuggen

Dr Nic Williams erklärt auf dem Engineyard-Blog, wie er mit jstack Stacktraces untersucht, um hängenden JRuby-Threads auf die Spur zu kommen. Dazu gibt er ein Beispiel in JRuby. Mit JRuby das zwar nicht ganz so straightforward, wie mit Java-Programmen (hier gibt es ebenfalls ein Beispiel), aber auch ohne Probleme sichtbar, welcher Ruby-Code feststeckt.

Samstag, 10. November 2012

Celluloid:io - multithread-Programmierung für Ruby

Kyle Drake hat einen interessanten Foliensatz zu Celluloid::io auf slidesharenet bereitgestellt. Dort erläutert er, wie es Celluloid::io für ihn ermöglicht, Parallelität auszunutzen. Dort hat MRI-Ruby ein Problem, weil es durch das globale-Interpreter-Lock schwierig ist, Multicore-Systeme vernünftig auszunutzen. Celluloid::io nutzt unter JRuby und Rubinius alle CPU-Cores und bringt dadurch wesentliche Vorteile.

Freitag, 9. November 2012

JRuby-Monitoring mit Simple::Metrics

Das Simple::Metrics Gem  ist ein Wrapper um die Java-Library Metrics. Das Gem dient zum monitoren von JRuby-Applikationen. Es können verschiedene Paramater überwacht werden: Metrics' Timer, Meter und Healthchecks stehen zur Verfügung und können die Ergebnisse im Browser über eigene Sevlets darstellen.


Donnerstag, 8. November 2012

Ruboto: Version 0.9, verbesserte Doku (JRuby auf Android)

Ruboto ist in der Version 0.9.0 erschienen. Wichtigste Neuerung ist die Unterstützung von Java-Subclassing.  Zum Erscheinen wurde die Dokumentation wesentlich verbessert, es sind jetzt auch mehr Beispiele und Verweise auf externe Ressourcen vorhanden. Mit Ruboto können Ruby-Scripte direkt auf Android-Geräten ausgeführt werden. Ruboto hat dabei Zugriff auf das gesamte Android-API!.

  • Ruboto 0.9.0 released!


Mittwoch, 7. November 2012

Vortrag von Charles Nutter über invokedynamic (Video)

Auf Youtube gibt es das Video vom Jaxconf-Vortrag Charles Nutters (JRuby Guy) über invokedynamic, das Feature von Java7, das dynamische Sprachen auf der JVM beschleunigt. Charles zeigt Hintergründe und Benchmarks. Leider gibt es noch Probleme mit der Java 7 VM, deshalb ist dieses Feature beim neuen JRuby 1.7.0 defaultmässig ausgeschaltet, kann aber explizit aktiviert werden. Nutzt man JRuby 1.7.0 unter (dem noch nicht fertigen) Java 8, ist es aber eingeschaltet.

Dienstag, 6. November 2012

JRuby und Google Guice (Dependency Injection)

Xavier Shay hat aufgeschrieben, wie er JRuby in einem Java-Container benutzt der mit Google Guice konfiguriert wird. Google Guice ist ein Dependency-Injection-Framework, mit dem normalerweise Java-Komponenten verdrahtet werden. Das ganze ist ein bischen tricky. Um das wiederholbar zu machen, gibt es noch eine Maven-Integration dazu.

Montag, 5. November 2012

Verschiedene Sprachen auf der JVM

Eine interessante Übersicht zum Stand der JVM und den verschiedenen Sprachen, die darauf laufen, findet sich auf dem Blog von Dr Dobb Journal. Diskutiert werden dort auch die neueren Entwicklunge von Java7 (invokedynamic) und zukünftiges in Java8

Sonntag, 4. November 2012

BitNami JRuby-Stack mit JRuby 1.7.0

Der BitNami JRuby-Stack läuft jetzt mit JRuby 1.7.0. Enthalten sind sofort lauffähige Versionen von Tomcat, MySQL, JRuby und Rails und die benötigten Abhängigkeiten sowie der Amazon AWS PHP SDK. Den Stack gibt es in verschiedenen Geschmacksrichtungen: als Installer für Windows, Linux und OSX, als VM oder als Amazon Cloud Image

Ziel der BitNami-Stacks ist es, das Deployment so einfach wie möglich zu machen. Geschäftsmodell ist, die Stacks frei zu verteilen und fürs Hosting Geld zu nehmen. Der BitNami JRubyStack ist unter der Apache 2.0 license.

Samstag, 3. November 2012

JRuby-Lint: neue Version (Kompatibiltätstester für JRuby)

Version 0.4 von JRuby-Lint ist fertig. JRuby-Lint ist ein Tool, mit dem man vorhandenen Code auf JRuby-Kompatibilität abklopfen kann. Es prüft u.a. auf verwendete Gems und schlägt Alternativen vor für Gems die unter JRuby problematisch sind. Output ist ein Report als Text oder HTML.

Freitag, 2. November 2012

Jetpack: JRuby für Jetty verpacken

Es gibt ja schon einige Tools, um JRuby-Apps zum Deployment auf verschiedenen Servern zusammenzupacken. Jetpack ist ähnlich, packt aber JRuby-Applikation und einem Jetty-Server so zusammen, das als Infrastruktur nur ein JRE zum Laufen benötigt wird.

Donnerstag, 1. November 2012

Phusion Passenger 4.0 mit JRuby-Support

Phusion Passenger hat neulich Versionsstand 4.0beta1 erreicht. Seitdem wird JRuby (und Rubinius) unterstützt. Phusion Passenger ist ein App-Server, dessen Schwerpunkt auf einfachem Deplyoment liegt. Auf dem Phusion Blog gibt es einen Post zu den Hintergründen. Ein Hauptgrund ist die Unterstützung von Multicore-Servern durch JRuby, die immer wichtiger wird und durch die JVM gewährleistet ist. Hier hat MRI-Ruby den Nachteil des Global Interpreter Locks, das deutlich mehr Ressourcen kostet, da dann mehrere Ruby-Prozesse gestartet werden müssen.

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.

Sonntag, 30. September 2012

Neue Version von TorqueBox (JRuby-Applikation-Plattform)

Die Version 2.1.2 von TorqueBox ist fertig. Dazu gibt es einen neuen TorqueBox Getting started Guide, der die Installation auf Mac, Linux und Windows erläutert. TorqueBox ist eine JRuby-Application-Platform,  mit Support für Messaging, Scheduling und Caching-Services. TorqeBox läuft auf Redhats JBoss-Server, der Enterprise-Features wie Clustering, Load-Balancing usw bereitstellt.

Samstag, 29. September 2012

Das Javamagazin schreibt über invokedynamic, Performance und JRuby

Das aktuelle Editorial des Javamagazins befasst sich mit invokedynamic von Java7. Dieses Feature von Java 7 wird dort Türöffner für dynamische Sprachen genannt. Da steckt sicher einige Wahrheit dahinter. Durch invokedynamic können für Scriptsprachen extreme Performancessteigerungen auf der JVM erreicht werden. Was das für die Sprache Java selbst bedeutet, bleibt abzuwarten, die Java-Plattform - im speziellen die JVM - wird dadurch wesentlich attraktiver für dynamische Sprachen wie JRuby und Groovy.

Donnerstag, 27. September 2012

FrenzyBunnies: Background-Worker für JRuby

Dotan J. Nahum hat auf github seinen Background Worker FrenzyBunnies bereitgestellt. FrenzyBunnies läuft unter JRuby und benutzt die Middleware RabbitMQ zum Message-Processing. Die FrenzyBunnies-Worker arbeiten dabei  in einem nativen Threadpool der JVM, so daß der Ressourcenverbrauch minimiert wird.

Mittwoch, 26. September 2012

JRuby 1.7RC1 ist da!

Die nächste Version 1.7 von JRuby ist beinahe da. Der erste Release Candidate steht zum Download bereit. Die wichtigsten Neuerungen:
  • Support von Java 7 invokedynamic
  • 1.9.3 ist nun der Default-Runtime-Mode
  • Massive Performancesteigerungen
  • und vieles mehr
Herzlichen Glückwunsch an das JRuby Team!

Dienstag, 25. September 2012

Tips für nailgun von Keith R. Bennett

Keith R. Bennett hat einige Tips zur Verwendung von nailgun mit JRuby. Nailgun hält die JVM persistent im Speicher, so daß die JVM-Startup-Zeiten entfallen. JRuby hatNailgun bereits integriert, Keith' Tips zeigen ein paar Kniffe, die man beachten sollte. Zusätzlich hat er beeindruckende Performance-Werte gemessen.

Hello, Nailgun; Goodbye, JVM Startup Delays
Nailgun: Insanely Fast Java

Montag, 24. September 2012

Programmiersprachen auf der JVM

Auf Dr Dobb's gibt es einen schönen Überblick über Sprachen, die auf der JVM laufen. JRuby ist natürlich auch dabei, aber auch jede Menge andere - auch solche, von denen ich noch nichts gehört habe (Gosu). Ein Blick über den Tellerrand ist auf jeden Fall lohnend.

Sonntag, 23. September 2012

Rails nur mit Java

In manchen Situationen hat man nur die nackte JVM zur Verfügung und nur die Möglichkeit ein .war zu deployen. Wenn man dann auch nicht auf eine externe Datenbank zugreifen kann und eine Rails-Applikation online bringen will, gibt es ein Problem. Rockyj hat dafür eine Lösung. Er verwendet HSQLDB als Datenbank, die in Java geschrieben ist und die er in sein Deployment integrieren kann. In einer Anleitung geht er die einzelnen Schritte durch und erläutert seine Konfiguration.

Freitag, 21. September 2012

Vortrag über JVM-Interna (JIT) von Charles Nutter

Charles Nutter (JRuby-Core-Team) hat auf der JAX 2012 einen Vortrag über die Funktion des JIT-Compilers (Just-in-Time) der JVM gehalten. Schwerpunkte waren Monitoring, Performance und Fehlersuche. Der Vortrag kann auf Youtube angeschaut werden.

Donnerstag, 20. September 2012

JRuby 1.6.8 ist fertig

Die (wahrscheinlich) letzte 1.6er-Version von JRuby ist fertig und steht zum Download bereit. Schwerpunkt dieses Releases ist die Ausmerzung von Inkomatibilitäten zu Ruby 1.9. Dieses Release wurde maßgeblich von der Community gebaut, nicht vom JRuby-Core-Team, das sich gerade auf das Release von JRuby 1.7 konzentriert.

Mittwoch, 19. September 2012

jbundler für jars

mkristian hat jbundler entwickelt, um damit jars und ihre Abhängigkeiten zu verwalten. jbundler ist an bundler angelehnt: es gib ein "Jarfile" zur Definition, die Syntax ist gleich, usw. Die Sourcen können von github geholt werden.

Dienstag, 18. September 2012

Fastruby: Experiment von Charles Nutter

Charles Nutter hat ein Experiment mit einem statischen Compiler für Ruby gemacht. Ruby-Code wird zu Java-Code compiliert und nicht - wie bei JRuby - zur Laufzeit interpretiert. Wer das Experiment nachvollziehen will, kann den Code von github downloaden. Die Ergebnisse sind erstaunlich, der nicht optimierte Test-Code ist 30% schneller als JRuby.

Montag, 17. September 2012

Sonntag, 16. September 2012

High Performance Ruby (Vortrag von Charles Nutter)

Charles Nutter hat die Folien seines Vortrags von der Golden Gate Ruby Conference online gestellt. Thema ist High Performance Ruby. Im Vortrag geht es darum, wie die JRuby-Implementierung die JVM benutzt, die positiven Auswirkungen von invokedynamic von Java 7 auf das Laufzeitverhalten, Benchmarking und wietere Themen.

High Performance Ruby
Charles Nutter
Golden Gate Ruby Conference

shoes-app (GUI mit JRuby) als jar zusammenpacken

Eric Watson hat auf github einen Proof-of-concept für das Verpacken einer shoes-4-app als .jar abgelegt. Er macht das ganze via warbler und erhält zum Schluss ein einziges .jar, das von der Kommandozeile gestartet werden kann. shoes 4 ist ein plattformunabhängiger GUI-Toolkit, mit dem man in Ruby Applikationen mit grafischer Oberfläche schreiben kann.

Samstag, 15. September 2012

TorqueBox lite Application Platform

TorqueBox lite steht auf github zum Download bereit. Es handelt sich um eine Web-only Version der Ruby-Application-Platform TorqueBox. Ziel ist, es eine stabile, leichtgewichtige Version von TorqueBox ohne Scheduled jobs, messaging, Backgroundable, long-running services, distributed transactions, caching und clustering zur Verfügung zu stellen, die aber sonst kompatibel zur Komplettversion ist. hinter TorqueBox steckt auch Redhat, so daß von dort noch einiges zu erwarten ist.



Freitag, 14. September 2012

Tddium für JRuby (Test Driven Development)

Tddium hat eine private Beta für JRuby-Anwender aufgesetzt. Tddium ist eine Continous Integration Plattform, die "in der Cloud" läuft und automatisierte Tests erleichtern soll. Man kann z.B. Tests durchführen, die vor dem Deployment nach Heroku durchlaufen werden müssen. Laufen sie durch, wird deployed, sonst eben nicht.



Donnerstag, 13. September 2012

Game of life in JRuby / Swing

Keith Bennett hat das "Game of Life" in JRuby umgesetzt. Game of Life ist ein Klassiker der Informatik, es ist ein zweidimensionaler zellulärer Automat, der einige überraschende Eigenschaften hat. Das UI von Keith Bennetts Umsetzung ist mit Swing gebaut. Die JRuby-Sourcen hat er auf github zur Verfügung gestellt, eine ausführlliche Erläuterung ist auch dabei.

Mittwoch, 12. September 2012

Verbesseter Performancevergleich von Rocky Jaiswal

Rock Jaiswal hat seinen Performancevergleich von C-Ruby und verschiedenen JRuby-Servern um JRuby unter TorqueBox-lite ergänzt. Zusätzlich hat jetzt richtige Zahlen für JRuby unter Tomcat, die er zunächst versehentlich falsch gemessen hatte.

Dienstag, 11. September 2012

Montag, 10. September 2012

threadsafe Rails und JRuny

Richard Huang beschreibt auf jrubytips.org die Hintergründe einer threadsafen Rails-Applikation und welche Vorteile man unter JRuby daraus ziehen kann. Er zeigt detailliert, wie Request mit und ohne Threads bearbeitet werden und diskutiert die Auswirkungen auf Speicherverbrauch, connection pooling und warmup.

Sonntag, 9. September 2012

Bericht von der JRubyConfEU (neo4j Blog, track & hack)

Auf dem neo4j Blog gibt es einen (schon einge Tage alten)  Bericht von der JRubyConfEU 2012 in Berlin. Michael Hunger berichtet, wie das neo4j "track & hack"-Projekt  (Tracking und Visualisierung von Positionen mit Openbeacon-RFID-Tags) aufgesetzt wurde.

Freitag, 7. September 2012

Mittwoch, 5. September 2012

Rubykraut Podcast über Ruby-Implementierungen von Konstantin Haase

Konstantin Haase (Rubinius-Entwickler und Sinatra-Maintainer) beleuchtet in der Rubykraut-Podcast-Folge Ruby-Implementierungen die Interna und Besonderheiten der verschiedenen Ruby-Interpreter, unter anderem auch JRuby und natürlich auch Rubinius.






Dienstag, 4. September 2012

Volltextsuche: Setup in drei Zeilen mit SolrSail

Michael Guymon hat SolrSail geschrieben, um das Basis-Setup von Apache Solr (Volltextsuchserver basierend auf Apache Lucene) zu erleichtern. Unter JRuby sind ganze drei Zeilen (!) notwendig, um einen Volltextsuchserver für eine JRuby-Applikation zu installieren! Die Details erläutert er in seinem Blog. Sehr beeindruckend!

Sonntag, 2. September 2012

Liste mit JRuby-Alternativen für C-Extensions

Auf github gibt es eine Liste mit JRuby-Alternativen für C-Extensions. Ganz guter Einstieg, wenn man eine bestehende Ruby-Anwendung auf JRuby umziehen möchte.

Samstag, 1. September 2012

Railscast #376: JRuby Basics

Im aktuellen Railscast #376 von Ryan Bates geht es um JRuby BasicsRyan zeigt Installation und erste Schritte mit JRuby. Dann geht er über zur Java-Integration und zeigt, wie man Swing von JRuby aus benutzen kann. Weiter geht es mit Concurrency/Threading, dann mit Rails on Rails unter JRuby. Der Screencast dauert 10 Minuten und gibt einen groben Überblick über JRuby.

Freitag, 31. August 2012

Vorbereitungen für JRuby 1.6.8

Charles Nutter hat den CI-Server für JRuby 1.6.x wieder angeworfen. Damit sind jetzt wieder Snapshot-Builds auf http://ci.jruby.org/snapshots/1.6.x/ verfügbar. Charles fixt für da 1.6.8-Release gerade Bugs und hätte gerne  noch Input.

Donnerstag, 30. August 2012

Mittwoch, 29. August 2012

JRuby-Gem schreiben: Teil 2 von Richard Huang

Richard Huang hat Teil zwei seines Tutorials how to write a jruby gem online gestellt. Schwerpunkt ist diesmal die Erweiterung um Java-Code, um eine bessere Performance zu errreichen. Auch diesmal ist viel Quellcode dabei, von dem man sich einiges abschauen kann.

Dienstag, 28. August 2012

Sehr interessanter Vortrag: JRuby at Square (Payment-Provider)

Xavier Shay hat auf der JRubyConf 2012 einen sehr interessanten Vortrag über JRuby bei Square gehalten. Square ist ein Payment-Provider für kleine Händler, der gerade viel Aufmerksamkeit und Kapital erhält. Jack Dorsey (Twitter) ist CEO von Square.
Xavier Shay beschreibt die Abwägungen und den Entscheidungsprozess der zum Einsatz von JRuby geführt hat. Dabei lag der Schwerpunkt auf Zuverlässigkeit (Payment-Provider!), nicht auf Performance. Im Vortrag kommen auch Probleme zur Sprache, die aufgetreten sind. Das 30-minütige Vortragsvideo kann auf Vimeo angeschaut werden und ist unbedingt sehenswert.

Sonntag, 26. August 2012

Datenbank für JRuby: H2 oder MySQL?

Gabor Vitez schreibt in seinem Blog, warum er sich für die H2-Datenbank (das ist eine embedded Java-DB) anstatt MySQL für eine Applikation entschieden hat. Dazu gibt es Benchmarks und weitere Argumente. Sehr lesenwswert.

Samstag, 25. August 2012

SafetyPin: Gem zum Zugriff auf JCR

Vielleicht interessant für Ruby-Anwendungen, die  ein Java Content Repository (JCR) benutzen sollen: SafetyPin, ein Gem von Jordan Raine  zum Zugriff auf JCR. JCR wird in verschiedenen Java-CMS genommen um Content zu speichern. Das Gem ist noch sehr jung, hat die Version 0.0.5 und Dokumentation fehlt auch noch komplett. Es gibt Query-Methoden, die SQL2 (eine JCR-Query-Sprache) verwenden, um JCR-Nodes zu finden.

Freitag, 24. August 2012

Ruboto - JRuby on Android at JRubyConf.eu 2012

Uwe Kubosch hat seine Vortragsfolien Ruboto - JRuby on Android auf speakerdeck online gestellt. Uwe ist ein Ruboto Core Developer. In seinem Vortrag geht es um die Historie von JRuby, das Tooling und einige Codebeispiele.

Mittwoch, 22. August 2012

JRuby läuft auf dem Raspberry Pi, jffi-Library wird benötigt

Nachdem mein erster Versuch, JRuby 1.7 unter Java 7 auf dem Raspberry Pi zum Laufen zu bekommen gescheitert ist, hier eine Anleitung, wie das dann doch klappt -  es sind allerdings ein paar Hürden zu überwinden..

Grundlagen:

  • Der Raspberry Pi ist ein kleiner Linux-Rechner (256MB RAM, ARM-Prozessor, Ethernet, USB, HD-Video usw), der sehr günstig zu haben ist (etwa 40€). JRuby darauf wäre doch mal nett..
  • Für die ARM-Architektur und damit den Raspberry Pi fehlt die jffi-Library (Java Foreign Function Interface), die wird von JRuby benötigt und musste von mir selbst kompiliert werden, da sie architekturspezifisch und momentan noch nicht in der JRuby-Distribution drin ist. Dazu braucht man git und maven und den JDK. Wer das nicht selbst machen will, kann die fertig kompilierte Libary hier runterladen und nach jruby-1.7.0.preview2/lib/native/arm-Linux kopieren.
  • Ich verwende Oracle Java, da der Java-Compiler benötigt wird (siehe unten) und OpenJDK wohl etwas langsam ist.
  • Oracles Java braucht  eine Distribution mit der "armel"-Architektur, da es das Soft Float ABI verwendet. Das schließt die normale Raspbian-Distribution aus, da diese "armhf" (Hardware-Floating-Point) verwendet!

komplette Installation:

  1. Auf http://www.raspberrypi.org/downloads gibt es ein Debian Wheezy-Image mit "armel"-Architektur, bei mir war das 2012-08-08-wheezy-armel.zip
  2. Dieses Image entpacken und per "dd" (Linux) oder entsprechendem Windows-Tool auf eine SD-Card bringen (min 2GB)
  3. Raspberry ans Ethernet klemmen, schauen was er für eine IP-Adresse erhält, per ssh einloggen und konfigurieren (sudo raspi-config, locale und ssh). Neu starten.
  4. Bei Oracle den SDK runterladen. Das geht über http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1637583.html, dort muß man ein paar Fragen beantworten. Leider geht das nicht vom Raspberry Pi aus, sondern nur über einen richtigen Browser..
  5. Java-SDK auf den Raspi kopieren, dann auf dem Raspberry Pi einloggen
  6. Java-SDK als Root installieren und als Standard setzen
  7. mkdir /opt/javacd /opt/java
    tar -zxf /home/pi/jdk-7u6-linux-arm-sfp.tar.gz
    update-alternatives --install "/usr/bin/javac" "javac" "/opt/java/jdk1.7.0_06/bin/javac" 1
    update-alternatives --install "/usr/bin/java" "java" "/opt/java/jdk1.7.0_06/bin/java" 1 
  8. Wer die jffi-Library nicht selbst kompilieren will, kann sie hier runterladen und nach jruby-1.7.0.preview2/lib/native/arm-Linux kopieren, die Schritte 9-16 entfallen dann.
  9. git auf dem Raspberry Pi installieren: sudo apt-get install git 
  10. Die folgenden Schritte als User "pi"
  11. maven auf dem Raspberry Pi installieren. Das habe ich nicht per apt-get gemacht, da dann gleich OpenJDK mit installiert wird, sondern Maven direkt von http://maven.apache.org/download.html geholt, entpackt und den PATH des Users "pi" entsprechend erweitert.
  12. jffi holen: git clone https://github.com/jnr/jffi
  13. jffi-Library kompilieren: cd jffi; mvn install
  14. Als User "pi" das neueste jruby-1.7.2 (momentan http://jruby.org/2012/08/07/jruby-1-7-0-preview2) runterladen und entpacken.
  15. Kompilierte Library ins richtige JRuby-Verzeichnis kopieren: mv ./jffi/target/jni/arm-Linux jruby-1.7.0.preview2/lib/native/
  16. Nun noch Pfade und JRUBY_HOME setzen:
     export JRUBY_HOME=/home/pi/jruby-1.7.0.preview2
     export PATH=$PATH:$JRUBY_HOME/bin
  17. Jetzt kann z.B. Rails (dauert sehr lange) oder Sinatra installiert werden: 
jruby -S gem install rails
Fetching: i18n-0.6.0.gem (100%)
.
.
Successfully installed rails-3.2.8
28 gems installed

Warum das Ganze?

Um zu sehen, was auf der kleinen Kiste geht. Die Performance habe ich mir noch nicht angeschaut, da kommt sicher noch ein Blog-Eintrag.

Video: hochverfügbarer Cluster mit TorqueBox

Joe Kutner, (Autor des Buches Deploying with JRuby) zeigt in einem kurzen Video, wie einfach es ist, einen hochverfügbaren Cluster mit Torquebox aufzusetzen. Das wird nur durch Konfiguration erreicht, Codeanpassungen sind nicht nötig.

Dienstag, 21. August 2012