<?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; ruby</title>
	<atom:link href="http://blog.mocna-kawa.com/category/ruby/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>Upragniony RSS z twojej ulubionej strony (czytaj Pudelek)</title>
		<link>http://blog.mocna-kawa.com/2009/02/upragniony-rss-z-twojej-ulubionej-strony-czytaj-pudelek/</link>
		<comments>http://blog.mocna-kawa.com/2009/02/upragniony-rss-z-twojej-ulubionej-strony-czytaj-pudelek/#comments</comments>
		<pubDate>Wed, 18 Feb 2009 09:01:00 +0000</pubDate>
		<dc:creator>wiktor</dc:creator>
				<category><![CDATA[ciekawostki]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[pudelek]]></category>

		<guid isPermaLink="false">http://blog.mocna-kawa.com/?p=121</guid>
		<description><![CDATA[Wiem, że na to czekałeś od dawna. Wiem, że nie mogłeś skoncentrować się rano, kiedy to przecierałeś oczy, a do twoich żył dopiero napływały pierwsze łyki kawy (czytaj americano z mlekiem z syropem orzechowym). Przecież nie mogłeś upaść tak nisko, żeby otworzyć plotek.pl, kozaczek.pl &#8211; mówiłeś do siebie.
Dla nas geeków odwiedzanie codziennie tych samych serwisów, [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_123" class="wp-caption aligncenter" style="width: 466px"><img class="size-full wp-image-123" title="Poranna kawka z pudelkiem" src="http://blog.mocna-kawa.com/wp-content/uploads/2009/02/poranna-kawka-z-pudelkiem.jpg" alt="Poranna kawka z pudelkiem" width="456" height="297" /><p class="wp-caption-text">Bo dzień należy rozpoczynać dobrze.</p></div>
<p>Wiem, że na to czekałeś od dawna. Wiem, że nie mogłeś skoncentrować się rano, kiedy to przecierałeś oczy, a do twoich żył dopiero napływały pierwsze łyki kawy (czytaj americano z mlekiem z syropem orzechowym). Przecież nie mogłeś upaść tak nisko, żeby otworzyć <a href="http://plotek.pl">plotek.pl</a>, <a href="http://kozaczek.pl">kozaczek.pl</a> &#8211; mówiłeś do siebie.</p>
<p>Dla nas <a href="http://pl.wikipedia.org/wiki/Geek">geeków</a> odwiedzanie codziennie tych samych serwisów, żeby tylko sprawdzić co nowego na stronie, jest bolesną stratą czasu. Dlatego ochoczo używamy przeróżnych <a href="http://pl.wikipedia.org/wiki/Czytnik_kana%C5%82%C3%B3w">czytników kanałów</a>. Z tego powodu bardzo mnie zasumuciło, kiedy to <a href="http://o2.pl">o2</a> zdecydowało się na likwidację kanału RSS z <a href="http://pudelek.pl">Pudelka</a> <img src='http://blog.mocna-kawa.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>
Trzeba było temu zaradzić. Napisałem <strong>skrypt, który chodzi po Pudelku, agreguje notki i tworzy kanał RSS</strong>. Panie i Panowie, oto <em>Pudelek Nieoficjalnie</em>:
</p>
<div class="aligncenter" style="background-color: rgb(245, 225, 210); padding: 10px; text-align:center; -webkit-border-radius: 8px; -moz-border-radius: 8px; border: 1px solid rgb(233, 168, 45);">
<a href="http://feeds2.feedburner.com/Pudelek">http://feeds2.feedburner.com/Pudelek</a>
</div>
<p><br/></p>
<p>
<strong>Technikalia:</strong><br />
Skrypt zarówno agreguje notki znajdujące się na głównej stronie Pudelka, a także fotonotki, które znajdują się po prawej stronie. Skrypt odpalany jest raz na godzinę, więc miejcie to na uwadze.
</p>
<p class="center"><img src="http://blog.mocna-kawa.com/wp-content/uploads/2009/02/github-dla-wspolnego-dobra.jpg" alt="github-dla-wspolnego-dobra" title="github-dla-wspolnego-dobra" width="384" height="119" class="aligncenter size-full wp-image-136" /></p>
<p>Kod źródłowy skryptu na licencji <a href="http://pl.wikipedia.org/wiki/Licencja_X11">MIT</a> umieściłem na <a href="http://github.com/wiktor/pudelek/tree/master">http://github.com/wiktor/pudelek/tree/master</a>. Możecie bawić się nim do woli <img src='http://blog.mocna-kawa.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Jeśli zrobicie na jego podstawie coś fajnego to dajcie mi znać.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mocna-kawa.com/2009/02/upragniony-rss-z-twojej-ulubionej-strony-czytaj-pudelek/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<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>Garść linków do debaty o językach dynamicznych i Scali</title>
		<link>http://blog.mocna-kawa.com/2008/01/garsc-linkow-do-debaty-o-jezykach-dynamicznych-i-scali/</link>
		<comments>http://blog.mocna-kawa.com/2008/01/garsc-linkow-do-debaty-o-jezykach-dynamicznych-i-scali/#comments</comments>
		<pubDate>Thu, 24 Jan 2008 20:28:19 +0000</pubDate>
		<dc:creator>wiktor</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[scala]]></category>

		<guid isPermaLink="false">http://blog.mocna-kawa.com/2008/01/24/garsc-linkow-do-debaty-o-jezykach-dynamicznych-i-scali/</guid>
		<description><![CDATA[
Dziś dość króciutko. Tylko linki, ale za to bardzo smakowite.

Can Dynamic Languages Scale?
Notka na TheServerSide dotycząca niepowodzenia projektu Chandler wywołała bardzo ciekawą dyskusję. Treść niusa nie jest istotna, tylko komentarze. Znajdziemy tam wszystko: obrzucanie się błotem, argumenty ad personam, tezy niczym nie podparte, czyli genialną i kulturalną dyskusję  . Uwaga! Występują tam celebryci ze [...]]]></description>
			<content:encoded><![CDATA[<p>
Dziś dość króciutko. Tylko linki, ale za to bardzo smakowite.</p>
<ul>
<li><a href="http://www.theserverside.com/news/thread.tss?thread_id=48180">Can Dynamic Languages Scale?</a><br />
Notka na TheServerSide dotycząca niepowodzenia projektu Chandler wywołała bardzo ciekawą dyskusję. Treść niusa nie jest istotna, tylko komentarze. Znajdziemy tam wszystko: obrzucanie się błotem, argumenty ad personam, tezy niczym nie podparte, czyli genialną i kulturalną dyskusję <img src='http://blog.mocna-kawa.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> . Uwaga! Występują tam celebryci ze światka developerskiego: Bill Burke i Cedric Beust. Nieprawdaż, że brakuje serwisu pudelek.developers.com? <img src='http://blog.mocna-kawa.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
</li>
<li><a href="http://www.hacknot.info/hacknot/action/showEntry?eid=93">Invasion Of The Dynamic Language Weenies</a><br />
Dość dobra rozprawa o językach dynamicznych o bardzo prowokacyjnym tytule. Dobra lektura &#8211; tylko troszeczkę stronnicza <img src='http://blog.mocna-kawa.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> . Warto poświęcić trochę czasu na poczytanie odnośników z linkografii do wpisu.
</li>
<li><a href="http://www.ibm.com/developerworks/java/library/j-scala01228.html">The busy Java developer&#8217;s guide to Scala</a><br />
Tytuł mówi sam za siebie. Ted Neward, znany gawędziarz na wielu konferencjach, barwnym językiem opisuje pierwsze kroki ze Scalą. Miła czytanka.
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.mocna-kawa.com/2008/01/garsc-linkow-do-debaty-o-jezykach-dynamicznych-i-scali/feed/</wfw:commentRss>
		<slash:comments>1</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>
