Blog (21)
Komentarze (860)
Recenzje (0)

Perypetie początkującego programisty samouka

@meshoPerypetie początkującego programisty samouka 04.03.2018 17:53

Z programowaniem stykałem się od początku technikum. To wtedy dowiedziałem się, że jest coś takiego jak kod źródłowy czy kompilator, który tłumaczy go na język zrozumiały dla maszyny. Mając do czynienia z elektroniką odkryłem mikrokontrolery, z którymi intensywnie bawiłem się do początków studiów. Po znalezieniu pracy w branży chęć dodatkowego majstrowania w elektronice po godzinach umarła we mnie na dobre, przechodząc się na taniec. Postanowiłem przenieść zapasowe zasoby czasu na naukę programowania Androida z ogólnodostępnych zasobów. Dlaczego? Każdy ma smartphone'a, więc na pewno rozwój w tym kierunku nie będzie bezużyteczny. W tym wpisie opowiem Wam jak w dwa miesiące praktycznie od zera przeszedłem do pełnej aplikacji opublikowanej w Google Play z możliwością dalszego rozwoju.

Znajdź problem do rozwiązania

Tak samo jak przy mikrokontrolerach, tak i przy Androidzie nie chciałem się uczyć na suchych przykładach, które nie tworzą po skompilowaniu kodu niczego co by się mogło przydać. Nie wiem czy jest to poprawne podejście, ale samo suche poznawanie poszczególnych klocków szybko mnie nudzi. Dlatego założyłem sobie na początek konkretny problem do rozwiązania, gdzie kroczek po kroczku będę maszerował do celu.

Czy ktoś jeszcze pamięta o Dogecoinie? Okazuje się, że społeczność tej kryptowaluty dalej żyje po latach i ma się całkiem dobrze, mając ponad 100 tysięcy obserwatorów na Reddicie. Należę do niej także i ja, natrafiłem na tym subreddicie na temat z ogłoszeniem prostej aplikacji do śledzenia portfeli. Idea była banalna, posiadając adres publiczny portfela dodajemy go do appki, mając podgląd na bieżąco na stan jego konta z przeliczeniem do walut FIAT. Autor wypuścił ją pod iOS, szukał kogoś kto wykona jej port na Androida. Przejrzałem rzeczy które bym musiał się nauczyć, stwierdziłem: "Okej, dość sporo tego jak na początek, ale jest to do ogarnięcia".

Od pomysłu do realizacji

Plan działania rozbiłem sobie na malutkie kroczki, mając spisane założenia do projektu wiedziałem, co po czym będę robił. Z samym Android Studio miałem tyle o ile do czynienia, składając 'kod' (będący de facto zlepkiem przykładów) na potrzeby odczytów danych z moich stacji pogodowych, bazujących na ESP8266. Naukę obsługi samego środowiska, debugowania z użyciem fizycznego urządzenia miałem już z głowy, zatem mogłem przejść do budowy pierwszym aktywności/widoków mojej aplikacji.

Na początku chciałem dogadać się (sam ze sobą), jak, przynajmniej z grubsza, mają wyglądać poszczególne widoki aplikacji. Wizja zmieniała się parokrotnie, jednakże koniec końców ustaliłem zestaw, który w niezmienionej formie przetrwał do wersji wydanej w Google Play. Oprogramowałem wówczas wyłącznie interakcje przejść pomiędzy nimi. Mając tak gotową gotową bazę zabierałem się za opracowywanie kolejnych funkcjonalności.

Niech stanie się kod

Pomimo iż współpracowałem wyłącznie sam ze sobą, wszystkie błędy i problemy na bieżąco zapisywałem na stronie projektu.
Pomimo iż współpracowałem wyłącznie sam ze sobą, wszystkie błędy i problemy na bieżąco zapisywałem na stronie projektu.

Na początku "na ruszt" poszła nauka obsługi obiektów JSON. Odczyt danych z serwera, oraz wrzucenie ich w odpowiednie miejsce w layoucie. Sprawa okazała się banalna, aczkolwiek zagranie chciwie i wstawienie do programu mechanizmu bez zrozumienia jego działania zafundowało mi błąd, na którego rozwikłanie musiałem poświęcić koło dwóch wieczorów. Pierwszy odczyt danych po otwarciu aplikacji zwracał zera w kursach wymiany pieseła. Kiedy zdałem sobie sprawę że pobieranie danych następuje asynchronicznie wszystko stało się jasne - muszę w jakiś sposób zaczekać, aż zostaną pobrane przed wstawieniem ich do widoku.

Przykładowa "baza danych" z dwoma portfelami.
Przykładowa "baza danych" z dwoma portfelami.

Następnie przeszedłem do drugiej, bardziej złożonej funkcjonalności. Musiałem stworzyć małą bazę danych, która mieściłaby w sobie obecnie zapisane portfele wraz z ich ostatnio pobranymi stanami kont. Trzeba było również pomyśleć o możliwości dodawania, usuwania, nadpisywania konkretnych obiektów z tej bazy. Do tego celu również wykorzystałem obiekt JSON. Nie chciałem tworzyć algorytmów zapisu do pliku zewnętrznego, więc jako pamięć posłużyła mi biblioteka SharedPreferences, gdzie zapisywałem obiekt JSON pod postacią najpospolitszego Stringa. Jako że przy tworzeniu "bazy danych" było nieco więcej operacji do opracowania niż przy odczycie kursu waluty z serwera zewnętrznego, zajęło mi to proporcjonalnie więcej czasu. Tak czy owak po niecałym miesiącu miałem już minimalną, aczkolwiek gotową do wydania aplikacje.

Klucznik Gerwazy

Aby upewnić się czy aplikacja zadziała nie tylko u mnie, wygerenowałem plik gotowy apk i przekazałem znajomym. Żaden z nich nie mógł zainstalować aplikacji. Tu również okazało się że z niewiedzy wygenerowałem niepodpisaną aplikację, która poza emulatorem nie zainstaluje się nigdzie. Utworzyłem własny klucz, po czym podpisałem nim aplikacje, uff... ruszyło. O dziwo aplikacja chodziła tak jak powinna, nawet skalowanie interfejsu zadziałało prawidłowo na mniejszych ekranach. Nikomu z moich pierwszych testerów nie udało się jej zawiesić, zatem nadszedł czas aby odwiedzić sklep Google "od zakrystii".

Publikacja w Google Play

Na wstępie Google zażyczyło sobie 25 dolarowej opłaty rejestracyjnej, co też uczyniłem. Nie mam pojęcia czy przyda mi się na przyszłość konto dewelopera, ale sam fakt posiadania własnej aplikacji w Google Play i możliwość sprawdzenia jak wygląda całość od drugiej strony do opłaty mnie przekonał. Przeszedłem do publikacji.

Natrafiłem na kolejną zagwozdkę dotyczącą kluczy podpisywania aplikacji. Google proponuje własną usługę Podpisywanie aplikacji Google Play. W standardowym scenariuszu podpisujemy aplikacje swoim własnym kluczem, przesyłamy ją do publikacji i klucz ten pozostaje w niej aż do użytkownika końcowego. Jest to optymalne rozwiązanie poza przypadkiem kiedy z jakiegoś powodu stracimy dostęp do naszego klucza - wtedy już nie będziemy opublikować naszej aplikacji pod użytą nazwą pakietu.

W przypadku użycia Podpisywania aplikacji Google Play do sklepu przesyłamy .apk podpisane kluczem przesyłania, Google usuwa ten klucz i wstawia za niego klucz podpisywania aplikacji, który przesyłamy przed pierwszą publikacją programu. Kiedy zgubimy klucz przesyłania, możemy poprosić o jego zresetowanie... co później uratowało mi skórę.

Dopracowałem opis, wykonałem screeny, kliknąłem "opublikuj" i tak oto pojawiła się aplikacja w sklepie. Pierwsi "Reditorzy" przetestowali i pobrali, opinie były bez większych zastrzeżeń. Obserwując statystyki z Konsoli Play widziałem że w pierwszym tygodniu było koło 20 pobrań i co najważniejsze, nikomu jeszcze DogeTracker się nie zawiesił. Jedyne awarie były spowodowane na moim telefonie, powstałe w trakcie tworzenia programu.

Ciekawostka: Debugowanie na fizycznym urządzeniu spowodowało, że w Konsoli Play miałem podgląd na raporty awarii jeszcze sprzed daty opublikowania jej w sklepie.

Pierwsza wersja aplikacja została opublikowana 27 stycznia, tu mamy raport zgłoszony 4 tygodnie wcześniej.
Pierwsza wersja aplikacja została opublikowana 27 stycznia, tu mamy raport zgłoszony 4 tygodnie wcześniej.

Wiedziałem że moja apka prosi się o dalszy rozwój więc zacząłem pracować nad kolejną wersją. Jednak hola, hola, nie tak szybko przyjacielu...

Miłe złego początki

Już miałem się zabierać ochoczo do pracy nad kolejnymi ficzerami... a tu nagle zderzyłem się ze ścianą. Mój kod był napisany na tyle niezrozumiale, że nawet ja - sam autor - musiałem po miesiącu w co niektórych miejscach przez dłuższą chwilę się zastanowić, o mi chodziło. "Ooo nie, tak to nie będzie" - opierniczyłem sam siebie. Z pomocą przyszła książka "Czysty kod". Kolejne 10 wieczorów poświęciłem na samo upraszczanie i oczyszczanie kodu na bazie tylko pierwszych rozdziałów.

Po doprowadzeniu kodu aplikacji do względnego porządku dodałem planowane ficzery do wersji 1.1. Jest już ona najbliższa temu, co stworzył mój kolaborant pod iOS'em. Aplikacje pobrało jak dotąd 50 osób. Jeśli wierzyć na słowo grupie docelowej, nie odnaleziono jak dotąd poważnych błędów widocznych od strony użytkownika.

Podsumowanie

Pierwsze dwa miesiące nauki Androida jak i kontynuacji nauki Javy pokazały, że trzeba mieć trochę pokory do tej tematyki. Rzucanie się na gotowe rozwiązania bez zrozumienia ich mechanizmów jest rozwiązaniem działającym tylko na krótką metę. Zgodnie z efektem Krugera-Dunninga moja pewność siebie zaliczyła spadek po pikowaniu na 100% i jest gdzieś w minimalnym punkcie na wykresie:

W dalszym ciągu mam wrażenie że mój kod ledwo ociera się o akceptowalny poziom, w dalszym ciągu odnajduje pola do uproszczeń. Nie od razu Rzym zbudowano. Po tym "okresie" próbnym nauki wiem jakich podstawowych błędów należy kategorycznie unikać oraz uczyć się programowania tak, aby nie zrobić sobie krzywdy przy dalszym rozwoju. Nauka nie poszła w las, aż by się chciało rzec.

Dla zainteresowanych linki do omawianego projektu:

https://github.com/avrland/DogeTracker_Android

https://play.google.com/store/apps/details?id=kowoof.dogetracker

https://www.reddit.com/r/DogeTracker/

Szanowna Użytkowniczko! Szanowny Użytkowniku!
×
Aby dalej móc dostarczać coraz lepsze materiały redakcyjne i udostępniać coraz lepsze usługi, potrzebujemy zgody na dopasowanie treści marketingowych do Twojego zachowania. Twoje dane są u nas bezpieczne, a zgodę możesz wycofać w każdej chwili na podstronie polityka prywatności.

Kliknij "PRZECHODZĘ DO SERWISU" lub na symbol "X" w górnym rogu tej planszy, jeżeli zgadzasz się na przetwarzanie przez Wirtualną Polskę i naszych Zaufanych Partnerów Twoich danych osobowych, zbieranych w ramach korzystania przez Ciebie z usług, portali i serwisów internetowych Wirtualnej Polski (w tym danych zapisywanych w plikach cookies) w celach marketingowych realizowanych na zlecenie naszych Zaufanych Partnerów. Jeśli nie zgadzasz się na przetwarzanie Twoich danych osobowych skorzystaj z ustawień w polityce prywatności. Zgoda jest dobrowolna i możesz ją w dowolnym momencie wycofać zmieniając ustawienia w polityce prywatności (w której znajdziesz odpowiedzi na wszystkie pytania związane z przetwarzaniem Twoich danych osobowych).

Od 25 maja 2018 roku obowiązuje Rozporządzenie Parlamentu Europejskiego i Rady (UE) 2016/679 (określane jako "RODO"). W związku z tym chcielibyśmy poinformować o przetwarzaniu Twoich danych oraz zasadach, na jakich odbywa się to po dniu 25 maja 2018 roku.

Kto będzie administratorem Twoich danych?

Administratorami Twoich danych będzie Wirtualna Polska Media Spółka Akcyjna z siedzibą w Warszawie, oraz pozostałe spółki z grupy Wirtualna Polska, jak również nasi Zaufani Partnerzy, z którymi stale współpracujemy. Szczegółowe informacje dotyczące administratorów znajdują się w polityce prywatności.

O jakich danych mówimy?

Chodzi o dane osobowe, które są zbierane w ramach korzystania przez Ciebie z naszych usług, portali i serwisów internetowych udostępnianych przez Wirtualną Polskę, w tym zapisywanych w plikach cookies, które są instalowane na naszych stronach przez Wirtualną Polskę oraz naszych Zaufanych Partnerów.

Dlaczego chcemy przetwarzać Twoje dane?

Przetwarzamy je dostarczać coraz lepsze materiały redakcyjne, dopasować ich tematykę do Twoich zainteresowań, tworzyć portale i serwisy internetowe, z których będziesz korzystać z przyjemnością, zapewniać większe bezpieczeństwo usług, udoskonalać nasze usługi i maksymalnie dopasować je do Twoich zainteresowań, pokazywać reklamy dopasowane do Twoich potrzeb. Szczegółowe informacje dotyczące celów przetwarzania Twoich danych znajdują się w polityce prywatności.

Komu możemy przekazać dane?

Twoje dane możemy przekazywać podmiotom przetwarzającym je na nasze zlecenie oraz podmiotom uprawnionym do uzyskania danych na podstawie obowiązującego prawa – oczywiście tylko, gdy wystąpią z żądaniem w oparciu o stosowną podstawę prawną.

Jakie masz prawa w stosunku do Twoich danych?

Masz prawo żądania dostępu, sprostowania, usunięcia lub ograniczenia przetwarzania danych. Możesz wycofać zgodę na przetwarzanie, zgłosić sprzeciw oraz skorzystać z innych praw wymienionych szczegółowo w polityce prywatności.

Jakie są podstawy prawne przetwarzania Twoich danych?

Podstawą prawną przetwarzania Twoich danych w celu świadczenia usług jest niezbędność do wykonania umów o ich świadczenie (tymi umowami są zazwyczaj regulaminy). Podstawą prawną przetwarzania danych w celu pomiarów statystycznych i marketingu własnego administratorów jest tzw. uzasadniony interes administratora. Przetwarzanie Twoich danych w celach marketingowych realizowanych przez Wirtualną Polskę na zlecenie Zaufanych Partnerów i bezpośrednio przez Zaufanych Partnerów będzie odbywać się na podstawie Twojej dobrowolnej zgody.