niedziela, 22 stycznia 2012

Aplikacje Metro w Windows 8 - podsumowanie możliwości

Na początek mała ciekawostka - tak wygląda Windows 8 build 8180, mający już napis “Windows 8 Beta”, ale jeszcze betą nie będący. To ostatni build przed rozpoczęciem fazy Beta Ecrow. Podczas instalacji można zauważyć kilka zmian w stosunku do wersji z konferencji BUILD. Domyślnym kolor tła jest teraz niebiesko-szary (można oczywiście ustawić sobie inne tło). Niestety, mimo kilkukrotnych instalacji Visual Studio 11 Preview i elementów SDK dla Metro nie udało mi się póki co otrzymać instalacji Visual Studio pozwalającej na budowanie aplikacji Metro. Trudności nie dziwią zważywszy na fakt, że narzędzia dla Metro były dystrybuowane w czasach BUILD-a na specjalnej developerskiej odmianie x64 i bezwzględnie takiej wersji wymagały (choć podobno był nieoficjalny sposób by to częściowo obejść). Dobrze że zachowałem sobie obok poprzednią wersję Windows Preview z narzędziami, zresztą oficjalna beta coraz bliżej.

8180_1

Ale w sumie ten post miał być nie o tym –:) Postanowiłem zebrać tu i uporządkować całą masę informacji, jakie można było otrzymać po obejrzeniu sesji z BUILD i zapoznaniu się z dokumentacją MSDN, jak i dokumentami ją uzupełniającymi –:) Aby nie stracić na czytelności i nie zakopać się w szczegółach technicznych, ograniczam się głównie to zagadnień i funkcjonalności, nie wyszczególniając jak można je realizować (czasami są alternatywne podejścia między HTML5 a .NET/C++).

  • Rodzaje aplikacji
    • Metro (x86, x64, ARM)
    • Desktop (x86, x64)
  • Windows Runtime
    • nowe obiektowe API w C++ z projekcją na języki: C#, VB.NET, C++ (przyjmowanie konstrukcji i podstawowych typów, konwencji nazewniczych z danego języka/technologii)
    • metadane .winmd zgodne z metadanymi .NET
    • oparte na modelu COM (co nie jest w praktyce widoczne)
    • własne komponenty - definiowane w .NET i C++ i wykorzystywane z poziomu wszystkich języków
    • możliwość napisania projekcji na inne języki
    • możliwość wywoływania wybranych funkcji z Win32 API tam, gdzie nie możemy jeszcze skorzystać z API WinRT
  • Technologie
    • XAML + C#/VB.NET/C++
      • profil .NET przypominający Silverlight (drobne różnice w XAML, inne przestrzenie nazw, nowe funkcjonalności w kontrolkach np. podpowiadanie i spell checking w TextBox, czasami odpowiedniki dotychczasowych kontrolek - np. WebView i RichTextBlock , nowe kontrolki, domyślny wygląd Metro, brak niektórych funkcjonalności w UI - np. w bindingu, nie ma np. gradientu kołowego, przycinania obiektów, ImageBrush, zaokrąglonych rogów, efektów, własnych easing functions, grafiki 3D, czasami zmienione nieco klasy z core, problemy z INotifyPropertyChanged (2 wersje, zamiast ObservableCollection<T> używać ObservableVector<T> z przykładu), async z C#5, czasami nowe API - np. zdarzenia do pointerów zamiast myszy, dostęp do danych na dysku - odpowiedni storage, operacje na plikach tylko asynchroniczne, inny model aplikacji)
      • uproszczony C++ np. automatyczne zarządzanie pamięcią^, przypomina C#, biblioteki znane z C++ (STL, Bust itp.)
    • HTML5 + JS
      • podstawy
        • standardy i technologie HTML5 (z uwagi że jest to aplikacja natywna czasami występują pewne różnice w zachowaniu, hostuje ją dedykowany proces, który oferuje nadzbiór możliwości oferowanych przez Internet Explorer 10 np. dostęp do WinRT, czasami też trzeba implementować w HTML-u w określony sposób by aplikacja chodziła wydajniej - np. mimo nawigacji fizycznie mamy model 1-stronicowy, brak możliwości hostowania innych technologii za wyjątkiem kilku kontrolek ActiveX Microsoftu)
        • WinJS (fragmenty, nawigacja, operacje asynchroniczne, predefiniowane i własne kontrolki, binding, szablony w listach, stylowanie kontrolek - parts, dostęp do funkcjonalności systemowych)
      • czasami niektóre mniej podstawowe funkcjonalności mają inaczej rozwiązane API niż w przypadku .NET
    • DirectX C++ (gry)
  • Capabilities
  • Manifest & package
  • Splash screen
  • Narzędzia
    • Microsoft Visual Studio 11 Express for Windows Developer Preview
    • Symulator (całkiem zaawansowany, wiele rozdzielczości, emulacja gestów multi-touch)
    • Blend 5 Preview
  • Ekran
    • wykrywanie orientacji: Landscape, Portrait
    • wykrywanie layoutu: Snapped, Filled, FullScreen
    • wykrywanie rozdzielczości: urządzenia od dużych ekranów HD do slatów - obsługa różnych predefiniowanych rozdzielczości, pixel density
  • Wejście
    • Dotyk/mysz/pointer
    • Gesty i manipulacje
    • Ink (pointer API, zbieranie, rozpoznawanie pisma odręcznego)
    • Klawiatura
    • Funkcjonalności
      • przełączanie między aplikacjami (ruch od lewej krawędzi)
      • snapping
      • charms (ruch od prawej krawędzi / Window+C)
      • aplikacji/wyświetlanie appbar (ruch od dolnej lub górnej krawędzi)
      • zaznaczanie elementu w kolekcji (krótki ruch w dół, długi przeciąga)
      • semantic zoom (pinch & strength powoduje zmianę wizualnego prezentowania pogrupowanej kolekcji na bardziej odpowiedni dla danej skali)
  • Nowe kontrolki
    • ApplicationBar
    • CarouselPanel
    • CaptureElement
    • Flyout
    • FlipView
    • GridView (grupowanie danych)
    • JumpViewer / SemanticZoom
    • ListView (wirtualizacja danych – 2 sposoby)
    • MediaPlayer
    • PopupMenu
    • ProgressRing
    • Rating
    • RichTextBlock
    • SettingsPane
    • ToggleSwitch
    • VariableSizedWrapGrid
    • WebView i WebViewBrush
    • WrapGrid
  • Animacje
    • Predefiniowane  JS
      • Nawigacja (enterPage, transitionPage)
      • Content (transitionContent, reveal / hide, reposition, crossFade, createPeekAnimation dla tile, updateBadge)
      • Uzupełnienia (showPopup / hidePopup, showEdgeUI / hideEdgeUI, showPanel / hidePanel, fadeIn / fadeOut)
      • Kolekcje (createAddToListAnimation / createDeleteFromListAnimation, createAddToSearchListAnimation / createDeleteFromSearchListAnimation, dragSourceBegin / dragSourceEnd, dragBetweenEnter / dragBetweenLeave)
      • Wybieranie (pointerUp / pointerDown, crossSlideReveal, crossSlideSelect / crossSlideDeselect)
    • Predefiniowane .NET/C++
      • Transition animations: AddDeleteThemeTransition, ContentThemeTransition, EntranceThemeTransition, ReorderThemeTransition
      • Theme animations: CrossSlideBackThemeAnimation, CrossSlideHintThemeAnimation, DropTargetItemThemeAnimation, FadeInThemeAnimation, FadeOutThemeAnimation, PopInThemeAnimation, PopOutThemeAnimation, RepositionThemeAnimation, SelectDownThemeAnimation, SelectUpThemeAnimation, SplitCloseThemeAnimation, TapDownThemeAnimation, TapUpThemeAnimation, SplitOpenThemeAnimation
    • Własne animacje (animacje niewykonywane w osobnym wątku trzeba jawnie aktywować)
  • Izolacja aplikacji
  • Cykl życia aplikacji
    • stany: uruchomiona, uśpiona, zakończona
    • aplikacja może być uruchamiana przy bardzo dużej liczbie scenariuszy
      • kamera
      • contact picker
      • urządzenie (AutoPlay)
      • plik danego rodzaju
      • file picker
      • typowe uruchamianie (z okna startowego)
      • zadanie drukowania
      • protokół danego rodzaju
      • wyszukiwanie
      • cel dla operacji wysyłania
      • cel dla operacji współdzielenia 
  • Taski w tle
    • predefiniowane usługi
      • audio w tle
      • transfer plików w tle (możliwość mierzenia kosztów i wznawiania; protokoły - HTTP, HTTPS, FTP; file schema; wsparcie dla autentykacji i własnych nagłówków HTTP)
      • notyfikacje push
    • własne
      • do krótkich zadań (najczęściej na potrzeby komunikacji)
      • aplikacja musi być na lock screen
      • uruchamiane są w odpowiedzi na predefiniowane triggery (InternetAvailable, InternetNotAvailable, LockScreenApplicationAdded, LockScreenApplicationRemoved, NetworkNotificationChannelReset, NetworkStateChange, ServicingComplete, SessionConnected, SessionDisconnected, SessionStart, SmsReceived, TimeTrigger, TimeZoneChange, UserAway, UserPresent) i przy predefiniowanych warunkach (InternetAvailable, InternetNotAvailable, SessionConnected, SessionDisconnected, UserNotPresent, UserPresent)
      • uruchamianie w dedykowanym, oddzielnym procesie lub w procesie aplikacji
      • wszystkim taskom danej aplikacji są przydzielane zasoby procesora na 2s z 15 minut, nie liczy się tu czas oczekiwania
      • taskiem może być dll-ka dołączona do projektu aplikacji lub plik z JS!
  • Charms
    • Search (query suggestions, result suggestions, customizacja)
    • Share (dane: tekst, URI, HTML, sformatowany tekst, bitmapy, pliki, własne formaty, asynchroniczność, możliwość prezentowania postępów, wysyłanie do aplikacji lub urządzeń, możliwa realizacja asynchroniczna i z delegatem, po udanym przekazywaniu możliwość zwrócenia quicklinka)
    • Devices
      • PlayTo - wysyłanie obrazu i dźwięku m.in do TV, głośników
      • drukowanie
      • wysyłanie do urządzenia z Windows 8 w pobliżu
    • Settings (możliwość zdefiniowania wyglądu zupełnie po swojemu, dodania animacji)
  • Kontrakty
    • AutoPlay Device
    • AutoPlay Content
    • Background tasks
    • Camera settings
    • Certificates
    • Contact picker
    • File picker
    • File type associations
    • Game Explorer
    • Print Task Settings
    • Protocol
    • Search
    • Send target
    • Share target
    • User tile provider
  • Dane aplikacji
    • Dostęp do systemu plików
      • pliki: aplikacji, lokalne (obrazki, muzyka, video, dokumenty), na urządzeniach przenośnych i w sieci, w Internecie, udostępniane przez inne aplikacje
      • nowe API dla plików (typowe operacje w postaci asynchronicznej; dostęp do metadanych i miniatur; typy danych: URI, strumień, blob, plik – łatwa konwersja między nimi; ListView datasource adapter - prezentacja metadanych, automatyczne wsparcie dla wirtualizacji, automatyczne ładowanie miniatur, automatyczne przechwytywanie notyfikacji)
      • File Picker
    • Foldery
      • Lokalne
      • Roaming
      • Temp
    • Dane sesji
  • Kafelki (square/wide, badges, kolejkowanie notyfikacji, secondary tiles)
  • Notyfikacje (tile, badge i toast - krótkie i długie z dźwiękiem; lokalne, planowane i push)
  • Lokalizacja geograficzna
    • standardowo na podstawie Wi-Fi lub adresu IP, możliwość zwiększenia precyzji dzięki GPS
    • ustawienia administratora, użytkownika i aplikacji
    • standard HTML5/Windows API
  • Sensory
    • akcelerometr
    • żyroskop
    • inklinometr
    • kompas
    • natężenie światła
    • orientacji (złożenie wyników z kilku fizycznych sensorów)
    • orientacji prostej (orientacja ekranu)
    • GPS (przy lokalizacji geograficznej)
    • NFC (przy proximity)
  • Urządzenia
    • enumeracja urządzeń
    • monitorowanie dodania nowego urządzenia, usunięcia, zmiany
    • enumeracja kontenerów
    • ustalanie miejsca urządzenia (np. czy kamera jest z przodu czy z tyłu)
    • wyświetlanie ikony urządzenia
    • wbudowane funkcjonalności (np. drukowanie, PlayTo, wysyłanie, komunikacja; możliwości rozszerzeń dla niektórych)
    • kamera internetowa
    • urządzenia przenośne (zapisywanie i odczytywanie plików)
    • SMS (wysyłanie i odbieranie)
  • Drukowanie (z obsługą podglądu i paginacji, możliwość konfiguracji liczby i kolejności opcji na oknie dialogowym)
  • Tap & Go / Proximity (wymiana informacji pomiędzy 2 urządzeniami przez ich dotyk lub zbliżenie)
    • przykłady: wymiana linków i obrazków, gra z wieloma użytkownikami, subskrypcja i publikowanie wiadomości
    • zetknięcie 2 urządzeń - szybka wymiana danych lub zainicjalizowanie dłuższej komunikacji opartej na TCP/IP, Wifi-Direct lub Bluetooth
    • wysyłanie i odbieranie prostych wiadomości
    • peer-to-peer: połączenie się z tą samą aplikacją na innym komputerze (zostaje uruchomiona jeśli nie stało się wcześniej, gdy nie jest zainstalowana następuje automatyczne przekierowanie na odpowiednie miejsce w Windows Store)
    • wykorzystanie kontraktu Share do przesyłania plików
  • Multimedia
    • Dostęp do metadanych plików multimedialnych
    • Automatyczne rozpoznawanie urządzeń Bluetooth audio
    • Odtwarzanie (w tym playlisty, wybór ścieżki audio, Stereo3D video, efekty audio i video, wybór urządzenia wyjścia audio - np. przez Bluetooth, zabezpieczenia cyfrowe, wsparcie dla czasu rzeczywistego na potrzeby komunikacji i gier, tryby zoom i horyzontalny mirror dla video)
    • Audio w tle (hierarchie odtwarzania)
    • Przechwytywanie (kamera i mikrofon, zapis do obrazka, nagrywanie audio i video z możliwością ustawień niektórych parametrów jak np. jasność, kontrast, obrót, efekt stabilizacji obrazu)
    • Konwertowanie (konwertowanie plików audio i video do innego formatu i innej rozdzielczości, przycinanie, wprowadzanie trwałego efektu)
    • Strumieniowanie
      • PlayTo (nadawca, odbiorca: telewizory, głośniki - WD Live Hub (firmware: 2.07.17) i Onkyo AV Receivers (modele certyfikowane dla Windows 7), Media Player (od Windows 7), aplikacja Metro)
      • obrazu z kamery w sieć (customowy sink do realizacji video chata)
    • Dostęp do serwerów multimedialnych
    • Planowane: Smooth Streaming SDK, PlayReady
    • Własne rozszerzenia w C++/COM (własne formaty, kodeki, zabezpieczenia, efekty - przy odtwarzaniu i przechwytywaniu; dostępne tylko wraz z daną aplikacją)
  • AutoPlay
    • WPD\ImageSource
    • CameraMemoryOnArrival
    • WPD\AudioSource
    • WPD\VideoSource
    • StorageOnArrival
    • ShowPicturesOnArrival
    • PlayMusicFilesOnArrival
    • PlayVideoFilesOnArrival
    • MixedContentOnArrival
    • PlayDVDMovieOnArrival, PlayBluRayOnArrival, PlayVideoCDMovieOnArrival, PlaySuperVideoCDMovieOnArrival
    • PlayCDAudioOnArrival, PlayDVDAudioOnArrival
    • PlayEnhancedCDOnArrival, PlayEnhancedDVDOnArrival
    • HandleCDBurningOnArrival, HandleDVDBurningOnArrival, HandleBDBurningOnArrival
    • UnknownContentOnArrival
  • Odpalanie domyślnej aplikacji dla danego rodzaju pliku lub protokołu
  • Komunikacja
    • Http
      • HttpClient i HttpWebRequest
      • Syndykacja RSS i AtomPub
      • web serwisy SOAP (WCF)
    • sokety
      • StreamSocket (klient, TCP)
      • StreamSocketListener (serwer, TCP)
      • DatagramSocket (peer, UDP)
      • StreamWebSocket (klient, websocket typu TCP)
      • MessageWebSocket (klient, websocket typu UDP)
      • ProximityStreamSocket (peer, TCP lub Bluetooth)
      • SSL
    • monitorowanie statusu i kosztów połączenia
    • WebAuth Broker
    • OAuth
  • Roaming (różne ustawienia)
    • ustawienia i pliki (podobnie jak w lokalnym storage, synchronizację można wykorzystać np. do kontynuowania rozpoczętego zadania na innej maszynie)
  • Lokalizacja (nowe podejście, lokalizacja elementów manifestu analogiczna do innych miejsc)
  • Aplikacje Metro dla urządzeń (automatycznie się pobierają z Marketplace lub z lokalnego nośnika i instalują po zainstalowaniu danego urządzenia w systemie)
    • kamera internetowa (rozszerzenia: efekty obrazu, ustawienia specyficzne dla danego urządzenia)
    • drukarka (rozszerzenia: ustawienia, notyfikacje; wymagane sterowniki V4)
    • urządzenie przenośne wspierające WPD API / MB SIM (rozszerzenia)
    • specjalizowane (przenośne, sieciowe, pamięci masowej, I/O, inne  np. kamera, smartphone, czytnik kart kredytowych, czytnik eBooków)
  • Aplikacje Metro dla połączeń internetowych w urządzeniach mobilnych (wybór planu, zarządzanie kontem, pomoc, notyfikacje)
  • Integracja z wyszukiwarką Bing (rejestrowanie aplikacji, tak by pojawiała się w wynikach wyszukiwania, w których znajduje się dana strona Web, Bing uruchamia aplikację z wyników poszukiwań)
  • Live Services SDK
    • Single Sign On (po zalogowaniu do Windows)
    • Łatwa integracja z Skydrive, Hotmail, Messenger
  • Kryptografia (m.in obsługa SSL, obsługa certyfikatów - zapis i odczyt w obrębie aplikacji, przy odpowiednim capability możliwy odczyt na poziomie systemu, także tych z urządzeń przenośnych, co pozwala realizować biznesowe aplikacje np. z bankowości, możliwość instalacji przez manifest lub API, możliwość rozszerzeń)
  • Accessability (UI Automation/Web-ARIA)
  • Unit testy (aplikacje XAML)
  • Dystrybucja
    • Sposoby
      • Windows Store (trial apps & in-app purchase, do 5 komputerów)
      • Enterprise
    • Windows App Certification Kit (testowanie przed wydaniem)
    • Extensions SDKs
      • Framework extension SDKs (przykład: C runtime SDK, w aplikacji zawarta zależność w manifeście, przy uruchomieniu aplikacji framework jest dociągany z Windows Store)
      • Non-framework extension SDKs (nasze biblioteki lub jakiegoś dostawcy, dystrybuowane razem z aplikacją, możliwość instalacji jako rozszerzenie VSIX)

Uważam że najbardziej ciekawe są: idea WinRT, funkcjonalności w UI, taski w tle, multimedia, kontrakty, proximity, roaming, obsługa urządzeń, aplikacje dla urządzeń i dla operatorów internetowych.

2 komentarze:

prz pisze...

Czy to znaczy że nie będzie technologii XNA ??

Marcin Kruszyński pisze...

Póki co nigdzie nie widać, by została przewidziana w aplikacjach Metro. Do prawdziwego 3D w tych aplikacjach jedyną opcją jest DirectX w niezarządzanym C++ (na pocieszenie fakt, że ten C++ ma sporo udogodnień, np. automatyczne zarządzanie pamięcią)