Z racji tego, że moja aplikacja jest już w fazie testów nie-u-mnie, byłem zmuszony napisać jakiś sposób do zgłaszania błędów – próba odtworzenia błędu u siebie(czy to na emulatorze, czy też telefonie) była bardzo trudna, albo wręcz niemożliwa. Nie sposób było powielić każde warunki(wersję oprogramowania, specyfikację urządzania, konfigurację samej aplikacji, o której zapominałem albo nie byłem w stanie się jej dowiedzieć). Jako iż od jakiegoś czasu staram się nie kombinować z robieniem jakichś pseudo-uniwersalnych i przekombinowanych cudów, zrobiłem to po najmniejszej linii oporu –
raport to zwykły mail(albo nawet nie, ale o tym za chwilę) z najpotrzebniejszymi informacjami(log, informacje o urządzeniu, informację od użytkownika).
Pisząc kolejny projekt, miałem sobie oto taki kod:
return this->Send(&msgSize, sizeof(MessageSizeType)) + this->Send(&catLength, sizeof(MessageCatLengthType)) + this->Send(category.c_str(), catLength * sizeof(wchar_t)) + this->Send(msg.c_str(), msg.length() * sizeof(wchar_t));
Nie wydaje mi się bardzo skomplikowany. Powinno wystarczyć, gdy zaznaczę, że wysyła on jedną „wiadomość” przez sieć – ot, 5 pierwszych bajtów to nagłówek(MessageSizeType – unsigned, MessageCatLengthType – unsigned char) a reszta dane. Oczywiście MUSZĄ być one dostarczone wszystkie, w takiej kolejności w jakiej są, więc wszystko leci po TCP. Pytanie: co tu jest źle?
Ostatnimi czasy dość dużo siedzę w Javie, programując na Androida(Kingdoms Clash.NET zostało niestety porzucone, ale o tym kiedy indziej (może)). Rozwijam swój stary projekt(w końcu!), który od początku miał być dość mocno związany z platformami mobilnymi. Mam tylko telefon z Androidem, więc na nim się skupiłem. Java nie jest moim ulubionym językiem, ale niestety zostałem „zmuszony” do poznania go ciut głębiej. Suma sumarum zły nie jest, lecz kilka rzeczy naprawdę mnie wkurza. Przy moim pierwszym spotkaniu z nim miałem problem z ogarnięciem obsługi nieblokujących gniazd – nie mogłem trafić na sensowne informacje o tym, tym razem miałem ciut więcej samozaparcia i udało mi się rozgryźć ten problem i stwierdziłem, że warto bym to, nawet jeśli będzie tylko dla mnie, zapisał. Mimo iż Java jest językiem bardzo wysokopoziomowym, obsługa gniazd jest… niskopoziomowa jak w C(C# też ma to dość niskopoziomowo zrobione, lecz nie odbiega bardzo od reszty)!
Każdy, kto zetknął się z pisaniem aplikacji na Androida miał pewnie styczność z jego emulatorem. Przypuszczam, że nie było/jest to miłe doświadczenie – jest on koszmarnie wolny. Ja nauczony doświadczeniem(nikłym, bo nikłym, ale jednak) przy aktualnym moim starciu z nim(dość owocnym swoją drogą) postanowiłem nie używać go. Mam telefon z tym systemem(Hero, o którym wspominałem), lecz chciałem go nie używać. Rozwiązanie, do którego doszedłem okazało się bardzo dobre.
Z tego, co się orientuję, do tej pory nie było problemu z instalowaniem softu nie od HTC na Bohaterach – w aktualizacji 2.1(ALBO 1.6, nie jestem pewien) zaktualizowali oni bootloader. Od tej pory nie przyjmuje on niepodpisanych paczek, a co za tym idzie – nie podmienimy partycji recovery, którą to trzeba zmienić, by zainstalować system(a przy okazji mieć kilka fajnych bajerków jak backup czy wipe danych/cache). Ale nie ma rzeczy niemożliwych.
Czytaj dalej…
W niedzielę wpadłem na genialny pomysł, by wgrać do swojego Bohatera(którego mam już ponad rok, gwarancja niby nie wygasła, ale i tak jej nie tracę
) customowy ROM. Android 2.3 jest ciut lepszy od 2.1, na którym to skończyły się oficjalne aktualizacje, ale głównie zależało mi na nowym Sense(najnowsze, jakie znalazłem: 2.1). Jak pomyślałem, tak zrobiłem i po całym dniu prób, błędów, gniewu i chęci rzucenia tego w cholerę udało mi się wgrać to, co chciałem. Czytaj dalej…
Pisząc(powoli bo powoli, ale pisząc) rozgrywkę sieciową do Kingdoms Clash.NET, odkładałem „na potem” synchronizację dostępu do danych. Nie używam wielu wątków – ot 2 per aplikacja – ale problem dał się we znaki. W końcu stwierdziłem, że nie ma co się bawić w odkładanie tego i trzeba to napisać. Jak postanowiłem tak zrobiłem i wynik mnie zadowala. Czytaj dalej…
Chyba jednak z planu regularnego pisania nici, ale cóż…
Wydaje mi się, że jednym z ciekawszych miejsc w grze jest obsługa wielu trybów rozgrywki. Miałem niezłą zagwozdkę jak to ładnie i elastycznie zorganizować. Do aktualnego stanu dochodziłem dość długo, lecz pierwszą implementację, bardzo podobną do tej, mam już od dawna. Wydaje mi się, że nie wyszło mi to najgorzej, acz chwilowo nie bardzo mogę powiedzieć, czy tak rzeczywiście jest – na razie zaimplementowany jest tylko „klasyczny” model rozgrywki. Czytaj dalej…
Jakiś czas temu poruszałem temat poruszania się jednostek. Z braku pomysłu rozwiązałem to najprostszą działającą metodą – bezpośrednią zmianą pozycji jednostki. Oprócz tego, że działało nie miało zalet. Od tego czasu upłynęło trochę wody w Wiśle jak i gra się „ciut” rozwinęła. Któregoś pięknego dnia postanowiłem się za to zabrać i ponownie podszedłem do problemu. Teraz już nie próbowałem pisać prototypu w grze, lecz od razu zaopatrzyłem się w XNA Game Studio(tym razem wersję 4.0) i Testbed. Czytaj dalej…
Ostatnimi czasy zrobiłem niewiele – szkoła skutecznie odebrała mi czas i chęci na robienie czegokolwiek związanego z programowaniem. Tylko od czasu do czasu przysiadłem na chwilę by coś napisać. W tej chwili już mam większe chęci do programowania, ale czasu jak nie było tak nie ma i coś sensowniejszego robię tylko w weekendy. Czytaj dalej…