Większość czasu od początku mojej przygody z programowaniem spędziłem i nadal spędzam jako programista aplikacji webowych. Od czasu do czasu przychodzi mi do głowy pomysł oprogramowania czegoś innego. Tak po prostu, żeby spróbować.

Jednym z tego typu pomysłów, było napisanie własnej aplikacji mobilnej. Od zera, aż do opublikowania w którymś ze sklepów. Żeby przekonać się jak to wszystko wygląda od środka. Pomysł nie jest nowy. Podejrzewam, że kołacze się w mojej głowie od ładnych paru lat, gdzieś od momentu smartfonowego boomu.

Hmm… naprawdę tak długo?

Być może.

Nie miałem bowiem zamiaru pisać aplikacji dla samego pisania. Nie chciałem tworzyć kolejnej listy zadań, czy notatnika. Chciałem, żeby było to coś wokół własnego pomysłu. Nieważne jak banalnego, ale własnego.

Z czasem pojawiły się pomysły, smartfony spowszedniały, sklepy z aplikacjami się zapełniły, doba ma nadal 24 godziny, a życie na programowaniu się nie kończy.

Gdzieś po drodze miałem też okazję napisać, w ramach pierwszej pracy, prostą grę na iPady, co na jakiś czas zaspokoiło moją potrzebę programowania mobilnego.

I tak nadszedł rok 2020. Przed chwilą wsiąkłem w Uniwersum Wiedźmina. Natknąłem się na Fluttera. Pojawił się SARS-CoV-2. Wszystko to sprawiło, że był pomysł, narzędzie i nieco więcej czasu. Dzięki temu udało się rozpocząć i opublikować Trial of Questions.

widok główny aplikacji

widok główny aplikacji

Pomysł

Pomysł był prosty: przygotować quiz wiedzy o wiedźminie i świecie stworzonym przez Andrzeja Sapkowskiego. W formie aplikacji, w której użytkownicy mogliby samodzielnie sprawdzać swoją wiedzę, pojedynkować się z innymi, czy w końcu uczestniczyć w ligowych rozgrywkach.

Ja z bratem

Ideę udało mi się „sprzedać” bratu i wciągnąć go do współpracy.

Plany, a rzeczywistość

Plany były (i nadal są) szerokie, ale na razie skończyło się na trybie „single player”, w którym można sprawdzać swoją wiedzę, kolekcjonować odznaki za prawidłowe odpowiedzi na pytania z konkretnej grupy tematycznej, czy porównywać swoje osiągnięcia z innymi użytkownikami.

widok pytania

tryb rozgrywki

widok podsumowania rozgrywki

podsumowanie rozgrywki

widok poprawnej odpowiedzi

poprawna odpowiedź

Tryb ten jest (zgodnie z planem) wymagający, ponieważ jego działanie oparliśmy na pomyśle wykorzystywanym w wielu grach zręcznościowych – pomylisz się, to zaczynasz od zera. Ze względu na to, na razie nikt nawet nie zbliżył się do limitu 100 poprawnych odpowiedzi w jednej rozgrywce.

najlepsze wyniki

najlepsze wyniki

najlepsze wyniki w kategorii "książki"

najlepsze wyniki w kategorii „książki”

osobiste osiągnięcia (1)

osobiste osiągnięcia (1)

osobiste osiągnięcia (2)

osobiste osiągnięcia (2)

Podział na kategorie

Już na początku zdawaliśmy sobie sprawę, że wrzucanie pytań z książek, filmów i gier do jednego worka nie ma sensu i może zniechęcić użytkowników do korzystania z aplikacji. Nie każdy bowiem jednocześnie grał w gry, przeczytał książki, a także obejrzał filmy i seriale. Od samego początku mieliśmy więc podział pytań na kategorie.

W trakcie implementacji i własnych testów stwierdziliśmy jednak, że to za mało. Przecież nie każdy kto widział serial Netflixa widział też polską produkcję. Postanowiliśmy dodać więc podkategorie. I tak, w aktualnej wersji, użytkownik może bez kłopotu określić z jakich dziedzin chce otrzymywać pytania w trakcie rozgrywki.

wybór kategorii pytań (1)

wybór kategorii pytań (1)

wybór kategorii pytań (2)

wybór kategorii pytań (2)

Narzędzia

Ze względu na to, że było nas dwóch, postanowiliśmy, że ja zabiorę się za aplikację mobilną, a Kuba za część serwerową.

Tak jak już wspomniałem, do stworzenia aplikacji mobilnej użyliśmy Fluttera. Z perspektywy czasu i patrząc tylko na to co zrobiliśmy przy okazji Trial of Questions, muszę przyznać, że programuje się w tym całkiem przyjemnie. Nie miałem niestety (jeszcze) okazji przetestować działania aplikacji pod systemem iOS (aktualnie aplikacja dostępna jest tylko na Androida). Nie wiem więc, jak faktycznie wygląda wieloplatformowość Fluttera. Ale z tego co słyszałem nie jest z tym źle. Fajnie, że była okazja potestować zupełnie nowe narzędzie.

Jeżeli chodzi o backend, to tam skorzystaliśmy z Kotlina, Spring BootaMongo DB. Serwer aktualnie działa na Heroku.

Po stronie serwerowej najwięcej przygód i nauczek mieliśmy właśnie z hostingiem aplikacji. Zaczęliśmy od Heroku, ale celowaliśmy w Google Cloud Platform i przez chwilę aplikacja znajdowała się właśnie tam. Nie udało nam się jednak zminimalizować kosztów na tyle, żebyśmy byli usatysfakcjonowani (być może po prostu z naszej niewiedzy), więc ostatecznie wróciliśmy na Heroku.

Aha… do uwierzytelniania użytkowników i połączeń pomiędzy aplikacją, a serwerem wykorzystaliśmy Firebase.

Kod aplikacji trzymamy w GitHubie. Do CI/CD używamy GitHub Actions, chociaż wcześniej, przez jakiś czas korzystaliśmy z Buddy’ego.

Zapraszamy

Niezależnie od tego, czy jesteś fanem wiedźmińskiego świata, czy nie, zapraszamy Cię do poklikania posmyrania w aplikacji, potestowania i podzielenia się swoją opinią (np. w komentarzach poniżej) na temat efektów naszej braterskiej kooperacji. Wszelka konstruktywna krytyka mile widziana 🙂

Jeżeli interesuje Cię więcej szczegółów na temat użytych bibliotek, czy wdrożonych rozwiązań, to śmiało pytaj w komentarzach – na wszystkie odpowiemy.

PS. Aplikacja działa w dwóch wersjach językowych. Po polsku i angielsku. Możecie więc śmiało zapraszać nie-polskojęzycznych znajomych 🙂

widok ustawień z możliwością zmiany języka

widok ustawień z możliwością zmiany języka


Bądź na bieżąco!

Podobają Ci się treści publikowane na moim blogu? Nie chcesz niczego pominąć? Zachęcam Cię do subskrybowania kanału RSS, polubienia fanpage na Facebooku, zapisania się na listę mailingową:

Dołączając do newslettera #NoweRozdanie2 otrzymasz dostęp do dodatkowych materiałów:

  • PDF: „Jednoosobowa działalność gospodarcza krok po kroku” (do artykułu)
  • PDF: „FAQ: Jak pracuje się dla Roche/Sii?” (do artykułu)
  • PDF: „Jak zmniejszyć prawdopodobieństwo wystąpienia kontroli i co zrobić kiedy urzędnik zapuka do Twoich drzwi?” (do artykułu)

Powyższe dane są przechowywane w systemie Mailchimp i nie są udostępniane nikomu innemu. Więcej szczegółów znajdziesz na stronie polityki prywatności.

lub śledzenia mnie na Twitterze. Generalnie polecam wykonanie wszystkich tych czynności, bo często zdarza się tak, że daną treść wrzucam tylko w jedno miejsce. Zawsze możesz zrobić to na próbę, a jeśli Ci się nie spodoba – zrezygnować :)

Dołącz do grup na Facebooku

Chcesz więcej? W takim razie zapraszam Cię do dołączenia do powiązanych grup na Facebooku, gdzie znajdziesz dodatkowe informacje na poruszane tutaj tematy, możesz podzielić się własnymi doświadczeniami i przemyśleniami, a przede wszystkim poznasz ludzi interesujących się tą samą tematyką co Ty.

W grupie Programista Na Swoim znajdziesz wiele doświadczonych osób chętnych do porozmawiania na tematy krążące wokół samozatrudnienia i prowadzenia programistycznej działalności gospodarczej. Vademecum Juniora przeznaczone jest zaś do wymiany wiedzy i doświadczeń na temat życia, kariery i problemów (niekoniecznie młodego) programisty.

Wesprzyj mnie

Jeżeli znalezione tutaj treści sprawiły, że masz ochotę wesprzeć moją działalność online, to zobacz na ile różnych sposobów możesz to zrobić. Niezależnie od tego co wybierzesz, będę Ci za to ogromnie wdzięczny.

Na wsparciu możesz także samemu zyskać. Wystarczy, że rzucisz okiem na listę różnych narzędzi, które używam i polecam. Decydując się na skorzystanie z któregokolwiek linku referencyjnego otrzymasz bonus również dla siebie.