czwartek, 12 grudnia 2013

C# 6.0 - pierwsze pogłoski

Jaka jest przyszłość C#?  Dziś wpadł mi link http://damieng.com/blog/2013/12/09/probable-c-6-0-features-illustrated przekazany przez kolegę. Mimo, że na oficjalnych blogach nic nie znalazłem, o tyle natrafiłem na streszczenie jednej z rozmów z BUILD 2013:  http://wesnerm.blogs.com/net_undocumented/2013/07/anders-on-c-60-at-build-2013.html.  Jest to odpowiedź na wątpliwości na temat przyszłości C#, .NET i “Roslyn”. Jak wszystko dobrze pójdzie to .NET 5 będzie hulać na “Roslyn”, a C# nabierze nowych właściwości w oparciu o doświadczenia z TypeScript, a także takie języki jak F# czy Scala.

Ale wróćmy do pierwszego linka i rzućmy okiem na prezentowane propozycje składniowe.

1. Primary Constructors

Zapis   public Point(set int x, set int y) lepiej do mnie trafia. Przypomina mi konstrukcję z TypeScript. Czemu składnia nie może być tak prosta jak w tym języku?

2. Readonly auto properties

public int X { get; } = x;

Ta składnia średnio mi się podoba. Jakoś tak nadmiarowo…

3. Static type using statements

using System.Math; ... public double A { get { return Sqrt(Round(5.142)); } }

To jest super. Od zawsze publiczna statyczna metoda wydawała się tak naprawdę metodą poza klasą.

4. Property Expressions

public double Distance => Math.Sqrt((X * X) + (Y * Y));

To też mi się bardzo podoba. Jestem na tak.

5. Method Expressions

public Point Move(int dx, int dy) => new Point(X + dx, Y + dy);

Jakby coś pośredniego między wyrażeniem lambda a metodą z ciałem. Kojarzy się z TypeScript. Jestem na tak.

6. Params for enumerables

Do(someEnum); public void Do(params IEnumerable<Point> points) { ... }

Podzielam obawy zapisane przy tym punkcie. Składnia natomiast jest jasna.

7. Monadic null checking

var bestValue = points?.FirstOrDefault()?.X ?? -1;

Nie trzeba będzie już robić dużo if-ów i pomocniczych zmiennych. Fajna sprawa.

8. Constructor type parameter inference

var x = new MyClass(1, "X");

Znowu uproszczenie dla klas generycznych. Jestem na tak.

9. Inline declarations for out params

int.TryParse("123", out int x);

Też świetna sprawa. Zawsze mi przeszkadzały dwie linijki.

Ciekawe, czy nowy C# trafi do Windows 8.2 (Threshold) ? Nowy Windows ma mieć wersję na smartfony i tablety (połączenie Windows Phone i Windows RT) oraz wersje dla użytkowników stacjonarnych, w której aplikacje Windows Store będą mogły wyświetlać się w normalnym oknie z poziomu pulpitu. Tak więc szykują się ciekawe zmiany zarówno w C#, .NET, jak i w Windows.

niedziela, 1 grudnia 2013

Programista 11/2013: “Windows 8.1 okiem programisty”

Miło poinformować, że mój artykuł o Windows 8.1 został opublikowany w najnowszym świątecznym wydaniu pisma “Programista”. Gazetę można nabyć drogą elektroniczną lub tradycyjnie na półce.

Programista 11/2013 (18)  

To moja trzecia, najdłuższa publikacja na łamach tego pisma. Tym razem spojrzałem wnikliwie na Windows 8.1 zarówno z pozycji ogólnosystemowego Windows Runtime API, z perspektywy aplikacji Windows Store, jak i desktopowych. Najwięcej uwagi poświęciłem oczywiście dwóm światom Windows Store - XAML oraz HTML5. Czynię dużo aluzji do Windows 8, WPF czy Silverlight. Z takim bagażem przeszłości po prostu nie umiem spojrzeć już na najnowsze API inaczej…  W układaniu tekstu pomogły mi zarówno zmigrowane dotychczasowe rozwiązania w XAML i HTML5, jak również zupełnie nowe kawałki kodu. Cieszę, że udało mi się wszystko zrealizować, jak sobie założyłem. Powstał dość szczegółowy i precyzyjny obraz nowego systemu, oczywiście jak na gazetę. Inaczej powstałaby już książka –:) W każdym miejscu stawiałem na sedno sprawy, unikałem powtórzeń i zbytniego przegadania, chyba że trzeba było do czegoś nawiązać…

Zapraszam do lektury!

Hub1  Hub2

piątek, 15 listopada 2013

Blend dla HTML5 - animacje

Zgodnie z zapowiedzią najbliższy post miał być o animacjach w Blend i tak też będzie. Weterani XAML, do których się zaliczam, cieszyli się już przy WPF edytorem animacji w Blend, czyli 7 lat temu. W aplikacjach HTML5 animacje CSS3 często pisze się dziś ręcznie. Nie jest to trudne, ale z pewnością wygodniej byłoby je podglądać i modyfikować za pomocą narzędzi. Twórcy najnowszej wersji Blend postanowili ułatwić życie developerom aplikacji Windows Store i zaadaptowali na potrzeby CSS3 edytor znany z XAML.

Przejdźmy do konkretów. Pięć lat temu robiłem pierwsze szkolenie z Silverlight i wtedy pokazywałem animacje klatkowe. Ludzik skakał w kilku etapach, w każdym z nich z inną charakterystyką ruchu… Dziś zrobimy sobie podobne demo. Zamiast ludzika użyjemy samej głowy (o nazwie monster), którą mam zapisaną w postaci Path w SVG. Tworzymy regułę CSS dla #monster i w zakładce Animation po prawej stronie dodajemy animację. Ustawiamy dla niej kilka parametrów np. czas trwania (duration), ilość powtórzeń (iteration-count), sposób kończenia (fill-mode, wartość forwards pozostawia animowany obiekt w takim stanie, w jakim był tuż po zakończeniu animacji), kierunek (direction, opcja alternate przy większej ilości iteracji oznacza wykonywanie animacji na przemian - normalnie i w odwrotnej kolejności).

Animation1

Następnie naciskamy przycisk Edit animation i otwiera się nam edytor animacji.

Animation2

Podobnie jak w aplikacjach XAML przesuwamy suwak po timeline i edytujemy parametry obiektu w wybranych przez nas momentach czasowych np. transformacje. Dla każdego etapu możemy ustawić też inną funkcję charakteryzującą ruch w zakładce Animation. W efekcie powstał następujący opis animacji:

#monster {  
    animation-name: animation;
    animation-duration: 6s;
    animation-iteration-count: 1;
    animation-fill-mode: forwards;
    animation-direction: alternate;
    animation-play-state: running;
}

@keyframes animation {
    0% {
        transform: scale(0.3, 0.3);
        transform-origin: 0px 0px;
        animation-timing-function: linear;
    }

    33.33% {
        transform: translate(550px, 625px) scale(0.3, 0.3);
        transform-origin: 0px 0px;
        animation-timing-function: cubic-bezier(0.1, 0.9, 0.2, 1);
    }

    66.67% {
        transform: translate(850px, -12px) scale(0.3, 0.3);
        transform-origin: 0px 0px;
        animation-timing-function: step-end;
    }

    100% {
        transform: translate(1225px, 625px) scale(0.3, 0.3);
        transform-origin: 0px 0px;
    }
}

Jak widzimy, wszystko jest czystym CSS. Głowa najpierw zjeżdża ruchem jednostajnym w dół, potem szybuje w górę (mocno przyspieszając na końcu), a następnie dyskretnie znowu skacze w dół.

czwartek, 14 listopada 2013

Blend dla HTML5 - data binding

Trochę zamiłkłem. Wynikło to z różnych przyczyn. Jedną z nich było opracowanie kompleksowego artykułu o nowościach dla niemal wszystkich developerów Windows 8.1.  Napiszę o tym niedługo, jak zostanie opublikowany. Mimo, że w ramach tego przedsięwzięcia temat został praktycznie wyczerpany, to nie wszystko mogłem tam pokazać. Taki los spotkał m.in nowe edytory w Blend for Visual Studio 2013 i dlatego dwa najbliższe posty zostaną im poświęcone. Dziś krótki pokaz narzędzi do data bindingu.

Edytor data bindingu?  Każdy weteran XAML-a się uśmiechnie, bo to rzecz dość podstawowa. Ale chwila, dzisiaj mówię o HTML5. A, tu już sprawa narzędzi nie jest taka oczywista. Wiele ludzi pisze wszystko ręcznie. Twórcy najnowszego Blend postanowili przypomnieć o lepszych czasach. Poniżej mam w przykładzie ListView z podpiętym itemDataSource pod obiekt WinJS.Binding.List. Na zaznaczonym elemencie HTML otwieram, podobnie jak w XAML, edycję data bindingu. Dostaję, co prawda znacznie bardziej ubogie okienko, ale mogę w końcu wybrać interesującą mnie właściwość z kontekstu danych. Wynika to po części z nieco innej filozofii data bindingu w WinJS (i w innych bibliotekach JS), która zakłada znacznie mniejszą ilość parametrów. Konwerterem w WinJS jest funkcja, służąca do konwersji i formatowania.

DataBinding1

Teraz rzecz ciekawsza, choć też znana weteranom XAML. Chodzi o generowanie szablonu za pomocą kreatora, w którym wybieramy interesujące nas dane z kontekstu. W poniższym przykładzie przy właściwości itemTemplate wybrałem opcję <Create new template…>. Spowodowało to otwarcie okienka o takiej samej nazwie.

DataBinding2

Po wybraniu właściwości backgroundImage (rozpoznaje image!) i title, dostaję w HTML definicję szablonu:

   <div class="newTemplate" data-win-control="WinJS.Binding.Template">
        <div>
            <img data-win-bind="src:backgroundImage" height="100" width="100">
            <div data-win-bind="textContent:title"></div>
        </div>
    </div>

a w designerze na elementach listy od razu pojawiają się obrazki i tekst pod nimi. Całość, co prawda potrzebuje jeszcze ostylowania, niemniej jednak to spore udogodnienie.

Tyle na dziś. Następnym razem napiszę o animacjach.

wtorek, 8 października 2013

Windows 8.1 okiem dewelopera - podsumowanie

Dziś przedstawiam zbiorcze podsumowanie, jakie wyklarowało mi się odnośnie nowości w Windows 8.1.  Widać dużą wielonurtowość, z pewnością każdy programista Windows jakiś wycinek znajdzie dla siebie…  Ogromnym plusem jest proste WinRT API dla wielu przydatnych w życiu codziennym funkcjonalności (np. obsługa urządzeń, POS, skanera, renderowanie PDF), są bajery jak wydruki 3D.  Z nowych elementów będą zadowoleni programiści aplikacji Windows Store w XAML i HTML5, ale także programiści aplikacji desktopowych, twórcy gier w DirectX, web deweloperzy… Na nowy system powinni zwrócić więc uwagę wszyscy:  zarówno twórcy aplikacji służącej rozrywce, jak i twórcy codziennych biznesowych, korporacyjnych aplikacji, a także dostawcy urządzeń, różnych przystawek…

 

Ogólne zmiany w API

  • obsługa wejścia
  • kontrolki
  • aplikacje XAML
  • aplikacje HTML5
  • inne skalowanie szerokości
    • >=500px, opcjonalnie >=320px
    • usunięcie stanu snap
    • aplikacje Windows 8 w przedziale od 320 – 500 px system dopełnia czarnym tłem
  • inna obsługa zmiany orientacji layoutu
  • geolokalizacja
  • komunikacja zbliżeniowa
  • DirectX
  • PlayTo (integracja z Xbox, sterowanie odtwarzaniem)
  • kontrakty
  • autentykacja
  • Bing

 

Nowości w API

  • kafelki
    • nowe rodzaje kafelków (Small, Large)
    • periodyczne odświeżanie kafelków bez jednego uruchomienia aplikacji (deklaracja adresu url serwisu w manifeście w sekcji Tile Update)
    • inna schema XML dla notyfikacji (wersja 2)
  • otwieranie drugiej aplikacji z poziomu pierwszej z zadanym podziałem ekranu
    • scenariusze: kontrakty dla plików i URI
    • domyślnie pół na pół
    • deklaracja dla aplikacji źródłowej (w parametrze DesiredRemainingView)
    • deklaracja dla aplikacji docelowej (w manifeście w parametrze DesiredView)
  • bogatszy sharing
    • nowe właściwości w share source
      • Square30x30Logo
      • LogoBackgroundColor
      • ContentSourceWebLink
      • ContentSourceApplicationLink
    • nowości w share target
      • opis zachowania w panelu Share
      • programowe zamykanie panelu Share (DismissUI)
  • taski w tle
    • ciche godziny
      • wyłączenie notyfikacji tile i toast
      • wyjątki: notyfikacje VOIP toast dla aplikacji do rozmów z poziomu lock-screen, notyfikacje toast dla alarmów
    • więcej rodzajów triggerów (LocationTrigger, DeviceUseTrigger, DeviceServicingTrigger, BackgroundWorkCostChange)
    • anulowanie wykonywania po utracie prawdziwości warunku (CancelOnConditionLoss)
    • więcej narzędzi (np. komendy PowerShell)
  • pliki
    • nawigacja do następnego i poprzedniego pliku w widoku (NeighboringFilesQuery)
      • przy aktywacji aplikacji poprzez powiązanie z plikiem
      • obsługuje foldery, wyniki wyszukiwań, file queries
    • obsługa bibliotek użytkownika (StorageLibrary)
    • nowe pomocnicze API dla systemie plików
      • GetParentFolderAsync - folder zawierający plik
      • IsEqual - porównanie plików
      • TryGetItemAsync  - próba pobrania elementu (w razie niepowodzenia dostajemy null zamiast błędu)
    • obsługa plików ze SkyDrive tak jak lokalnych
      • nie zawsze pliki są fizycznie pobierane, czasem wystarczą placeholdery z metadanymi i obrazkiem podglądu
      • StorageFile.IsAvailable - sprawdzenie dostępności pliku
      • StorageItem.GetScaledImageAsThumbnailAsync  - obrazki z poglądem danego pliku w dowolnym rozmiarze, także dla placeholderów bez pobierania całych plików
  • mowa
    • text-to-speech
      • obsługa SSML (modyfikacja głosu - wymowa, tempo itp)
    • rozpoznawanie
      • tylko en-us
      • procesor, kontrolka UI
  • obsługa urządzeń Bluetooth
    • standard Rfcomm
      • komunikacja przez sockety
      • obsługa urządzeń SPP (Serial Port Profile)
      • klient i serwer SDP (Service Discovery Protocol)
    • urządzenia Bluetooth smart (np. medyczne)
      • klient GATT
  • obsługa urządzeń HID (m.in kontrolery, LED, wyświetlacze alfanumeryczne, gry, symulatory)
    • wartości logiczne i numeryczne
  • obsługa niestandardowych urządzeń USB
    • sterownik WinUSB
  • obsługa niestandardowych urządzeń Wi-Fi Direct
  • urządzenia
    • nowe scenariusze
      • włączanie do podłączeniu
      • synchronizacja danych w tle
      • kontrola użytkownika nad użyciem urządzenia i przekazaniem mu danych
    • uprawnienia w manifeście
  • obsługa urządzeń POS
    • skanery kodów kreskowych i kart magnetycznych (karty pojazdu, bankowe, karta sprzedawcy)
    • łączność: USB HID
    • dodatkowe urządzenia dostępne przez API dla urządzeń np. drukarka paragonów Bluetooth
  • skanowanie
    • kompatybilność ze sterownikami WIA 2.0
  • renderowanie dokumentów PDF (w postaci obrazków png, obsługa zabezpieczenia hasłem, opcje renderowania)
  • wydruki 3D
  • geofencing (reagowanie na zmiany położenia geograficznego)
  • aplikacja alarm (zezwolenie przez AlarmApplicationManager)
  • nowe rodzaje aplikacji
    • lock screen image
    • lock screen call (np. Skype)
  • media
    • poprawiona jakość, wydajność (GPU) i zużycie baterii
    • adaptatywny bitrate (MPEG-DASH, W3C Media Source Extensions)
    • kodowane strumieniowanie  (W3C Encrypted Media Extensions)
    • poprawione playlisty online i wstawianie reklam w stanie connected standby
    • niestandardowe formaty pliku/strumienia bez natywnego kodu
      • MediaStreamSource (pobieranie próbek audio i parsowanie formatu pliku)
    • strumieniowanie na Xbox One oraz zdalna kontrola
      • aplikacja Xbox One: protokół ms-playtoapp-myapp, kontrakt
      • aplikacja 8.1: preferowanie strumieniowania z Xbox One (video: x-ms-playToPreferredUri)
    • zarządzanie efektami audio
    • edycja metadanych plików multimedialnych w lokalnych bibliotekach
    • poprawione przechwytywanie
    • obsługa sekwencji zdjęć
    • nowe rodzaje ustawień dla kamery (typ sceny, focus, region, ISO, Flash, lampa, podpowiedź optymalizacyjna)
    • W3C Media Source Extensions
    • W3C Encrypted Media Extensions
    • adaptatywny bitrate (MPEG-DASH, DASH.JS)
    • Smooth Streaming Client SDK for Windows 8.1
    • Microsoft PlayReady Client SDK for Windows 8.1
    • Player Framework for Windows 8 and WP8
      • MediaPlayer
        • poziom sygnału
        • napisy i ścieżki audio w różnych językach
        • reklamy
          • tekstowe, bannery/przyciski, video overlays
          • VAST (Video Ad Serving Template) 3.0 / 2.0
          • pliki XML lub linki do nich
  • bezwarunkowe pobieranie dużych plików (BackgroundDownloader.RequestUnconstrainedDownloadsAsync)
  • integracja z kontaktami
    • karta kontaktu (Contact, CantactPhone, ContactEmail, ContactAddress…, ContactManager.showContactCard / ContactManager.showDelayLoadedContactCard)
    • po deklaracji odpowiednich kontraktów w manifeście również nasze aplikacje mogą być wywoływane z akcji karty (użytkownik może wybrać aplikację do danej czynności)
  • integracja z kalendarzem
    • podgląd kalendarza (AppointmentManager.showTimeFrameAsync)
    • dodanie zdarzenia (Appointment, AppointmentManager.showAppointmentAsync)
    • modyfikacja zdarzenia (AppointmentManager.showReplaceAppointmentAsync)
    • usunięcie zdarzenia (AppointmentManager.showRemoveAppointmentAsync)
  • IE11
    • wykrywanie
      • nowy user-agent:  Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0)
      • zablokowane właściwości
        • @cc_on
        • VBScript
      • usunięte API
        • attachEvent
        • createStyleSheet
      • ukryte API
        • document.all
        • ActiveXObject
    • media
      • MSE (Media Source Extension dla adaptywnego streamingu)
      • EME (Encrypted Media Extensions dla zabezpieczeń DRM)
      • Fullscreen API
      • SDP-US (w pełni funkcjonalny system napisów)
    • usprawnienia
      • bezdyskowy cache XHR
      • audio offload w adaptatywnym streamingu
    • Web Crypto API
    • WebGL
      • domyślnie włączony
      • także w aplikacjach Windows Store
      • bezpieczeństwo
      • DirectX 11
    • nowe API w Canvas 2D
      • efekty pikselizacji na obrazkach
      • przerywane linie
      • własne reguły wypełniania figur
    • interakcja z użytkownikiem
      • Screen Orientation API: blokada orientacji ekranu na urządzeniu
      • Device Orientation API: informacja o przestrzennym położeniu urządzenia
      • Pointer Events: uaktualniona implementacja
      • sprzętowa akceleracja dla scrollowania i zoomowania dla myszy, klawiatury, skryptu
      • naprawianie elementów także przy zoomowaniu
    • rozszerzenia CSS
      • flexbox - implementacja bez prefiksu
      • border-image - obrazek wypełniający obramowanie
      • horizontal-vertical - układanie tekstu wertykalnie
      • position: –ms-device-fixed
    • rozszerzenia dla edycji
      • kopiuj-i-wklej dla obrazków z aplikacji firm trzecich
      • operacja cofnij
    • nowe narzędzia F12
    • żywe kafelki dla przypiętych stron
  • nowy klient http - nowości
    • współdzielony cache, cookies, credentials (C#)
      • <WebView>, <Image>, <Media>, …
      • Windows.Web.Http
    • silnie typowane nagłówki (C++, JavaScript)
      • content-length, last-modified (odczyt)
      • HostName, niestandardowe (ustawianie)
    • dostęp do cookies i współdzielonych cookies (C#, JavaScript)
      • HttpBaseProtocolFilter, HttpCookie
    • kontrola nad cachingiem i współdzielonym cache (C++, C#, JavaScript)
      • HttpBaseProtocolFilter
    • własne moduły w przetwarzaniu (C++, JavaScipt)
      • IHttpFilters (autentykacja np. dla OAuth, własne cache, logowanie, restrykcje na sieć, ponawianie prób, testowanie) w postaci komponentów WinRT
    • HttpProgress
    • błędy/certyfikaty SSL/TLS
    • wysyłanie i pobieranie strumieni
    • dodatkowe ustawienia w HttpBaseProtocolFilter
    • własne klasy IHttpContent i IHttpFilter
    • konfiguracja filtra OAuth 2.0
    • dane uwierzytelniające server/proxy
    • certyfikat klienta
  • pobieranie zasobów z podanych adresów uri przed uruchomieniem aplikacji
    • specyfikacja adresów
      • lokalna specyfikacja adresów (ContentPrefetcher.ContentUris)
      • dynamiczna lista adresów jako serwis (ContentPrefetcher.IndirectContentUri)
    • wykorzystuje WinJS.XHR oraz nowego klienta http
    • wsparcie dla autentykacji przez cookie
    • nie działa w sieciach płatnych
    • można ręcznie odpalić prefetch taska
  • globalizacja
    • Windows.Globalization.Calendar
      • GetTimeZone()
      • ChangeTimeZone()
      • TimeZoneAsString()
      • IsDaylightSavingTime()
    • Windows.Globalization.DateTimeFormatting
      • Format(DateTime.Now, “America/Guatemala”)
    • po dodaniu nowego języka do aplikacji nie trzeba podbijać wersji
  • Bing API
    • mapa 2D (nowe API: geocoding & routing)
    • mapa 3D
    • Entity API (świetna wizualizacja)
    • kontrolka do OCR (8 języków, .NET/C++
    • translator (42 języki)
  • Direct3D 11.2
    • Tiled Resources
    • Scalers & Overlays
    • HLSL Shader linker
  • przetwarzanie własnych gestów w innym wątku (CoreIndependentInputSource)
  • pewne zmiany w obsłudze wątków przez WinRT
  • obsługa wielu ekranów (ProjectionManager API)
  • bezpieczeństwo
    • smart cards
      • co nowego?
        • nowe API do zarządzania wirtualną smart card
        • nowe API do zarządzania fizyczną smart card
        • polityki PIN dla wirtualnej smart card
        • nowe sposoby na rejestrowanie certyfikatów
        • nowe API dla stosowania certyfikatów w operacjach kryptograficznych
      • API
        • tworzenie wirtualnej karty (SmartCardPinPolicy, SmartCardProvisioning.RequestVirtualSmartCardCreationAsync)
        • provisioning (SmartCardProvisioning: FromSmartCardAsync, GetChallengeContextAsync; SmartCardChallengeContext: ProvisionAsync, ChangeAdministrativeKeyAsync) 
        • rejestrowanie certyfikatu (CertificateRequestProperties; CertificateEnrollmentManager: CreateRequestAsync, InstallCertificateAsync)
        • lokalizowanie karty (SmartCardReader:GetDeviceSelector, FromIdAsync, FindAllCardsAsync; DeviceInformation.FindAllAsync; SmartCardProvisioning.GetIdAsync )
        • zmiana PIN (SmartCardProvisioning.RequestPinChangeAsync)
        • reset PIN/odblokowanie karty (SmartCardProvisioning.RequestPinResetAsync)
        • usunięcie karty wirtualnej (SmartCardProvisioning.RequestVirtualSmartCardDeletionAsync)
    • uwierzytelnianie przez odcisk palca
      • logowanie na urządzenie, zakup aplikacji Windows Store, in-app purchases, muzyka, wideo
      • WinRT API (UserConsentVerifier) i Win32
    • zarządzanie kontami - UI dla uwierzytelniania dla znanych dostawców (informacje i akcje dla konta w panelu Settings: AccountsSettingsPane, CredentialCommand, WebAccountCommand, WebAccountAction, WebAccountProvider, WebAccountProviderCommand, WebAccountState, SupportedWebAccountActions, WebAccount)
    • Windows Azure Authentication Library (Windows Azure AD, OAuth2, opakowanie WebAuthenticationBroker)
    • ochrona plików (dostęp dla jednego użytkownika na urządzeniu)
  • obsługa nieprzechwyconych błędów
    • App.Current.UnhandledException (XAML)
    • CoreApplication.UnhandledErrorDetected (C++)
  • logowanie błędów (LoggingChannel, LoggingSession, FileLoggingSession)
  • store
    • consumable in-app purchases
    • dodatkowe rodzaje zawartości in-app
    • licencjonowanie (lepsza synchronizacja, zwiększony limit na PC)

 

API dla aplikacji desktopowych

  • skalowanie
    • skalowanie 200% desktopu
    • optymalizacja skalowania desktopa  per DPI monitora
    • API dla aplikacji świadomych DPI monitora (D2D, także WPF, ale już nie Windows Forms)
  • DirectComposition (płynne animacje, transformacje i efekty; używane na ekranie startowym, animacja i skalowanie kontrolek ActiveX )
  • DirectManipulation (przesuwanie i zoomowanie; używane na ekranie startowym)
  • wejście
    • tochpad o wysokiej precyzji (pozwala na wykonywanie gestów)
    • gesty dla przewijania i zoomowania
    • wsparcie dla Ink (pisanie, rozpoznawanie pisma w osobnym wątku)
    • przechwytywanie nieskopoziomowego wejścia
  • API znane z aplikacji Windows Store
    • kafelki i notyfikacje toast
    • obsługa wejścia
    • geolokalizacja
    • obsługa sensorów
    • komunikacja zbliżeniowa
    • nagrywanie
    • PlayTo
    • drukowanie
    • POS
    • skanowanie
    • SMS
    • http
    • strumienie
    • syndykacja
    • obsługa sieci
    • XML i JSON
    • globalizacja
    • kryptografia
    • autentykacja

 

Inne wybrane nowości w systemie

  • uruchamienie do 4 aplikacji na jednym ekranie
  • warunkowe pobieranie paczek z zasobami aplikacji
    • eliminacja zduplikowanych plików pomiędzy różnymi aplikacjami (np. biblioteki, unikać rekompilacji znanych)
    • pobieranie tylko naprawdę potrzebnych zasobów dla danego urządzenia (DPI: 1.0x, 1.4x, 1.8x; wersja DirectX: 9, 10, 11) i dla danego użytkownika (język)
    • przy zmianie parametrów urządzenia lub wymagań klienta pobieranie potrzebnych pakietów jako aktualizacja aplikacji
  • zwiększone pakiety aplikacji do 8GB
  • Assigned Access (tryb pracy z dostępem tylko do jednej aplikacji, dobry np. dla terminali płatniczych)
  • zakładka Devices
    • dodawanie urządzenia z zakładki
    • pliki Flash audio i wideo działają z przeglądarki
    • audio z wideo może być strumieniowane tylko do odbiorców audio
  • wsparcie dla precyzyjnego touchpada
  • nowa klasa sterowników dla urządzeń Bluetooth i USB
  • przekazywanie plalisty z przeglądarki do aplikacji Music
  • czytanie aplikacji Windows Store systemową aplikacją Narrator
  • wydajność
    • Windows Performance Toolkit
      • Windows Performance Recorder
      • Windows Performance Analyzer
  • bezpieczeństwo
    • udoskonalony Web Authentication Broker (współdzielenie z IE, przenoszenie danych uwierzytelniających pomiędzy różnymi urządzeniami)
    • zabezpieczenie aplikacji przed nieuprawnioną modyfikacją
  • store
    • zarządzanie katalogiem in-app
    • automatyczne aktualizacje
    • Alipay, MS gift cards
    • udoskonalona analiza
  • Windows ACK 3.0
    • szybsze skanowanie aplikacji
    • zdalny deployment
    • wybieranie testów

 

Nowości w XAML (Windows Store)

  • kontrolki
    • DatePicker i TimePicker
    • Hyperlink
    • Flyout i MenuFlyout
    • CommandBar (uproszczona implementacja paska aplikacji)
    • uproszczona obsługa symboli w AppBarButton (napis, SymbolIcon, FontIcon, BitmapIcon, PathIcon)
    • nowe API w panelu dla przyrostowego ładowania
    • wirtualizacja
      • ItemsStackPanel i ItemsWrapGrid (domyślnie)
      • ItemsPanel (automatycznie we wszystkich aplikacjach)
    • optymalizacja list (ListView i GridView)
      • szybsze ładowanie
        • tylko potrzebne elementy)
        • inne szablony (zamiast masy elementów jeden GridViewItemPresenter)
      • płynniejsze przewijanie
        • poprawa percepcji - placeholdery (ShowsScrollingPlaceholders=”true”, wszystkie aplikacje 8.1 domyślnie)
        • zdarzenia pozwalające kontrolować fazy rysowania (zdarzenie ContainerContentChanging)
      • dynamiczne budowanie drzewa wizualnego w elemencie (GoToElementStateCore)
    • szybsze przewijanie grupowe
    • rozszerzenia dla animacji we FlipView
    • lepszy WebView
      • lepsze renderowanie i integracja z XAML
      • overlay
      • obsługa własnych protokołów do obróbki danych
      • usprawnienia (kontrola nawigacji, cykl życia zdarzeń, renderowanie lokalnej zawartości z uri, większe bezpieczeństwo - deklaracja uri zawartości w manifeście)
      • integracja ze SmartScreen (blokada phishingu)
    • udoskonalenia w MediaElement (kontrolki sterujące, lepsza wydajność dla interakcji z XAML, tryb pełnoekranowy, video zoom, obsługa własnych efektów)
    • SettingsFlyout
    • SearchBox
    • Hub i HubSection (ładowanie na żądanie)
    • udoskonalenia w integracji z DirectX
      • DirectComposition
      • SurfaceImageSource i VirtualSurfaceImageSource
        • szybsze rysowanie Direct2D
        • wielowątkowe rysowanie
      • SwapChainPanel - zalety w porównaniu do SwapChainBackgroundPanel
        • usunięcie ograniczeń z-order
        • układa się jak każdy element XAML
        • każdy rozmiar swap chain dozwolony
        • można używać więcej niż jeden równocześnie
        • notyfikacja o zmianie rozmiaru do przerysowania
      • niezależne wejście w SwapChain[Background]Panel: przetwarzanie w wątku w tle dotyku, pióra, myszy
    • większa wydajność w grafice
  • data binding
    • dostęp do Binding Expression
    • TargetNullValue
    • FallbackValue
    • UpdateSourceTrigger
    • DependencyObjectCollection (Behaviors SDK)
    • szybszy
  • animacje
    • standardowe reagują na ustawienia w systemie (on/off), przy niestandardowych można skorzystać z API
  • nawigacja
    • kontrolowanie stosu back/forward
  • obsługa skórek
    • wymuszenie użycia danej skórki na elemencie  UI (RequestedTheme)
    • ThemeResource (podobny do dynamicznych zasobów WPF)
  • tekst
    • API do wyrównywania
    • TextBox:  PlaceholderText, zdarzenie wklejenia
    • nagłówek dla kontrolek tekstowych (i innych)
    • SelectionHighlightColor
    • TextReadingOrder
    • kolorowe czcionki
    • CharacterEllipsis
  • obsługa wejścia i manipulacje
    • programowe przewinięcie (ChangeView)
    • przewidywane przewinięcie (ViewChanging)
    • ScrollViewer: API do blokowania przewijanych obszarów
    • programowe przemieszczanie fucusa
  • renderowanie bitmap (RenderTargetBitmap)
  • optymalizacja przy starcie aplikacji
  • mniejsze zużycie pamięci
  • XAML Binary Format (XBF)
  • obsługa wielu monitorów o różnym DPI
  • obsługa wysokiego kontrastu (nie trzeba restartować aplikacji)
  • udogodnienia dla dostępności
  • nowy HttpClient (Windows.Web.Http)
  • dostępność
    • automatyczne odczytywanie tekstu z tekstowych kontrolek (TextBlock, RichTextBlock, RichTextBlockOverflow)
    • obsługa wysokiego kontrastu bez restartu aplikacji
    • live regions (obszary UI podlegające dynamicznym zmianom)
      • AutomationProperties.LiveSetting  (Assertive lub Polite)
      • peer.RaiseAutomationEvent(AutomationEvents.LiveRegionChanged)
    • UI Accessability Checker
  • .NET dla Windows Store
    • konwersja System.IO.Stream na IRandomAccessStream
    • lepsze wsparcie dla wyjątków dla WinRT API (oprócz HRESULT teraz także dodatkowe informacje we właściwościach Message i StackTrace wyjątku)
    • rozszerzenia typów WinRT -  nullowalne typy w strukturach
    • wsparcie dla edycji przy debugowaniu dla 64-bit
    • podgląd przy debugowaniu zwracanej zarządzanej wartości przez metodę
    • debugowanie asynchroniczne

 

Nowości w HTML5 / WinJS 2.0

  • kontrolki
    • udoskonalony AppBar
      • skalowanie do rozmiaru okna
      • nawigacja za pomocą klawiatury
      • niestandardowa zawartość
    • udoskonalony ListView
      • natywna wydajność
      • nowe wbudowane layout-y (wertykalny GridLayout,  pogrupowany ListLayout, CellspaningLayout), łatwe tworzenie nowych (IListLayout2)
      • udoskonalona obsługa klawiatury
      • drag & drop (duża wydajność, realizowany w innym wątku)
      • inne style CSS
    • kontrolka WebView (x-ms-webview) - zalety
      • skalowanie dwoma palcami
      • automatyczne wykrywanie numerów telefonów na stronie
      • obsługa nawigacji do innej strony
      • interakcja pod overlay
      • obracanie
      • lokalna nawigacja (ms-appdata, ms-local-stream)
      • obsługa niestandardowych typów plików
    • Hub i HubSection
    • SearchBox
    • NavBar, NavBarCommand
    • BackButton
  • infrastruktura
    • Scheduler: kolejkowanie asynchronicznych operacji (współgranie aplikacji, biblioteki  i systemu operacyjnego)
    • zwalnianie obiektów z pamięci (przy nawigacji i przewijaniu)
    • debugowanie asynchroniczne (dostępne także dla .NET)
  • klocki budulcowe
    • jednorazowa kompilacja szablonów
    • Binding template (znacząca poprawa wydajności, kompilacja do funkcji renderujących, pełne wsparcie dla debugowania, zastosowanie dispose)
    • tuning: asynchroniczne wielokrokowe renderowanie 
    • Repeater
    • ItemContainer
  • dostępność
    • live regions
      • atrybut aria-live
      • zdarzenie o zmianie wyrzucane przez platformę

 

Ewolucja Modern UI

  • większa dowolność kompozycji (nie zawsze wszystko wg. siatki),
  • większe zróżnicowanie kolorów (np. odcień czerwieni zależny od daty w aplikacji Reading List),
  • animacje na głównych elementach (np. przy włączaniu alarmu),
  • nowe komponenty: hub, pasek nawigacji, in-app search,
  • pasek aplikacji: skalowanie, bardziej dowolna zawartość
  • komendy na elementach listy (gdy aplikacja zajmuje małą część ekranu i pasek aplikacji się nie mieści)
  • zaznaczanie komórek, także o różnych rozmiarach
  • drag & drop
  • ułatwienia w edycji tekstu

 

Nowości w Visual Studio 2013

  • XAML
    • szybsze domyślne szablony
    • statyczne zasoby
      • podpowiedzi
      • Go to definition (także z zasobu XAML do klasy w C#)
    • edytor
      • Go to definition dla standardowego taga do przeglądarki klas
      • zamykanie elementów
      • aktualizacja taga zamykającego przy edycji otwierającego
      • poprawianie literówek
      • grupowanie w kontener zaznaczonego XAML
      • snippety
      • podpowiedzi właściwości z data context przy edycji bindingu (także Go to definition z właściwości w bindingu do definicji w C#)
      • lepsza wydajność i niezawodność
    • diagnostyka
      • responsywność UI
      • zrzuty pamięci
    • Coded UI Test Project (Windows Store apps)
  • HTML5
    • udoskonalenia w edytorze JavaScript
      • lista funkcji w pliku
      • const z ECMA Script 6
      • regiony
      • podświetlanie po identyfikatorze
    • udokoskonalenia w edytorze CSS
      • Intellisense z objaśnieniem składni
      • Less
    • nowy edytor HTML5
      • podpowiedzi dla znaków specjalnych
      • podpowiedzi dla wartości data-*
      • podgląd obrazka w HTML
      • smart tags dla statycznych elementów
      • generowanie sekwencji div-ów
      • łatwiejsza zmiana kolejności linii
      • formatowanie (CTRL+F lub komendy głosowe)
    • udoskonalone debugowanie
      • JavaScript Attach (aplikacja Windows Store oraz w przeglądarce)
      • poprawiony DOM Explorer
        • IntelliSense
        • Drag & drop
        • Edit as HTML
      • poprawiona konsola JavaScript
        • console.group
        • console.time
        • filter/clear
        • IntelliSense
        • Auto complete
      • JavaScript/C++ Interop (Script with Native)
  • domyślne obrazki dla różnych DPI w projektach
  • szablon Hub App
  • debugowanie asynchroniczne
  • więcej rozdzielczości w emulatorze
  • diagnostyka - profiler zużywania energii
    • procesor
    • sieć
    • wyświetlanie
  • integracja z Azure Mobile Services (notyfikacje push)
  • grafika
    • większa wydajność i niezawodność
    • debugowanie DirectX
    • zdalne debugowanie dla ARM
    • przechwytywanie/odtwarzanie na różnym sprzęcie
  • integracja z Microsoft Ads SDK (AdControl)

 

Nowości w Blend

  • XAML
    • behaviory (Behaviors SDK)
      • zachowania (np. IncrementalUpdateBehavior)
      • akcje
    • bardziej intuicyjne ustawianie danych dla designu
    • tworzenie paska aplikacji przez przeciągnięcie CommandBar
    • wsparcie dla różnych rodzajów przycisków w pasku komend (symbol, glyph, ikona, obrazek, ścieżka)
    • edycja szablonu w otaczającym kontekście
  • HTML5
    • znajdowanie elementów w drzewie przy użyciu selektorów CSS
    • ustawienie właściwości CSS w tym samym polu, co jej wyszukiwanie
    • edytor data bindingu
    • edytor animacji CSS
    • wstawianie własnych czcionek
    • border radius
    • zachowania JavaScript
  • precyzyjne ustawienie linii dla zadanych liczb pikseli
    • linijki w kierunku poziomowym i pionowym
    • wsparcie dla snapowania
    • ładowanie i zapisywanie wytycznych do layoutu (pliki *.guides)
    • możliwość wskazywania odległości linii w różnych kierunkach
    • możliwość porównania przy różnych rozdzielczościach oraz wielkościach ekranu aplikacji
  • szablon Hub app
  • większa wydajność i niezawodność

piątek, 20 września 2013

BUILD 2013 (42): rozwiązania cross-platform na platformie Windows Azure, przyszłość C++

To ostatni post nt. sesji BUILD 2013.  Na koniec rzuciłem okiem na aplikacje w Windows Azure Mobile Services oraz rozwój C++. W języku tym widać kilka ciekawych ruchów na przyszłość np. dedukcja typu zwracanego przez funkcję czy async.

 

Building Cross-Platform Apps with Windows Azure Mobile Services

Różne, znane nam od dawna sposoby pisania aplikacji mobilnych

image

Azure Mobile Services wspierają wszystko.

image

image

image

image

image

image

image

image

image

 

The Future of C++

image

image

image

image

image

image

image

Post-RTM

m.in

image

image

image

image

image

image

image

image

czwartek, 19 września 2013

BUILD 2013 (41): node.js, ASP.NET Web API

Dziś powrót do technologii webowych, tym razem od strony serwerowej.  Dostajemy wprowadzenie do node.js na platformie Windows oraz omówienie serwisów REST. Najciekawszy jednak moim zdaniem jest przykład pokazujący dwustronną komunikację pomiędzy różnymi instancjami aplikacji w przeglądarkach, a także pomiędzy przeglądarka a aplikacją Windows Store. Jeśli chodzi o .NET, to nowa odsłona ASP.NET Web API wprowadza kilka udogodnień, w tym wygodne mapowanie adresu na parametry metody (moim zdaniem zbliżające tym samym Web API do rozwiązań w node.js ), udogodnienia dla unit testów, integrację z OWIN, obsługę dodatkowych operatorów w OData, ułatwioną obsługę dla Outh 2.0.

 

Introduction to Node.js on Windows Azure

image

image

Moduł uuid

image

image

image

Node.js nie jest dobry dla zadań typu workflow, ponieważ jest jednowątkowy. Korzystamy wtedy z puli wątków w CLR.  Możemy też chcieć skorzystać z właściwości oferowanych przez .NET, których nie ma w node.js. Każde odwołanie czy obliczenie na node.js jest asynchroniczne. Przykład konwersja obazków z .jpg na .png czy resizing obrazka. Są to czynności wykorzystujące intensywnie procesor. Nie są to rzeczy dobre dla procesu node.js. Lepiej użyć pulę wątków w .NET, aby nasza aplikacja była responsywna.

image

image

 

Building REST Services with JavaScript

image

image

image

image

image

image

image

image

Aplikacja Windows Store

image

image

image

 

ASP.NET Web API 2 - Web Services for Websites, Modern Apps, and Mobile Apps

image

image

image

image

image

Teraz ma być prościej i intuicyjniej:

image

image

Przykładowe scenariusze

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image