Barbora Najmanová: Můj malý osobní hackhaton
Poslední tři měsíce jsem velkou část svého volného času věnovala docházení na Digitální Akademii. Součástí bylo zpracování závěrečného projektu. Tomu bych věnovola následující řádky.
Jako téma jsem si vybrala vývoj aplikace pro výběr filmů a to z toho důvodu, že jsem se chtěla podívat na data z jiného úhlu pohledu. Kdy data naopak využíváme pro náhodný výběr. Pro vývoj jsem využila programovací jazyk Python a jeho framework Kivy. Na základě doporučení ze StackOverFlow jsem za vývojové prostředí vybrala PyCharm. Data jsem čerpala pomocí API z The Movie DB.
Jak funguje samotná aplikace?
Aplikace slouží pro náhodný výběr filmů. Po úvodní screenu následují tři dvojice obrázků. Každá ze dvojice představuje dané kriterium - jazyk (česky nebo anglicky), stáří filmu (mladý nebo starý) a žánr ("vyvolávající příjemné pocity": komedie, rodinný, fantasy, pohádka, romantický nebo "vyvolávající ostatní pocity": horor, akční, thriller, drama, válečný). Uživatel netuší, kde je jaké kritérium, vidí jenom obrázky. Na základě své nálady si vždy vybere jeden z dvojice. Na základě kliknutí na obrázek se hodnoty sbírají do listu. Na posledním screenu se pomocí těchto hodnot přímo z webové stránky The Movie DB vyberou tři náhodné firmy. Pokud uživatele nezaujme ani jeden, tak si může vybrat, že chce další náhodný výběr se stejnými hodnotami nebo celou aplikaci spustit od začátku.
Jak probíhala technická stránka věci?
Práce s Kivy framework
Kivy je multiplatformní framework vhodný pro vývoj uživatelského prostředí, samotnou interakci uživatele s aplikací a v neposlední řadě poskytuje kompilaci kódu do formátu, kdy je spustitelný jako Android aplikace.
Kivy language funguje podobně jako CSS - využíváno při tvorbě webových stránek pro popis způsobu zobrazení elementů. Při tvoření aplikace pracujeme s dvěma soubory - file.py a file.kv. Zjednodušeně by se dalo říct, že v .py uvádíme logiku aplikace a v .kv to, jaký bude mít vzhled a rozložení. Zkusím vysvětlit na následujícím příkladu:
file.py
class ScreenOne(Screen):
pass
Tímto jsme vytvořili třídu, která dědí z Kivy vlastnosti screen. Příkaz pass byl použit proto, protože zde nepotřebujeme nic k rodičovi přidat.
file.kv
<ScreenOne>:
BoxLayout:
Label:
text: "Welcome to Random Movie"
Button:
text: "Start"
on_press: root.manager.current = "screen2"
Zde už definujeme samotné rozložení screenu a interakci s uživatelem.
file.py
class ScreenTwo(Screen):
def add_genre(self, lang):
app= App.get_runing_app()
app.my_lang= lang
file.kv
<ScreenTwo>:
BoxLayout:
ImageButton:
on_press:
root.add_genre("en")
root.manager.current = "screen3"
source:"./cizi.jpg"
keep_ratio: False
allow_strech: True
To samé uděláme i pro druhý ImageButton s tím rozdílem, že akce root.add_genre ("cs") bude ukládat hodnotu českého jazyku. Podobně to vypadá pro další dva screeny, kde ukládáme stáří filmu a žánr.
Dát kritériím lepší strukturu. Chtěla bych zahrnout více jazyků. Při spuštění aplikace by se vždy vybrala náhodná dvojice jazyku. Přidat další jako je délka filmu atd.
Statistika
Vytvořit uživatolovi účet, kde by si přidával filmy, co už viděl. Následně by si mohl generovat jednoduché statistiky.
Pohrát si s uživatelským rozhraním
Zelegantnit kód
Už teď vidím, že některé věci jsou tam škaredě našroubované. Jak řekl jeden ajťák:"Když vidím svůj kód po půl roce, automaticky ho přepisuji." :)
Převést kód do apk
Věnujte čas pořádnému promyšlení tomu, co vlastně tvoříte, jak to chcete tvořit, jaká je logická návaznost. Programování není ve výsledku o tom umět jazyk, ale je to spíše koncept přemýšlení.
Nastudujte dokumentaci, podívejte se na tutoriály
Nebojte se "ztrácet" čas čtěním dokumentace, koukáním na tutoriály, snahou chápání podstaty. Bohužel já osobně jsem se dostala do stavu "Nemám čas, musím rychle začít něco kódit". Ano, byla jsem schopna najít radu na internetu, nějakým způsobem ohnout až znásilnit kód pro moje řešení, ale bohužel to nevedlo k pochopení podstaty. To mě dovádí k poslední a nejdůležitější věci a to:
Organizace času
V tomto případě se to doopravdy nevyplácí podcenit. Může se stát, že věc, co zdá jednoduchá je doopravdy složitá. Můžete hodiny googlit a stejně nenajdete řešení. Naštěstí jsem měla k ruce 24/7 schopného programátora. Bez jeho obrovské podpory a pomoci, bych asi dnes ani neměla, co publikovat.
Ptejte se
Žádný učený z nebe nespadl a nebojte se zeptat ostatních lidí. V jednom případě jsem se dokonce zeptala sama na StackOverFlow. Během pár hodin mi došla odpověď a já se mohla posunout dál.
Úplným závěrem
Ano, stane se Vám, že budete zažívat stavy obrovské frustrace, zmaru, neschopnosti. Ale když uvidíte svůj první fungující kód, tak nastane obrovská radost. Také zjistíte, že při programování čas neuvěřitelně rychle utíká :).
Projekt odevzdávám doslova a dopísmene za pět dvanáct. Vyčerpaná, ale s úsměvem na tváři. Dobrou noc :)
Zdroje ze kterých jsem čerpala
file.py
class ScreenOne(Screen):
pass
Tímto jsme vytvořili třídu, která dědí z Kivy vlastnosti screen. Příkaz pass byl použit proto, protože zde nepotřebujeme nic k rodičovi přidat.
file.kv
<ScreenOne>:
BoxLayout:
Label:
text: "Welcome to Random Movie"
Button:
text: "Start"
on_press: root.manager.current = "screen2"
Zde už definujeme samotné rozložení screenu a interakci s uživatelem.
Sběr "klikacích výstupů uživatele"
Abychom mohli vybrat filmy, tak potřebujeme list, do kterého byly uloženy hodnoty uživatelova výběru. K tomu si potřebujeme nadefinovat proměnné a uložit je do listu. Následující funkce byla použita pro zjištění jazyku.file.py
class ScreenTwo(Screen):
def add_genre(self, lang):
app= App.get_runing_app()
app.my_lang= lang
file.kv
<ScreenTwo>:
BoxLayout:
ImageButton:
on_press:
root.add_genre("en")
root.manager.current = "screen3"
source:"./cizi.jpg"
keep_ratio: False
allow_strech: True
To samé uděláme i pro druhý ImageButton s tím rozdílem, že akce root.add_genre ("cs") bude ukládat hodnotu českého jazyku. Podobně to vypadá pro další dva screeny, kde ukládáme stáří filmu a žánr.
Výběr filmu z webové stránky
Zde právě využíváme API. Co to vlastně je? V překladu to znamená programovací rozhraní a je to způsob, jak programy komunikují mezi sebou. V našem případě to znamená, že aplikace pošle vybrané hodnoty uživatelem a webová stránka nám vrátí json s filmy, které odpovídají daným hodnotám. Počet vrácených filmů byl omezen na 16 a z těch se následně vybírali 3. Využívala jsem stránky The Movie DB, které mají veřejně dostupnou API a hezky zpracovanou dokumentaci.Co mě čeká dál?
KritériaDát kritériím lepší strukturu. Chtěla bych zahrnout více jazyků. Při spuštění aplikace by se vždy vybrala náhodná dvojice jazyku. Přidat další jako je délka filmu atd.
Statistika
Vytvořit uživatolovi účet, kde by si přidával filmy, co už viděl. Následně by si mohl generovat jednoduché statistiky.
Pohrát si s uživatelským rozhraním
Zelegantnit kód
Už teď vidím, že některé věci jsou tam škaredě našroubované. Jak řekl jeden ajťák:"Když vidím svůj kód po půl roce, automaticky ho přepisuji." :)
Převést kód do apk
Jaký je přínos?
Moje aplikace je přínosem ve smyslu hraní a objevování. Největší přínos měla pro mě samotnou. Rozšířila jsem si znalosti Pythonu, naučila se pracovat s API a frameworkem Kivy, používat Google a StackOverFlow. Dále jsem zjistila, že ne vždy, když něco nefunguje, tak to je chyba v kódu, ale ze začátku často docházelo k tomu, že jsem měla něco špatně nainstalované.Závěr a doporučení pro příští účastnice DA
Pořádné promyšlení projektuVěnujte čas pořádnému promyšlení tomu, co vlastně tvoříte, jak to chcete tvořit, jaká je logická návaznost. Programování není ve výsledku o tom umět jazyk, ale je to spíše koncept přemýšlení.
Nastudujte dokumentaci, podívejte se na tutoriály
Nebojte se "ztrácet" čas čtěním dokumentace, koukáním na tutoriály, snahou chápání podstaty. Bohužel já osobně jsem se dostala do stavu "Nemám čas, musím rychle začít něco kódit". Ano, byla jsem schopna najít radu na internetu, nějakým způsobem ohnout až znásilnit kód pro moje řešení, ale bohužel to nevedlo k pochopení podstaty. To mě dovádí k poslední a nejdůležitější věci a to:
Organizace času
V tomto případě se to doopravdy nevyplácí podcenit. Může se stát, že věc, co zdá jednoduchá je doopravdy složitá. Můžete hodiny googlit a stejně nenajdete řešení. Naštěstí jsem měla k ruce 24/7 schopného programátora. Bez jeho obrovské podpory a pomoci, bych asi dnes ani neměla, co publikovat.
Ptejte se
Žádný učený z nebe nespadl a nebojte se zeptat ostatních lidí. V jednom případě jsem se dokonce zeptala sama na StackOverFlow. Během pár hodin mi došla odpověď a já se mohla posunout dál.
Úplným závěrem
Ano, stane se Vám, že budete zažívat stavy obrovské frustrace, zmaru, neschopnosti. Ale když uvidíte svůj první fungující kód, tak nastane obrovská radost. Také zjistíte, že při programování čas neuvěřitelně rychle utíká :).
Projekt odevzdávám doslova a dopísmene za pět dvanáct. Vyčerpaná, ale s úsměvem na tváři. Dobrou noc :)
Komentáře
Okomentovat