Pokazywanie postów oznaczonych etykietą praktyki. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą praktyki. Pokaż wszystkie posty

czwartek, 28 czerwca 2012

Mój pierwszy publiczny screencast z programowania w J2ME


Jakiś czas temu wspominałem, że opublikuje filmik z tworzenia implementacji gry tank2012 (klonu tank1990). I o to jest (oglądać w HD):


Post produkcja zajęła mi więcej niż przypuszczałem. Musiałem trochę powycinać, gdy gdzieś pod koniec nagrywania musiałem zaglądać do ściągawki. Jednak jak popełniałem jakieś błędy w kodzie, to je naprawiałem. Teraz każdy może sobie popatrzeć jak programuję. Nie jest to może najefektywniejsze wykorzystanie możliwości jakie daje IDE, ale już dawno nie siedziałem na NetBeansie.

Opublikowałem również pełen kod na githubie. Jest on nie bardzo obiektowy, ale nie to było celem ćwiczenia, a pokazanie jak można tą grę zaimplementować. Co prawda w oryginalnej wersji cegły można było niszczyć stopniowo, ale w przypadku j2me wymagało by to sporo wysiłku. No i zapomniałem po każdym zadaniu wykonać commita, więc mamy rewizję początkową i końcową.

Wszelkie uwagi odnośnie kodu / screencast'a mile widziane. A teraz czas się zwijać na Confiturę.

poniedziałek, 28 maja 2012

Wrażenia po prowadzeniu mini praktyk niestudenckich


Ostatnio, w czasie gdy większość z Was oddawała się GeeCON'owemu szaleństwu, lub spędzała kolejny nudny dzień w pracy tworząc super tajne projekty, ja miałem okazję podszlifować i wypróbować moje zdolności mentorskie (o ile takie w ogóle posiadam). Od zawsze lubiłem dzielić się swoją wiedzą z innymi. W przypadku programowania, to już na pierwszym roku studiów udzielałem korepetycji koleżankom z liceum, w zamian za ciepły obiadek :) Później zaangażowałem się w Warsztaty programowania urządzeń mobilnych przy Studenckim Kole Naukowym Informatyki Systemów Autonomicznych i Adaptacyjnych. Później zacząłem pisać tego bloga i coś tam od czasu do czasu ludziom przedstawiać w ramach JUG-ów. A teraz prowadzenie praktyki było czymś nowym dla mnie.

W minionym tygodniu dostałem od Marcin Saneckiego pod opiekę praktykanta Adriana. Uczęszcza On do technikum informatycznego i nastał taki moment, że musiał odbyć / odbębnić praktykę w zawodzie. Inni jego rówieśnicy, albo przeinstalowują systemy operacyjne w swoim liceum, albo idą do jakiegoś sklepu komputerowego składać blaszaki. Ostatecznie, jak nie mogą nigdzie znaleźć firmy, która przyjmie ich na praktykę, to idą do jakiś urzędów państwowych, gdzie można się tylko zniechęcić i uwstecznić.

Jako że Adrian nie do końca jest przekonany, co chce w życiu robić, miałem utrudnione zadanie. Miałem go zachęcić (a jeszcze lepiej przekonać go), aby szedł w stronę IT, a najlepiej programowania. Czy musiałem mu pokazać coś ciekawego, gdzie szybko widać fajny efekt pracy i co daje przyjemność samo w sobie. No i do tego miałem niewiele czasu (właściwie wyszły 2 dni po około 5 godzin). Mój praktykant miał podstawy Pascala (tzn. gdzieś tam w technikum się go kiedyś uczył) i trochę widział Html'a i Java Script'a. Ja słysząc tą ostatnią informację, trochę się przeraziłem, gdyż ja sam byłbym mocno zniechęcony do dalszej nauki po pobieżnym poznaniu JS.

Miałem więc bardzo trudny orzech do zgryzienia, gdyż młody adept sztuki programistycznej miał niewielkie doświadczenie, a musiałem w krótkim czasie coś go nauczyć i pokazać, że programowanie może być fajne i dawać satysfakcje. Zacząłem więc sobie przypominać, jak to było kiedyś ze mną, co mi dawało motywację, było łatwe, a efekt końcowy był szybko widoczny.

Mój wybór padł na Javę Micro Edition i postanowiłem stworzyć razem z Adrianem coś co by przypominało grę tank 1990. Odgrzebałem więc swoją starą prezentację na temat Tworzenia graficznego inferface’u użytkownika niskiego poziomu w J2ME, gdzie właśnie przedstawiałem jak operować prostymi obiektami dwuwymiarowymi. Prezentacja co prawda z 2009 roku, przygotowana na potrzeby wspominanych wcześniej warsztatów z J2ME, ale teraz po latach się przydała w celach szkoleniowych. Odgrzebałem też kod (jest on również przypięty do tamtej prezentacji) i pousuwałem z niego bardziej zaawansowane wynalazki, zostawiając namalowany jeden czołg i resztę szkieletu całej aplikacji. Był to nasz punkt wyjścia. Pozostałe prezentacje moje i kolegów z tego okresu można również znaleźć na slideshare.net.

Na początku wspólnej praktyki z Adrianem (i częściowo z Marcinem) przygotowaliśmy niezbędne środowisko programistyczne, czyli JDK7 (32 bit), NetBeans i dodatkowo WTK od Sony Ericsson'a (jakby standardowy emulator z nowym WIndowsem 7 nie chciał działać). Zeszło nam na to trochę czasu, ale końcem końców udało i można było zacząć zabawę.

Zaczęliśmy od jednego namalowanego czołgu. Nie tłumaczyłem w ogóle czym jest obiekt, a czym klasa a jedynie uczyłem przez analogię: „Aby przesunąć czołg trzeba wywołać na nim metodę move()...”, „tu masz wczytywanie obrazka, teraz wczytaj inny...” itd. Adrian często kopiował kod i zmieniał niewielkie fragmenty, rozszerzając w ten sposób funkcjonalność. Odwoływałem się również do języków, które on znał. Było o tablicach, praktycznym zastosowaniu pętli for i warunku if. Całość dopełniona slajdami i moją cierpliwością do tłumaczenia i poprawiania błędów składniowych. Ostatecznie dotarliśmy na koniec drugiego dnia do jeżdżącego czołgu po ładnej mapie z wykrywaniem kolizji z przeszkodami i niewyjeżdżaniem po za ekran.

Chciałem jeszcze zrobić strzelanie do cegieł, ale teraz wiem, że to trochę bardziej skomplikowana historia i mogła by on zniechęcić do dalszej nauki. Zresztą widziałem, że Adrian był już wymęczony tym kodowaniem.

Pewnie się zastanawiacie, czemu nie skorzystałem z Androida (pytał o to Jacek Laskowski na Twitterze)? Otóż żaden z nas nie posiadał telefonu z tym systemem, musiałbym wcześniej przygotować szkielet startowy (decyzja, że dzisiaj zaczynamy kodowanie wyszła bardzo spontanicznie), emulator androida dłużej startuje i miałem akurat prezentację na temat J2ME pod ręka. Technologia ta (Android w sumie też) daje nam szybką pętlę zwrotną, czyli wprowadzamy małą zmianę uruchamiamy emulator i oglądamy efekt. Dzięki temu praktykant może widzieć postęp swoich prac i kojarzyć, że napisanie pewnych linijek kodu, powoduje jakąś zmianę. Również efekt końcowy jest fajny, gdyż można wrzucić na telefon i pokazać kolegom w szkole. No i nie jest to nudna kolejna strona w HTMLu.

Całe wydarzenie uważam za udane. Czy Adrian się przekonał do kodowania? Nie wiem (ciągle czekam na feedback). Na pewno poczuł jak wygląda praca programisty i że można się przy niej zmęczyć, np. szukając babola w kodzie.

Dla zainteresowanych powtórzeniem ćwiczenia udostępniam kod na githubie. Proponuję zaczynać od rewizji 1d6ca27cc7be0507f4a9eda86e48957d1717c8d3, czyli mniej więcej od kodu z którego razem z Adrianem wychodziłem. Jest tam prezentacja przedstawiająca podstawy, jak i wyjaśniająca, co należy robić. Wrzuciłem również prezentację na slideshare.net, ale tam po kompresji prezentacja już nie wygląda tak jak powinna. Za jakiś czas udostępnię rozwiązanie w postaci kodu, jak i filmu z mojego kodowania. Materiał już nagrany, czeka tylko na post produkcję. A Was zachęcam do spróbowania swoich sił w J2ME i do zadawania pytań. Chętnie odpowiem.