RSS

XXV Forum Architektów i Programistów

Liczba odsłon: 35

13 listopada 2008 roku (czwartek) miało miejsce XXV spotkanie Forum Archi­tektów i Programistów, organizowanego w siedzibie polskiego oddziału Microsoft w Warszawie. Sympozjum miało na celu przybliżenie zakresu tematyki prezento­wanej podczas tegorocznej konferencji programistów Microsoft PDC 2008, która odbyła się w dniach od 26 do 30 października.

Jak zwykle, pochwalić muszę stronę organizacyjną spotkania. Rejestracja zajęła tylko chwilę, na gości czekało przygotowane śniadanie, w czasie przerw dostępne były sałatki, ciastka i napoje, a na zakończenie sympozjum wszyscy zostali zaproszeni na obiad. Wydaje mi się jedynie, że nieco oszczę­dzono na wyżywieniu: o ile podczas poprzednich spotkań drobna przekąska podczas przerwy nie stanowiła problemu, tym razem zdobycie na ostatniej przerwie czegokolwiek poza kawą czy herbatą było w zasadzie niemożliwe. Być może jednak to nie wyżywienie było uboższe, lecz żarłoczność gości większa.

Wszystkie prelekcje, które miały miejsce podczas spotkania, unaoczniają jasny kierunek, w którym podąża firma Microsoft: nadzorowane języki programo­wania. W ogóle nie mówi się już o języku C; C++, jeżeli już pojawiał się, to tylko w wersji wykorzystującej CLI i maszynę wirtualną .NET. Najwięcej uwagi poświęcono językowi C# i uzupełnieniom jego składni, a w szczególności LINQ. Z jednej strony można to zrozumieć: .NET umożliwia pisanie aplikacji składających się z mniejszej ilości kodu, a więc bogatszych i bardziej nieza­wodnych. Z drugiej strony narzut wydajnoś­ciowy i pamięciowy wszelkich środowisk angażujących maszynę wirtualną ciągle skłania do wyko­rzys­ty­wania nienadzorowanego kodu maszynowego wszędzie tam, gdzie istotna jest oszczędność i wydajność. Pocieszające jest jednak, że firma widzi, jakim problemem jest wydajność maszyny wirtualnej .NET: podobno biblioteka .NET Framework 3.5 SP1 jest wyraźnie szybsza od poprzednich wersji. Również nowa wersja 4.0 – której edycję pre-beta omawiano na spotkaniu – została przygo­to­wana z myślą o zwiększeniu wydajności, szczególnie jeżeli chodzi o nieprzewidywalne narzuty mechanizmu porządkowania automatycznie zarządzanej pamięci (zmieniono algorytmy modułu Garbage Collector) oraz czas uruchamiania maszyny wirtualnej i ładowania modułów .NET do pamięci operacyjnej.

Najwięcej czasu zostało poświęconego technologii Azure oraz usługom Windows Live. Azure to podchwycenie modnego ostatnio tematu „przetwarzania w chmurze” (ang. cloud computing). W ramach projektu Azure firma Microsoft ma zamiar udostępniać klientom centra obliczeniowe (uloko­wane w kilku krajach rozrzuconych po całym globie), przy czym każdy klient wynajmowałby określoną liczbę procesorów, ilość dostępnej pamięci operacyjnej oraz rozmiar obszaru na przecho­wy­wane dane. Oczywiście, raz ustalony przydział można zmieniać w zależności od potrzeb, rezygnując z części zasobów lub zwiększając swoje wymagania. Użytkownika nie interesuje jednak jakie komputery obsługują jego zadania, kto zajmuje się ich administrowaniem, a nawet gdzie położone jest centrum obliczeniowe, w którym się te kompu­tery znajdują (choć jest możliwe wyra­żenie swoich prefe­rencji co do obszaru geogra­ficznego). Po prostu określa swoje wymagania, dostarcza kod i dane, a później — na bieżąco lub po zakoń­czeniu długo­trwałych obliczeń – pobiera wyniki.

Najważniejszym elementem Azure jest standaryzacja dostępu do danych. Każda usługa wykony­wana w ramach Azure musi być wyposażona w zestandaryzowany interfejs; zadanie to ułatwia zestaw szablonów środowiska Visual Studio. Usługi są dostępne za pomocą scentralizowanej adresacji URI, przy czym możliwe jest korzystanie ze specjalizowanego protokołu Service Bus lub bardziej tradycyjnych środków (HTTP), lepiej przystosowanych do działania w silnie zabez­pie­czonych sieciach (NAT, zapory sieciowe). Z każdą usługą stowarzyszony jest zbiór uprawnień, umożliwiający sterowanie dostępem do usługi tak w stopniu lokalnym (w ramach klienta — na przykład prezes przedsiębiorstwa może mieć szerszy dostęp do wyników działania usługi niż szeregowy pracownik) jak i globalnym (można przydzielać określone prawa wybranym firmom-klientom Azure lub ogólnie wszystkim użytkownikom Internetu). W efekcie możliwe jest tworzenie serwisów obliczeniowych i informacyjnych i sprzedawanie praw dostępu do nich innym klientom Azure. Sama firma Microsoft planuje umieszczenie w ramach Azure najbardziej podstawowych, darmowych serwisów informacyjnych, na przykład zawierających nazwy państw, miast czy ulic.

Usługi Azure mają potencjalnie wielkie możliwości. W momencie, w którym istnieć będą dziesiątki lub setki darmowych lub płatnych usług podstawowych, stworzenie nowej, silnie zintegrowanej z pozos­tałymi usługi internetowej zostanie w zasadzie sprowadzone do „budowania z klocków”, tak lubianego przez programistów. Standaryzacja techniki dostępu umożliwi proste – bez ana­li­zo­wania API czy występowania o udostępnienie lub sprzedaż dokumentacji – łączenie ze sobą pokrew­nych usług. Alianse w stylu Allegro/Nasza-Klasa staną się nie wiadomością z pierwszych stron serwisów informacyjnych, lecz codziennością. Odetchną też programiści, z których barków zdjęte zostanie zadanie budowania usług podstawowych i zapełniania banków danych informacjami, które dawno już zostały wprowadzone do własnych baz przez dziesiątki innych podmiotów.

Z drugiej strony, Azure jest też źródłem zupełnie nowych problemów. Przede wszystkim, nowa technologia może oznaczać wzrost liczby usług dostępnych za opłatą — cóż zaś po takich usługach bezpłatnym, utrzymywanym przez entuzjastów serwisom internetowym. Wielu usług nie można umieścić w Azure nawet mimo najszczerszych chęci — prawodawstwo zabrania często na przykład przetrzymywania za granicą danych osobowych. Z niektórymi usługami może być problem: na przykład obliczenia naukowe związane z klonowaniem ludzi albo łamaniem systemów zabez­pie­czeń mogą być dozwolone w kraju macierzystym klienta Azure, lecz podlegać postępowaniu karnemu w USA czy innym kraju, w którym akurat obliczenia będą uruchamiane. Przedstawiciele firmy nie byli w stanie odpowiedzieć mi na pytanie, jak firma zabezpiecza się przed takimi przypad­kami i kto odpowiada za naruszenie lokalnego prawodawstawa.

Jest jeszcze jeden, poważniejszy problem: co ma uczynić firma, która uzależniła się od „chmury” Azure, w momencie powstania poważnego kryzysu politycznego, skutkującego przecięciem komuni­kacji sieciowej między krajem macierzystym firmy a USA? Albo w momencie ataku terro­rystycz­nego lub wielkiej klęski żywiołowej, paraliżujących większość komunikacji zagranicznej? Azure zapewnia możliwość lokalnego buforowania wielu odwołań do usług „chmury”, jednak prędzej czy później nastąpi odrzucenie nowych zapytań. Inna sprawa, że wyników obliczeń – a do „chmury” Azure można wrzucać nie tylko bazy danych, ale też własne fragmenty kodu .NET realizującego dowolne funkcje – często nie da się buforować, zależą bowiem nie tylko od danych wejściowych, ale też wielu czynników zewnętrznych.

Oczywiście, jeżeli ktoś decyduje się powierzyć swoje dane i obliczenia bliżej nieokreślonej sieci komputerowej należącej do prywatnego przedsiębiorstwa, musi mieć pewność, że nie dojdzie do utraty tych danych lub spowolnienia przetwarzania poniżej poziomu określonego w umowie. Firma Microsoft zabezpiecza się przed takimi problemami, wprowadzając nadmiarowość działania usług (co zapobiega typowym problemom wynikającym z awarii sprzętu i połączeń sieciowych). Ufność w pewność działania całego systemu jest tak wysoka, że każda umowa na korzystanie z Azure zawiera moduł SLA określający wysokość rekompensat finansowych za ewentualne prob­lemy z działaniem „chmury”. Nie zawsze jednak rekompensaty finansowe stanowią zadość­uczy­nienie za utracone zaufanie klientów; rekompen­sata nie pomoże też firmie, która z powodu awarii sieci lub poważnych problemów poli­tycz­nych przez tygodnie lub miesiące pozbawiona jest możli­wości korzystania z usług, na bazie których zbudowała swój system infor­matyczny.

Przy okazji omawiania Azure wspomniano o problemie spędzającym często sen z powiek progra­mistów: synchro­ni­zacji danych. Problem ten nabiera szczególnego znaczenia właśnie w połączeniu z usługami rozproszonymi Azure: przechowywanie danych wyłącznie gdzieś w Sieci w praktyce wyklucza stosowanie wielu urządzeń mobilnych, w szczególności klasy Pocket PC. Rozwiązaniem jest synchronizowanie danych, nie jest to jednak kwestia banalna. Jednoczesne zmiany może wprowadzać przecież wielu użytkowników (co stanowi źródło konfliktów). Nie można też liczyć na to, że użytkownicy będą wprowadzać zmiany do aktualnej wersji danych. W efekcie programiści często unikają rozwiązań wymagających synchronizacji danych lub rozwiązują kwestię w sposób prowizoryczny.

Na ratunek przychodzi im najnowsze wcielenie osnowy .NET Framework, zawierające klasy umożli­wia­jące synchro­ni­zo­wanie danych według kilku częstych scenariuszy. W skrajnym przy­padku – taki przypadek poka­zano w czasie prezentacji — wys­tarczy kilka wierszy kodu w C#, aby dokonać synchro­ni­zacji danych między kompu­terem osobistym a bazą prze­cho­wy­waną w ramach usługi Azure.

Z nowych narzędzi programistycznych zapre­zen­towano przede wszystkim Visual Studio 2010. Nowa wersja jest ściśle zintegro­wana z mecha­niz­mami analizo­wania błędów wykrywanych podczas wewnętrznych i zewnętrznych testów (ang. historic debugger). Możliwe jest rejestrowanie całego przebiegu działania programu (włącznie z wyglądem okien programu), by programista mógł bez wątpli­wości odtworzyć sekwencję operacji, która dopro­wa­dziła do wystąpienia błędu, przeanalizować stan pamięci programu w dowolnym momencie przed wystąpieniem błędu oraz określić stan poszczególnych wątków programu już w momencie pojawienia się błędu. Osoba testująca działanie programu może też sama oznaczyć momenty realizacji programu, w których coś działało nie po jej myśli, dopisując do znacznika własny komentarz.

Przedstawiono też platformę Oslo, umożliwiającą modelowanie procesów i aplikacji. Ciekawe jest, że modelowaniu podlegają nie tyle wszystkie operacje wymagane do realizacji danego procesu, lecz przede wszystkim wejście i wyjście procesu. Wewnętrzna implementacja zależy wyłącznie od progra­misty: dopóki dla danych wejściowych okreś­lonych w modelu uzyskuje się wyniki zgodne z modelem, wnętrze może mieć dowolną postać. Dodatkowo, modele Oslo można wykorzys­tywać do testowania modułów kodu.

Wspomniane zostały osnowy Windows Workflow FoundationWindows Communication Foundation, a konkretniej zmiany wprowadzane w ich najnowszych odsłonach związanych z .NET Frame­work 4.0. Osnowa WF 4.0 ma lepiej realizować różne scenariusze, do których – choć wbrew zało­żeniom projektowym – próbowano wykorzystywać wcześniejszą jej wersję. Zostanie też wprowa­dzona integ­racja z PowerShell.

Wszystkie języki programowania .NET zostały rozszerzone o obiektową reprezentację kontraktów (ang. code contracts). Kontrakty łączą cechy asercji oraz kodu weryfikacyjnego, umożliwiając zdefinio­wanie warunków wejściowych i wyjściowych oraz okreś­lenie rodzaju reakcji na niespełnienie tych warunków. Podobnie jak asercje, kontrakty mogą być wyłączane globalnie podczas kompilacji. Niestety, idea kontraktów wydaje się być czystym „lukrem składniowym”: to samo można przecież zrobić – i to często bardziej elastycznie – właśnie za pomocą asercji oraz kodu weryfikacyjnego. Kontrakty byłby cenne, gdyby możliwe było optymalizowanie ich wywołania i usuwanie ich z wnętrza pętli lub większej sekwencji odwołań do podprogramu. W momencie, gdy są zrealizowane jako zwykła klasa .NET, nie mają żadnej przewagi nad znanymi już doskonale programistom meto­dami wykry­wania błędów i podej­rzanych sytuacji — poza pewną stan­dary­zacją kodu.

W zakresie programowania interfejsów użytkownika zaprezentowano – nareszcie! – firmowy obiekt sterujący Windows Forms służący do tworzenia różnorodnych wykresów. Elementy tego typu od dawna składały się na ofertę wielu firm programistycznych (by wymienić choćby TeeChart firmy Steema Software); teraz stają się darmowym, opcjonalnym składnikiem osnowy .NET Framework. Niestety, podobnego elementu nie uświadczymy dla silnie promowanej biblioteki Windows Presen­tation Foun­dation — w zamian przedsta­wiciele firmy propo­nują korzys­tanie z pros­tych elementów graficz­nych powią­zanych dyna­micznie ze źródłami danych.

Z kolei elementem wprowadzanym w WPF, a nieobecnym w Windows Forms, jest DataGrid — rozbudowany element sterujący umożliwiający tabelaryzowanie różnego typu informacji. Każda z komórek tabeli DataGrid może zawierać tekst lub dowolny element graficzny. Komórki mogą też być interaktywne, umożliwiając zmianę zawartości „w miejscu”.

Rozbudowy doczekał się również stosun­kowo młody jeszcze pakiet graficzny Silverlight. Nowa wersja (Silverlight 2) zawiera szeroki wachlarz elementów graficznych, auto­matyzu­jących budowę bogatych graficznie inter­netowych aplikacji i prezentacji.

Sporą część prezentacji poświęcono następcy Windows Vista — Windows 7. Niestety, według mnie zbyt dużo mówiono o zmia­nach w inter­fejsie użytkow­nika (i to nie w samym inter­fejsie użytkow­nika, tylko w powłoce systemu i w mecha­niz­mach zarzą­dzania oknami), a za mało o zmianach funkcjo­nalnych czy modyfi­kac­jach jądra. Na szczęście wspomniano o jednej z ciekawszych funkcji nowego wcielenia Windows: usługach systemowych uruchamianych i zatrzymywanych w odpowiedzi na pewne zdarzenia (podłączanie i odłączanie urządzeń, próbę nawiązania połączenia z komputerem). Ten mechanizm, o ile zos­tanie poprawnie zaimple­men­towany i szeroko wykorzys­tany, może znacząco zmniej­szyć wyma­gania Windows co do pamięci opera­cyjnej i zakoń­czyć wreszcie temat dyskusji i porad „które usługi mogę wyłączyć by system Windows działał szybciej”.

Windows 7 ma szeroko wykorzystywać mający swoją premierę w pakiecie Office 2007 inter­fejs użytkow­nika bazujący na wstędze (ang. ribbon). Nie jestem wielbi­cielem tego typu inter­fejsów, według mnie klasyczne połą­czenie menu i pasków z przycis­kami jest znacznie wygod­niejszym i bardziej ekono­micznym (jeżeli chodzi o wykorzys­tywaną powierz­chnię ekranu) rozwiązaniem. Co jednak zdecydo­wanie mi się nie podobało, to sztuczne ograni­czenie licen­cyjne nałożone na inter­fejs wstęgowy: przed­sta­wiciele firmy jasno stwier­dzili, że mogą z niego korzystać wszystkie apli­kacje za wyjątkiem „niektórych programów open-source”. Znajduje to zresztą swoje potwier­dzenie w licencji biblio­teki obsługu­jącej wstęgi: aby móc z niej korzystać, nie wolno bezpoś­rednio konku­rować z pakietem Microsoft Office.

Inne nowe funkcje Windows 7 to obsługa tabli­czek wielo­doty­kowych (multi-touch-pad), przenie­sienie rastery­zacji czcio­nek True­Type z CPU do GPU, obsługa Clear­Type nie tylko w poziomie (jak to jest w Windows XP i Vista), ale również w pionie i szeroka obsługa Open­Type (w tym obsługa wielo­warian­towych krojów pisma).

Wymagania sprzętowe Windows Vista są na tyle duże, że sami przedsta­wiciele firmy w czasie prezen­tacji stwier­dzili, że celem Windows 7 – mimo wprowa­dzania nowej funkcjo­nal­ności – jest osiągnięcie na tym samym sprzęcie wydaj­ności nie gorszej, niż w przy­padku Visty. Niestety, pominięto porów­nania z Windows XP, a własnie systemu równie oszczęd­nego co XP oczekuje pewnie większość użytkow­ników. Na dzień dzisiejszy wiadomość jest zatem taka: nie będzie gorzej niż było, może nawet Windows 7 będzie szybszy niż Vista, ale nie liczcie na prześcignięcie XP.

Z ciekawostek: standardowy edytor WordPad, składnik Windows od czasów Windows 95, dotychczas obsługujący jedynie format RTF i starsze wersje formatu Microsoft Word, w Windows 7 będzie w stanie odczytywać i zapisywać dokumenty tekstowe ODF, generowane przez pakiet OpenOffice.org. Kwestią do zbadania pozos­taje stopień zgod­ności edytora ze wszystkimi możli­woś­ciami tego formatu, jednak już sam fakt implemen­tacji otwar­tego (i – co waż­niejsze – konkuren­cyjnego!) standardu jest ze strony koncernu bardzo pozy­tywnym posunięciem.

W pewnym sensie w Windows 7 wraca do życia projekt WinFS. Co prawda nie wspo­mina się tym razem wprost tej nazwy, jednak nowy Eksplo­rator Windows ma możliwość tworzenia „bibliotek plików” (nazy­wanych też czasami „sprytnymi folderami” — ang. smart folders) stano­wiących jakby efekt zapytania skiero­wanego do bazy danych. Biorąc pod uwagę, że powłoka systemu została znacząco rozbu­do­wana w zakresie obsługi meta­danych odczyty­wanych z wnętrza plików, możliwe będzie auto­ma­tycznie tworzenie zbioru plików spełnia­jących określone kryteria, na przykład zdjęć wykonanych z okreś­lonym stopniem otwarcia przysłony, sekwencji wideo o okreś­lonym czasie trwania czy piosenek autorstwa konkret­nego wykonawcy. Oczywiście, do każdego pliku można dołączać własne komen­tarze oraz ocenę punktową (która również może stanowić jedno z kryteriów wyszuki­wania).

Znaczące zmiany wprowadzono w protokole zdalnego dostępu RDP. Nowa wersja RDP umożliwia tworzenie wielu zdalnych pulpitów w ramach jednego połączenia (zdalna praca wielomonitorowa). Zwiększono też efektywność protokołu: przesyłanych jest mniej danych, a więc całość działa jeszcze szybciej. Największe różnice można zauważyć podobno przy stru­mie­nio­waniu obrazu wideo: nowa wersja RDP została tak napisana, aby jak najwięcej operacji związanych z przetwarzaniem i skalowaniem obrazu musiał wykonywać klient (węzeł sieci, który nawiązał zdalne połączenie), a nie centralny serwer terminali.

W nowej wersji Windows 7 zmodernizowany zostanie też pakiet usług inter­ne­towych IIS. Nowa wersja IIS ma możli­wość pros­tego dołą­czania rozsze­rzeń; wśród domyślnych rozsze­rzeń pojawia się – po raz pierwszy – moduł URL Rewrite, umożli­wia­jący two­rzenie skompliko­wanych, dyna­micznych serwisów WWW z wykorzys­taniem prostych adresów URL, pozba­wionych dziesiątków para­metrów HTTP. Rozbudo­wano też moduł usług strumie­niowych, umożli­wiając precyzyj­niejsze dozowanie ilości przesy­łanych danych (badania statys­tyczne wykazały bowiem, że użytkow­nicy często zamykają stronę WWW zawiera­jącą materiały multi­medialne po ogląd­nięciu zaledwie 40% całości materiału, a w tym czasie serwer zdążył już wysłać całą objętość danych, marnując w efekcie mnóstwo przepusto­wości łącza).


Poziom techniczny prezentacji przedstawianych na XXV spotkaniu Forum Architektów i Programistów był bardzo nierówny. Owszem, tym razem obeszło się bez poważniejszych błędów literowych, spowodowane to było jednak silnym zapożyczaniem z prezentacji przedstawianych w ramach PDC. W efekcie spora część slajdów zawierała informacje wyłącznie w języku angielskim lub – co gorsza – mieszankę języka angielskiego i polskiego. Oczywiście, język angielski nie stanowi problemu dla grupy docelowej spotkania, brak tłumaczenia jest jednak nieelegancki i świadczy o przykła­daniu małej wagi (a więc i poświę­caniu małej ilości czasu) do spotkania. Z drugiej strony trzeba przyznać, że materiały były przygoto­wane w nadmiarze i prelegenci stali przed trudnym zadaniem dostosowania się do preferencji audytorium (na początku spotkania padło pytanie, jaka tematyka najbardziej ciekawi uczestników) oraz do ilości dostępnego czasu (którego było zde­cy­do­wanie zbyt mało).

Z kwestii technicznych pragnę jednak podkreślić wyraźnie potrzebę stosowania poprawnej polszczyzny. Nie zwalnia z tego nawet techniczna tematyka prezentacji (mimo, że nie od dziś wiadomo, że osoby z wykształceniem technicznym często są na bakier z polszczyzną). Najpoważ­niejszym błędem było regularne stoso­wanie sformułowania „adresuje” w kontekście „ten moduł programu adresuje kwestię taką a taką”. Na Jowisza! Adresować można kopertę lub kartkę pocztową, ewentualnie działki budowlane lub komórki pamięci, nigdy jednak kwestie czy problemy. Program może rozwiązywać kwestię, realizować jakąś funkcję, ale nigdy nic nie zaadresuje! Inne, drobniej­sze kwestie to stoso­wanie kalek językowych „fremłork” zamiast „osnowa”, „serwis” zamiast „usługa” i „kompatybilność” zamiast „zgodność”.

W tym roku ma się odbyć jeszcze jedno spotkanie Forum Architektów i Programistów. Mam nadzieję, że również będę miał okazję uczestniczyć w tym sympozjum i przekazać Wam moje spojrzenie na jego tematykę.