<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4066330487892136643</id><updated>2011-09-02T15:20:48.269+02:00</updated><category term='javafx'/><category term='maven'/><category term='Scala'/><category term='struts'/><category term='rails'/><category term='netbeans'/><title type='text'>Paweł Machowski devBlog</title><subtitle type='html'>Java, JavaFX, J2EE</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://machu-dev.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4066330487892136643/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://machu-dev.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>machu</name><uri>http://www.blogger.com/profile/05571385395839194709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>16</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4066330487892136643.post-2057006210162031126</id><published>2010-12-05T19:47:00.009+01:00</published><updated>2010-12-05T23:17:08.221+01:00</updated><title type='text'>JavaScript - TDD - konfiguracja środowiska</title><content type='html'>Wpis ten traktuje jako notatkę odnośnie konfiguracji środowiska pod pisanie testów do JavaScriptu.&lt;br /&gt;&lt;br /&gt;Piszemy w &lt;a href="http://www.jetbrains.com/idea/"&gt;Intellij&lt;/a&gt;, do uruchomienia testów używamy &lt;a href="http://code.google.com/p/js-test-driver/"&gt;js-test-driver&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Ściagamy &lt;a href="http://code.google.com/p/js-test-driver/downloads/detail?name=JsTestDriver-1.2.2.jar"&gt;JsTestDriver.jar&lt;/a&gt;, wrzucamy do jakiegoś folderu, odpalamy server&lt;br /&gt;&lt;pre class="brush: shell"&gt;&lt;br /&gt;java -jar JsTestDriver.jar --port 9876&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;teraz wchodzimy w &lt;a href="http://www.microsoft.com/poland/windows/products/winfamily/ie/default.mspx"&gt;przeglądarce&lt;/a&gt; na http://localhost:9876/ i klikamy capture&lt;br /&gt;&lt;br /&gt;Przeglądarka połączyła się z serwerem, będzie to nasze środowisko do uruchamiania testów. Możliwe jest jednoczesne więcej niż połączenie, wtedy będziemy mieli pewność, że testy przechodzą zarówno na IE7, IE8 oraz innych mniej popularnych przeglądarkach.&lt;br /&gt;&lt;br /&gt;Przechodzimy do IDE, domyślnie do głównego folderu wrzucamy JsTestDriver.jar i tworzymy plik konfiguracyjny jsTestDriver.conf, przykładowa zawartość:&lt;br /&gt;&lt;br /&gt;&lt;pre  class="brush: text"&gt;&lt;br /&gt;server: http://localhost:9876&lt;br /&gt;load:&lt;br /&gt;  - src/main/js/*.js&lt;br /&gt;  - src/test/js/*.js&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Dla Intellij 7 czy tam 8 istniał fikuśny plugin do uruchamiania testów w stylu JUnitu, ale nikomu nie chce się go przystosować do 9 więc trzeba zastosować pewne obejście.&lt;br /&gt;&lt;br /&gt;File - Settings - External Tools - Add&lt;br /&gt;Dajemy name JsTestRun, resztę zostawiamy uzupełniając pola&lt;br /&gt;&lt;br /&gt;Program: C:\Program Files\Java\jre6\bin\java.exe&lt;br /&gt;tu wiadomo, ścieżka do JRE&lt;br /&gt;&lt;br /&gt;Parameters: -jar $ProjectFileDir$\JsTestDriver.jar --tests all  &lt;br /&gt;tu w zależności gdzie wrzuciliśmy jara&lt;br /&gt;&lt;br /&gt;Working directory: $ProjectFileDir$\&lt;br /&gt;wiadomo&lt;br /&gt;ok, ok&lt;br /&gt;&lt;br /&gt;Tworzmy przykładowe klasy i testy (przykłady ze strony projektu)&lt;br /&gt;&lt;pre class="brush: js;"&gt;&lt;br /&gt;myapp = {};&lt;br /&gt;&lt;br /&gt;myapp.Greeter = function() { };&lt;br /&gt;&lt;br /&gt;myapp.Greeter.prototype.greet = function(name) {&lt;br /&gt;  return &amp;quot;Hello &amp;quot; + name + &amp;quot;!&amp;quot;;&lt;br /&gt;};&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre pre class="brush: js;"&gt;&lt;br /&gt;GreeterTest = TestCase("GreeterTest");&lt;br /&gt;&lt;br /&gt;GreeterTest.prototype.testGreet = function() {&lt;br /&gt;  var greeter = new myapp.Greeter();&lt;br /&gt;  assertEquals("Hello World!", greeter.greet("World"));&lt;br /&gt;};&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;klikamy Tools - JsTestRun i otrzymujemy (np dla chrome, IE8), Settings - keymap warto dodać hotkey, w założeniu testy będziemy często uruchamiać.&lt;br /&gt;&lt;pre pre class="brush: text;"&gt;&lt;br /&gt;Total 2 tests (Passed: 2; Fails: 0; Errors: 0) (0,00 ms)&lt;br /&gt;  Chrome 8.0.552.215: Run 1 tests (Passed: 1; Fails: 0; Errors 0)&lt;br /&gt; (0,00 ms)&lt;br /&gt;  Internet Explorer 8.0: Run 1 tests (Passed: 1; Fails: 0; Errors 0)&lt;br /&gt; (0,00 ms)&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;i gitara&lt;br /&gt;&lt;br /&gt;edit...&lt;br /&gt;jednak komuś się zachciało i dodano &lt;a href="http://code.google.com/p/js-test-driver/wiki/IntelliJPlugin"&gt;wsparcie w Intellij9&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4066330487892136643-2057006210162031126?l=machu-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://machu-dev.blogspot.com/feeds/2057006210162031126/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4066330487892136643&amp;postID=2057006210162031126' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4066330487892136643/posts/default/2057006210162031126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4066330487892136643/posts/default/2057006210162031126'/><link rel='alternate' type='text/html' href='http://machu-dev.blogspot.com/2010/12/javascript-tdd-konfiguracja-srodowiska.html' title='JavaScript - TDD - konfiguracja środowiska'/><author><name>machu</name><uri>http://www.blogger.com/profile/05571385395839194709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4066330487892136643.post-3733453543331291354</id><published>2009-09-21T22:04:00.011+02:00</published><updated>2010-12-05T20:56:44.523+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scala'/><title type='text'>Scala x04 - Metody ciąg dalszy</title><content type='html'>Java dostarcza nam 2 sposoby przekazywania argumentów do metod, przez referencje (a właściwie jej kopię) oraz przez wartość (dla typów prymitywnych). Scala udostępnia nam trzecią możliwość, przekazywanie argumentów przez nazwę (call-by-name). Jest to moje tłumaczenie, jak ktoś zna lepsza/oficjalne to proszę o korektę. &lt;br /&gt;Definiujemy przykładową metodę, której wykonanie zajmuje dużo czasu, ta np. wykonuje miliard różnych czynności, wypisuje komunikat i zwraca jakiś tam rezultat (podwojony argument)&lt;br /&gt;&lt;pre class="brush: js;"&gt;&lt;br /&gt;scala&gt; def czasochlonnaMetoda(x : Int):Int = {&lt;br /&gt;     //zaawansowane operacje na zmiennej x,&lt;br /&gt;     //pobieranie danych z bazy na podstawie xmla&lt;br /&gt;     //otrzymanego z web service'u &lt;br /&gt;       println("trwalo to z godzine")&lt;br /&gt;       return 2 * x&lt;br /&gt;     }&lt;br /&gt;czasochlonnaMetoda: (Int)Int&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Definiujemy drugą metodę, przyjmuje ona 2 argumenty, zwraca pierwszy w przypadku gdy jest on większy od zera, lub drugi w innej sytuacji.&lt;br /&gt;&lt;pre class="brush: scala;"&gt;&lt;br /&gt;scala&gt; def szybkaMetoda(x : Int, y : Int):Int = {&lt;br /&gt;      println("wykonujemy szybka metode")&lt;br /&gt;      if(x &gt; 0) x&lt;br /&gt;      else y&lt;br /&gt;     }&lt;br /&gt;szybkaMetoda: (Int,Int)Int&lt;br /&gt;&lt;br /&gt;//wywołujemy szybką metodę,&lt;br /&gt;// przekazując jako 2 argument rezultat wykonania czasochłonnej metody&lt;br /&gt;scala&gt; szybkaMetoda(2, czasochlonnaMetoda(2))&lt;br /&gt;trwalo to z godzine&lt;br /&gt;wykonujemy szybka metode&lt;br /&gt;res2: Int = 2&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Wszystko przebiegło jak się spodziewaliśmy, wywołana została czasochłonna metoda, następnie wykonało się ciało szybkiej metody. Z treści metody widzimy, iż drugi argument nie był w ogóle wykorzystywany, a jednak straciliśmy na jego ewaluacje sporo czasu. Zdefiniujmy teraz szybką metodę w trochę inny sposób&lt;br /&gt;&lt;pre class="brush: scala;"&gt;&lt;br /&gt;//w liście parametrów dodajemy dziwny znaczek&lt;br /&gt;scala&gt; def szybszaMetoda(x : Int, y : =&gt; Int):Int = {&lt;br /&gt;      println("szybsza metoda")&lt;br /&gt;        if(x &gt; 0) x&lt;br /&gt;        else y&lt;br /&gt;      }&lt;br /&gt;szybszaMetoda: (Int,=&gt; Int)Int&lt;br /&gt;&lt;br /&gt;//i ponownie wywołujemy metodę&lt;br /&gt;scala&gt; szybszaMetoda(1, czasochlonnaMetoda(2))&lt;br /&gt;szybsza metoda&lt;br /&gt;res3: Int = 1&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Ku naszemu zdziwieniu czasochłonna metoda w ogóle nie została wywołana, nie potrzebowaliśmy czasochłonnej ewaluacji drugiego parametru i nie została ona wykonana, coś pięknego. Stosujący przekazywanie parametrów przez nazwę, określenie ich wartości odbywa się dopiero w momencie, gdy następuje do nich odwołanie w ciele metody. Obrazuje to przykład&lt;br /&gt;&lt;pre class="brush: scala;"&gt;&lt;br /&gt;scala&gt; szybszaMetoda(-1, czasochlonnaMetoda(2))&lt;br /&gt;szybsza metoda&lt;br /&gt;trwalo to z godzine&lt;br /&gt;res4: Int = 4&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Wyświetlany jest komunikat z szybszej metody, dopiero potem wykonuje się metoda, której rezultat przekazaliśmy jako parametr&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4066330487892136643-3733453543331291354?l=machu-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://machu-dev.blogspot.com/feeds/3733453543331291354/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4066330487892136643&amp;postID=3733453543331291354' title='Komentarze (1)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4066330487892136643/posts/default/3733453543331291354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4066330487892136643/posts/default/3733453543331291354'/><link rel='alternate' type='text/html' href='http://machu-dev.blogspot.com/2009/09/scala-x04-metody-ciag-dalszy.html' title='Scala x04 - Metody ciąg dalszy'/><author><name>machu</name><uri>http://www.blogger.com/profile/05571385395839194709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4066330487892136643.post-7421147088128324078</id><published>2009-09-17T21:49:00.004+02:00</published><updated>2009-09-17T22:46:01.746+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scala'/><title type='text'>Scala x03 - Metody</title><content type='html'>Definicje metod rozpoczynają się od słowa &lt;span style="font-style:italic;"&gt;def&lt;/span&gt;, następnie występuje nazwa metody wraz z listą parametrów i ich typów w nawiasach okrągłych. Poza nawiasem mamy dwukropek i typ zwracanej wartości, a po znaku równości ciało metody. Przykładowa definicja metody zwracającej różnicę 2 liczb wygląda następująco:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;scala&gt; def roznica(odjemna : Int, odjemnik : Int): Int = {&lt;br /&gt;        return odjemna - odjemnik&lt;br /&gt;      }&lt;br /&gt;roznica: (Int,Int)Int&lt;br /&gt;&lt;br /&gt;scala&gt; roznica(2,4)&lt;br /&gt;res0: Int = -2&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Oczywiście w Scali polowa powyższego kodu jest opcjonalna, można powyższą metodę zapisać tak:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;scala&gt; def roznica(odjemna : Int, odjemnik :Int) = {&lt;br /&gt;        odjemna - odjemnik&lt;br /&gt;      }&lt;br /&gt;roznica: (Int,Int)Int&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Typ zwracanej wartości jest automagicznie wykrywany, więc można go opuścić (oczywiście w wielu wypadkach wskazane jest jednak jawne określenie). Metody domyślnie zwracają wynik działania ostatniej linijki ich kodu, więc return również można ominąć. Idąc dalej...&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;//jeżeli ciało funkcji zawiera jedną instrukcję, {} są opcjonalne&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;scala&gt; def roznica(odjemna : Int, odjemnik : Int) = odjemna - odjemnik&lt;br /&gt;roznica: (Int,Int)Int&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Oczywiście możemy tworzyć również metody nie przyjmujące żadnych parametrów i nie zwracające żadnej wartości&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;scala&gt; def sayDupa() = println("dupa")&lt;br /&gt;sayDupa: ()Unit&lt;br /&gt;scala&gt; sayDupa&lt;br /&gt;dupa&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Jak widać typem zwracanej wartości jest Unit, odpowiednik void znanego z Javy (wszystkie metody klasy Javy zwracające void, są mapowane do metod zwracających Unit).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4066330487892136643-7421147088128324078?l=machu-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://machu-dev.blogspot.com/feeds/7421147088128324078/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4066330487892136643&amp;postID=7421147088128324078' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4066330487892136643/posts/default/7421147088128324078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4066330487892136643/posts/default/7421147088128324078'/><link rel='alternate' type='text/html' href='http://machu-dev.blogspot.com/2009/09/scala-x03-metody.html' title='Scala x03 - Metody'/><author><name>machu</name><uri>http://www.blogger.com/profile/05571385395839194709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4066330487892136643.post-2691835311796171049</id><published>2009-09-16T23:56:00.011+02:00</published><updated>2009-09-17T21:49:04.328+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scala'/><title type='text'>Scala x02 - Zmienne</title><content type='html'>W Scali istnieją 2 typy zmiennych &lt;span style="font-style:italic;"&gt;vals&lt;/span&gt; i &lt;span style="font-style:italic;"&gt;vars&lt;/span&gt;. Val to zmienna przypominająca zmienna final z Javy, raz przypisanej do nich wartości nie można zmienić. Var to natomiast zwykłe zmienne, których wartość możemy zmieniać.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;//definiujemy zmienna val&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;scala&gt; val zmienna = "dupa"&lt;/span&gt;&lt;br /&gt;//łańcuchy znaków w Scali zaimplementowano jako Javowe Stringi  &lt;br /&gt;&lt;span style="font-weight:bold;"&gt;zmienna: java.lang.String = dupa &lt;/span&gt;  &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;scala&gt; zmienna = "dupa2"&lt;br /&gt;&lt;console&gt;:5: error: reassignment to val&lt;br /&gt;       zmienna = "dupa2"&lt;/span&gt;&lt;br /&gt;//próba ponownego przypisania wartości do zmiennej kończy się błędem               &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;scala&gt; var zmiennaVar = "Pierwsza wartosc"&lt;/span&gt; //definiujemy zmienną var&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;zmiennaVar: java.lang.String = Pierwsza wartosc&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;scala&gt; zmiennaVar = "Nowa wartosc"&lt;br /&gt;zmiennaVar: java.lang.String = Nowa wartosc&lt;/span&gt;&lt;br /&gt;//tu już nie dostajemy komunikatu o błędzie,&lt;br /&gt;//nowa wartość została przypisana&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;scala&gt; println(zmiennaVar)&lt;br /&gt;Nowa wartosc&lt;br /&gt;scala&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Ciekawą rzeczą, jaką można zauważyć w tym przykładzie jest automatyczne wykrywanie typu zmiennej. Gdzie tylko to możliwe możemy pozostawiać kompilatorowi kontrole typu zmiennej, jednak nic nie szkodzi aby samemu go określić.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;//w odróżnieniu od Javy, pierwsze nazwa zmiennej,&lt;br /&gt;//potem dwukropek, następnie opcjonalny typ&lt;br /&gt;//i przypisanie wartości.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;scala&gt; var x:java.lang.Long = 1L  &lt;br /&gt;x: java.lang.Long = 1&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Dla uzupełnienia, wszystkie typy prymitywne znane z Javy mają swoje odpowiedniki w Scali, np scala.Boolean odpowiada &lt;span style="font-style:italic;"&gt;boolean&lt;/span&gt;, scala.Float to &lt;span style="font-style:italic;"&gt;float&lt;/span&gt;. Kompilator Scali automagicznie zamienia, gdzie tylko możliwe, typy Scali na prymitywy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4066330487892136643-2691835311796171049?l=machu-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://machu-dev.blogspot.com/feeds/2691835311796171049/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4066330487892136643&amp;postID=2691835311796171049' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4066330487892136643/posts/default/2691835311796171049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4066330487892136643/posts/default/2691835311796171049'/><link rel='alternate' type='text/html' href='http://machu-dev.blogspot.com/2009/09/scala-x02-zmienne.html' title='Scala x02 - Zmienne'/><author><name>machu</name><uri>http://www.blogger.com/profile/05571385395839194709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4066330487892136643.post-5733429967637246940</id><published>2009-09-04T23:44:00.006+02:00</published><updated>2009-09-05T00:50:52.292+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scala'/><title type='text'>Scala x01 - Podstawy</title><content type='html'>I oto nadszedł pierwszy wpis na temat Scali. Nie będę rozpisywał się na temat teoretycznych cech języka, historii itd, te informacje łatwo można odnaleźć w &lt;a href="http://en.wikipedia.org/wiki/Scala_(programming_language)"&gt; Wikipedii&lt;/a&gt;&lt;br /&gt;Co potrzebujemy aby zacząć programować w Scali?&lt;br /&gt;Po pierwsze musimy posiadać &lt;a href="http://java.sun.com/javase/downloads/index.jsp"&gt;JDK&lt;/a&gt; w wersji 1.5 lub wyższej. Programy napisane w Scali uruchamiane są na wirtualnej maszynie, więc bez Javy się nie obejdziemy. &lt;br /&gt;Następnie pobieramy &lt;a href="http://www.scala-lang.org/downloads"&gt;dystrybucje Scali&lt;/a&gt;, wypakowywujemy, oraz ustawiamy zmienne środowiskowe(PATH w Windows), aby mieć dostęp do plików znajdujących się w katalogu bin.&lt;br /&gt;Jeżeli wszystko wykonaliśmy poprawnie, możemy sprawdzić wersję oraz uruchomić REPL (read-eval-print loop).&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ scala -version&lt;br /&gt;Scala code runner version 2.7.5.final -- Copyright 2002-2009, LAMP/EPFL&lt;br /&gt;$ scala&lt;br /&gt;Welcome to Scala version 2.7.5.final (Java HotSpot(TM) Client VM,&lt;br /&gt; Java 1.6.0_14).&lt;br /&gt;Type in expressions to have them evaluated.&lt;br /&gt;Type :help for more information.&lt;br /&gt;scala&gt;&lt;br /&gt;scala&gt; 1 + 1&lt;br /&gt;res0: Int = 2&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Istnieją 3 sposoby uruchamiania programów&lt;br /&gt;1. Używamy z linii poleceń. &lt;br /&gt;2. Umieszczamy kod w pliku, następnie wywołujemy&lt;br /&gt;&lt;pre&gt;$ scala foo.scala&lt;/pre&gt;&lt;br /&gt;3. Możemy przeprowadzić kompilacje do plików klas, z których można utworzyć archiwum JAR, tak samo jak w przypadku Javy. Używamy kompilatora &lt;span style="font-style:italic;"&gt;scalac&lt;/span&gt; &lt;pre&gt;$ scalac foo.scala bar.scala&lt;/pre&gt;&lt;br /&gt;Istnieje także kompilator &lt;span style="font-style:italic;"&gt;fsc&lt;/span&gt; (fast scala compiler), skracający czas kompilacji (uruchamia się jako osobny proces)&lt;br /&gt;&lt;br /&gt;Gratuluje, możesz zacząć tworzyć w Scali :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4066330487892136643-5733429967637246940?l=machu-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://machu-dev.blogspot.com/feeds/5733429967637246940/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4066330487892136643&amp;postID=5733429967637246940' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4066330487892136643/posts/default/5733429967637246940'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4066330487892136643/posts/default/5733429967637246940'/><link rel='alternate' type='text/html' href='http://machu-dev.blogspot.com/2009/09/scala-x01-podstawy.html' title='Scala x01 - Podstawy'/><author><name>machu</name><uri>http://www.blogger.com/profile/05571385395839194709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4066330487892136643.post-8729671432403674344</id><published>2009-09-03T21:00:00.003+02:00</published><updated>2009-09-03T21:26:16.520+02:00</updated><title type='text'>Reanimacja, reaktywacja</title><content type='html'>Po długiej przerwie w końcu udało mi się zebrać w sobie i postanowiłem reaktywować bloga. O czym będę pisał dalej? Na pewno nie zmieni się charakter wpisów, dalej będą notki o frameworkach, językach i tego typu dziwnych rzeczach. Będę starał się napisać co nieco o &lt;a href="http://pl.wikipedia.org/wiki/Scala_(język_programowania)"&gt;Scali&lt;/a&gt;, może uda mi się utworzyć jakaś serie wpisów na temat tego zdobywającego coraz większą popularność języka programowania. Ale co by nie zapeszać wstrzymam się z większymi obietnicami, zobaczymy jak czas i chęci pozwolą.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4066330487892136643-8729671432403674344?l=machu-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://machu-dev.blogspot.com/feeds/8729671432403674344/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4066330487892136643&amp;postID=8729671432403674344' title='Komentarze (1)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4066330487892136643/posts/default/8729671432403674344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4066330487892136643/posts/default/8729671432403674344'/><link rel='alternate' type='text/html' href='http://machu-dev.blogspot.com/2009/09/reanimacja-reaktywacja.html' title='Reanimacja, reaktywacja'/><author><name>machu</name><uri>http://www.blogger.com/profile/05571385395839194709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4066330487892136643.post-2294885166720778351</id><published>2008-11-22T21:24:00.004+01:00</published><updated>2009-08-01T22:18:08.357+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='netbeans'/><title type='text'>NetBeans 6.5 juz jest!</title><content type='html'>Ukazała się finalna wersja &lt;a href="http://www.netbeans.org/downloads/index.html"&gt;NetBeans IDE 6.5&lt;/a&gt;!&lt;br /&gt;Po raz pierwszy mamy możliwość pracy z IDE w naszym ojczystym języku.&lt;br /&gt;Aby pobrac wersje pl należy na oficjalnej stronie wybrać &lt;a href="http://bits.netbeans.org/netbeans/6.5/community/latest/ml/"&gt;more languages&lt;/a&gt;.&lt;br /&gt;Jeżeli chcecie dowiedzieć się wiecej na temat tłumaczenia zapraszam &lt;a href="http://wiki.netbeans.org/PolishTranslation"&gt;tutaj&lt;/a&gt; :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4066330487892136643-2294885166720778351?l=machu-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://machu-dev.blogspot.com/feeds/2294885166720778351/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4066330487892136643&amp;postID=2294885166720778351' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4066330487892136643/posts/default/2294885166720778351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4066330487892136643/posts/default/2294885166720778351'/><link rel='alternate' type='text/html' href='http://machu-dev.blogspot.com/2008/11/netbeans-65-juz-jest.html' title='NetBeans 6.5 juz jest!'/><author><name>machu</name><uri>http://www.blogger.com/profile/05571385395839194709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4066330487892136643.post-4896357016854009361</id><published>2008-04-25T15:44:00.010+02:00</published><updated>2009-09-03T21:25:06.138+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='struts'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><title type='text'>Maven 2 + Strus 2</title><content type='html'>No więc zacznijmy zabawę. Co potrzebujemy do utworzenia przykładowego projektu Struts2 za pomocą Mavena? Po pierwsze oczywiście Mavena :P Znajdziemy go na &lt;a href="http://maven.apache.org/download.html"&gt;http://maven.apache.org/download.html&lt;/a&gt;. Znajduje się tam dokładna instrukcja instalacji dla każdego systemu, wiec nie będę się tu zbędnie rozpisywał.&lt;br /&gt;Sprawdzamy czy poprawnie zainstalowaliśmy Mavena&lt;pre&gt;&lt;br /&gt;~$ mvn --version&lt;br /&gt;Error: JAVA_HOME is not defined correctly.&lt;br /&gt; We cannot execute /usr/lib/jvm/java-6-sun-1.6.0.03/bin/java&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;No i zonk, widać dzisiejsza aktualizacja &lt;a href="http://ubuntu.com"&gt;Ubuntu&lt;/a&gt; do nowej wersji namieszała mi trochę w zmiennych. Szybka aktualizacja JAVA_HOME i wszystko jest ok&lt;pre&gt;&lt;br /&gt;~$ mvn --version&lt;br /&gt;Maven version: 2.0.9&lt;br /&gt;Java version: 1.6.0_06&lt;br /&gt;OS name: "linux" version: "2.6.24-16-generic" arch: "i386" Family: "unix"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Tworzymy nowy projekt za pomocą archetypu&lt;pre&gt;&lt;br /&gt;~$mvn archetype:create -DgroupId=sampleApp&lt;br /&gt;-DartifactId=sample&lt;br /&gt;-DarchetypeGroupId=org.apache.struts&lt;br /&gt;-DarchetypeArtifactId=struts2-archetype-blank&lt;br /&gt;-DarchetypeVersion=2.0.9-SNAPSHOT&lt;br /&gt;-DremoteRepositories=http://people.apache.org/repo/m2-snapshot-repository&lt;br /&gt;...&lt;br /&gt;[INFO] ------------------------------------------------------&lt;br /&gt;[INFO] BUILD SUCCESSFUL&lt;br /&gt;[INFO] ------------------------------------------------------&lt;br /&gt;[INFO] Total time: 4 seconds&lt;br /&gt;[INFO] Finished at: Fri Apr 25 16:19:53 CEST 2008&lt;br /&gt;[INFO] Final Memory: 7M/13M&lt;br /&gt;[INFO] ------------------------------------------------------&lt;/pre&gt;&lt;br /&gt;Jeżeli wszystko przebiegło bezproblemowo Maven utworzył szkielet aplikacji oraz kilka przykładowych klas i stron jsp składających się na naszą aplikację. Struktura wygenerowanych plików wygląda następująco.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;|-- pom.xml&lt;br /&gt;`-- src&lt;br /&gt;    |-- main&lt;br /&gt;    |   |-- java&lt;br /&gt;    |   |   `-- sampleApp&lt;br /&gt;    |   |       `-- example&lt;br /&gt;    |   |           |-- ExampleSupport.java&lt;br /&gt;    |   |           |-- HelloWorld.java&lt;br /&gt;    |   |           `-- Login.java&lt;br /&gt;    |   |-- resources&lt;br /&gt;    |   |   |-- example&lt;br /&gt;    |   |   |   |-- Login-validation.xml&lt;br /&gt;    |   |   |   |-- package.properties&lt;br /&gt;    |   |   |   `-- package_es.properties&lt;br /&gt;    |   |   |-- example.xml&lt;br /&gt;    |   |   `-- struts.xml&lt;br /&gt;    |   `-- webapp&lt;br /&gt;    |       |-- WEB-INF&lt;br /&gt;    |       |   `-- web.xml&lt;br /&gt;    |       |-- example&lt;br /&gt;    |       |   |-- HelloWorld.jsp&lt;br /&gt;    |       |   |-- Login.jsp&lt;br /&gt;    |       |   |-- Menu.jsp&lt;br /&gt;    |       |   |-- Missing.jsp&lt;br /&gt;    |       |   |-- Register.jsp&lt;br /&gt;    |       |   `-- Welcome.jsp&lt;br /&gt;    |       `-- index.html&lt;br /&gt;    `-- test&lt;br /&gt;        `-- java&lt;br /&gt;            `-- sampleApp&lt;br /&gt;                `-- example&lt;br /&gt;                    |-- ConfigTest.java&lt;br /&gt;                    |-- HelloWorldTest.java&lt;br /&gt;                    `-- LoginTest.java&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;No i mamy gotowy nasz projekt. Jeżeli chcemy pracować nad nim za pomocą IDE, Maven jest w stanie utworzyć pliki projektu dla 3 najpopularniejszych IDE, NetBeans, IntelliJ Idea oraz Eclipse. W zależności od naszych preferencji wybieramy&lt;pre&gt;&lt;br /&gt;~$ mvn idea:idea&lt;br /&gt;~$ mvn netbeans:netbeans&lt;br /&gt;~$ mvn eclipse:eclipse&lt;/pre&gt;&lt;br /&gt;W tym poście nie będę zagłębiał się we wnętrze aplikacji. Uruchamiamy serwer np Tomcata&lt;pre&gt;&lt;br /&gt;machu@ ~$ /usr/local/tomcat/bin/startup.sh&lt;br /&gt;Using CATALINA_BASE:   /usr/local/tomcat&lt;br /&gt;Using CATALINA_HOME:   /usr/local/tomcat&lt;br /&gt;Using CATALINA_TMPDIR: /usr/local/tomcat/temp&lt;br /&gt;Using JRE_HOME:       /usr/lib/jvm/java-6-sun-1.6.0.06&lt;/pre&gt;&lt;br /&gt;I umieszczamy nasza aplikacje na serwerze&lt;pre&gt;&lt;br /&gt;~$ mvn tomcat:deploy&lt;br /&gt;...&lt;br /&gt;Results :&lt;br /&gt;&lt;br /&gt;Tests run: 4, Failures: 0, Errors: 0, Skipped: 0&lt;br /&gt;&lt;br /&gt;[INFO] [war:war]&lt;br /&gt;[INFO] Packaging webapp&lt;br /&gt;[INFO] Assembling webapp[sample] in [/home/machu/Project/sample/target/&lt;br /&gt;sample-1.0-SNAPSHOT]&lt;br /&gt;[INFO] Processing war project&lt;br /&gt;[INFO] Webapp assembled in[87 msecs]&lt;br /&gt;[INFO] Building war: /home/machu/Project/sample/target/&lt;br /&gt;sample-1.0-SNAPSHOT.war&lt;br /&gt;[INFO] [tomcat:deploy]&lt;br /&gt;[INFO] Deploying war to http://localhost:8080/sample-1.0-SNAPSHOT  &lt;br /&gt;[INFO] OK - Deployed application at context path /sample-1.0-SNAPSHOT&lt;br /&gt;[INFO] ----------------------------------------------------&lt;br /&gt;[INFO] BUILD SUCCESSFUL&lt;br /&gt;[INFO] ----------------------------------------------------&lt;br /&gt;[INFO] Total time: 13 seconds&lt;br /&gt;[INFO] Finished at: Sat Apr 26 21:55:16 CEST 2008&lt;br /&gt;[INFO] Final Memory: 8M/23M&lt;br /&gt;[INFO] ----------------------------------------------------&lt;br /&gt;machu@ ~/Project/sample$&lt;/pre&gt;&lt;br /&gt;Maven buduje aplikacje, dodatkowo przeprowadza testy i deployuje. Wchodząc na http://localhost:8080/sample-1.0-SNAPSHOT możemy przekonać się ze nasza aplikacja działa :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4066330487892136643-4896357016854009361?l=machu-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://machu-dev.blogspot.com/feeds/4896357016854009361/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4066330487892136643&amp;postID=4896357016854009361' title='Komentarze (2)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4066330487892136643/posts/default/4896357016854009361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4066330487892136643/posts/default/4896357016854009361'/><link rel='alternate' type='text/html' href='http://machu-dev.blogspot.com/2008/04/maven-2-strus-2-czyli-hello-world.html' title='Maven 2 + Strus 2'/><author><name>machu</name><uri>http://www.blogger.com/profile/05571385395839194709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4066330487892136643.post-383199635128316403</id><published>2008-03-25T11:55:00.015+01:00</published><updated>2009-08-01T22:17:52.528+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='netbeans'/><title type='text'>JRuby on Rails + NetBeans + Java DB</title><content type='html'>Ruby tu, Ruby tam, stwórzmy więc coś :)&lt;br /&gt;Czego potrzebujemy?&lt;br /&gt;Po pierwsze &lt;a href="http://download.netbeans.org/netbeans/6.0/final/"&gt;NetBeans&lt;/a&gt; z obsługa Ruby i GlassFisha&lt;br /&gt;No i to właściwie wszystko.&lt;br /&gt;Przed uruchomieniem musimy skopiować jedną bibliotekę, mianowicie &lt;code&gt;Glassfish_HOME\javadb\lib\derbyclient.jar&lt;/code&gt;&lt;br /&gt;do&lt;br /&gt;&lt;code&gt;NetBeans_HOME\ruby1\jruby-1.0\lib&lt;/code&gt;"&lt;br /&gt;&lt;br /&gt;Zabawę rozpoczniemy od utworzenia nowej bazy danych&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_njFb9viQo5o/R-je2MMHkzI/AAAAAAAAAAY/3f187O6qRtc/s1600-h/1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_njFb9viQo5o/R-je2MMHkzI/AAAAAAAAAAY/3f187O6qRtc/s400/1.jpg" alt="" id="BLOGGER_PHOTO_ID_5181636393856111410" border="0" /&gt;&lt;/a&gt;Nazwa użytkownika, hasło..&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_njFb9viQo5o/R-jfP8MHk0I/AAAAAAAAAAg/9cHshUy9BF4/s1600-h/2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_njFb9viQo5o/R-jfP8MHk0I/AAAAAAAAAAg/9cHshUy9BF4/s400/2.jpg" alt="" id="BLOGGER_PHOTO_ID_5181636836237742914" border="0" /&gt;&lt;/a&gt;Tworzymy nowy projekt, Ctrl+Shift+N, wybieramy Ruby, następnie Ruby on Rails Application&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_njFb9viQo5o/R-jgBsMHk1I/AAAAAAAAAAo/5-rWvntdE6E/s1600-h/3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_njFb9viQo5o/R-jgBsMHk1I/AAAAAAAAAAo/5-rWvntdE6E/s400/3.jpg" alt="" id="BLOGGER_PHOTO_ID_5181637690936234834" border="0" /&gt;&lt;/a&gt;Następnie wybieramy nazwę dla naszej aplikacji i jako bazę danych ustawiamy JavaDB&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_njFb9viQo5o/R-jg2sMHk2I/AAAAAAAAAAw/K3QiBm534XY/s1600-h/4.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_njFb9viQo5o/R-jg2sMHk2I/AAAAAAAAAAw/K3QiBm534XY/s400/4.jpg" alt="" id="BLOGGER_PHOTO_ID_5181638601469301602" border="0" /&gt;&lt;/a&gt;No i szkielet naszej  aplikacji jest juz gotowy. Zacznijmy od konfiguracji pliku database.yml. Sekcje development zmieniamy na&lt;pre&gt;&lt;br /&gt;development:&lt;br /&gt;adapter: jdbc&lt;br /&gt;driver: org.apache.derby.jdbc.ClientDriver&lt;br /&gt;url: jdbc:derby://localhost:1527/GuestBook&lt;br /&gt;username: machu&lt;br /&gt;password: passwd&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Teraz pora na wygenerowanie modelu&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_njFb9viQo5o/R-jlhsMHk3I/AAAAAAAAAA4/uY7rqAFJjs0/s1600-h/6.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_njFb9viQo5o/R-jlhsMHk3I/AAAAAAAAAA4/uY7rqAFJjs0/s400/6.jpg" alt="" id="BLOGGER_PHOTO_ID_5181643738250187634" border="0" /&gt;&lt;/a&gt;W nowo otwartym oknie, w polu Arguments wpisujemy Entry (nazwa naszego modelu).&lt;br /&gt;Rails generator zaczyna pracować i  po chwili mamy utworzony model&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_njFb9viQo5o/R-jmocMHk4I/AAAAAAAAABA/OuoNDwTI9i0/s1600-h/8.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_njFb9viQo5o/R-jmocMHk4I/AAAAAAAAABA/OuoNDwTI9i0/s400/8.jpg" alt="" id="BLOGGER_PHOTO_ID_5181644953725932418" border="0" /&gt;&lt;/a&gt;W powyższym oknie klikamy w create  db/migrate/001_create_entries.rb&lt;br /&gt;Zmieniamy zawartość otwartego pliku na&lt;pre&gt;&lt;br /&gt;class CreateEntries &lt; ActiveRecord::Migration&lt;br /&gt;  def self.up&lt;br /&gt;    create_table :entries do |t|&lt;br /&gt;    end&lt;br /&gt;    add_column :entries, :tytul, :string&lt;br /&gt;    add_column :entries, :autor, :string&lt;br /&gt;    add_column :entries, :tresc, :text&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  def self.down&lt;br /&gt;    drop_table :entries&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Zapisujemy i dokonujemy migracji  bazy danych&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_njFb9viQo5o/R-joUMMHk5I/AAAAAAAAABI/vUlE5OBzaEU/s1600-h/10.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_njFb9viQo5o/R-joUMMHk5I/AAAAAAAAABI/vUlE5OBzaEU/s400/10.jpg" alt="" id="BLOGGER_PHOTO_ID_5181646804856837010" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Mamy model, teraz czas na kontroler, ponownie używamy Rails generatora&lt;br /&gt;W oknie projektu klikamy prawym na Controllers, wybieramy Generate, w nowo otwartym oknie w polu Name wpisujemy GuestBook. Została właśnie utworzona klasa guest_book_controller.rbJej zawartość zmieniamy na&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class GuestBookController &lt; ApplicationController&lt;br /&gt;  scaffold :entry&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Scaffold zapewnia nam w pełni automatyczne operacje na tabelach bazy danych, takie jak dodawanie, usuwanie, tworzenie itp&lt;br /&gt;&lt;br /&gt;Nastepnie otwieramy plik routes.rb (znajduje się on w Configuration)&lt;br /&gt;i zmieniamy&lt;pre&gt;#map.connect '', :controller =&gt; "welcome"&lt;/pre&gt;na&lt;pre&gt;map.connect '', :controller =&gt; "guest_book"&lt;/pre&gt;&lt;br /&gt;Pozostaje nam tylko usunąć plik index.html (znajduje sie w Public) i uruchomić naszą nową aplikacje :)&lt;br /&gt;Klikamy na projekt i wybieramy Run (F6)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_njFb9viQo5o/R-jvAMMHk7I/AAAAAAAAABY/z9FYoAPI258/s1600-h/n2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_njFb9viQo5o/R-jvAMMHk7I/AAAAAAAAABY/z9FYoAPI258/s400/n2.jpg" alt="" id="BLOGGER_PHOTO_ID_5181654157840847794" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_njFb9viQo5o/R-ju7MMHk6I/AAAAAAAAABQ/74ct7n9l1HA/s1600-h/n.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_njFb9viQo5o/R-ju7MMHk6I/AAAAAAAAABQ/74ct7n9l1HA/s400/n.jpg" alt="" id="BLOGGER_PHOTO_ID_5181654071941501858" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4066330487892136643-383199635128316403?l=machu-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://machu-dev.blogspot.com/feeds/383199635128316403/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4066330487892136643&amp;postID=383199635128316403' title='Komentarze (1)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4066330487892136643/posts/default/383199635128316403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4066330487892136643/posts/default/383199635128316403'/><link rel='alternate' type='text/html' href='http://machu-dev.blogspot.com/2008/03/jruby-on-rails-netbeans-java-db.html' title='JRuby on Rails + NetBeans + Java DB'/><author><name>machu</name><uri>http://www.blogger.com/profile/05571385395839194709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_njFb9viQo5o/R-je2MMHkzI/AAAAAAAAAAY/3f187O6qRtc/s72-c/1.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4066330487892136643.post-770101700497666457</id><published>2008-03-21T17:33:00.005+01:00</published><updated>2008-03-21T17:43:05.176+01:00</updated><title type='text'>Swieta</title><content type='html'>Tak w swiatecznej atmosferze :)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.playwielkanoc.pl/"&gt;http://www.playwielkanoc.pl/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4066330487892136643-770101700497666457?l=machu-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://machu-dev.blogspot.com/feeds/770101700497666457/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4066330487892136643&amp;postID=770101700497666457' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4066330487892136643/posts/default/770101700497666457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4066330487892136643/posts/default/770101700497666457'/><link rel='alternate' type='text/html' href='http://machu-dev.blogspot.com/2008/03/swieta.html' title='Swieta'/><author><name>machu</name><uri>http://www.blogger.com/profile/05571385395839194709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4066330487892136643.post-8744119607838099120</id><published>2008-03-12T23:56:00.008+01:00</published><updated>2009-08-01T22:18:23.538+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javafx'/><title type='text'>Java i JavaFX</title><content type='html'>Jedna z wielu zalet JavyFX jest mozliwosc wykorzystania funkcjonalnosci klas Javy.  Mamy dostep do calej biblioteki standardowe oraz wszelkich bibliotek nie pochodzacych od Sun'a, co daje nam olbrzymie mozliwosci :)&lt;pre&gt;&lt;br /&gt;import javafx.ui.*;&lt;br /&gt;import javafx.ui.canvas.*;&lt;br /&gt;import javax.swing.JOptionPane;&lt;br /&gt;import java.lang.System;&lt;br /&gt;Frame{&lt;br /&gt;height: 80&lt;br /&gt;width: 150&lt;br /&gt;visible: true&lt;br /&gt;content:&lt;br /&gt; Button{&lt;br /&gt; text: "Click Me!"&lt;br /&gt; action: operation(){&lt;br /&gt;     var msg = new JOptionPane();&lt;br /&gt;     var userName = System.getProperty("user.name");&lt;br /&gt;     msg.showMessageDialog(null,"Hello {userName}");&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;Jak widac uzycie klas javy jest banalne, wystarczy dodac import, ewentualnie zastosowac pelna nazwe klasy (nalezy pamietac, aby ujac ja w takim wypadku w &lt;&lt;&gt;&gt;, co widac na zalaczonym obrazku&lt;pre&gt;&lt;br /&gt;import javafx.ui.*;&lt;br /&gt;import javafx.ui.canvas.*;&lt;br /&gt;import javax.swing.JOptionPane;&lt;br /&gt;import java.lang.System;&lt;br /&gt;import java.awt.Color;&lt;br /&gt;&lt;br /&gt;var button = new &amp;lt;&amp;lt;javax.swing.JButton()&amp;gt&amp;gt;;&lt;br /&gt;button.setText("Click Me!");&lt;br /&gt;button.setBackground(Color.RED);&lt;br /&gt;&lt;br /&gt;Frame{&lt;br /&gt;height: 80&lt;br /&gt;width: 150&lt;br /&gt;visible: true&lt;br /&gt;content:&lt;br /&gt; Widget{&lt;br /&gt; component: button&lt;br /&gt; onMouseClicked: operation(MouseEvent){&lt;br /&gt;     var msg = new JOptionPane();&lt;br /&gt;     var userName = System.getProperty("user.name");&lt;br /&gt;     msg.showMessageDialog(null,"Hello {userName}");&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;}&lt;/pre&gt;Przyklad ten potwierdza iz pod wszelkimi klasami javyFX tak naprawde ukrywaja sie klasy Swinga. Tworzymy tu obiekt JButton, ktory nastepnie przypisujemy jako komponent naszego wyswietlanego widgetu, rownie dobrze mozemy mu przypisac JOptionPane&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4066330487892136643-8744119607838099120?l=machu-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://machu-dev.blogspot.com/feeds/8744119607838099120/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4066330487892136643&amp;postID=8744119607838099120' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4066330487892136643/posts/default/8744119607838099120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4066330487892136643/posts/default/8744119607838099120'/><link rel='alternate' type='text/html' href='http://machu-dev.blogspot.com/2008/03/java-i-javafx.html' title='Java i JavaFX'/><author><name>machu</name><uri>http://www.blogger.com/profile/05571385395839194709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4066330487892136643.post-1085688631223283019</id><published>2008-03-03T19:39:00.008+01:00</published><updated>2009-08-01T22:18:35.154+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javafx'/><title type='text'>Gwiazdka, co, jak, dlaczego?</title><content type='html'>Postram sie teraz wyjasnic kilka kluczowych aspektow gwiazdki.&lt;br /&gt;A wiec zaczynajmy.&lt;br /&gt;1.  Obiekt &lt;strong&gt;Group&lt;/strong&gt;, pozwala nam wykonywac transformacje na kilku obiektach jednoczesnie&lt;br /&gt;(w tym przypadku sa to 2 obiekty Star)&lt;br /&gt;Dostepne transformacje to&lt;br /&gt;&lt;ul&gt;&lt;li&gt; transform: [translate(x, y)], przesuniecie&lt;br /&gt;&lt;/li&gt;&lt;li&gt;  transform: [rotate(kat, x, y)], obrob o dany kat dookola punktu (x,y)&lt;/li&gt;&lt;li&gt; transform: [scale(x, y)], przeslakalowania&lt;/li&gt;&lt;li&gt; transform: [skew(x, y)], przekrzywienie&lt;/li&gt;&lt;/ul&gt;operator [] oznacza tablice, wiec transformacje mozemy ze soba laczyc:&lt;pre&gt;transform: [translate(10, 10), scale(2, 2)] &lt;/pre&gt; dana grupa zostanie przesunieta o 10px i powiekszona dwukronie&lt;br /&gt;&lt;br /&gt;2. Operator &lt;strong&gt;bind&lt;br /&gt;&lt;/strong&gt;Jest to jeden z kluczowych operatorow javyFX, pozwala nam (hmm jak to ujac, nie uzywajac slowa zbindowac) polaczyc ze soba 2 wartosci, w przypadku zmiany jednej, automatycznie zmianie ulega wartosc&lt;br /&gt;drugiej. Najlepiej pokaze to na przykladzie&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;import javafx.ui.*;&lt;br /&gt;import java.util.Date;&lt;br /&gt;&lt;br /&gt;var someText= "TITLE";&lt;br /&gt;&lt;br /&gt;var frame = Frame{&lt;br /&gt;width:300&lt;br /&gt;height:100&lt;br /&gt;title: bind someText&lt;br /&gt;visible:true&lt;br /&gt;content:Label{&lt;br /&gt;    text:"Get time!"&lt;br /&gt;    onMouseClicked: operation(mEvent){&lt;br /&gt;        var date = new Date();&lt;br /&gt;        someText = "{date.hours}:{date.minutes}:{date.seconds}";&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;};&lt;/pre&gt;&lt;br /&gt;Po kazdym kliknieciu do zmiennej someText przypisywana jest aktualny czas, dzieki zastosowania do tytulu ramki operatora bind, po kazdym kliknieciu jest on aktualizowany.&lt;br /&gt;Do uzyskania aktualnego czasu uzylem klasy z poza JavyFX, stosowanie kodu javy w aplikacji FX przedstawie innym razem.&lt;br /&gt;&lt;br /&gt;3. Animacje&lt;br /&gt;Do tworzenia animacji wykorzystujemy operator &lt;span style="font-weight:bold;"&gt;dur&lt;/span&gt;. Jego zastosowanie jest proste jak budowac cepa. Okreslamy przedzial w jakim dana wartosc ma sie zmieniac np x = [1..100] i czas przez ktory ma sie to dokonac np. dur 100, w efekcie x co 1 milisekunde bedzie zwiekszac sie o 1. Po zbindowaniu do wartosci jakiegos pola(np. rozmiaru) uzyskujemy animacje&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4066330487892136643-1085688631223283019?l=machu-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://machu-dev.blogspot.com/feeds/1085688631223283019/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4066330487892136643&amp;postID=1085688631223283019' title='Komentarze (1)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4066330487892136643/posts/default/1085688631223283019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4066330487892136643/posts/default/1085688631223283019'/><link rel='alternate' type='text/html' href='http://machu-dev.blogspot.com/2008/03/gwiazdka-co-jak-dlaczego.html' title='Gwiazdka, co, jak, dlaczego?'/><author><name>machu</name><uri>http://www.blogger.com/profile/05571385395839194709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4066330487892136643.post-3060674401493759117</id><published>2008-02-26T21:26:00.004+01:00</published><updated>2009-08-01T22:18:44.938+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javafx'/><title type='text'>Gwiazdka</title><content type='html'>A taka smieszna gwiazdka, mozna ja przesuwac i po kliknieciu sie dziwne rzeczy dzieja ;)&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;import javafx.ui.*;&lt;br /&gt;import javafx.ui.canvas.*;&lt;br /&gt;&lt;br /&gt;Frame{&lt;br /&gt;  height: 200&lt;br /&gt;  width: 400&lt;br /&gt;  visible: true&lt;br /&gt;  content: Canvas{&lt;br /&gt;      content: Group{&lt;br /&gt;          var x = 100&lt;br /&gt;          var y = 100&lt;br /&gt;          var angle = 0&lt;br /&gt;          var rin = 20&lt;br /&gt;          transform: bind [rotate(angle,x,y)]&lt;br /&gt;          content:[&lt;br /&gt;          Star {&lt;br /&gt;              var: self&lt;br /&gt;              cx: bind x&lt;br /&gt;              cy: bind y&lt;br /&gt;              rin: bind rin&lt;br /&gt;              rout: 60&lt;br /&gt;              points: 15&lt;br /&gt;              startAngle: 0&lt;br /&gt;              stroke: green&lt;br /&gt;              fill: lightgreen&lt;br /&gt;              strokeWidth: 2&lt;br /&gt;              onMouseEntered: operation(mEvent){&lt;br /&gt;                  self.cursor = HAND;&lt;br /&gt;              }&lt;br /&gt;              onMouseDragged: operation(mEvent){&lt;br /&gt;                  x += mEvent.dragTranslation.x;&lt;br /&gt;                  y += mEvent.dragTranslation.y;&lt;br /&gt;              }&lt;br /&gt;              onMouseClicked: operation(mEvent){&lt;br /&gt;                  angle = [1..360] dur 1500;&lt;br /&gt;                  rin = [1..100] dur 1500;&lt;br /&gt;              }            &lt;br /&gt;          },&lt;br /&gt;          Star {&lt;br /&gt;              cx: bind x&lt;br /&gt;              cy: bind y&lt;br /&gt;              rin: 30&lt;br /&gt;              rout: 70&lt;br /&gt;              points: 15&lt;br /&gt;              startAngle: 60&lt;br /&gt;              stroke: green&lt;br /&gt;              fill: lightgreen&lt;br /&gt;              strokeWidth: 2&lt;br /&gt;          }&lt;br /&gt;          ]        &lt;br /&gt;      }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4066330487892136643-3060674401493759117?l=machu-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://machu-dev.blogspot.com/feeds/3060674401493759117/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4066330487892136643&amp;postID=3060674401493759117' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4066330487892136643/posts/default/3060674401493759117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4066330487892136643/posts/default/3060674401493759117'/><link rel='alternate' type='text/html' href='http://machu-dev.blogspot.com/2008/02/gwiazdka.html' title='Gwiazdka'/><author><name>machu</name><uri>http://www.blogger.com/profile/05571385395839194709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4066330487892136643.post-907446784558092167</id><published>2008-02-26T02:00:00.002+01:00</published><updated>2009-08-01T22:18:54.733+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javafx'/><title type='text'>Hello FXWorld !</title><content type='html'> No wiec zaczynajmy. Aby uruchomic program w JavaFX Script ( dalej bede skracal to do JavaFX) mamy 2 opcje:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Instalujemy plugin do naszego ulubionego IDE (czyt. NetBeans) obslugujacy JaveFX, do Eclipsa istnieje takowy rowniez&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Uzywamy JavaFXPada, &lt;a href="http://download.java.net/general/openjfx/demos/javafxpad.jnlp"&gt;web start&lt;/a&gt;, lub  &lt;a href="http://www.javafxpad.com/"&gt;sciagamy&lt;/a&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;Osobiscie preferuje opcje NetBeans, w fxpadzie jakos dziwnie działa uzupełnianie składni. Do uruchamiania przykladowych programow fxpad powinien byc jednak wystarczajacy.&lt;br /&gt;&lt;br /&gt;No wiec najprostszy program bedzie wygladal tak:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;import javafx.ui.*;&lt;br /&gt;&lt;br /&gt;Frame{&lt;br /&gt;  width: 100&lt;br /&gt;  height: 20&lt;br /&gt;  content:&lt;br /&gt;        Label{&lt;br /&gt;          text: "HELLO WORLD FX!"&lt;br /&gt;     }&lt;br /&gt;  visible: true&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Co sie tu dzieje? Wiec tworzona jest nowa ramka, ustalamy jej wysokosc i szerokosc, a  jako zawartosc ustalamy etykiete z tekstem, czyz to nie proste ?:)&lt;br /&gt;&lt;br /&gt;Dla pelnego wyjasnienia, zapisze to w inny troche sposob (rowniez poprawny kod javyFX )&lt;br /&gt;&lt;code&gt;&lt;br /&gt;var frame = new Frame();&lt;br /&gt;frame.width = 100;&lt;br /&gt;frame.height = 20;&lt;br /&gt;frame.visible = true;&lt;br /&gt;&lt;br /&gt;var label = new Label();&lt;br /&gt;label.text = "HELLO WORLD FX!";&lt;br /&gt;&lt;br /&gt;frame.content = label;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Efekt dzialania jest identyczny, w wiekszosci przypadkow stosuje sie jednak pierwszy zapis, jest on znacznie wygodniejszy.&lt;br /&gt;Slowo kluczowe var oznacza zmienna, nie musimy okreslac jakiego jest typu, dzieje sie to na etapie kompilacji.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4066330487892136643-907446784558092167?l=machu-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://machu-dev.blogspot.com/feeds/907446784558092167/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4066330487892136643&amp;postID=907446784558092167' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4066330487892136643/posts/default/907446784558092167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4066330487892136643/posts/default/907446784558092167'/><link rel='alternate' type='text/html' href='http://machu-dev.blogspot.com/2008/02/no-wiec-zaczynajmy.html' title='Hello FXWorld !'/><author><name>machu</name><uri>http://www.blogger.com/profile/05571385395839194709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4066330487892136643.post-3615451424672011159</id><published>2008-02-26T01:57:00.001+01:00</published><updated>2009-08-01T22:19:11.098+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javafx'/><title type='text'></title><content type='html'>No wiec zaczynajmy. Aby uruchomic program w JavaFX Script ( dalej bede skracal to do JavaFX) mamy 2 opcje:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Instalujemy plugin do naszego ulubionego IDE (czyt. NetBeans) obslugujacy JaveFX, do Eclipsa istnieja takowy rowniez&lt;/li&gt;&lt;li&gt;Uzywamy JavaFXPada, &lt;a href="download.java.net/general/openjfx/demos/javafxpad.jnlp"&gt;web start&lt;/a&gt;, lub  &lt;a href="http://www.javafxpad.com/"&gt;sciagamy&lt;/a&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;Osobiscie preferuje opcje NetBeans, w fxpadzie jakos dziwnie działa uzupełnianie składni. Do uruchamiania&lt;br /&gt;&lt;br /&gt;przykladowych programow fxpad powinien byc jednak wystarczajacy.&lt;br /&gt;&lt;br /&gt;No wiec najprostszy program bedzie wygladal tak:&lt;br /&gt;import javafx.ui.*;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Frame{&lt;br /&gt;width: 100&lt;br /&gt;height: 20&lt;br /&gt;content:&lt;br /&gt;Label{&lt;br /&gt;text: "HELLO WORLD FX!"&lt;br /&gt;}&lt;br /&gt;visible: true&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4066330487892136643-3615451424672011159?l=machu-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://machu-dev.blogspot.com/feeds/3615451424672011159/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4066330487892136643&amp;postID=3615451424672011159' title='Komentarze (1)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4066330487892136643/posts/default/3615451424672011159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4066330487892136643/posts/default/3615451424672011159'/><link rel='alternate' type='text/html' href='http://machu-dev.blogspot.com/2008/02/no-wiec-zaczynajmy_26.html' title=''/><author><name>machu</name><uri>http://www.blogger.com/profile/05571385395839194709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4066330487892136643.post-6290067804631053480</id><published>2008-02-26T00:04:00.000+01:00</published><updated>2008-02-26T02:20:28.370+01:00</updated><title type='text'>Powitanie</title><content type='html'>Witam na nowo powstałym blogu, znajdziecie tu głownie informacje o JavieFX, Javie i innych tego typu bzdetach ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4066330487892136643-6290067804631053480?l=machu-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://machu-dev.blogspot.com/feeds/6290067804631053480/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4066330487892136643&amp;postID=6290067804631053480' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4066330487892136643/posts/default/6290067804631053480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4066330487892136643/posts/default/6290067804631053480'/><link rel='alternate' type='text/html' href='http://machu-dev.blogspot.com/2008/02/witam-na-nowo-powstaym-blogu.html' title='Powitanie'/><author><name>machu</name><uri>http://www.blogger.com/profile/05571385395839194709</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
