Programowanie asynchroniczne - zupełnie nowa era

Programowanie asynchroniczne nie jest przyjemne. Każdy to wie. Nie dlatego że jest trudne bo można się wszystkiego nauczyć ale dlatego że kod jest nieczytelny jeżeli scenariusz wykracza poza 'Hello world'. Sam spędziłem lata pisząc rozwiązania bazowane na platformie Eclipse i moim najlepszym przyjacielem było 'asyncExec'. Jednak nawet pomimo tak przydatnych funkcji całość jest zwyczajnie nieczytelna. Pojawiło się jednak światło w tunelu - automatyczne przekształcanie kodu synchronicznego w asynchroniczny poprzez adnotacje dla kompilatora. Niestety nie jest to mechanizm dostępny w Javie ale i tak warto prezentację zobaczyć. To przyszłość każdego języka :)

Klasyczny program pisany jest imperatywnie. Komenda za komendą. Całość wywołuje się synchronicznie za pomocą jednego wątku. Jeżeli chcemy część pracy przekazać do innego wątku to musimy to jawnie napisać (stworzyć klasę anonimową np. Runnable, wywołać 'asyncExec' itp). Taki kod jednak szybko przestaje być czytelny. Trudno sobie wyobrazić czytelny kod z kilkoma zagnieżdżeniami. Nie wspominając już o obsłudze wyjątków czy wywołań zwrotnych itp. Szybko robi się z tego spagetti. Logika biznesowa w takim kodzie schodzi na plan dalszy a główne skrzypce gra tutaj aspekt techniczny kodu.

Czy to jedyna metoda? Wygląda na to że nie. Półtorej roku temu oglądałem materiały z PDC 2010 podczas których zapowiedziano iż MS pracuje nad wprowadzeniem obsługi asynchroniczności do jęzka C#. Temat wydał mi się diabelnie ciekawy ale zapomniałem o nim napisać. Wczoraj oglądając materiały z konferencji BUILD trafiłem na prezentację wersji finalnej która stała się podstawą nowego API Windows 8 (RuntimeRT).

O co chodzi? O to by programista mógł pisać zwyczajny kod wyglądający na synchroniczny ale kompilator potrafił przekształcić go w kod asynchroniczny bazowany na wywołaniach callback. Wygląda to niewiarygodnie. Można napisać metodę mającą 100 linii z czego np. 10 wywołań będzie wywołaniami asynchronicznymi. Kompilator rozbije taką metodą na serię metod zwrotnych. Nawet więcej można oznaczyć jakąś iterację że ma się wywołać równolegle a kolejna linijka kodu wykona się dopiero gdy przetworzone zostaną wszystkie elementy kolekcji. Całość sterowana dwoma prostymi słowami kluczowymi 'async' oraz 'await' umieszczanymi przy wywołaniu. To jest przyszłość jaką chciałbym kiedyś zobaczyć także w Javie.

Prezentację można zobaczyć na poniższym wideo. Poza wywołaniami asynchronicznymi architekt prezentuje jeszcze kilka innych ciekawych rozwiązań (np. pisanie programów które wywołują kompilator dodając nowe metody "w locie" które następnie ten kod wywołuje itp.). Całość jest imponująca



Mam nadzieję że Oracle znajdzie szybko porozumienie z Google i OpenJDK stanie się wspólną maszyną Javy wspieraną przez wszystkich producentów. Tak by język po kilku latach stagnacji znów rozwijał się tak szybko jak jeszcze 5 lat temu. Współpraca nad jedną wspólną maszyną wirtualną to konieczność by składnia języka dogoniła najnowsze trendy. Transformacja asynchroniczna w C# pokazuje że jeszcze sporo można zrobić na poziomie języka.

EclipseCon / OSGi DevCon 2011 - ponownie brak wersji online

Od dwóch dni trwa najważniejsza konferencja poświęcona rozwojowi technologii Eclipse oraz OSGi czyli EclipseCon/OSGI DevCon. Podczas konferencji prezentowane są najnowsze techniki, dema itp. Udział w tego typu wydarzeniu to szansa na spory skok do przodu w prowadzonych projektach. Po wizycie na Eclipse Summit Europe praktycznie przeorałem architekturę systemu projektowaną dla BZWBK. Od paru lat męczy mnie jednak pytanie: dlaczego EclipseCon nie ma wersji online?

Nigdy nie miałem okazji być na EclipseCon ponieważ koszt przelotu do Stanów zwyczajnie był zbyt wysoki dla moich pracodawców. Myślę że w podobnej sytuacji są tysiące programistów zainteresowanych tymi technologiami. Nawet jeżeli ktoś ma okazję polecieć na EclipseCon to raczej nie poleci cały zespół deweloperski. Koszty zawsze będą zbyt wysokie. Dodatkowo problemem są sprawy organizacyjne. Załatwiając swoje wyjazdy na Eclipse Summit Europe lub Eclipse Banking Day zobaczyłem na własne oczy ile kosztowało mnie to czasu. Przekonanie pracodawcy, znalezienie taniego hotelu, taniego przelotu tak by nie przekroczyć przydzielonej kwoty. Sprawy organizacyjne zabierały mi kilka dni i nie zawsze były proste (np. gdy w hostelu rezerwacja musiała być przeprowadzona po niemiecku).

Czy tak być powinno? Dlaczego nie można zobaczyć sobie wszystkich prezentacji poprzez internet? Większość dużych konferencji technicznych nadawana jest jednocześnie w internecie. Microsoft transmituje wszystkie wykłady z konferencji w ramach Channel9, Google IO trafia w całości na YouTube. Kilka lat temu pojawiła się też platforma Parleys na której można zobaczyć ciekawe prezentacje ze świata Javy np. Devoxx, SpringOne itd.

Eclipse ma swoją platformę EclipseLive. Gdy platforma się pojawiła miałem nadzieję że będzie odpowiednikiem Channel 9. Że pojawią się w niej prezentacje z konferencji EclipseCon, EclipseSummitEurope. Tak się jednak nie stało. Nigdy nie pojawiają się tam materiały z konferencji dłuższe niż 5-10min (najczęściej z korytarza). Chyba dwa lata temu pojawił się pomysł by wszystkie prezentacje były dostępne jako PDF poprzez specjalną stronę. Nie udało się. Dziś mniej więcej 1/10 prezentacji ma dołączone jakiekolwiek materiały. Jednak są to prawie zawsze tylko slajdy które często są niewystarczające.

Pełną listę prezentacji można znaleźć na tej stronie:
http://www.eclipsecon.org/2011/sessions/?page=sessions

Lista prezentacji jest imponująca. Niektóre tematy są naprawdę ciekawe i dużo bym dał za to by móc je zobaczyć. Gdyby pojawiła się tam opcja wykupienia dostępu online z pewnością bym z takiej opcji skorzystał. Myślę że nawet osoby które miały okazje być na miejscu z chęcią zobaczyłyby prezentacje na które nie starczyło im czasu. Jednocześnie odbywa się aż 8 różnych wykładów. Zobaczenie wszystkich materiałów zabrałoby prawdopodobnie miesiąc :)

Eclipse nie jest łatwą platformą do nauki. Mamy 100x więcej materiałów niż jeszcze 5-6 lat temu. Nie ma już potrzeby by z tłumaczyć translatorem instrukcję do GEF z języka japońskiego :). Na Amazonie jest spora ilość rewelacyjnych książek z logiem Eclipse (które chyba wszystkie kupiłem), są grupy dyskusyjne. Myślę jednak że to cały czas za mało by spopularyzować platformę Eclipse oraz OSGi.

A jak wyglądały wersje online konferencji deweloperskich innych platform?

Microsoft PDC 2010:
http://player.microsoftpdc.com/schedule/sessions

Google IO 2010:
http://www.google.com/events/io/2010/


Czy kiedyś EclipseCon pojawi się w całości na YouTube?

Prezentacja OSGi w JEE we Wrocławiu [Wrocław JUG]

Właśnie przeczytałem że jutro na Politechnice Wrocławskiej odbędzie się prezentacja "OSGI + J2EE". Została ona zorganizowana przez zespół R&D Eurobanku. Myślę że warto się na taką prezentację wybrać. W rozwinięciu przekleiłem informację ze strony JUG’a

--------------
Program prezentacji:
- Case study: System informatyczny z dużą liczbą rozwijanych jednocześnie obszarów
- Analiza potrzeby modularyzacji systemów informatycznych
- Przegląd i porównanie dostępnych technik modularyzacji w środowisku Java EE
- Wprowadzenie w kluczowe koncepcje OSGi
- Propozycja modelowej architektury łączącej zalety Java EE i OSGi
- Prezentacja praktycznego działania i architektury wielomodułowej platformy webowej

Politechnika Wrocławska (budynek B4)
Łukasiewicza 5
Sala 448

Zapisać można się poprzez stronę Wrocław JUG
--------------


Przy okazji jeżeli ktoś interesuje się tematem zachęcam do lektury książki "OSGi and Equinox". Czytałem ją rok temu i sporo mi wyjaśniła. Przy okazji jeżeli ktoś ma problemy z widocznoscią pakietów w trakcie integracji modułów to tutaj można znaleźć "niekonwencjonalne rozwiązanie":

http://deepdiveinto.blogspot.com/2010/06/jak-wamac-sie-do-obcego-bundla-w-osgi.html

Nokia Windows Phone 7

Na to czekałem. W ciągu ostatnich kilku lat miałem kilka telefonów, najczęściej psuły się po roku lub dwóch. Wyjątkiem był telefon Nokia N82. Niestety Symbian (który bardzo mi się podoba) pomimo swoich zalet nie zdawał testu jako system na miarę 2011r. Pojawiła się jednak nadzieja - Nokia Windows Phone 7 :)

Zgodnie z wcześniejszymi plotkami Nokia ogłosiła dziś partnerstwo z Microsoftem. Dzięki niemu na telefonach Nokii instalowany będzie system Windows Phone 7. To jednak nie wszystko. Całe oprogramowanie Nokii zostanie dostosowane do nowego systemu. Przykładem są mapy. Nadal będziemy mieli możliwość używania map zainstalowanych w telefonie (wyjazdy zagraniczne bez kosztów roamingu). Także pozostałe usługi jak sklep OVI zostaną zintegrowane z ekosystemem WP7.

Windows Phone 7 ma kilka zalet. Pierwszą jest środowisko programistyczne dla deweloperów. Jako osoba związana z tworzeniem narzędzi Eclipse muszę przyznać że konkurencyjne narzędzia Visual Studio zawsze były o krok do przodu. Momentami Eclipse wyprzedzało Visual Studio szybciej wprowadzając np. refaktoring itp. Jednak VS to kombajn z którym trudno konkurować nawet takim firmom jak IBM.

Drugą sprawą jest fajny pomysł na integrację całości. Różne usługi, zewnętrzne programy wyglądają podobnie. Mają ten sam interfejs. Tak jakby nie były osobnymi aplikacjami ale pluginami wpinanymi do IDE. Pomysł na ujednolicenie GUI jest po prostu rewelacyjny.

Są też potencjalne wady. Słynny brak multitaskingu dla zewnętrznych aplikacji instalowanych ze sklepu. Nie wiem czy będzie mi to przeszkadzało. W Symbianie często uruchamiam kilka aplikacji, jednak zawsze są to aplikacje systemowe. Z tego co czytałem takim aplikacjom system pozwala uruchamiać się jednocześnie. Całość nie powinna więc być uciążliwa. Myślę że będę mógł z tym żyć jeżeli tylko mój telefon będzie miał matrycę 1/1.83" :)


Swoją drogą ciekawa była reakcja konkurencji. Jeden z wiceprezydentów Google związany z rozwojem Androida (Vic Gundotra) skomentował umowę pisząc:
Dwa indyki nie czynią orła

CEO Nokii jednak bardzo celnie odpowiedział:
Dwaj bracia montujący rowery pewnego dnia postanowili latać



Trzymam kciuki by "indyki" wspólnie nauczyły się latać. No i czekam na premierę Nokia N8 z Windows Phone 7. To telefon który kupię pierwszego dnia gdy pojawi się w sklepie :)

Eclipse Demo Camp 2010 - Poznań

Niestety w tym roku nie udało mi się zorganizować trzeciej wrocławskiej edycji Eclipse Demo Camp. Do tej pory spotkania organizowałem dzięki pomocy firmy Sygnity. Firma jednak jakiś czas temu zakończyła rozwój projektów eclipsowych. Nie udało mi się znaleźć nowego sponsora więc tym razem trzeba było ze spotkania zrezygnować. Każdemu jednak kto czekał na wrocławską edycję polecam jutrzejsze spotkanie w Poznaniu!

Poznańska edycja Eclipse Demo Camp jest najstarsza w Polsce. Spotkania odbywają się dwa razy w roku od co najmniej 4 lat. Tym razem spotkanie odbędzie się w pubie Johnny Rocker. Spotkanie organizują w trójkę Natalia Klimasz i Krzysztof Daniel z IBM Eclipse Support Center oraz Adam Dudczak z Poznańskiej grupy JUG (Java User Group).

Plan spotkania wygląda następująco:
13.15 - Krzysztof Kaźmierczyk, IBM ESC, How to easy find Java memory problems using Eclipse using Memory Analyzing Tool
13.45 - Jacek Pospychala, Zend, Testowanie GUI w aplikacjach Eclipse RCP
14.15 - Krzysztof Daniel, IBM ESC, Server-Side Eclipse what it can do for you?
15.00 - Anna Ferster, Marek Kuzora & Filip Wiśniewski,Students PUT, Moduł rozszerzonych preferencji do Eclipse RCP
15.30 - Małgorzata Janczarska, IBM, Building web application on top of Eclipse
16.00 - Tomasz Zarna, IBM, Eclipse 3.7 Tips and tricks

Każdego zainteresowanego rozwojem środowiska Eclipse zapraszam w imieniu organizatorów. To będzie rewelacyjne spotkanie!

Wszystkie ważne informacje można znaleźć na oficjalnej stronie WIKI:
http://wiki.eclipse.org/Eclipse_DemoCamps_November_2010/Poznan

Jeżeli ktoś ma konto w serwisie Facebook można także dodać się do specjalnie utworzonego wydarzenia (dzięki temu wasi znajomi dowiedzą się o spotkaniu EDC Poznań). Nie jest to jednak równoznaczne z rejestracją. To tylko taki opcjonalny dodatek w ramach grupy 'eclipse.polska'

http://www.facebook.com/event.php?eid=155588817818747


Miałem okazję być na kilku wcześniejszych poznańskich spotkaniach i zawsze było rewelacyjnie (raz była nawet mata do Dance Dance Revolution!). Zawsze starałem się tak zaplanować swoje delegacje do poznańskiego oddziału PB Polsoft by po pracy móc być także na EDC (spotkania były wieczorami w ciągu tygodnia więc można było na nie jechać tylko z pracy). Żałuję że niestety nie będę mógł tym razem przyjechać (anulowałem więc prezentację XText). Mam nadzieję że następnym razem uda mi się lepiej zaplanować swój czas tak by nie kolidowały mi dwie ważne sprawy.

Mam także nadzieję że uda mi się zorganizować trzecie wrocławskie EDC w czerwcu. Wszystko jednak zależy od tego czy znajdzie się jakaś firma rozwijająca projekty w technologiach eclipsowych która chciałaby całość sponsorować. Biorąc pod uwagę że coraz więcej firm stara się wejść w technologię EclipseEquinox/OSGI to mam nadzieję że uda się coś znaleźć. W końcu takie spotkania to idealny sposób by znaleźć pracowników znających od lat OSGI w praktyce - to możliwe tylko w EclipseRCP :)

Narzędzia z Instantiations dostępne za darmo

Instantiations to jedna z legend świata Eclipse. Przez lata zajmowali się doskonaleniem swojego pakietu narzędzi do wizualnego tworzenia formularzy w SWT/Swing/GWT. Dzięki jakości swoich produktów firma potrafiła przez lata utrzymać się na trudnym rynku zdominowanym przez darmowe alternatywy (kiepski VisualEditor oraz dobry Netbeans Matisse). Miesiąc temu firma została przejęta przez Google. Głównym celem był edytor GWT.

Osobiście nigdy nie miałem okazji by coś poważniejszego zaprogramować z użyciem pakietu Instantiations. GUI które budowaliśmy było zbyt złożone by można było je "wyklikać" i jednoczenie nie było go za dużo. Budowanie narzędzi deweloperskich znacznie różni się od budowania aplikacji z milionem względnie prostych i przewidywalnych formularzy. Jednak jedna funkcja bardzo mnie interesowała. Mianowicie możliwość tworzenia skryptów na potrzeby regresji GUI. Szczególnie kusiło mnie nagrywanie edytorów graficznych opartych na GEF/GMF.

Oprogramowanie testów regresji dla edytora graficznego jest niezmiernie trudne. Trudno tu polegać na samych testach jednostkowych gdy 95% kodu jest wygenerowana automatycznie i zawiera dosyć zagmatwaną logikę. Nie ma co ukrywać ale kod generowany przez GMF nie należy do najprzyjemniejszych i z czasem przekształca się w bliżej nieokreśloną masę wymieszanych metod własnych i automatycznych. Utrzymanie całości graniczy z cudem szczególnie gdy robi się coś nie do końca standardowego (jak przykładowo rozbicie edytora na na kilka współpracujących/opcjonalnych modułów OSGi).

Niestety nigdy nie znalazłem czasu na dokładne testy tych narzędzi. Także cena była zaporowa. Nadzieją okazał się otwarty projekt SWTBot który pojawił się jakieś dwa lata temu. Przyznam że bardzo mi się spodobał ze względu na swoją prostotę jednak brak w nim było obsługi edytorów graficznych (dodane zostały raptem kilka miesięcy temu w wersji 'alpha').

Być może jednak warto wrócić do tematu. Dziś Google ogłosiło na swoim blogu że pełny pakiet narzędzi zostaje udostępniony całkowicie za darmo :)

GWT Designer
Zestaw narzędzi dla GWT

CodePro AnalytiX
Zautomatyzowany system analizy kodu

WindowBuilder Pro
Narzędzia do budowania GUI w SWT/Swing/XWT/GWT

WindowTester Pro
Testy regresji w GUI



Co cieszy zapowiedziano także mocną integrację z wcześniejszymi pluginami Google. Możliwe więc że za kilka miesięcy pojawi się naprawdę dopracowany zestaw narzędzi do pracy z GWT. Bez wątpienia zwiększy to jeszcze bardziej popularność tej technologii. Więcej informacji można znaleźć na blogu Google GWT

Prezentacja Eclipse Virgo (SpringSource dmServer)

Dziś o godzinie 17.00 odbędzie się prezentacja projektu Eclipse Virgo (dawniej znanego jako SpringSource dmServer). Prezentację poprowadzą jego liderzy: Glyn Normington oraz Steve Powell. Prezentacja odbędzie się na platformie Eclipse Live więc każdy będzie mógł uzyskać odpowiedzi na własne pytania.

Rejestracja możliwa jest pod tym adresem:
http://live.eclipse.org/node/937

Więcej informacji o projekcie Eclipse Virgo możecie znaleźć na stronie projektu:
http://www.eclipse.org/virgo/

Jako programista środowiska Eclipse od wielu lat mam możliwość pracy w środowisku OSGi. Nic tak nie porządkuje kodu jak przemyślana modularyzacja z wymuszonymi jednokierunkowymi zależnościami pomiędzy modułami + usługi/rozszerzenia. Bez wątpienia jestem wielkim fanem tej technologi :) Dlatego bardzo cieszy mnie jej ekspansja także na platformę JEE/J2EE. Mam nadzieję że znajdę trochę czasu by wrzucić na bloga jakiś dłuższy wpis o usługach, modularyzacji i tematach pokrewnych. Jak w każdej technologii także w OSGi jest kilka kruczków które dobrze znać (np. upublicznić pakiet prywatny z zewnętrznej biblioteki)

Jeżeli ktoś z was jest zainteresowany powiadomieniami o kolejnych prezentacjach, wykładach, spotkaniach zapraszamy do oficjalnej grupy 'Eclipse Polska na Facebooku'



---------------------------------
Aktualizacja
Link do nagranej prezentacji:



Disqus czyli ciekawy system komentarzy

Przez ostatnie 4 lata korzystałem z domyślnego mechanizmu komentarzy z serwisu Google Blogspot. Niestety całość wyglądała nienajlepiej. Przykładowo dodanie komentarza otwierało nową stronę która nie wykorzystywała układu strony bazowej i wyświetlała się w wąskiej kolumnie. O takich funkcjach jak odpowiedź na komentarz można było zapomnieć. Zauważyłem jednak że coraz więcej stron korzysta z kilku alternatywnych implementacji kontrolki komentarzy.

W zasadzie najpopularniejsze są dwa silniki 'Disqus' oraz 'IntenseDebate'. To bardzo rozbudowane mechanizmy implementujące wszystkie opcje których domyślnie brakuje na Google Blogspot. Mamy do dyspozycji nie tylko możliwość wyświetlania odpowiedzi w wątkach ale także logowanie za pomocą profilów w serwisach społecznościowych. Tym samym logowanie powinno być prostsze (bez wpisywania kodów). Po przeczytaniu kilku opinii postanowiłem wypróbować system Disqus. Jest on zdecydowanie popularniejszy. Dodatkowo dostarcza takich mechanizmów jak importowanie istniejących komentarzy oraz ich synchronizację w tle z oryginalną bazą (co ma znaczenie jeżeli ktoś chciałby później z takiej kontrolki zrezygnować nie tracąc danych).

Instalacja polega na przejściu prostego kreatora w którym podaje się nazwę bloga oraz ustawia podstawowe opcje. Można wybrać elementy które mają być pokazywane, ustalić wygląd oraz włączyć mechanizm import/export. Mechanizm importu i synchronizacji z Blogspot dostępny jest w sekcji 'Tools'. Sama instalacja polega na automatycznym dodaniu do naszego szablonu odpowiedniej sekcji.

Największą zaletą jest chyba bardziej rozbudowana możliwość logowania. Użytkownik nie musi już posiadać konta Google Blogspot jak do tej pory. Może się zalogować za pomocą profilu w serwisie Facebook, Twitter lub skorzystać z OpenID. W przypadku kont Google loginem OpenID jest adres naszego publicznego profilu (zakładając publiczny profil Google warto zwrócić uwagę by nie ujawnić identyfikatora adresu email oraz listy znajomych - opcje te są domyślnie zaznaczone). Pozostałe serwisy dostarczające identyfikator OpenID znajdują się pod tym adresem http://openid.net/get-an-openid. Można także komentować całkowicie bez autoryzacji jednak taką opcję wyłączyłem.

Ogólnie całość wydaje się ciekawa. Zobaczę jak się będzie sprawdzała (choć za dużo komentarzy nigdy tu nie było). Jakby co to zawsze można za pomocą jednego kliknięcia wrócić do starego mechanizmu

[OSLO] Quadrant idzie w odstawkę

Jakieś półtorej roku temu pisałem na blogu o projekcie Oslo. Rewelacyjnie zapowiadających się narzędziach do tworzenia języków specyficznych dla problemu. Projekt składał się z kilku elementów. Narzędzi do definicji modelu języka i jego testów w czasie rzeczywistym, bazy danych przechowującej instancje modeli zgodne z gramatyką oraz edytor Quadrant.

Pierwszy element w bezpośredni sposób odpowiadał funkcjonalności projektu xText który mnie osobiście od dawna pasjonuje. Byłem pod wielkim wrażeniem faktu iż całość pracowała w czasie rzeczywistym. W jednym edytorze można było definiować/modyfikować model gramatyki i w tym samym czasie go testować na przykładowych danych. W przypadku projektu xText na dzień dzisiejszy wciąż konieczna jest generacja kodu i uruchomienie kolejnej instancji Eclipse. Oczywiście możliwe byłoby rozszerzenie środowiska xText w taki sposób by całość nie wymagała restartu poprzez wykorzystanie dynamiki mechanizmów OSGi/Equinox, jednak aktualnie nie jest to zaimplementowane (budowałem tego typu mechanizmy i nie jest to takie trudne jak się wydaje :)

Drugim elementem była baza instancji. Mniej więcej odpowiadała ona środowisku Eclipse CDO.

Trzeci element 'Quadrant' był dla mnie jednak niezrozumiały. Był to edytor który w sposób graficzny pozwalał budować i łączyć zapytania do bazy instancji. Przyznam że nie do końca potrafiłem sobie wyobrazić jego produkcyjne zastosowanie. Z doświadczenia wiem że jeżeli ktoś chce dostarczyć narzędzia dla osób o profilu 'nieinformatycznym' (jak np. analityk o profilu 'telekomunikacja' a nie 'informatyka') to narzędzia te MUSZĄ BYĆ PROSTE. Domena rozwiązywanego problemu musi zostać tak okrojona/dopasowana by możliwe było stworzenie naprawdę prostych narzędzi operujących w zadanej (zrozumiałej) przestrzeni. Po ci więc Microsoft tworzył uniwersalny edytor zapytań?

Quadrant nie był prosty. Wyglądał na narzędzie do obsługi którego konieczne będzie specjalistyczne przeszkolenie, a nawet znajomość modelu gramatyki. Trudno mi sobie wyobrazić by klient operujący w narzędziach schodził na poziom modelu który często jest nie do końca zrozumiały nawet dla osób z IT o odmiennej specjalizacji. Sam model także nie ma wartości sam w sobie. To tylko zapis wiedzy którą dopiero później należy zinterpretować w coś wartościowego dla klienta (generacja lub silnik interpretujący)

Dodatkowo całość kojarzyła mi się trochę z filmem 'Raport mniejszości'. Specyfika graficzna edytora powodowała że ewentualny zapytanie zbudowane w ten sposób musiałoby być wyświetlane na ekranie wielkości ściany lub przynajmniej 50 cali. Całkowicie niezrozumiały element.

Parę miesięcy później pojawiła się informacja o zdefiniowaniu przeznaczenia projektu Oslo. Został on przypisany jako element oferty bazodanowej. To było spore zaskoczenie. Trochę szkoda ponieważ edytor oraz baza mogły mieć zdecydowanie szersze pole działania podobnie jak xText. Wyjaśniało jednak istnienie złożonego modułu do budowy zapytań. Przyznam że po tym ustaleniu kierunku dalszego rozwoju straciłem zainteresowanie tematyką OSLO.

Dziś natrafiłem na informację o zakończeniu prac nad modułem 'Quadrant'. Pozostałe elementy pozostają bez zmian. Niestety dalej całość targetowana jest tylko na bazy danych. Szkoda. Gdyby Microsoft pracował bardziej na kształt Eclipse Community bez wątpienia projekt Oslo mógłby więcej zmienić w tematyce DSL. Ich zespół mógłby dalej pracować nad rozszerzeniem projektu dla baz danych jednak zakładam że sporo osób z zewnątrz wykorzystywałoby go inaczej. Jako podstawę rozwiązań DSL jak dziś się to robi z EMF/xText.

Otwartość na deweloperów z zewnątrz to podstawa w tego typu projektach rozwojowych. Wystarczy sobie przypomnieć początki środowiska Eclipse. Przed wersją 3.0 sporo osób 'hakowało' SDK wycinając samego Equinoxa jako podstawę rozszerzalnych aplikacji serwerowych lub wczesne RCP. Dzięki temu ktoś zauważył że warto stworzyć koncepcję RCP, później RT itp. Otwartość na nowe 'niestandardowe' pomysły to moim zdaniem coś o czym zawsze powinno się pamiętać

Jak dodać znaczniki Open Graph na bloga [Blogspot]

[Poprawione elementy zaznaczone na zielono]
Od momentu premiery protokołu pod koniec kwietnia coraz więcej stron wzbogaca swoje strony o znaczniki Open Graph oraz nowe kontrolki Facebooka. Szczególnie para kontrolek 'aktywność znajomych' i 'lubię to' jest popularna. Pierwsza ułatwia poinformowanie znajomych że coś się lubi, druga pokazuje co warto przeczytać. Kluczowe są jednak nie same kontrolki a uniwersalne znaczniki Open Graph. Do tej pory ze znaczników tych korzystał tylko serwis Facebook jednak po niedawnym przejęciu MetaWeb przez Google także ten gigant zacznie "proces skanowania internetu" w poszukiwaniu znaczników. Myślę że także polskie serwisy wkrótce skorzystają z tego standardu.

To właśnie te znaczniki informują inne serwisy/aplikacje co to za strona, co fizycznego ona reprezentuje, gdzie się znajduje dane miejsce etc. Jeżeli np. na stronie mamy przepis na 'Tequile sunrise' dodajemy znacznik 'drink' i system będzie wiedział jak taką stronę potraktować. Jeżeli ktoś polubi naszą stronę to polubi dany przepis nie zwykły URL (odpowiednia sekcja profilu, pozycja w grafie, możliwość wyszukiwania, agregacji...). Oczywiście znajomi tej osoby zainteresowani przepisem na Tequilę będą trafiali na naszą stronę. Jakaś inna aplikacja może pobrać wszystkie drinki lubiane przez naszych znajomych (o ile tą informację oni udostępnią) lub wszystkie drinki/strony znalezione w systemie.

Jak jednak dodać znaczniki na bloga w serwisie Google Blogspot? To na szczęście jest bardzo proste. Poniżej przedstawię co należy zrobić by nasz blog mógł zostać poprawnie zinterpretowany.

Serwis blogspot działa na zasadzie szablonu. Szablon ten opisuje jak ma wyglądać nasza strona główna oraz strony poszczególnych wpisów. To rozróżnienie jest podstawowym elementem na który należy zwrócić uwagę. Jeżeli przez pomyłkę strona artykułu zostanie oznaczona jako 'blog' dla każdego wpisu zostanie w serwisie Facebook założona automatycznie osobna strona fanów. Tak więc ważne jest by tylko strona główna została oznaczona jako 'blog' lub 'website' a zwykłe strony wpisów jako 'article'. Oczywiście jeżeli nasze wpisy są przepisami na drinki powinny zostać one oznaczone jako 'drink' :)

Konieczna jest więc modyfikacja naszego szablonu. By to zrobić wybieramy opcję 'Ustawienia' a następnie wybieramy zakładkę 'Projekt'. W zakładce tej znajduje się opcja 'Edytuj kod HTML'. By widzieć całość musimy dodatkowo wybrać opcję 'Rozszerz szablony widżetów'. Uzyskamy w ten sposób dostęp do pełnego kodu naszego szablonu. Oczywiście przed modyfikacjami warto zrobić sobie kopię zapasową. Panel prezentuje poniższy rzut ekranu.



Dodanie meta-informacji wymagać będzie zdefiniowania przestrzeni nazw XML dla standardu Open Graph oraz jego rozszerzeń specyficznych dla Facebooka. Z pewnością niedługo pojawią się także rozszerzenia specyficzne dla Google.

xmlns:og='http://opengraphprotocol.org/schema/'
xmlns:fb='http://www.facebook.com/2008/fbml'



Kolejnym krokiem jest modyfikacja znacznika HEAD. Znacznik ten w szablonie jest wspólny zarówno dla strony głównej jak i stron wpisów należy więc dodać w nim zawartość warunkowo. Warunek powinien wyglądać następująco



Zacznijmy od pojedynczych wpisów. Open Graph wymaga zdefiniowania czterech podstawowych parametrów 'og:title' 'og:type' 'og:url' oraz 'og:image'. Pierwszym elementem jest typ który wybieramy z pośród listy typów wspieranych przez protokół. W naszym przypadku będzie to 'article'. Drugim ważnym polem jest tytuł który ustawiamy na wartość 'data:blog.pageTitle'. Wartość ta jest zmienną dostępną w szablonie w trakcie generowania znacznika HEAD. Ważne jest by atrybut 'content' w znaczniku 'meta' który wykorzystuje zmienne szablonu został oznaczony prefixem 'expr:'. Tylko w takim przypadku silnik generujący będzie wiedział że ma podstawić w tym miejscu wartość zmiennej. Kolejnym polem jest adres naszej strony który ustawiamy na wartość zmiennej 'data:blog.url'. Następnie należy zdefiniować obrazek.

Kolejne atrybuty z jakim warto skorzystać to 'og:site_name' pozwalający nam zdefiniować czytelną krótką nazwę dla naszego bloga oraz 'og:description'.

W przypadku strony głównej poszczególne wartości to:

'og:title' - stała nazwa naszego bloga/strony,
'og:type' - typ ustawiony na 'blog' lub 'website'
'og:url' - adres naszej strony głównej
'og:image' - grafika
'og:site_name' - czytelna krótka nazwa
'og:description' - opis strony

Jeżeli nasza strona reprezentuje fizyczne miejsce takie jak restauracja lub jest przykładowo wydarzeniem (koncert lub jakaś inna impreza) należy podać także adres najlepiej z dokładną pozycją GPS (z Google Maps). Poszczególne znaczniki można sprawdzić w dokumentacji protokołu. To chyba jeden z fajniejszych elementów. Facebook aktualnie z tych danych jeszcze nie korzysta ale myślę że jest to tylko kwestią czasu. W końcu czy nie byłoby fajnie wybrać opcję 'lubię to' na stronie jakiegoś koncertu a serwis automatycznie by nas do tego zdarzenia przypisał w serwisie Facebook? W wyniku nasi znajomi mogliby zobaczyć na mapie co dzieje się ciekawego w okolicy. Wszystko całkowicie automatycznie. Dyskusję na temat wydarzeń można znaleźć w Google Groups.

Dodatkowo w przypadku strony głównej możemy także skorzystać z rozszerzonych znaczników przygotowanych przez serwis Facebook i zdefiniować administratorów strony. Jest to bardzo ciekawa funkcjonalność. W wyniku w serwisie Facebook automatycznie utworzy się wirtualna strona fanów naszego bloga/strony (dzięki danym które zdefiniowaliśmy w Open Graph). Dlaczego wirtualna? Ponieważ nie będzie widoczna dla użytkowników, ci będą kierowani bezpośrednio na naszego bloga. Strona ta będzie jedynie ułatwiała nam administrację i dostęp do statystyk. Dodatkowo nasz blog będzie dostępny w wyszukiwarce serwisu Facebook

Znacznik ten to 'fb:admins'. Administratorem może być także aplikacja co definiujemy za pomocą znacznika 'fb:app_id'. Po zdefiniowaniu administratora na blogu musimy wykorzystać przycisk Like na stronie by administrator potwierdził przynależność do tej strony (można skorzystać z wtyczki Facebook Like Plus która udostępnia 'przenośny Like' dla każdej strony). Więcej informacji można znaleźć na stronie dokumentującej rozszerzenia protokołu.

Całość znacznika 'IF' dla mojego bloga wygląda następująco (nie ma w nim znacznika 'admins'):



W zasadzie jest to już koniec definiowania znaczników Open Graph. Warto jednak dodać jeszcze przycisk 'Lubię to!' pod naszymi wpisami. By to zrobić należy w kodzie odszukać 'stopkę' naszych wiadomości. Jest ona oznaczona jako: <div class='post-footer'>. Ramkę przycisku 'Lubię to' należy umieścić zaraz pod tym znacznikiem. Całość powinna wyglądać następująco.



Oczywiście sam kod można wygenerować na stronie prezentującej przycisk Like. Wartość adresu strony powinna być ustawiona na wartość 'data:post.url'. Znaczniki należy przekonwertować zgodnie z wzorem oraz pamiętać o prefixie 'expr' w atrybucie 'src'.

W wyrażaniu należy dodać także spacje przy znakach '+' w otoczeniu zmiennej 'data:post.url' (nie ma tego na obrazku). W przeciwnym wypadku blog nie pokaże się poprawnie. Więcej informacji dodałem w kolejnym wpisie wyjaśniającym

Zapisujemy nasz szablon i testujemy wynik. Najlepiej poprawność sprawdzić za pomocą narzędzia Facebook URL Linter. Wpisujemy w nim zarówno adres strony głównej jak i przykładowego wpisu. Całość pokazuje jakie dokładnie informacje znajdą się w grafie gdy strona do niego dołączy.

Jak widać całość zabiera kilka minut (w przeciwieństwie do napisania tak długiego opisu). Jeżeli się komuś wpis spodobał zachęcam do kliknięcia w 'Lubię to'. Będę wiedział że tak szczegółowe tutoriale ma sens umieszczać na blogu. Choć następny będzie raczej znów w tematyce Eclipse lub OSGi.


Jak zwykle zachęcam także do wypróbowania wtyczki dla Google Chrome - Facebook Like Plus.
Zainstalowało ją już ponad 450 osób z czego 100 osób zostało fanami :)

'Eclipse w Polsce' w serwisie Facebook

Właśnie wróciłem z Krakowa w którym odbyła się kolejna edycja spotkania Eclipse Demo Camp. Podczas spotkania pojawiło się kilka fajnych tematów miałem także okazję po raz kolejny nakłaniać słuchaczy do wypróbowania środowiska XText. Samo spotkanie opisze jednak w kolejnym wpisie jak sobie wszystko poukładam w głowie. Teraz czas na Facebooka :)

W ciągu ostatnich 4 lat wspólnie z wami zorganizowaliśmy sporo spotkań z cyklu EDC. Celem tych spotkań było nie tylko nakłonienie ludzi by wypróbowali technologie z rodziny Eclipse ale przede wszystkim chęć zbudowania polskiej społeczności związanej z tym tematem. Coś jak JUG’i które od wielu lat grupują pasjonatów języka Java. We Wrocławiu zorganizowaliśmy dwa takie spotkania i zauważyłem że nie do końca wszystko działa tak jak planowałem.

Ludzie zapisywali się na spotkania, przychodzili, dyskutowali (często do nocy jak podczas 'EDC 2009 Wrocław' które trwało prawie 7h!)... Sukces? Nie do końca. Po pierwsze nie udało mi się kontaktów z EDC utrzymać na dłużej, po drugie na kolejnym spotkaniu nie kojarzyłem osób które były na poprzednim. Po prostu za bardzo byłem zajęty organizacją całości, przygotowywaniem kawy i herbaty by móc kogokolwiek zapamiętać (nie zawsze miałem czas by nawet spokojnie posłuchać prezentacji)

Postanowiliśmy to zmienić. Po dyskusji podczas EDC z Szymonem i Tomkiem zdecydowaliśmy się utworzyć 'społecznościową stronę' w serwisie Facebook: http://www.facebook.com/eclipse.polska.

Chcemy by strona ta była miejscem w którym każdy będzie mógł się dowiedzieć co ciekawego dzieje się w polskiej społeczności Eclipse. Zapisać się na kolejne EDC oraz inne spotkania/wykłady na których będzie poruszana ta tematyka. Każdy kto dołączy do społeczności będzie mógł wrzucać na tablicę ważne informacje dotyczące platformy (zdjęcia, wideo, linki etc). Możliwa będzie także dyskusja na różne tematy za pomocą forum dysksyjnego Facebooka (choć fajnie byłoby także dodać jako zakładkę istniejące forum - wie może ktoś jak to zrobić?)

No i na koniec najważniejsze czyli tagowanie zdjęć. Chcemy zachęcić wszystkich którzy uczestniczyli w spotkaniach EDC w ciągu ostatnich kilku lat by oznaczyli się na archiwalnych zdjęciach. Pozwoli nam to dowiedzieć się kto uczestniczył w spotkaniach i jakoś wspólnie stworzyć solidne podstawy społeczności Eclipse w Polsce. Nie znaleźliśmy zdjęć ze wszystkich spotkań (część galerii jest pusta) ale postaramy się to uzupełnić. Jeżeli ktoś ma takie zdjęcia prosiłbym o kontakt na 'deepdiveinto' na gmail.

Wszystkich zainteresowanych rozwojem środowiska Eclipse serdecznie zapraszamy :)


Eclipse Demo Camp 2010 - Kraków

Już jutro odbędzie się kolejne spotkanie z cyklu Eclipse Demo Camp. W imieniu organizatorów zapraszam każdego zainteresowanego technologiami związanymi ze środowiskiem Eclipse.

Prezentacje będą bardzo krótkie ponieważ główny nacisk położony będzie na dyskusje tematyczne. Każdy zainteresowany będzie miał więc możliwość uzyskania odpowiedzi na swoje pytania związane z technologiami Eclipse. Ja z mojej strony obiecuję odpowiadać na wszystkie pytania dotyczące technologii związanych z modelowaniem, językami specjalizowanymi (nie tylko na temat xText)

http://wiki.eclipse.org/Eclipse_DemoCamps_Helios_2010/Krakow

11.00 - 11.30New and Noteworthy in Eclipse Helios, Platform Workspace Team
11.30 - 11.45Eclipse 4.0 and e4, Tomasz Żarna, Platform Workspace Team
12.15 - 12.30OSGI in the cloud, Krzysztof Daniel, IBM Eclipse Support Center
12.30 - 12.45Cloud computing
13.30 - 13.45BIRT - Raporty w Eclipsie, Łukasz Pobereźnik, IBM
13.45 - 14.00XText, Grzegorz Białek
14.30 - 14.45Eclipse Communication Framework, Paweł Pogorzelski, Platform Workspace Team
14.45 - 15.00GWT development using Eclipse, Szymon Brandys, Platform Workspace Team