Archive for July, 2011

Visual Studio IntelliSense Tip 2

Kolejna ciekawostka związana z IntelliSense w Visual Studio 2010.

Często bywa tak, że IntelliSense próbuje być o wiele mądrzejsze niż programista i na siłę dopasowuje wybrane przez siebie nazwy klas i zmiennych nawet jeżeli nie było to naszym zamiarem. Jednym z przykładów może być tu odwołanie do nieistniejącej jeszcze klasy, którą dopiero zadeklarujemy. Szybkie demo polega na wpisaniu w kodzie aplikacji słowa Time – taką właśnie klasę chciałbym za moment dodać, natomiast narazie tworzę tylko kod, który będzie wykorzystywał obiekt tego typu.

Zatem po wpisaniu Time wciskam spację, żeby kontynułować kod i … okazuje się, że Visual Studio zakłada, że wie lepiej i IntelliSense wpisuje w miejsce Time typ TimeoutException

Co w związku z tym? Ctrl + Z i piszemy dalej… ??? Nie

Tryb uzupełniania i tryb sugestii

Opisane przeze mnie zachowanie jest spowodowane tym, że IntelliSense posiada dwa tryby: uzupełniania (domyślny) i sugestii. Jak widać tryb uzupełniania może być czasem uciążliwy… Można natomiast skorzystać z drugiego trybu, czyli z sugestii… Do przełączania się pomiędzy trybami IntelliSense służy kombinacja klawiszy CTRL + ALT + SPACE. Po zmianie trybu uzyskujemy efekt widoczny poniżej:

W tym trybie po wciśnięciu spacji IntelliSense nie wpisuje niechcianego przez nas typu TimeoutException… I o to właśnie chodziło.

Powiecie “Ok, ale co jeżeli chcę jednak wpisać TimeoutException a jestem w trybie sugestii?” Drogi są dwie:
1 – Tabulator pozwala na uzupełnienie sugerowanego tekstu
2 – Strzałką wybieramy sugestią i klikamy spację.

Mi osobiście opcja ta się spodobała. Oczywiście trzeba do niej podchodzić z rozsądkiem, żeby nie okazało się, że zamiast przyspieszyć spowolni proces kodowania :)


Visual Studio IntelliSense Tip

Okazuje się, że IntelliSense w Visual Studio 2010 potrafi nie tylko uzupełniać wpisywane przez nas metody, lecz dodatkowo interpretować to co wpisujemy. Przykładem niech będzie klasa Console.

Standardowo

Przeważnie gdy piszemy kod, w którym chcemy wczytać pewne dane od użytkownika wpisujemy Console.Read… i wybieramy z listy podpowiedzi ReadLinie. Okazuje się, że można do tego podejść inaczej!

Podejście 1

Zamiast wpisywać po kropce słowo Read wpiszmy Line. Okazuje się, że IntelliSense zasugeruje nam metody zawierające w sobie słowo Line czyli ReadLine i WriteLine. Jest to nieznacznie szybsze niż korzystanie z prefiksu Write.

Podejście 2

Ale to nie wszystko! Można jeszcze szybciej dostać się do interesującej nas metody, czyli do ReadLine. Wystarczy po kropce wpisać dwie litery: RL. IntelliSense zinterpretuje to jako poszukiwanie metody, która składa się z conajmniej dwóch wyrazów, z których pierwszy zaczyna się na R, a drugi na L.

Istotna jest tu wielkość liter, gdyż dla algorytmu używanego przez IntelliSense ma ona znaczenie – łatwo to sprawdzić wpisując zamiast RL ciąg rL.


Marketplace już w Polsce!

Dzisiejszy news dotyczący Marketplace dla Windows Phone donosi o poszerzeniu dostępności sklepu z aplikacjamu na WP o kolejne kraje. Do aktualnej 16 krajów dochodzi 19 nowych, a wśród nich także POLSKA…

Nowe kraje to:

  • Brazil
  • Chile
  • Colombia
  • Czech Republic
  • Denmark
  • Finland
  • Greece
  • Hungary
  • India
  • Japan
  • Netherlands
  • Norway
  • Poland
  • Portugal
  • Russia
  • South Africa
  • South Korea
  • Sweden
  • Taiwan

W związku z tą informacją postanowiłem przetestować Zune bez zmienionych ustawień lokalizacji. Wynik pozytywny! Nie ma informacji, że produkt nie jest dostępny dla mojej lokalizacji.

Na marginesie dodam, że do tej pory aby móc swobodnie korzystać z Zune i przeglądać aplikacje z Marketplace trzeba było zmienić ustawienia lokalizacji w komputerze np na takie:

W tym momencie nie ma już takiej konieczności :)

Jedyne co może mam doskwierać to mała ilość aplikacji targetowanych dla naszego kraju. Jest tak ponieważ deweloperzy muszą zmienić ustawienia publikacji dla swoich aplikacji ponownie zaznaczając opcję “Worldwide distribution”. Proces ten będzie o tyle wygodny, że panel marketplace przeszedł gruntowne zmiany i można w prosty sposób edytować informacje o aplikacji bez konieczności ponownego przechodzenia przez proces weryfikacji… Fakt, że przy tej okazji pojawia się na nim sporo błędów typu “przepraszamy, ale nie możemy teraz wyświetlić tych informacji”, natomiast trzeba dać trochę czasu nowej platformie na “dotarcie się” przy produkcyjnym obciążeniu.

Nie pozostaje zatem nic innego jak poczekać kilka dni na przepiecie dostępnych na Marketplace aplikacji :)


Mój artykuł na MSDN – WP7 Mango Silverlight + XNA

Niedawno ukazał się mój kolejny artykuł na MSDN poswięcony Windows Phone 7.1 Mango. Artykuł dotyczy zagadnienia integracji dwóch technologii jakimi są Silverlight i XNA w ramach jednej aplikacji, a nawet w ramach jednego widoku. Jest to moim zdaniem jedna z przełomowych nowości dostarczana przez ten system, gdyż daje praktycznie nieograniczone mozliwości w kontekście projektowania przyjaznego i efektownego interfejsu użytkownika. Interakcja przy pomocy kontrolek Silverlight połączona z mozliwościami graficznymi XNA może stać się nowym standardem tworzenia gier, a nawet aplikacji użytkowych na Windows Phone.

Zapraszam do lektury artykułu.

Do artykułu dołączony jest również przykład, który możecie pobrać z tego miejsca.


Software Update: WP7 vs Android

Ostatnio pisałem o udanej instalacji Windows Phone 7 Mango na moim telefonie. Wczoraj przyszło mi również zmierzyć się z aktualizacją Androida z wersji 2.1 na 2.2 (Samsung i5700 – Spica). Cały proces nasunął mi pewną refleksję dotyczącą porównania pod tym kątem obu platform. Oto moje spostrzeżenia:

Oprogramowanie

Windows Phone 7 – pobieramy paczkę w której jest nowa wersja ZUNE (4.8), system, instrukcja i updater.

Android – pobieramy aplikację Odin, sterowniki do telefonu, paczkę z systemem z odblokowanym rootem, paczkę z systemem w wersji 2.2 (lub wyższym, bo widziałem też 2.3).

Przebieg instalacji

Windows Phone 7 – podłączamy telefon, uruchamiany updater, uruchamiamy Zune a następnie wybieramy opcję Update. Po jakimś czasie gotowe.

Android – instalujemy na telefonie system z rootem. Do tego są potrzebne jeszcze kombinacje klawiszowe, żeby przełączać telefon w odpowiednie tryby (Volume Down + Aparat + “czerwona słuchawka” – ona wcale nie jest czerwona :) ) Wgrywamy system przez Odin, instalacja i kilka restartów.
Teraz można zacząć wgrywać system w wersji 2.2. Wrzucamy paczkę na kartę microSD i instalujemy w telefonie. Ponownie klawiszologia, tym razem, żeby uruchomić telefon w trybie root (Volume Down + obie “słuchawki”). Instalacja z karty + czyszczenie cache, factory reset i restart. Nareszcie! Android (a właściwie SamDroid) działa :)
Do tego dochodzi konieczność odłączania i podłączania telefonu w “odpowiednim momencie”, bo Odin potrafi się zgubić i nie wykryć urządzenia (tu podpowiedź – podłączajcie telefon dopiero gdy Odin jest uruchomiony – oczywiście w trybie administratora…)

Czas twrania

Windows Phone 7 – 2.5h
Android – 1.5h

Rezultat

Windows Phone 7 – sukces.
Android – sukces (pomimo kilkukrotnej konieczności wyciągania baterii z telefonu, bo “coś” nie zaskoczyło :) ) Dodatkowo telefon działa zdecydowanie szybciej.

Podsumowanie

Aby móc w pełni mówić o zaletach danej technologii, trzeba spróbować również innych. Dzięki temu, że miałem okazję przetestować ten proces na obu systemach, mam możliwość bardziej rzetelnego ich ocenienia.  Powyższe porównanie dotyczy tylko i wyłącznie instalacji nowej wersji softu, a nie samych systemów (o tym może kiedy indziej :)
W obu przypadkach nie jest to trywialny “update” jak ma to miejsce dla oficjalnych paczek z nowszą wersją systemu (wtedy wystarczy wcisnąć przycisk UPDATE i poczekać). WP7 w mojej ocenie wypada lepiej – jest samoobsługowy i nie trzeba do tego tyle zachodu – puszczamy update i możemy robić swoje. Oceny tej nie jest w stanie zmienić nawet satysfakcja w przypadku Androida, która jest nieco większa – właśnie przez te wszystkie utrudnienia :)

Brak jakiejkolwiek standaryzacji w przypadku Androida (co jest zarówno wadą jak i zaletą) powoduje, że nie ma jednej “paczki” do aktualizacji. Każdy użytkownik kombinuje w swoim kierunku, przez co gdy na jednym urządzeniu pracujemy na wersji 2.3 na innym działa jeszcze 1.5… Tu Windows Phone 7 (jak narazie) bije Androida na głowę, bo tworząc oprogramowanie mamy dużo większą pewność rezultatów jego działania. Oczywiscie może się to zmienić w przyszłości (oby jak najdalszej) – pierwsze sygnały widać w różnicach między urządzeniami dla WP7 i 7.1 (czyli Mango) choćby w kontekście sensorów. “Stare” urządzenia nie są wyposażone np w żyroskop, a do kompasu musi być dostarczone przez producenta telefonu stosowne API…

P.S.

Przyczyna aktualizacji androida była dość prozaiczna, aczkolwiek ważna z punktu widzenia użyteczności. Wersja 2.1 nie pozwala na instalowanie aplikacji na karcie microSD. Wynik – po krótkim czasie brakuje miejsca i nie możemy już nawet ich uaktualniać!


Mango on board 2

Wczoraj pisałem o udanej instalacji Windows Phone Mango na moim telefonie. Podczas standardowego korzystania z nowego systemu natknąłem się na kilka udogodnień w tej kwestii:

Stan baterii

Wreszcie można dowiedzieć się czegoś więcej na temat stanu baterii! Wystarczy wejść do Settings -> Battery saver. Mamy tam do dyspozycji możliwość włączenia tak zwanego Battery Saver’a, który przy niskim stanie baterii może wyłączyć pewne dodatki jak automatyczne odbieranie wiadomości, wątki działające w tle (a właściwie agentów działających w tle) itp. Co jednak ciekawe jest tam też informacja na temat stanu baterii, prawdopodobnego czasu działania na niej i czas od ostatniego ładowania. Dużo więcej niż tylko pasek na toolbarze. Przydał by się do tego kafelek, ale niestety na pierwszy rzut oka API do Mango nie daje takich informacji (jedynie to czy telefon jest podłaczony do zasilania, czy działa na baterii), ale być może jeszcze się do tego nie dokopałem.

Dzwonienie

Dzwonienie, czyli podstawowa funkcja telefonu… No tak, to już raczej nie jest telefon, a wręcz telefon jest tu dodatkiem. Trochę zmieniony interfejs w trakcie wykonywania rozmowy (na +) – jest bardziej przejrzysty, a przyciski większe. Niestety nie zmieniło się zarządzanie połączeniami, ale z tym można się jakoś uporać tym bardziej, że tu również pojawiła się ikonka wyszukiwania (wszędzie ta lupa :) ). Moim zdaniem to dobrze, bo jest lepiej niż było.

Regulacja głośności

Trochę mniej istotna rzecz, ale jednak zmiana. Do tej pory regulując głośność widzieliśmy kreseczki jedna nad drugą… Stopień głośnosci był regulowany “na oko”. Teraz nie musimy “liczyć kreseczek” lub “szacować”, gdyż mamy podane odpowiednie wartości np 20/30.

Bing Audio

Jeżeli widzieliście kiedyś na iPhonie aplikację, która wyszukiwała piosenkę na podstawie dźwięku, to już powinniscie wiedzieć o co mi chodzi :) Ile razy słyszycie kawałek w radiu i czekacie na jego tytuł, który nie jest podawany? Koniec z tym… Jakiś czas temu na Channel 9 pojawił się wywiad ze Stevem Cosmanem z zespołu Bing Audio i opowiadał o nowej usłudze jaką jest wspomniana platforma. Jak to działa? Po uruchomieniu wyszukiwarki mamy na pasku nową ikonkę nutki. Po jej wciśnięciu możemy zacząć wydawanie dźwięków, w celu odnalezienia interesującego nas tytułu. Oto wyniki testów

  • Scorpions i Send me an Angel – trafiony zatopiony
  • Linkin Park i Bleed It Out – trafiony zatopiony
  • Godsmack i Good Day To Die – znowu zadziałało…
  • trochę inne klimaty: bachata i Lamento Boliviano – trafiony!
  • Van Canto też zna…

Postanowiłem potestować z polską muzyką. Enej “Żyj” – pudło, ostatnio często goszczący w radiu kawałek Sylwi Grzeszczak – Male Rzeczy – trafił. Czas zatem na test ostateczny – samośpiew do telefonu. Po pół godzinie prób z odsłuchem nie dało rady. Dodam, że testowałem to nie tylko ja (tu brakowi wyników się nie dziwie 😛 ) ale i osoby uzdolnione pod tym względem (np. moja żona) też miały problemy :) W aplikacji na iPhone działało nawet jak mój kolega “burczał” do telefonu… Być może jest to z powodu ciągłej fazy rozwoju Bing Audio, lub po prostu cel jest inny (słyszymy piosenke i chcemy znać jej tytuł, a nie nucimy coś pod nosem – ciekawe co to za utwór :) ). Tak czy inaczej fajny gadżet!

Bing Vision

Możliwość przeanalizowania obrazu (zdjęcia z aparatu) pod kątem znajdującego się na nim tekstu. Ukryta jest pod ikonką oka we wbudowanej wyszukiwarce. To co możemy dalej zrobić, to przetłumaczyć wykryty tekst… Hm… Za granicą nie koniecznie mamy dostęp do sieci, a w swoim kraju nie ma czego tłumaczyć. Ale kto wie jak to się dalej rozwinie…

Jak na jeden dzień bez szukania zmian, to całkiem sporo :)


Mango on board

Po ukazaniu się wersji Beta 2 narzędzi dla Windows Phone, Microsoft udostępnił dla deweloperow WP7 możliwość pobrania i uaktualnienia telefonów do tejże wersji systemu (dokładniej do builda 7661). Na początku było to zarezerwowane tylko dla ograniczonej liczby krajów, jednakże po pozytywnym odbiorze procesu aktualizacji MS postanowił rozszerzyć program na pozostałe kraje. Ja również otrzymałem zaproszenie to testów, z którego postanowiłem skorzystać.

Po wypełnieniu ankiety dostajem dostęp do plików niezbędnych do aktualizacji telefonu. Są wśród nich nowe wydanie Zune (wersja 4.8) oraz pliki niezbędne do aktualizacji samego telefonu a także najważniejszy plik – instrukcja, która dokładnie krok po kroku przeprowadza przez cały proces. Warto się jej trzymać i wykonywać po kolei – ja za pierwszym razem przeoczyłem jeden punkt i z aktualizacji nici.

Cały proces trwa krócej niż można przeczytać na forach i jest zbliżony bardziej do estymowanych czasów podany – w moim przypadku całość zajęła 2,5h wraz z odinstalowywaniem starej wersji Zune (nie wliczam narzedzi deweloperskich do mango, bo to miałem zainstalowane dużo wcześniej).

Po zainstalowaniu aktualizacji mamy do dyspozycji wszystkie wcześniej posiadane aplikacje i ustawienia. Okazuje się jednak, że gdy będziemy chcieli pobrać finalną wersję Mango będziemy musieli się cofnąć do backupu przygotowanego przed tą aktualizacją, co w rezultacie oznacza utratę zmian dokonanych po aktualizacji. Jest to o tyle rozsądne, że nie jest to standardowy update, a raczej skok w oddzielną gałąź rozwoju systemu, która najprawdopodobniej nie znajdzie w przyszłości połączenia do głównego toru.

 

Co do samej aktualizacji było w związku z tym kilka przebojów, do których należał między innymi zapis w warunkach instalacji, a mianowicie:

8. Confidentiality: By participating in this program, the developer agrees to not publish any content, screenshots or comments in any media in advance of the official launch of Windows Phone ‘Mango’

Był to oczywiście nie do końca przemyślany zapis, a konkretniej był niewłaściwie sformułowany. Fora są ogólnie dostępne, więc zgłaszanie uwag i sugestii niepublicznie jest tu utrudnione. Jak wiadomo, jeżeli proces testowania i zgłaszania uwag jest utrudniony, wówczas feedback jest znacznie ograniczony, a przecież nie o to chodzi… Na szczęście po dość krótkim czasie został poprawiony na następujący:

8. Confidentiality: By participating in this program, the developer agrees tonot share the ‘Mango’ pre-release device image, binary dumps, or the applications used to update to this pre-release image, with third parties.

W związku z tym w pełni legalnie mogłem się podzielić (i mogę się dzielić w przyszłości) swoimi spostrzeżeniami dotyczącymi WP7 Mango :)

Pierwsze wrażenia

Działanie – Telefon wydaje się działać minimalnie płynniej – muszę przyznać, że od samego początku byłem pozytywnie zaskoczony realną wydajnością urządzenia, jednakże okazuje się, że można wyciągnąć z niego jeszcze pare procent. Widać to również przy przeglądaniu zdjęć – tu rożnica jest spora, bo zdjęcia wręcz śmigają.

Kafelki – nie trzeba przygotowywać aplikacji testowej, żeby zobaczyć jak zmieniły się kafelki. Widać to po zintegrowanym facebooku :) Dla niewtajemniczonych dodam, że w Mango aplikacja może mieć kilka kafelków, a dodatkowo są one dwustronne, co dodatkowo zwiększa możliwość interakcji naszej aplikacji z użytkownikiem, nawet gdy nie jest ona włączona.

Lista aplikacji – Tu rzecz znana z emulatora, a mianowicie wyszukiwanie aplikacji. Po pewnym czasie korzystania z urządzenia może się okazać, że lista aplikacji jest dość długa. Z pomocą przychodzi tu wyszukiwarka, dzięki której znalezienie właściwej aplikacji staje się dużo prostsze.

Do sprawdzenia

Nie samymi gotowcami człowiek żyje, więc trzeba będzie również trochę pokodować. Do przetestowania jest na pewno:

  • Sensory (podobno na niektórych urządzeniach nie działają poprawnie)
  • Kafelki (będzie się działo)
  • dostęp do kontaktów
  • multitasking (WP7 też może…)
  • przechwytywanie obrazu z kamery

Jak widać jest co robić, a telefon z Mango na pokładzie na pewno to ułatwi :)


Artykuł na MSDN – WP7 Mango – nowe możliwości emulatora

Stało się. Dziś dołączyłem do grona autorów artykułów publikowanych na portalu MSDN. Pierwszy z moich artykułów poświęcony jest nowym możliwościom oferowanym przez emulator Windows Phone dostarczony wraz z narzędziami Windows Phone 7.1 Mango, o których pisałem jakiś czas temu. W artykule opisuję wsparcie dla emulacji akcelerometru oraz lokalizacji. W drodze kolejne!

Zapraszam do lektury artykułu.

P.S.

Czy pamiętacie mój projekt emulatora akcelerometru? W ogóle nie widać podobieństw 😉

 


WP7 i Isolated Storage – błąd designera

Przy tworzeniu aplikacji dla Windows Phone 7 może okazać się, że w designerze dostaniemy błąd o następującej treści:

Cannot create an instance of “MyControl”.
“Unable to determine application identity of the caller”.

Jeżeli aplikacja korzysta z Isolated Storage to bład ten jest zapewne spowodowany faktem, że przy ładowaniu kontrolki odwołujemy się do tego właśnie mechanizmu.

Analogiczny błąd może się pojawić gdy dodamy już kontrolkę do strony, dopiszemy do niej pewne operacje na isolated storage, które wykonują się przy jej ładowaniu a następnie wrócimy do okna designera. W takim przypadku jego treść jest bardziej znacząca:

IsoatedStorageException was thrown on “myControl”: Cannot create an instance of “MyControl”.

Aby pozbyć się błędu wystarczy umieścić kod, który korzysta z Isolated Storage wewnątrz warunku widocznego poniżej:

1
2
3
4
if (!System.ComponentModel.DesignerProperties.IsInDesignTool)
{
    ...
}

W ten sposób mamy pewność, że w trybie designera nasza kontrolka, nie będzie odwoływać się do niedostępnych w tym momencie zasobów Isolated Storage.


Problem 260 znaków

Problem 260 znaków

Przy okazji robienia projektu na potrzeby artykułu okazało się, ze Visual Studio przy buildowaniu wyników mojej pracy zwróciło błąd:

Could not write lines to file “……”. The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.

Z racji na fakt, że było to związane z pracą przy projekcie dla Windows Phone pierwszym co przyszło mi do głowy to fakt, że być może emulator nie jest w stanie poradzić sobie z tak długimi ścieżkami do plików. W związku z tym szybki test wla standardowego projektu i … wynik ten sam.

Okazuje się, że dotarłem do granicy, której wcześniej nie zdażyło mi się osiągnąć. Próbowałem sobie przypomnieć, czy być może spotkałem się z takim błędem wcześniej, lecz nic nie przychodziło mi do głowy. Pomimo tworzenia projektów w katalogu X:\Work\ okazało się, że moje nieustanne ich porządkowanie (względem rodzaju technologii, przeznaczenia, przydatności itp) przerosło możliwości systemu i Visual Studio – głównym winowajcą jest tu system, którego ograniczenia co do długości ścieżek są opisane tutaj.

Wniosek

Nałogowe porządkowanie katalogów i plików może doprowadzić do problemu zbytniej normalizacji, który jak w przypadku baz danych prowadzi do ponownej i zamierzonej denormalizacji.


  • 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: