Problem z multi-touch w Nexus One

05.03.2010 @ 23:31:30 by Rafał Kozik | sprzęt

Dzisiaj będzie trochę gdybania ;) Zrobiło się głośno o tym, że Nexus One 'gubi się' przy obsłudze multi-touch. Google obwinia HTC za użycie niskiej jakości ekranu dotykowego. Niestety wydaje mi się, że nie uda się tego rozwiązać w aktualizacji oprogramowania. Dlaczego? O tym w dalszej części.


Multi-touch

25.02.2010 @ 15:12:03 by Rafał Kozik | iPhone

Odkąd pierwszy raz miałem styczność z multi-touch, polubiłem tę technologię. Moim zdaniem świetnie sprawdza się w urządzeniach mobilnych, gdzie m.in. jest idealna do powiększania i zmniejszania zawartości ekranu.

A jak wygląda to po stronie developera? Sprawdziłem jak to jest w przypadku iPhone SDK -- są co najmniej dwa sposoby na realizację obsługi multi-touch.

Jeżeli interesuje nas obsługa powiększania to do tego celu powinna nadać się kontrolka UIScrollView, która ma już wbudowaną obsługę tego typu interakcji.

Dla osób, które potrzebują większej kontroli nad danymi, możliwy jest bezpośredni dostęp do danych o dotyku. W widoku możemy zaimplementować metody touchesBegan, touchesMoved, touchesEnded. Jako parametr dostajemy listę UITouch*, skąd możemy dowiedzieć się o aktualnym (locationInView) i poprzednim (previousLocationInView) miejscu dotyku.

Wystarczy tego pisania, idę sobie podotykać ;)


Zaawansowane rysowanie tekstu w C#

06.02.2010 @ 18:44:47 by Rafał Kozik | C# .NET grafika

Pisząc różnego rodzaju aplikacje (i gry), chcielibyśmy czasami mieć większa możliwość dostosowania parametrów rysowanego tekstu niż tylko krój, rozmiar i kolor. W .NET jest to bardzo proste -- pokażę dzisiaj jak łatwo można to osiagnać za pomocą GraphicPath.


Połowiczny fanboy Apple

27.01.2010 @ 23:45:48 by Rafał Kozik | iPod iPhone iPad

Muszę to przyznać -- zostałem po części fanboyem Apple i nawet nie jest mi z tym źle ;)

Kilka miesięcy temu kupiłem sobie iPoda Touch i od tamtej pory nie rozstaję się z tym sprzętem. Ciężko przekonać do niego kogoś, kto nie miał z nim dłuższej styczności -- to świetne urządzenie do przeglądania sieci, poczty i gier.

Dzisiaj Apple zaprezentowało nowe urządzenie -- iPad. W skrócie: to co iPod Touch tylko większe i więcej ;) Bardzo przypadł mi do gustu ten sprzęt i mam nadzieję, że niedługo stanę się jego posiadaczem.

A dlaczego tylko połowiczny fanboy? Mimo tego, że w ostatnich czasach miałem sporą styczność ze Snow Leopardem, nie mogę się przekonać do tego systemu. Zdecydowanie wolę Windows 7, tak samo jak preferuję mojego Tablet PC niż jakikolwiek komputer od Apple.


Dlaczego nie warto używać Dev-C++

24.01.2010 @ 19:27:52 by Rafał Kozik | C++ programowanie narzędzia

Często wracającym tematem na warsztacie są mniejsze lub większe problemy z działaniem / używaniem Dev-C++. Rozpoczyna się wtedy święta wojna zwolenników i przeciwników tego narzędzia. Jest to sytuacja o tyle dziwna, że o ile typowy flame w stylu Windows vs Linux lub DirectX vs OpenGL ma jeszcze jakiś sens i można podać sensowne argumenty dla każdej ze stron, o tyle bronienie Dev-C++ jest poważnym błędem i powinno być karalne.

Tak, Dev-C++ jest zły. Nie mówię, że taki był zawsze -- sam kiedyś z niego korzystałem, tak samo jak wiele innych osób, które są teraz jego przeciwnikami. Co sprawia, że to narzędzie wywołuje aż takie skrajne emocje?

  • Ostatnia wersja Dev-C++ to 4.9.9.2 -- jest to wersja, której sam używałem lata temu. Została ona udostępniona 22 lutego 2005 roku! Już za miesiąc będzie mogła świętować swoje piąte urodziny!
  • W pakiecie zawarty jest MinGW oparty o GCC 3.4.2 -- wersję z września 2004 roku. Dlaczego to ma znaczenie? Dużo się w tym czasie zmieniło i dlaczego miałby ktoś korzystać z tak starych wersji?
  • W porównaniu do dostępnych teraz narzędzi jest bardzo ubogi
  • Ma sporo wad, choćby potrzeba ręcznego uruchomienia kompilacji przed uruchomieniem. Jest to w sprzeczności z jedną z podstawowych zasad, które warto stosować w pracy -- jeżeli da się coś łatwo zautomatyzować, zrób to.
  • Nie ma sensownego debuggera -- przed tym kto nie wie jak duże ma to znaczenie jeszcze długa droga ;)
  • Twórcy różnych bibliotek go nie wspierają i nie ma gwarancji, że kod się pod nim skompiluje.

Problem jest o tyle duży, że dużo początkujących programistów trafia na Dev-C++ jako polecane środowisko w tutorialu bądź książce. Ostatnio spotkałem się też z sytuacją, gdzie w jednym z Wrocławskich liceów używają tego archaicznego narzędzia.

Jeżeli dla kogoś jedynym powodem zostania przy Dev-C++ jest to, że go już poznał, to czas, żeby poznać coś nowego. To będzie musiało i tak prędzej czy później nastąpić, skoro nie jest od lat rozwijany. Zawsze można spróbować Visual C++ Express, Eclipse, Code::Blocks (na stronie jest stara wersja, aktualną można znaleźć tutaj) albo NetBeans.


Generowanie sudoku

13.01.2010 @ 13:24:59 by Rafał Kozik | gamedev freedoku

Największym (choć wcale nie tak dużym) wyzwaniem podczas robienia sudoku jest generowanie planszy. Musimy zadbać o to, żeby plansz było dużo, żeby były poprawne (i miały jedno, unikalne rozwiązanie) i żeby można było wybrać poziom trudności. Okazuje się, że rozwiązanie jest bardzo proste i powinno zadowolić każdego.

Jak więc wygląda to proste rozwiązanie? Weźmy dowolną planszę o odpowiednim poziomie trudności i przeróbmy ją tak, żeby wyglądała na unikalną. Gracze nie powinni zauważyć różnicy. Jeszcze tylko trochę terminologii -- grupami pionowymi (poziomymi) będę nazywał grupy trzech kolejnych kolumn (wierszy) na planszy. Mamy więc trzy grupy pionowe i trzy grupy poziome. Sposób w jaki należy przerabiać planszę:

  • zrobić permutację cyfr -- 9! możliwości
  • spermutować kolejność grup pionowych i poziomych -- 3!^2 możliwości
  • spermutować kolumny w grupach pionowych i wiersze w grupach poziomych -- 3!^6 możliwości

Zatem planszę można przerobić na 609 499 054 080 sposobów. Sporo, prawda? Oczywiście nie wszystkie są unikalne (np. gdy plansza ma dwie puste kolumny), ale jest tego wystarczająco dużo. Łatwo zauważyć, że plansza będzie wciąż poprawna i poziom trudności zostanie zachowany. Teraz wystarczy dla każdego poziomu trudności przypożądkować kilka plansz 'startowych' i mamy kompletny system generowania sudoku. Pozostaje tylko jedno pytanie -- skąd wziąć plansze startowe i jak ocenić ich poziom trudności? W sieci można znaleźć różnego rodzaju strony, które rozwiązują sudoku, niektóre z nich podają też ocenę trudności. Pozwala to już na dość dobre zbudowanie bazy plansz 'startowych' i zapewnienie, że żadne z nich nie są izomorficzne ;)


Nie takie iPhone SDK straszne jak je malują

04.01.2010 @ 23:00:04 by Rafał Kozik | iPhone gamedev

Wspomniałem ostatnio, że będę pisał więcej w związku z projektami nad którymi powoli pracuję. Na razie nie ma co pokazywać, więc postanowiłem napisać kilka słów o tym jak wygląda praca przy pisaniu czegoś na iPhone i ewentualnie dać jakieś drobne wskazówki.

To co może na samym początku przestraszyć to Objective-C. Na szczęście nie jest to problem, bo bardzo łatwo jest łączyć ten język z funkcjami pisanymi w C/C++. Przez to stanowi on tylko spoiwo między aplikacją (a przynajmniej w moim przypadku) a urządzeniem. W tej chwili większość kodu Objective-C w moim projekcie to szkielet aplikacji OpenGL ES dostarczany z xcode -- nie jest tego dużo i w żaden sposób nie przeszkadza w normalnej pracy. Jeżeli potrzebna jest jakaś funkcjonalność z systemu, w sieci można znaleźć gotowe kawałki kodu.

Do uruchomienia swojego kodu na iPhone przygotowywałem się już od jakiegoś czasu -- przeniosłem rendering z Direct3D do OpenGL ES 1.0 i zrobiłem spory refactoring. Gdy położyłem już swoje ręce na odpowiednim sprzęcie, uruchomienie na symulatorze zajęło jeden dzień. Po tym jak zapłaciłem za dostęp do programu developerskiego wystarczył jeden wieczór (spędzony na generowaniu certyfikatów), żeby uruchomić na sprzęcie. Spodziewałem się, że zajmie mi to więcej czasu, ale na szczęście poszło dość sprawnie -- w sumie nic dziwnego, bo na razie nie robiłem nic zaawansowanego.

Aktualnie projekt ściągnięty z repozytorium kompiluje się bez problemów pod xcode jak i w Visual Studio pod Windows. Zdecydowanie wolę pracę z tą drugą platformą i taka przenośność jest bardzo wygodna. Przydaje się implementacja OpenGL ES pod windows, żeby mieć pewność, że obejdzie się bez problemów.

Żeby nie było, że smęcę bez sensu i tylko korzystam z tego co znajdę gotowe w sieci, poniżej zamieszczam dwa kawałki kodu w dziwacznym języku, które mogą się komuś przydać. Nic odkrywczego, ale od czegoś trzeba zacząć ;)

// ukrycie górnej belki aplikacji, do użycia w widoku
[[UIApplication sharedApplication] setStatusBarHidden:YES];
// pobranie nazwy katalogu, w którym znajdują się zasoby
const char* getResourcesPath()
{
	NSString* path = [[NSBundle mainBundle] resourcePath];
	return [path UTF8String];
}

Postanowienia noworoczne

01.01.2010 @ 18:34:19 by Rafał Kozik | z życia iPhone iPod gamedev

Z końcem każdego roku miałem postanowienie, że w kolejnym będzie lepiej. Jakoś nigdy nie miałem konkretnej listy celów, które chcę osiągnąć, więc ciężko oceniać czy rok był udany czy nie.

Żeby mieć się z czego za rok rozliczać, garść postanowień:

  • Napisać pracę magisterską i skończyć studia. Studiowanie już długo trwa, trochę koliduje z pracą, więc warto zamknąć już ten etap życia ;)
  • Zmienić zwykły telefon na porządnego smartphona -- tutaj wybór jest dość prosty albo kolejna generacja iPhone, albo coś z Androidem. W tym roku, za sprawą mojego iPoda Touch, dopiero doceniłem tego typu sprzęt i mam zamiar rozwijać to zamiłowanie.
  • Do końca czerwca mieć w Apple AppStore co najmniej 3 gry. Głównym celem jest zbadanie platformy (sprzętowej i sprzedaży) na własnej skórze. Z czasem napiszę o tym trochę więcej.
  • Zrobić prawo jazdy. Mając już prawie ćwierćwiecze na karku, wypadałoby w końcu zdobyć ten plastik.
  • Kupić jakiegoś e-book readera. Odkąd usłyszałem o elektronicznym papierze interesowałem się urządzeniami w niego wyposażonymi, mam nadzieję, że stanę się posiadaczem jednego z nich. W tej chwili najbardziej podoba mi się nook.
  • Przeczytać kilka książek. Od kilku lat ilość czytanych przeze mnie książek systematycznie rośnie i mam nadzieję, że w tym roku też uda się to osiągnąć.

Nie jest tego za dużo, ale przynajmniej będzie można łatwo to zrealizować. Mam nadzieję, że taka deklaracja planów choć trochę mnie zmotywuje do ich realizacji ;)


Podsumowanie roku

25.12.2009 @ 13:26:30 by Rafał Kozik | freedoku iPod strona z życia

Za kilka dni zbliża się koniec roku i nic ciekawego już się raczej nie wydarzy, więc czas na małe podsumowanie ;)

  • W lutym (nie ma to jak przerwa między semestralna) zrobiłem aktualizację strony i wyszło jej to na dobre. Od tamtego czasu pojawiło się 30 wpisów, więc nie jest źle. W nadchodzącym roku będę pisać znacznie więcej, głównie za sprawą kilku projektów które rozwijam.
  • W marcu znalazłem chwilę czasu, żeby wprowadzić do freedoku kilka zmian.
  • Od marca jestem jedną nogą w grobie, tzn. zaręczyłem się ;)
  • Wziąłem udział w Compo 3h i zająłem 2 miejsce.
  • Kupiłem laptopa HP Pavilion tx2650ew i poza drobnymi problemami jestem z niego zadowolony. Wciąż nie mogę się zmusić do napisania recenzji, może w przyszłym roku.
  • Zmieniłem system na Windows 7 (Wciąż używam wersji RC, czas uaktualnić).
  • Od początku lipca rozpocząłem pracę w Nokia Siemens Networks i dalej tam pracuję.
  • Kupiłem sobie iPoda Touch i się z nim nie rozstaję. Za jakiś czas napiszę pewnie coś o aplikacjach / grach których używam. W przyszłym roku będzie trzeba przeskoczyć na iPhone 3GS, w końcu zrozumiałem, że ten sprzęt jest wart swojej ceny.
  • W październiku byłem na wakacjach, tym razem w Turcji.
  • Od 1 grudnia należę do iPhone Developer Program (żaden wyczyn, wystarczy 99$ zapłacić) i powoli w czasie wolnym przygotowuję coś na tę platformę.
  • Napisałem artykuł o przetwarzaniu obrazów.

Trochę się w tym roku działo, a kolejny zapowiada się jeszcze ciekawiej -- co z tego wyjdzie? Czas pokaże :)


Artykuł: Proste przetwarzanie obrazów

23.12.2009 @ 21:18:59 by Rafał Kozik | grafika

We Wrocławskim Portalu Informatycznym (WPI) pojawił się artykuł mojego autorstwa: "Proste przetwarzanie obrazów". W przygotowaniu są już kolejne artykuły (tym razem związane z tematyką programowania gier) i powinny pojawiać się mniej więcej raz w miesiącu.

Na potrzeby artykułu poduczyłem się trochę Javy (żeby zrobić aplety) i muszę przyznać, że nie było to zbyt przyjemne doświadczenie. Tak, jestem językowym rasistą i zdecydowanie wolę C# ;).


 [1] 2 3 ...