niedziela, 25 września 2011

Red Uploader

Niecały tydzień temu stworzyłem sobie przykład w MSDN Code Gallery o nazwie Photo Uploader - Background Transfer Service in Windows Phone 7.1. Jest to prosta aplikacja robiąca zdjęcia i pozwalająca wysyłać je przy użyciu Background Transfer Service (BTS) na dołączony do projektu prosty serwis WCF REST.

Uploader

P.S W hołdzie K44 –;)

sobota, 17 września 2011

Windows Runtime dla aplikacji Metro w Windows 8 - szybkie zebranie faktów (1)

O nowym interfejsie Windows 8 było wiadomo jakiś czas temu, tym niemniej nikt się nie spodziewał aż takiej rewolucji! Jeszcze kilka dni przed konferencją BUILD ukazał się Silverlight 5 RC, a nieco później kompatybilny dla niego Blend… Tymczasem nowy interfejs Metro choć bardzo przypomina ten z Windows Phone 7 zakłada zupełnie nową technologię jego wykonania.  Nie jest to już .NET czy Silverlight. Tak więc oprócz rewolucji dla użytkowników mamy też dużą rewolucję wśród programistów piszących pod Windows. Wchodzimy w nową erę, jesteśmy świadkami historycznego momentu na miarę wprowadzenia Windows 95 czy wprowadzenia .NET. Z tej okazji pozwoliłem sobie zmienić nazwy moich blogów na bardziej zgodne z duchem czasu (słowo .NET pozamieniałem na Win i Windows). Zamierzam być na bieżąco, pooglądać sobie dokładnie te różne sesje, ale myślę, że już zebrałem trochę informacji na pierwszy wstępny post (póki co przejrzałem sobie 58 prezentacji PowerPoint, nie licząc innych mniej bezpośrednich źródeł).

Zanim zainstalowałem sobie Windows 8 miałem przyjemność poobcować z nim na urządzeniu Slate.

WP_000013

Obsługa dotykowa jest znacznie lepsza niż myszką i faktycznie chodzi to bardzo płynnie. Choć po prawie całodniowym obcowaniu z Windows 8 przy użyciu myszki powiem, że i do tego można się przyzwyczaić (choć nie udało mi się uzyskać pewnych rzeczy odpowiadających gestom). BTW tryb Aero nie jest do końca czysty, widać, że wszędzie system został przerobiony pod kątem Metro, nawet jak nie jesteśmy w tym trybie. Np. pobieram prezentację Internet Explorerem i dostaję lokalną notyfikację o tym, że plik został pobrany (mogę kliknąć w popup i otwiera się Explorer - zupełnie jak w WP).

Aplikacje Metro będą pisane w nowym środowisku zwanym Windows Runtime. Co to takiego? To twór znacznie doskonalszy od .NET, który stawia na nowo pytania na ile ułatwienie w naszej pracy znajdujemy pisząc w danym języku, a na ile jest to związane z platformą czy bibliotekami.

  • nowe API dla aplikacji klienckich Metro (zastępuje w tym podzbiorze funkcjonalności Win32)
  • napisane w kodzie niezarządzanym, ale utrzymane w nowoczesnym, obiektowym i bardzo wysokopoziomowym podejściu (przy pisaniu aplikacji nadal widzimy jeden ze znanych nam języków, przy przesiadce z .NET/Silverlight praktycznie nie odczujemy wizualnie różnicy jeśli będziemy pisać w C# lub VB)
  • język ma tutaj niewielkie znaczenie – na równi możemy stosować  JavaScript, C++, języki zarządzane C# i VB (jak to możliwe - otóż w Windows Runtime odbywa się projekcja odpowiedniego języka a metadane są kompatybilne składniowo z CLI)
  • rozwiązanie bardzo wydajne - kod w JavaScript czy w C# od razu jest mapowany przez Windows Runtime na odpowiednie procedury w kernelu

PLAT-874T_Lovell

PLAT-874T_Lovell_2

  • różne udogodnienia znane z .NET i Silverlight zostały zawarte w Windows Runtime
    • rozdzielenie wyglądu od logiki (dla C++, C# i VB - prezentacją jest XAML, dla JS - HTML5)
    • async /then (api wymusza na twórcach pisanie responsywnych aplikacji, a składnia jest tak prosta jak synchroniczna – w C# async, w JS konstrukcja then znana choćby z jquery)
    • data binding
    • animacje
    • style i szablony (btw stylowanie w HTML wygląda analogicznie jak w XAML, dzięki odpowiednim tagom i kontrolkom)
    • stany wizualne
    • nowe kontrolki UI (niektóre zbliżone do tych znanych z Silverlight i z Windows Phone, ale są też nowe, bardziej rozbudowane, a znacznie większych predefiniowanych możliwościach – np. kontrolki list oprócz wirtualizacji UI obsługują też wirtualizację danych, mają więcej zdarzeń np. ItemClick i w ogóle możliwości)
    • obsługa gestów (kilka nowych w stosunku do Windows Phone, w tym taki dla urządzeń)

APP-185T_Waggoner

    • nawigacja (w sumie taka jak w Silverlight, czyli Frame, Page, …)
    • API dla komunikacji, sensorów, notyfikacji, ….
    • współdzielenie komponentów w różnych językach (nic nie trzeba rejestrować, np. piszemy klasę w C# i możemy jej identycznie użyć w JavaScript, dodatkowo stary kod C++ możemy opakować w Windows Runtime i udostępnić w ten sposób dla innych języków)
  • typy są prawie zgodne z .NET, czasami możemy napotkać pewne różnice
  • są inne przestrzenie nazw niż w WPF i Silverlight, choć wiele klas nazywa się tak samo
  • programowanie w JavaScript jest tak proste jak w każdym innym języku, różnica zazwyczaj wynika tylko ze składni (potężna biblioteka WinJS)

TOOL-533T_Hoban

  • głównymi założeniami C#5 jest integracja z Windows Runtime, a także async i atrybuty parametrów
  • grafikę 3D można rozwijać w DirectX
  • aplikacje mają cykl życia (jak nie są na pierwszym planie to są usypiane, mogą też być później ubijane – model znany z Windows Phone, są odpowiednie zdarzenia, obiekty do sprawdzania stanu, zapisywania i pobierania danych – np. w JS mówi się o sesji)
  • aplikacje mają uprawnienia definiowane w manifeście (tzw. capabilities - podobnie jak w Windows Phone)
  • apliakcje są dystrybuowane przez Store (certyfikacja, trial, itd – podobnie jak w Windows Phone)
  • aplikacje mogą wymieniać dane między sobą, mogą zawierać kontrakty (tego mi brakuje w Windows Phone, a kojarzy się z Androidem)

Przed zainstalowaniem aktualizacji do sterownika karty graficznej nie działały mi designery w Visual Studio 11 i w Blend 5, ale po instalacji wszystko zaczęło działać. Po uruchomieniu aplikacja się instaluje w systemie (podobnie jak na Windows Phone). Domyślnie jest ostylowana w Metro, czyli jest … cała czarna.

Tak więc nie dzieje się katastrofa. Nie żałuję, że zainwestowałem sporo czasu w  Silverlight i Windows Phone. Znajomość XAML-a, C#, Visual Studio, Blenda będą z pewnością bardzo przydatne przy nowej technologii, a poznanie Windows Phone sprawiło, że wiele wprowadzanych mechanizmów ani zachowanie interfejsu w Windows 8 mnie nie dziwią, wydają mi się znajome (styl metro, idee usypiania aplikacji, notyfikacji lokalnych i notyfikacji push, kafelki, background audio, transfer plików itd - choć czasami inaczej zrealizowane np. w cyklu życia apliakcji jest odzielny handlery - na otwarcie przez searcha, przez pickera itd.). Mimo braku bezpośredniej kompatybilności i tak Silverlight, a jeszcze bardziej ten z Windows Phone są najbardziej ideowo, a w wielu miejscach i technicznie zbliżone do założeń Windows Runtime.  WCF RIA Services są obecnie intensywnie rozwijane pod kątem obsługi klientów w JavaScript (obecnie SP2 RC), a także właśnie aplikacji Metro, więc i tej technologii nie żałuję. Wzorzec MVVM również znajdzie tutaj zastosowanie (w C#, w Java Script, …).  Tak więc nadal możemy stosować znane nam języki, narzędzia, wzorce, rozwiązania, zmieniła platforma klienta.

c.d.n (ciąg dalszy nastąpi)

sobota, 27 sierpnia 2011

WP SDK 7.1 RC - moje spostrzeżenia

Napiszę teraz trochę o nowym Windows Phone SDK 7.1 RC.

Zacznę od dwóch elementów, które na pewno występowały już w niepublicznym Beta 2 Refresh. Są to:

Screenshot tool

11_Screenshot

Oprócz narzędzia do screenshotów z Windows 7 możemy teraz używać dedykowanego narzędzia dostarczanego z emulatorem.

Marketplace Test Kit

12_Marketplace_Kit

Zbiór testów, którymi są poddawane aplikacje wrzucane na Marketplace. Dzięki temu znacznie spada prawdopodobieństwo “niespodzianki” po wysłaniu aplikacji, developer może poddać weryfikacji swoją aplikację już lokalnie na komputerze.

Co ostatnio zwróciło moją uwagę podczas przeglądania dokumentacji?

  • limit do 50 alarmów/notyfikacji per aplikacja
  • wyrzucenie z planu agenta po 2 błędnych zakończeniach jego pracy
  • czas pojedynczego wykonania dla agentów periodycznych 25s
  • uściślona kwestia komunikacji między aplikacją foreground i agentem - linq to sql lub plik, w komunikacji do odczytu zalecany plik z mutex-em dla dostępu do Isolated Storage (nie używać IsolatedStorageSettings), dedykowany sposób dla agentów audio
  • brak możliwości pauzowania kolejki BackgroundAudioPlayer by odtworzyć plik za pomocą MediaElement
  • dokładne opisy Zune Media Queue i Streaming Audio Application
  • klient notyfikacji push nie działa przy SOCKS proxy
  • opis obsługi binarnych BLOB w bazie danych, a także spore uściślenia co do procesów aktualizacji (szkoda, że nadal nie ma możliwości określenia wersji przy tworzeniu bazy jak sądzę) i migracji
  • brak możliwości usuwania tabel i kolumn z bazy danych (wcześniej też nie było, ale teraz to wyraźnie zaznaczono)
  • Shared/Media - nowy specjalny folder w Isolated Storage dla obrazka albumu, ma służyć do jego wyświetlania w systemowym panelu głośności (Universal Volume Control)
  • nowe launchery i choosery (o części z nich można już było czytać jakiś czas temu na niektórych blogach): ConnectionSettingsTask, SaveContactTask (pamiętam, jak Daniel Dudek porównując WP7 z Mobile nieraz mówił, że nie ma możliwości dodania kontaktu jako całości, mieliśmy tylko telefon i mail osobno - sic!), ShareLinkTask i ShareStatusTask (współdzielenie linka i swojego statusu w wybranym serwisie społecznościowym)
  • szczegółowy opis kontaktów i kalendarza/spotkań - wyraźne podkreślenie, żeby w miarę możliwości korzystać z filtrów search opartych o predefiniowane indeksowanie zamiast z LINQ, które zadziała wolniej
  • kamera – najnowsze API dopuszcza, że może jej … nie być w telefonie (przymiarka do upowszechnienia Windows Phone na tańszych telefonach, Tango?) albo mogą występować 2 rodzaje kamer (standardowa i front-face), dokładny opis konwersji formatów YCbCr i ARGB, sporo przykładów (w tym rozszerzona rzeczywistość, nagrywanie video)
  • SavePictureToCameraRoll – oficjalnie opisana w ramach przykładu
  • rozszerzenie huba Pictures (apps)
  • 2 rozmiary paska aplikacji - duży i mały
  • szczegółowo opisany SIP + nowe opcje
  • …

Całościowy spis zmian można znaleźć tu. To z pewnością i tak nie wszystko. Na głębsze zapoznanie przyjdzie czas podczas praktycznych zabaw w danych casach -:)

piątek, 26 sierpnia 2011

Co nowego w Silverlight for Windows Phone Toolkit–August 2011 ?

Windows Phone wciąż do przodu! Dziś podzielę się tym, co zwróciło moją uwagę w najnowszym toolkicie. Następny post poświęcę najnowszemu SDK.

Kierując się kolejnością chronologiczną zacznę od Windows Phone Toolkit – August 2011 (SDK 7.1). Dostajemy wraz z nim wiele nowych fajnych kontrolek i udogodnień, których nieraz po prostu brakowało. Najlepiej odpalić je i zobaczyć w działaniu. Moją uwagę zwróciły w szczególności następujące elementy:

MultiselectList

01_MultipleSelectListBox

Wybór wielu elementów z listy, zachowanie identyczne jak z Outlooka. W czasach Windows Phone 7 używałem takiego elementu posiłkując się implementacją na codeplexie. A teraz mamy to od ręki! Patrząc na źródła przykładu widzimy, że nie wszystkie zachowania są dostępne automatycznie, ale i tak komponent daje bardzo wiele.

LockablePivot

02_LockablePivot03_LockablePivot_2

Pivot, który po zablokowaniu pokazuje tylko aktualnie wybraną zakładkę i nie reaguje na przesuwanie w poziomie. Dzięki temu można umieścić kontrolki obsługiwane takimi gestami np. slidery. Pamiętam, że kiedyś mieliśmy taki problem z Bing Maps i nie było to polecane. Z takim pivotem można spojrzeć na to inaczej.

ExpanderView

04_ExpanderView_105_ExpanderView_2

Nazwa kontrolki mówi sama za siebie. W toolkicie mamy przykład stylowany na rozwijane drzewko, znane z grupowania tematów w Outlooku.

HubTile

06_HubTile

Absolutny hit sezonu!!! Za pomocą takich kontrolek “kafelków” możemy łatwo stworzyć ekran znany z huba People czy ekranu startowego. Ze zdjęciami, powiadomieniami i co najważniejsze z animacjami wykonywanymi losowo! Pamiętam jak kiedyś na potrzebę ważnej prezentacji trzeba było zrobić aplikację imitującą ekran startowy. A tu proszę dostajemy znowu takie coś za darmo!

ListPicker z multiselect

07_LictPicker_MultiSelect_108_LictPicker_MultiSelect_2

Przydatna opcja, która chyba nie wymaga komentarza.

PhoneTextBox

09_PhoneTextBox

Kolejna rzecz której brakowało! Kto nie chciałby mieć textboxa z obsługą watermarków i ikon z akcjami??? W czasach Windows Phone 7 podczas pisania aplikacji watermarki trzeba było tworzyć samemu, zresztą - co tu gadać - takiej kontrolki nie ma póki co także w Silverlight desktopowym! (od czasów jak wyrzucono WatermarkTextBox’a z Silverlight 2 Beta).

DateTimeConverters

10_DateTimeConverters

Kolejna rzecz, której mi brakowało przy tworzeniu aplikacji w Windows Phone 7. W nowoczesnych aplikacjach daty prezentuje się często w sposób relatywny np. “ponad rok temu”. Dostajemy wiele gotowych konwerterów!

Poza tym m.in znacznie zoptymalizowano animacje tranzycji między stronami oraz skorzystano w LongListSelector z płynnego przewijania zgodnego z WP 7.1(dedykowany wątek).

Więcej na ten temat nowego toolkita można przeczytać m.in na stronach:

środa, 24 sierpnia 2011

Mango 7712 + drugi artykuł o lokalnej bazie

Po powrocie z urlopu wgrałem na telefon system Mango 7712, o którym w ostatnim poście wspominałem. Mimo dość długiej książeczki instrukcji i wielu ostrzeżeń w niej zawartych wszystko poszło według planu. Na całość procesu złożyło się: instalacja narzędzi Beta 2 Refresh i specjalnej wersji Zune, pobranie najnowszych poprawek, zrobienie backupu urządzenia oraz instalacja 3 aktualizacji (pierwsza dla umożliwienia aktualizacji, druga - do wersji 7043, trzecia - do wersji 7712). Jedyna rzecz, o której wyraźnie nie napisano, to fakt że do pobrania właściwych aktualizacji trzeba być zalogowanym w programie Zune, ale to wydaje się oczywiste. Jako ciekawostkę powiem, że dokonałem tego na polskim Windows i większość komunikatów, w tym Zune były zlokalizowane w naszym języku –:)

Ostatnio dużo działo się z WP 7.1 - otworzono marketplace, pojawił się nowy toolkit oraz SDK w wersji RC. O tych dwóch ostatnich napiszę więcej w kolejnym poście.

Chciałbym nadmienić, że międzyczasie ukazała się na MSDN druga część mojego artykułu o lokalnej bazie danych. Miłej lektury!

piątek, 29 lipca 2011

Artykuły, Windows Phone Mango RTM & Windows Phone Mango SDK Beta 2 Refresh

Ostatni post napisałem miesiąc temu, pora więc coś napisać –;)

Zacznijmy od sekcji Windows Phone Mango w polskim MSDN, gdzie zostały opublikowane 2 artykuły mojego autorstwa:

Miłej lektury!  Zaznaczam przy tym, że obecne pozycje to wierzchołek góry lodowej w tematyce nowego Windows Phone. Mam w planach kolejne tematy…

Równocześnie wiele się dzieje w narzędziach. O agentach pisałem mając do dyspozycji Betę 1, o lokalnej bazie po ukazaniu się Bety 2, a 2 dni temu udostępniono Windows Phone SDK 7.1 Beta 2 Refresh! Szczegóły można znaleźć tutaj, przegląd nowych elementów wraz ze screenshotami np. tu. 

Nieco wcześniej świat obiegła wiadomość o osiągnięciu przez Windows Phone Mango statusu RTM oraz informacja o rozszerzeniu Marketplace o nowe kraje i funkcjonalności.

środa, 29 czerwca 2011

Mango - Beta 2, Mango na żywo!

Stało się!

WP7.1 SDK Beta 2:

Aby zainstalować, trzeba odinstalować narzędzia w wersji Beta 1.

Co nowego:

  • Profiler - działa na aplikacjach na emulatorze i telefonie (tylko 7.1)
  • Emulator - szybszy i stabilniejszy (task switching - przytrzymanie F1)
  • Isolated Storage Explorer - dostęp do Isolated Storage aplikacji na emulatorze i na telefonie (nie widzi pliku z ustawieniami aplikacji)
  • Advertising SDK - teraz zintegrowane z ogólnym SDK, ale nadal do użycia tylko w USA
  • Zaktualizowana i uzupełniona dokumentacja MSDN
  • Breaking changes
    • ScheduledTaskAgent - usunięta metoda do nadpisywania OnCancel()
    • BTS - \Transfers -> \Shared\Transfers
    • Obrazki dla kafelków - Shared\ShellContent
    • LaunchForTest - specjalna metoda dla debugowania agentów
    • Baza danych - zmniejszenie maksymalnych i domyślnych - rozmiaru i bufora
    • CaptureResolution –> Size
    • …
  • Agenci - na czas debugowania wyłączone ograniczenia na pamięć i czas, limit na pamięć - DeviceStatus. ApplicationCurrentMemoryUsage
  • Normal Motion (akcelerometr, kompas), Enhanced Motion (akcelerometr, kompas, żyroskop)
  • [ta część będzie jeszcze aktualizowana]

Wgrywanie na telefon:

Powiadomienie developera zarejestrowanego w App Hub z linkiem na Connect.  Jeden telefon per developer. A gdzie Polska ? Aktualizacja może spowodować zablokowanie zarejestrowanego telefonu. Potrzebna Beta 2.

Team zaleca by nie czekać na finalną wersję, tylko mając najnowsze narzędzia i system Mango na telefonie, rozwijać w oparciu o to swoje aplikacje (aczkolwiek nie można ich jeszcze umieszczać na MarketPlace)