sobota, 28 grudnia 2013

O kontrolkach Telerika dla Windows Phone 7

Wstrzymywałem się z napisaniem tego posta, ale ostatnio moje aplikacje korzystające z RadControls for Windows Phone nie działają jak powinny...

Błędy w kontrolkach

Już od jakiegoś czasu spisywałem irytujące błędy w kontrolkach Telerika:
  1. AutoComplete rzucał wyjątkiem podczas wyboru podpowiedzi (poprawiono). Ten błąd nie został przeze mnie wyłapany podczas publikowania aktualizacji Listy zakupów, przez co posypało się kilka negatywnych recenzji :-(
  2. Innym razem RadMessageBox zawsze zwracał informację, że został wciśnięty przycisk nr 1, mimo że było ich kilka (poprawiono).
  3. LiveTileHelper działa zawodnie przy zrzucaniu kontrolki do kafelka. Co któryś raz kafelek nie jest renderowany prawidłowo, a cała operacja działa zadziwiająco wolno.

    Raczej lepszym sposobem będzie samodzielny zrzut kontrolki do obrazka (przykładowy kod). Wynik jest świetny - kafelek po lewej to wynik działania Telerikowej kontrolki, po prawej to własny kod:


Wnioski

Nie chcę powiedzieć, że programiści nie mają prawa popełniać błędów, ale przy płatnych narzędziach wymagam przynajmniej, aby podstawowa funkcjonalność była przetestowana. W dwóch pierwszych przykładach tak nie było - błędy były powtarzalne i można je było wyłapać praktycznie przy pierwszym użyciu.

Co więc robić?

  • Nie ufać, że jakikolwiek zewnętrzny komponent jaki używamy jest gruntownie przetestowany. 
  • Samodzielnie testować całą aplikację, zwłaszcza w tych miejscach w których korzystamy z zewnętrznych kontrolek.
  • Samodzielnie pisać kod i ograniczyć korzystanie z zewnętrznych komponentów :-) Przynajmniej mamy kontrolę nad kodem i wiemy jak coś zostało zaimplementowane.
  • Ewentualnie: wstrzymać się z aktualizacją kontrolek w naszym projekcie, jeśli aplikacja działa dobrze i użytkownicy nie zgłaszają błędów.

czwartek, 26 grudnia 2013

Zapis kontrolki do kafelka Live Tile

W bibliotece RadControls for Windows Phone znajduje się mechanizm do zrzucania kontrolki do kafelka Live Tile (przy użyciu LiveTileHelper). Niestety, ta operacja jest bardzo zawodna - często kafelek nie renderuje się prawidłowo (zwłaszcza gdy jest nieco bardziej skomplikowany), a i czas wykonywania pozostawia wiele do życzenia. Nie mam pojęcia jak to ich programiści zaimplementowali, ale postanowiłem wziąc sprawy w swoje ręce, by znaleźć lepsze rozwiązanie!

Kod


Oto mała metoda, która zapisze kontrolkę (która ma być użyta jako Live Tile), a następnie zwróci ścieżkę do pliku w Isolated Storage. Tą ścieżkę następnie musimy dodać do StandardTileData we właściwości BackgroundImage.

I to tyle - obrazkowy kafelek powinien pojawić się na ekranie głównym telefonu! Warto również potestować nazwę kafelka, bo mam wrażenie że raz na jakiś czas nie odświeża się na WP8, a więc można tak zmienić poniższy kod, aby nazwa pliku była generowana z GUID-em. Oczywiście wówczas należy kasować wszystkie nieużywane kafelki, żeby niepotrzebnie nie zużywać pamięci telefonu.

public static string SaveTileToJpeg(UIElement customTile, string filename = "CustomTile.jpg", int width = 336, int height = 336, int quality = 95)
        {
            string dir = "Shared/ShellContent";
            string filePath = dir + "/" + filename;

            customTile.UpdateLayout();
            customTile.Measure(new Size(width, height));
            customTile.UpdateLayout();
            customTile.Arrange(new Rect(0, 0, width, height));

            var bmp = new WriteableBitmap(width, height);
            bmp.Render(customTile, null);
            bmp.Invalidate();

            var myStore = IsolatedStorageFile.GetUserStoreForApplication();
            if (!myStore.DirectoryExists(dir))
            {
                myStore.CreateDirectory(dir);
            }

            using (IsolatedStorageFileStream myFileStream = myStore.CreateFile(filePath))
            {
                bmp.SaveJpeg(myFileStream, bmp.PixelWidth, bmp.PixelHeight, 0, quality);
                myFileStream.Close();
            }

            return "isostore:" + filePath;
        }

A oto przykładowy efekt:

Pomocne linki:

środa, 18 grudnia 2013

Szablony SMS dla Windows Phone

Z pewnością każdy z nas wysyła regularnie SMS-y o podobnej treści, typu "spóźnię się", "będę za 15 minut", czy "kocham cię"... Co więcej, ja te SMSy bardzo często wysyłam podczas jazdy samochodem. Postanowiłem wziąć sprawy w swoje ręce i rozwiązać ten problem! Tak powstała aplikacja o nazwie Szablony wiadomości.

Aplikacja umożliwia tworzenie nieograniczonej liczby szablonów SMS, które następnie wyświetlanie są w oknie głównym z użyciem dużej czcionki, tak aby szybko można było wysłać wiadomość w pośpiechu, np. podczas jazdy samochodem. Aby było jeszcze szybciej, to możemy każdą wiadomość przypiąć do ekranu startowego. Na żywym kafelku pojawi się wówczas treść wiadomości oraz nazwa odbiorcy. W celu dalszego usprawnienia dodałem licznik do każdej wiadomości, dzięki któremu widzimy jak często wysłaliśmy daną wiadomość, a lista szablonów na ekranie głównym jest posortowana malejąco wg wskazania liczników.

Korzystajcie z aplikacji póki darmowa, polubcie ją i udostępniajcie:


Poniżej kilka zrzutów ekranu:

Pobierz tutaj:

niedziela, 8 grudnia 2013

"Pin to start" w różnych językach

Pisząc aplikacje na Windows Phone często chcemy dać użytkownikowi możliwość przypnięcia jakiegoś elementu do menu start. Problem pojawia się, gdy chcemy to sformułowanie przetłumaczyć na inny język tak, aby było zgodne z obowiązujym nazewnictwem WP. Żywi lub automatyczni tłumacze nie do końca sobie z tym radzą, dlatego też zebrałem oficjalne określenia polecenia "przypnij do ekranu startowego" z kilku języków. Może się komuś przyda, mnie na pewno!

  • Angielski: pin to start
  • Czeski: připnout na úvodní obrazovku
  • Duński: fastgør til start
  • Francuski: épingler sur l'écran d'accueil
  • Hiszpański: anclar a inicio
  • Niemiecki: Auf Starten
  • Norweski: fest til start
  • Polski: przypnij do ekranu startowego
  • Portugalski / brazylijski: fixar na tela inicial
  • Szwedzki: fäst på startskärmen
  • Włoski: aggiungere a start

PS. Okazało się, że na stronie Microsoft Terminology Search można samodzielnie wyszukiwać tłumaczenia poleceń w oficjalnej terminologii Microsftu. Wystrarczy wpisać frazę, wybrać język oryginalny i docelowy, a także wybrać produkt (np. Windows Phone). Po chwili otrzymujemy tłumaczenie wraz z krótkim komentarzem. Dostępne jest również API Terminology Service do wyszukiwania tłumaczeń.

Mimo wszystko, jak tylko natkniecie się na nowe tłumaczenia, to dopisujcie je w komentarzach - łatwiej z nich korzystać, gdy są zebrane razem :)

sobota, 23 listopada 2013

Wizytówka na Windows Phone

Po dłuższej przerwie związanej ze stałym rozwijaniem mListy przyszła kolej na małą, ale praktyczną aplikację i jak zwykle jej stworzenie było osobistą potrzebą. Tym razem jest to kolekcja wizytówek, które można wykorzystywać w sklepach czy na stacji benzynowej jako dane do faktury.

Prowadząc biznes muszę podawać dane swojej firmy kontrahentom. Mógłbym do tego wykorzystywać papierowe wizytówki, ale one chyba już są przeżytkiem, przynajmniej w mojej branży. I tu z pomocą przychodzi Wizytówka na Windows Phone, bo dzięki niej możemy zapisać kilka wizytówek, prywatnych lub firmowych, a następnie pokazywać je zainteresowanym osobom w celu wprowadzenia do komputera i np. wystawienia faktury. Nie trzeba nosić stosu papierowych kartoników i wystarczy poświęcić kilka minut aby wszystkie dane mieć przy sobie.

Aplikacja właśnie pojawiła się w Windows Phone Store, a ja już pracuję nad kolejną wersją :)

niedziela, 17 listopada 2013

DVLUP - pierwsze wrażenia

W październiku dołączyłem do DVLUP, programu dla developerów Windows Phone, w którym można zdobywać punkty za różne osiągnięcia, a następnie wymieniać je na atrakcyjne nagrody. Program jest aktywny na polskim rynku od września 2013, a na świecie o rok dłużej. Dzięki temu, że moje aplikacje już są w markecie od dłuższego czasu, to szybko udało się zebrać punkty za komentarze do nich i wskoczyć nawet na 5-te miejsce w polskim rankingu (potem jednak zleciałem kilka miejsc w dół).

Jak zbierać punkty?

Po zalogowaniu widzimy stan naszego konta z ilością punktów XP i PTS. Czym się one różnią? Praktycznie są tym samym, obydwa stany rosną jednakowo gdy wypełniamy zadania, ale tylko za punkty PTS możemy kupować nagrody. Więc jeśli zamówimy nagrodę lub kampanię reklamową, to punkty zostaną odjęte wyłącznie z konta PTS, a XP (które jest brane do rankingu) pozostanie bez zmian.

Głównym źródłem punktów jest wypełnianie "challengów", czyli po naszemu zadań. One są przeróżne, począwszy od krótkich quizów, przez wspomniane oceny aplikacji, tworzenie i aktualizowanie aplikacji na Windows Phone/Nokia Asha z wykorzystaniem Nokia Music, Nokia Imaging, NFC i innych SDK/API, czy np. stworzenie aplikacji dla dzieci (polski challenge). Jedne są łatwe, inne mają dość wygórowane wymagania - w moim przypadku musiałem dodać angielską wersję aplikacji, czy wsparcie dla trzech rodzajów żywych kafelków (standardowy, mały i szeroki).

Nagrody

Zebrane punkty PTS można wymieniać na kampanie reklamowe lub nagrody.

Kampanie reklamowe to np. promocja aplikacji w AppSocial (po naszemu to się też nazywa "Top aplikacje"). Za kilkaset punktów można wykupić konkretne miejsce na liście i być w ten sposób promowanym przez cały tydzień - od piątku do czwartku. Promocję taką można wykupić na kilka wybranych krajów (w tym Polskę) lub globalnie, ale wtedy musimy wydać znacznie więcej PTS. Podobne miejsce można wykupić w Nokia Store czy Windows Phone Store, lecz w tym drugim okres promocji to tylko jeden dzień! Jeśli chodzi o skuteczność kampanii, to wciąż to testuję i jeśli efekty będą pozytywne to pewnie o tym napiszę w kolejnym poście. Jak na razie widzę kilkunastoprocentowy wzrost pobrań, ale to może wynikać z innych powodów.

Mimo wszystko, mnie jak i pewnie innych developerów motywują nagrody, które można uzyskać. Są to m.in. telefony Nokia Lumia, XBOX, bilety do kina, vouchery do sklepów, czy narzędzia developerskie (token Windows Phone Dev Center, kontrolki Telerika, czy Visual Studio Professional 2013).

W poniższej tabeli zestawiłem listę najfajniejszych nagród wraz z cenami i opłacalnością punktów. Do wyznaczenia wartości rynkowej wykorzystałem Ceneo i IleKosztuje.

Jak widać, najlepiej się skupić na Lumiach i licencjach:

Nagroda PTS Wartość (PLN) Wartość 1 PTS
Windows Phone Dev Center Token 250 312 zł 1,25 zł
Nokia Lumia 710 1250 750 zł 0,60 zł
Nokia Lumia 800 1562 800 zł 0,51 zł
Telerik RadControls Token 625 312 zł 0,50 zł
Nokia Lumia 820 Wireless Charging Shell CC-3041 250 78 zł 0,31 zł
Nokia Lumia 1020 10000 2 600 zł 0,26 zł
UserTesting.com Single Session 600 154 zł 0,26 zł
Nokia Lumia 625 3500 900 zł 0,26 zł
128GB Microsoft Surface Pro* 15000 3 800 zł 0,25 zł
Nokia Lumia 925 7000 1 700 zł 0,24 zł
Windows Phone Gift Card 300 70 zł 0,23 zł
Nokia Lumia 1520 13000 3 000 zł 0,23 zł
Nokia Lumia 720 4200 880 zł 0,21 zł
Słuchawka Nokia BH-218 500 100 zł 0,20 zł
Głośnik Nokia MD-11 250 50 zł 0,20 zł
Nokia Lumia 920 6000 1150 zł 0,19 zł
Nokia Lumia 820 5000 920 zł 0,18 zł
Nokia Lumia 520 3200 550 zł 0,17 zł
Voucher Empik 50PLN 300 50 zł 0,17 zł
Voucher Media Markt 50PLN 300 50 zł 0,17 zł
Voucher GoSport 50PLN 300 50 zł 0,17 zł
Voucher InterSport 50PLN 300 50 zł 0,17 zł
Voucher Media Markt 100PLN 600 100 zł 0,17 zł
Voucher Multikino film 2D 200 25 zł 0,13 zł
Karta Kingston microSDHC/SDXC 32GB 700 80 zł 0,11 zł
Xbox One 20000 2 100 zł 0,11 zł
* - niedostępny dla Polski, ale w zamian jeszcze w tym roku ma być dostępny u nas tablet Lumia 2520.

Jak widać liczba PTS nie do końca odzwierciedla ceny rynkowe produktów, a więc za każdym razem trzeba policzyć co nam się bardziej opłaca, choć z drugiej strony... "darowanemu koniowi w zęby się nie zagląda". Po prostu zbierajmy punkty do czasu, aż upragniona nagroda będzie w zasięgu ręki. Warto wspomnieć, że sporadycznie pojawiają się kilkugodzinne promocje na wybrane produkty, więc warto śledzić profil @NokiaPolandDev na Twitterze!

Co mnie gryzie?

Sporadyczne problemy z kontekstem strony - mając stronę długo otwartą np. na rankingu, to po odświeżeniu jej często widzę nazwę innego użytkownika wraz z listą jego aplikacji, punktów itp. Po przejściu na inną podstronę wracam do swojego konta, więc nie mogę de facto wiele z jego kontem zrobić, ale jest to dość irytujące, gdy na moment staję się np. Wietnamczykiem.

Usilne promowanie AdDuplexa, który z doświadczenia mojego i znajomych jest mało skuteczny. W zadaniach zdarza się, że dodanie go do aplikacji jest wymogiem niezbędnym do uzyskania pozytywnej weryfikacji i otrzymania punktów.

W celu uzyskania punktów za dobre oceny aplikacji często należy ją najpierw zaktualizować. Niestety, DVLUP z opóźnieniem widzi fakt pomyślnej certyfikacji w Windows Phone Store, i tak naprawdę nie wiadomo kiedy można się zapisać na ten "challenge", aby nie zostać odrzuconym. Jedna z moich aplikacji została już dwa razy odrzucona, pomimo tego że spełnia wszystkie wymogi i kilka dni wcześniej dostała update.

Tańsze produkty dla innych rynków - przykładowo, można otrzymać Nokię Lumia 920 Developer Edition już za 3000 PTS, niestety nie u nas :(

A z innej beczki, to niektórzy ludzie z mojego otoczenia słysząc o programie uśmiechali się pod nosem - "to Nokia musi płacić programistom żeby tworzyli aplikacje na Windows Phone"? No cóż, może trochę tak jest, ale system operacyjny Microsoftu wystartował bardzo późno, więc taka "motywacja" jest moim zdaniem uzasadniona i mile widziana, skoro z zarabianiem na tej platformie bywa jak na razie średnio.

Podsumowanie

Powyższe "mankamenty" to tak naprawdę detale, więc uważam że program DVLUP jest genialny! To najlepszy program lojalnościowy jaki znam (jeśli w ogóle można tak go nazwać). Dość szybko zbiera się punkty, wystarczy dwa razy wziąć udział w quizie, aby otrzymać bilet do kina. Polski oddział programu bardzo prężnie działa na Twitterze, szybko odpowiada na pytania i wspiera programistów! DVLUP i @NokiaPolandDev - tak trzymać! :)

poniedziałek, 4 marca 2013

Lumia 800 - czarny ekran podczas rozmowy

Od kilkunastu tygodni miałem problem z telefonem (taki sam jak ten kolega), polegającym na tym że podczas rozmowy ekran telefonu robił się czarny i nieaktywny. Nie migał jak powinien co sekundę, aby można było przykładowo rozłączyć rozmowę. Było to bardzo irytujące i przypuszczałem że to problem software'owy, gdyż akurat nasilił się po aktualizacji do Windows Phone 7.8. Na szczęście nic z tych rzeczy i udało się go rozwiązać bez wizyty w serwisie!