piątek, 18 listopada 2011

Po obejrzeniu 135 sesji z Builda

Jako że na bieżąco, w miarę oglądania, niemal codziennie dzieliłem się “na żywo, ale w mailach” ze znajomymi, postanowiłem opublikować to w takim stanie surowym, bez retuszu (z uwagi na czas). Na bardziej usystematyzowane podsumowanie i na żywe aplikacje przyjdzie oczywiście czas. Te zapiski mają zwrócić uwagę jaką ciekawą i fajną platforma jawi się Windows 8 (jeśli ktoś sobie jeszcze tego wszystkiego nie przejrzał), że mamy “porozumienie ponad podziałami” , najnowsze osiągnięcia standardy, nowe API, a równocześnie łatwo wykorzystać rzeczy do tej pory stworzone, symbiozę kodu wyglądającego na kod zarządzany .NET, kodu w C++ i Java Script.

 

„Wizualne notatki” są wrzucane https://skydrive.live.com/#cid=DBCAF7311F080BA2&id=DBCAF7311F080BA2%212564

Po 31 mogę powiedzieć, że JS nie wydaje się straszny (przeważa na większości chyba że coś jest konkretnie na temat C#, XAML-a czy C++), i jest wiele fajnych świeżych koncepcji (np. sementic zoom, zaznaczanie przez przyjechanie w dół, obsługa systemu jest ciekawa). Zostało zrealizowanych wiele koncepcji, których Silverlight się nie doczekał - jak ItemClick, wirtualizacja danych (jest dostęp random – czyli tak jak u nas z suwakiem albo doczytywanie stopniowe), fajne kontrolki jak ListView, GridView, FlipView, FlyoutControl, JumpViewer/SemanticZoom z wbudowanymi animacjami, wirtualizacjami, gestami, predefiniowane tranzycje na Frame, panelu, content control lub Windows Phone się jeszcze nie doczekał - jak współdzielenie danych czy fajna integracja z searchem. Wiele koncepecji z Windows Phone zostało twórczo rozwiniętych, nie jest to kopia rozwiązań już istniejących tylko twórcza inspiracja (np. obsługa wiele templatów w kafelkach i znaczków, aktywacja aplikacji w wiekszej liczby przypadków, uproszczony cykl życia, urozmaicone capabilities, wiele opcji integracji z systemem). To tylko wybrane rzeczy, jedne z niewielu które zobaczyłem. IE10 i winRT tak samo procesują HTML5, co do HTML5 to na windows 8 okazało się bardzo wiele rzeczy możliwych - templatowanie, transformacje, gradienty, layouty, animacje, choć wiele z nich ma formę propercji CSS -ms-* -;)

Jedynie brakuje bindingu dwukierunkowego i obsługa notyfikacji na kolekcji jest dość trudna i złożona. Kontrolki pod HTML5 na windows8 albo są natywne albo z WinJS, wszsytkie mają template partsy, które np. można podmienić elementem w SVG, tak więc ostylowanie item-ów czy kontrolek nie jest dużym problemem. Obsługa gestów też jest nowa, jest założenie że się pisze pod dotyk, a obsługę myszy ma się dostać za darmo, unifikacja inputu.

Ostatnia rzecz - dla ludzi, którzy nie lubili do tej pory Blenda, teraz sporo UIBlend’a zainkorporowano do Visual Studio 11 (designer, property grida, narzędzia, creatory).

Odnośnie dotyku – snap pointy we Scrollvierze pozwalają zawsze zatrzymać się na całym obrazku, możemy też utrzymać kierunek przesuwania by nie wprowadzać zaburzeń w innym, w przypadku zooma (skala min, max, snap pointy - by coś nie przekroczyło). Zdarzenia dotykowe, manipulacje (z możliwością określenia rodzajów), zdarzenia pointerów. To czego brakowało przy (…), zresztą jest też Flipview do przesuwania itemów.

Nie ma resourców w dll-kach ani typowalnych resx-ów. Ale są resw (w C# i C++), ResourceMaanger i x:Uid w XAML + łatwa lokalizacja np. obrazków.

Pliki *.g.cs do code-behind ładują bezpośrednio plik XAML jako resource, nie jako resource z dll.

Pisanie własnych kontrolek w JS nadal nie jest takie wspaniałe, ale możliwe i nawet można to stylować podobnie jak się styluje stany wizualne.

Nie ma Linq na WinRT? –;)

LINQ w ogole nie ma, czy LINQ2SQL?

Linq oczywiście, że jest - przecież dałem nawet screenshota z ostatnio obejrzanej prezentacji. Tam konkretnie było LINQ to XML jak gość parsował otrzymanego XML-a z sieci Web pobranego przez async. To było przewrotne pytanie, bo pamiętam że jacyś goście z C# Insiders panikowali, że nie ma (był na końcu uśmieszek). W samej prezentacji też gość wspomniał o Linq.

Co do LINQ to SQL-a to pamiętajmy, że WinRT do podzbiór dla strony klienckiej i gdzieś słyszałem jak gość mówił, a łączeniu przez usługi.

Tak więc obstawiam że nie ma, ale w tym momencie nie jestem jeszcze na 100% pewien. Z drugiej strony są jakieś nowe rozwiązania dla lokalnego dostępu do danych.

Jedno z wielu zaleceń: „nie rozdzielaj sposobu obsługi dotyku i myszki” (np. zamiast gestu z rogu na dół prawy click).

Ciekawa obsługa drukowania (podglądy, stronicowania, dostarczanie widoków), tak jak wszystkiego (tj. współdzielenia danych, współdzielania plików, integracja z serachem, ustawieniami, urządzeniami) na zasadzie integracji z OS’em, a konkretnie jego panelem prawym. Kontrolki tekstowe mają sprawdzanie pisowni, podpowiedzi dla wybranego języka, jest otaczanie tekstem elementów (bardzo analogiczne do tego co w SL5).

Aplikacje Metro powinny obsługiwać różne widoki od najmniejzego poprzez standardowy, wiekszy i duzy, widok snap i opcjonalnie orientancję pionową. Nie jest to tylko pod tablety, ale także np. pod normalne desktopy, także z ekranami HD, a obsługa myszy powoduje że osobiście zacząłem się zastanawiać, czy jednak to nie zastąpi z czasem wszystkiego.

Vs - App thumbnail, emulator wypaśny emulujacy system, dotyk i gesty; websockety - TELEDICOM w HTML5, zdalny pulpit w przeglądarce; webworkery - lokalne serwisy na oddzielnym enginie JS; HTML5 Offline – appcache, DOM Storage, offline/online events, file & blob api, indexedDB, CSS3 - oprócz rzeczy popularnych efekty SVG, HTML5 canvas; Java Script patterns – na win8 WinJS helpers, biblioteki trzecie w 99%, files - known folders, file picker, Listview data-source adapter, contracts; debugowanie - póki co albo C++ albo JS (natomiast managed z JS mogą), kojarzenie programu z typem plików przez manifest, przesyłanie plików między urzadzeniami - tap & go, ciekawe kompomisy w typach WinRT by pogodzić .NET, C++ i JS (np. nie ma przeładowania metody gdy parametry różnią się tylko typami)

Renesans C++ - coraz więcej znowu się pisze w C++, najlepsza wydajność, urzadzenia mobilne; to nie już oldshoolowy język, to nowoczesny, efektywny język z automatycznym wnioskowaniem typów, z automatycznym zarządzaniem cyklem życia obiektów (nie trzeba pisać ręcznie delete), inteligetnymi typowalnymi wskaźnikami, wyrażeniami lambda, pętlami foreach i szukaniem i wiele innymi udogodnieniami. Oprócz tego rozszerzenia w WinRT C++ upraszczają jeszcze bardziej składnię. Tak więc może to być czarny koń na tegorycznym MTS -J Przy migracji nie jest wspierane w ogóle MFC i część ATL, natomiast inne rzeczy wystarczy wywoływać z poziomu komponentu winRT C++ i już można z nich bez niczego korzystać w innych programach w C++, C# czy JS.

Tak więc nie tylko renesans Java Script, ale i w renesans C++.

Za dwa lata ogłoszą renesans Pascala, albo Cobola i wszystko pod Windows15 się będzie w tym pisać –:)

Renesans DirectX - pełna „lustracja” gier i aplikacji 3D w VS 2011. Już nie będzie można powiedzieć „...coś w DX nie zadziałało”, „...nie wiemy co się stało w drugiej sekundzie, że pojawiła się różowa kropka”.

Teraz jest graficzny debugger nagrywający klatki i można znać historię każdego pixela, wykonanych na nim operacji, zdarzeń i obiektów graficznych, stosy też są.

Otrzymujemy też graficzny designer do pixel shaderów renderujący w czasie rzeczywistym! (układa się klocki oznaczające operacje i obserwujemy co się robi np. naszym modelem).

Dostajemy narzędzia graficzne, wsparcie dla HLSL, dds-ów, modeli. Inna sprawa że w Metro jedynie w C++ jest szablon dla DirectX.

Multimedia - bogata obsługa, jednolite api niezależne od języka, łatwo przekonwertować film do innego formatu czy go obciąć i działa to szybko (na GPU), kolejna fajna integracja z urżadzeniami (kontrakt play to - można od ręki np. film przesłać na TV)

Rzeczywiście wsparcie dla DirectX zapowiada się imponująco. Poza możliwością edycji plików tekstur (wraz z mip-mapami) i oglądania modeli na szczególny „+” zasługuje graficzny debugger. Pozwala nie tylko na śledzenie kolejnych etapów rysowania sceny, ale także pojedynczych pikseli. Szczególnie przyda się to przy rozbudowanych plikach shader-ów. Myślę, że jest to najbardziej oczekiwany dodatek. Shader designer też spoko, ale chyba będzie działał tylko na pixel-shaderach (?)

Media II - bookmarks, screenshots, language channels, background audio, różne strumienie, stereo 3D na obrazie video, własne rozszerzenia - np. własny format, smooth streaming, efekty audio i video - w postaci natywnych dll-ek C++/COM rejestrowanych lokalnie w manifeście danej aplikacji. Wydruki - także możliwość wprowadzania własnych opcji do okna dialogowego, drukowanie D2D za pośrednictwem XPS. Sensory - proste dane, surowe dane (akcelerometr, żyroskop), sensor fusion (compass, inclinometr, orientacja urządzenia). Już w Mango wymyślili wirtualny sensor na podstawie kilku fizycznych, tutaj ten pomysł rozwinęli dalej.

Web auth broker, łatwo integracja z serwisami tj. faceebook, klient http, syndykacji (rss, atompub), pobieranie i wysyłanie plików w tle. W kontekście... bez kontekstów –;)

File system – queries, libraries, search, metadata, file picker, access cache. WinRT sockets - TCP serwer I klient, UDP peer, WebSockets - like TCP & like UDP, proximity socket – TCP/Bluetooth (Tap & Go).

Tap & Go - marketingowo określane jako „komunikacja ludzi poprzez dotyk urządzeń” (komunikacja tych samych aplikacji ze sobą, wymiana kontentu, wiadomości).

Dane lokalne i roamingowe (jedna linijka). Dzięki roamingowi mogę sobie np. zacząć oglądać film na jednej maszynie, spauzować i od tego miejsca dokończyć sobie oglądanie na innej, jak i wiele innych na podstawie zapisu prostych wartości, słowników. Integracja z panelem konfiguracyjnym. Live SDK ma część dedykowaną Metro. API do Skydrive pozwala autentykować się, chodzić po folderach, pobierać informacje o plikach, wyświetlać obrazki, embedować dokumenty Office, odtwarzać video, współdzielić, usuwać pliki.

Marketplace pewnie każdy już widział (grupy, listę, szczegóły). Maksymalnie prosty. Dodam że IE 10 potrafi wykrywać odwołanie na stronie internetowej do aplikacji i wtedy pokazuje przycisk na app barze do niej.

Zaawansowany dotyk - także dostęp bardziej szczegółowy, z mozliwością ustalenia urzadzenia, dostęp do Metro-toucha także z poziomu Win32 , btw „right tap”: wszystko co może kojarzyć się z tym, czyli prawy click, tap & hold i z rysikiem.

Kompatybilność z Windows 7 - wbrew pozorom jednak nie jest to dokładnie ta sama stara „7” na desktopie. Są jednak pewne różnice – nie ma preinstalowanego .NET3.5 (jest 4.5), nie mozna używać GDI przy jawnie włączonym DX, ... . Za pomocą odpowiednich narzędzi można sprawdzić czy aplikacja jest kompatybilna.

Musze przyznac, ze fajnie sie czyta te Twoje maile – kazdego dnia z rana swieza dawka informacji o W8 J Dzieki

Wysyłanie i odbieranie SMS-ów, łatwe API dla Skydrive, łatwa obsługa przenośnych pamięci i urządzeń - np. pobranie kontaktów z dołączonego telefonu,

automatyczne wykrywanie i instalacja sterowników dla drukarek i nie tylko, roaming, dane użytkownika, single-sign-on (przez fakt zalogowania).

Komunikacja - syndykacja, zmiana stanu sieci, background transfer, web sockets, data writer, network cost information,

customize your app to network type, app installation with firewall rules (network capabilities)

świetny VS 2011 - solution explorer z elementami klas, nowe dla UI for finding/replacing, async message dialog, search, Windows 8 apps, DirectX apps,

unit tests in C++, driver development, Azure apps, HTML/CSS, JS, css snippets for multiple browsers, extract into user control, application lifecycle management

Aplikacje Metro dla urządzeń - przy podłączeniu urządzenia są pobierane z Marketplace i automatycznie instalowane, producent urzadzenia może zastrzec identyfikatory aplikacji, które mają do niego dostęp.

Producenci drukarek, kamer internernetowych, dostawcy mobilnego internetu mogą customizować ustawienia i opcje.

dla drukarki [core experience + print settings + notifications) + V4 Print Driver, printtasksettings contract],

kamery internetowej (start experience + settings np. efekty) [np. LifeCam - driver MFT(extension of camera driver), camera settings contract],

brandować połączenie internetowe - przedstawić ofertę, zarządzać kontem, obserwować koszty połączenia [integration with connection manager, app(plan, account, help, notifications) + broadband service]

Można też zrobić apliakcję skojarzoną z dowolnym urzadzeniem, wtedy nie będzie to rozszerzenie tylko w całości dostarczamy dla niego experience (np. czytnik kart kredytowych, telefon Nokia N8, wyświetlacz itd.).

Integracja z AutoPlay (uzytkownik może wybrać, co chce zrobić z danym urządzeniem), współdzielenie danych

Zoptymalizowane updaty dla .aapx – pobierane są tylko nowe elementy, trzymane są informacje o każdej składowej

C# & async, caller info attributtes ([callerfilepath],[callerlinenumber], [callermembername] – łatwo będzie teraz logować co się gdzie wywaliło, w jakim pliku, linijce, metodzie),

Roslyn / VS Studio Roslyn CTP – zajebiste rzeczy, budowanie kodu ze stringa, funkcji, internaktywna konsola dla C# - można wszystko dynamicznie budować na żądanie, inlcudować na żądanie,

łatwe generowanie i analiza kodu - co można wykorzystać w dodatkach generujących kod dla VS

Obsługa pióra - unifikacja z innymi tj. dotyk czy myszka, ale też fajne własne API - np. moduł do rozpoznawania pisma odręcznego

HTML5 validation (atrybutem można określić np. wymagalność pola czy wyrażenie regularne), jquery mobile

real-time streaming to network = media capture + network media sink (rozszerzenia) – video chat bez opóźnień ,

automatyczne wsparcie dla bluetooth audio devices, bluetooth call control, background audio, media focus

Media controls - MediaElement, MediaPlayer, CaptureElement, local library access -

query on music library, background audio (categories)

Oprócz aplikacji trial (limit czasowy - jedno ustawienie w market place lub ograniczony zbiór funkcjonalności) można także sprzedawać niezależnie elementy aplikacji/jej funkcjonalności po nabyciu samej aplikacji.

Emulacja dokonywania zakupu - możliwość łatwego przetestowania wszystkich konfiguracji licencji. IAsyncOperation<T>, IAsyncOperationWithProgress<T1, T2>. CSS - media queries (warunkowe umieszczenie stylu do różnych widoków np. snap view, full screen), automatyczna zmiana gestości pikseli w zależnosci od rozmiaru ekranu, możliwość zdefiniowania automatycznie podmienialnych wersji obrazka po konwencji nazewniczej. VS 11 – konsola JS, DOM Explorer, debugging, diagnozowanie wyjątków. Blend - wygodna analiza sumarycznego oddziaływania wszystkich stylów CSS na wygląd danego elementu (lista wg. hierarchii), łatwa możliwość edycji stylów, Live DOM (drzewo obiektów HTML, nawet tych automatycznie wygenerowanych), Interactive mode (możliwość uruchomienia aplikacji HTML na żywo, ale w designerze, potem można wyjść z tego trybu i np. przeedytować otwarte okno), panel pozwalający na łatwe przełączanie różnych widoków i rozdzielczości, panel styli i ich właściwości.

Frame Counter - odpowiedni klucz w rejestrze, przechwytywanie wyjątków - konfiguracja, dispatcher też jest,

mamy gotowe BaseUri, ikonki można łatwo mieć na podstawie odpowiednich kodów, lokalizacja x:Uid=resource {resource}.{propercja} np. w danym języku

oprócz tekstu można łatwo w zasobach powiedzieć by dodatkowo tekst miał także inne właściwości. WebView - podobne do kontrolki WebBrowser z Silverlight.

W panelu settings-ów możemy wyświetlić swoje UI nawet z animacją. Dekodowanie BitmapImage - jeśli obrazek jest duży, a ma być mały na stronie, to

można zlecić jego zdekodowanie do bardziej odpowiednich rozmiarów tak by zajmował mniej pamięci.

Unit testy - w Visual Studio 11 nowy Unit Test Explorer z modelem plug-inowym mogącym obsłużyć dowolny unitowy framework, unit testy także w kodzie natywnym w C++!

Ręczni testerzy też nie pozostają z gołymi rękami dzięki MS Test Manager z VS Studio Ultimate i MS Test Tools Adapter (usługa Windows współpracująca z test managerem).

Możemy połączyć się przez zdalny pulpit z systemem na tablecie, zainstalować tam aplikację, zweryfikować czy zachowuje się tak jak nam ktoś napisał, zgłosić buga robiąc łatwo screenshoty na aplikacji na zdalnej maszynie.

ARIA - standard accessability dla weba, <button> oraz <input type=”text”> w IE oraz kontrolki WinJS są „accessible”

Błedy sieciowe można diagnozować przy pomocy wyjątków w Visual Studio, narzedzia CheckNetIsolation sprawdzającego capabilities, a także takich jak Fiddler, Event Viewer (runtime events), NetMon.

WCF RIA Services w połączeniu z HTML5 działają na aplikacji Metro. WCF Data Services / ODATA mają bardzo dobre wsparcie w .NET w Metro, zdalne linq (jedynie proxy na razie trzeba generować z linii komend a nie z poziomu Visual Studio, jak ktoś bawił się WCF Data Services w wersji v2 to teraz pokazują to już w oparciu o v3, gdzie dodali kilka nowych możliwości). Zdarzenia zmiany layoutu i orientacji ekranu. Co ciekawe w metodzie nawigacji można przekazać też pojedynczy parametr z kodu nie poprzez składową w adresie (w przeciwieństwie dla Silverlight).

UI Automation - kto zna Silverlighta, to tutaj w przypadku aplikacji XAML-owych nie będzie zaskoczony, api jest tutaj analogiczne. W przypadku HTML5 mamy doczynienia ze standardem ARIA, który zdaje się i tak jest gdzieś mapowany na technologie MS. Mamy obsługę high-contrast - domyślne szablony domyślnie oferują odpowiednią zmianę kolorów, można też w oparciu o media queries odpowiednio definiować css-y, np. podmieniać obrazki. Z narzędzi mamy Inspect (przypomina moim zdaniem nawet dawnego ui spy’a jak ktoś tego używał) do obserwacji drzewa elementów, w tym apliakcji Metro. Drugie narzedzie UI Accessability Checker pozwala zweryfikować obecność odpowiednich definicji dla odpowiednich elementów w oknie np. odpowiednie parametry dla pola tekstowego.

Oczywiście konferencja BUILD to nie jedyne źródło wiedzy o programowaniu w Windows 8, od czego mamy choćby całkiem niezłą dokumentację do aplikacji Metro. Jeśli natrafię w niej na coś ciekawego czego nie było na konferencji, napiszę o tym.

Brak komentarzy: