<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Lars Schenk &#187; Ruby</title>
	<atom:link href="http://lars-schenk.com/tag/ruby/feed" rel="self" type="application/rss+xml" />
	<link>http://lars-schenk.com</link>
	<description>IT-Services :: Software-Development since 1980 :: Freelancer since 1988</description>
	<lastBuildDate>Thu, 06 Oct 2011 02:44:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Google App Engine &#8211; Eldorado für Entwickler</title>
		<link>http://lars-schenk.com/google-app-engine-eldorado-fur-entwickler/208</link>
		<comments>http://lars-schenk.com/google-app-engine-eldorado-fur-entwickler/208#comments</comments>
		<pubDate>Wed, 09 Apr 2008 15:06:41 +0000</pubDate>
		<dc:creator>Lars Schenk</dc:creator>
				<category><![CDATA[Video]]></category>
		<category><![CDATA[Virtualisierung]]></category>
		<category><![CDATA[Amazon]]></category>
		<category><![CDATA[App Engine]]></category>
		<category><![CDATA[Django]]></category>
		<category><![CDATA[EC2]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[S3]]></category>
		<category><![CDATA[SimpleDB]]></category>

		<guid isPermaLink="false">http://lars-schenk.com/google-app-engine-eldorado-fur-entwickler/208</guid>
		<description><![CDATA[Google hat eine frühe Version der App Engine vorgestellt (Preview). Es verspricht mir all die Administrativen Task abzunehmen, die ich üblicherweise habe, wenn ich meine Web-Anwendung online bringen will. Ich brauche mich nicht mehr um Server kümmern (seien es klassische RootServer beim Hoster oder virtuelle Server wie z.b. bei EC2). Ich muss mich nicht mehr [...]]]></description>
			<content:encoded><![CDATA[<p><img style="float: right; margin-left: 20px; margin-bottom: 10px;" src="http://code.google.com/appengine/images/appengine_lowres.jpg" /> Google hat eine frühe Version der <a href="http://code.google.com/appengine/">App Engine</a> vorgestellt (Preview). Es verspricht mir all die Administrativen Task abzunehmen, die ich üblicherweise habe, wenn ich meine Web-Anwendung online bringen will. Ich brauche mich nicht mehr um Server kümmern (seien es klassische RootServer beim Hoster oder virtuelle Server wie z.b. bei EC2). Ich muss mich nicht mehr darum kümmern, wie meine Applikation skaliert. Ich muss also keinen Mechanismus entwicklen wie bei EC2 wo ich meine Server und die Last überwache und ausgefallene Server ersetzte bzw. dynamsch weitere virtutelle Serverinstanzen zuschalten muss wenn mehr Last aufkommt &#8211; das alles macht Google App Engine automatisch für mich!</p>
<p>Es entlastet mich als Entwickler von all diesen adminstrativen Tasks die ich überlicherweise beim LAMP Stack habe. Es macht quasi den Administrator in mir arbeitslos und schenkt dem Entwickler in mir die frei gewordene Zeit um mich auf die Anwendung zu konzentrieren. </p>
<p>Teil 1 &#8211; Vorstellung der Google App Engine Preview:<br />
<object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/3Ztr-HhWX1c&#038;hl=en"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/3Ztr-HhWX1c&#038;hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></p>
<p>Ab 2:50 stellt Kevin Gibbs die Vorteile der App Engine gegenüber dem klassischen LAMP Stack vor. <span id="more-208"></span> Ich frage mich aber, ob die App Engine mir auch die Flexibelität des LAMP Stacks gibt &#8211; aber das kann zZ nicht beurteilt werden, da die App Engine ja zZ. nur ein Preview ist.</p>
<p>Mit Google App Engine kann ich die selbe Infrastruktur nutzen wie Google. Das ist analog wie bei Amazon mit S3, EC2 und SimpleDataService. Bei Amazon nutze ich jedoch virtuelle Server-Images mit EC2 und bin daher viel Flexibler als mit der Google App Engine (die als Sandbox doch sehr restriktiv ist). Ich habe bei EC2 aber halt auch den Mehraufwand, dass ich meine virtuellen Serverinstanzen selbst aufbauen (linux, apache, mysql, php order anderes) warten muss und ausgefallene Instanzen erkennen und ersetzten muss &#8211; ich muss dort Lösungen entwicklen für persistente Filesysteme (via integration von S3) und Lösungen entwicklen für persistene Datenbanken (SimpleDataService). All das ist bei Googles App Engine deutlich einfacher weil bereits in einem Gesamtframework integriert. Bei Amazon habe ich zwar mehr Freiheiten (mit meinen virtuellen Server Instanzen kann ich quasi alles anstellen und bin nicht nur auf das Hosting von WebApps beschränkt) &#8211; komme aber, wenn ich eine vergleichbare Skallierbarkeit mein Web App wie bei Google App Engine entwicklen möchte, zu den gleichen Restriktionen die die App Engine hat (kein Schreiben in lokales Filesystem, keine relationale Datenbank wie mySQL etc.).<br />
Google App Engine erscheint also als idealer &#8220;out of the box&#8221; Hoster für Django Apps. Sicher wird die App Engine auch bald für <a href="http://www.rubyonrails.org/">Ruby on Rails</a> verfügbar sein, da die Frameworks sehr ähnlich sind und sich RoR für Googles App Engine geradezu aufdrängt.</p>
<p>Teil 2 &#8211; eine einfache Demo.<br />
Die Original-Demo von Campfire ist wegen der geringen Auflösung nicht zu gebrauchen. Hier eine bessere Version mit dem gleichen Inhalt:<br />
<object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/bfgO-LXGpTM&#038;hl=en"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/bfgO-LXGpTM&#038;hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></p>
<p>Teil 3 &#8211; Betrachtung der 5 Komponenten des App Engine Stacks:</p>
<blockquote><p>
1) scalable serving infrastructure<br />
2) python runtime and libraries<br />
3) SDK<br />
4) web-based admin console<br />
5) scalable datastore
</p></blockquote>
<p><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/oG6Ac7d-Nx8&#038;hl=en"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/oG6Ac7d-Nx8&#038;hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></p>
<p>Interessant ist hier der Teil wo erklärt wird, wie die Skallierbarkeit umgesetzt wird. Man braucht eine Alternative zu klassischen relationalen Datenbanken (wie z.B. mySQL) die es erlaubt besser zu skallieren. Googles <a href="http://labs.google.com/papers/bigtable.html">Big-Table</a> und GQL sind die Komponenten, die für die App Engine den DataStore übernehen und so die Skallierbarkeit &#8220;out of the box&#8221; mit sich bringen. </p>
<p>Bei EC2 von Amazon kann ich natürlich auch weiterhin eigene mySQL Server einsetzen &#8211; aber wenn ich wirklich gross skalieren will, brauche ich auch etwas, das besser skalliert als mySQL. <a href="/grose-nachfrage-nach-simpledb-data-20-fur-web-20/198">Hierfür stellt mir Amazon via SimpleDB eine vergleichbare Technologie breit</a>. Aber ich muss das bei Amazon alles irgendwie erst unter einen Hut bringen und selbst managen (EC2, S3, SimpleDB, Integration RoR, Skallierung via virtueller Instanzen in Abhängigkeit der Last usw.) . All das gebe ich bei Google App Engine an Google ab &#8211; und zahle dafür natürlich den Preis, dass ich nicht so flexibel bin wie bei EC2.</p>
<p>Die Umstellung von relationalen Datenbank auf BigTable/GQL bzw. SimpeDB bei Amazon sehe ich zZ. als die größte Hürde für Apps die bereits mit Django oder RoR entwickelt wurden.</p>
<p>Teil 4 &#8211; Python Entwickler und Google Software Engineer Guido van Rossum spricht über Goolge App Engine:<br />
<object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/oTFL7FPLnXY&#038;hl=en"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/oTFL7FPLnXY&#038;hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></p>
<p>Als Entwickler teile ich seine Begeisterung für das Projekt &#8211; und als Sprache wünsche ich mir neben <a href="http://en.wikipedia.org/wiki/Python_%28programming_language%29">Python</a> natürlich Ruby.</p>
<p>Teil 5 &#8211; Google Product Manager Pete Koomen demonstriert App Engine&#8217;s web-basierte admin console:<br />
<object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/JcM2Ejk1tis&#038;hl=en"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/JcM2Ejk1tis&#038;hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></p>
<p>Hier muss sich zeigen, ob man die gleiche Flexibelität bekommen, die man hat, wenn man seine Logs selbst vorliegen hat (die kann ich per AWStats, SawMill usw. auswerten). Aber auch hier gibt es natürlich vereinfachungen: Wenn ich meinen eigenen Cluster von WWW-Servern fahre muss ich die Logs zusammenführen bevor ich sie auswerten kann.<br />
Auch fällt mir zZ die Vorstellung schwer, dass ich meinen Web-Server nicht mehr selbst konfigurieren kann.<br />
Als lokale Datensicherung für den DataStore (BigTable oder SimpleDB) wird es sicher auch ein Dump und eine Restore-Möglichkeit geben &#8211; denn irgendwie möchte man seine Daten ja auch lokal gesichert wissen. All das sind Punkte die man erst in der Praxis kennen lernen muss &#8211; aber von den Möglichkeiten, die Google mir mit der App Engine in die Hand legt bin ich total begeistert. Ich wünsche ich hätte ein 48-Stunden Tag, damit ich mich (neben meiner normalen Arbeit) damit beschäftigen könnte&#8230;</p>
<p>Teil 6 &#8211; Google Product Manager Paul McDonald zeigt einige Demo Anwendungen:<br />
<object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/K7usoKm5zwE&#038;hl=en"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/K7usoKm5zwE&#038;hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></p>
<p>Last but not least habe ich noch dieses Video gefunden:<br />
Dion Almaer von Google bringt es auf den Punkt, wenn er App Engine mit Amazon EC2, S3 und SimpleDB vergleicht. Ausserdem macht er grosse Hoffnung auf ein rasches Erscheinen von RoR via App Engine, da er selbst ein RoR Fan ist. Absolut sehenswert dieses Interview:</p>
<blockquote><p>On the train ride between Brussels and London, I got the chance to interview Dion Almaer, of Google, regarding the recently announced Google App Engine cloud computing product.
</p></blockquote>
<p><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/J8q1lFRVMRU&#038;hl=en"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/J8q1lFRVMRU&#038;hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></p>
<p>Einen leicht <a href="http://www.taz.de/1/leben/internet/artikel/1/google-wird-riesen-server/?src=TE&#038;cHash=f8b0ad3b18">verständlichen Artikel zu Google App Engine und die möglichen Strategien von Goolge habe ich bei taz.de gefunden</a>.</p>
<p><a href="http://www.brianberliner.com/2008/04/09/google-app-engine-body-slams-amazon-web-services/">Brian Berliner beschreibt es in seinem Blog</a> ganz treffend:</p>
<blockquote><p>
Amazon Web Services gives you the logs and asks you to build yourself a cabin. Amazon Web Services lets you change that cabin into a chateaux or a lodge, but you’ve got to wield the hammer.<br />
Google App Engine gives you a log cabin and asks you to move in, invite your friends, and start to party. When the party gets too big, Google App Engine builds you a bigger cabin, chateaux, or lodge. You keep partying.</p>
<p>I believe the simplest approach wins.
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://lars-schenk.com/google-app-engine-eldorado-fur-entwickler/208/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Open Source Wettbewerb</title>
		<link>http://lars-schenk.com/open-source-wettbewerb/194</link>
		<comments>http://lars-schenk.com/open-source-wettbewerb/194#comments</comments>
		<pubDate>Mon, 17 Dec 2007 10:44:57 +0000</pubDate>
		<dc:creator>Lars Schenk</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[SimpleDB]]></category>

		<guid isPermaLink="false">http://lars-schenk.com/open-source-wettbewerb/194</guid>
		<description><![CDATA[Kurz nachdem Amazon SimpleDB bekannt gegeben hat, gibt es auf RubyForge bereits drei konkurierende Ruby-Wrapper für die API: aws-simpledb aws-sdb simpledb]]></description>
			<content:encoded><![CDATA[<p>Kurz nachdem <a href="http://www.heise.de/newsticker/meldung/100659">Amazon SimpleDB bekannt gegeben hat</a>, gibt es auf <a href="http://rubyforge.org/">RubyForge</a> bereits drei konkurierende Ruby-Wrapper für die API:</p>
<p><a href="http://rubyforge.org/projects/aws-simpledb/">aws-simpledb</a><br />
<a href="http://rubyforge.org/projects/aws-sdb/">aws-sdb</a><br />
<a href="http://rubyforge.org/projects/simpledb/">simpledb</a></p>
]]></content:encoded>
			<wfw:commentRss>http://lars-schenk.com/open-source-wettbewerb/194/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Ruby on Rails vs PHP / PHP-Frameworks</title>
		<link>http://lars-schenk.com/ruby-on-rails-vs-php-php-frameworks/184</link>
		<comments>http://lars-schenk.com/ruby-on-rails-vs-php-php-frameworks/184#comments</comments>
		<pubDate>Thu, 25 Oct 2007 09:57:17 +0000</pubDate>
		<dc:creator>Lars Schenk</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[Video]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://lars-schenk.com/ruby-on-rails-vs-php-php-frameworks/184</guid>
		<description><![CDATA[Gregg Pollack and Jason Seifer von RailsEnvy.com haben einige Ruby on Rails Werbespots erstellt die in der gleichen Art wie Apples &#8220;Mac vs PC&#8221; Werbekampagne gemacht sind. Echt lustig:]]></description>
			<content:encoded><![CDATA[<p>Gregg Pollack and Jason Seifer von <a href="http://RailsEnvy.com">RailsEnvy.com</a> haben einige Ruby on Rails Werbespots erstellt die in der gleichen Art wie Apples &#8220;Mac vs PC&#8221; Werbekampagne gemacht sind. Echt lustig:</p>
<p><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/n1NVfDlU6yQ"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/n1NVfDlU6yQ" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></p>
<p><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/GQXqWkWqnSw"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/GQXqWkWqnSw" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://lars-schenk.com/ruby-on-rails-vs-php-php-frameworks/184/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Frischzellenkur: Ruby für CLR und JVM</title>
		<link>http://lars-schenk.com/ruby-fuer-clr-und-jvm/79</link>
		<comments>http://lars-schenk.com/ruby-fuer-clr-und-jvm/79#comments</comments>
		<pubDate>Tue, 21 Nov 2006 14:09:00 +0000</pubDate>
		<dc:creator>Lars Schenk</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.lars-schenk.com/ruby-fuer-clr-und-jvm/79</guid>
		<description><![CDATA[Seit Ruby von David Heinemeier Hansson auf Schienen gesetzt wurde ist die Programmiersprache Ruby mega hip - siehe auch Tiobe Programming Community Index - November Headline: Ruby is rocketing skywards. Zwar steht der Ruby Interpreter für alle wichtigen Plattformen zur Verfügung - aber ich würde ungerne einen Interpreter einsetzen, der neben der langsameren Ausführung des [...]]]></description>
			<content:encoded><![CDATA[<p><img style="float: right; margin-left: 20px; margin-bottom: 10px;" src="/images/ruby.gif" title="Ruby" alt="" />Seit <a href="http://www.ruby-lang.org/" title="Ruby">Ruby</a> von <a href="http://www.loudthinking.com/about.html">David Heinemeier Hansson</a> auf <a title="Ruby on Rails" href="http://www.rubyonrails.org/">Schienen</a> gesetzt wurde ist die Programmiersprache Ruby mega hip  - siehe auch Tiobe Programming Community Index  - <a href="http://www.tiobe.com/tpci.htm">November Headline: Ruby is rocketing skywards</a>.</p>
<p>Zwar steht der Ruby Interpreter für alle wichtigen Plattformen zur Verfügung - aber ich würde ungerne einen Interpreter einsetzen, der neben der langsameren Ausführung des Codes auch die Herausgabe des Quellcodes zwingend erforderlich macht. Und mit RubyScript2Exe steht ja auch kein echter Compiler zur Verfügung. Zwar gibt es mit <a href="http://www.atdot.net/yarv/">YARV</a> ein Projekt für eine Ruby-VM, aber es erscheint mir viel eleganter statt einer eigenen Ruby VM oder diverser Ruby-Compiler für verschiedene Plattformen nur Ruby-Compiler zu haben, die die gängigen VM wie die Java VM oder die Common Language Runtime (CLR) von .NET. bedienen und damit auch gleich einen Brückenschlag in diese Welten ermöglichen.</p>
<p>Microsoft stellt dafür den Softwareentwickler <a href="http://www.iunknown.com/">John Lam</a> zum Januar 2007 ein, der hinter <a href="http://www.rubyclr.com/">RubyCLR</a> steht. Damit soll Ruby für die  CLR von .NET verfügbar gemacht werden. Ein ähnliches Projekt finde ich unter <a href="http://plas.fit.qut.edu.au/Ruby.NET/">Ruby.NET</a> in einer frühen Beta-Phase. Letzteres erfordert .NET ab Version 2 und läuft damit nicht unter dem aktuellen Mono. </p>
<p>Auf der anderen Seite hat <a href="http://headius.blogspot.com/2006/09/jruby-steps-into-sun.html">Sun zwei kompetente Entwickler aus der Open-Source Gemeinde hinzugewonnen</a> und so tüfteln <a href="http://headius.blogspot.com/">Charles Oliver Nutter</a> und Thomas Enebo nun für Sun Microsystems an dem Java basierten Interpreter <a href="http://jruby.codehaus.org/">JRuby</a> herum, der neben der Ausführung von Ruby Code in der JVM auch die Integration mit Java Code ermöglicht. Derzeit gibt es nur den Java basierten Interpreter - ein bytecode Compiler ist aber in Arbeit. Mit JRuby kann man also auf das Java Universum zurückgreifen und z.B. plattformübergreifende Desktop Anwendungen auf Basis von Swing erstellen:</p>
<div class="igBar"><span id="lruby-2"><a href="#" onclick="javascript:showPlainTxt('ruby-2'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">RUBY:</span>
<div id="ruby-2">
<div class="ruby">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#008000; font-style:italic;"># Import Java packages</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#CC0066; font-weight:bold;">require</span> 'java'</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">JFrame = javax.<span style="color:#9900CC;">swing</span>.<span style="color:#9900CC;">JFrame</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">frame = JFrame.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">"Hello Swing"</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">button = javax.<span style="color:#9900CC;">swing</span>.<span style="color:#9900CC;">JButton</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">"Klick Me!"</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#9966CC; font-weight:bold;">class</span> ClickAction &lt;java.<span style="color:#9900CC;">awt</span>.<span style="color:#9900CC;">event</span>.<span style="color:#9900CC;">ActionListener</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#9966CC; font-weight:bold;">def</span> actionPerformed<span style="color:#006600; font-weight:bold;">&#40;</span>evt<span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; javax.<span style="color:#9900CC;">swing</span>.<span style="color:#9900CC;">JOptionPane</span>.<span style="color:#9900CC;">showMessageDialog</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">nil</span>, <span style="color:#996600;">"&lt;html&gt;Hello from &lt;b&gt;&lt;u&gt;JRuby&lt;/u&gt;&lt;/b&gt;.&lt;br&gt; Button '#{evt.getActionCommand()}' clicked."</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#9966CC; font-weight:bold;">end</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">button.<span style="color:#9900CC;">addActionListener</span><span style="color:#006600; font-weight:bold;">&#40;</span>ClickAction.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#008000; font-style:italic;"># Add the button to the frame</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">frame.<span style="color:#9900CC;">getContentPane</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">add</span><span style="color:#006600; font-weight:bold;">&#40;</span>button<span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#008000; font-style:italic;"># Show frame</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">frame.<span style="color:#9900CC;">setDefaultCloseOperation</span><span style="color:#006600; font-weight:bold;">&#40;</span>JFrame::EXIT_ON_CLOSE<span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">frame.<span style="color:#9900CC;">pack</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">frame.<span style="color:#9900CC;">setVisible</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">true</span><span style="color:#006600; font-weight:bold;">&#41;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p><img src="/images/jrubyosx.jpg" title="JRuby application bundle unter OS X" style="float: right; margin-left: 20px; margin-bottom: 10px;" /> Darüberhinaus gibt es auch schon Bemühungen <a href="http://www.rubyinside.com/jruby-swt-future-cross-platform-ruby-desktop-app-development-298.html">SWT mit JRuby zu nutzen</a> oder <a href="http://teach.alternamatch.com/jruby/">JRuby unter OS X als einfaches Deployment Modell für GUI Anwendungen</a> zu nutzen. </p>
<p>Interessant wird es auch noch sein, wie das ganze dann ggf. noch mit <a href="http://www.trolltech.com/company/newsroom/announcements/press.2006-07-14.7914556269/">Trolltechs Qt Jambi</a> zusammen geht oder ob man gleich <a href="http://rubyforge.org/projects/korundum/">QtRuby</a> via JRuby nutzen kann.</p>
]]></content:encoded>
			<wfw:commentRss>http://lars-schenk.com/ruby-fuer-clr-und-jvm/79/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

