Relacja z CodeCamp Warszawa 2009

W sobotę, 23 maja, w siedzibie Microsoft Polska odbyło się techniczne spotkanie CodeCamp Warszawa 2009. Wstęp, pizza i wiedza za darmo. Oto me wrażenia jako biernego uczestnika i obserwatora:

Tomasz Kopacz "Programowanie równoległe i rozproszone"

Rozpoczęcie dnia wystąpieniem Tomasza Kopacza wróżyć może tylko dobrze. Mający apetyt na zwykłe dla tego prelegenta wycieczki w najgłębsze otchłanie szerokich wód technologii nie mogli być zawiedzeni. Tym razem mieliśmy okazję posłuchać o programistycznym zmuszaniu komputera do wykonywania wielu czynności jednocześnie – i dlaczego jest to takie trudne. "Why bother?"... Na samym początku ujrzeliśmy slajd z wykresem obrazującym procentowy wzrost obecności procesorów wielordzeniowych w zwykłych PCtach. W ciągu ostatnich 4 lat wartość ta wzrosła z 30% do prawie 100%! Od równoległości w programowaniu nie ma po prostu ucieczki. Ten jeden czynnik – ignorowanie mocy obliczeniowych więcej niż jednego rdzenia - może być powodem porażki naszej aplikacji na rynku.
Po krótkim wstępie obrazującym nam stan aktualny posłuchaliśmy trochę o teorii programowania równoległego. Poznaliśmy największe wyzwania czekające na programistów, przyczyny powstania i cele wielu rdzeni oraz jak je można wykorzystać już teraz. Kilka demonstracji kodu pisanego w dniu dzisiejszym w celu osiągnięcia "równoległej nirwany" mogło wydać się wszystkim aż nazbyt dobrze znane z własnych doświadczeń. Nawet najprostsze operacje takie jak asynchroniczne pobranie danych dla strony ASP.NET czy rozdzielenie banalnego algorytmu pomiędzy kilka wątków tak bardzo redukują czytelność kodu i pierwotny zamiar programisty, że ciężko jest się w tym wszystkim połapać. Jeśli dodamy do tego spory narzut wydajnościowy związany z używaniem mechanizmów takich jak Semafor, Mutex, EventWaitHandle czy lock okaże się, że smutne z nas, programistów, misie i że zdecydowanie jest to obszar dający pole do popisu twórcom nowych rozwiązań i koncepcji.
A jeśli takie mechanizmy wrzucić bezpośrednio do klas .NET? Zarządzać wątkami, zasobami, mocą komputera bez ciągłego kontaktu z systemem operacyjnym? Uzyskalibyśmy dwie rzeczy: po pierwsze lepszą wydajność, po drugie szansę na zaimplementowanie tego w prosty do wykorzystania sposób. I tak to właśnie wkrótce będzie wyglądać. W Visual Studio 2010 pojawi się wiele udogodnień dla pracy z wielowątkowym kodem i jego debuggowaniem. Sam .NET Framework z kolei udostępni nową przestrzeń nazw (System.Threading.Tasks) zawierającą całkiem nowe podejście do pisania takich projektów. Zamiast Thread będziemy używać Task, zadania zrównoleglimy wywołaniem jednej metody AsParallel() z PLINQ, opóźnioną inicjalizację zmiennych zapewni nam klasa Lazy<T>, a dostępu do zmiennej oczekującej na wykonanie operacji w tle ustrzeże wywołanie Task<int>.Factory.StartNew(). Cóż... będzie fajnie:).
Po dość szczegółowym i popartym demonstracjami omówieniu powyższych koncepcji skończyła się ciekawa część sesji. Z programowania równoległego na jednej maszynie przeszliśmy do tematów rozpraszania systemów na wiele maszyn oraz do tak ostatnio popularnej chmury. Niestety te ostatnie kilkanaście minut uważam za zbyt rozbite pomiędzy wiele różnych tematów. Zamiast po kilka minut poświęcić na CCR (Concurrency and Coordination Runtime), DSS (Decentralized Software Services), HPC Server i Windows Azure (które to tematy same w sobie są z pewnością bardzo zajmujące), można było jeszcze trochę poopowiadać o tym co nas, programistów ze zwykłej gliny, kręciło najbardziej, czyli nowy .NET.

Moja ocena: 7/9 (za fachowe i napawające optymizmem przedstawienie kierunku rozwoju .NET; nie więcej jednak, bo zbyt dużo materiału "na doczepkę")

Piotr Czekała i Krzysztof Bartkowski "Media w Silverlight - dostarczanie niezapomnianych wrażeń"

Po krótkiej przerwie na scenę wkroczyło dwóch prelegentów z firmy Insys. Z Silverlightem nie miałem póki co zbyt wiele do czynienia i z zainteresowaniem słuchałem tego, co mieli nam do przekazania. A mieli do przekazania sporo – i to na bardzo satysfakcjonującym poziomie szczegółowości. Sesję podzielono na trzy części.
Pierwsza z nich to wstęp. Przedstawienie siebie, firmy oraz tego czym się zajmują na co dzień. Historyjki o LechTV, zmaganiach z kolejnymi wersjami SL i próbami przekonania klienta i użytkowników że "naprawdę warto doinstalować ten plugin" były dość interesujące i momentami zabawne, ale jak na mój gust – za długo "reklamowano" firmę Insys. Choć z drugiej strony – nie było to bardzo irytujące i w sumie odrobina autopromocji nikomu zbytnio przeszkadzać nie powinna:).
Główną część sesji stanowiły opowieści o prezentowaniu audio i wideo za pomocą Silverlight. Dowiedzieliśmy się co to jest Progressive Download – i dlaczego w miarę możliwości należy stosować bardziej zaawansowane rozwiązania. Przeszliśmy do Streamingu i posłuchaliśmy o jego wyższości nad progresywnym ściąganiem. Oba tematy okraszono demonstracjami na żywo, więc mogliśmy momentalnie przekonać się na własne oczy co autor ma na myśli. Demonstracje przygotowano starannie, więc nic się nie wysypało i uniknięto tak często spotykanego efektu "dziwne, przed kwadransem działało...". Następnie dużo czasu poświęcono na zaprezentowanie Smooth Streaming, możliwościami bijącego na głowę dwie wcześniej przedstawione technologie. Odtwarzanie wideo bez ciągłego oczekiwania na buforowanie, skakanie po całym filmie bez zacięcia, nieprzerwane odtwarzanie i adaptowanie jakości wideo do aktualnego stanu łącza == absolutny komfort użytkownika. Zobaczyliśmy również jak za pomocą Expression Encoder przygotować media gotowe do wykorzystania przez Silverlight. Ogólnie ta część niosła za sobą spore walory edukacyjne i pomimo kilku nużących elementów i momentami usypiającego głosu prelegenta – podobało mi się.
Następnie nadszedł czas na feature, który u po wyjściu SL2 u wielu osób mógł powodować opad szczęki i był tzw. WOW-factorem tej technologii. Chodzi oczywiście o DeepZoom. Jako wiodący motyw służący za demo dla omawianych funkcjonalności potraktowano witrynę Sunrise Festival, gdzie można bawić się w przybliżanie mozaiki złożonej z ponad 1000 zdjęć. Dodatkowo zaimplementowano filtrowanie prezentowanych obrazów wzbogacone o animacje każdego foto z osobna. Całość robiła wrażenie, tym bardziej że wydajność rozwiązania autentycznie nie pozostawia nic do życzenia. Przy okazji prelegent podzielił się wiedzą zdobytą podczas implementacji tego projektu – widać, że technologia nie ma przed nim tajemnic. Omówiono dokładnie strukturę plików, jakiej wymaga DeepZoom i zaprezentowano narzędzie Deep Zoom Composer służące do jej generowania. Jednocześnie wskazano wady i niedociągnięcia tej aplikacji, jak również powiedziano kilka słów o autorskim programie zastępującym DZC z ominięciem jego wpadek. Imponować mogła również trójwymiarowa panorama pola golfowego stworzona przy użyciu Photosynth oraz demonstracje oprogramowania kontroli nad wyświetlanym obrazem za pomocą udostępnianego przez SL API.
Z sesji wychodziło się z wrażeniem, że Silverlight nie ma przed prelegentami tajemnic i ze spokojem można zaufać przekazanym przez nich informacjom. Wystąpienie z kategorii "przez pasjonatów dla pasjonatów".

Moja ocena: 7/9 (za dogłębne przedstawienie tematu)

Bartłomiej Legiędź "Wyjątki kontrolowane w C#"

O idei checked exceptions, ich wadach, zaletach i możliwych implementacjach opowiedział nam kolega z Zine’a, będący jednocześnie zwycięzcą łódzkiego Speaker Idola. Wystąpienie sprawiało wrażenie bardzo przemyślanego, doskonale zorganizowanego i poprowadzonego z wprawą godną starego scenicznego wyjadacza. Temat był dla mnie dość ciekawy, ponieważ swego czasu sam zastanawiałem się nad omawianą kwestią. Przemyślenia te zakończyłem usypaniem kopczyka wdzięczności w mej programistycznej duszy na cześć Andersa Hejlsberga, twórcy C#, za wspaniałą decyzję nieimplementowania tego mechanizmu w moim ulubionym języku.
Z zainteresowaniem wysłuchałem historii wyjątków kontrolowanych: od CLU, przez C++ aż do Javy. Zaprezentowane przykłady implementacji zostały profesjonalnie omówione, a ich wady bezlitośnie wytknięte. Zgadzam się z prelegentem, że implementacja z Javy byłaby całkowicie do zaakceptowania, gdyby istniała możliwość zrezygnowania z sygnalizowania BŁĘDU podczas KOMPILACJI programu w razie niestosowania się do tych zaleceń. W obecnej postaci kończyć się to musi brzydkimi obejściami obowiązku deklarowania rzucanych wyjątków poprzez nagminne ciche łapanie klasy bazowej bądź deklarowanie "throws Exception". Takie zycie...
Bartek doszedł do wniosku, że taki mechanizm jest jednak przydatny i postanowił zrobić coś z aktualnym stanem rzeczy. Efektem tego postanowienia jest plugin do Resharpera o nazwie Exceptional. Jego zadanie jest dość proste - wynajduje on w naszym kodzie niełapane wyjątki i proponuje dwa rozwiązania: złap wyjątek bądź udokumentuj możliwość jego wystąpienia. W ten sposób otrzymujemy nienachalną informację o potencjalnym przeoczeniu czegoś ważnego oraz możliwość automatycznego tego naprawienia kilkoma kliknięciami wywołującymi odpowiednią akcję z listy sugestii R#. Dla mnie bomba, a następujące po części teoretycznej demo skłoniło mnie do ściągnięcia i instalacji tego narzędzia. Wymaga ono jeszcze oczywiście dopracowania, ale nawet w obecnej postaci jest naprawdę godne polecenia.
Lubię słuchać kogoś wysławiającego moje własne przekonania w uporządkowany sposób, więc słuchało mi się bardzo przyjemnie:). Skupiono się na jednym, bardzo ściśle określonym i w miarę istotnym problemie, następnie dokładnie go przeanalizowano, zbadano istniejące rozwiązania, wytknięto ich wady, zaproponowano własną propozycję a na koniec ją zrealizowano. Brawo! Dla mnie najlepsza sesja na całej imprezie.

Moja ocena: 8/9 (za bardzo przemyślaną agendę, świetną treść, doskonałą propozycję rozwiązania problemu i w końcu – jej realizację)

Michał Żyliński "Ile cukru w cukrze - IronPython i jego zastosowania"

O wprowadzeniu języków dynamicznych do .NET Framework słyszy się od dawna, a sztandarowymi przykładami w tym temacie są IronRuby i IronPython. Z czym to się jednak je, jak się w tym pisze i do czego można to wykorzystać? Na te pytania miał nam odpowiedzieć pracownik polskiego oddziału Microsoftu, Michał Żyliński.
Przyznać muszę, że mój kontakt z językami dynamicznymi był do tej pory raczej symboliczny. Ot, parę przeczytanych artykułów, obejrzanych prezentacji, kilka godzin luźnych eksperymentów. Minimalny poziom wiedzy wystarczył jednak do bezproblemowego zrozumienia wstępu, podczas którego posłuchaliśmy trochę o historii i strukturze Pythona oraz zobaczyliśmy przykładowy kod. Co ciekawe, prelegent w celu podkreślenia faktu, że mówi o Pythonie, a nie jego konkretnej implementacji dla .NET, korzystał ze środowiska PythonWin a nie VS.
Jako możliwe zastosowania Pythona zaproponowano nam ORMapping, Aspect-Oriented Programming (chociaż nie wiem jaką rolę miałby tam spełniać) czy prosty serwer www. Ciekawie wyglądało demko otwierające Worda i wypisujące jakiś tekst do nowoutworzonego dokumentu – zajmowało jedynie 5 linii! To właśnie zwięzłość i skondensowanie instrukcji przy jednoczesnym zachowaniu czytelności kodu jest jedną z największych zalet Pythona.
Po przejściu do właściwej części prezentacji, czyli włączenia Pythona do świata .NET, zaprezentowano nam różnice pomiędzy jego standardowym środowiskiem a implementacją rodem z Microsoft. Mostem łączącym świat statyczny z dynamicznym jest DLR (Dynamic Language Runtime), o którym usłyszeliśmy kilka słów i poznaliśmy zasady jego działania z bardzo wysokiego lotu ptaka.
Później nastąpiła próba odpowiedzi na najważniejsze chyba pytanie: po co nam Python w .NET? Przy tej okazji obejrzeliśmy kilka dem kończących wystąpienie. Były to między innymi kombinacje wykorzystania IronPython w środowisku WinForms, w ASP.NET, w Silverlight... Niestety, im dłużej na to patrzyłem, tym mniej byłem do całej idei zaprzęgania dynamicznych języków do takich celów przekonany. W takich scenariuszach kodu wcale nie będzie strasznie mniej, a włączanie dodatkowego języka programowania do projektu tylko dlatego że jest "fancy" i wszyscy o tym mówią wydaje mi się nie do końca odpowiedzialną decyzją. Tak naprawdę jedyne sensowne (w kontekście aplikacji .NET) zastosowanie, jakie wyniosłem z sesji, to udostępnienie użytkownikom aplikacji możliwości pisania skryptów modyfikujących jej zachowanie – i jeśli kiedykolwiek pojawi się u mnie taka potrzeba, wówczas z pewnością zwrócę swe oczęta w odpowiednią stronę (ostatnio pisał też o tym Bartek Szafko).

Moja ocena: 6/9 (tak naprawdę nie jestem wiele mądrzejszy po sesji niż przed nią – i nadal nie do końca wiem, gdzie w codziennym programowaniu w .NET jest miejsce na IronPythona)

Andrzej Piotrowski "Designer + Programista = Produkt, Problem + Pomysł = Aplikacja"

Na koniec wystąpił przed nami zwycięzca (a właściwie jedyny uczestnik) warszawskiego Speaker Idola. Temat mówiący niewiele i... do dziś nie wiem o co tak naprawdę chodziło. Od początku widać było, że prelegenta zżera trema – ale to jest całkowicie zrozumiałe i nikt nie może mieć o to pretensji. Próby nawiązywania kontaktu z publicznością poprzez organizowanie minikonkursów z nagrodami – jak najbardziej godne pochwały. I na tym niestety owe pochwały muszę zakończyć.
Nie potrafię nawet teraz poukładać sobie w głowie z czym po kolei mieliśmy do czynienia. Najpierw zobaczyliśmy na slajdzie definicje "strategii 4P oraz 4C". Chwilę potem nastąpiła wzmianka o Strategii Błękitnego Oceanu. W międzyczasie w połowie omawiania slajdu przechodziliśmy bez słowa wyjaśnienia do kolejnego tematu, co powodowało u mnie w głowie niemały zamęt. O co chodzi?? Podczas obserwacji prelegenta przypominały mi się momentami czasy liceum, gdy na lekcji polskiego trzeba było recytować jakiś durny wiersz i chcąc zrobić to najszybciej jak to możliwe – plątałem się i myliłem. Musiałem wtedy wyglądać właśnie tak. Rozumiem, że można nie urodzić się z naturalnym talentem do prezentowania czegokolwiek, ale w takim razie po co się zgłaszać na taką imprezę bez uprzedniego zdobycia jakiegokolwiek doświadczenia, chociażby na lokalnej grupie .NET? A jeśli takie doświadczenie jest to... może po prostu trzeba lepiej się przygotować?
Po kilku pierwszych slajdach zostałem absolutnie zaskoczony tym co zdarzyło się dalej. Otóż zaprezentowano nam założenia projektu z konkursu Imagine Cup, z roku 2007, w którym prezenter brał udział. A po prezentacji założeń... kilkuminutowy filmik pokazujący jego działanie? Dwa razy?? WTF?
Ale to nie koniec, bo... za chwilę zostaliśmy uraczeni dokładnie tym samym, tylko że z IC 2008. Potem puszczono nam jakąś "wizjonerską reklamę". Potem kolejny filmik, nie pamiętam juz o czym. A następnie... a jakże, filmik o projekcie z IC 2009!!
Na koniec kilka słów o tym, że "wizja jest ważniejsza od możliwości jej realizacji" (tekst może dobry na Imagine Cup, ale nie tutaj), że trzeba zmieniać świat i że bez dobrego designu nie mamy szans. Po drodze poplątano design w sensie "interfejs użytkownika" z designem w sensie "architektura rozwiązania". I... to tyle.
Może opis ten wygląda złośliwie, jednak nie takie jest moje zamierzenie. Przez cały czas bowiem zastanawiałem się "o co chodzi?", i nadal nie mam pojęcia. Proponuję po prostu przed następnym wystąpieniem pokazać je uprzednio komuś dobrej woli i skonfrontować jego odczucia z zamierzonym przekazem. Przed prezentacją byłem bardzo ciekaw co ujrzę, bo czytając od czasu do czasu bloga autora można odnieść wrażenie, że jest megamastawymiataczem (szczególnie utkwiła mi w pamięci bardzo protekcjonalna i nie na miejscu chęć "wypunktowania" Artura Paluszyńskiego w relacji z C2C). I cóż... było trochę inaczej.
I na koniec jeszcze jedna uwaga do samych slajdów: pakowanie 10 kolorów na jednym ekranie oraz trzykrotna zmiana motywu prezentacji nie wypada korzystnie.

Moja ocena: <brak> (bo naprawdę nie wiem co miałbym wystawić – mimo chęci i starań prelegenta był to po prostu niezrozumiały chaotyczny bełkot; albo jestem głupi i tylko ja tak to odebrałem)

Podsumowanie

Jak na takie "niszowe" weekendowe spotkanie, bez "KONFERENCYJNEGO" nadęcia i pompy – zdecydowanie udane wykonanie. Podziękowania tym, którym się chce.

Ocena ogólna konferencji: 8/9

Opublikowane 27 maja 09 07:02 przez Procent

Komentarze:

# yaceq said on maja 27, 2009 09:07:

Nie wiem czemu wszyscy (no może większość) myślą zabawy wordem, excelem itp z poziomu (jakiegokolwiek) języka programowania to wyższa szkoła jazdy na wrotkach. I tu programiści Microsoftu pokazali swoją klasę w tworzeniu Office'a, oraz że można osiągnąć praktycznie wszystko. Tylko trzeba chcieć. Na dowód wpisanie jakiegoś tekstu w Worda w C#:

object missing = System.Reflection.Missing.Value;

Word.Application word = new Word.Application();

word.Visible = true;

Word.Document doc = word.Documents.Add(ref missing, ref missing, ref missing, ref missing);

doc.Paragraphs.Add(ref missing).Range.Text = "Hello! It's C#!";

jedyne co, to oczywiście całość musi być w metodzie a w Pythonie to jak już kto chce :) Nie mniej nie jest to straszne. Jakby się uprzeć to jeszcze dałoby się to skrócić. Najlepiej dostając się do Worda bezpośrednio z użyciem COM, a nie przez API. Ale tak jest ładniej :)

Pozdrawiam:)

# Procent said on maja 27, 2009 09:13:

@yaceq

Dzieki za przykład:). Ale chyba coś w tym jest, że często słysząc "integracja z Office" myśli się "wooo" - przynajmniej ja tak mam (miałem?). Jedyne z czym przyszło mi się kiedyś bawić to korzystanie z Outlooka, więc wynika zapewne z nieznajomości tematu.

# Gutek said on maja 27, 2009 10:59:

eee integracja z wordem? :)

dynamic word = new Word.Application();

word.Visible = true;

dynamic doc = word.Documents.Add();

doc.Paragraphs.Add().Range.Text = "";

I koniec... piekno .NET Framework 4.0 i C# 4.0 :)

Gutek

# Andrzej Piotrowski said on maja 27, 2009 13:00:

Generalnie dziękuję za krytykę - im więcej jej tym bardziej wiem co jest dobre a co nie. Nie chce odbijac piłeczki w stylu , przepraszam bo mi nie wyszlo ... .

Wspomniałem już u siebie na blogu - koniec z tym tematem.

Może wykorzystam blog Macieja ( bo dużo ludzi go czyta :) MVP :D ) i coś powiem od siebie. Liczyłem się z tym że ludzie tego nie zrozumieją - ba , nawet mnie ostrzegano przed taką próbą , jednak chciałem spróbować. Przesłanie faktycznie złe, nie tak jak na próbach i preznetacji na PG.Net.

Poplątanie z poszmieszaniem - tutaj przepraszam - czy dobrze bedzie jezeli powiem - inna wizja - nie mainstream ??

Mogę cię zapewnic, że eleminację SI bym miał opanowaną wręcz do perfekcji - preznetacja tam miała naprawdę charakter "dodatku". Główna siła robocza poszła na ImagineCup.

Dzięki za uwagę z kolorami i motywami - tutaj akurat może i się zgadzam - choc cel to pewien miało - 3 różne sposoby tworzenia.

Preznetacja ta naprawdę wypadła nie najgorzej na swojej grupie PG.Net - dostałem parę uwag - pozmieniałem trochę.

Naprawdę siebie nie chce usprawiedliwić , ale uważam że i tak dostałem cenną lekcję która chce wykorzystac w przyszlosci. Cytując " Meżczyzne nie poznaję się po tym jak zaczyna ( a ja dopiero co raczkuje ) ale po tym jak kończy "

Liczę Macieju że się kiedyś jeszcze spotkamy - naprawdę , ze mnie taki typ co łatwo się nie poddaje.

P.S. Jak bym chciał zamiast Artura tam mówic, pewnie bym się zglosił. Nie pamiętam przyczyny dlaczego wówczas tam nie startowałem. O WPF wiem naprawdę dużo ale chciałem pokazac że jest jeszcze wiele do zrobienia aby tworzyc wizje - nie program.

P.S.2 Dziękuję że wpomniałeś o moim skromnym blogu :)

# Andrzej Piotrowski said on maja 27, 2009 13:07:

Co do czasów liceum :) Nie tak dawno zresztą . Mam nie spełna 21 lat dopiero ;) Jeszczę długa droga przedemną. Generalnie to nie mam tak dobrego zaplecza wiedzy informatycznej jak ludzie z Politechniki ( Ja Uniwersystet Przyrodniczy ).

Dziękuję jeszcze raz za krytykę - ocena zrozumiała.

Gwarantuje tylko - im więcej się jej - tym bardziej ja siebie będę oceniał krytycznie.

Z liceum jeszcze " Jeżeli ktoś kiedyś z was będzie coś mówił i nie zostaniecie zrozumiani to znaczy że temat zmusza do myślenia i to jest najważniejsze"

# arkadiusz.wasniewski said on maja 27, 2009 13:10:

dynamic - nowa funkcjonalność i dodatkowy 1MB RAM poszedł ;-)

# SocialITy said on maja 27, 2009 19:05:

W ostatnią sobotę miałem przyjemność wziąć udział w warszawskiej edycji konferencji Code Camp 2009 .

# Gutek said on maja 27, 2009 20:24:

@Arek

kurcze :) na 486 i na pocket pc bym sie nad tym zastanawial, ale moje ostatnie aplikacje stoja na serwerach 64 bitowych z 9GB RAM w zwyz... 1MB przy tym to nic :) mozna sobie na to pozwolic :)

Gutek

Komentarze anonimowe wyłączone

About Procent