“Mobile Development Handbook”

February 5th, 2010

Książek o programowaniu na platformę Windows Mobile w języku polskim nie uświadczymy. W języku angielskim jest natomiast w czym wybierać. Na samym Amazon-ie jest co najmniej kilka pozycji wartych polecenia. Jedną z nich jest właśnie “Mobile Development Handbook”.

Dlaczego ją akurat wybrałem nie mam zielonego pojęcia. Ale z doświadczenia wiem, że książki Microsoft-u stoją na dobrym poziomie. A ponieważ nie jestem zwolennikiem rozmyślań autora nad wyższością bożego narodzenia nad wielkanocą dlatego preferuje książki które formą przypominają helpy opatrzone bardziej dokładnie opisanymi przykładami niż poradniki gotowania na parze.

Książka składa się z dziewięciu części:

  1. .NET Compact Framework – a Platform on the Move
  2. Building a Microsoft Windows Forms GUI
  3. Using SQL Server 2005 Compact Edition and Other Data Stores
  4. Catching Errors, Testing and Debugging
  5. Understanding and Optimizing .NET Compact Framework Performance
  6. Completing the Application: Packaging and Deployment
  7. Exchanging Data with Backend Servers
  8. Networking
  9. Getting Connected

Jak widać ze skróconego spisu treści książka obejmuje praktycznie wszystkie zagadnienia które mogą interesować każdego programistę Windows Mobile. Dlatego polecam ją każdemu kto dopiero ma zamiar zacząć przygodę z WM jak i tym, którzy już zjedli na niej zęby – bo na pewno im się przyda.
Ze swojej strony powiem tylko, że części o SQL CE pochłonąłem w jedno popołudnie; bo nigdy nie byłem orłem i fanem sposobu obsługi baz danych do którego przyzwyczaił nas Microsoft. Nie wspominając już o synchronizacji z “pełnym” SQL-em co zawsze przyprawiało mnie o ból głowy.

Minusem książki jest fakt że opisuje .NET CF w wersji 2.0. Wersja 3.5 jest tylko miejscami wspominana. Ale jeżeli ktoś orientuje się w różnicach między obydwiema wersjami wie, że nie ta rozbieżność nie wprowadza sporych różnic. Sam Compact Framework między tymi wersjami nie uległ znaczącym zmianom a .NET dostał tylko kilka dodatków ułatwiających pisanie aplikacji.

Książka do kupienia na Amazon w cenie 44,09$.

Z ciekawostek książka ma swoją grupę na Facebook-u Microsoft Mobile Development Handbook.

Jakub Florczyk .NET, Compact Framework , , , , ,

Pocket GPW 1.1

February 1st, 2010

Nowa odsłona programu Pocket GPW po sugestiach użytkowników.

Zmiany obejmują:

  • poprawkę na edycję alarmów, których nie można było usunąć
  • dodanie wartości obrotu i wolumenu obrotu

Aplikacja dostępna jest na portalu Codeplex.

Jakub Florczyk .NET, Compact Framework, Pocket GPW , , , , ,

SamsungMobileSDKNET

January 3rd, 2010

Żeby nie było, iż jestem jednostronny to dla odmiany dziś o firmie Samsung. I o jego w moim mniemaniu cudownym dziecku Samsung Windows Mobile SDK.

Na początek małe wytknięcie pięty achillesowej firmy HTC. Otóż mimo iż produkują świetne telefony, z najlepszymy nakładkami i oprogramowaniem, to ogromnym minusem jest brak jakiegokolwiek SDK dla bibliotek HTC.
Oczywiście podstawową część obsługi telefonu możemy załatwić standardowymi bibliotekami .NET / Tapi/ ExTapi / RIL ale często te najsmaczniejsze kąski siedzą w warstwach do których HTC nas nie chce dopuścić. I do dziś się zastanawiam dlaczego.
O tyle dobrze, że niektórym udało się dostać to obsługi akcelerometru i LED-ów HTC o tyle kamera np. nadal jest jedną wielką zagadką i dostęp do surowych danych a nie ubranych w jakieś okienka Microsoftu.

Z drugiej strony pojawia się firma Samsung i udostępnia pełne SDK do funkcji telefonu. Pisząc pełne, mam na myśli: akcelerometr, kamerę, lampę kamery, radio, led, haptics, czujnik światła, mysz optyczną, orientację 2D i 3D, czujnik zbliżeniowy, procesor audio, slider-a, wyjście TV, wibrację i kółko nawigacji. Jeżeli jeszcze ci szczęka nie opadła, to jest właśnie dobry moment.

Samsung całość udostępnił jako SDK, które można pobrać tutaj. Biblioteki są przygotowane pod C++ z jednym przykładem natywnym.

Jako, że nie mogłem znaleźć wrappera z pełną implementacją, postanowiłem go napisać samemu. Biblioteka dostępna jest na CodePlex SamsungMobileSDKNET. Na obecną chwilę zawiera pełną implementację wersji 2.1. Ale ponieważ nie posiadam telefonu Samsunga, żaden element nie jest przetestowany. Dlatego prośba dla programistów z telefonami Samsunga o przetestowanie poszczególnych elementów. No chyba, że wcześniej z Orange-a wezmę Samsunga Omnia II – bo ostatnio mi proponowali nawet w rozsądnej cenie i sam przetestuje poszczególne elementy.

Jakub Florczyk .NET, Compact Framework, SamsungMobileSDKNET , , , , , , , ,

RilNET – Radio Interface Layer (RIL) .NET wrapper – sprostowanie

January 3rd, 2010

A propos artykułu RilNET – Radio Interface Layer (RIL) .NET wrapper należy się drobne sprostowanie działania biblioteki a przede wszystkim obsługi lokalizacji.

Otóż po wielu testach na telefonach firm HP i HTC oraz po przeczytaniu kilku artykułów w sieci wszystkim osobom, które używają RIL-a należy się małe wyjaśnienie o którym nie zdawałem sobie sprawy w momencie pisania wpisu.

Otóż implementacja biblioteki RIL zależy od producenta telefonu. Sprowadza się to do tego, iż część funkcji może nie być w ogóle zaimplementowana!

W praktyce wygląda to tak, iż mój wysłużony HP 614C nie posiadał zaimplementowanej metody udostępniającej informację o komórce sieci  GetCellTowerInfo przez co w artykule błędnie zasugerowałem, że to pewnie wina sieci Orange.
Po zamianie i testach na HP Touch Pro2 wszystko działa poprawnie. Funkcja zwraca informacje o sieci!

Oczywiście można sobie zadać pytanie: no i co z tego? Otóż wbrew pozorom bardzo wiele. Chociażby to, że Google Maps potrafi obsługiwać RIL-a i jest w stanie określić waszą przybliżoną pozycję na podstawie wieży komórkowej.

Podsumowując. Jest to kolejny powód aby kupować telefony poważnych firm. Choć HP kiedyś bardzo się starało w sprawie PocketPC, obecnie daleko im do czołówki i standardów króla HTC.

Jakub Florczyk .NET, Compact Framework, RilNET , , , , , , , ,

BlipiNET

December 23rd, 2009

W nowej wersji Pocket Blip pracuję nad zmianą dostawcy wyszukiwarki oraz statystykami użytkowników. Wybór dostawcy padł na Blipi Marka Fossa, ponieważ poza wyszukiwarką Marek udostępnia też ranking i licznik obserwujących. Z tego powodu powodu popełniłem bibliotekę dostępową .NET do API. Projekt można znaleźć na CodePlex BlipiNET.

Jak w przypadku innych bibliotek zdecydowałem się na “toporne” metody HttpWebRequest ze względu na brak nowych rozwiązań a’la WCF w wersji Json w Compact Framework.

Przykłady użycia:

// Wyszukiwanie wiadomości
BlipiService bs = new BlipiService("[twój klucz API]");
Message[] messages = bs.Search("jakubflorczyk");
// Ranking (Top100)
BlipiService bs = new BlipiService("[twój klucz API]");
User userRank = bs.GetRank("jakubflorczyk");

Dostępna jest pełna implementacja aktualnego API:
- wyszukiwanie
- pobieranie rankingu użytkownika
- pobieranie licznika obserwujących użytkownika
- pobieranie statystyk Top 10 i 100

Jakub Florczyk .NET, BlipiNET, Compact Framework, Windows Forms , , , , , , ,

Lokalizacja aplikacji w .NET Compact Framework

December 7th, 2009

W kilku krokach i słowach, postaram się wyjaśnić zasadę lokalizacji aplikacji .NET Compact Framework. Wszystko przy uwzględnieniu certyfikowania aplikacji dla Windows Marketplace for Mobile.

Na samym początku pragnę przypomnieć, że lokalizacja opiera się na tłumaczeniu aplikacji dla danego kraju a nie języka! To jest bardzo ważny element z którego nie wszyscy sobie zdają sprawę. Ale później pokaże jak w prosty sposób “oszukać” Marketplace aby nasza aplikacja na jednym języku chodziła na wiele krajów.

Drugim ważnym problemem jest pytanie jakie musi sobie zadać każdy deweloper: w którym momencie lokalizować aplikację? Odpowiedź na to pytanie nie jest prosta. Jeżeli zamawiamy grafiki, piszemy teksty do naszej aplikacji należy o tym pamiętać na samym początku. Ale samą lokalizację sugeruje robić na samym końcu – nawet po testach funkcjonalnych. Ale ta teoria sprawdza się tylko w przypadku aplikacji okienkowych, bo gry warto lokalizować na samym początku, wraz z pisanym kodem. W aplikacjach okienkowych problem sprowadza się do zmian wprowadzanych na poszczególnych formach, które następnie musimy weryfikować na innych wersjach językowych. Dlatego aby uprościć sobie przeklikiwanie się przez kolejne formy i sprawdzanie czy zmiany zostały poprawnie przeniesione, sugeruje lokalizować aplikację na samym końcu.

Lokalizacja kodu.

Tutaj sprawa wygląda dość prosto i całość problemu sprowadza się do poprawnego wyświetlania danych oraz odpowiedniego sposobu konwertowania tychże.

// konwersja
DateTime dateTime = Convert.ToDateTime(xeEntry.Attribute("DateTime").Value, CultureInfo.CurrentCulture);
// wyświetlanie
label1.Text = dateTime.ToString(CultureInfo.CurrentCulture);

Ot co, cała filozofia. Jeżeli używamy Microsoft FxCop – nie omieszka nas o tym poinformować odpowiednim komunikatem.

Lokalizacja okien (Form-ów).

Mój projekt składa się tylko z jednego forma, w którym jest bardzo proste menu (w tym momencie w języku angielskim):
Largo_Form1

Następnie przełączamy się na właściwości forma i zmieniamy Localizable na True oraz Language na Polish:

Largo_Language

Po tej operacji w nazwie okna (na górnym pasku) powinniśmy zobaczyć napis Form1.cs [Design - Polish]. W tym momencie możemy przetłumaczyć menu na język polski:

Largo_Form1_Polish

Kiedy dokonamy pierwszej zmiany w plikach aplikacji zostanie utworzony dodatkowy plik o nazwie Form1.pl.resx. Każde tłumaczenie jakiego dokonamy będzie miało odzwierciedlenie właśnie w tym pliku – poprzez utworzenie odpowiedniego rekordu lokalizacji.

Tak jak pisałem na początku w przypadku okienek warto te kroki zostawić na sam koniec, aby później nie paprać się zbytnio w zmianach na kolejnych formach kiedy zauważymy źle ustawiona kontrolkę lub tym podobny trywialny problem, który po lokalizacji może narastać lawinowo w zależności od ilości krajów.

Lokalizacja zasobów (Resources).

Załóżmy że nasz aplikacja wyświetla MessageBox-a z tekstem “Are you sure?” – np w momencie kliknięcia w Exit (tak na marginesie certyfikacja dla Marketplace zabrania takich praktyk). Tekst przenosimy do zasobów pod nazwą MessageBox_Text. Mamy załatwioną wersję angielską.
Aby utworzyć odpowiednie tłumaczenie w wersji polskiej, musimy utworzyć kopię pliku Resources.resx zmieniając jego nazwę na Resources.pl.resx i dokonując tłumaczenia. Gotowe!

Lokalizacja instalatora.

Aby przenieść i wkompilować wszystkie wersje językowe w jednego CAB-a musimy dodać do projektu instalatora pliki lokalizacyjne. Aby to zrobić klikamy prawym klawiszem na projekcie i wybieramy Add -> Project Output… -> Localized resources.

W tym momencie uzyskujemy jeden plik CAB, który załaduje wersję językową naszej aplikacji w zależności od ustawień regionalnych telefonu użytkownika.

A co na to Marketplace?

Zanim napiszę o Marketplace wrócę do tematu, który z premedytacją pominąłem na początku a dotyczy działania lokalizacji na telefonie. Otóż sam proces jest stosunkowo prosty w działaniu. Windows Mobile odpala program, szukając jednocześnie lokalizacji zgodnej z danym ustawieniem regionalnym. Jeżeli nie dokonamy lokalizacji programu albo nie system operacyjny nie znajdzie odpowiedniej lokalizacji, zostanie załadowana lokalizacja domyślna programu. Jeżeli system odnajdzie odpowiednią lokalizację – zostanie ona załadowana.

Windows Marketplace for Mobile zakłada, że każdy certyfikowany program może zawierać nieograniczoną ilość lokalizacji o ile znajdują się one w jednym pliku CAB. Jeżeli lokalizacja znajduje się w oddzielnym pliku CAB niż “oryginał” cały proces certyfikacji musi zostać wykonany ponownie za co zapłacimy 100$. W pierwszym wypadku zapłacimy tylko 9.99$ za każdy kolejny kraj. Jednym słowem warto kompilować CAB-y z wieloma lokalizacjami.

Wracając do tematu “oszukania” Marketplace. Z mojego punku widzenia istnieje Polska i reszta świata, która mówi w języku angielskim. W Marketplace reszta świata mówiąca po angielsku sprowadza się do następujących krajów: Australia, Kanada, Indie, Irlandia, Nowa Zelandia, Singapur, Wielka Brytania, Stany Zjednoczone. Aby nie komplikować sobie sprawy z lokalizacjami sugeruję utworzyć “domyślną” lokalizację w języku angielskim a tłumaczenie w Polskim. Chodzi o to, że zamiast tworzyć osiem lokalizacji, tworzymy tylko jedną.

Jakub Florczyk .NET, Compact Framework, Visual Studio , , , ,

Pocket Demotywatory 2.1

December 4th, 2009

Kolejna odsłona Pocket Demotywatory. Już dostępna w Windows Marteplace

Osoby które nie chcą korzystać z Marketplace mogą pobrać plik CAB na dole wpisu ew. z Freeware Pocket PC.

Sugeruje użycie Marketplace do instalacji bo proces aktualizacji kolejnych wersji jest automatyczny.

    Zmiany w wersji 2.1:

  • stronicowanie
  • podgląd głównej, poczekalni, true demotów
  • usunięte automatyczne odświeżanie

Pocket_Demotywatory_2.0

Klienta w postaci pliku CAB można pobrać tutaj.

Jakub Florczyk Pocket Demotywatory , , , , , , ,

Pocket Demotywatory 2.0

November 20th, 2009

Kolejna odsłona Pocket Demotywatory. Od kilku dni dostępna także w Windows Marteplace

Sporo czasu zajęła najnowsza wersja. Wynikało to z dogadywania się z Wielkim Demotywatorem co do wykorzystania loga demotywatory.pl oraz przygotowaniem aplikacji pod certyfikację Marketplace. Osoby które nie chcą korzystać z Marketplace mogą pobrać plik CAB na dole wpisu ew. z Freeware Pocket PC.

Ważne uwaga dla osób, które miały zainstalowaną poprzednie wersję! Ponieważ w tej wersji zmienił się developer (aktualnie oficjalnie jest nią moja firma Cubicsoft), zalecam ręczne usunięcie poprzedniej wersji – bo gdy tego nie zrobicie będziecie mieli obydwie zainstalowane.
Sugeruje także użycie Marketplace do instalacji bo proces aktualizacji aplikacji jest automatyczny a niedługo pojawią się nowe funkcje: poczekalnia, truedemoty, stronicowanie.

    Zmiany w wersji 2.0:

  • zmienione ikony toolbara
  • dodana funkcja zbliżenia na napis
  • kilka drobnych poprawek związanych ze stabilnością

Pocket_Demotywatory_2.0

Klienta w postaci pliku CAB można pobrać tutaj.

Jakub Florczyk Pocket Demotywatory , , , , , , ,

Windows Marketplace dla mobilnych urządzeń – Formularz W-8BEN

November 10th, 2009

Ostatnim krokiem rejestracji w Windows Marketplace for Mobile w przypadku kiedy mamy zamiar zarabiać na naszych aplikacjach (i tylko w takim) jest wypełnienie i wysłanie formularza W-8. Ponieważ tak jak całą serię piszę w oparciu o swój przypadek, dlatego będziemy wypełniać wersję W-8BEN, która jest przeznaczona dla osób nie będących obywatelami albo rezydentami Stanów Zjednoczonych.

Po co właściwie wypełniać ten wniosek? Otóż na stronach Marketplace jest na to wytłumaczenie:

Aby firma Microsoft mogła ustalić siedzibę dewelopera dla celów podatkowych i obliczyć należny podatek, deweloper musi wydrukować egzemplarz odpowiedniego formularza W-8 i przesłać go na następujący adres:

Microsoft
‘Windows Marketplace for Mobile’
One Microsoft Way
Redmond WA 98052

Deweloper będzie mógł otrzymywać zapłatę za sprzedawane produkty dopiero wtedy, gdy firma Microsoft otrzyma właściwy formularz W-8 (zazwyczaj wersję W-8BEN) i odpowiednio przetworzy zawarte w nim dane. Brak formularza uniemożliwia wypłacanie środków deweloperowi.

Wniosek ten służy tylko i wyłącznie do tego abyś potwierdził, że nie jesteś podatnikiem Amerykańskim.
Formularz znajduje się pod tym adresem. Pod tym adresem można natomiast pobrać tłumaczenie tego dokumentu, ale pamiętaj że jest ono tylko w celach informacyjnych!

Przejdźmy do meritum. Cała operacja jest stosunkowo prosta i sprowadza się do wypełnienia / zaznaczenia odpowiednich punktów:

Part I

1. Imię i nazwisko

2. Kraj zamieszkania

3. Typ (tutaj większość z nas zaznaczy Individual)

4. Adres zamieszkania:

- ulica + nr domu / mieszkania
- kod + miasto
- kraj

7. NIP

Part II

9. Zaznaczyć opcję “a” i wpisać kraj w wykropkowanym miejscu

Tak wypełniony dokument drukujemy. Na samym dole podpisujemy się oraz wpisujemy aktualną datę. Następnie udajemy się na pocztę i wysyłamy na adres:

Microsoft
‘Windows Marketplace for Mobile’
One Microsoft Way
Redmond WA 98052
USA

Jakub Florczyk Uncategorized, Windows Marketplace Mobile ,

Windows Marketplace dla mobilnych urządzeń – Ja mówić po polski. Ty mnie rozumieć?

October 25th, 2009

No proszę. Nie było mnie trzy dni a w polskim Windows Marketplace for Mobile się “dużo” porobiło.

Krzychu na PDA.pl ogłosił rewolucję, albo co najmniej mały pucz Marketplace w Polsce nabiera rozpędu – dostępne jest już 7 aplikacji a ja nic o tym nie wiem! No dobra, tak naprawdę to wiem, bo sprawdziłem w sobotę. I od razu jak zobaczyłem nowe programy to ceny mnie tak poraziły, że nie miałem ochoty do dalszego przeglądania. Ale postanowiłem przeczytać opis SPB Radio, bo tylko gdzieś, kiedyś otarłem się o ten dość ciekawy programik i oto jak on wygląda:

Wysokiej jakości odtwarzacz Internet radiowy dla Windows komórkowych, co daje abonamentu swobodny dostęp do nieograniczonej liczby stacji live streaming radiowych z całego świata.

Ke? Zasadniczo to nie winie SPB za ten efekt. Winie Microsoft za durne zasady lokalizacji, bo jakby opis był po angielsku to wszyscy by zrozumieli a tak mamy jakiś idiotyzm. Przypomina mi się moda jakiś czas temu na tworzenie witryn z dodanym automatycznym tłumaczeniem na wszystkie języki / dialekty świata (szkoda że nie potrafię teraz znaleźć przykładów).

Jakub Florczyk Windows Marketplace Mobile ,