Eclipse Ganymede zbliża się do nas wielkimi krokami (za 10 dni powinien być gotowy do ściągnięcia)...w związku z tym powstała idea stworzenia plakatu reklamującego najnowsze wydanie Eclipse'a. W ciągu dwóch miesięcy udało się stworzyć już coś takiego (wybór całkowicie subiektywny):

Powstał też pomysł, aby plakaty wzorować na plakatach filmowych. Oto efekty:



I jeden z moich ulubionych...filmów:
Myśli, porady, tutoriale na temat środowiska Eclipse (i nie tylko)...
niedziela, 15 czerwca 2008
Eclipse Ganymede nadchodzi!
poniedziałek, 9 czerwca 2008
Eclipse DemoCamp 2008 w Poznaniu!
Tak jest - również teraz włączamy się w ogólnoświatowe organizowanie spotkań sympatyków Eclipse'a, czyli Eclipse DemoCamp. Tym razem będzie tylko jedno spotkanie, ale za to w zupełnie innej atmosferze, gdyż zapraszamy do Piwnicy 21 na ul. Wielkiej w Poznaniu. Zaczynamy o godzinie 18:00 we wtorek 24. czerwca.
Mamy juz pierwszych chętnych do prezentacji, jeśli ktoś z Was chciałbym powiedzieć coś na temat Eclipse'a lub swojego projektu opartego na Eclipsie to zapraszamy (wystarczy zostawić namiar na siebie w komentarzu, lub napisać maila do Jacka, który zajmuje się współorganizacją spotkania, na adres: jacek.pospychala [at] gmail.com), plotka też niesie, że będziemy mieli gości z laboratorium IBM'a w Krakowie.
Poprzednia impreza Eclipse DemoCamp cieszyła się sporym zainteresowaniem, szczegóły znajdziecie tutaj i tutaj, można też zobaczyć filmy z prezentacji.
niedziela, 8 czerwca 2008
Eclipse Modeling Framework (EMF), część IV
Wczoraj się zorientowałem, że nie skończyłem serii postów na temat EMF'a, nadróbmy więc zaległości i zobaczmy w jaki sposób uruchomić wygenerowany edytor.
- Klikamy w menu Run->Open Run Dialog (lub Run Configurations w Eclipse 3.4). W nowym oknie na liście po lewej stronie zaznaczamy Eclipse Application i klikamy przycisk New launch configuration:

- Na koniec klikamy przycisk Run. Powinna nam się otworzyć nowa instancja Eclipse’a.
- W nowej instancji tworzymy nowy projekt (menu New->Other->Project). Podajemy jego nazwę i klikamy Finish. W widoku Project Explorer (jeśli nie mamy otwartego tego widoku to otwieramy go w menu Window->Show View->Other) klikamy prawym przyciskiem myszy na nowy projekt i wybieramy New->Other->Example EMF Model Creation Wizard->Familytree Model.

- Następnie podajemy nazwę. Na ostatniej stronie kreatora z górnej listy rozwijalnej wybieramy Family Tree jako korzeń naszego modelu i klikamy Finish.

Powinien otworzyć nam się edytor dla naszego modelu. - Klikając na węźle Family tree możemy dodawać elementy stworzonego przez nas modelu i wiązać je ze sobą w widoku Properties (menu Window->Show View->Other->General). Na przykład możemy stworzyć obiekty Family oraz Female. A następnie we właściwościach obiektu Family jako Mother możemy podać dopiero co stworzony obiekt Female.

- Na koniec zobaczmy jeszcze jak zapisana jest dopiero co edytowana przez nas instancja naszego modelu. Klikamy prawym przyciskiem na naszym nowym pliku i wybieramy Open With -> Text Editor.
Jak widzimy model został zapisany do XML'a
piątek, 6 czerwca 2008
Jak wyczyścić swoje źródła?
Jakiś czas temu jeden ze znajomych zapytał mnie, czy można w Eclipsie automatycznie dodać nawiasy do instrukcji warunkowych i pętli, tak gdzie tych nawiasów nie ma. Chwilę się zastanowiłem i powiedziałem, że chyba nie da rady. Kilka dni później natknąłem się na opcję Source->Clean Up... jakie było moje zdziwienie, że można tam nie tylko dodać rzeczone nawiasy, ale także na różne sposoby zmienić/wyczyścić swój kod.
Jak to działa? Otwieramy sobie wybraną klasę i udajemy się w menu głównym do Source->Clean Up...
Pokaże nam się kreator, w którym będziemy mogli wybrać, czy chcemy korzystać, z któregoś z już zdefiniowanych profili, stworzyć własny profil na potrzeby chwili (2), czy też zdefiniować własny profil, z którego będziemy mogli korzystać później.
Żeby szybko zobaczyć, jakie mamy możliwości, wybieramy drugą opcję (Use custom profile) i klikamy przycisk Configure.
W nowym oknie ukaże nam się kilkanaście opcji podzielonych na kilka zakładek, w zależności od kategorii. Spójrzmy na kilka ciekawych elementów (zauważcie, że przy każdym naszym wyborze zmienia się kod umieszczony w panelu po prawej stronie):
- Wspomniana już możliwość dodania nawiasów do instrukcji warunkowych i pętli
- Konwersja pętli na wersję "foreach" (jast na to jakaś dobra nazwa?)
- Dodanie słowa kluczowego final tam gdzie jest to możliwe (i gdzie sobie tego życzymy)

- Usunięcie nieużywanych zmiennych lokalnych
- Usunięcie niepotrzebnych rzutowań

- Dodanie brakujących adnotacji
- Dodanie niezaimplementowanych metod z nadklas lub interfejsów
środa, 4 czerwca 2008
Wrażenia po Javarsovii 2008
Sobota 31. maja 2008, godzina 05:27 razem z Jackiem i Adamem wyruszyliśmy zobaczyć, co tam słychać w polskim javowym świecie i jednocześnie pokazać, że w Poznaniu też coś się dzieje.
Po przyjeździe na miejsce przywitał nas głównodowodzący Jacek Laskowski, który pokazał nam "co, gdzie i jak?". Przed prezentacją poszliśmy z Jackiem dopracować nasze prezentacje, a o 11 przyszedł czas, żeby powiedzieć coś od siebie. Okazało się jednak, że sala w której mieliśmy mieć prezentacje została przekazana prezentacji o Google Guice, a my poszliśmy do sali trochę mniejszej, ale chyba wyszło to na dobre, bo dzięki temu było wrażenie, że prawie cała sala jest pełna (myślę, że było koło 50 osób). Najpierw ja powiedziałem kilka słów o Eclipse RCP, potem Jacek przejął pałeczkę i pokazał inne twarze Eclipse'a. Chyba się podobało, bo pytania leciały do nas z każdej strony sali - widać, że ludzi zainteresowało to co im pokazywaliśmy.
Na początku prezentacji okazało się, że ktoś czyta tego bloga i była uwaga, że dawno nie było żadnych nowości tutaj. Mam nadzieję, że od lipca nowe materiały będą się bardziej regularnie pojawiały i zaspokoję Wasz eclipsowy głód wiedzy ;)
Potem przyszedł czas na obiad i panel jugowy - fajnie było posłuchać, jak środowisko javowe rozwija się w całej Polsce i jakie są plany na przyszłość.
Udało się nam też spotkać kilka osób, które w zeszłym roku brały udział w naszym szkoleniu Eclipse Summer School i dowiedzieć się, że niektórzy z nich stosują teraz technologie Eclipse'a w swoich projektach.
Na dłużej nie mogłem zostać, ale to co widziałem zrobiło na mnie bardzo dobre wrażenie i mam nadzieję, że w przyszłym roku też będzie mi dane wziąć udział w tym wydarzeniu - znów jako prelegent, lub chociaż jako słuchacz.
P.S. Znalazłem kilka zdjęć z Jackiem i ze mną w roli głownej.
Update: Adam zebrał relacje Poznaniaków w jedną całość i umieścił tutaj.
poniedziałek, 26 maja 2008
Eclipse na Javarsovii!
Ostatnio trochę się opuściłem w publikowaniu nowego materiału, jednak dla osób spragnionych czegoś nowego na temat Eclipse'a mam informację, że w najbliższą sobotę na Javarsovii, która odbędzie się w Warszawie, będzie można posłuchać o różnych sposobach na wykorzystaniu Eclipse'a - "Eclipse: Desktop/Web/Server-Side/Mobile"! Prezentację będę prowadził razem z Jackiem Pospychałą. Serdecznie zapraszamy! i do zobaczenia! :)
poniedziałek, 21 kwietnia 2008
Eclipse Modeling Framework (EMF), część III
Ostatnio wygenerowaliśmy kod, a w tej części tutoriala spróbujemy z tego kody skorzystać.
- W projekcie FamilyTree stwórzmy pakiet familytree.main (klikamy prawym przyciskiem na katalog src i wybieramy New->Package). W pliku plugin.xml wchodzimy na zakładkę Dependencies i w sekcji Required Plug-ins klikamy przycisk Add i w nowym oknie wpisujemy org.eclipse.emf.ecore.xmi (jest to dodatkowy plugin, który pozwoli nam na prosty zapis instancji naszego modelu do pliku) i zatwierdźcie wybór klikając OK.
- Ściągamy TEN plik z klasą ModelMain, kopiujemy go do nowego pakietu i otwieramy w edytorze. W klasie znajdziecie m.in. następujące trzy metody:
- createModel - tworzy kilka elementów modelu
- saveModel - zapisuje model do pliku
- loadModel - wczytuje model z pliku oraz wypisuje na konsolę znalezione dzieci zapisanej do pliku rodziny
- Uruchommy kod, klikając prawym przyciskiem myszy na edytorze i wybierając Run As-> Java Application.
- Zobaczmy teraz jak działa powiadamianie o zmianach. W klasie ModelMain odkomentujmy metodę listenForChanges oraz jej wywołanie w metodzie main. W metodzie listenForChanges pokazany jest przykład prostego nasłuchiwania na zmiany w modelu. W naszym przypadku nasłuchujemy na zmiany obiektu son, zauważmy że gdy zostajemy powiadomieni o zmianie to mamy łatwy dostęp do wartości przed zmianą, jak i do wartości po zmianie. Uruchommy kod (tak jak w poprzednim punkcie), aby zobaczyć efekt.
Na tym dzisiaj kończymy, w kolejnej części zobaczymy jak uruchomić wygenerowany przez EMF'a edytor i jak nim operować.
Eclipse Modeling Framework (EMF), część II
W poprzedniej części tutoriala udało nam się stworzyć model, teraz przyszedł czas na wygenerowanie kodu.
- Mając stworzony model możemy wygenerować z niego model implementacyjny. Z menu kontekstowego dla folderu model w naszym projekcie wybieramy New->Other->EMF Model. Podajemy nazwę (kończącą się na genmodel), np. My.genmodel, klikamy Next. Na kolejnej stronie wybieramy co będzie podstawą naszego modelu implementacyjnego, w naszym przypadku będzie to model Ecore, który chwilę wcześniej stworzyliśmy, wskazujemy nasz plik klikając na przycisk Browse Workspace. Klikamy Next, a później Finish. Powinien pojawić się plik My.genmodel oraz otworzyć się nowy edytor właśnie z tym plikiem.
- Jeśli przypatrzymy się nowemu plikowi w edytorze to zobaczymy, że nie różni się on za bardzo od pliku My.ecore, który edytowaliśmy poprzednio. Rożnica leży w atrybutach poszczególnych elementów (wystarczy spojrzeć do widoku Properties dla którejś z klas). Plik genmodel przechowuje szczegóły dotyczące kodu, który za chwilę będziemy generować.
- Przyszedł czas na generowanie kodu. W edytorze pliku My.genmodel klikamy na najwyższy węzeł i wybieramy Generate All. Po chwili zauważymy, że w katalogu src naszego projektu pojawił się kod oraz że zostały stworzone trze nowe projekty FamilyTree.edit, FamilyTree.editor, i FamilyTree.tests. Po co nam te dodatkowe projekty?
- projekt editor zawiera wspominany na samym początku edytor instancji naszego modelu
- projekt edit zawiera klasy umożliwiające sprawną edycję elementów wyświetlanych w edytorze
- projekt tests zawiera szkielety testów dla wygenerowanego kodu
- Spójrzmy na chwilę do katalogu src projektu FamilyTree. Znajdziemy tam trzy pakiety:
- familytree - zawiera interfejsy odpowiadające klasom zdefiniowanym w naszym modelu. Dodatkowo znajdziemy tam dwie klasy FamilytreeFactory oraz FamilyTreePackage. Ta pierwsza (jak sama nazwa wskazuje) pozwala nam w łatwy sposób tworzyć obiekty modelu, ta druga natomiast zawiera stałe oraz specjalne metody dostępu do niektórych elementów modelu.
- familytree.impl - zawiera implementację klas zdefiniowanych w naszym modelu
- familytree.util - zawiera klasy pomocnicze do operacji na naszym modelu
- Najważniejsze elementy w wygenerowanym kodzie w projekcie FamilyTree to interfejsy oraz implementacje naszych klas z modelu. Jeśli przypatrzymy im się bliżej to zobaczymy, że w każdym interfejsie pojawiły się metody pozwalające na dostęp do pól klas, a w klasach pojawiły się odpowiednie pola oraz implementacje metod. Warto zauważyć, że przy każdym wygenerowanym elemencie w komentarzy JavaDoc znajduje się adnotacja @generated. Jeśli do jakiejś metody wprowadzimy zmiany, których nie chcemy stracić po ponownej generacji kodu to powinniśmy adnotację tę zmienić na @generated NOT, a w przypadku metod dodawanych przez nas do kodu nie powinniśmy takiej adnotacji w ogóle dodawać
- Spójrzmy na metody getName oraz setName w klasie IndividualImpl:
Jak widzimy kod get’a po prostu udostępnia wartość odpowiedniego pola, natomiast metoda set’a oprócz ustawienia nowej wartości wysyła powiadomienie o zmianie tej wartości do wszystkich obiektów nasłuchujących na tę zmianę.
public String getName() {
return name;
}
public void setName(String newName) {
String oldName = name;
name = newName;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET,
FamilytreePackage.INDIVIDUAL__NAME, oldName, name));
}
Na tym dzisiaj kończymy. W kolejnej części zobaczymy, jak w prosty sposób korzystać z wygenerowanego kodu i z zalet, które daje nam EMF.