Porządek musi być

Pracuję mozolnie nad tajnym projektem i nawet jeżeli nie przyniesie potrzebnych milionów to przynajmniej zajmie trochę czasu, a może nauczę się czegoś. Ale nie o tym miałem pisać. Chodzi o porządki. Do tej pory pisałem sobie o wszystkim co miałem zrobić zgrabnie w kajeciku. Zapisywałem w zasadzie wszystko związane z projektem i wykorzystywaną technologią: co do zrobienia, jak zrobić to i tamto, jakieś sprawy o których miałem pomyśleć. Nawet dawało rade – nawet. Z czasem natłok zapisków zaczął powodować pewien brak czytelności, dla rozróżnienia wpisów dodawałem sobie “checkbox” przy rzeczach które wymagały zrobienia, wykrzykniki przy cennych 😉 uwagach, czy znaki zapytania przy sprawach wymagających przemyślenia. Działało nawet lepiej, ale nadal mieszało się z ogólnymi notatkami. Dzisiaj przesiadłem na się na góglowego eksela, a przynajmniej częściowo. Listę zadań do zrobienia i przemyślenia całkowicie przeniosłem w chmurę, dodałem status, priorytet, opis i kolory. Jak szaleć to szaleć. Mam nadzieję, że w ten sposób uda mi się trzymać listę rzeczy do zrobienia bardziej przejrzystą. Myślałem przez chwilę o zainstalowaniu jakiegoś wypasionego toola, ale uznałem to za przerost treści nad formą.

Tak tylko chciałem się tym z wami (moi wierni ninja czytelnicy) podzielić. Jak macie jakieś inne, może lepsze sposoby na prowadzenie swoich projektów to pisać.

Jak następnym razem zacznę projekt

Ostatnimi czasy więcej czytam niż piszę i tak mi się kilka przemyśleń zebrało na temat: “co ja bym zrobił lepiej w tym projekcie”. Żeby było jasne, to są moje przemyślenia, do których bd starać się zastosować. Czysta teoria, nie potwierdzoną praktycznie żadną praktyką. Może poza kilkoma linijkami kodu. Czytam teraz takie różne kawałki kodu, pisze różne testy i wynika z tego prosta sprawa. Taniej, szybciej i skuteczniej jest napisać kawałek prostego testu, a potem poprawić drobne błędy. Niż napisać oddać testerom i “czekać” na listę błędów. Można inaczej: jedna osoba pisze kod, druga testy. Według mnie to jest strasznie uciążliwe, o każdej zmianie trzeba informować piszącego test, a nie zawsze się o tym pamięta. Jak testy nie przechodzą to nie do końca wiadomo kto zjebał, takie to nie poręczne. W dodatku w tej sytuacji, osoba pisząca testu musi wiedzieć co się dzieje w kodzie, znać specyfikacje i ogólnie ogarniać komponent – dla mnie to nie potrzebne powtarzanie. Osobiście uważam, że developer który pisze kod, jest za niego odpowiedzialny jak i za jego jakość => sam powinien zadbać o jego poprawne działanie.

Oczywistą oczywistością jest to, że nie będzie po kolei. Tzn od ważnej do nie ważnej, od małej do dużej, czy od żółtej do czerwonej.

Do rzeczy:
Weryfikuj zawsze dane wejściowe, jeżeli używasz wskaźników to przede wszystkim sprawdź czy wskazują tam gdzie powinny. Czyli nie są null, jeżeli będziesz z nich odczytywać lub do nich zapisywać. Lub czy są null jeżeli będziesz do nich przypisywać. To w ogóle temat rzeka z tymi wskaźnikami. Jeżeli oczekujesz wartości sprawdź, czy te które dostałeś są poprawne, np. mieszczą się w obsługiwanych zakresach. Ten mały i prosty kawałek kodu, ułatwi późniejsze debugowanie. Po wszystkim można taki kod wrzucić w #ifdef _DEBUG_ i po sprawie.
Odruchowo do każdego kodu, który wypocisz dodaj kawałek testu, który sprawdzi czy rzeczywiście, to co zrobiłeś działa tak byś sobie życzył. Postaraj się wywołać metodę  / funkcję z każdym możliwym parametrem, nawet z takim, który uznasz za błędny. Przecież od tego masz weryfikacje danych wejściowych. Jeżeli kod ma coś zwrócić sprawdź czy wynik jest tym czego oczekujesz lub czy rzucony wyjątek jest tym o który chodzi. Do każdego z rodzaju testów stwórz sobie osobne środowisko, a ingerencje w kod testowany naprawdę ogranicz do niezbędnego minimum. Najgorszą sprawą jest, gdy okazuję się że test jednostkowe i systemowe nie mogą zostać przeprowadzone na tym samym kodzie, lub że wyniki dla tych samych komponentów dadzą inny wynik.
Po tym jak obmyślisz już co piszesz, jak, w czym, etc. I narysujesz sobie kilka kwadracików ze strzałeczkami i takich tam. Kiedy myślisz, że to już ten moment że możesz już pisać. Odczekaj jeszcze z 5 minut. Popatrz na te ładne obrazki i pomyśl czy to na pewno tak ma być. Nie zapomniałeś o czymś? Co się stanie i jak bardzo będziesz się musiał namęczyć żeby dodać jakiegoś nowego ficzera? Albo czy możliwe będzie ponowne wykorzystanie komponentów, które właśnie zamierzasz zakodzić. Czy napewno dziedziczenie a nie agregacja 😉 Jeżeli po 5 minutach nadal jesteś pewien swego, to śmiało zaczynaj pisać.
Tutaj się trochę powtórzę, ale to mój blog więc mogę. Chodzi mi o obrazki, jak sobie narysujesz już wszystkie klocki układanki, wszystkie przepływy, kto, z kim i dlaczego. Zrób przysłowiowy krok w tył i spójrz czy nie będzie Ci wstyd takiego gniota później pisać i poprawiać. Prawie zawsze można lepiej.
Życie: nigdy nie zaczynaj dnia pracy od suszonych owoców.

Jak już ktoś przebrniesz przez moje propozycje, dorzuć coś od siebie.
Wstyd mi za tego posta, ale musze.

krótko, szybko i na temat – jak zrobić własny widok

Jestem świeżo po przeczytaniu więc jeszcze pamiętam i mam zapisane najważniejsze kroki, oto przepis na własny widok.
1) Bierzesz 1 widok, który chcesz zmodyfikować na własny użytek – dziedziczysz po owym.
2) Robisz obsługę wszystkich możliwych konstruktorów widoku po którym odziedziczyłeś. Raczej ważne – nigdy nie wiesz, z którego dalvik wywali Ci wyjątek!
3) Jeżeli potrzebujesz dodajesz odpowiednie .xml z parametrami dla kolorów, rozmiarów czy innego dziadostwa, którego nie chcesz i nie powinieneś trzymać zaszytego na stałe w kodzie
4) W swojej metodzie inicjującej – inicjujesz wszystko co będzie ci potrzebne do używania w nowej klasie widoku, np. zaczytujesz kolorki z .xml.
5) W onDraw dodajesz swój kod. Wszystko co będzie przed super.onDraw() będzie pod klasą bazową, wszystko co będzie po będzie nad tym co narysowała klasa bazowa. Oczywiście jeżeli wywołasz super.onDraw(…);
6) Definiujesz layout swojego widoku w odpowiednim .xml. Łudząco podobny do głównego layout’u aplikacji.
7) Używasz swojego nowego widoku w kodzie. Np.int id = R.layout.myNewView; blabla.setView(id);

Po odpaleniu i wywalaniu się aplikacji przeglądasz jaki wyjątek poleciał w dalvikvm, poprawiasz, jarasz się swoim nowym widokiem.

Mega droidowych hakierów pozdrawiam. Na razie nie wiem jak inaczej zrobić własny widok. Jak się dowiem to napisze. Na ten czas to musi wystarczyć.

Działa? Poka – Pochwal się! Pytania? – dajesz!

ps. Jak się dowiem jak to dodam obsługę [code]…[/code] żeby ładne różowe kolory były.

android, programowanie, ksiązki

Z czego się uczyć? To dobre pytanie, można czytać developer.android.com, można szukać na google, można zapytać kolegi, lub zobaczyć co jest np na amazon do przeczytania i kupić sobie książkę. Ja przejrzałem to co oferuje apress, na google book można znaleźć sporą część książki, zdecydowanie nie polecam. Jak dla mnie jest pisana zbyt chaotycznie, jakoś źle mi się to czytało. Natomiast ponownie jestem pod wrażeniem wydawnictwa wrox i takiej książki autorstwa Reto Meier. Wszystko jest tłumaczone, przykłady pisze się samodzielnie, a nie ściąga ze strony wydawnictwa. Wcześniej czytałem coś o programowaniu w c# i .net framework 3.5 i również uważam, że książka była dobrze napisania.
Nauka na przyszłość jak będzie potrzeba przeczytania i nauczenia się jakiejś nowej technologi napewno zacznę naukę od sprawdzenia co oferuje wrox

ps
Post niestety nie jest sponsorowany.