MyAnimeList tracker


Jan Najman

MyAnimeList tracker

Osnova 🧾

  • Cíl práce
  • Použité technologie
  • Vývojové prostředí
  • Implementace
  • Problémy
Jan Najman
MyAnimeList tracker

Cíl práce 🎯

Cílem mé práce je vytvořit aplikaci na android, která uživateli umožní prohlížet a ukládat dostupné anime.

Jan Najman
MyAnimeList tracker

Použité technologie


Jan Najman
MyAnimeList tracker

Vývojové prostředí


Jan Najman
MyAnimeList tracker

Návh databáze

Konečný návrh má:

3 tabulky
Jan Najman
MyAnimeList tracker

Tabulky

  • list_entry
    • obsahuje základní údaje o anime (název, status, ...)
  • detail
    • obsahuje údaje navíc, jako je popis, počet epizod atd.
  • key_val
    • key-value úložiště
Jan Najman
MyAnimeList tracker

SQL Query Binding
a compile time kontrola

  • použit balík sqlx
    • makra query_as a query
sqlx::query_as!(
    Self,
    r#"select mal_id, name, image_url, image_path, status as "status: Status"
    from list_entries where mal_id = ?"#,
    mal_id
)
.fetch_one(pool)
.await
Jan Najman
MyAnimeList tracker

Switch component

Jan Najman
MyAnimeList tracker
Jan Najman
MyAnimeList tracker

Problémy

  • Clang padá s memory access violation
    • nutno "počochrat" kód, aby kopilace neselhala
    • při maximální oprimalizaci stejně spadne... 😡
Jan Najman
MyAnimeList tracker

Problémy pt. 2

  • Skoro žádné nástavby na Slint
    • hodně widgetů si musíte vytvořit sami
      • mnohem jednodušší než by kdo čekal
  • Některé Slint widgety se chovají na jiných platformách jinak
    • nejen z nástavby, ale i standardní widgety!
Jan Najman
MyAnimeList tracker

Problémy pt. 3

  • Prakticky žádná podpora android API/SDK pro systémové (low level) jazyky (C, C++, Rust, atd.)
    • pokud potřebujete něco "spešl", tak jedině přes JNI
    • NDK má jen velmi omezené funkce
Jan Najman
MyAnimeList tracker

Problémy pt. 4

  • API schema není pořádně popsané
    • kdo má vědět co může být null?
    • schema říká, že je to je string, ale vrátí null...
  • API rate-limiting
    • 1 dotaz za sekundu💀
  • Stahování/Caching/Mazání obrázků
    • vlastní implementace
Jan Najman

Děkuji za pozornost