Windows Phone

DotNetMeeting

Co?

Interesujesz się Windows Phone 7 lub XNA? Chciałbyś zobaczyć możliwości najnowszych technologii w działaniu? W imieniu organizatórów zapraszam na konferencję Dot Net Meeting. Podczas pięciu sesji podejmiemy tematy, które pozwolą bliżej poznać te właśnie technologie!

Gdzie?

Toruń, Wydział Matematyki i Informatyki UMK.

Kiedy?

26.03.2011 – sobota, więc na pewno znajdziesz czas! Startujemy już od godziny 8:30.

To wszystko?

Nie! Oprócz masy wiedzy czekają książki, nagrody i niespodzianki oraz pizza sponsorowana przez toruńską firmę AIS.PL. Szczegóły i aktualne informacje można znaleźć na stronie dotnetmeeting.pl

Nie czekaj, zarejestruj się już dziś!

(Dla pierwszych 100 osób kupon od TekPub wart 19$ – szczegóły).


Windows Phone 7 – więcej darmowych aplikacji!

Do tej pory rejestrując się na marketplace była możliwość opublikowania 5 darmowych aplikacji. W dzisiejszym newsletterze ukazała się informacja, że liczba ta zostaje zwiększona z 5 do 100!
Warto tu jednak zaznaczyć jedną rzecz, a mianowicie opublikowanie aplikacji oznacza wysłanie pliku XAP, a nie jakby można było się spodziewać publikację pojedynczej aplikacji. Oznacza to tyle, że wszelkie updaty, ponowne wysyłanie po wykrytych błędach itp jest liczone jako -1 z darmowej puli. Ma to swoje uzasadnienie. “Publikacja” jest tu rozumiana jako, tak jak wspomniałem, wrzucenie do machiny weryfikacyjnej pliku XAP, co wiąże się z kosztami (po wyczerpaniu darmowego limitu opłata wynosi 20$). Nie mniej jednak zwiększenie tego limitu ułatwi zapoznanie się z marketplace oraz nie zrazi osób, które dopiero zaczynają przygodę z tą technologią.


Windows Phone 7 na Channel 9 i codeguru.pl – Data binding i MVVM

Dziś ukazał się trzeci już artykuł na codeguru.pl z cyklu WP7 dla programistów. Dzisiejszy odcinek poświęcony jest bindowaniu danych oraz wzorcowi MVVM. Podobnie jak poprzednio artykuł ten nawiązuje do równoległej serii webcastów dostępnej na Channel 9 w języku polskim. Autorem trzeciego odcinka jest Michał Korzunowicz.

Projekt do pobrania



Odcinek 3


Windows Phone Capability Detection Tool inaczej – UI

Capabilities – na początek trochę teorii

Przy tworzeniu aplikacji na Windows Phone w naszym projekcie dodawany jest zawsze plik WMAppManifest.xml, który znajduje się w katalogu Properties. Istotną jego częścią jest informacja na temat tak zwanych capabilities, czyli elementów platformy, z których nasza aplikacja będzie korzystać. Domyślnie zawarte tam są wszystkie możliwe wpisy widoczne na listingu 1. Należą do nich między innymi korzystanie z połączenia sieciowego, mikrofonu, akcelerometru, notyfikacji itp.

Listing 1. Capabilities

1
2
3
4
5
6
7
8
9
10
11
12
13
<Capabilities>
	<Capability Name="ID_CAP_GAMERSERVICES"/>
	<Capability Name="ID_CAP_IDENTITY_DEVICE"/>
	<Capability Name="ID_CAP_IDENTITY_USER"/>
	<Capability Name="ID_CAP_LOCATION"/>
	<Capability Name="ID_CAP_MEDIALIB"/>
	<Capability Name="ID_CAP_MICROPHONE"/>
	<Capability Name="ID_CAP_NETWORKING"/>
	<Capability Name="ID_CAP_PHONEDIALER"/>
	<Capability Name="ID_CAP_PUSH_NOTIFICATION"/>
	<Capability Name="ID_CAP_SENSORS"/>
	<Capability Name="ID_CAP_WEBBROWSERCOMPONENT"/>
</Capabilities>

Informacje te są o tyle istotne, że informują system po jakie uprawnienia będzie sięgać nasza aplikacja. W przypadku próby odwołania się do funkcjonalności, która nie jest uwzględniona w sekcji capabilities wówczas zostanie zgłoszony błąd bezpieczeństwa, a nasza aplikacja zostanie zatrzymana.

Capabilities też są wykorzystywane podczas procesu dodawania aplikacji do marketplace. W tym momencie proces ten analizuje paczkę z naszą aplikacją pod i następnie ustala ich listę usuwając zbędne elementy. Po co w takim razie jest ta informacja w WMAppManifest, skoro możnaby wychodzić z założenia – używam wszystkiego, a wy znajdździe to, czego jednak nie potrzebuję. Jeżeli weźmiemy pod uwagę, że proces weryfikacji może się w przyszłości zmienić i nie pomagać użytkownikowi w określaniu właściwych wartości, to ocena przydatności WMAppManifest ulega zmianie :) Jeżeli okaże się, że automatyczne usuwanie niepotrzebnych wpisów zosgtanie zarzucone, to te śmieci mogą mieć duży wpływ na postrzeganie naszej aplikacji. Wyobraźmy sobie prosty przykład: tworzymy prosty stoper i umieszczamy go na marketplace bez czyszczenia manifestu. W momencie gdy użytkownik znajduje naszą aplikację i zobaczy, że korzysta ona z sensorów, GPS, notyfikacji, sieci, mikrofonu itp, to podejrzewam, że zastanowi się zanim ją zainstaluje.

Koniec commandline – czyli Windows Phone Capability Detection Tool UI

Na szczęście do analizy naszej aplikacji pod kątem capabilities istnieje narzędzie dostarczane z Windows Phone Developer Tools o nazwie Windows Phone Capability Detection Tool. Jest to narzędzie dostępne z linii komend, które można znaleźć w katalogu %ProgramFiles%\Microsoft SDKs\Windows Phone\v7.0\Tools\CapDetect.

Składnia jest bardzo prosta. Wywołujemy komendę CapabilityDetection.exe podajemy plik z regułami (Rules.xml) a następnie w apostrofach ścieżkę do naszej aplikacji. Może to być ścieżka do pliku XAP, lub po prostu do katalogu, który ją zawiera. W rezultacie otrzymujemy listę używanych elementów, które powinny się znaleźć w manifeście naszej aplikacji. Przykład wykorzystania widać na rysunku 1.

Windows Phone Capability Detection Tool

Rysunek 1. Użycie CapabilityDetection.exe

Jak każde narzędzie dostępne z poziomu command line jest ono mało wygodne. W związku z tym przygotowałem nakładkę graficzną o nazwie WindowsPhoneCapabilityDetectionTool UI, która znacznie (przynajmniej w mojej ocenie) ułatwia korzystanie z tego narzędzia. Ekran aplikacji widoczny jest na rysunku 2.

Windows Phone Capability Detection Tool UI

Rysunek 2. Okno Windows Phone Capability Detection Tool UI

Jego działanie sprowadza się do wykonania czterech kroków:

  1. Wybieramy folder skompilowanej aplikacji
  2. Procesujemy aplikację
  3. Kopiujemy kod
  4. Podmieniamy sekcję capabilities

W razie problemów korzystając z lupy możemy otworzyć okno pomocy w którym opisane są wszystkie elementy niezbędne do wygodnego korzystania z tego narzędzia.

Windows Phone Capability Detection Tool UI Help

Rysunek 3. Okno pomocy Windows Phone Capability Detection Tool UI

Ważna informacja

Z racji na konieczność dodania pliku app.manifest, w którym jest wpis o dziedziczeniu uprawnień od aktualnego użytkownika (requestedExecutionLevel level=”asInvoker”) może zostać zgłoszona informacja o niebezpieczeństwie (Comodo tak robi). Nie ma się jednak czego bać :) – w razie potrzeby mogę udostępnić też źródła.

Do pobrania

binaria


Windows Phone 7 na Channel 9 i codeguru.pl – Kontrolki i style

Dziś na codeguru.pl ukazał się mój drugi artykuł na temat Windows Phone 7 – tym razem podejmuję temat kontrolek i styli. Artykuł ten nawiązuje do webcastu o tym samym tytule, który przygotował Michał Korzunowicz. Znajdziecie go tutaj.

Materiały do artykułu

Panorama w akcji - artykuł na Codeguru.pl

Odcinek 2


3. 2. 1. Start. Windows Phone 7 na Channel 9 i codeguru.pl

Od dziś rozpoczynają się dwa równoległe cykle poświęcone programowaniu w technologii mobilnej Windows Phone 7. Pierwszy z nich będzie dostępny na portalu Channel9. Autorami webcastów są Barłomiej Zass, Michał Korzunowicz, Daniel Plawgo oraz ja :) Pierwszy odcinek, którego jestem autorem dostępny jest pod tym adresem. Jest on poświęcony ogólnemu wprowadzeniu w tematykę Windows Phone 7 jako platformy dla programistów, opowiadam o narzędziach. Pokazuję rowniez jak stworzyć swoją pierwszą aplikację na tą platformę korzystając z Silverlight oraz XNA.

Jednocześnie z webcastami na Channel 9 będą ukazywały się artykułu na portalu codeguru.pl. Będą one w ścisły sposób nawiązywać do tematyki poszczególnych webcastów. Powiązanie to będzie tym silniej widoczne, że na końcu każdego artykułu bedzie dostępny link do odpowiedniego nagrania na Channel9. Pierwszy artykuł możecie znaleźć tutaj.

Materiały do pierwszego odcinka

Mamy nadzieję, że dzięki takiemu podejściu i dywersyfikacji każdy znajdzie coś dla siebie. Oczywiście dla lepszego poznania tematu polecam zapoznanie się zarówno z webcastem jak i z artykułem :) Kolejne odcinki serii będą ukazywały się co tydzień zarówno na CG jak i CH9 (a stosowny news będzie zawsze dostępny również tutaj).
artykuł

Odcinek 1


Kolejna książka o WP7 – tym razem w kontekście Silverlight

Puya Paymudya z Indonezyjskiego Centrum Innowacji Microsoft udostępnił książkę o Windows Phone 7 za darmo. Można ją pobrać ze stron Microsoft Feed. Jest to kolejna książka o Windows Phone 7 udostępniona w formie bezpłatnego ebooka. Jak widać firma Microsoft stara się dotrzeć do jak największego grona deweloperów, dzięki czemu możemy się spodziewać dynamicznego rozwoju Marketplace dla WP7. Oby tak dalej, bo więcej aplikacji zrobionych w “dobry” sposób to korzyść nie tylko dla Microsoft, ale przede wszystkim dla użytkowników urządzeń z najnowszym systemem mobilnym MS.


XNA + Modele 3D = Blender

Dziś postanowiłem podzielić się swoimi początkami jeżeli chodzi o platformę XNA oraz wykorzystanie modeli 3D. Na rynku mamy wiele programów do modelowania 3D, natomiast jednym z popularniejszych, a dodatkowo bezpłatnych programów jest Blender. Aktualnia stabilna wersja to 2.49b i to właśnie ona posłuży nam do przygotowania i wyeksportowania modelu.

Wersja podstawowa

Uruchamiamy zatem Blendera (wymagany jest w tym zainstalowany Python 2.6). Widzimy domyślny układ okna, na którym znajduje się sześcian, lampa i kamera. Do XNA będziemy eksportować pojedyncze modele, zatem pozbywamy się kamery i lampy, lub usuwamy wszystko (klawisz A, następnie Del) i dodajemy sześcian na nowo (Spacja -> Add -> Mesh -> Cube). Co do samego modelu pozostawiam wam pole do popisu. Ja w tym momencie pozostanę przy sześcianie :)

XNA potrafi korzystać z modeli zapisanych między innymi w formacie FBX. Blender w ostatniej stabilnej wersji wspiera eksport do takiego właśnie formatu. Jezeli korzystacie z jakiejś starczej, to również nie ma problemu, gdyż istnieją gotowe skrypty, które umożliwiają eksport do takiego właśnie formatu.
Klikamy zatem Menu File -> Export -> Autodesk FBX (.fbx). W tym momencie nie korzystamy z animacji, zatem możemy odznaczyć pole Enable Animation, a następnie zapisujemy plik na dysku.

Aby móc skorzystać z tak wyeksportowanego modelu w XNA najpierw musimy stworzyć projekt. W tym celu skorzystamy z szablonu Windows Game. Równie dobrze można skorzystać z projektu dla Windows Phone 7. Jedyna różnica jaka tu będzie, to inne współrzędne dla ustawień kamery, ale ich dopasowanie nie jest problemem.


W przeciwieństwie do wcześniejszych wersji XNA mamy tu do czynienia z oddzielnym projektem.


Dla zachowania porządku dodajemy sobie katalog Models, do którego następnie dodajemy wyeksportowany przed chwilą obiekt w formacie fbx.
Teraz pora na kawałek kodu. W pliku Game1.cs dodajemy zmienne:

1
2
3
private Model _model;
float aspectRatio;
Vector3 cameraPosition = new Vector3(10.0f, 10.0f, 10.0f);

W metodzie LoadContent musimy zainicjować ww zmienne w taki oto sposób:

1
2
_model = Content.Load<Model>("Models/sampleModel");
aspectRatio = graphics.GraphicsDevice.Viewport.AspectRatio;

Teraz przechodzimy do metody Draw, która jest odpowiedzialna za idświeżanie widoku. Naszym zadaniem jest narysowanie każdej powierzni po uwczesnym nadaniu jej odpowiednich wartości oświetlenia i projekcji. Gotowy kod wygląda następująco.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
// Draw the model.
foreach (ModelMesh mesh in _model.Meshes)
{
foreach (BasicEffect effect in mesh.Effects)
{
effect.EnableDefaultLighting();
effect.View = Matrix.CreateLookAt(cameraPosition,
Vector3.Zero, Vector3.Up);
effect.Projection = Matrix.CreatePerspectiveFieldOfView(
MathHelper.ToRadians(20.0f), aspectRatio,
1.0f, 50.0f);
}
 
mesh.Draw();
}
 
base.Draw(gameTime);
}

W tym momencie jesteśmy gotowi do uruchomienia projektu, którego efekt powinien prezentować się jak na poniższym screenie:

Scena jest trochę statyczna, więc możemy jeszcze dodać rotację. W tym celu tworzymy dodatkową zmienną, która będzie przechowywała aktualny kąt obrotu (float modelRotation) oraz uaktualniamy ją w metodzie Update:

1
modelRotation += (float)gameTime.ElapsedGameTime.TotalMilliseconds * MathHelper.ToRadians(0.1f);

Teraz w metodzie Draw dodajemy kod odpowiedzialny za zaaplikowanie odpowiedniego obrotu (na przykład względem osi OY). Pamiętajmy, że XNA to świat macierzy, dlatego korzystamy z takiego kawałka kodu:

1
effect.World = Matrix.CreateRotationY(modelRotation);

Jeżeli chcemy zastosować więcej obrotów musimy przemnożyć przez siebie odpowiednie macierze. Teraz po uruchomieniu projektu nasz sześcian ożył :)

Teksturowanie

Jednolite obiekty to nie jest szczyt marzeń, dlatego przydałoby się wykorzystać jakąś teksturę. Tutaj sprawy się nieznacznie komplikują. Tak jak w kwesti modelowania i eksportowania modeli ze standardowymi materiałami nie ma tu większej magii, tak w przypadku wykorzystywania tekstur są pewne (czasem spore) różnice w każdej wersji Blendera. W internecie można znaleźć różne posty, jednakże nie wpadł mi w ręce żaden odpowiadający tej właśnie wersji. Zatem metodą prób i błędów z małą pomocą dokumentacji przedstawiam kolejne ktoki, jakie musimy podjąć aby przygotować taki model.

  • Tworzymy w blenderze nowy projekt.
  • Dodajemy sześcian
  • Dzielimy ekran na dwie części
  • Przenosimy się do trybu Edit
  • W zakładce Editing (F9) wybieramy UV texture -> New
  • W jednej z części zostawiamy widok 3D, a w drugiej przełączamy się na UV/Image Editor
  • Przełączamy się w tryb edycji powierzchni i Wybieramy jedną z nich.
  • Wybieramy plik graficzny, który ma być teksturą danej powierzchni
  • Przełączamy w tryb Textured, dzięki któremu mamy podgląd tego co zrobiliśmy

Analogiczne operacje wykonujemy dla kolejnych powierzchni (w tym przypadku dla ścian sześcianu). Jeżeli zaznaczymy kilka wówczas załadowanie pliku graficznego spowoduje, że zostanie on wczytany dla wszystkich ścian.

Teraz czas zapisać pracę i ponownie wyeksportować model do formatu fbx, który następnie przenosimy do projektu. Jest jednak jedna rzecz, którą musimy zmienić. W pliku modelu mamy zapisane informacje o teksturach w postaci relatywnych ścieżek. Musimy je pozmieniać na odpowiednie wartości. Jednocześnie w projekcie tworzymy katalog Textures, do którego przenosimy wykorzystane przez nas tekstury. Otwieramy plik FBX przy pomocy edytora tekstowego (notatnik, lub dwuklik w Visual Studio) i wyszukujemy wystąpień RelativeFilename a następnie je uaktualniamy:
RelativeFilename: “..\Textures\sampleTexture.png” oraz RelativeFilename: “..\Textures\sampleTexture2.png” Teraz po wykorzystaniu nowego modelu możemy się cieszyć sześcianem z teksturami.

To koniec. Analogicznie postępujemy z bardziej złożonymi obiektami i teksturami, dzięki czemu dużo łatwiej możemy tworzyć niesamowitą grafikę na platformie XNA przy użyciu intuicyjnego programu do modelowania jakim jest Blender.

Projekt do pobrania.


WP7 – Silverlight + XNA != InvalidOperationException

Dziś po małej przerwie mała podpowiedź dla osób zajmujących się Windows Phone 7.

Jak wiadomo (lub też nie :) ) platformy, przy pomocy których możemy pisać własne aplikacje na WP7 to Silverlight 4 Windows Phone (nie piszę samego Silverlight, bo są tu pewne różnice w stosunku do pełnej wersji) oraz XNA 4.0. Nie oznacza to jednak, że musimy zamykać się tylko w jednym ze światów. Istnieje możliwość korzystania w jednym projekcie z przestrzeni nazw, klas i funkcjonalności dostępnych w obu tych technologiach. Zapewne najczęstsze “wymieszanie” technologii następuje gdy tworzymy w Silverlight. Dlaczego? Między innymi dlatego, że XNA oferuje nam wiele funkcjonalności multimedialnych takich jak odtwarzanie dźwięków, nagrywanie przy pomocy mikrofonu, MediaPlayera, ale również udostępnia rozpoznawanie gestów przy pomocy TouchPanel (tak – wiem, że Silverlight mamy Silverlight Control Toolkit i GestureListener, ale tak naprawdę jest on nakładką na TouchPanel z XNA :) ).

Tak czy inaczej, może okazać się, że w momencie gdy dodamy do projektu referencję do klas z XNA i będziemy korzystać z zawartych tam obiektów może się okazać, że otrzymujemy błąd widoczny na screenie poniżej, czyli InvalidOperationException, FrameworkDispatcher.Update has not been called.

Dispatcher

Oznacza on tyle, że korzystamy z elementów, które wymagają wywołania metody “odświeżenia stanu XNA” . Aby to zrobić wystarczy użyć takiego oto fragmentu kodu w konstruktorze strony SL:

1
2
3
4
DispatcherTimer dt = new DispatcherTimer();
dt.Interval = TimeSpan.FromMilliseconds(33);
dt.Tick += delegate { try { FrameworkDispatcher.Update(); } catch { } };
dt.Start();

W tym momencie przy uruchomieniu aplikacji błąd ten się nie pojawi. Warto jeszcze zauważyć, że nie ma sensu ustawiać częstszego odświeżania (czyli interwału dla DispatcherTimer), gdyż platforma Windows Phone 7 wspiera maksymalnie 30 klatek na sekundę (co daje odświeżenie do 33 milisekundy), w przeciwieństwie do pełnego XNA, które wspiara standardowo 60 fps.


Windows Phone 7 – porównanie urządzeń

Pewnego dnia siedząc przed komputerem i studiując lekturę dotyczącą Windows Phone 7 trafiłem na porównanie urządzeń pod względem rozmiarów, wagi, baterii, pamięci RAM/ROM itp. Niestety gdy chciałem jeszcze raz sięgnąć do tego zestawienia nie mogłem go znaleźć…
Przypadkiem porównanie ponownie wpadło mi w ręce, a właściwie pojawiło się na moim ekranie i tym razem, zamieszczam je na blogu. Robię to z dwóch powodów:
1 – w razie potrzeby będę wiedział gdzie szukać :)
2 – może komuś też się to przyda, lub kogoś zainteresuje

Windows Phone 7 comparision

Źródła:
ElectricForest
Microsoft News Center


  • O mnie

    Maciej Grabek

    Moje profile na:

    MVP

    Codeguru.pl GoldenLine
    Twitter CodeProject

  • english version
  • Polecam

  • Copyright © Maciej Grabek. All rights reserved.
    Powered by WordPress
    %d bloggers like this: