tag:blogger.com,1999:blog-72605234442146261472024-03-13T20:12:35.583+01:00Deep dive into...Blog o programowaniu oraz technologii ITGrzegorz Białekhttp://www.blogger.com/profile/14791618001989899083noreply@blogger.comBlogger35125tag:blogger.com,1999:blog-7260523444214626147.post-27493066722002557452011-09-21T17:13:00.000+02:002012-04-28T17:41:08.110+02:00Programowanie asynchroniczne - zupełnie nowa era<span class="fullpost"><a href="http://2.bp.blogspot.com/-Unz2PQgI5mA/Tnn-JfBpomI/AAAAAAAABRg/iSERS2RmO1A/s1600/Async.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="178" src="http://2.bp.blogspot.com/-Unz2PQgI5mA/Tnn-JfBpomI/AAAAAAAABRg/iSERS2RmO1A/s320/Async.jpg" width="320" /></a></span><span class="shortpost"><a href="http://2.bp.blogspot.com/-Unz2PQgI5mA/Tnn-JfBpomI/AAAAAAAABRg/iSERS2RmO1A/s1600/Async.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-Unz2PQgI5mA/Tnn-JfBpomI/AAAAAAAABRg/iSERS2RmO1A/s320/Async.jpg" width="120" /></a></span>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 :)<span class="fullpost"><br />
<br />
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.<br />
<br />
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). <br />
<br />
O co chodzi? O to by <b>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</b>. 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.<br />
<br />
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<br />
<br />
<iframe frameborder="0" scrolling="no" src="http://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-816T/player?w=800&h=450" style="height: 450px; width: 800px;"></iframe><br />
<br />
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.</span>Grzegorz Białekhttp://www.blogger.com/profile/14791618001989899083noreply@blogger.com1tag:blogger.com,1999:blog-7260523444214626147.post-1913294267216500322011-03-16T13:27:00.016+01:002011-03-16T14:18:20.287+01:00Prezentacja OSGi w JEE we Wrocławiu [Wrocław JUG]<span class="fullpost"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://groups.google.com/group/wroclaw-jug"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 120px; height: 150px;" src="http://2.bp.blogspot.com/--f08kNCO8oQ/TYC1ZlcB6vI/AAAAAAAABH4/TZxNhJKmQuQ/s200/wroclaw-jug-frame.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5584662989090450162" /></a></span><span class="shortpost"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://groups.google.com/group/wroclaw-jug"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 120px; height: 150px;" src="http://2.bp.blogspot.com/--f08kNCO8oQ/TYC1ZlcB6vI/AAAAAAAABH4/TZxNhJKmQuQ/s200/wroclaw-jug-frame.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5584662989090450162" /></a></span>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<span class="fullpost"><br /><br />--------------<br />Program prezentacji: <br />- Case study: System informatyczny z dużą liczbą rozwijanych jednocześnie obszarów<br />- Analiza potrzeby modularyzacji systemów informatycznych<br />- Przegląd i porównanie dostępnych technik modularyzacji w środowisku Java EE<br />- Wprowadzenie w kluczowe koncepcje OSGi<br />- Propozycja modelowej architektury łączącej zalety Java EE i OSGi<br />- Prezentacja praktycznego działania i architektury wielomodułowej platformy webowej<br /><br />Politechnika Wrocławska (budynek B4)<br />Łukasiewicza 5<br />Sala 448<br /><br />Zapisać można się poprzez stronę <a href="http://groups.google.com/group/wroclaw-jug/browse_thread/thread/13064294544d02c8/aae9a05ff9e98f20?show_docid=aae9a05ff9e98f20">Wrocław JUG</a><br />--------------<br /><br /><br />Przy okazji jeżeli ktoś interesuje się tematem zachęcam do lektury książki <a href="http://equinoxosgi.org/">"OSGi and Equinox"</a>. 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":<br /><br /><a href="http://deepdiveinto.blogspot.com/2010/06/jak-wamac-sie-do-obcego-bundla-w-osgi.html">http://deepdiveinto.blogspot.com/2010/06/jak-wamac-sie-do-obcego-bundla-w-osgi.html</a></span>Grzegorz Białekhttp://www.blogger.com/profile/14791618001989899083noreply@blogger.com1tag:blogger.com,1999:blog-7260523444214626147.post-78343502297778770132010-11-26T17:59:00.015+01:002010-11-26T23:04:34.641+01:00Eclipse Demo Camp 2010 - Poznań<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://deepdiveinto.blogspot.com/2010/11/eclipse-demo-camp-2010-poznan.html"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 120px;" src="http://2.bp.blogspot.com/_-Hz5kL7u4E4/TPAqllpJACI/AAAAAAAABFo/jA_f9f89BQw/s320/Eclipse_DemoCamp_New.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5543977966541275170" /></a>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 <a href="http://www.facebook.com/event.php?eid=155588817818747&ref=mf">jutrzejsze spotkanie w Poznaniu!</a><span class="fullpost"><br /><br />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 <a href="http://www.johnnyrocker.pl/">Johnny Rocker</a>. 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).<br /><br />Plan spotkania wygląda następująco:<br />13.15 - <span style="font-weight:bold;">Krzysztof Kaźmierczyk</span>, IBM ESC, How to easy find Java memory problems using Eclipse using Memory Analyzing Tool<br />13.45 - <span style="font-weight:bold;">Jacek Pospychala</span>, Zend, Testowanie GUI w aplikacjach Eclipse RCP<br />14.15 - <span style="font-weight:bold;">Krzysztof Daniel</span>, IBM ESC, Server-Side Eclipse what it can do for you?<br />15.00 - <span style="font-weight:bold;">Anna Ferster</span>, <span style="font-weight:bold;">Marek Kuzora</span> & <span style="font-weight:bold;">Filip Wiśniewski</span>,Students PUT, Moduł rozszerzonych preferencji do Eclipse RCP<br />15.30 - <span style="font-weight:bold;">Małgorzata Janczarska</span>, IBM, Building web application on top of Eclipse<br />16.00 - <span style="font-weight:bold;">Tomasz Zarna</span>, IBM, Eclipse 3.7 Tips and tricks<br /><br />Każdego zainteresowanego rozwojem środowiska Eclipse zapraszam w imieniu organizatorów. To będzie rewelacyjne spotkanie! <br /><br />Wszystkie ważne informacje można znaleźć na oficjalnej stronie WIKI: <br /><a href="http://wiki.eclipse.org/Eclipse_DemoCamps_November_2010/Poznan">http://wiki.eclipse.org/Eclipse_DemoCamps_November_2010/Poznan</a><br /><br />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 <a href="http://www.facebook.com/eclipse.polska">'eclipse.polska'</a><br /><br /><a href="http://www.facebook.com/event.php?eid=155588817818747&ref=mf">http://www.facebook.com/event.php?eid=155588817818747</a><br /><br /><br />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.<br /><br />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 :)</span>Grzegorz Białekhttp://www.blogger.com/profile/14791618001989899083noreply@blogger.com0tag:blogger.com,1999:blog-7260523444214626147.post-767100845658214592010-08-31T14:10:00.011+02:002010-08-31T20:18:07.483+02:00Prezentacja Eclipse Virgo (SpringSource dmServer)<span class="fullpost"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.eclipse.org/virgo/"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 250px;" src="http://3.bp.blogspot.com/_-Hz5kL7u4E4/THzzN0JhqoI/AAAAAAAABC4/Ppy61UdLe68/s320/Virgo.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5511547462657092226" /></a></span><span class="shortpost"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.eclipse.org/virgo/"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 120px;" src="http://3.bp.blogspot.com/_-Hz5kL7u4E4/THzzN0JhqoI/AAAAAAAABC4/Ppy61UdLe68/s320/Virgo.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5511547462657092226" /></a></span>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.<span class="fullpost"><br /><br />Rejestracja możliwa jest pod tym adresem:<br /><a href="http://live.eclipse.org/node/937">http://live.eclipse.org/node/937</a><br /><br />Więcej informacji o projekcie Eclipse Virgo możecie znaleźć na stronie projektu:<br /><a href="http://www.eclipse.org/virgo/">http://www.eclipse.org/virgo/</a><br /><br />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. <a href="http://deepdiveinto.blogspot.com/2010/06/jak-wamac-sie-do-obcego-bundla-w-osgi.html">upublicznić pakiet prywatny z zewnętrznej biblioteki</a>)<br /><br />Jeżeli ktoś z was jest zainteresowany powiadomieniami o kolejnych prezentacjach, wykładach, spotkaniach zapraszamy do oficjalnej grupy <a href="http://www.facebook.com/eclipse.polska">'Eclipse Polska na Facebooku'</a><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.facebook.com/eclipse.polska"><img style="cursor:pointer; cursor:hand;width: 320px; height: 254px;" src="http://4.bp.blogspot.com/_-Hz5kL7u4E4/THz4JpirCHI/AAAAAAAABDA/WhJQPMl08gs/s320/EclipsePolska.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5511552888648435826" /></a><br /><br />---------------------------------<br /><span style="background-color: #D8FBC8;">Aktualizacja</span><br />Link do nagranej prezentacji:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://adobedev.adobe.acrobat.com/p22402290/"><img style="cursor:pointer; cursor:hand;width: 320px; height: 200px;" src="http://4.bp.blogspot.com/_-Hz5kL7u4E4/TH1BldQ3OSI/AAAAAAAABDI/zS7GtOH8JWw/s320/Prezentacja.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5511633630737676578" /></a><br /><br /></span>Grzegorz Białekhttp://www.blogger.com/profile/14791618001989899083noreply@blogger.com0tag:blogger.com,1999:blog-7260523444214626147.post-8023969680732336272010-06-29T12:27:00.016+02:002010-08-22T14:39:40.256+02:00'Eclipse w Polsce' w serwisie Facebook<span class="fullpost"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.facebook.com/eclipse.polska"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 200px;" src="http://4.bp.blogspot.com/_-Hz5kL7u4E4/TCnLKGPgRiI/AAAAAAAAA9w/Te7SbZYqfQc/s400/facebook_logo.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5488140995262432802" /></a></span><span class="shortpost"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.facebook.com/eclipse.polska"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 120px;" src="http://4.bp.blogspot.com/_-Hz5kL7u4E4/TCnLKGPgRiI/AAAAAAAAA9w/Te7SbZYqfQc/s400/facebook_logo.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5488140995262432802" /></a></span>Właśnie wróciłem z Krakowa w którym odbyła się kolejna edycja spotkania <a href="http://deepdiveinto.blogspot.com/2010/06/eclipse-demo-camp-2010-krakow.html">Eclipse Demo Camp</a>. 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 :)<span class="fullpost"><br /><br />W ciągu ostatnich 4 lat wspólnie z wami zorganizowaliśmy <a href="http://wiki.eclipse.org/Regional_Communities/Poland">sporo spotkań z cyklu EDC</a>. 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 <a href="http://www.java.pl/">JUG’i</a> 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.<br /><br />Ludzie zapisywali się na spotkania, przychodzili, dyskutowali (często do nocy jak podczas <a href="http://deepdiveinto.blogspot.com/2009/11/eclipse-demo-camp-we-wrocawiu-edycja.html">'EDC 2009 Wrocław'</a> 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)<br /> <br />Postanowiliśmy to zmienić. Po dyskusji podczas EDC z <a href="http://polishineclipse.blogspot.com/">Szymonem i Tomkiem</a> zdecydowaliśmy się utworzyć 'społecznościową stronę' w serwisie Facebook: <a href="http://www.facebook.com/eclipse.polska"> http://www.facebook.com/eclipse.polska</a>. <br /><br />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 <a href="http://www.eclipse.org/forums/index.php?t=thread&frm_id=158&">forum</a> - wie może ktoś jak to zrobić?)<br /><br />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. <br /><br /><span style="font-weight:bold;">Wszystkich zainteresowanych rozwojem środowiska Eclipse serdecznie zapraszamy :)</span><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.facebook.com/eclipse.polska"><img style="cursor:pointer; cursor:hand;width: 320px; height: 286px;" src="http://3.bp.blogspot.com/_-Hz5kL7u4E4/TCnMn2LY0YI/AAAAAAAAA94/P2i7mI4b3X8/s320/wall.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5488142605857902978" /></a><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.facebook.com/eclipse.polska"><img style="cursor:pointer; cursor:hand;width: 320px; height: 183px;" src="http://1.bp.blogspot.com/_-Hz5kL7u4E4/TCnMu-eK5bI/AAAAAAAAA-A/Eb4cAmLl7jo/s320/zdjecia.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5488142728343250354" /></a></span>Grzegorz Białekhttp://www.blogger.com/profile/14791618001989899083noreply@blogger.com0tag:blogger.com,1999:blog-7260523444214626147.post-65169617081923257122010-06-25T13:44:00.009+02:002010-08-22T14:44:58.773+02:00Eclipse Demo Camp 2010 - Kraków<span class="fullpost"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_-Hz5kL7u4E4/THEbKA5sV0I/AAAAAAAABCA/RZhqsXbUtCM/s1600/eclipse-logo.jpg"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 117px;" src="http://4.bp.blogspot.com/_-Hz5kL7u4E4/THEbKA5sV0I/AAAAAAAABCA/RZhqsXbUtCM/s200/eclipse-logo.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5508213678105450306" /></a></span><span class="shortpost"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_-Hz5kL7u4E4/THEbKA5sV0I/AAAAAAAABCA/RZhqsXbUtCM/s1600/eclipse-logo.jpg"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 120px;" src="http://4.bp.blogspot.com/_-Hz5kL7u4E4/THEbKA5sV0I/AAAAAAAABCA/RZhqsXbUtCM/s200/eclipse-logo.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5508213678105450306" /></a></span>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.<span class="fullpost"> <br /><br />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)<br /><br /><a href="http://wiki.eclipse.org/Eclipse_DemoCamps_Helios_2010/Krakow">http://wiki.eclipse.org/Eclipse_DemoCamps_Helios_2010/Krakow</a><br /><br /><table><tr><td width="130">11.00 - 11.30</td><td><span style="font-weight:bold;">New and Noteworthy in Eclipse Helios</span>, Platform Workspace Team</td></tr><tr><td>11.30 - 11.45</td><td><span style="font-weight:bold;">Eclipse 4.0 and e4</span>, Tomasz Żarna, Platform Workspace Team</td></tr><tr><td>12.15 - 12.30</td><td><span style="font-weight:bold;">OSGI in the cloud</span>, Krzysztof Daniel, IBM Eclipse Support Center</td></tr><tr><td>12.30 - 12.45</td><td><span style="font-weight:bold;">Cloud computing</span></td></tr><tr><td>13.30 - 13.45</td><td><span style="font-weight:bold;">BIRT - Raporty w Eclipsie</span>, Łukasz Pobereźnik, IBM</td></tr><tr><td>13.45 - 14.00</td><td><span style="font-weight:bold;">XText</span>, Grzegorz Białek</td></tr><tr><td>14.30 - 14.45</td><td><span style="font-weight:bold;">Eclipse Communication Framework</span>, Paweł Pogorzelski, Platform Workspace Team</td></tr><tr><td>14.45 - 15.00</td><td><span style="font-weight:bold;">GWT development using Eclipse</span>, Szymon Brandys, Platform Workspace Team</td></tr></table></span>Grzegorz Białekhttp://www.blogger.com/profile/14791618001989899083noreply@blogger.com0tag:blogger.com,1999:blog-7260523444214626147.post-9016172404486237222010-06-02T12:35:00.027+02:002010-08-22T14:55:11.026+02:00Jak "włamać się" do obcego bundla w OSGi<span class="fullpost"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.slideshare.net/caniszczyk/osgi-best-and-worst-practices"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 210px; height: 213px;" src="http://3.bp.blogspot.com/_-Hz5kL7u4E4/TAeDZ0p6A8I/AAAAAAAAA9A/064IsTfGbhc/s320/osgi.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5478491951373878210" /></a></span><span class="shortpost"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.slideshare.net/caniszczyk/osgi-best-and-worst-practices"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 120px;" src="http://3.bp.blogspot.com/_-Hz5kL7u4E4/TAeDZ0p6A8I/AAAAAAAAA9A/064IsTfGbhc/s320/osgi.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5478491951373878210" /></a></span>Przeglądając swojego bloga zauważyłem że od dłuższego czasu nie pojawiały się na nim tematy stricte techniczne. Spowodowane to było między innymi małą ilością czasu. Dobrze byłoby to zmienić by blog zachował swój pierwotny charakter. Ponieważ ostatnie kilka lat spędziłem pracując nad rozwojem technologii Eclipse postanowiłem zacząć od tej tematyki.<span class="fullpost"> <br /><br />Temat dzisiejszy to integracja oprogramowania w modelu OSGi. Oczywiście nie będę tutaj opisywał mechanizmu ponieważ jest to bezcelowe. Istnieje setka tutoriali która wyjaśnia co i jak działa. Tutoriale te jednak zazwyczaj kończą się na prostych przykładach a z perspektywy pracy nad projektami modularnymi wiem że to zdecydowanie za mało. To co w 90% jest błogosławieństwem, to w 10% jest problemem. Jednym z takich tematów jest mechanizm ukrywania API.<br /><br />Ukrywanie klas jest kluczowym aspektem opracowania dobrego API które będzie współpracowało przez lata z produktami rozwijanymi przez inne firmy. Dostawcy bibliotek określają które elementy kodu są publiczne a które prywatne. Co jednak gdy tworzymy zaawansowaną integrację systemów wykraczającą poza publiczne API? To ryzykowna sprawa jednak w realnych projektach czasami nieunikniona. W OSGi klasy z pakietów prywatnych są dla nas niedostępne... do czasu :)<br /><br />Przykładowym scenariuszem może być próba integracji własnych narzędzi z edytorem JBoss Drools IDE którą robiłem kilka lat temu. Biblioteka ta praktycznie wszystkie pakiety miała prywatne. Między innymi pakiet w którym znajduje się klasa edytora którą byłem zainteresowany jako potencjalnym komponentem w multi-edytorze. Jak się do niej dostać? Istnieją dwie metody: "studencka" i poprawna. <br /><br />Studencka polega na modyfikacji biblioteki i jak się każdy domyśla nie jest to najlepsze rozwiązanie (nawet jeżeli pozwala na to licencja). Zmodyfikowana biblioteka trafia na nasze serwery więc na nas spoczywa odpowiedzialność za jej dalsze uaktualnienia, zgłoszenia błędów etc. Znacznie podnosi to koszty utrzymania takiego rozwiązania. Dodatkowo coraz więcej bibliotek jest podpisanych certyfikatami by wykluczyć nieautoryzowane modyfikacje. <br /><br />Jak więc poprawnie zaimplementować modyfikacje pliku Manifest.MF tak by nie modyfikować samego bundla? Odpowiedzią jest mechanizm 'fragments' platformy OSGi. Zazwyczaj służy on do dodawania plików z tłumaczeniami, bibliotek dla różnych systemów itp. Tym razem użyjemy go do naszego "włamania" i upublicznienia prywatnych pakietów. <br /><br />By całość zademonstrować przygotowałem <a href="http://sites.google.com/site/deepdiveinto/Home/PrivatePackage.zip?attredirects=0&d=1">następujący przykład</a>. Firma 'Private Library Company' dostarczyła nam bundla w którym między innymi znajduje się klasa potrafiąca zwrócić nam cały świat :) Niestety klasa znajduje się w pakiecie wewnętrznym który nie jest udostępniony w manifeście.<br /></span><span class="fullpost"><br /><table><tbody><tr><td><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_-Hz5kL7u4E4/TAd1o1BFKkI/AAAAAAAAA8I/5sqAJFkFRYU/s1600/world.jpg"><img style="cursor:pointer; cursor:hand;width: 320px; height: 137px;" src="http://2.bp.blogspot.com/_-Hz5kL7u4E4/TAd1o1BFKkI/AAAAAAAAA8I/5sqAJFkFRYU/s320/world.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5478476816006326850" /></a></td><td><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_-Hz5kL7u4E4/TAd2NWikEdI/AAAAAAAAA8Q/by_ZVvR6GmM/s1600/world_manifest.jpg"><img style="cursor:pointer; cursor:hand;width: 320px; height: 87px;" src="http://3.bp.blogspot.com/_-Hz5kL7u4E4/TAd2NWikEdI/AAAAAAAAA8Q/by_ZVvR6GmM/s320/world_manifest.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5478477443480424914" /></a></td></tr></tbody></table></span><span class="fullpost"><br />Nasza firma 'Client Plugin Company' przygotowuje aplikację dostaczającą usługę której zadaniem jest pozdrowienie całego świata. Musimy więc dostać się do klasy która potrafi zwrócić nam 'świat'. Posiadamy oczywiście zależność na bibliotekę jednak nie jest to wystarczające. Kod nie będzie działał ponieważ klasa 'World' nie jest widoczna. <br /><br /><table><tbody><tr><td><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_-Hz5kL7u4E4/TAd3inZO6zI/AAAAAAAAA8Y/06K7R2s5EOI/s1600/hello.jpg"><img style="cursor:pointer; cursor:hand;width: 320px; height: 241px;" src="http://2.bp.blogspot.com/_-Hz5kL7u4E4/TAd3inZO6zI/AAAAAAAAA8Y/06K7R2s5EOI/s320/hello.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5478478908293573426" /></a></td><td><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_-Hz5kL7u4E4/TAd389-Lq3I/AAAAAAAAA8g/CjCtBMbbW9M/s1600/hello_manifest.jpg"><img style="cursor:pointer; cursor:hand;width: 320px; height: 102px;" src="http://4.bp.blogspot.com/_-Hz5kL7u4E4/TAd389-Lq3I/AAAAAAAAA8g/CjCtBMbbW9M/s320/hello_manifest.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5478479361030728562" /></a></td></tr></tbody></table><br />By to zmienić musimy przygotować odpowiednie rozszerzenie dla posiadanej biblioteki. Wykorzystamy w tym przypadku mechanizm fragmentów bundli. Z założenia mechanizm ten nie może modyfikować elementów, dostarczać nowego API jednak do naszego "włamania" nadaje się jak najbardziej. Tworzymy projekt fragmentu rozszerzający bundle biblioteki, możemy go nazwać 'privatelibrary.customization'. Następnie tworzymy w nim ścieżkę identyczną z tą którą chcemy upublicznić i zakładamy w niej pustą klasę np. o nazwie 'PackagePublisher'. Po utworzeniu klasy pojawia nam się możliwość upublicznienia jej pakietu w manifeście fragmentu. Platforma OSGi by obsłużyć naszą publiczną klasę dodaje 'regułę publiczności' dla wybranego pakietu dla nadrzędnej biblioteki. <br /><br />Tym samym w projekcie klienckim uzyskujemy dostęp do interesującej nas klasy prywatnej 'World'. By całość działała nasz dodatek musi być dostępny dla platformy. Jeżeli go usuniemy całość ponownie przestanie się kompilować a jeżeli element będzie niedostępny w ramach runtime pojawi się wyjątek ClassNotFound przy próbie odwołania się do klasy świata. Oczywiście nasza klasa 'PackagePublisher' którą upubliczniliśmy w tym pakiecie nie jest publicznie dostępna. Nie zezwala na to kontrakt mechanizmu fragmentów. Poniżej zrzut z poprawnie zdefiniowanego manifestu.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_-Hz5kL7u4E4/TAd-TuiRSiI/AAAAAAAAA8o/y2Uwrt8DXx8/s1600/customization_manifest.jpg"><img style="cursor:pointer; cursor:hand;width: 320px; height: 86px;" src="http://1.bp.blogspot.com/_-Hz5kL7u4E4/TAd-TuiRSiI/AAAAAAAAA8o/y2Uwrt8DXx8/s320/customization_manifest.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5478486349093882402" /></a><br /><br />Mam nadzieję że całość nie jest zbyt zagmatwana. Starałem się zrobić na tyle długi wstęp by całość wyjaśnić łącznie ze scenariuszem kiedy takie obejścia stosujemy. Oczywiście nie nakłaniam nikogo do odwoływania się do klas prywatnych w zewnętrznych bibliotekach. Takie sytuacje nigdy nie powinny być rutyną. Jeżeli jednak jest to koniczne z punktu widzenia biznesu warto wiedzieć jak to zrobić poprawnie. Gotowy projekt dostępny jest pod adresem: <br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://sites.google.com/site/deepdiveinto/Home/PrivatePackage.zip?attredirects=0&d=1"><img style="cursor:pointer; cursor:hand;width: 32px; height: 32px;" src="http://4.bp.blogspot.com/_-Hz5kL7u4E4/TAeHMRXVqbI/AAAAAAAAA9I/qOpt7YngnwU/s320/disk.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5478496116608969138" />http://sites.google.com/site/deepdiveinto/Home/PrivatePackage.zip?attredirects=0&d=1</a><br /><br /><small>Obrazek z wróżką pochodzi z prezentacji: <a href="http://www.slideshare.net/caniszczyk/osgi-best-and-worst-practices">OSGi Best and Worst Practices</a><br />Jak zawsze zachęcam także każdego do wypróbowania dodatku <a href="https://chrome.google.com/extensions/detail/jgjakgajhhmplimegbmiimpkbmmmjckh">Facebook Like Plus</a></small></span>Grzegorz Białekhttp://www.blogger.com/profile/14791618001989899083noreply@blogger.com0tag:blogger.com,1999:blog-7260523444214626147.post-9645464407332697882010-03-03T14:38:00.004+01:002010-08-22T18:12:14.489+02:00OSGI and EquinoxWłaśnie dostałem długo oczekiwaną przesyłkę. Książka miała pojawić się jeszcze w ubiegłym roku ale w końcu jest :)<br /><br />Autorem książki jest lider projektu Eclipse Equinox. To chyba najlepsza reklama dla każdego zajmującego się tematyką OSGi/Eclipse. Pełną recenzję możecie znaleźć w tutaj:<span class="fullpost"><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_-Hz5kL7u4E4/S45no4Wmd1I/AAAAAAAAA3k/v5AI9KbLt1E/s1600-h/20100303344.jpg"><img style="cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_-Hz5kL7u4E4/S45no4Wmd1I/AAAAAAAAA3k/v5AI9KbLt1E/s320/20100303344.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5444402951557117778" /></a><br /> <br /><a href="http://java.dzone.com/reviews/osgi-and-equinox-creating">OSGi and Equinox: Creating Highly Modular Java Systems</a><br /></span>Grzegorz Białekhttp://www.blogger.com/profile/14791618001989899083noreply@blogger.com4tag:blogger.com,1999:blog-7260523444214626147.post-66118450302388082212009-11-17T11:59:00.008+01:002009-11-17T12:17:04.816+01:00Eclipse Demo Camp we Wrocławiu (edycja druga)Już za kilka dni odbędzie się druga wrocławska edycja Eclipse Demo Camp. <br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_-Hz5kL7u4E4/SwKDGUul3qI/AAAAAAAAAyc/EkQDw8JPWdA/s1600/eclipse-logo-white.jpg"><img style="cursor:pointer; cursor:hand;width: 309px; height: 180px;" src="http://3.bp.blogspot.com/_-Hz5kL7u4E4/SwKDGUul3qI/AAAAAAAAAyc/EkQDw8JPWdA/s320/eclipse-logo-white.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5405026647464599202" /></a><br /><br />Interesujesz się środowiskiem Eclipse? Chciałbyś się dowiedzieć jak wykorzystać Eclipse nie tylko do programowania w Javie? Zapraszamy na spotkanie użytkowników i deweloperów środowiska Eclipse.<br /><br /><span style="font-weight:bold;">Eclipse DemoCamp Wrocław 2009!</span><br /><br /><ul><li><span style="font-weight:bold;">Jacek Pospychała</span>, JavaScript, AJAX w Eclipse</li><br /><li><span style="font-weight:bold;">Jacek Laskowsk</span>i, Enterprise JavaBeans (EJB) na OSGi</li><br /><li><span style="font-weight:bold;">Krzysztof Kowalczyk</span>, Transformacje Model-Model i Model-Text z wykorzystaniem technologii Eclipse</li><br /><li><span style="font-weight:bold;">Grzegorz Białek</span>, Tworzenie narzędzi w środowisku Eclipse (podstawy i nie tylko)</li></ul><br /><br /><span style="font-weight:bold;">Rejestracja możliwa jest pod adresem</span>:<br /><a href="http://oiola.com/e/496-druga-wroclawska-edycja-eclipse-demo-camp/">http://oiola.com/e/496-druga-wroclawska-edycja-eclipse-demo-camp/</a><br /><br /><br />Więcej informacji o prezentacjach oraz prowadzących można znaleźć pod adresem: <a href="http://wiki.eclipse.org/Eclipse_DemoCamps_November_2009/Wroclaw">http://wiki.eclipse.org/Eclipse_DemoCamps_November_2009/Wroclaw</a><br /><br />Spotkanie odbędzie się <span style="font-weight:bold;">w sobotę 21 listopada 2009</span> w budynku firmy Sygnity (ul. Strzegomska 140. Sponsorem głównym została forma PB Polsoft<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_-Hz5kL7u4E4/SwKDY20BU5I/AAAAAAAAAyk/iAiFoPsgVKI/s1600/200px-Polsoft_logo.jpg"><img style="cursor:pointer; cursor:hand;width: 200px; height: 128px;" src="http://1.bp.blogspot.com/_-Hz5kL7u4E4/SwKDY20BU5I/AAAAAAAAAyk/iAiFoPsgVKI/s320/200px-Polsoft_logo.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5405026965851820946" /></a><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_-Hz5kL7u4E4/SwKDeE2djTI/AAAAAAAAAys/OUpkxfa5b7I/s1600/Sygnity_logo.jpg"><img style="cursor:pointer; cursor:hand;width: 320px; height: 133px;" src="http://2.bp.blogspot.com/_-Hz5kL7u4E4/SwKDeE2djTI/AAAAAAAAAys/OUpkxfa5b7I/s320/Sygnity_logo.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5405027055519501618" /></a><br /><br /><br />Zdjęcia oraz podsumowanie pierwszej wrocławskiej edycji Eclipse Demo Camp można znaleźć tutaj tu: <a href="http://deepdiveinto.blogspot.com/2008/11/pierwsza-edycja-eclipse-democamp-we.html">http://deepdiveinto.blogspot.com/2008/11/pierwsza-edycja-eclipse-democamp-we.html</a>Grzegorz Białekhttp://www.blogger.com/profile/14791618001989899083noreply@blogger.com0tag:blogger.com,1999:blog-7260523444214626147.post-2214065928529068652009-07-15T21:17:00.005+02:002009-07-15T22:58:05.568+02:00Tekstowe języki specjalizowane – prezentacjaOd pewnego czasu staram się promować na blogu idee <a href="http://deepdiveinto.blogspot.com/2009/01/tekstowe-jzyki-specjalizowane.html">tekstowych języków specjalizowanych</a> a dokładnie technologię <a href="http://www.eclipse.org/Xtext/">xText</a>. Nie mogę więc nie wspomnieć o bardzo ciekawej webowej prezentacji jaka zakończyła się dosłownie kilka minut temu. Polecam ją każdemu, niezależnie od tego czy zajmuje się technologiami modelowania czy dopiero planuje się nimi zainteresować. <br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://live.eclipse.org/node/705"><img style="cursor:pointer; cursor:hand;width: 320px; height: 239px;" src="http://4.bp.blogspot.com/_-Hz5kL7u4E4/Sl47RiJhleI/AAAAAAAAAl4/QvAOyopmtrE/s320/xtext.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5358785779028039138" /></a><br /><br />Podczas prezentacji oprócz naprawdę fajnego demka z szachami wyjaśniona została także architektura samego projektu. Przyznam że bardzo podoba mi się zastosowanie <a href="http://code.google.com/p/google-guice/">Google Guice</a> jako sposobu na kastomizację generatów. Łączenie kodu generowanego z ręcznie pisanym zawsze stanowiło duży problem w projektach o większym stopniu złożoności niezależnie od zastosowanego podejścia. Zwykle kończyło się to albo dziesiątkami metod 'generated NOT' albo było skrajnie niewygodne jak modyfikacje w 'GMFGen' lub 'zastępowanie szablonów'. Szczególnie problem widoczny jest właśnie w przypadku biblioteki GMF która generuje naprawdę złożony kod który należy w dużej mierze zmodyfikować. Zastosowanie technologii Guice pozwala na znaczne rozluźnienie relacji pomiędzy poszczególnymi fragmentami budowanego edytora co znacznie upraszcza proces jego kastomizacji.<br /><br />Bardzo ciekawy jest także dalszy kierunek rozwoju. Tematem przewodnim jest budowanie złożonych projektów opartych o wiele współpracujących modeli czyli koncepcja budowy <a href="http://www.eclipse.org/proposals/emf-index/">indeksu modeli</a> (instancji) w ramach środowiska. Rejestr modeli to jedno z pierwszych zadań jakie musi wykonać każdy projektant tworzący IDE. Ponieważ użytkownicy będą tworzyli dziesiątki lub setki instancji modeli w ramach projektu indeksowanie jest konieczne by wzajemnie się one widziały i możliwe były akcje typu wyszukanie czy refaktoring. Ustandaryzowanie tego typu mechanizmów może być kamieniem milowym w kierunku uniwersalnych mechanizmów refaktoringu (połączenie koncepcji index + compare)<br /><br />Drugim tematem jest budowa tzw. języka bazowego dla reprezentacji wyrażeń. W każdym środowisku tworzymy lub wykorzystujemy jakiś istniejący język wyrażeń by wiązać poszczególne elementy modelu, reprezentować warunki etc. Czy jest to popularny XPATH, kolejna mutacja OCL czy cokolwiek innego mocno zależy to od wymagań tworzonego środowiska. Uproszczenie tego tematu wydaje się być atrakcyjne ale nie jestem pewien czy jest ono konieczne. Mamy już kilka modeli wyrażeń a pomimo tego każdy i tak tworzy własny by najlepiej odpowiadał potrzebom danego systemu. Nie do końca jestem przekonany czy powstanie kolejnego języka (bazowego?) cokolwiek wniesie do tematu. Przyznam że bardziej wolałbym gdyby połączono i dopracowano istniejące języki tak by powstała jedna składnia OCL’a, pojedyncza wersja XPAND’a etc. Możliwe jednak że źle rozumiem kierunek tego podprojektu. Czas więc poszukać dodatkowych informacji co i jak.<br /><br />XText bez wątpienia wprowadza do środowiska Eclipse co najmniej tak dużo nowych możliwości jak kilka lat temu zrobił to GMF. Gdy tylko skończę czytać kupioną niedawno <a href="http://www.amazon.com/Eclipse-Modeling-Project-Domain-Specific-Language/dp/0321534077">książkę o GMF</a> biorę się za naukę. Mam nadzieję że analiza tego projektu pozwoli mi rozwiązać także problemy w moim własnym projekcie (koncepcja zastosowania Guice etc.)Grzegorz Białekhttp://www.blogger.com/profile/14791618001989899083noreply@blogger.com4tag:blogger.com,1999:blog-7260523444214626147.post-7740796698290907732009-07-08T21:47:00.003+02:002009-07-09T07:45:21.833+02:008 lat w Java, 5 lat z Eclipse, 2 lata blogowania…To straszne jak ten czas szybko płynie. Osiem lat temu w lipcu rozpoczynałem swoją pierwszą pracę. Język Java wydawał mi się wtedy totalnym nieporozumieniem. Borland JBuilder 4 nie dość że nie potrafił poprawnie zatrzymywać się na wszystkich break pointach to dodatkowo działał nieprawdopodobnie wolno na procesorach 300MHz :)<br /><br />Z czasem bardzo polubiłem prostotę Javy jednak prawdziwym przełomem było pojawienie się środowiska Eclipse 2.1. Hierarchia wywołań metod, refaktoring, natywny wygląd i niewiarygodna szybkość porównywalna praktycznie z VisualStudio... to była rewolucja. Dzięki książkom '<a href="http://www.manning.com/gallardo/">Eclipse In Action</a>' oraz '<a href="http://www.amazon.com/Contributing-Eclipse-Principles-Patterns-Plug-Ins/dp/0321205758">Contributing to Eclipse</a>' dowiedziałem się ponadto że można łatwo samemu robić dodatki do tego środowiska. To było wielkie odkrycie. Możliwe stało się coś co wydawało się być wcześniej zarezerwowane dla programistów wielkich zachodnich firm. Trochę ponad rok później miałem gotowe pierwsze narzędzia do modelowanie procesów sterowania centralami cyfrowymi zbudowane z wykorzystaniem biblioteki <a href="http://www.eclipse.org/gef/">GEF</a> (Graphical Editing Framework). To był początek wielkiej przygody.<br /><br />Dwa lata temu postanowiłem założyć bloga. Celem jaki sobie postawiłem to zainteresować większą ilość osób tematyką Eclipse, a w szczególności ideą tworzeniu narzędzi specjalizowanych <a href="http://deepdiveinto.blogspot.com/search/label/dsl">DSL</a> (języków specyficznych dla rozwiązywanego problemu). Początki były naprawdę <a href="http://deepdiveinto.blogspot.com/2008/07/7-4-1-start.html">trudne</a>, jednak miniony rok okazał się zdecydowanie lepszy. Głównie dzięki pomocy wielu osób związanych z grupami użytkowników języka Java (JUG) oraz serii konferencji <a href="http://wiki.eclipse.org/Regional_Communities/Poland">Eclipse DemoCamp</a> (między innymi organizacji <a href="http://deepdiveinto.blogspot.com/2008/11/pierwsza-edycja-eclipse-democamp-we.html">pierwszej edycji wrocławskiej</a>). Liczba odwiedzających ten adres zdecydowanie się zwiększyła co jest bardzo miłe.<br /><br />W tym roku udało mi się także zdobyć licencję <a href="http://www.padi.com/">PADI Open Water Diver</a> co w kontekście nazwy tego bloga ma kluczowe znaczenie. Sam egzamin przy zatoce znanej z filmu 'Niebiańska plaża' pozostanie jednym z najpiękniejszych wspomnień, podobnie jak cała <a href="http://deepdiveinto.blogspot.com/search/label/wyprawa">wyprawa</a> do Tajlandii. Mam nadzieję że kolejnym krokiem będzie nauka robienia zdjęć podwodnych. W tematyce programowania natomiast zabieram się za naukę technologii <a href="http://www.eclipse.org/Xtext/">xText</a>. Jest to bez wątpienia jeden z najbardziej innowacyjnych projektów na jaki trafiłem. We wrześniu planuję także zakup książki o <a href="http://www.amazon.com/Equinox-OSGi-Power-Behind-Eclipse/dp/0321585712/">Equinox</a> która bez wątpienia będzie hitem biorąc pod uwagę coraz większą popularyzację OSGi także po stronie oprogramowania serwerowego...<br /><br />To był wyjątkowo udany rok. Mam nadzieję że kolejny będzie jeszcze ciekawszy.Grzegorz Białekhttp://www.blogger.com/profile/14791618001989899083noreply@blogger.com0tag:blogger.com,1999:blog-7260523444214626147.post-27805151816855761882009-06-25T23:40:00.001+02:002009-06-25T23:47:46.091+02:00Formatowanie plików JavaScript w generatorze XPANDMechanizm szablonów XPAND jest moim ulubionym generatorem kodu. Jest nieprawdopodobnie wygodny i posiada wiele unikalnych cech które naprawdę ułatwiają pracę. Tematem tego wpisu (tutoriala) będą tzw. upiększacze kodu. <br /><br />W generatorze XPAND domyślnie mamy dwa takie upiększacze: JavaBeautifier oraz XmlBeautifier. Jeżeli generujemy kod w jednej z obsługiwanych notacji dzięki dodaniu tych klas do procesu mamy pięknie sformatowany i czytelny kod wynikowy. Co jednak jeżeli generujemy kod JavaScript gdy budujemy aplikację webową? Cóż wynik nie jest najciekawszy. Praktycznie wygenerowanie czytelnego kodu graniczy z cudem i wymaga tworzenie naprawdę nieczytelnych szablonów które symulują częściowo formatowanie wynikowe co stanowi wyjątkowo brzydki anty-wzorzec. Koszmar którego nawet nie będę prezentował.<br /><br />Dlaczego nie ma domyślnie klasy formatującej JavaScript w pakiecie XPAND? Odpowiedzią jest oczywiście nieskończona ilość generowanych notacji. Spróbujmy więc czy napisanie klasy pomocniczej dla JavaScript jest trudne.<br /><br />Od czego zacząć? Myślę że powinniśmy postępować zgodnie z metodologią "Monkey see/Monkey do" zaprezentowaną kilka lat temu przez <a href="http://en.wikipedia.org/wiki/Erich_Gamma">Ericha Gammę</a> w książce <a href="http://www.amazon.com/Contributing-Eclipse-Principles-Patterns-Plug-Ins/dp/0321205758">"Contributing to Eclipse"</a>. Co kryje się pod tym tajemniczym sformułowaniem? Prosta zasada "zobacz jak robią to inni, skopiuj i dostosuj rozwiązanie do swoich potrzeb".<br /> <br />Zobaczmy więc jak działa klasa JavaBeautifier. Otwieramy sobie jej źródło i wszystko staje się jasne. Klasa ta implementuje interfejs <span style="font-weight:bold;">PostProcessor</span> z metodą: <span style="font-weight:bold;">beforeWriteAndClose(FileHandle fileHandle)</span> odpowiedzialną za formatowanie kodu. Sam proces formatowania przekazywany jest do mechanizmów JDT wykorzystując klasę: <span style="font-weight:bold;">org.eclipse.jdt.core.formatter.CodeFormatter</span>;<br /><br />Cały process wygląda mniej więcej następująco:<br /><br /><span style="font-style:italic;">beforeWriteAndClose(final FileHandle fileHandle){<br /> jeżeli rozszerzenie == 'java' to:<br /> Document doc = new Document(fileHandle.getBuffer().toString());<br /> TextEdit edit = getCodeFormatter().format(<br /> CodeFormatter.K_COMPILATION_UNIT, doc.get(), 0, doc.get().length(), 0, null);<br /> edit.apply(doc);<br /> fileHandle.setBuffer(new StringBuffer(doc.get()));<br />}</span><br /><br /><span style="font-style:italic;">CodeFormatter getCodeFormatter() {<br /> inicjacja opcji na podstawie ustawień formatowania <br /> return ToolFactory.createCodeFormatter(options);<br />}</span><br /><br />Jak widać całość opiera się o gotowe mechanizmy formatujące. Ponieważ identyczne możliwości formatowania kodu zostały zaimplementowane także w WTP dla edytora JavaScript wykorzystanie tego podejścia nie wydaje się być problemem. Jak jednak znaleźć odpowiedni kod w środowisku złożonym z grubo ponad tysiąca projektów jeżeli nie wiemy gdzie mechanizmy te zostały zaimplementowane? Wykorzystamy mechanizm Plugin Spy pokazujący nam informacje o praktycznie dowolnym elemencie środowiska. Otwieramy edytor JavaScript dostarczany z pakietem WTP, <span style="font-weight:bold;">ALT+SHIFT+F1</span> i pojawia nam się następująca informacja:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_-Hz5kL7u4E4/SkPasmjDgEI/AAAAAAAAAjk/VTEpMiJR-iQ/s1600-h/javascript.jpg"><img style="cursor:pointer; cursor:hand;width: 136px; height: 200px;" src="http://3.bp.blogspot.com/_-Hz5kL7u4E4/SkPasmjDgEI/AAAAAAAAAjk/VTEpMiJR-iQ/s200/javascript.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5351361242042957890" /></a><br /><br />Skoro wiemy już że edytor ten został dostarczony przez plugin WST.JSDT wgrywamy go do naszego workspace. W tym celu wykorzystujemy kreator:<br /> <br />Plug-in Development|Plug-ins and Fragments|Binary Project with linked content|filtr *wst.jstd i ściągamy podejrzane projekty:<br /><br /><span style="font-weight:bold;">org.eclipse.wst.jsdt.core<br />org.eclipse.wst.jsdt.core.ui</span><br /><br />Praktycznie od razu zauważamy pakiet <span style="font-weight:bold;">formatter</span> a w nim klasę w której znajduje się identyczny kod:<br /><br /><span style="font-weight:bold;">org.eclipse.wst.jsdt.core.formatter.CodeFormatterApplication</span><br /><br />Wywołanie mechanizmów formatujących JSDT wymagać będzie od nas zaledwie zmiany dwóch importów z JDT na JSDT oraz identyfikatora określającego formatowaną zawartość. Postępując z wzorcem małpki kopiujemy oryginalną zawartość klasy JavaBeautifer do nowej klasy o nazwie JavaScriptBeautifier. Następnie modyfikujemy importy:<br /><br /><span style="font-style:italic;">//import org.eclipse.jdt.core.ToolFactory;<br />//import org.eclipse.jdt.core.formatter.CodeFormatter;<br />import org.eclipse.wst.jsdt.core.ToolFactory;<br />import org.eclipse.wst.jsdt.core.formatter.CodeFormatter;</span><br /><br />sprawdzane rozszerzenie pliku oraz identyfikator:<br /><br /><span style="font-style:italic;">//getCodeFormatter().format(CodeFormatter.K_COMPILATION_UNIT,..<br />getCodeFormatter().format(CodeFormatter.K_JAVASCRIPT_UNIT,...</span><br /><br />Klasa upiększająca kod JavaScript jest gotowa. Ostatnim elementem jest ustalenie konfiguracji w jaki sposób kod powinien się formatować. W tym celu korzystając z kreatora tworzymy właściwy dla naszych projektów sposób formatowania (najlepiej zwiększyć długość linii z 80 do 140...160 co jest moim zdaniem optymalne dla kodu generowanego)<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_-Hz5kL7u4E4/SkPiaAGveeI/AAAAAAAAAjs/E6SPdjuVSig/s1600-h/javascript_config.jpg"><img style="cursor:pointer; cursor:hand;width: 200px; height: 142px;" src="http://1.bp.blogspot.com/_-Hz5kL7u4E4/SkPiaAGveeI/AAAAAAAAAjs/E6SPdjuVSig/s200/javascript_config.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5351369718579034594" /></a><br /> <br />Ustawienia te zostaną zapisane w pliku:<br /><span style="font-style:italic;">[workspace].metadata\.plugins\org.eclipse.core.runtime\.settings\ org.eclipse.wst.jsdt.core.prefs</span><br /><br />Kopiujemy plik konfiguracyjny do naszego projektu w którym wykorzystujemy nasz formater i gotowe. Całość zabrała nam zaledwie kilka minut (napisanie tego tutoriala trochę więcej). <br /><br />Mam nadzieję że komuś taka klasa się przyda. W czasach absolutnej dominacji aplikacji webowych, technologii Ajax, przeglądarki Google Chrome etc. coraz częściej generujemy kod JavaScript a nic tak nie cieszy jak kod czytelny i dobrze sformatowany :)Grzegorz Białekhttp://www.blogger.com/profile/14791618001989899083noreply@blogger.com0tag:blogger.com,1999:blog-7260523444214626147.post-56200583224360083452009-05-19T22:03:00.011+02:002009-05-19T23:24:35.908+02:00Wykłady, wykłady, wykłady…Korzystając z zaproszenia <a href="http://www.e-informatyka.pl/sens/Wiki.jsp?page=LechMadeyski">dr inż. Lecha Madeyskiego</a> miałem dziś okazję przeprowadzić wykład dla studentów politechniki Wrocławskiej. Tematem było tworzenie narzędzi na bazie platformy Eclipse. Ponieważ chciałem zaprezentować słuchaczom tematykę jak najszerzej zdecydowałem się na prawdziwy maraton. Postanowiłem przedstawić przekrój przez zagadnienie od konfiguracji środowiska i struktury prostego pluginu po zbudowanie zestawu współpracujących edytorów (strukturalny, graficzny i tekstowy). <br /><br />Jako problem postawiony przed tworzonymi narzędziami wykorzystałem koncepcje przedstawione na ostatnim spotkaniu <a href="http://groups.google.com/group/wroclaw-jug">Wrocławskiej Grupy Użytkowników Java</a>, tzn. <a href="http://camel.apache.org/enterprise-integration-patterns.html">ServiceMix/Apache Camel</a>. Środowisko Apache Camel wykorzystywane jest do zarządzania przepływem wiadomości. Przepływ taki składa się z wielu wzajemnie połączonych elementów realizujących poszczególne etapy zadania. Jednym z kluczowych elementów jest <a href="http://camel.apache.org/message-router.html">router operujący na zawartości</a>. Wynikowy plik konfiguracyjny silnika wymaga informacji o przepływie oraz podejmowanych decyzjach (z odwołaniem do struktury wiadomości). Tym samym jest to idealny przykład by zaprezentować koncepcje budowy zestawu narzędzi.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_-Hz5kL7u4E4/ShMS9KnyvRI/AAAAAAAAAhk/fB5Fm9ztMlA/s1600-h/MessageRouter.gif"><img style="cursor:pointer; cursor:hand;width: 320px; height: 94px;" src="http://4.bp.blogspot.com/_-Hz5kL7u4E4/ShMS9KnyvRI/AAAAAAAAAhk/fB5Fm9ztMlA/s320/MessageRouter.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5337630825396747538" /></a><br /><br />Podczas prezentacji zbudowaliśmy uproszczony model logiczny takich przepływów. Na jego bazie utworzyliśmy edytor graficzny umożliwiający łączenie na diagramie abstrakcyjnych elementów. Ponieważ notacja graficzna nie nadaje się do definiowania reguł podejmowania decyzji utworzyliśmy dodatkowo specjalizowany edytor tekstowy. Edytor ten umożliwił nam zdefiniowanie zestawu reguł wraz z warunkami. By warunki mogły operować na realnych polach zdefiniowanych w opisie struktury wiadomości (zamiast prostych łańcuchów tekstowych) zintegrowaliśmy całość z edytorem diagramów klas UML. Tym samym udało się poruszyć wszystkie ważne aspekty budowy narzędzi:<br /><ul><li>dostosowanie narzędzi do problemu</li><li>notacje strukturalne, graficzne, tekstowe</li><li>walidacje poprawności, podpowiedzi etc.</li><li>integrację z istniejącymi narzędziami</li></ul><br /><br /><table><tr><td><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_-Hz5kL7u4E4/ShMb3nGJ8nI/AAAAAAAAAhs/YdLXSTyGnDQ/s1600-h/flow.jpg"><img style="cursor:pointer; cursor:hand;width: 200px; height: 160px;" src="http://1.bp.blogspot.com/_-Hz5kL7u4E4/ShMb3nGJ8nI/AAAAAAAAAhs/YdLXSTyGnDQ/s200/flow.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5337640625565725298" /></a></td><td><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_-Hz5kL7u4E4/ShMcC4XMPFI/AAAAAAAAAh0/fWXKzYTN0go/s1600-h/regula.jpg"><img style="cursor:pointer; cursor:hand;width: 200px; height: 160px;" src="http://1.bp.blogspot.com/_-Hz5kL7u4E4/ShMcC4XMPFI/AAAAAAAAAh0/fWXKzYTN0go/s200/regula.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5337640819179142226" /></a></td><td><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_-Hz5kL7u4E4/ShMcKJTljnI/AAAAAAAAAh8/boILwbOA_Lc/s1600-h/model.jpg"><img style="cursor:pointer; cursor:hand;width: 200px; height: 160px;" src="http://3.bp.blogspot.com/_-Hz5kL7u4E4/ShMcKJTljnI/AAAAAAAAAh8/boILwbOA_Lc/s200/model.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5337640943986511474" /></a></td></tr></table><br /><br />Całość wykładu zaplanowałem na 1h demo plus 30min teorii. Niestety wykonanie demonstracji krok po kroku okazało się w tak krótkim czasie bardzo trudne więc część elementów wytłumaczyłem na bazie przygotowanych wcześniej plików. Myślę że takie podejście jest bardziej realistyczne ponieważ czas tracony na pisanie kodu od podstaw można lepiej poświęcić na dokładniejsze wytłumaczenie co, jak i dlaczego. Myślę że doświadczenie to wykorzystam podczas kolejnej prezentacji która odbędzie się już za tydzień w ramach spotkań <a href="http://groups.google.com/group/wroclaw-jug">Wrocław JUG</a>. Mam nadzieję że uda się całość skrócić do 1h. <br /><br />Oczywiście zapraszam wszystkich zainteresowanych w imieniu swoim oraz całego Wrocław JUG:<br /><br /><span style="font-weight:bold;">Czwarte spotkanie Wrocławskiej Grupy Użytkowników Technologii Java:<br />"Tworzenie własnych narzędzi na platformie Eclipse"</span><br /> <br />26 maja 2009 o godzinie 18:30.<br />Instytut Informatyki Uniwersytetu Wrocławskiego, <br />Sala wykładowa Kameralna Wschodnia nr 119, I piętro.Grzegorz Białekhttp://www.blogger.com/profile/14791618001989899083noreply@blogger.com1tag:blogger.com,1999:blog-7260523444214626147.post-25418786420123328472009-03-08T18:15:00.004+01:002009-03-08T18:29:38.701+01:00Wrocławska Grupa Użytkowników JavaSkoro już znalazłem czas na aktualizację bloga nie mogę nie wspomnieć o pewnym ważnym wydarzeniu, które miało niedawno miejsce we Wrocławiu. Pod koniec lutego powstała Wrocławska Grupa Użytkowników Java, czyli w skrócie Wrocław JUG. Poniżej kilka ważnych linków:<br /><br /><a href="http://groups.google.com/group/wroclaw-jug">Grupa dyskusyjna Wrocław JUG</a><br /><a href="http://www.linkedin.com/groups?about=&gid=1789506">Profil JUG'a na LinkedIn</a><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://groups.google.com/group/wroclaw-jug"><img style="cursor:pointer; cursor:hand;width: 111px; height: 200px;" src="http://3.bp.blogspot.com/_-Hz5kL7u4E4/SbQATROLnXI/AAAAAAAAAeI/aY02JKeugbI/s200/wroclaw-jug-frame.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5310870191617056114" /></a>Grzegorz Białekhttp://www.blogger.com/profile/14791618001989899083noreply@blogger.com0tag:blogger.com,1999:blog-7260523444214626147.post-74441907493626545092009-03-08T17:00:00.006+01:002009-03-08T17:47:56.793+01:00Eclipse w bankowości - podsumowanieTrzy tygodnie temu odbyło się w Londynie spotkanie <a href="http://wiki.eclipse.org/EclipseBankingDayLondon">Eclipse Banking Day</a>. Miało ono na celu zebranie ludzi z firm deweloperskich, banków oraz innych instytucji finasowych tak by rozpocząć otwartą dyskusję na temat przyszłości rozwiązań budowanych na platformie Eclipse. Myślę że inicjatywa zakończyła się sukcesem.<br /> <br />A jak to wyglądało? Spotkanie rozpoczęło się od prezentacji koncepcji <a href="http://wiki.eclipse.org/E4">E4</a> czyli stworzenia Eclipse IDE jako aplikacji WWW. Raczej jestem sceptycznie nastawiony do idei tworzenia aplikacji WWW z tak złożonym interfejsem użytkownika. Bardzo podoba mi się za to idea włączenia biblioteki EMF jako składnika bazowego na poziom platformy oraz utworzenie modeli dla każdego aspektu budowy aplikacji. Application.ecore, Workbench.ecore... to będzie coś naprawdę wielkiego :) <br /><br />Następnie <a href="http://neilbartlett.name/blog/">Neil Bartlett</a> przedstawił wykład na temat warstwy usług deklaratywnych z OSGi. Podczas wykładu Neil wyjaśnił szczegółowo zagadnienia podziału OSGi na warstwy oraz opowiedział o wadach, zaletach poszczególnych implementacji Equinox DS, Spring DM, iPojo etc. <br />Technologia OSGi w ostatnich latach coraz bardziej się popularyzuje. I powinna! Choć od ponad pięciu lat tworzę rozwiązania bazowane na środowisku Eclipse przyznam że tylko w ostatnim projekcie (ostatnie trzy lata) staram się świadomie wykorzystywać możliwości modularyzacji. Wiem teraz że nic tak dobrze nie sprząta architektury aplikacji jak dobrze zaplanowana modularyzacja. Trzymam kciuki za sukces tematu także w świecie aplikacji JEE. Jeżeli ktoś jednak nie zetknął się jeszcze z tą tematyką koniecznie powinien przeczytać <a href="http://neilbartlett.name/blog/osgi-articles/">tutorial</a> przygotowany właśnie przez Neila lub <a href="http://neilbartlett.name/blog/osgibook/">aktualny szkic</a> jego książki. <br /><br />Kolejny wykład poprowadził <a href="http://blog.efftinge.de/">Sven Efftinge</a>, lider projektu <a href="http://wiki.eclipse.org/TMF">Eclipse TMF</a> (Textual Modeling Framework, xText) o którym wspominałem w poprzednim wpisie. To było to na co tak naprawdę czekałem. Możliwość zadania setki pytań na temat projektu, oraz innych zagadnień z dziedziny MDE to właśnie główny powód, dla którego warto uczestniczyć w tego typu spotkaniach nawet jeżeli odbywają się one na drugim końcu europy. <br /><br />Pozostałe wykłady dotyczyły specyficznych produktów dla sektora bankowego. Co dużo mówić królowały tutaj dwa tematy: raportowanie czyli <a href="http://www.eclipse.org/birt/phoenix/">BIRT</a> oraz modelowanie procesów bankowych na wszystkie możliwe sposoby. Przedstawiona została także koncepcja wspólnej platformy dla sektora bankowego, która to właśnie dyskutowana była do późnego wieczora. To bez wątpienia projekt, którym muszę się zainteresować. Spotkanie skończyło się późnym wieczorem przy winie :) To była doskonała okazja by poznać kilka ciekawych osób. <br /><br />A sam Londyn? Przepiękne miasto. Zrobiłem setkę zdjęć choć miałem na zwiedzanie zaledwie kilka godzin. Wybrałem kilka zdjęć i wrzuciłem na www.<br /><br /><table><tr><td><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://picasaweb.google.pl/deepdiveinto/EclipseBankingDayLondon"><img style="cursor:pointer; cursor:hand;width: 200px; height: 134px;" src="http://1.bp.blogspot.com/_-Hz5kL7u4E4/SbP0IScOi3I/AAAAAAAAAdQ/iXsryyAkSQQ/s200/Londyn1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5310856808826309490" /></a></td><td><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://picasaweb.google.pl/deepdiveinto/EclipseBankingDayLondon"><img style="cursor:pointer; cursor:hand;width: 200px; height: 134px;" src="http://4.bp.blogspot.com/_-Hz5kL7u4E4/SbP0QpQwyvI/AAAAAAAAAdY/1CRLcYQQQ08/s200/Londyn2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5310856952391191282" /></a></td><td><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://picasaweb.google.pl/deepdiveinto/EclipseBankingDayLondon"><img style="cursor:pointer; cursor:hand;width: 200px; height: 134px;" src="http://1.bp.blogspot.com/_-Hz5kL7u4E4/SbP0VztgfFI/AAAAAAAAAdg/UjWmBEQ12cE/s200/Londyn3.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5310857041095457874" /></a></td></tr></table>Grzegorz Białekhttp://www.blogger.com/profile/14791618001989899083noreply@blogger.com1tag:blogger.com,1999:blog-7260523444214626147.post-7332113741413549032009-02-02T19:35:00.003+01:002009-02-02T20:05:06.969+01:00Eclipse w bankowościJuż za tydzień odbędzie się w Londynie kolejne spotkanie poświęcone wykorzystaniu środowiska Eclipse jako bazy dla nowoczesnego oprogramowania dla bankowości. Oj będzie się działo. Projektanci i architekci z blisko 40 banków/instytucji finansowych oraz firm tworzących rozwiązania dla tego sektora, w sumie ponad 80 osób. Tematem przewodnim klasycznie będzie BIRT, DSL oraz OSGI. Pełna agenda spotkania znajduje się pod tym adresem:<br /><br /><a href="http://wiki.eclipse.org/EclipseBankingDayLondon">http://wiki.eclipse.org/EclipseBankingDayLondon</a><br /><br />Jeszcze nie zdecydowałem się do końca które prezentacje wybrać, to naprawdę trudna sprawa by z czegoś zrezygnować. Myślę jednak, że wybiorę tematy mi najbliższe czyli wszystkie mutacje modelowania czegokolwiek ze szczyptą BIRT’a jako przyprawą całości. Półtorej roku temu podczas ESE w Ludwigsburgu odkryłem oAW które naprawdę ułatwiło mi życie, mam nadzieję że i tym razem uda mi się wrócić z jakąś nową zdobyczą. Na pewno będą nią ciekawe znajomości :)Grzegorz Białekhttp://www.blogger.com/profile/14791618001989899083noreply@blogger.com0tag:blogger.com,1999:blog-7260523444214626147.post-19408811796807835432009-01-25T18:34:00.017+01:002009-01-25T22:50:34.973+01:00Tekstowe języki specjalizowanePrzez kilka ostatnich miesięcy nie miałem czasu by zaktualizować bloga. Ciągły brak czasu związany z pracą oraz planowaniem pewnej dalekiej wyprawy etc. (która niestety została odwołana). W tym czasie w świecie modelowania wydarzyło się naprawdę sporo. Gdyby to wszystko chcieć tutaj opisać to pewnie mój blog zmieniłby się w wielki spis treści z listą odnośników. Kilka jednak elementów zasługuje na wyróżnienie/przypomnienie. <br /><br />Bez wątpienia jednym z nich jest prezentacja <a href="http://blog.jaoo.dk/2008/10/07/the-future-of-programming-languages/">'Przyszłość języków programowania'</a> z konferencji <a href="http://blog.jaoo.dk/">JAOO</a> która odbyła się kilka miesięcy temu. Andres Hejlsberg, architekt z Microsoftu prezentuje jak języki zmieniały się w ostatnich latach oraz jakie stoją przed nimi kolejne wyzwania. Polecam prezentację ogląda się jak dobry film. Oczywiście szczególną uwagę warto zwrócić na zalety/cechy języków deklaratywnych/specjalizowanych :)<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.jaoo.dk/2008/10/07/the-future-of-programming-languages/"><img style="cursor:pointer; cursor:hand;width: 320px; height: 235px;" src="http://4.bp.blogspot.com/_-Hz5kL7u4E4/SXykBySma7I/AAAAAAAAAYs/r9FVjkslJUw/s320/cs.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5295287612467473330" /></a><br /><br />Skoro już jestem w klimatach MS nie mogę pominąć <a href="http://channel9.msdn.com/tags/pdc2008.oslo/">platformy Oslo</a> zaprezentowanej na PDC2008. Poniższe linki prowadzą do poszczególnych fragmentów prezentacji. Na mnie największe wrażenie zrobiła interaktywność narzędzia do <a href="http://channel9.msdn.com/pdc2008/TL31/">tworzenia gramatyk</a>, taki xText na sterydach. Trzeba jednak pamiętać że to tylko prezentacja wersji alfa i sporo czasu upłynie zanim rozwiązanie ujrzy światło dzienne. Pewnie także niektóre elementy ulegną zmianie inne pewnie zostaną dodane (brak mechanizmu generacji kodu). <br /><br /><table><tr><td><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://channel9.msdn.com/tags/pdc2008.oslo/"><img style="cursor:pointer; cursor:hand;width: 200px; height: 187px;" src="http://1.bp.blogspot.com/_-Hz5kL7u4E4/SXy6CHImZQI/AAAAAAAAAZE/P2EuuU5Kwlc/s200/oslo-wstep.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5295311807318484226" /></a></td><td><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://channel9.msdn.com/tags/pdc2008.oslo/"><img style="cursor:pointer; cursor:hand;width: 200px; height: 186px;" src="http://2.bp.blogspot.com/_-Hz5kL7u4E4/SXy6G7kkn9I/AAAAAAAAAZM/1HK4k48R9xU/s200/oslo+31.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5295311890113929170" /></a></td><td><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://channel9.msdn.com/tags/pdc2008.oslo/"><img style="cursor:pointer; cursor:hand;width: 200px; height: 186px;" src="http://2.bp.blogspot.com/_-Hz5kL7u4E4/SXy7D3-gx-I/AAAAAAAAAZU/nWnmS1pMzh8/s200/oslo.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5295312937121007586" /></a></td></tr></table><br /><br />Technologie te nie są oczywiście czymś zupełnie nowym. To raczej odpowiedź na dynamicznie rozwijający się rynek rozwiązań DSL bazowanych na platformie Eclipse Modeling. Większość elementów to wprost odpowiedniki technologii ze świata Eclipse: <a href="http://www.eclipse.org/modeling/emf/">EMF Ecore</a>, <a href="http://wiki.eclipse.org/Xtext">xText</a> etc. Nie zmniejsza to jednak wartości jaką wnosi tutaj Microsoft zarówno w warstwie technicznej (narzędzia interpretujące gramatykę w locie) jak i czysto marketingowej (szansa na większą popularyzację tematu). <br /><br />Przykładowo bezpośrednim odpowiednikiem MGrammar jest xText. Technologia ta powstała jako składnik oAW jednak w grudniu ubiegłego roku dostała oficjalnie włączona do platformy Eclipse Modeling jako baza dla modułu <a href="http://wiki.eclipse.org/TMF">TMF</a> (razem z <a href="http://wiki.eclipse.org/TCS">TCS</a>). Poniżej link do prezentacji xText z ubiegłorocznej konferencji <a href="http://qconlondon.com/london-2008/conference/">QCon2008</a> <br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.infoq.com/presentations/Textual-DSL-Markus-Voelter"><img style="cursor:pointer; cursor:hand;width: 320px; height: 243px;" src="http://1.bp.blogspot.com/_-Hz5kL7u4E4/SXzVMW_R6yI/AAAAAAAAAZk/xt8s0as2y6w/s320/xtext.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5295341670187002658" /></a><br /><br />No i na zakończenie w formie podsumowania wspólna dyskusja twórców obu rozwiązań. Czyli kolejny odcinek podcastu dla programistów SE-Radio<br /><br /><a href="http://www.se-radio.net/podcast/2009-01/episode-123-microsoft-oslo-don-box-and-doug-purdy">Episode 123: Microsoft OSLO with Don Box and Doug Purdy</a><br /><br />Rok 2009 zapowiada się naprawdę interesująco!Grzegorz Białekhttp://www.blogger.com/profile/14791618001989899083noreply@blogger.com1tag:blogger.com,1999:blog-7260523444214626147.post-57795996023170274052008-11-30T16:41:00.037+01:002008-12-02T08:37:47.884+01:00Pierwsza edycja Eclipse Demo Camp we Wrocławiu zakończona sukcesem!Pierwsza wrocławska edycja Eclipse Demo Camp już za nami! <br /><br />Bez wątpienia udało nam się osiągnąć sukces. Zaplanowaną maksymalną liczbę 30 uczestników przekroczyliśmy już po pierwszym dniu od rozpoczęcia rejestracji w systemie Oiola. Strona rejestracyjna pojawiła się we wtorek nocą a w środę już musieliśmy ją zablokować z obawy o ilość miejsc :)<br /><br />Czas na podziękowania :) Myślę że całość nie byłaby możliwa bez wsparcia <a href="http://www.eclipsesummerschool.com/">Jacka Pospychały</a> oraz <a href="http://grzegorzduda.blogspot.com/">Grześka Dudy</a>. Pomogli mi oni między innymi zorganizować odpowiednią reklamę tej imprezy bez której prawdopodobnie nikt by się o niej nie dowiedział. <a href="http://www.milewski.ws/">Łukasza Milewskiego</a> oraz ponownie Jacka którzy zdecydowali się poświęcić czas wolny i przyjechać do Wrocławia by opowiedzieć wam o Eclipse. Oraz oczywiście wszystkim osobom z <a href="http://www.sygnity.pl/">Sygnity</a> które pomogły mi w sprawach logistycznych, oraz zorganizowały finansowanie całości. A jak wyglądało samo spotkanie? <br /><br />Wystartowaliśmy z małym opóźnieniem ok. godziny 11.20. Pierwszy był Łukasz który zaprezentował jak wykorzystać platformę <a href="http://wiki.eclipse.org/index.php/Rich_Client_Platform">Eclipse RCP</a> jako podstawę dla własnej aplikacji desktopowej. Później przerwa na dyskusję (oraz oczywiście zjedzenie kanapek z... łososiem!). Po przerwie Jacek pokazał jak aplikację RCP przekształcić do postaci aplikacji webowej przy użyciu technologii <a href="http://www.eclipse.org/rap/">Eclipse RAP</a> (praktycznie bez zmian w kodzie - copy&paste). Spotkanie zakończyło się moim wykładem o <a href="http://www.eclipse.org/modeling/">Eclipse Modeling</a> i <a href="http://en.wikipedia.org/wiki/Domain-specific_programming_language">DSL</a>. Podobnie jak wcześniej w <a href="http://deepdiveinto.blogspot.com/2008/07/eclipse-democamps-2008-podsumowanie.html">Krakowie</a> postarałem się zrobić szybki przekrój przez całą rodzinę projektów na bazie której budujemy DSL'e (EMF/GMF/xTEXT/ANTLR etc). <br /><br />W trakcie prezentacji staraliśmy się robić demonstracje. Mam nadzieję że się one podobały (nawet jeżeli nie zawsze wszystko się udawało). Zdjęcia z imprezy można znaleźć pod tym adresem: <a href="http://picasaweb.google.pl/deepdiveinto/EclipseDemoCamp2008WrocAw">http://picasaweb.google.pl/deepdiveinto/EclipseDemoCamp2008WrocAw</a><br /><br /><table><tr><td><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://picasaweb.google.pl/deepdiveinto/EclipseDemoCamp2008WrocAw"><img style="cursor:pointer; cursor:hand;width: 200px; height: 134px;" src="http://4.bp.blogspot.com/_-Hz5kL7u4E4/STK5yehGpuI/AAAAAAAAAUw/O_tlQQXzEoY/s200/IMG_0450.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5274482390440781538" /></a></td><td><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://picasaweb.google.pl/deepdiveinto/EclipseDemoCamp2008WrocAw"><img style="cursor:pointer; cursor:hand;width: 200px; height: 134px;" src="http://2.bp.blogspot.com/_-Hz5kL7u4E4/STK5sG6RYaI/AAAAAAAAAUo/IuuJl7Obubk/s200/IMG_0455.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5274482281024676258" /></a></td><td><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://picasaweb.google.pl/deepdiveinto/EclipseDemoCamp2008WrocAw"><img style="cursor:pointer; cursor:hand;width: 200px; height: 134px;" src="http://1.bp.blogspot.com/_-Hz5kL7u4E4/STK5lxnJQmI/AAAAAAAAAUg/STdqb6iIobc/s200/IMG_0502.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5274482172228092514" /></a></td></tr><tr><td><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://picasaweb.google.pl/deepdiveinto/EclipseDemoCamp2008WrocAw"><img style="cursor:pointer; cursor:hand;width: 144px; height: 200px;" src="http://3.bp.blogspot.com/_-Hz5kL7u4E4/STK5gIyuwfI/AAAAAAAAAUY/JGAqnaBo_-M/s200/IMG_0464-1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5274482075371487730" /></a></td><td><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://picasaweb.google.pl/deepdiveinto/EclipseDemoCamp2008WrocAw"><img style="cursor:pointer; cursor:hand;width: 144px; height: 200px;" src="http://3.bp.blogspot.com/_-Hz5kL7u4E4/STK5a83nkCI/AAAAAAAAAUQ/Oe9QP_rA5Hc/s200/IMG_0486.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5274481986271416354" /></a></td><td><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://picasaweb.google.pl/deepdiveinto/EclipseDemoCamp2008WrocAw"><img style="cursor:pointer; cursor:hand;width: 200px; height: 134px;" src="http://1.bp.blogspot.com/_-Hz5kL7u4E4/STK5IkEmfDI/AAAAAAAAAUI/S2PZ-o75w5A/s200/IMG_0504.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5274481670377339954" /></a></td></tr></table><br />Myślę że nie będzie to ostatnia eclipsowa impreza we Wrocławiu. <br /><br />Osobiście mam także nadzieję że udało mi się przekonać część z was do idei tworzenia języków opisu problemu. To wcale nie tak odległa przyszłość jak by się mogło wydawać. Myślę że kolejna rewolucja jest tuż za rogiem a dowodem na to jest premiera języka 'M' (o którym napiszę następnym razem). Jak się do tych zmian przygotować? Myślę że najlepszym rozwiązaniem będzie wyjazd na CodeGeneration 2009 (mam nadzieję że w tym roku mi się uda :) <br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.codegeneration.net/cg2009/"><img style="cursor:pointer; cursor:hand;width: 400px; height: 104px;" src="http://2.bp.blogspot.com/_-Hz5kL7u4E4/STMh0j76PsI/AAAAAAAAAWA/1_G4vjrXvE0/s400/main-header.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5274596775464419010" /></a>Grzegorz Białekhttp://www.blogger.com/profile/14791618001989899083noreply@blogger.com4tag:blogger.com,1999:blog-7260523444214626147.post-66205407570159006492008-08-19T22:59:00.012+02:002008-08-20T08:13:12.578+02:00Wstęp do DSLPo przeczytaniu komentarza <a href="http://jlaskowski.blogspot.com/">Jacka Laskowskiego</a> na temat sposobów popularyzacji zadadnień tworzenia narzędzi eclipsowych, koncepcji MDD (Model Driven Development) czy <a href="http://en.wikipedia.org/wiki/Domain-Specific_Modeling">DSM/DSL</a> (Domain Specific Modeling) postanowiłem coś zrobić w tym temacie. Myślę że dobrym początkiem może być prosty tutorial.<br /><br />Co jednak zaprezentować by jednocześnie wytłumaczyć podstawy zagadnienia a przy okazji wzbudzić zainteresowanie tematem? Jedno jest pewne - nie może to być generacja pustych interfejsów :) W internecie można znaleźć setki prostych kursów jak wygenerować schemat klas, bazy danych z modelu etc. Nuda. Postanowiłem pokazać coś innego, co moim zdaniem pozwoli lepiej reprezentować powyższe koncepcje. Zamiast modelować kod strukturalny stwórzmy kod logiki. Naszym zadaniem będzie utworzenie miniaturowego systemu który biznesowy opis (reguły rozsyłania wiadomości) przekształci w działający kod.<br /><br />Wymagania dla zadania wyglądają następująco. Musimy utworzyć narzędzie pracujące na poziomie problemu (biznesowy opis zachowania) które będzie potrafiło generować coś zrozumiałego dla maszyny (kod wykonywalny). Czy to możliwe? Zobaczymy... <br /><br />Jako platformę docelową wybrałem prosty silnik świadczący usługę rozsyłania wiadomości pomiędzy nazwanymi kolekcjami (taki uproszczony <a href="http://www.eaipatterns.com/ContentBasedRouter.html">wzorzec rozsyłania wiadomości z EAI</a>). Nasz silnik oczekuje jako swojej konfiguracji klas reprezentujących zasady działania (interfejs IRule). Reguły te modelowane będą za pomocą edytora pracującego według zasad opisanych poprzez pewien model (meta-model). Żeby nie komplikować wykorzystamy dynamiczny edytor Ecore. Nie jest to oczywiście rozwiązanie produkcyjne jednak na potrzeby prostego tutoriala wystarczy. Osoby zainteresowane tematem budowy własnych edytorów DSL odsyłam do swojej <a href="http://deepdiveinto.blogspot.com/2008/07/eclipse-democamps-2008-podsumowanie.html">prezentacji z EclipseCamp 2008</a> (trzeba jakoś reklamować swojego bloga).<br /><br />Przykładowy meta-model naszego języka zawiera zaledwie dwie proste reguły:<br />- skopiuj wszystko z kolekcji źródłowej do kolekcji docelowej<br />- rozbij kolekcję źródłową na podzbiory na podstawie wartości parametru.<br /><br /><a href="http://1.bp.blogspot.com/_-Hz5kL7u4E4/SKs048gsWpI/AAAAAAAAAIo/kYHwQTFodDE/s1600-h/metamodel.gif"><img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_-Hz5kL7u4E4/SKs048gsWpI/AAAAAAAAAIo/kYHwQTFodDE/s400/metamodel.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5236337144668904082" /></a><br /><br />Jak widać model nie jest zbyt zaawansowany. Fragment opisujący wyrażenie można nazwać co najwyżej "edukacyjnym", całość pozbawiona jest też nadrzędnego kontekstu. Podział oraz integracja modeli to temat złożony, wykraczający poza ramy tego kursu. Myślę jednak że na nasze potrzeby prosty meta-model w zupełności wystarczy.<br /><br />Korzystając z edytora dynamicznego (opcja "Create Dynamic Instance") tworzymy dwie proste reguły:<br />- pobierz listę z kolekcji 'src' do kolekcji 'dst'<br />- pobierz listę klientów z kolekcji 'customers' i dorosłych umieść na 'adults', dzieci na 'children', nieprawidłowe elementy na 'unknown'<br /><br /><a href="http://1.bp.blogspot.com/_-Hz5kL7u4E4/SKunJzIEJkI/AAAAAAAAAJY/tqOYWysjJyg/s1600-h/edytor.GIF"><img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_-Hz5kL7u4E4/SKunJzIEJkI/AAAAAAAAAJY/tqOYWysjJyg/s400/edytor.GIF" border="0" alt=""id="BLOGGER_PHOTO_ID_5236462778533029442" /></a><br /><br />W trybie tekstowym utworzona instancja modelu powinna wyglądać następująco:<br /><br /><a href="http://3.bp.blogspot.com/_-Hz5kL7u4E4/SKs1LbMAKFI/AAAAAAAAAIw/ViURwAkpVBw/s1600-h/instancja.GIF"><img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_-Hz5kL7u4E4/SKs1LbMAKFI/AAAAAAAAAIw/ViURwAkpVBw/s400/instancja.GIF" border="0" alt=""id="BLOGGER_PHOTO_ID_5236337462141266002" /></a><br /><br />Ostatni krok to utworzenie szablonu generacji kodu. Nie jest to trudne. Kod który zostanie wygenerowany musi wykonywać operacje opisane przez meta-model. Utworzona instancja zawiera przykładowe wartości parametrów których użyjemy podczas testów. W naszym przypadku musimy zaimplementować prosty interfejs reguły (IRule) naszego silnika.<br /><br /><a href="http://2.bp.blogspot.com/_-Hz5kL7u4E4/SKs9iSI7o6I/AAAAAAAAAI4/PDDz762utNM/s1600-h/interfejs.GIF"><img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_-Hz5kL7u4E4/SKs9iSI7o6I/AAAAAAAAAI4/PDDz762utNM/s400/interfejs.GIF" border="0" alt=""id="BLOGGER_PHOTO_ID_5236346650942481314" /></a><br /><br />Pisanie szablonu rozpoczynamy od utworzenia testów. Ważne jest by nie starały się one weryfikować formatowania generowanego kodu ale logikę jego wykonania. Kod ten wielokrotnie może ulegać zmianom (optymalizacja etc.) jednak kontrakt z pozostałymi elementami systemu powinien być zachowany. W związku z tym w testach opisujemy tylko zasady interakcji z otoczeniem (nie tworzymy implementacji silnika etc.) Przykładowy test wygląda następująco:<br /><br /><a href="http://1.bp.blogspot.com/_-Hz5kL7u4E4/SKtE-kh1hlI/AAAAAAAAAJI/jvdxoRFiNlg/s1600-h/test.GIF"><img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_-Hz5kL7u4E4/SKtE-kh1hlI/AAAAAAAAAJI/jvdxoRFiNlg/s400/test.GIF" border="0" alt=""id="BLOGGER_PHOTO_ID_5236354833496507986" /></a><br /><br />Tworzenie testów pomaga nam lepiej zrozumieć problem jaki staramy się rozwiązać. Są one także niezmiernie pomocne w tropieniu literówek etc. Mając testy oraz przykładową instancję modelu bez trudu tworzymy prosty szablon kodu.<br /><br /><a href="http://2.bp.blogspot.com/_-Hz5kL7u4E4/SKtJjSwjxTI/AAAAAAAAAJQ/tZk9WNcJSo0/s1600-h/template.GIF"><img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_-Hz5kL7u4E4/SKtJjSwjxTI/AAAAAAAAAJQ/tZk9WNcJSo0/s400/template.GIF" border="0" alt=""id="BLOGGER_PHOTO_ID_5236359862428091698" /></a><br /><br />Testy zadziałały - zadanie zakończone ;D<br /><br />Bardziej szczegółowe informacje znaleźć można na stronach <a href="http://www.eclipse.org/modeling/">www.eclipse.org/modeling</a>. Jeżeli temat kogoś zainteresował fajnie byłoby gdyby dodał jakiś komentarz, będę wiedział czy warto go kontynuować (polecam także <a href="http://deepdiveinto.blogspot.com/search/label/ast">tutorial z AST</a> jako wstęp do zagadnienie budowy notacji tekstowej dla modeli).Grzegorz Białekhttp://www.blogger.com/profile/14791618001989899083noreply@blogger.com8tag:blogger.com,1999:blog-7260523444214626147.post-37116849594625522672008-07-17T22:34:00.017+02:002008-07-18T06:19:20.579+02:00Eclipse DemoCamps 2008 - podsumowaniePod koniec czerwca odbyły się dwa spotkania fanów środowiska Eclipse z cyklu EclipseCamp 2008. Szczęśliwie udało mi się uczestniczyć w obu dzięki czemu miałem unikalną okazję zamienić kilka słów z innymi osobami zainteresowanymi rozwojem produktów bazowanych na Eclipse.<br /><br />Szczególne brawa należą się moim zdaniem organizatorom tych spotkań:<br /><ul><li>Jackowi Pospychale (Poznań)</li><li>Kasi Bylec (Poznań)</li><li>Grzegorzowi Dudzie (Kraków)</li><li>Szymonowi Brandysowi (Kraków)</li></ul>Mam nadzieję że następnym razem uda mi się zorganizować z ich pomocą edycję wrocławską. Wszystko jednak zależy od zainteresowania tematem. <br /><br />A tak to wszystko wyglądało (miniatury wskazują na galerie zdjęć):<br /><br /><table><tr><td><b><a href="http://wiki.eclipse.org/Eclipse_DemoCamps_2008_-_Ganymede_Edition/Poznan">Poznań:</a></b></td><td><b><a href="http://wiki.eclipse.org/Eclipse_DemoCamps_2008_-_Ganymede_Edition/Krakow">Kraków:</a></b></td></tr><tr><td><a href="http://picasaweb.google.com/jacek.pospychala/DemoCampGanymede"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_-Hz5kL7u4E4/SH-wbmkpobI/AAAAAAAAAHo/1O2CsotwBYY/s400/Poznan.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5224088081030291890" /></a></td><td><a href="http://picasaweb.google.com/szymon.brandys/EclipseDemoCampKrakow28062008"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_-Hz5kL7u4E4/SH-v547SewI/AAAAAAAAAHg/_VLlpZ2uq4I/s400/Krak%C3%B3w.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5224087501841529602" /></a></td></tr></table><br /><br />Kilka wybranych prezentacji:<br /><ul><li><strong>Szymon Brandys</strong>, <strong>Tomasz Żarna</strong><br /><a href="http://wiki.eclipse.org/images/7/75/Together_in_Eclipse_EclipseDemoCamp2008.zip">Razem w Eclipse (Together in Eclipse)</a> - wszystko co powinien wiedzieć programista starający się zaangażować w prace nad środowiskiem Eclipse<br><br /><a href="http://www.eclipsecon.org/2008/sub/attachments/ABC_of_Platform_Workspace.ppt">ABC of Platform Workspace</a> - tej prezentacji niestety nie było jednak można było wypytać jej autorów o szczegóły zagadnień<br><br /><a href="http://wiki.eclipse.org/images/7/75/Together_in_Eclipse_EclipseDemoCamp2008.zip"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_-Hz5kL7u4E4/SH-3TcmG2PI/AAAAAAAAAIA/xLCjXHvdo8Y/s200/TogetherInEclipse.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5224095637494487282" /></a><a href="http://www.eclipsecon.org/2008/sub/attachments/ABC_of_Platform_Workspace.ppt"><img style="margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_-Hz5kL7u4E4/SH--tW2dgXI/AAAAAAAAAIQ/qAZAD8WkHos/s200/ABC.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5224103779210461554" /></a><br /></li><br /><li><strong>Mateusz Matela</strong>, <strong>Aleksandra Woźniak</strong>, <strong>Marek Zawirski</strong><br /><a href="http://rose.man.poznan.pl/~katis/gsoc.pdf">GSoC project</a> - prezentacja projektów uczestniczących w tegorocznym Google Summer of Code<br><br /><a href="http://rose.man.poznan.pl/~katis/gsoc.pdf"><img style="margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_-Hz5kL7u4E4/SH-3BNAYmzI/AAAAAAAAAH4/GbCT4XPNamM/s200/GSoC.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5224095324072090418" /></a><br /></li><br /><li><strong>Grzegorz Białek</strong> - uwaga kryptoreklama ;) <br /><a href="http://wiki.eclipse.org/images/2/2c/DSL_in_Eclipse.pdf">DSL w środowisku Eclipse (DSL in Eclipse)</a> - modelowanie procesów biznesowych z wykorzystaniem języków wysokiego poziomu... cokolwiek to znaczy ;)<br><br /><a href="http://wiki.eclipse.org/images/2/2c/DSL_in_Eclipse.pdf"><img style="margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_-Hz5kL7u4E4/SH-4s8R2VuI/AAAAAAAAAII/KoxSpunMS00/s200/DSLinEclipse.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5224097175007811298" /></a></li> <br /></ul><br />Pozostałe prezentacje znajdują się (lub zostaną z czasem uzupełnione) na stronach poszczególnych imprez. <strong>Zapraszam!</strong>Grzegorz Białekhttp://www.blogger.com/profile/14791618001989899083noreply@blogger.com2tag:blogger.com,1999:blog-7260523444214626147.post-43605596781090625182008-06-23T22:56:00.004+02:002008-06-23T23:38:54.175+02:00Eclipse DemoCamps 2008 - KrakówW najbliższą sobotę tj. 28.06.2008 w Krakowie w <a href="http://www.klubre.pl/">klubie RE</a> odbędzie się <a href="http://wiki.eclipse.org/Eclipse_DemoCamps_2008_-_Ganymede_Edition/Krakow">Eclipse DemoCamp 2008</a>.<br /><br />Jeżeli jesteś zainteresowany platformą Eclipse, chciałbyś poznać inne osoby związane z tym tematem to jest to wydarzenie którego nie możesz opuścić ;D<br /><ul><br /><li>12.30 – 12.50 <strong>Wprowadzenie do Ganymede</strong><br />Grzegorz Duda, Sabre Polska, Polish Java User Group leader</li><br /><li>12.50 - 13.10 <strong>Mylyn - Eclipse zorientowany na zadania</strong><br />Grzegorz Duda, Sabre Polska, Polish Java User Group leader</li><br /><li>13.20 – 14.00 <strong>Wprowadzenie do BIRT</strong><br />Krzysztof Daniel, Eclipse enthusiast, engineer in Eclipse Support Center at Politechnika Poznanska</li><br /><li>14.10 – 14.50 <strong>DSL w srodowisku Eclipse</strong><br />Grzegorz Bialek, Sygnity</li><br /><li>15.00 – 15.40 <strong>Razem w Eclipse</strong><br />Szymon Brandys, Eclipse Platform committer, engineer in IBM Poland</li><br /><li>15.40 – 16.00 <strong>Q&A</strong></li><br /></ul><br /><br />Inne przydatne linki:<br /><a href="http://www.jugevents.org/jugevents/event/registration.form?event.id=5262&language=pl">Rejestracja</a> <br /><a href="http://www.java.pl/">Polish Java User Group</a><br /><a href="http://wiki.eclipse.org/Eclipse_DemoCamps_2008_-_Ganymede_Edition/Krakow">Eclipse DemoCamps 2008 - Kraków</a>Grzegorz Białekhttp://www.blogger.com/profile/14791618001989899083noreply@blogger.com1tag:blogger.com,1999:blog-7260523444214626147.post-1286106735077515312008-06-17T23:57:00.003+02:002008-06-18T00:08:54.524+02:00Eclipse DemoCamps 2008 - PoznańWłaśnie wróciłem z Poznania, naprawdę piękne miasto i bardzo dobre jedzenie. Polecam!<br />Myślę że dobrą okazją do odwiedzin może być pewna impreza która odbędzie się już za kilka dni... <br /><br /><a href="http://wiki.eclipse.org/Eclipse_DemoCamps_2008_-_Ganymede_Edition/Poznan">Eclipse DemoCamps 2008 - Poznań</a><br /><br /><a href="http://bp1.blogger.com/_-Hz5kL7u4E4/SFgzh_Gc51I/AAAAAAAAAHQ/RAVsnIptlnY/s1600-h/EclipseCampPoznan.png"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_-Hz5kL7u4E4/SFgzh_Gc51I/AAAAAAAAAHQ/RAVsnIptlnY/s400/EclipseCampPoznan.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5212973227648542546" /></a>Grzegorz Białekhttp://www.blogger.com/profile/14791618001989899083noreply@blogger.com0tag:blogger.com,1999:blog-7260523444214626147.post-32141083834599896252008-06-14T15:31:00.009+02:002008-06-14T16:16:12.436+02:00DSLs: Martin Fowler, Marcus VölterPrzez ostatnie dwa miesiące nie miałem zbyt dużo czasu na prowadzenie bloga. Powinienem to jakoś naprawić... tym razem jednak znów pójdę na łatwiznę i wykorzystam "gotowca" ;)<br /><br />Wczoraj udało mi się odnaleźć kolejny wywiad na temat DSL'i. Tym razem oprócz Markusa współuczestniczy w nim żywa legenda jaką jest niewątpliwie Martin Fowler. Myślę że nie trzeba go nikomu przedstawiać, podobnie jak książek które napisał lub promował swoim nazwiskiem a które stały się fundamentem dla wielu rewelacyjnych projektów (<a href="http://www.amazon.com/exec/obidos/ASIN/0321127420">PoEAA</a> -> <a href="http://www.hibernate.org/">Hibernate</a>, <a href="http://www.amazon.com/Enterprise-Integration-Patterns-Designing-Addison-Wesley/dp/0321200683">EIP Hoppe/Woolf</a> -> <a href="http://activemq.apache.org/camel/">Apache Camel</a> etc.)<br /><br />Wideo to może być dobrym uzupełnieniem poprzedniego które zamieściłem w jednym z <a href="http://deepdiveinto.blogspot.com/2008/03/dsl-na-oopsla-2007.html">wcześniejszych postów</a>. Pomimo że jest to dosyć krótka rozmowa poruszonych jest kilka ciekawych aspektów (integracja wielu języków w spójne IDE, xtext/antlr etc.). Polecam każdemu kto ma trochę wolnego czasu.<br /><br />Wywiad przeprowadzony został podczas <a href="http://jaoo.dk/">JAOO Conference</a> i udostępnia do servis <a href="http://blip.tv/">Blip.TV</a>:<br /><br /><a href="http://jaoo.blip.tv/file/941921/"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_-Hz5kL7u4E4/SFPMbIaoapI/AAAAAAAAAHI/hmB8nLCmidg/s400/fowler.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5211733960285514386" /></a>Grzegorz Białekhttp://www.blogger.com/profile/14791618001989899083noreply@blogger.com0tag:blogger.com,1999:blog-7260523444214626147.post-21594604204867873462008-06-14T14:04:00.006+02:002008-06-14T16:13:47.297+02:00Eclipse DemoCamps 2008Za kilka dni w Poznaniu oraz w Krakowie odbędą się spotkania pasjonatów środowiska Eclipse. Myślę, że może być to unikalna okazja do poznania osób zainteresowanych tematem budowy narzędzi.<br /><br />Niestety spotkanie w Poznaniu jest w ciągu tygodnia więc raczej nie uda mi się wykorzystać okazji. Jednak nie wszystko stracone, kolega z zaprzyjaźnionego zespołu będzie tam jednym z prezenterów (Mariusz Paszkiewicz - Business Process Modeling Tool based on Eclipse Platform). Na spotkanie w Krakowie muszę się jednak wybrać. Wstyd się przyznać ale odkąd przeprowadziłem się do Wrocławia nie miałem zbyt wielu okazji by odwiedzić Kraków. Myślę że Eclipse DemoCamp jest dobrym pretekstem by to zmienić. Mam nadzieję że uda mi się wyskoczyć na browara ze starymi znajomymi a może też poznać nowych ;D<br /><br /><a href="http://wiki.eclipse.org/Eclipse_DemoCamps_2008_-_Ganymede_Edition/Poznan">Eclipse DemoCamps 2008 - Poznań</a><br /><a href="http://wiki.eclipse.org/Eclipse_DemoCamps_2008_-_Ganymede_Edition/Krakow">Eclipse DemoCamps 2008 - Kraków</a><br /><br /><a href="http://wiki.eclipse.org/Regional_Communities/Poland">Eclipse Regional Communities - Poland</a>Grzegorz Białekhttp://www.blogger.com/profile/14791618001989899083noreply@blogger.com3tag:blogger.com,1999:blog-7260523444214626147.post-21582840325751188322008-03-27T22:12:00.005+01:002008-03-27T22:35:14.437+01:00Eclipse Modeling jako DSL ToolkitKilkanaście minut temu zakończyła się wirtualna konferencja (Webinar) prezentująca projekt <a href="http://www.eclipse.org/modeling/">Eclipse Modeling</a> jako środowisko do tworzenia DSL'i - <a href="http://adobedev.adobe.acrobat.com/p90148608/">Eclipse Modeling Project as a DSL Toolkit</a><br /><br />W pierwszej części prezentacji Richard Gronback (prowadzący projekt GMF) opisuje w kilku słowach większość projektów składowych, druga jest jednak sporym zaskoczeniem. Zamiast klasycznej demonstracji EMF/GMF jest ona praktycznie w całości poświęcona koncepcji transformacji modeli z naciskiem na QVT. Do tej pory myślałem że biblioteki M2M są dopiero we wczesnych testach, wygląda jednak że się myliłem. <br /><br />Czas chyba bliżej zainteresować się tematem no i w końcu nauczyć OCL'a ;D<br /><br /><a href="http://adobedev.adobe.acrobat.com/p90148608/"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_-Hz5kL7u4E4/R-wQfxjHEjI/AAAAAAAAAGU/K4nexHxsKCw/s400/modeling.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5182535409259188786" /></a>Grzegorz Białekhttp://www.blogger.com/profile/14791618001989899083noreply@blogger.com1