<?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; java</title>
	<atom:link href="http://blog.mocna-kawa.com/category/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.mocna-kawa.com</link>
	<description>radosny blog o nowych technologiach</description>
	<lastBuildDate>Wed, 15 Dec 2010 13:49:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Java Developers Day &#8211; już nie warto</title>
		<link>http://blog.mocna-kawa.com/2010/09/java-developers-day-juz-nie-warto/</link>
		<comments>http://blog.mocna-kawa.com/2010/09/java-developers-day-juz-nie-warto/#comments</comments>
		<pubDate>Sun, 26 Sep 2010 13:43:37 +0000</pubDate>
		<dc:creator>wiktor</dc:creator>
				<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://blog.mocna-kawa.com/?p=313</guid>
		<description><![CDATA[Pamiętam jeszcze ekscytację podczas pierwszej edycji JDD w 2006 roku, kiedy Bruce Eckel składał podpis pod Thinking in Java. Ile wówczas się działo! Programowanie aspektowe, generyki, TDD&#8230; Jednak od dwóch edycji jest coraz gorzej. W tym roku postanowiłem nawet nie zawracać sobie głowy JDD. Nie warto. Dlaczego? Brakuje opiekuna merytorycznego dla konferencji. Nie ma myśli [...]]]></description>
			<content:encoded><![CDATA[<p>Pamiętam jeszcze ekscytację podczas pierwszej edycji <a href="http://10.jdd.org.pl/">JDD</a> w 2006 roku, kiedy Bruce Eckel składał podpis pod Thinking in Java. Ile wówczas się działo! Programowanie aspektowe, generyki, TDD&#8230; Jednak od dwóch edycji jest coraz gorzej. W tym roku postanowiłem nawet nie zawracać sobie głowy JDD. Nie warto.</p>
<p>Dlaczego?</p>
<ul>
<li>Brakuje opiekuna merytorycznego dla konferencji. Nie ma myśli przewodniej. Jest to zbitka luźnych tematów.</li>
<li>Ciągle te same imiona i nazwiska. Bill Burke, Ted Neward, Jarosław Błąd&#8230;.</li>
<li>Nie może być tak, że na dwa tygodnie przed konferencją nie jest znany pełen rozkład jazdy.</li>
<li>Java sama w sobie przestała być już ekscytująca.</li>
</ul>
<p>Już czas na wyrzucenie J z JDD.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mocna-kawa.com/2010/09/java-developers-day-juz-nie-warto/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Javarsovia : Lekcja Stylu : Slajdy</title>
		<link>http://blog.mocna-kawa.com/2010/06/javarsovia-lekcja-stylu-slajdy/</link>
		<comments>http://blog.mocna-kawa.com/2010/06/javarsovia-lekcja-stylu-slajdy/#comments</comments>
		<pubDate>Tue, 29 Jun 2010 19:09:22 +0000</pubDate>
		<dc:creator>wiktor</dc:creator>
				<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://blog.mocna-kawa.com/?p=294</guid>
		<description><![CDATA[Podczas tegorocznej Javarsovii dałem prezentację &#8220;Lekcja Stylu&#8221;. Dużo osób było zainteresowane slajdami. Oto one. Abstrakt: Lekcja Stylu &#8211; czy w Javie można jeszcze dostrzec piękno? Przeglądając listy prezentacji na konferencjach związanych z Javą z ostatnich lat można dostrzec pewien wzorzec. Przedstawia się coraz to bardziej wyrafinowane zręby aplikacji, wskazówki integracyjne dla kolejnych JBusinessComponents oraz zręby [...]]]></description>
			<content:encoded><![CDATA[<p>Podczas tegorocznej Javarsovii dałem prezentację &#8220;Lekcja Stylu&#8221;. Dużo osób było zainteresowane slajdami. Oto one.</p>
<div id="__ss_4651066" style="width: 425px;"><object id="__sse4651066" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=lekcjastylu2-100630085220-phpapp01&amp;stripped_title=lekcja-stylu-4651066" /><param name="name" value="__sse4651066" /><param name="allowfullscreen" value="true" /><embed id="__sse4651066" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=lekcjastylu2-100630085220-phpapp01&amp;stripped_title=lekcja-stylu-4651066" name="__sse4651066" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="padding: 5px 0 12px;">Abstrakt:</div>
</div>
<p><em>Lekcja Stylu &#8211; czy w Javie można jeszcze dostrzec piękno?</em></p>
<p>Przeglądając listy prezentacji na konferencjach związanych z Javą z ostatnich lat można dostrzec pewien wzorzec. Przedstawia się coraz to bardziej wyrafinowane zręby aplikacji, wskazówki integracyjne dla kolejnych JBusinessComponents oraz zręby aplikacji webowych, gdzie wypisanie &#8220;Hello World&#8221; zajmuje trzy linijki zamiast pięciu. Czyżby zapomniano już o samym języku Java? Czyżby wszyscy już przesiedli się na Scalę, Groovy lub JRuby?</p>
<p>Swoją prezentacją chcę wrócić do korzeni, do samego języka Java. Będę pokazywał dobre przykłady, jak należy programować, aby czytanie kodu było miłym doświadczeniem. Nie będzie jednak to wykład o wzorcach projektowych, ale o codzienności programisty, który właśnie po wypiciu porannej kawy i otwarciu edytora, pisze pierwszą tego dnia instrukcję warunkową.</p>
<p>Będzie to hołd książce &#8220;Implementation Patterns&#8221; Kenta Becka. W prezentacji zostaną przedstawione także ułatwiające życie biblioteki takie jak Google Guava, Google Guice oraz Mockito.</p>
<p><strong>Wersja w PDF</strong>: <a href="http://blog.mocna-kawa.com/wp-content/uploads/2010/06/lekcja-stylu.pdf">lekcja-stylu</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mocna-kawa.com/2010/06/javarsovia-lekcja-stylu-slajdy/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>JDD&#8217;08 &#8211; najlepsze cytaty</title>
		<link>http://blog.mocna-kawa.com/2008/11/jdd07-najlepsze-cytaty/</link>
		<comments>http://blog.mocna-kawa.com/2008/11/jdd07-najlepsze-cytaty/#comments</comments>
		<pubDate>Tue, 11 Nov 2008 20:34:35 +0000</pubDate>
		<dc:creator>wiktor</dc:creator>
				<category><![CDATA[ciekawostki]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://blog.mocna-kawa.com/?p=102</guid>
		<description><![CDATA[Porządkując swoje rzeczy po przeprowadzce znalazłem swój notatnik z Java Developer Day 2008, która odbyła się w październiku w Krakowie. Najmocniejszymi jej punktami były prezentacje Teda Newarda i Neala Forda oraz afterparty . Ted Neward powiedział, że nie ma sensu dzielić metodyk zarządzania na kaskadowe czy na lekkie vel zwinne. Czemu? I tak wszyscy stosują [...]]]></description>
			<content:encoded><![CDATA[<p>
Porządkując swoje rzeczy po przeprowadzce znalazłem swój notatnik z <a href="http://08.jdd.org.pl/">Java Developer Day 2008</a>, która odbyła się w październiku w Krakowie. Najmocniejszymi jej punktami były prezentacje Teda Newarda i Neala Forda oraz afterparty <img src='http://blog.mocna-kawa.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .
</p>
<p>
Ted Neward powiedział, że nie ma sensu dzielić metodyk zarządzania na <a href="http://en.wikipedia.org/wiki/Waterfall_model">kaskadowe</a> czy na <a href="http://en.wikipedia.org/wiki/Agile_software_development">lekkie vel zwinne.</a> Czemu? <strong>I tak wszyscy stosują metodologię WHISKY</strong> &#8211; <strong>W</strong>hy the <strong>H</strong>ell <strong>I</strong>sn&#8217;t <strong>S</strong>omebody <strong>K</strong>oding <strong>Y</strong>et? No cóż&#8230; <img src='http://blog.mocna-kawa.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
</p>
<p>
Drugi równie dobry tekst opowiedział Ted Neward o tym, jak koduje Bóg:</p>
<pre>
person = Person.new( but we don't know the constructor arguments )

so... <strong>we are using factory method instead <img src='http://blog.mocna-kawa.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </strong>
</pre></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mocna-kawa.com/2008/11/jdd07-najlepsze-cytaty/feed/</wfw:commentRss>
		<slash:comments>5</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. [...]]]></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>Papa Windows, nie będę płakał</title>
		<link>http://blog.mocna-kawa.com/2008/06/papa-windows-nie-bede-plakal/</link>
		<comments>http://blog.mocna-kawa.com/2008/06/papa-windows-nie-bede-plakal/#comments</comments>
		<pubDate>Thu, 19 Jun 2008 18:49:46 +0000</pubDate>
		<dc:creator>wiktor</dc:creator>
				<category><![CDATA[Różne]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[ciekawostki]]></category>
		<category><![CDATA[gui]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[swing]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[ui]]></category>
		<category><![CDATA[ux]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://blog.mocna-kawa.com/?p=90</guid>
		<description><![CDATA[W ostatnie wakacje z dobrze skonfigurowanego Windowsa XP przerzuciłem się na Maka. Nigdy za bardzo nie narzekałem na Windowsa. U mnie działał, co nie było chyba częstym zjawiskiem. Od jakiegoś czasu wzbiera się we mnie frustracja, kiedy patrzę wstecz na moje poprzednie życie . Ponieważ obecnie jestem w trakcie pisania magisterki to posiadam nieskończone pokłady [...]]]></description>
			<content:encoded><![CDATA[<p>
W ostatnie wakacje z dobrze skonfigurowanego Windowsa XP przerzuciłem się na Maka. Nigdy za bardzo nie narzekałem na Windowsa. U mnie działał, co nie było chyba częstym zjawiskiem. Od jakiegoś czasu wzbiera się we mnie frustracja, kiedy patrzę wstecz na moje poprzednie życie <img src='http://blog.mocna-kawa.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> . Ponieważ obecnie jestem w trakcie pisania magisterki to posiadam nieskończone pokłady wolnego czasu. Najwyższy czas z siebie wszystko wyrzucić.
</p>
<p class="center">
<img src="http://blog.mocna-kawa.com/wp-content/uploads/2008/08/windows-xp-ala-mac.jpg" alt="windows-xp-ala-mac" title="windows-xp-ala-mac"  class="aligncenter size-medium wp-image-91" />
</p>
<p>
Rzut oka na wygląd mojego Windowsa, żeby się przekonać, że Maki już mi wcześniej chodziły po głowie. Nie będę wspominał o ilości pracy, którą trzeba poświęcić, żeby z Windows XP zrobić sensowne środowisko programistyczne, co widać na obrazku wyżej.
</p>
<h4>Środowisko programistyczne</h4>
<p>
Kiedy programista siada do czystej kopii Windowsa, nieważne czy XP czy Vista, to pierwszym odruchem jest (a przynajmniej powinno być) zainstalowanie <a href="http://www.cygwin.com/">Cygwina</a>. Czynność wręcz obowiązkowa i nikt nie mnie przekona, że ponieważ mamy cudowne <a href="http://pl.wikipedia.org/wiki/Zintegrowane_%C5%9Brodowisko_programistyczne">IDE</a> to już nic nam nie potrzeba. <strong>Naprawdę samo IDE wystarcza?</strong> Naprawdę, naprawdę?
</p>
<p>
W takim razie prosty test: <strong>Jak policzyć liczbę linijek kodu w projekcie?</strong> (najlepiej na konsolce oczywiście) Pamiętam, że podczas pisania Zespołowego Projektu Programistycznego (można patrzeć na to, jak na licencjat) na UW ciągle z kolegami sprawdzaliśmy, ile już linijek kodu mamy. No bo 20 tysięcy to był dopiero porządny wynik <img src='http://blog.mocna-kawa.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .
</p>
<p>
Wracając do Cygwina. Mimo że sprawuje się on znakomicie to jednak estetyką nie powalał.</p>
<p class="center">
<img src="http://wiktorgworek.com/blogtest/wp-content/uploads/2008/06/cygwin.jpg" alt="cygwin" title="cygwin" width="500" height="119" />
</p>
<p>
Jest po prostu brzydki i zawsze będzie tylko imitacją konsolki unikowej. Tym samym przechodzę do kolejnej rzeczy, z jaką chce się rozprawić.
</p>
<h4>Natywne aplikacje</h4>
<p>
Aż nie wiem, od czego zacząć. OK, pokopię leżącego, czyli Vista. Nie będę się przecież czepiał, że okienka z edycją zmiennej środowiskowej nadal nie można rozciągnąć, co doprowadza do szału. O masowej adopcji <a href="http://pl.wikipedia.org/wiki/WPF">WPF</a> także nie będę wspominał. Przytoczę tylko kawałek postu pt. <a href="http://stuffthathappens.com/blog/2008/06/18/where-are-the-native-vista-apps/">Where are the native Vista apps?</a>, gdzie Eric Burke pisze:</p>
<blockquote><p>
Vista supports hardware-accelerated graphics. WPF seems to support really cool things like vector-based UIs. [...]</p>
<p>How can Microsoft expect third parties to develop Vista-specific apps if the bundled utilities <em>(chodzi o Paint i Notepad)</em> don’t even take advantage of Vista features? This is incredibly hard to understand.</p>
<p>Good luck, Microsoft. I’m typing this on my new MacBook Pro, and it looks like I have plenty of native Cocoa apps from which to choose.
</p></blockquote>
<p>Wcześniej brak w pełni natywnych aplikacji mi nie przeszkadzał. Ale odkąd przesiadłem się na Maka dostrzegłem ich urok. Spójność wyglądu systemu operacyjnego i aplikacji jest bardzo miła dla oka oraz nie rozprasza. Dopiero teraz zrozumiałem istotę i potrzebę stworzenia <a href="http://pl.wikipedia.org/wiki/SWT_(biblioteka)">biblioteki SWT</a>, na którym oparty jest Eclipse. Aplikacje oparte na SWT będą lepiej prezentować się niż konkurencyjne napisane w Swingu. Sam pisałem aplikacje Swingowe (np. <a href="http://code.google.com/p/uj-petri-net-simulator/">Symulator Sieci Petriego</a>). Dlatego wiem, ile energii i pracy trzeba włożyć, żeby aplikacja napisana w oparciu o Swinga ładnie wyglądała. A tak poważnie to czy aplikacje desktopowe przeznaczone dla zwykłego użytkownika powstają w Javie, w Swingu? Poważnie? <img src='http://blog.mocna-kawa.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
</p>
<h4>Przyjazny system dla programisty</h4>
<p>
W <a href="http://pl.wikipedia.org/wiki/Cupertino">Cupertino</a> udało się stworzyć system, który nie ssie. Globalny, systemowy słownik dostępny w każdej aplikacji (tak, tak, jest to bardzo ważne), ujednolicony system notyfikacji poprzez aplikację <a href="http://growl.info/">Growl</a>, czy innowacyjne pomysły na interakcje z użytkownikiem jak <a href="http://en.wikipedia.org/wiki/Quicksilver_(software)">Quicksilver</a> to tylko kilka przykładów małych rzeczy, które cieszą na Maku. Przy okazji to jeśli ktoś jest zainteresowany, czym jest Quicksilver to skromnie polecam swoją <a href="http://www.slideshare.net/wiktor/quicksilver">prezentację o Quicksilverze</a>.
</p>
<p>
Powszechne w Polsce skojarzenie dotyczące Maków jest tragiczne <img src='http://blog.mocna-kawa.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> , ale mimo to trzeba robić <a href="http://pl.wikipedia.org/wiki/Coming_out">coming out</a> i łamać te stereotypy <img src='http://blog.mocna-kawa.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Więc czas na głupiutkie argumenty. Zacznijmy od konferencji i dużych firm. Nie ważne, czy spojrzy się na zdjęcia z RailsConf czy z JavaOne, to zawsze Maki tam przeważają. W Google&#8217;u <a href="http://tech.slashdot.org/article.pl?sid=08/06/07/1521244&#038;from=rss">6 tysięcy na 20 tysięcy pracowników wybiera Maka</a>. Jeszcze nie przekonany? <img src='http://blog.mocna-kawa.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
</p>
<p>
Papa Windows!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mocna-kawa.com/2008/06/papa-windows-nie-bede-plakal/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>JAVArsovia 2008 &#8211; II edycja Konferencji Java grupy Warszawa JUG</title>
		<link>http://blog.mocna-kawa.com/2008/05/javarsovia-2008-ii-edycja-konferencji-java-grupy-warszawa-jug/</link>
		<comments>http://blog.mocna-kawa.com/2008/05/javarsovia-2008-ii-edycja-konferencji-java-grupy-warszawa-jug/#comments</comments>
		<pubDate>Fri, 23 May 2008 21:36:48 +0000</pubDate>
		<dc:creator>wiktor</dc:creator>
				<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://blog.mocna-kawa.com/?p=88</guid>
		<description><![CDATA[31 maja 2008 w godzinach 9:00 &#8211; 19:00 w budynku Wydziału Biologii Uniwersytetu Warszawskiego przy ul. Miecznikowa 1 Warszawska Grupa Użytkowników Technologii Java (Warszawa JUG) oraz osoby zaprzyjaźnione (PJUG, Szczecin JUG, Trójmiasto JUG, Poznań JUG, Wrocław JUG) zapraszają na najciekawszą konferencję javową w Polsce &#8211; JAVArsovia 2008. Motto konferencji: Miłośnicy Java dla miłośników Java aka [...]]]></description>
			<content:encoded><![CDATA[<p class="center"><img src="http://wiktorgworek.com/blogtest/wp-content/uploads/2008/05/javarsovia08img.jpg" alt="" title="Javarsovia 2008 logo" width="163" height="132" class="alignnone size-medium wp-image-89" /></p>
<p><b>31 maja 2008</b> w godzinach <b>9:00 &#8211; 19:00</b> w budynku <a href="http://www.biol.uw.edu.pl/www/_php/index_base.php?Screen_Option=1&#038;Page_ID=151&#038;Owner_Page_ID=101">Wydziału Biologii Uniwersytetu Warszawskiego</a> przy <b>ul. Miecznikowa 1</b> <a href="http://www.warszawa.jug.pl/">Warszawska Grupa Użytkowników Technologii Java (Warszawa JUG)</a> oraz osoby zaprzyjaźnione (PJUG, Szczecin JUG, Trójmiasto JUG, Poznań JUG, Wrocław JUG) zapraszają na najciekawszą konferencję javową w Polsce &#8211; <a href="http://www.javarsovia.pl">JAVArsovia 2008</a>.</p>
<p>Motto konferencji: <b>Miłośnicy Java dla miłośników Java</b> aka <b>Ciekawie o Javie</b>.</p>
<p>Podczas 1-dniowej <b>sobotniej</b> konferencji zaprezentowanych zostanie wiele różnych technologii javowych i szkieletów aplikacyjnych. Z 4 panelami, każdy z 3-4 prezentacjami pragniemy, aby konferencja była ciekawa technologicznie oraz odzwierciedlała nasze własne, lokalne doświadczenia z Javą. JAVArsovia 2008 to idealne miejsce, aby spotkać się z innymi praktykami technologii, nawiązać kontakty, porozmawiać o bieżących problemach (technologicznych) i poznać nowe narzędzia, które usprawnią Twoje projekty. Sądzimy, że udział w konferencji JAVArsovia 2008 pozwoli każdemu popróbować się z nowościami technologicznymi lub zgłębić już poznane.</p>
<p>Wstęp wolny! Dobra zabawa gwarantowana!</p>
<p><a href="http://javarsovia.mocna-kawa.com/index.php?option=com_facileforms&#038;Itemid=54">Rejestracja</a> na konferencję jest bezpłatna acz obowiązkowa i trwa do <b>29 maja</b>! Na zakończenie konferencji zaplanowane jest spotkanie podsumowujące JAVArsovię na Polach Mokotowskich. Liczba miejsc ograniczona, więc czym wcześniej się zarejestrujesz, tym większa szansa na udział w niej.</p>
<p>Poprzednia edycja <a href="http://groups.google.com/group/warszawa-jug/web/javarsovia">JAVArsovia 2007</a> była prawdziwym hitem czerwca 2007 w Polsce i teraz na pewno również nim będzie. Mamy nadzieję zorganizować największą i najbardziej huczną konferencję Java w Polsce w 2008. Bądź jej częścią! Miłośnicy Java już czekają na Ciebie&#8230; </p>
<p>Zapraszam w imieniu Kapituły JAVArsovii 2008 i grupy Warszawa JUG!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mocna-kawa.com/2008/05/javarsovia-2008-ii-edycja-konferencji-java-grupy-warszawa-jug/feed/</wfw:commentRss>
		<slash:comments>0</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 [...]]]></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! [...]]]></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 [...]]]></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>A czy Ty potrafisz dobrze kodować?</title>
		<link>http://blog.mocna-kawa.com/2008/02/a-czy-ty-potrafisz-dobrze-kodowac/</link>
		<comments>http://blog.mocna-kawa.com/2008/02/a-czy-ty-potrafisz-dobrze-kodowac/#comments</comments>
		<pubDate>Fri, 29 Feb 2008 14:48:34 +0000</pubDate>
		<dc:creator>wiktor</dc:creator>
				<category><![CDATA[ciekawostki]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://blog.mocna-kawa.com/2008/02/29/a-czy-ty-potrafisz-dobrze-kodowac/</guid>
		<description><![CDATA[Myślałem, że zejdę, jak to zobaczyłem podesłany przez kolegę post na grupie pl.comp.lang.java: Musze poprawic czyjs kod i pozmianach ktorych dokonalem zaczal mi leciec dziwny wyjatek: Config.PROFILERR[DO_INSERT[articleList]][Pocz±tek] Start. 14:49:11,245 INFO [STDOUT] java.sql.SQLException: NotImplemented 14:49:11,247 INFO [STDOUT] at pl.eo.core.sql.Connection.prepareStatement(Connection.java:134) 14:49:11,247 INFO [STDOUT] at pl.eo.apps.cms.sql.CommonSQL.Article_loadCategoriesForArticleAndVersion(CommonSQL.java:769) 14:49:11,247 INFO [STDOUT] at pl.eo.apps.cms.Article.loadByResultSet(Article.java:845) 14:49:11,247 INFO [STDOUT] at pl.eo.apps.cms.Article.loadByResultSet(Article.java:742) poszperalem i [...]]]></description>
			<content:encoded><![CDATA[<p>Myślałem, że zejdę, jak to zobaczyłem podesłany przez kolegę <a href="http://groups.google.com/group/pl.comp.lang.java/browse_thread/thread/2e549ecf6db0c3d3/a0d3fd6c6d758b9d?lnk=st&#038;q=%22pl.eo%22+java#a0d3fd6c6d758b9d">post</a> na grupie pl.comp.lang.java:</p>
<blockquote><p>
Musze poprawic czyjs kod i pozmianach ktorych dokonalem zaczal mi leciec<br />
dziwny wyjatek:</p>
<p>Config.PROFILERR[DO_INSERT[articleList]][Pocz±tek] Start.<br />
14:49:11,245 INFO  [STDOUT] java.sql.SQLException: NotImplemented<br />
14:49:11,247 INFO  [STDOUT]     at pl.eo.core.sql.Connection.prepareStatement(Connection.java:134)<br />
14:49:11,247 INFO  [STDOUT]     at pl.eo.apps.cms.sql.CommonSQL.Article_loadCategoriesForArticleAndVersion(CommonSQL.java:769)<br />
14:49:11,247 INFO  [STDOUT]     at pl.eo.apps.cms.Article.loadByResultSet(Article.java:845)<br />
14:49:11,247 INFO  [STDOUT]     at pl.eo.apps.cms.Article.loadByResultSet(Article.java:742)</p>
<p>poszperalem i znalazlem zrodlo wyjatku:</p>
<p>public PreparedStatement prepareStatement(String sql,int AutoGeneratedKeys)<br />
        throws SQLException {<br />
                throw new SQLException(&#8220;NotImplemented&#8221;);<br />
}</p>
<p>zamienilem to na:</p>
<p>public PreparedStatement prepareStatement(String sql,int AutoGeneratedKeys)<br />
        throws SQLException {<br />
                throw new SQLException(&#8220;Implemented&#8221;);<br />
}</p>
<p>ale nie pomoglo, dalej nie dziala. Ma ktos pomysl dlaczego?
</p></blockquote>
<p>Jest to lepsze niż motyw wstawiania nowych rekordów do bazy danych&#8230; poprzez dodawanie nowych kolumn (autentyk!).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mocna-kawa.com/2008/02/a-czy-ty-potrafisz-dobrze-kodowac/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

