Coder Social home page Coder Social logo

mdns's People

Contributors

dependabot[bot] avatar sibyx avatar

Watchers

 avatar  avatar  avatar  avatar

Forkers

infza

mdns's Issues

Implementácia ORM

Implementácia modelov podľa vytvoreného EER diagramu v Database Design.

Výsledkom je initial migrácia v core časti Django projektu.

  • ORM Mapovanie
  • schemacrawler diagram v dokumentácii
  • Soft remove vyriešený na úrovni Manager

Import entomoligockých dát

Import entomologických dát zo Species+ formov django-admin príkazu.

Príkaz načíta vstupný CSV súbor, ktorý riadok po riadku začne importovať do systému. Ak narazí na neexistujúcu entitu vytvorí ju, ak na existujúcu tak riadok preskakuje. Účelom je naplniť tabuľku organisms.

Vytvoriť prostredie pre viacero zdrojov dát.

Podúlohy

  • Základné parsovanie
  • Napísanie ovládača pre Species+
  • Vyriešiť problém s nekonzistenciou vstupu v Species+

Wireframes

Vytvoriť wireframes pomocou nástroja Adobe XD alebo wireframe.cc pre všetky základné scénáre, ktoré budú implementované v rámci predmetu DBS.

Adobe XD je viac cool, vyžaduje ale viac času na ovládnutie wireframes budú ale bližšie k realtie kvôli širokej škále komponentov, ktoré sú typu plug & play.

Wireframe.cc je generuje na jednu stranu cool výstup, ktorý je úplne škaredý (pôvodne som čakal, že bude viac fancy) a nepáči sa mi ukladanie cez URL, je to chaos a už som takto stratil kopec roboty.

  • Prihlásenie
  • Pridanie krabice
  • Pridanie exempláru
  • Profil exempláru
  • Profil krabice
  • Dashboard
  • Zoznam exemplárov

Základná šablóna

Vytvorenie základných šablón, od ktorých budú dediť ostatné stránky.

  • Vkladanie <title> hodnôt
  • Navigácia
  • Responzivita

Zamyslieť sa nad tým ako budeme riešiť modálne okná. Vytvoriť vždy from-scratch okno, alebo cez AJAX prepisovať stále rovnaké okno z base šablóny

Dashboard

Prehľad kde používateľ má možnosť vidieť informácie o svojej entomologickej zbierke (veľkosť, rozloženie poďla taxonomických atribútov, rast zbierky v čase).

Dashboard bude obsahovať nasledujúce prvky:

  • Počet krabíc
  • Počet exemplárov
  • Počet používateľov
  • Počet fotografií
  • Počet rôznych exemplárov
  • Koláčový graf reprezentujúci taxonomické rozloženie zbierky (ideálne podľa rodiny, prípade skúsiť vytvoriť vnorený koláčový graf, ktorý prejde celou taxonomickou hierarchiou alebo spraviť dynamický filter)
  • Čiarový rastu zbierky v čase (poďla created_at) (just for fun)

Grafy sú implementované pomocou knižnice Chart.js a dáta čítajú dynamicky cez AJAX.

Všetko okrem počtu používateľov sú verejne prístupné dáta (vyriešiť anonymný prístup do systému, login už nie je default).

Správa krabíc

Systém musí sprostredkovávať čo najjednoduchšiu prácu s krabicami.

Implementácia správy krabíc je rozdelná na nasledujúce podúlohy:

  • Pridanie krabice /boxes/add
  • Úprava detailov existujúcej krabice /boxes/edit/<:uuid>
  • Zmazanie krabice /boxes/remove/<:uuid>
  • Profil krabice /boxes/detail/<:uuid>
  • Generovanie QR kódov /boxes/qr/<:uuid>
  • Prezeranie krabíc /boxes

Pridanie krabice

Od požívateľa si systém pomocou formulára vypýta naslednujúce informácie:

  • title
  • description (rich text)

Po odoslaní formuláru sa vytvorí inštancia entity box v systéme a používateľ bude presmerovaný na profil krabice.

Zamyslieť sa nad možnosťou implementovať manuálne pridanie krabice formou jednoduchého modálneho okna.

Úprava detailov existujúcej krabice

Podobný formulár ako v bode Pridanie krabice, iba s predvyplnenými položkami.

Po odoslaní formulára sa upraví už existujúci záznam v systéme a používateľ je presmerovaný na jeho profil.

Zmazanie krabice

Proces zmazania krabice cez konfirmačné modálne okno vyvolá soft-delete krabice a celého jej obsahu (kaskádovanie).

Profil krabice

Stránka kde zobrazujeme všetky dostupné informácie o krabici:

  • atribúty (title, description)
  • obsah: zoznam specimens
  • prehľad o taxonomickom obsahu krabice
  • QR kód, ktorý smeruje na profil krabice

Generovanie QR kódov

Každá krabica je identifikovaná unikátnym QR kódom, ktorého obsahom je verejný odkaz na profil krabice.

Príklad obsahu QR kódu: https://mdns.sk/boxes/view/4ff093ec-b5b4-4be9-b51e-effd92479215

Prezeranie krabíc

Východzí bod pri správe krabíc. Jedná sa o dynamickú tabuľu, nad ktorou je umožnené vyhľadávanie podľa názvu (title) krabice. Tabuľka zároveň ukazuje agregačné dáta ako napríklad počet obsahujúcich záznamov.

Generovanie náhľadov pre obrázky

Momentálne nerobíme žiadnu úpravu fotografií a držíme rovno originál, ktorý zobrazujeme priamo v náhľadoch. Toto je veľmi mrzuté riešenie hneď z niekoľkých dôvodov (responzivita, dĺžka načítavania, zaťažovanie prehliadača - akutálne resize cez CSS na FE).

Potrebujeme implementovať mechanizmus generovania zmenšených náhľadov v nižšej kvalite, ktoré budeme zobrazovať pri listovaní, originál zobrazujeme vždy na explicitné zažadanie (kliknutie na detail obrázku atď).

Existuje niekoľko existujúcich modulov do Django frameworku - nepáčia sa mi, radšej implementovať vlastné riešenie. Je to relatívne jednoduchá úloha, Pillow robí väčšinu za nás a je priamo integrovaný v Django.

Breadcumbs

Implementácia breadcrumbs v používateľskom rozhraní.

Príklady:

  • Boxies -> <box name>
  • Boxies -> Edit box

Boostrap už má vytvorenú ňuňavú komponentu Boostrap breadcrumbs.

Breadcrumbs by sa mali nachádzať, na každej stránke aplikácie.

Prihlásenie a autentifikácia

Implementácia základných autorizačných a autentifikačných mechanizmov. Kvôli lepšej flexibilite preťažíme základný Django user model a nahradíme ho vlastným.

Definujeme základné role pomocou knižnice django-role-permissions.

Vytvoríme prihlasovaciu stránku a prázdny zabezpečený view.

  • Preťaženie user modelu
  • Vlastný UserManager, ktorý implemnetuje createsuperuser management command
  • Prihlasovacia stránka
  • Vytvor prázdnu zabezpečenú stránku (dashboard)

Demonštračné dáta

Vytvoriť možnosť naplniť databázu demonštračnými dátami. Na vytvorenie dát ideálne požiť knižnicu faker.

Napĺňanie dát implementovať ako Django management command s názvom fake. Príklad použitia: python manage.py fake.

V konfigurácii je potrebné vytvoriť konfiguračný objekt, ktorý bude špecifikovať rozloženie a množnstvo vygenerovaných dát. Mal by vyzerať nasledovne:

DEMONSTRATION = {
    'BOXES': 1000,
    'SPECIMENS': {
        'MIN': 5,
        'MAX': 20
    },
    'PHOTOS': 5
}

Popis konfiguračných hodnôt:

  • DEMONSTRATION.BOXES: Počet vygenerovaných krabíc
  • DEMONSTRATION.SPECIMENS.MIN: Minimálny počet exemplárov v jednej krabici
  • DEMONSTRATION.SPECIMENS.MAX: Maximálny počet exemplárov v jednej krabici
  • DEMONSTRATION.PHOTOS: Počet fotiek pre exemplár

Príkaz naplní databázu nasledovne:

  • vytvorý DEMONSTRATION.BOXES krabíc
  • pre každú krabicu vytvorí DEMONSTRATION.SPECIMENS.MINDEMONSTRATION.SPECIMENS.MAX exemplárov
  • pre každý exemplár vytvorí DEMONSTRATION.PHOTOS fotografií

Súčasťou úlohy je aj implementovať fabric príkaz na vzdialené púštanie.

Na generovanie obrázkov môžeme použiť Robohash alebo ak sa mi nebude chcieť tak jednoducho {placekitten}.

TODO

  • Krabice
  • Exempláre
  • Fotografie
  • Fabric

Nasadenie aplikácie

Vyriešiť nasadenie na DigitalOcean a vytvorenie online prístupu. Deploy scripts ideálne napísať cez Fabric.

Aplikovať tradičný Python produkčný setup:

Najjednoduchšia možnosť je vytvorenie Ubuntu 18.04 LTS dropletu a separátnej PostgreSQL inštancie (DigitaOcean začal podporovať dedikované databázové inštancie a chcem to vyskúšať, nechcem tiež zbytočne zaťažovať aplikačný droplet, pretože budem rád ak ten chudák bude vôbec bežať).

TODO

  • Vytvorenie dropletu
  • Presmerovanie mdns.jakubdubec.me domény
  • Napísanie deploy scriptov
  • Unit deamon script pre Gunicorn
  • Nastavenie SSH kľúčov (kvôli GitHub)
  • Nastavenie sytémového Python interpréta
  • Nginx
  • Lets encrypt

Správa exemplárov

Sprostredkovanie jednoduchej správy exemplárov v zbierke.

Implementáciu rozdelíme na nasledujúce podúlohy:

  • Pridanie exempláru /specimen/add
  • Úprava existujúceho exempláru /specimen/edit/<:uuid>
  • Odstránenie exempláru /specimen/edit/<:uuid>
  • Profil exempláru /specimen/detail/<:uuid>
  • Generovanie QR kódu pre exemplár /specimen/qr/<:uuid>
  • Administračné prezeranie exemplárov /specimen

Pridanie exempláru

Od používateľa vypýtam informácie, ktoré následne uložím

  • box (možnosť predvyplnenia cez GET parameter v prípade, že odkazujem z profilu krabice)
  • organism (autocomplete cez select2 alebo podobnú alternatívu, v prípade, že organizmus sa nenachádza v DB, ponúknuť modálne okno s vytvorením)
  • nickname (voliteľná hodnota, ak je vyplnená, ukazujeme exemplár pod týmto menom)
  • happened_at (dátum, kedy prišiel exemplár do zbierky alebo kedy bol preparovaný)
  • form
  • gender
  • notes (richtext)
  • dna

Po odoslaní formulára sa entita uloží a používateľ je presmerovaný na detail exemplára

Úprava existujúceho exempláru

Používateľ je schopný meniť všetky atribúty exempláru. Používame rovnaký exemplár ako pri pridávaní exempláru, hodnoty sú už predvyplnené.

Odstránenie exempláru

Soft-delete exempláru a priradených fotiek. Pred zmazaním vyskakuje potvrdzovacie modálne okno.

Profil exempláru

Verejne dostupná stránka, ktorá zobrazuje všetky dostupné informácie o exemplári:

  • všetky attributes
  • QR kód
  • fotografie ako dlaždice (fotografie nie sú implementované v rámci tohoto issue)
  • odkaz na krabicu
  • informácie o organizme

Generovanie QR kódu pre exemplár

Verejnný end-point, ktorý vracia QR kód odkazujúci na verejný profil exempláru.

Administračné prezeranie exemplárov

Tabuľka ako v administrácii krabíc, ktorá umožnuje rýchle filtrovanie a správu exemplárov. Po kliknutí na riadok tabuľky sa presmeruje na profil exempláru

Dátový model

Návrh dátového modelu, ktorý bude použitý v systéme. Výstup je fyzický diagram vytvorený pomocou nástroja dbdiagram.io.

V návrhu je nevyhnutné zohľadniť taxonomické systémy a názvoslovie používané klientom.

Odkaz na diagram: https://dbdiagram.io/d/5c71384df7c5bb70c72f1a11.

Interné Django tabuľky nemusia byť vizualizované (okrem tabuľky ktorá reprezentuje entity používateľa). Dôležíté je zamerať sa hlavne na návrh dátových entít opísaných v špecifikácii.

Taxonomická databáza ako nerelačná databáza

Počas implementácie importu taxonomických databáz (issue #9) sme narazili na problém až s príliš dynamickou štruktúrou dát (napríklad niektoré taxonomické kingdoms nemajú celú hierarchiu s čím databázový návrh nepočíta).

Dospeli sme k názoru, že bude rozumnejšie vytiahnuť taxonomickú databázu určenú pre autocomplete funkcionalitu mimo relačného modelu aplikácie a implementovať to ako separátnu Django aplikáciu, ktorá bude držať dáta v nerelačnej forme pomocou MongoDB databázy.

Treba sa ale zamyslieť nad tým, aká bude performance pre účely autocomplete, pretože v praxi bude dochádzať full-text vyhľadávanie nad celým datasetom.

Implementácia

Vytvorenie aplikácie s názvom taxonomic_data, ktorá sa bude pripájať na MongoDB databázu a implementuje servis, ktorý nad ňou bude operovať.

Na import bude ďalej slúžiť aplikácia importer (logika sa zatiaľ neprenáša do novo-vytvorenej aplikácie).

Vlastná implementácia dynamických tabuliek

Momentálne na dynamické tabuľky v projekte používame bootstrap-table. Komponenta má síce nádnerhnú syntax na spracovávanie AJAX požiadaviek ale mám obavy o možnosti prispôsobovania (by default je komponenta naozaj škaredá). Rovnako nemá podporu pre natívne vykreslovanie tlačidiel v bunkách tabuľky (mrzuté).

Do úvahy prichádzajú nasledujúce možnosti:

  • vyskúšať preťažiť jednotlivé UI prvky a doimplementovať generovanie tlačidiel
  • spraviť úplne vlastnú implementáciu generovania tabuliek, ktorá nebude spracovávať iba JSON ale rovno sa pošle vygenerovaná šablóna (so oldschool)

Načítavanie URL patternov

Z nejakého magického dôvod PyCharm nerobí autocomplete url patternov v šablónach. Tento problém sa vyskytuje iba pre mnou zadefinované aplikácie. Samotné URL endpointy fungujú.

Problém bude pravdepodbne v spôsobe spájania polí urlpatterns vo výslednej konfigurácii.

Bakalárska práca

Rád by som sa chcel venovať tomuto projektu ako bakalárskej práci. Zatiaľ je povedzme v MVP stave ale mám kopec nápadov, ktoré by som chcel s týmto projektom skúsiť a dotlačiť do do prevádzky k skutočným zberateľom hmyzu (zatiaľ mám minimálne jedného a poznám zopár luďí v Múzeu Andreja Kmeťa v Martine - zatiaľ som sa s ním na túto tému nebavil).

Chcel by som sa spýtať, či by sa to dalo spracovať ako bakalárska práca a či by ste to chceli so mnou vôbec riešiť.

Je tam niekoľko vecí, ktorých by sa dalo chytiť ako napríklad

  • vyriešiť správna reprezentácia entomologických dát (issue #12, aj keď v poslednej dobe som rozmýšľal a skúmal reprezentáciu ITIS databázy v relčnej forme)
  • mohlo by byť zaujímavé pohrať sa so semantickým webom a microdata
  • možno čistá utópia, ale dala by sa spraviť platforma, kde by bežala služba spolu s ElasticSearch, ktorá by agregovala dáta so zbierok a vyhľadávala by nad viacerími MDNS inštanciami rozhodených do internetu (niečo ako Google nad viacerími inštanciami projektu - Elastic tam aktuálne nie je len kvôli HW požiadavkám)
  • samozrejme je potrebné dokončiť aktuálny katalóg, momentálne je implementovaná skôr jednoduchšia administračná časť

Ďakujem za Váš názor.

Migrácia zo Semantic UI na Bootstrap

Z praktických dôvodov, ešte na začiatku projektu by sme premigrovali na Bootstrap FE framework. Spočiatku sa Semantic UI zdala ako lepšia voľba ale tooling je ešte nedokonalý (napríklad je problém spraviť rozumný setup pre Webpack) a narazili sme na značné problémy s customizáciou.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.