sibyx / mdns Goto Github PK
View Code? Open in Web Editor NEWDigitálna entomologická zbierka
Home Page: https://mdns.jakubdubec.me/
License: Apache License 2.0
Digitálna entomologická zbierka
Home Page: https://mdns.jakubdubec.me/
License: Apache License 2.0
Implementácia modelov podľa vytvoreného EER diagramu v Database Design.
Výsledkom je initial migrácia v core
časti Django projektu.
Prístupové údaje na verejné stagging prostredie sú nasledovné:
[email protected]
demo
Nasadený je vždy develop
branch a databáza už obsahuje vygenerované dáta.
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.
python manage.py import_organisms --file data.csv --source species_plus
Podúlohy
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.
Vytvorenie základných šablón, od ktorých budú dediť ostatné stránky.
<title>
hodnôtZamyslieť 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
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:
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).
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:
/boxes/add
/boxes/edit/<:uuid>
/boxes/remove/<:uuid>
/boxes/detail/<:uuid>
/boxes/qr/<:uuid>
/boxes
Od požívateľa si systém pomocou formulára vypýta naslednujúce informácie:
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.
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.
Proces zmazania krabice cez konfirmačné modálne okno vyvolá soft-delete krabice a celého jej obsahu (kaskádovanie).
Stránka kde zobrazujeme všetky dostupné informácie o krabici:
specimens
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
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.
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.
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.
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
.
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ícDEMONSTRATION.SPECIMENS.MIN
: Minimálny počet exemplárov v jednej krabiciDEMONSTRATION.SPECIMENS.MAX
: Maximálny počet exemplárov v jednej krabiciDEMONSTRATION.PHOTOS
: Počet fotiek pre exemplárPríkaz naplní databázu nasledovne:
DEMONSTRATION.BOXES
krabícDEMONSTRATION.SPECIMENS.MIN
až DEMONSTRATION.SPECIMENS.MAX
exemplárovDEMONSTRATION.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}.
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
mdns.jakubdubec.me
doménySprostredkovanie jednoduchej správy exemplárov v zbierke.
Implementáciu rozdelíme na nasledujúce podúlohy:
/specimen/add
/specimen/edit/<:uuid>
/specimen/edit/<:uuid>
/specimen/detail/<:uuid>
/specimen/qr/<:uuid>
/specimen
Od používateľa vypýtam informácie, ktoré následne uložím
Po odoslaní formulára sa entita uloží a používateľ je presmerovaný na detail exemplára
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é.
Soft-delete exempláru a priradených fotiek. Pred zmazaním vyskakuje potvrdzovacie modálne okno.
Verejne dostupná stránka, ktorá zobrazuje všetky dostupné informácie o exemplári:
Verejnný end-point, ktorý vracia QR kód odkazujúci na verejný profil exempláru.
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
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.
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.
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).
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:
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.
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
Ďakujem za Váš názor.
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.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.