13 listopada 2008 roku (czwartek) miało miejsce XXV spotkanie Forum Architektów i Programistów, organizowanego w siedzibie polskiego oddziału Microsoft w Warszawie. Sympozjum miało na celu przybliżenie zakresu tematyki prezentowanej 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 programowania. 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 niezawodnych. Z drugiej strony narzut wydajnościowy i pamięciowy wszelkich środowisk angażujących maszynę wirtualną ciągle skłania do wykorzystywania 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 przygotowana 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 (ulokowane 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 przechowywane 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 komputery znajdują (choć jest możliwe wyrażenie swoich preferencji co do obszaru geograficznego). Po prostu określa swoje wymagania, dostarcza kod i dane, a później — na bieżąco lub po zakończeniu długotrwałych obliczeń – pobiera wyniki.
Najważniejszym elementem Azure jest standaryzacja dostępu do danych. Każda usługa wykonywana 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 zabezpieczonych 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 pozostał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 analizowania API czy występowania o udostępnienie lub sprzedaż dokumentacji – łączenie ze sobą pokrewnych 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 zabezpieczeń 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 przypadkami 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 komunikacji sieciowej między krajem macierzystym firmy a USA? Albo w momencie ataku terrorystycznego 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 problemy z działaniem „chmury”. Nie zawsze jednak rekompensaty finansowe stanowią zadośćuczynienie za utracone zaufanie klientów; rekompensata nie pomoże też firmie, która z powodu awarii sieci lub poważnych problemów politycznych przez tygodnie lub miesiące pozbawiona jest możliwości korzystania z usług, na bazie których zbudowała swój system informatyczny.
Przy okazji omawiania Azure wspomniano o problemie spędzającym często sen z powiek programistów: synchronizacji 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żliwiające synchronizowanie danych według kilku częstych scenariuszy. W skrajnym przypadku – taki przypadek pokazano w czasie prezentacji — wystarczy kilka wierszy kodu w C#, aby dokonać synchronizacji danych między komputerem osobistym a bazą przechowywaną w ramach usługi Azure.
Z nowych narzędzi programistycznych zaprezentowano przede wszystkim Visual Studio 2010. Nowa wersja jest ściśle zintegrowana z mechanizmami analizowania 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ątpliwości odtworzyć sekwencję operacji, która doprowadził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 programisty: 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 wykorzystywać do testowania modułów kodu.
Wspomniane zostały osnowy Windows Workflow Foundation i Windows Communication Foundation, a konkretniej zmiany wprowadzane w ich najnowszych odsłonach związanych z .NET Framework 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ż wprowadzona integracja 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 zdefiniowanie 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 metodami wykrywania błędów i podejrzanych sytuacji — poza pewną standaryzacją 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 Presentation Foundation — w zamian przedstawiciele firmy proponują korzystanie z prostych elementów graficznych powiązanych dynamicznie 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ż stosunkowo młody jeszcze pakiet graficzny Silverlight. Nowa wersja (Silverlight 2) zawiera szeroki wachlarz elementów graficznych, automatyzujących budowę bogatych graficznie internetowych 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 zmianach w interfejsie użytkownika (i to nie w samym interfejsie użytkownika, tylko w powłoce systemu i w mechanizmach zarządzania oknami), a za mało o zmianach funkcjonalnych czy modyfikacjach 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 zostanie poprawnie zaimplementowany i szeroko wykorzystany, może znacząco zmniejszyć wymagania Windows co do pamięci operacyjnej 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 interfejs użytkownika bazujący na wstędze (ang. ribbon). Nie jestem wielbicielem tego typu interfejsów, według mnie klasyczne połączenie menu i pasków z przyciskami jest znacznie wygodniejszym i bardziej ekonomicznym (jeżeli chodzi o wykorzystywaną powierzchnię ekranu) rozwiązaniem. Co jednak zdecydowanie mi się nie podobało, to sztuczne ograniczenie licencyjne nałożone na interfejs wstęgowy: przedstawiciele firmy jasno stwierdzili, że mogą z niego korzystać wszystkie aplikacje za wyjątkiem „niektórych programów open-source”. Znajduje to zresztą swoje potwierdzenie w licencji biblioteki obsługującej wstęgi: aby móc z niej korzystać, nie wolno bezpośrednio konkurować z pakietem Microsoft Office.
Inne nowe funkcje Windows 7 to obsługa tabliczek wielodotykowych (multi-touch-pad), przeniesienie rasteryzacji czcionek TrueType z CPU do GPU, obsługa ClearType nie tylko w poziomie (jak to jest w Windows XP i Vista), ale również w pionie i szeroka obsługa OpenType (w tym obsługa wielowariantowych krojów pisma).
Wymagania sprzętowe Windows Vista są na tyle duże, że sami przedstawiciele firmy w czasie prezentacji stwierdzili, że celem Windows 7 – mimo wprowadzania nowej funkcjonalności – jest osiągnięcie na tym samym sprzęcie wydajności nie gorszej, niż w przypadku Visty. Niestety, pominięto porównania z Windows XP, a własnie systemu równie oszczędnego co XP oczekuje pewnie większość użytkownikó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 pozostaje stopień zgodności edytora ze wszystkimi możliwościami tego formatu, jednak już sam fakt implementacji otwartego (i – co ważniejsze – konkurencyjnego!) standardu jest ze strony koncernu bardzo pozytywnym posunięciem.
W pewnym sensie w Windows 7 wraca do życia projekt WinFS. Co prawda nie wspomina się tym razem wprost tej nazwy, jednak nowy Eksplorator Windows ma możliwość tworzenia „bibliotek plików” (nazywanych też czasami „sprytnymi folderami” — ang. smart folders) stanowiących jakby efekt zapytania skierowanego do bazy danych. Biorąc pod uwagę, że powłoka systemu została znacząco rozbudowana w zakresie obsługi metadanych odczytywanych z wnętrza plików, możliwe będzie automatycznie tworzenie zbioru plików spełniają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 konkretnego wykonawcy. Oczywiście, do każdego pliku można dołączać własne komentarze oraz ocenę punktową (która również może stanowić jedno z kryteriów wyszukiwania).
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 strumieniowaniu 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 internetowych IIS. Nowa wersja IIS ma możliwość prostego dołączania rozszerzeń; wśród domyślnych rozszerzeń pojawia się – po raz pierwszy – moduł URL Rewrite, umożliwiający tworzenie skomplikowanych, dynamicznych serwisów WWW z wykorzystaniem prostych adresów URL, pozbawionych dziesiątków parametrów HTTP. Rozbudowano też moduł usług strumieniowych, umożliwiając precyzyjniejsze dozowanie ilości przesyłanych danych (badania statystyczne wykazały bowiem, że użytkownicy często zamykają stronę WWW zawierającą materiały multimedialne po oglądnię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 przepustowoś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ładaniu 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 przygotowane 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 zdecydowanie 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 stosowanie 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, drobniejsze kwestie to stosowanie 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ę.