Posted by wiktor on Jan 24, 2008 in java, ruby, scala
Dziś dość króciutko. Tylko linki, ale za to bardzo smakowite.
Can Dynamic Languages Scale?
Notka na TheServerSide dotycząca niepowodzenia projektu Chandler wywołała bardzo ciekawą dyskusję. Treść niusa nie jest istotna, tylko komentarze. Znajdziemy tam wszystko: obrzucanie się błotem, argumenty ad personam, tezy niczym nie podparte, czyli genialną i kulturalną dyskusję . Uwaga! Występują tam celebryci ze światka developerskiego: Bill Burke i Cedric Beust. Nieprawdaż, że brakuje serwisu pudelek.developers.com?
Invasion Of The Dynamic Language Weenies
Dość dobra rozprawa o językach dynamicznych o bardzo prowokacyjnym tytule. Dobra lektura – tylko troszeczkę stronnicza . Warto poświęcić trochę czasu na poczytanie odnośników z linkografii do wpisu.
The busy Java developer’s guide to Scala
Tytuł mówi sam za siebie. Ted Neward, znany gawędziarz na wielu konferencjach, barwnym językiem opisuje pierwsze kroki ze Scalą. Miła czytanka.
obecna implementacja bazuje na JVM, niedługo można się spodziwać implementacji na .NET,
tak!, Scala działa na platformie Java, więc ma dostęp do całego ekosystemu bibliotek Javy,
nietuzinkową postacią jest sam twórca języka Martin Odersky, który jest współautorem obecnego kompilatora Javy oraz jest współprojektantem obecnych typów generycznych w Javie,
jest to młody język programowania i posiada wiele ciekawych własności, o których to będę pisał w kolejnych postach,
OK, wezmę na warsztat prostą czynność: wypisanie elementów z listy.
Kod w Javie byłby następujący:
[Java]
List lista = new ArrayList() {{
add(1); add(2); add(3); add(4);
}};
for (Integer x : lista)
System.out.println(x);
// Można też tak, ale raczej nie bym nie polegał na metodzie toString()
System.out.println(lista.toString());
// lub po prostu:
System.out.println(lista);
[/Java]
Dla odmiany w Ruby’im zrobilibyśmy to tak:
[Ruby]
# tutaj akurat mamy tablicę
lista = %w(1, 2, 3, 4)
# żeby ładnie było to definiujmy println
println = lambda { |x| puts x }
lista.each &println
[/Ruby]
Zobaczmy teraz, jak zrobilibyśmy to w Scali.
[Scala]
val lista = List(1, 2, 3, 4)
lista.foreach((x: Int) => println(x))
[/Scala]
Brzydko… idziemy dalej. Scala jest językiem funkcyjnym, który ma mechanizm currying. Opuśćmy deklarację typu i nawiasy.
[Scala]
lista.foreach(x => println(x))
[/Scala]
Nadal brzydko… idziemy dalej. Co jest argumentem metody foreach? Sygnatura metody jest następująca:
[Scala]
def foreach(f: A => Unit): Unit
[/Scala]
Na potrzebę chwili traktujmy Unit tak samo jak void. Zatem argumentem foreach jest funkcja, która przyjmuje argument A (jakiś nieustalony typ, patrz: currying) i zwraca Unit. Natomiast println jest zdefiniowany tak:
czyli bierze jakiś argument (nadal patrz: currying, funkcje wyższego rzędu) i zwraca Unit. Zatem typy się zgadzają. Zapiszmy to krócej:
[Scala]
lista.foreach(println)
[/Scala]
Już lepiej, ale można jeszcze lepiej . Scala ma bardzo fajną własność, którą nigdzie wcześniej nie spotkałem. Mianowicie w Scali technicznie nie ma operatorów. Wyrażenie 1 + 2 jest tożsame z wywołaniem metody 1.+(2). Jeśli metoda przyjmuję tylko jeden parametr to można pominąć nawiasy oraz kropkę. Zatem:
[Scala]
lista foreach println
[/Scala]
Piękny zapis, nieprawdaż? A czy twój ulubiony język zrobi to lepiej?
Już można pobrać ze strony netbeans.org najnowszą wersję Netbeans. Tym razem w wersji 6. Jest to krok milowy dla rozwoju Netbeans, dlatego że wreszcie staje się on konkurencyjny dla Eclipse i IntelliJ IDEA. Wcześniej nie dało się go w ogóle używać. Edytor dla Javy, czyli najważniejszy jego element, był po prostu niemiłosiernie wolny. Sun słusznie postanowił wpompować w niego dużo pieniędzy i widać tego efekty.
Wybrane najważniejsze rzeczy w Netbeans 6:
Nowy, szybszy, bardziej inteligenty edytor dla Javy – wreszcie! Netbeansa wcześniej po prostu się nie dało używać do kodowania w Javie. Był wolny, wolny i jeszcze raz wolny. Obecna szybkość dorównuje Eclipse’owi i IntelliJ. W sumie nie powinniśmy się tym ekscytować, bo w innych środowiskach zintegrowanych była to norma.
Wsparcie dla trybu pełnoekranowego (Alt-Shift-Enter lub Command-Shift-Enter na Maku). Mała rzecz a cieszy.
Ulepszony diff – czyli kolejne wreszcie! Netbeans małymi kroczkami dogania konkurencję.
Kopiowanie z IntelliJ IDEA, wystarczy zobaczyć poniższe zrzuty ekranu:
Netbeans 6
IntelliJ IDEA 7
Tak, tak… w Netbeans znajdziemy więcej takich rodzynków. To w IntelliJ IDEA znajdziemy innowacyjne pomysły i to ona jest najbardziej zaawansowanym środowiskiem zintegrowanym. Dlatego też uważam, że zapożyczanie pomysłów w Netbeans (można na to patrzeć jako kopiowanie) jest w porządku, bo napędza rynek środowisk zintegrowanych.
Ulepszony edytor dla Swinga i Swing Application Framework – Matisse (edytor GUI) od samego początku nie miał sobie równych. Netbeans jest obecnie najlepszym narzędziem dla programistów Swinga. Dlatego cieszy fakt, że jest on nadal udoskonalany. Dodatkowo wsparcie dla Swing Application Framework (zapewnia infrastrukturę dla małych aplikacji Swingowych) i Beans Binding (najogólniej: zapewnia synchronizację pomiędzy właściwościami obiektów) wskazuje, że Sun’owi naprawdę zależy na pobudzeniu Javy dla zastosowań klienckich/desktopowych.
…ale nadal trzeba mieć osobno zainstalowane Subversion i wskazać ścieżkę do niego, żeby z niego korzystać. Nie rozumiem, czemu to jest takie trudne, żeby svn był wbudowany w Netbeans. Przecież w innych IDE jest to od dłuższego czasu standardem.
Ostatnie i najważniejsze wg mnie. Rewelacyjny edytor dla Ruby’iego i Ruby on Rails. Najważniejsze jego własności to proste refaktoryzacje, naprawdę dobre uzupełnianie kodu, debugger, szablony kodów (ang. Live Code Templates) i podpowiedzi. Warto go wypróbować.
PS. Brawo dla Jacka Laskowskiego, który jest najaktywniejszym członkiem grupy NetBeans IDE 6.0 Community Acceptance Testing program (NetCAT).
Dziękuje wszystkim, którzy pojawili się na mojej prezentacji/warsztacie podczas WarsJava. Była ona na prawdę udana, a dyskusja po prezentacji trwała ponad pół godziny! Dziękuje jeszcze raz wszytkim za obecność. Udostępniam poniżej slajdy z prezentacji (poniżej), kod aplikacji stworzonej podczas warsztatu oraz życzenie załączam moje notatki/scenariusz prezentacji.
Już w najbliższą sobotę o godzinie 11:00 będę dawał prezentację “JRuby on Rails, czyli łączenie Javy i Rubiego” na WarsJava – I Warszawskie Warsztaty Javowe organizowane przez Warszawa JUG. Warsztaty będą miały miejsce na MIMUWie. I co najważniejsze: WSTĘP WOLNY .
Podczas warsztatów pokażę:
jak stworzyć prostą aplikację w Ruby on Rails,
jak korzystać z kodu Javy z poziomu Ruby’iego,
jak korzystać ze sterowników JDBC do łączenia się z bazą danych,
jak integrować stworzoną aplikacją z istniejącą aplikacją JEE (JMS, serwer aplikacji JBoss),
“Po co nam ta Java?”, “Ale po co ją stosować, jak w Ruby on Rails mogę to samo zrobić szybciej (czytaj: być bardziej wydajnym)?” – takie pytania koledzy stawiają mi coraz częściej. Odpowiadanie na nie nie jest zadaniem prostym. Przekonanie osoby negatywnie nastawionej, że Java może spokojnie, nie wadząc nikomu żyć w informatycznym ekosystemie – baaaa – nawet uzupełniać go, graniczy z cudem.
Oczywiście nie jestem w stanie dać pełnej odpowiedzi na pytanie “Po co nam Java?”. Nawet do tego nie pretenduję. Poruszę tylko trzy zagadnienia, które będą świadczyć, że jednak po coś nam ta Java jest potrzebna:
zastosowania typu enterprise,
przenośność platformy Javy (ang. cross-platform), o której się często zapomina (na przykładzie muCommandera),
Tak jak pisałem wcześniej, prezentacja “Integracja JSF + Facelets + Tomahawk + Spring + JPA” odbyła się. Dziękuję wszystkim, którzy się na niej znaleźli. Według mnie była udana, bo pokazała, że łączenie tych technologii jest trudne, problematyczne i przede wszystkim nudne (bo dużo w tym technikali i drobiazgów). Mam nadzieję, że zmusiła chociaż część osób do pomyślenia o alternatywnych sposobach uzyskania tego samego efektu.
Zapraszam wszystkich na moją prezentację w ramach warszawskiego JUGa. Tytuł prezentacji to “Integracja JSF + Facelets + Spring + JPA + Tomahawk” i będzie on bazował na moim artykule o tej samej nazwie. Wpis ten stał się dość popularny i stąd pomysł na prezentacje. Poniżej więcej szczegółów.
Temat prezentacji: Integracja JSF + Facelets + Spring + JPA + Tomahawk
Prowadzący: Wiktor Gworek
JavaServer Faces (JSF), Tomahawk, Facelets, Spring Framework i Java Persistence (JPA) to technologie, o których miło się czyta. Kiedy jednak przychodzi do rzeczywistych zastosowań, nie ma osoby, która by nie miała problemów z ich integracją. Celem prezentacji będzie zbudowanie prostej aplikacji typu CRUD (Create-Read-Update-Delete) łączącej wszystkie te magiczne technologie w atmosferze dobrej zabawy.
Prezentację poprowadzi Wiktor Gworek, student V roku na MIMUW-ie. Jest entuzjastą życia i nowych technologii. Wiktor uwielbia ładne, radosne programowanie, kunsztowną architekturę oprogramowania oraz czytać RSSy . Z Javą związany jest od dwóch lat, jednak stroni on od monogamii programistycznej. Prowadzi blog Mocna Kawa.
Planowany czas prezentacji to 1,5 godziny z 20-minutową dyskusją. Na zakończenie (około 10 minut) planowana jest dyskusja dotycząca organizacji konferencji WarsJava organizowanej przez Warszawa JUG.
Facelets – są one wspaniałym kompanem dla JSF, będę korzystał tylko z szablonów, choć Facelets mają dużo więcej możliwości,
Spring 2 – kontener IoC, będzie on wstrzykiwał beany obsługujące encje JPA (czyli DAO) do JSF (cudowna integracja) oraz obsługiwał transakcje,
Java Persistence API – implementacja Toplink – będę wykorzystywał JPA do mapowania obiektowo-relacyjnego,
Tomahawk – zestaw komponentów JSF ze stajni Apache.
Do artykułu dołączony jest kod źródłowy całej aplikacji. Można go otworzyć od razu w IntelliJ IDEA, a jeśli używasz innego edytora to musisz jakoś zaimportować projekt .