<?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>Mocna Kawa &#187; jruby</title>
	<atom:link href="http://blog.mocna-kawa.com/category/jruby/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.mocna-kawa.com</link>
	<description>radosny blog o nowych technologiach</description>
	<lastBuildDate>Tue, 24 Aug 2010 08:47:39 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>JRuby #03 &#8211; Czas pobawić się z Ruby on Rails</title>
		<link>http://blog.mocna-kawa.com/2008/10/jruby-03-czas-pobawic-sie-z-ruby-on-rails/</link>
		<comments>http://blog.mocna-kawa.com/2008/10/jruby-03-czas-pobawic-sie-z-ruby-on-rails/#comments</comments>
		<pubDate>Wed, 29 Oct 2008 23:21:31 +0000</pubDate>
		<dc:creator>wiktor</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jruby]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://blog.mocna-kawa.com/?p=95</guid>
		<description><![CDATA[
W poprzednich dwóch artykułach pokazałem jak zainstalować JRubiego oraz jak może Ruby z Javą rozmawiać. Czas rozpocząć przygodę z JRuby on Rails.
W tym artykule pokażę: 

jak stworzyć prostą aplikację typu CRUD w Ruby on Rails, która będzie korzystać z bazy danych MySQL,
jak wdrożyć tą aplikację na serwerze Tomcat przy użyciu narzędzia Warbler.

Wymagania. Zakładam, że masz [...]]]></description>
			<content:encoded><![CDATA[<p class="center"><img class="alignnone size-full wp-image-96" title="jruby-03-jruby-on-rails" src="http://wiktorgworek.com/blogtest/wp-content/uploads/2008/10/jruby-03-jruby-on-rails.png" alt="JRuby on Rails" width="500" height="125" /></p>
<p>W poprzednich dwóch artykułach pokazałem jak <a href="http://blog.mocna-kawa.com/2008/04/29/jruby-01-jak-zainstalowac-zeby-sie-pobawic/">zainstalować JRubiego</a> oraz <a href="http://blog.mocna-kawa.com/2008/05/09/jruby-02-ruby-rozmawia-z-java-java-rozmawia-z-rubyim/">jak może Ruby z Javą rozmawiać</a>. Czas rozpocząć przygodę z JRuby on Rails.</p>
<p>W tym artykule pokażę: </p>
<ul>
<li>jak stworzyć prostą aplikację typu <a href="http://pl.wikipedia.org/wiki/CRUD">CRUD</a> w Ruby on Rails, która będzie korzystać z bazy danych MySQL,</li>
<li>jak wdrożyć tą aplikację na serwerze <a href="http://tomcat.apache.org">Tomcat</a> przy użyciu narzędzia <a href="http://caldersphere.rubyforge.org/warbler/">Warbler</a>.</li>
</ul>
<p><em>Wymagania.</em> Zakładam, że masz już zainstalowaną bazę danych MySQL 5.0.x. Potrzebny będzie także serwer Tomcat, który można <a href="http://tomcat.apache.org/download-60.cgi">stąd</a> pobrać (w chwili pisania korzystałem z najnowszej wersji 6.0.18). Jeśli nie masz jeszcze zainstalowanego Ruby on Rails to wykonaj następujące polecenie:</p>

<div class="wp_codebox"><table><tr id="p953"><td class="code" id="p95code3"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># Na wszelki wypadek Ruby on Rails przyda się :)</span>
$ jruby <span style="color: #660033;">-S</span> gem <span style="color: #c20cb9; font-weight: bold;">install</span> rails warbler jruby-openssl <span style="color: #660033;">--no-ri</span> <span style="color: #660033;">--no-rdoc</span></pre></td></tr></table></div>

<h4>Stworzenie prostej aplikacji</h4>
<p>Czas napisać prostą aplikację. Jej funkcjonalność ograniczy się do dodawania, edytowania i usuwania wiadomości (dużo powiedziane, bo wiadomość będzie się składać tylko z łańcucha znaków <img src='http://blog.mocna-kawa.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ). Zaczynamy.</p>

<div class="wp_codebox"><table><tr id="p954"><td class="code" id="p95code4"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># Stworzenie szkieletu aplikacji</span>
$ jruby <span style="color: #660033;">-S</span> rails rails_app
$ <span style="color: #7a0874; font-weight: bold;">cd</span> rails_app<span style="color: #000000; font-weight: bold;">/</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Stworzenie modelu wiadomości oraz operacji CRUD dla niego</span>
$ jruby <span style="color: #660033;">-S</span> script<span style="color: #000000; font-weight: bold;">/</span>generate scaffold message content:string
&nbsp;
<span style="color: #666666; font-style: italic;"># i pozostaje konfiguracja dostępu do bazy danych - tego Rails jeszcze nie potrafią same zrobić :)</span>
$ <span style="color: #c20cb9; font-weight: bold;">vim</span> config<span style="color: #000000; font-weight: bold;">/</span>database.yml</pre></td></tr></table></div>

<p>Moją konfigurację można zobaczyć poniżej. Nie należy zapomnieć stworzyć bazy danych w MySQLu (wystarczy tylko <code>railsapp_development</code>).</p>
<pre>defaults: &amp;defaults
    adapter: mysql
    username: root
    password:
    host: localhost
    encoding: utf8

development:
  database: railsapp_development
  &lt;&lt;: *defaults

test:
  database: railsapp_test
  &lt;&lt;: *defaults

production:
  database: railsapp_production
  &lt;&lt;: *defaults</pre>
<p>Aplikacja już napisana, baza danych skonfigurowana. Zostało jeszcze utworzenie odpowiednich tabelek w bazie danych i można już bawić się aplikacją.</p>
<p>[Bash]<br />
# Jeśli nie było żadnego błędu po drodze to poniższa operacja powinna wykonać poprawnie<br />
$ jruby -S rake db:migrate<br />
(in /Users/wiktor/jruby/rails_app)<br />
== 20081028224846 CreateMessages: migrating ===================================<br />
&#8211; create_table(:messages)<br />
-&gt; 0.0049s<br />
== 20081028224846 CreateMessages: migrated (0.0058s) ==========================<br />
[/Bash]</p>
<p>Aplikację można już uruchomić poleceniem <code>jruby -S script/server</code>. Po wejściu na stronę <a href="http://localhost:3000">http://localhost:3000</a> można zobaczyć środowisko uruchomienia aplikacji, a pod adresem <a href="http://localhost:3000/messages">http://localhost:3000/messages</a> znajduje się przed chwilą stworzona, bardzo wyrafinowana aplikacja.</p>
<p class="center"><img class="alignnone size-medium wp-image-97" title="rails-on-java" src="http://blog.mocna-kawa.com/wp-content/uploads/2008/10/rails-on-java-300x264.png" alt="Rails on Java" width="300" height="264" /></p>
<h4>Wdrożenie Ruby on Rails na Tomcata</h4>
<p>Żeby przygotować aplikacje Ruby on Rails do wdrożenia ją na Tomcata, należy użyć biblioteki Warbler. Została ona już zainstalowana poleceniem <code>jruby -S gem install ... </code> na samym początku artykułu.</p>
<p>Przez dłuższy czas obserwowałem rozwój Warblera. Kiedy projekt stawiał pierwsze kroki, przygotowanie aplikacji Ruby on Rails wiązało się ze starannym przygotowaniem pliku konfiguracyjnego, zadbaniem o odpowiednie sterowniki JDBC do bazy danych. Nie było to miłe zajęcie. Z tego powodu warto docenić, że obecnie przygotowanie aplikacji do wdrożenia na Tomcacie jest banalnie proste.</p>
<p>[Bash]<br />
# Stworzenie pliku config/warble.rb.<br />
$ jruby -S warble config</p>
<p># Teraz należy w pliku config/warble.rb zamienić linijkę<br />
#   z   # config.webxml.rails.env = ENV['RAILS_ENV'] || &#8216;production&#8217;<br />
#   na  config.webxml.rails.env = &#8216;development&#8217;</p>
<p># Przygotowanie aplikacji w postaci WAR.<br />
$ jruby -S warble war<br />
jar cf rails_app.war -C tmp/war .</p>
<p># Gotowe?<br />
$ ls -l rails_app.war<br />
-rw-r&#8211;r&#8211;  1 wiktor  wiktor  9800493 Oct 29 23:28 rails_app.war</p>
<p># Mając już Tomcata uruchomionego możemy wdrożyć aplikację.<br />
$ cp rails_app.war ../apache-tomcat-6.0.18/webapps/<br />
[/Bash]</p>
<p>Aplikacja będzie dostępna pod adresem <a href="http://localhost:8080/rails_app">http://localhost:8080/rails_app</a>, a bawić wiadomościami można się tutaj: <a href="http://localhost:8080/rails_app/messages">http://localhost:8080/rails_app/messages</a>.</p>
<p>Parę słów wyjaśnienia. Standardowo Warbler uruchamia aplikację w trybie produkcji. Jednym ze skutków jest to, że aplikacja będzie korzystać z bazy <code>railsapp_production</code>, a nie z <code>railsapp_development</code>, której do tej pory używaliśmy. Zmiana podyktowana była jedynie moją leniwością.</p>
<p>Warto też zauważyć, że cała aplikacja <code>rails_app.war</code> waży niecałe 10 MB. Co się tam znajduje? Otóż cała dystrybucja JRubiego, a także wszystkie zależności Ruby on Rails. Takie życie <img src='http://blog.mocna-kawa.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Zachęcam także do przestudiowania pliku <code>config/warble.rb</code>, poprzez który można konfigurować zachowanie aplikacji na serwerze Javowym.</p>
<p>Smacznego <img src='http://blog.mocna-kawa.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mocna-kawa.com/2008/10/jruby-03-czas-pobawic-sie-z-ruby-on-rails/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>JRuby #02 &#8211; Ruby rozmawia z Javą, Java rozmawia z Ruby&#8217;im</title>
		<link>http://blog.mocna-kawa.com/2008/05/jruby-02-ruby-rozmawia-z-java-java-rozmawia-z-rubyim/</link>
		<comments>http://blog.mocna-kawa.com/2008/05/jruby-02-ruby-rozmawia-z-java-java-rozmawia-z-rubyim/#comments</comments>
		<pubDate>Fri, 09 May 2008 16:44:55 +0000</pubDate>
		<dc:creator>wiktor</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[jruby]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://blog.mocna-kawa.com/?p=80</guid>
		<description><![CDATA[



W poprzednim poście opisywałem proces instalacji JRuby&#8217;iego tak, żeby korzystanie z niego było proste. Czas wziąć na warsztat integrację Ruby&#8217;iego z Javą i odwrotnie.

Ruby rozumie Javę

Kiedy JRuby interpretuje skrypt Ruby&#8217;iego to mogą tam być używane wszystkie klasy Javowe. Chcemy, żeby skrypt korzystał z naszej wcześniej utworzonej biblioteki w Javie? Nie ma problemu, dołączamy ją do [...]]]></description>
			<content:encoded><![CDATA[<p class="center">
<img src="http://blog.mocna-kawa.com/wp-content/uploads/2008/05/jruby-02-integracja-300x81.png" alt="Krok drugi: integracja" title="jruby-02-integracja" width="300" height="81" class="alignnone size-medium wp-image-79" />
</p>
<p>
<a href="http://blog.mocna-kawa.com/2008/04/29/jruby-01-jak-zainstalowac-zeby-sie-pobawic/">W poprzednim poście</a> opisywałem proces instalacji JRuby&#8217;iego tak, żeby korzystanie z niego było proste. Czas wziąć na warsztat integrację Ruby&#8217;iego z Javą i odwrotnie.
</p>
<h4>Ruby rozumie Javę</h4>
<p>
Kiedy JRuby interpretuje skrypt Ruby&#8217;iego to mogą tam być używane wszystkie klasy Javowe. Chcemy, żeby skrypt korzystał z naszej wcześniej utworzonej biblioteki w Javie? Nie ma problemu, dołączamy ją do <code>CLASSPATH</code> i możemy z poziomu Ruby&#8217;iego z niej korzystać. Integracja została przedstawiona na poniższych przykładach. Dołożyłem wszelkich starań, aby komentarze były wyczerpujące.
</p>
<p>Uruchommy interakcyjną konsolę JRuby&#8217;iego: <code>jruby -S jirb</code> i następnie pobawmy się kodem:</p>
<p>[Ruby]<br />
# Znane z Javy importowanie wygląda standardowo.<br />
# Niestety importowanie z gwiazdką nie działa, więc import javax.swing.* poczęstuje nas błędem.<br />
import javax.swing.JFrame<br />
import javax.swing.JButton</p>
<p># Składnia Ruby&#8217;iego została zachowana dla obiektów Javowych, widać to w tworzeniu nowego egzemplarza JFrame<br />
# Warto zauważyć, że nawiasy są nieobowiązkowe. Poniższe wywołanie jest równoznaczne z JFrame.new(&#8220;&#8230;&#8221;)<br />
frame = JFrame.new &#8220;Ruby swinguje z Java&#8221;</p>
<p># Styl kodowania Ruby&#8217;iego zostaje zachowany także dla metod. W Javie lubimyTakPisać, a w Ruby&#8217;im trochę_inaczej.<br />
# Poniższe wywołanie jest równoważne z frame.setSize(300, 300), które także byłoby poprawne.<br />
frame.set_size 300, 300</p>
<p># Gettery i settery Javowe są dostępne także w odmianie Ruby&#8217;iego.<br />
# Poniższa linijka jest równoważna z frame.setAlwaysOnTop(true), które także byłoby poprawne.<br />
frame.always_on_top = true</p>
<p>button = JButton.new &#8220;Nacisnij mnie&#8221;</p>
<p># Blok kodu zostanie w locie przekształcony w klasę implementującą interfejs ActionListener. Niezłe!<br />
# Jest to domyślne zachowanie JRuby&#8217;iego, jeśli parametrem jest interfejs z jedną metodą.<br />
# Standardowo w Ruby&#8217;im używa się wcięć z 2 spacjami.<br />
button.add_action_listener do |event|<br />
  # Przykład getterów ala Ruby. Równoznaczne z event.getSource().setText(&#8220;&#8230;&#8221;), które także jest OK.<br />
  event.source.text = &#8220;Nie naciskaj mnie ponownie!&#8221;<br />
  event.source.enabled = false<br />
end</p>
<p>frame.add(button)<br />
frame.show<br />
[/Ruby]</p>
<p>
Czas poczęstować Ciebie czytelniku jakimś smakołykiem. Oto on:
</p>
<p>[Ruby]<br />
# Rozszerzenie klasy Javowej String o mechanizm missing_method, czyli<br />
# ta metoda zostanie wywołana, jeśli na obiekcie zostanie wywołana metoda, która<br />
# nie została zdeklarowana.<br />
JavaUtilities.extend_proxy &#8220;java.lang.String&#8221; do<br />
  def method_missing(symbol, *args)<br />
    puts &#8220;Kogo wolasz?&#8221;<br />
  end<br />
end</p>
<p>txt = java.lang.String.new &#8220;Ala ma kota&#8221;</p>
<p>txt.hmmmm_jak_brzmiala_nazwa_tej_metody?()  # => &#8220;Kogo wolasz?&#8221;<br />
[/Ruby]</p>
<h4>Java rozumie Ruby&#8217;iego</h4>
<p>
Ruby może zostać wpleciony w kod Javy na 3 sposoby:</p>
<ul>
<li>poprzez Scripting API (wprowadzone z Javą 6, JSR 223, unifikacja silników skryptowych używanych w Javie), szczegóły: <a href="https://scripting.dev.java.net/">https://scripting.dev.java.net</a>,</li>
<li>poprzez Beans Scripting Framework (standard wprowadzany przez Apache Jakarta), szczegóły: <a href="http://jakarta.apache.org/bsf/">http://jakarta.apache.org/bsf</a>,</li>
<li>bezpośrednio odwołując się do interpretera JRuby&#8217;iego.</li>
</ul>
<p>
Zajmiemy się tylko pierwszą opcją. Będziemy do tego potrzebowali opakowania silnika JRuby&#8217;iego dla <code>javax.script</code>, które znajdziemy <a href="https://scripting.dev.java.net/servlets/ProjectDocumentList?folderID=8848&#038;expandFolder=8848&#038;folderID=0">tutaj</a> (najlepiej wersję 1.1.3).</p>
<p class="center">
<img src="http://wiktorgworek.com/blogtest/wp-content/uploads/2008/05/jruby-scripting-api.png" alt="jruby-scripting-api" title="jruby-scripting-api" width="500" height="233" class="alignnone size-full wp-image-78" /></p>
<p>
Powyższa grafika przedstawia zależności w Java Scripting API. Z naszego kodu będziemy odwoływać się wyłącznie do klas <code>javax.script.*</code>, żądać silnika JRuby&#8217;iego (<code>jruby-engine.jar</code>), który z kolei sam już będzie odpowiednio wywoływał interpreter JRuby&#8217;iego.
</p>
<p>
Czas podwinąć rękawy i trochę pokodować.
</p>
<p>[Java]<br />
import org.jruby.RubyHash;<br />
import javax.script.*;<br />
import java.util.List;<br />
import java.util.ArrayList;<br />
import java.util.Map;<br />
import static java.lang.System.*;</p>
<p>public class RubyInJava {</p>
<p>    public static void main(String[] args) {<br />
        // Od Java Scripting API żądamy silnik JRuby&#8217;iego<br />
        ScriptEngine rubyEngine = new ScriptEngineManager().getEngineByName(&#8220;jruby&#8221;);<br />
        ScriptContext context = rubyEngine.getContext();</p>
<p>        List<integer> list = new ArrayList<integer>() {{<br />
            add(1); add(2); add(3); add(4);<br />
        }};</p>
<p>        // Do środowiska JRuby&#8217;iego dodajemy globalną zmienną list<br />
        rubyEngine.put(&#8220;list&#8221;, list);</p>
<p>        // Skrypt Ruby&#8217;iego, który będziemy wykonywać<br />
        StringBuilder script = new StringBuilder();<br />
        script.append(&#8220;puts &#8216;&#8212; Ruby &#8212;&#8217;                                  &#8220;).append(&#8220;\n&#8221;)<br />
              .append(&#8220;puts $list.inspect                                   &#8220;).append(&#8220;\n&#8221;)<br />
              // JRuby do kolekcji Javowych dodaje typowe metody Ruby&#8217;iego dla kolekcji<br />
              .append(&#8221; $list.each { |item|                                 &#8220;)<br />
              .append(&#8221;   puts \&#8221;Element #{item}\&#8221;                          &#8220;)<br />
              .append(&#8221; }                                                   &#8220;).append(&#8220;\n&#8221;)<br />
              .append(&#8221; puts \&#8221;Suma: #{$list.inject { |sum, i| sum + i }}\&#8221; &#8220;).append(&#8220;\n&#8221;)<br />
              .append(&#8220;\n&#8221;)<br />
              .append(&#8221; $hash = { :ala => :ma, :co => :kota }               &#8220;).append(&#8220;\n&#8221;);</p>
<p>        // Wykonanie skryptu<br />
        try {<br />
            rubyEngine.eval(script.toString(), context);<br />
        } catch (ScriptException e) {<br />
            e.printStackTrace();<br />
            return;<br />
        }</p>
<p>        out.println(&#8220;&#8212; Java &#8212;&#8221;);</p>
<p>        // Pobranie zmiennej globalnej po wykonaniu skryptu<br />
        Object hashAsObject = rubyEngine.get(&#8220;hash&#8221;);<br />
        out.println(&#8220;Klasa: &#8221; + hashAsObject.getClass());</p>
<p>        RubyHash hash = (RubyHash) hashAsObject;<br />
        for (Object o : hash.entrySet()) {<br />
            Map.Entry entry = (Map.Entry) o;<br />
            System.out.println(entry.getKey() + &#8221; => &#8221; + entry.getValue());<br />
        }<br />
    }<br />
}<br />
[/Java]</p>
<p>
Aby uruchomić powyższy kawałek kodu trzeba mieć w <code>CLASSPATH</code>: <code>jruby.jar</code> oraz <code>jruby-engine.jar</code>.
</p>
<p>
Powyższe przykłady ilustrują, że ludzie pracujący nad JRuby&#8217;im wykonali kawał dobrej roboty, żeby łączenie Javy z Ruby&#8217;im było bezstresowe dla developerów. Takie połączenie dwóch światów daje nam nowe możliwości: tworzenie <a href="http://en.wikipedia.org/wiki/Domain-specific_programming_language">mini-języków</a> dla aplikacji Javowych, aplikacje Swingowe w Ruby&#8217;im, nie wspominając o Ruby on Rails, a dla Ruby&#8217;istów dostępny jest cały ekosystem Javy <img src='http://blog.mocna-kawa.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mocna-kawa.com/2008/05/jruby-02-ruby-rozmawia-z-java-java-rozmawia-z-rubyim/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>JRuby #01 &#8211; Jak zainstalować, żeby się pobawić?</title>
		<link>http://blog.mocna-kawa.com/2008/04/jruby-01-jak-zainstalowac-zeby-sie-pobawic/</link>
		<comments>http://blog.mocna-kawa.com/2008/04/jruby-01-jak-zainstalowac-zeby-sie-pobawic/#comments</comments>
		<pubDate>Tue, 29 Apr 2008 20:27:13 +0000</pubDate>
		<dc:creator>wiktor</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[jruby]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://blog.mocna-kawa.com/?p=75</guid>
		<description><![CDATA[



Ten post otwiera serię artykułów poświęconych JRuby&#8217;iemu, czyli implementacji Ruby&#8217;iego na platformę Javy. Nikomu raczej nie trzeba przedstawiać nikogo z tej pary  . Na warsztat weźmiemy JRuby 1.1.1.


Zacznijmy od instalacji. Wszystkie poniższe komendy shella można bez problemu wykonać na MacOSie lub Linuksie/Uniksie. Jeśli ktoś pracuje pod Windowsem to polecam zainstalowanie Cygwina. Zatem do dzieła!


Uwaga: [...]]]></description>
			<content:encoded><![CDATA[<p class="center">
<a href='http://wiktorgworek.com/blogtest/wp-content/uploads/2008/04/jruby-01-instalacja.png'><img src="http://blog.mocna-kawa.com/wp-content/uploads/2008/04/jruby-01-instalacja-300x81.png" alt="JRuby #01 - Instalacja" title="jruby-01-instalacja" width="300" height="81" class="alignnone size-medium wp-image-76" /></a>
</p>
<p>
Ten post otwiera serię artykułów poświęconych <a href="http://jruby.codehaus.org/">JRuby&#8217;iemu</a>, czyli implementacji Ruby&#8217;iego na platformę Javy. Nikomu raczej nie trzeba przedstawiać nikogo z tej pary <img src='http://blog.mocna-kawa.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Na warsztat weźmiemy <strong>JRuby 1.1.1</strong>.
</p>
<p>
Zacznijmy od instalacji. Wszystkie poniższe komendy shella można bez problemu wykonać na MacOSie lub Linuksie/Uniksie. Jeśli ktoś pracuje pod Windowsem to polecam zainstalowanie <a href="http://www.cygwin.com/">Cygwina</a>. Zatem do dzieła!
</p>
<p>
<i>Uwaga: </i> dystrybucja JRuby&#8217;iego zostanie zainstalowana w <code>~/jruby</code>.
</p>
<p>[Bash]<br />
# Upewnienie się, że jesteśmy w katalogu domowym<br />
cd</p>
<p># Tworzymy katalog jruby/<br />
mkdir jruby<br />
cd jruby</p>
<p># Pobieramy dystrybucję JRuby&#8217;iego 1.1.1<br />
wget http://dist.codehaus.org/jruby/jruby-bin-1.1.1.zip<br />
unzip jruby-bin-1.1.1.zip<br />
rm jruby-bin-1.1.1.zip</p>
<p># Tworzymy jeszcze alias do skryptu uruchamiającego JRuby, który dodajemy do pliku .bashrc<br />
echo &#8220;export JRUBY_HOME=\&#8221;$HOME/jruby/jruby-1.1.1\&#8221;" >> ~/.bashrc<br />
source ~/.bashrc<br />
echo &#8220;alias jruby=\&#8221;$JRUBY_HOME/bin/jruby\&#8221;" >> ~/.bashrc<br />
source ~/.bashrc</p>
<p># Przyda się jeszcze Ruby on Rails <img src='http://blog.mocna-kawa.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
jruby -S gem install rails &#8211;no-ri &#8211;no-rdoc<br />
[/Bash]</p>
<p>
Ponieważ JRuby może się kłócić z obecną na komputerze dystrybucją Ruby&#8217;iego (u mnie tak było) to zaleca się poprzedzanie wywoływania programów w ten sposób: <code>jruby -S nazwa_polecenia</code>, np. <code>jruby -S gem list</code> &#8211; wtedy nie kłóci się nam z poleceniem <code>gem</code> z standardowej dystrybucji Ruby&#8217;iego.
</p>
<p>
Dla mnie ciągłe poprzedzanie poleceń poprzez <code>jruby -S ...</code> jest żmudne wolałem skorzystać z <a href="http://wiki.jruby.org/wiki/Main_Page">wiki projektu JRuby</a>, gdzie przedstawili ciekawy trick.<br />
[Bash]<br />
# Do dodania do .bashrc lub .bash_login &#8211; co kto lubi <img src='http://blog.mocna-kawa.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>for f in $JRUBY_HOME/bin/*; do<br />
     f=$(basename $f)<br />
     case $f in jruby*|jirb*|*.bat|*.rb|_*) continue ;; esac<br />
     eval &#8220;alias j$f=&#8217;jruby -S $f&#8217;&#8221;<br />
done<br />
[/Bash]<br />
Powyższy skrypt tworzy aliasy dla wszystkich poleceń np. <code>gem</code>, <code>rails</code> w postaci <code>jgem</code>, <code>jrails</code>. Prefiks <code>j</code> jednoznacznie mówi, o co chodzi.
</p>
<p>
Teraz czas na chwilkę zabawy.</p>
<pre>
<em># Zobaczmy, jaką wersję mamy</em>
<strong>$</strong> jruby -v
ruby 1.8.6 (2008-04-22 rev 6555) [i386-jruby1.1.1]

<em># Zabawy z konsolą jirb</em>
<strong>$</strong> jruby -S jirb
<strong>irb(main):001:0></strong> out = java.lang.System.out
=> #&lt;Java::JavaIo::PrintStream:0xe33255 @java_object=java.io.PrintStream@7dcc23&gt;
<strong>irb(main):002:0></strong> out.println "Hello World!"
Hello World!
=> nil
</pre>
</p>
<p>
Tak zaopatrzeni możemy spokojnie wyruszyć na przygodę z JRuby&#8217;im. Niedługo kolejne artykuły poświęcone JRuby&#8217;iemu.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mocna-kawa.com/2008/04/jruby-01-jak-zainstalowac-zeby-sie-pobawic/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Prezentacja JRuby on Rails na bis w Krakowie</title>
		<link>http://blog.mocna-kawa.com/2008/04/prezentacja-jruby-on-rails-na-bis-w-krakowie/</link>
		<comments>http://blog.mocna-kawa.com/2008/04/prezentacja-jruby-on-rails-na-bis-w-krakowie/#comments</comments>
		<pubDate>Sat, 19 Apr 2008 14:13:22 +0000</pubDate>
		<dc:creator>wiktor</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jruby]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[swing]]></category>
		<category><![CDATA[widget]]></category>
		<category><![CDATA[jug]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://blog.mocna-kawa.com/?p=74</guid>
		<description><![CDATA[
Już w najbliższy czwartek będę w Krakowie dawał prezentację o JRuby&#8217;im w ramach PJUG. Szczegóły wydarzenia tutaj. Gdzie, o której?


24 kwietnia 2008 (czwartek), godz. 19:00 &#8211; 20:30
Akademia Górniczo-Hutnicza
Al. Mickiewicza 30, sala 429 C2


Czego można się spodziewać? Będzie to odświeżona wersja mojego show o JRuby&#8217;im (prezentacja i prawdziwe kodowanie na żywo), które debiutowało podczas WarsJava&#8217;07. Przez [...]]]></description>
			<content:encoded><![CDATA[<p>
Już w najbliższy czwartek będę w Krakowie dawał prezentację o JRuby&#8217;im w ramach <a href="http://java.pl">PJUG</a>. Szczegóły wydarzenia <a href="http://www.java.pl/?p=48">tutaj</a>. Gdzie, o której?
</p>
<blockquote><p>
<strong>24 kwietnia 2008 (czwartek), godz. 19:00 &#8211; 20:30</strong><br />
Akademia Górniczo-Hutnicza<br />
Al. Mickiewicza 30, sala 429 C2
</p></blockquote>
<p>
<strong>Czego można się spodziewać?</strong> Będzie to odświeżona wersja mojego <a href="http://blog.mocna-kawa.com/2007/11/18/notatki-z-warsztatu-jruby-on-rails/">show o JRuby&#8217;im</a> (prezentacja i prawdziwe kodowanie na żywo), które debiutowało podczas <a href="http://warsjava.pl">WarsJava&#8217;07</a>. Przez ostatnie pół roku się dużo zmieniło i będzie to odzwierciedlone na mojej prezentacji:</p>
<ul>
<li>będzie użyta najnowsza wersja Ruby on Rails 2.0,</li>
<li>architektura REST, czyli architektura zorientowana na zasoby,</li>
<li>ilość zmian w aplikacji RoR, żeby uruchomić pod JRuby dramatycznie zmalała,</li>
<li>sposób wdrażania aplikacji RoR na serwery aplikacyjne został uproszczony,</li>
<li>i oczywiście nie zabraknie AJAXa <img src='http://blog.mocna-kawa.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</li>
</ul>
<p>Zapraszam!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mocna-kawa.com/2008/04/prezentacja-jruby-on-rails-na-bis-w-krakowie/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Notatki z warsztatu &#8220;JRuby on Rails&#8221;</title>
		<link>http://blog.mocna-kawa.com/2007/11/notatki-z-warsztatu-jruby-on-rails/</link>
		<comments>http://blog.mocna-kawa.com/2007/11/notatki-z-warsztatu-jruby-on-rails/#comments</comments>
		<pubDate>Sun, 18 Nov 2007 20:01:34 +0000</pubDate>
		<dc:creator>wiktor</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jruby]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://blog.mocna-kawa.com/2007/11/18/notatki-z-warsztatu-jruby-on-rails/</guid>
		<description><![CDATA[Dziękuje wszystkim, którzy pojawili się na mojej prezentacji/warsztacie podczas WarsJava. Była ona na prawdę udana, a dyskusja po prezentacji trwała ponad pół godziny! Dziękuje jeszcze raz wszytkim za obecność. Udostępniam poniżej slajdy z prezentacji (poniżej), kod aplikacji stworzonej podczas warsztatu oraz życzenie załączam moje notatki/scenariusz prezentacji.

źródła stworzonej aplikacji
scenariusz prezentacji


 &#124; View &#124; Upload your own

]]></description>
			<content:encoded><![CDATA[<p>Dziękuje wszystkim, którzy pojawili się na mojej prezentacji/warsztacie podczas WarsJava. Była ona na prawdę udana, a dyskusja po prezentacji trwała ponad pół godziny! Dziękuje jeszcze raz wszytkim za obecność. Udostępniam poniżej slajdy z prezentacji (poniżej), kod aplikacji stworzonej podczas warsztatu oraz życzenie załączam moje notatki/scenariusz prezentacji.</p>
<ul>
<li><a href="http://blog.mocna-kawa.com/wp-content/uploads/2007/11/sms.zip" title="sms.zip">źródła stworzonej aplikacji</a></li>
<li><a href="http://blog.mocna-kawa.com/wp-content/uploads/2007/11/warsztat-notatki.pdf" title="warsztat-notatki.pdf">scenariusz prezentacji</a></li>
</ul>
<div style="width:425px;text-align:left" id="__ss_171232"><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=jruby-on-rails-1195415799213434-2"/><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=jruby-on-rails-1195415799213434-2" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;"><a href="http://www.slideshare.net/?src=embed"><img src="http://static.slideshare.net/swf/logo_embd.png" style="border:0px none;margin-bottom:-5px" alt="SlideShare"/></a> | <a href="http://www.slideshare.net/wiktor/jruby-on-rails" title="View 'JRuby On Rails ' on SlideShare">View</a> | <a href="http://www.slideshare.net/upload">Upload your own</a></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.mocna-kawa.com/2007/11/notatki-z-warsztatu-jruby-on-rails/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Warsztaty Javowe: JRuby on Rails, czyli łączenie Javy i Rubiego</title>
		<link>http://blog.mocna-kawa.com/2007/11/warsztaty-javowe-jruby-on-rails-czyli-laczenie-javy-i-rubiego/</link>
		<comments>http://blog.mocna-kawa.com/2007/11/warsztaty-javowe-jruby-on-rails-czyli-laczenie-javy-i-rubiego/#comments</comments>
		<pubDate>Tue, 13 Nov 2007 13:53:15 +0000</pubDate>
		<dc:creator>wiktor</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jruby]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://blog.mocna-kawa.com/2007/11/13/warsztaty-javowe-jruby-on-rails-czyli-laczenie-javy-i-rubiego/</guid>
		<description><![CDATA[

Już w najbliższą sobotę o godzinie 11:00 będę dawał prezentację &#8220;JRuby on Rails, czyli łączenie Javy i Rubiego&#8221; na WarsJava &#8211; I Warszawskie Warsztaty Javowe organizowane przez Warszawa JUG. Warsztaty będą miały miejsce na MIMUWie. I co najważniejsze: WSTĘP WOLNY  .


Podczas warsztatów pokażę:

jak stworzyć prostą aplikację w Ruby on Rails,
jak korzystać z kodu Javy [...]]]></description>
			<content:encoded><![CDATA[<p class="center"><img src='http://blog.mocna-kawa.com/wp-content/uploads/2007/11/duke_ruby_rails_java.png' alt='Duke + Ruby + Rails = Java ;)' /></p>
<p>
Już w najbliższą sobotę o godzinie 11:00 będę dawał prezentację &#8220;JRuby on Rails, czyli łączenie Javy i Rubiego&#8221; na <a href="http://warsjava.pl/">WarsJava</a> &#8211; I Warszawskie Warsztaty Javowe organizowane przez <a href="http://groups.google.com/group/warszawa-jug">Warszawa JUG</a>. Warsztaty będą miały miejsce na <a href="http://www.mimuw.edu.pl">MIMUWie</a>. I co najważniejsze: <b>WSTĘP WOLNY</b> <img src='http://blog.mocna-kawa.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .
</p>
<p>
Podczas warsztatów pokażę:</p>
<ul>
<li>jak stworzyć prostą aplikację w Ruby on Rails,</li>
<li>jak korzystać z kodu Javy z poziomu Ruby&#8217;iego,</li>
<li>jak korzystać ze sterowników JDBC do łączenia się z bazą danych,</li>
<li>jak integrować stworzoną aplikacją z istniejącą aplikacją JEE (JMS, serwer aplikacji JBoss),</li>
<li>jak wdrażać aplikacje oparte o Ruby on Rails.</li>
</ul>
<p>Zapraszam!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mocna-kawa.com/2007/11/warsztaty-javowe-jruby-on-rails-czyli-laczenie-javy-i-rubiego/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
