Skip to content

Commit f4bc867

Browse files
authored
Thesis STUDIS prep (#411)
* Proofreading * PDF format * PDFs signed
1 parent b8d0860 commit f4bc867

File tree

13 files changed

+50
-64
lines changed

13 files changed

+50
-64
lines changed

docs/thesis/IzjavaOAvtorstvu.pdf

100 KB
Binary file not shown.
14.6 KB
Binary file not shown.

docs/thesis/daf-thesis.pdf

158 KB
Binary file not shown.

docs/thesis/images/daf-high-level-log.svg

Lines changed: 1 addition & 1 deletion
Loading

docs/thesis/sl/abstract.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414

1515
Nezamenljivi žetoni (angl. *Non fungible tokens*) so edinstvena digitalna sredstva, ki živijo na verigi blokov brez možnosti replikacije.
16-
Obstaj več pristopov za njihovo oglaševanje, kjer je eden izmed teh oglaševanje po socialnem omrežju Discord s pristopom agresivnega oglaševanja.
16+
Obstaja več pristopov za njihovo oglaševanje, kjer je eden izmed teh oglaševanje po socialnem omrežju Discord s pristopom agresivnega oglaševanja.
1717
Diplomsko delo se fokusira na proces oglaševanja in se navezuje na projekt Ogrodje za oglaševanje po Discordu (angl. Discord Advertisement Framework),
1818
ki je implementirano v programskem jeziku Python.
1919

docs/thesis/sl/appendix.rst

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -58,32 +58,6 @@ Pošiljanje s fiksno periodo dveh ur in avtomatično odkrivanje pridruženih ceh
5858
:caption: Avtomatsko odkrivanje cehov in kanalov - |SCHEMA_EXAMPLE|
5959

6060

61-
62-
Sledenje cehovskih (pridružnih) povezav
63-
----------------------------------------------
64-
Sledenje trem cehovskim povezavam.
65-
66-
.. literalinclude:: ./DEP/Examples/example-invites-tracking.py
67-
:caption: Sledenje cehovskih povezav - |PY_EXAMPLE|
68-
69-
.. literalinclude:: ./DEP/Examples/example-invites-tracking.json
70-
:caption: Sledenje cehovskih povezav - |SCHEMA_EXAMPLE|
71-
72-
73-
74-
Pridružitev novim cehom
75-
----------------------------------------
76-
Pridruževanje največ 15 novim cehom, na podlagi izraza "NFT", ker imajo cehi med 100 in 1000 uporabnikov.
77-
78-
79-
.. literalinclude:: ./DEP/Examples/example-new-guild-join.py
80-
:caption: Pridružitev novim cehom - |PY_EXAMPLE|
81-
82-
.. literalinclude:: ./DEP/Examples/example-new-guild-join.json
83-
:caption: Pridružitev novim cehom - |SCHEMA_EXAMPLE|
84-
85-
86-
8761
Oddaljen dostop
8862
----------------------------------------
8963
HTTP strežnik, in GUI shema za povezovanje na ta strežnik.

docs/thesis/sl/daf/design_development/core.rst

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ da se to datoteko generira iz grafičnega vmesnika (:ref:`Zasnova in razvoj graf
2424

2525
AsyncIO
2626
===============
27-
Jedro ogrodja je zasnovano za konkurenčno (angl. *concurrent*) delovanje, kar pomeni da se lahko na videz več opravil izvaja na enkrat, v
28-
resnici pa se zelo hitro preklaplja med njimi. To je omogočeno s knjižnico :mod:`asyncio`.
29-
AsyncIO omogoča ustvarjanje ``async`` funkcij, ki vrnejo korutine. Te korutine lahko potem zaženemo v opravilih,
27+
Jedro ogrodja je zasnovano za sočasno (angl. *concurrent*) večopravilnost, kar pomeni da se lahko na videz več opravil izvaja na enkrat, v
28+
resnici pa se med njimi zelo hitro preklaplja. To je omogočeno s knjižnico :mod:`asyncio`.
29+
AsyncIO omogoča ustvarjanje ``async`` funkcij, ki vrnejo korutine (angl. coroutine). Te korutine lahko potem zaženemo v opravilih,
3030
med katerimi bo program preklopil vsakič, ko v trenutnem opravilu z ``await`` besedo na primer čakamo:
3131

3232
- na konec neke asinhrone komunikacije (angl. *Async I/O*)
@@ -38,6 +38,7 @@ med katerimi bo program preklopil vsakič, ko v trenutnem opravilu z ``await`` b
3838
dela kode oz. skupne surovine. https://docs.python.org/3/library/asyncio-sync.html.
3939
4040
41+
4142
.. raw:: latex
4243

4344
\newpage
@@ -83,7 +84,7 @@ Ogrodje samo po sebi deluje tako, da ima vse objekte (račune, cehe, sporočila,
8384
ob taki definiciji neproblematično, problem pa je nastopil, ko je bilo dodano dinamično dodajanje in brisanje objektov, kar
8485
dejansko uporabnikom omogoča, da ogrodje dinamično uporabljajo in v tem primeru je bilo potrebno dodati neke vrste permanentno shrambo.
8586
Razmišljalo se je o več alternativah, ena izmed njih je bila da bi se vse objekte shranjevalo v neko bazo podatkov, ki bi omogočala
86-
mapiranje podatkov v bazi, kar bi z vidika robustnosti bila zelo dobra izbira, a to bi zahtevalo veliko prenovo
87+
preslikavo bazičnih podatkov v objekte, kar bi z vidika robustnosti bila zelo dobra izbira, a to bi zahtevalo veliko prenovo
8788
vseh sektorjev, zato se je na koncu izbrala preprosta opcija shranjevanja objektov, ki preko :mod:`pickle` modula shrani vse račune
8889
ob vsakem normalnem izklopu ogrodja, ali pa v vsakem primeru na dve minuti periodično. V prihodnosti so
8990
še vedno načrti za izboljšanje tega mehanizma in ne izključuje se uporaba prej omenjene podatkovne baze.
@@ -162,7 +163,7 @@ v primeru beleženja sporočil (vsaj v primeru JSON datotek), kjer je vse razdel
162163

163164
Sporočilni sektor
164165
-----------------
165-
Sporočilni sektor je zadolžen za pošiljanje dejanskih sporočil v posamezne kanale na Discordu.
166+
Sporočilni sektor je zadolžen za pošiljanje dejanskih sporočil v posamezne kanale.
166167
V tem sektorju so na voljo trije glavni razredi za ustvarjanje različnih vrst sporočil:
167168

168169
1. |TextMESSAGE| - pošiljanje tekstovnih sporočil v cehovske kanale
@@ -185,9 +186,9 @@ To je še posebno pomembno v primeru, da imamo definiranih veliko sporočil v en
185186
poslalo točno ob določenem času. Ker se čas prišteva od prejšnjega predvidenega časa pošiljanja, to pomeni, da bo v primeru
186187
zamude sporočila razmak med tem in naslednjim sporočilom manjši točno za to časovno napako (če privzamemo da ne bo ponovne zakasnitve).
187188

188-
Pred tem algoritmom, je za določanje časa pošiljanja bil v rabi preprost časovnik, ki se je ponastavil po vsakem pošiljanju, a se je zaradi Discordove
189-
omejitve API zahtevkov in tudi drugih Discord API zakasnitev, čas pošiljanja vedno pomikal malo naprej, kar je pomenilo, da če je uporabnik
190-
ogrodje konfiguriral da se neko sporočilo pošlje vsak dan in definiral čas začetka naslednje jutro ob 10ih (torej pošiljanje vsak dan ob tej uri),
189+
Pred tem algoritmom je bil za določanje časa pošiljanja v rabi preprost časovnik, ki se je ponastavil po vsakem pošiljanju, a se je zaradi Discordove
190+
omejitve API zahtevkov in tudi drugih Discord API zakasnitev čas pošiljanja vedno pomikal malo naprej, kar je pomenilo, da če je uporabnik
191+
ogrodje konfiguriral, da se neko sporočilo pošlje vsak dan in definiral čas začetka naslednje jutro ob 10ih (torej pošiljanje vsak dan ob tej uri),
191192
potem je po (sicer veliko) pošiljanjih namesto ob 10ih uporabnik opazil, da se sporočilo pošlje ob 10.01, 10.02, itd.
192193
Primer računanja časa in odprave časovne napake je prikazan na spodnji sliki.
193194

@@ -262,7 +263,7 @@ datoteko.
262263

263264
CSV beleženje
264265
~~~~~~~~~~~~~~~~~~
265-
CSV beleženje deluje na enak način kot JSON beleženje. Edina razlika je v formatu, kjer je format tu CSV.
266+
CSV beleženje deluje na enak način kot JSON beleženje. Edina razlika je v formatu, kjer je ta v tem primeru CSV.
266267
Lokacija datotek je enaka kot pri JSON beleženje. Za shranjevanje je uporabljen vgrajen Python modul :mod:`csv`.
267268

268269
Za sam pregled poslanih sporočil to ni najbolj primeren format, saj se vse shrani v eni datoteki, kjer za razliko od JSON
@@ -276,18 +277,19 @@ formata, tu ni več-slojnih strukture.
276277

277278
SQL beleženje
278279
~~~~~~~~~~~~~~~~~~
279-
SQL beleženje pa deluje precej drugače, kot delujeta JSON beleženje in CSV beleženje, saj se podatki shranjujejo
280+
SQL beleženje deluje precej drugače, kot delujeta JSON beleženje in CSV beleženje, saj se podatki shranjujejo
280281
v podatkovno bazo, ki je v primeru uporabe SQLite dialekta lahko tudi datoteka.
281282

282283
Beleženje je omogočeno v štirih SQL dialektih:
283284

284285
1. SQLite
285-
2. Microsoft SQL Server
286+
2. Microsoft SQL Server (T-SQL)
286287
3. PostgreSQL
287288
4. MySQL / MariaDB
288289

289290
Za čim bolj univerzalno implementacijo na vseh dialektih, je bila pri razvoju uporabljena knjižnica :mod:`SQLAlchemy`.
290-
Celoten sistem SQL beleženja je implementiran s pomočjo ORM, kar med drugim omogoča tudi
291+
292+
Celoten sistem SQL beleženja je implementiran s pomočjo ORM, kar med drugim omogoča,
291293
da SQL tabele predstavimo z Python razredi, posamezne vnose v bazo podatkov oz. vrstice pa predstavimo z instancami
292294
teh razredov. Z ORM lahko skoraj v celoti skrijemo SQL in delamo neposredno z Python objekti, ki so lahko tudi gnezdene
293295
strukture, npr. vnosa dveh ločenih tabel lahko predstavimo z dvema ločenima instancama, kjer je ena instanca
@@ -344,5 +346,5 @@ PyCord je odprtokodno ogrodje, ki je nastalo iz kode starejšega `discord.py <ht
344346
Ogrodje PyCord skoraj popolnoma zakrije Discord API z raznimi objekti, ki jih ogrodje interno uporablja.
345347

346348
Če bi si ogledali izvorno kodo (angl. *source code*) ogrodja, bi opazili da je poleg ``daf`` paketa zraven tudi paket z imenom ``_discord``.
347-
To ni nič drugega kot PyCord ogrodje, le da je modificirano za možnost rabe na osebnih uporabniških računih.
349+
To ni nič drugega kot PyCord ogrodje, le da je modificirano za možnost rabe na uporabniških računih (poleg avtomatiziranih robotskih računov).
348350

docs/thesis/sl/daf/design_development/docs.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ na spletni strani [#daf_web_page]_.
1616
.. [#daf_web_page] Na voljo na: https://daf.davidhozic.com/en/v2.9.x/.
1717
1818
Na voljo je v spletni obliki (HTML), kot tudi lokalni obliki (PDF), ki se jo lahko prenese tako, da se na spletni strani dokumentacije
19-
kurzor premakne levo spodaj strani nad verzijo dokumentacije in zatem klikne *PDF*.
19+
kurzor premakne na levi spodnji del strani nad verzijo dokumentacije in zatem klikne *PDF*.
2020

2121

2222
.. figure:: ./DEP/doc-pdf-download.png
@@ -27,7 +27,7 @@ kurzor premakne levo spodaj strani nad verzijo dokumentacije in zatem klikne *PD
2727

2828
Sphinx
2929
----------------
30-
Sistem, uporabljen za grajenje dokumentacije projekta, se imenuje :ref:`Sphinx`.
30+
Sistem, uporabljen za grajenje dokumentacije projekta, se imenuje Sphinx.
3131
Sphinx je popularno orodje med Python razvijalci za generiranje dokumentacije v več formatih.
3232
Razvijalcem omogoča ustvarjanje profesionalne dokumentacije za lastne projekte, kar je nuja pri javnih projektih.
3333

docs/thesis/sl/daf/design_development/gui.rst

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ Tkinter knjižnica je v osnovi vmesnik na Tcl/Tk orodja za izdelavo grafičnih v
2323
ki še dodatno razširijo delovanje knjižnice.
2424
Omogoča definicijo različnih pripomočkov (angl. *widgets*), ki se jih da dodatno razširiti in shraniti pod nove
2525
pripomočke, katere lahko večkrat uporabimo. Ti pripomočki so na primer :class:`~tkinter.ttk.Combobox`, ki je neke vrste
26-
(angl.) "drop-down" meni, :class:`~tkinter.ttk.Spinbox` za vnašanje številskih vrednosti, gumbi :class:`~tkinter.ttk.Button`, itd.
26+
(angl.) "drop-down" meni, :class:`~tkinter.ttk.Spinbox` za vnašanje številskih vrednosti, :class:`~tkinter.ttk.Button` za gumbe, ipd.
2727
Posamezne pripomočke se da tudi znatno konfigurirati, kjer lahko spreminjamo stile, velikost, pisavo, ipd :ref:`tkinter_py_docs`.
2828

2929
Pred izbiro Tkinter knjižnice je bila ena izmed možnosti tudi knjižnica PySide (QT), a na koncu se je vseeno obnesla Tkinter
@@ -40,8 +40,8 @@ Grafični vmesnik ogrodja je razdeljen na več zavihkov, kjer je vsak namenjen l
4040

4141
*Optional modules* zavihek
4242
-----------------------------
43-
*Optional modules* zavihek omogoča namestitev dodatnih modulov, ki v osnovnem paketu ogrodja niso prisotni (zaradi hitrejšega zagona).
44-
Sestavljen je iz statusnih panelov, ki če so rdeči (modul ni nameščen) vsebuje še gumb za namestitev.
43+
*Optional modules* zavihek omogoča namestitev dodatnih modulov, ki jih osnovni paket ogrodja pogreša (zaradi hitrejšega zagona).
44+
Sestavljen je iz statusnih panelov, ki v primeru da so rdeči (modul ni nameščen), vsebujejo še gumb za namestitev.
4545
Gumb bo namestil potrebne pakete, potem pa bo uporabniku sporočeno, da mora za spremembe ponovno odpreti vmesnik.
4646
Po ponovnem zagonu bo statusni panel za posamezen modul obarvan zeleno.
4747

@@ -54,15 +54,15 @@ Po ponovnem zagonu bo statusni panel za posamezen modul obarvan zeleno.
5454
-----------------------------
5555
*Schema definition* omogoča definicijo uporabniških računov (in v njih cehov, sporočil, ipd.), definicijo upravljalnika za beleženje,
5656
izbiro globine izpisov na konzoli in konfiguracijo povezave do jedra ogrodja.
57-
Omogoča tudi shrambo teh definicij v JSON datoteko, branje definicij iz JSON datoteke in pa generacijo ekvivalentne
58-
Python datoteke, ki požene le jedro orodja (brez grafičnega vmesnika).
57+
Omogoča tudi shrambo teh definicij v JSON datoteko, branje definicij iz JSON datoteke in generacijo ekvivalentne
58+
Python datoteke (konfiguracijske datoteke jedra), ki požene le jedro orodja (brez grafičnega vmesnika).
5959
Pravzaprav je ta zavihek namenjen definiciji neke predloge, ki jo lahko potem uvozimo v jedro ogrodja.
6060
Izgled je prikazan na :numref:`fig-gui-front`.
6161

6262
Omogoča tudi dinamično branje in dodajanje objektov v že zagnanem vmesniku preko gumbov, ki vsebujejo besedo *live*.
6363

6464
Uporabniške račune (in ostale objekte) se lahko definira z klikom na opcijski meni *Object options*, in opcijo *New ACCOUNT*.
65-
Ob kliku se odpre novo okno, ki je avtomatično in dinamično generirano iz podatkov o podatkovnih tipih (anotacij), ki jih sprejme
65+
Ob kliku se odpre novo okno, ki je avtomatično in dinamično generirano iz podatkov o podatkovnih tipih, ki jih sprejme
6666
razred ob definiciji. Za vsak parameter se generirajo oznaka, opcijski meni in opcijski gumb, v katerem lahko urejamo izbrano vrednost
6767
oz. definiramo novo vrednost.
6868

@@ -72,7 +72,7 @@ oz. definiramo novo vrednost.
7272

7373
Definicija uporabiškega računa
7474

75-
Shranjevanje sheme (predloge) v datoteko in nalaganje sheme iz datoteke in generiranje ekvivalentne Python datoteke
75+
Shranjevanje sheme (predloge) v datoteko, nalaganje sheme iz datoteke in generiranje ekvivalentne Python datoteke
7676
je možno preko opcijskega menija *Schema*. Datoteka, kamor se shrani shema je datoteka formata JSON in vsebuje
7777
definirane račune, objekte za beleženje sporočil, objekte za povezovanje z jedrom ipd.
7878
Vsi objekti znotraj grafičnega vmesnika, pravzaprav niso pravi Python objekti ampak so dodaten nivo abstrakcije, ki je sestavljen
@@ -147,21 +147,21 @@ Za pridobitev statistike se uporabi gumb *Calculate*, ki na podlagi opcijskega m
147147
Povezava grafičnega vmesnika z jedrom ogrodja
148148
=====================================================
149149
Grafični vmesnik lahko s stališča lokacije delovanja deluje na dva načina. Prvi je lokalen način, kjer grafični vmesnik
150-
jedro ogrodja zažene na istem računalniku, kjer deluje grafični vmesnik. Drugi način pa je oddaljen
151-
režim delovanja, kjer se grafični vmesnik poveže na HTTP strežnik, kateri deluje znotraj jedra ogrodja in na ta strežnik
152-
pošilja HTTP ukaze, ki se v jedru mapirajo na programski vmesnik. Koncept je prikazan na :numref:`gui-core-connection`
150+
jedro ogrodja zažene na istem računalniku. Drugi način je oddaljen režim delovanja,
151+
kjer se grafični vmesnik poveže na HTTP strežnik, kateri deluje znotraj jedra ogrodja in na ta strežnik
152+
pošilja zahtevke, ki se v jedru potem preslikajo na programski vmesnik. Koncept je prikazan na :numref:`gui-core-connection`
153153

154154
V primeru oddaljenega dostopa se podatki serializirajo v JSON reprezentacijo, kjer so navadne vrednosti neposredno serializirane v JSON format,
155-
večina objektov pa v slovar (:class:`dict`), kjer je sta slovarju zapisana pot do podatkovnega tipa (razreda) objekta in njegovi attributi.
155+
večina objektov pa v slovar (:class:`dict`), kjer je sta slovarju zapisana pot do podatkovnega tipa (razreda) objekta in njegovi atributi.
156156
Obstaja nekaj izjem pri serializaciji objektov, kjer je ena izmed teh :class:`~datetime.datetime` tip objekta, ki se serializira v besedilo po standardu ISO 8601.
157157
Pretvorbo v končno JSON reprezentacijo opravlja vgrajena knjižnica :mod:`json`, medtem ko pretvorbo objektov v slovar
158158
opravlja funkcija :func:`daf.convert.convert_object_to_semi_dict`. Serializacijo in deserializacijo opravljata grafični vmesnik in
159-
jedro oba enako. Včasih se pri pošiljanju podatkov iz grafičnega vmesnika na jedro sploh ne serializira (kot objekte),
160-
temveč se pošlje le referenco (identifikator) objekta, kjer se na strežniku (jedru ogrodja) objekt pridobi iz spomina prek reference.
159+
jedro oba enako. Včasih se pri pošiljanju podatkov iz grafičnega vmesnika na jedro sploh ne serializira,
160+
temveč se pošlje le referenco (identifikator) objekta, kjer se na strežniku (jedru) objekt pridobi iz spomina preko reference.
161161

162162
.. autofunction:: daf.convert.convert_object_to_semi_dict
163163

164164
Za konfiguracijo oddaljenega dostopa je potrebno na vrhu vmesnika izbrati :class:`~daf_gui.connector.RemoteConnectionCLIENT`
165165
in nastaviti parametre. Prav tako je potrebno ustrezno konfigurirati jedro [#extra_remote_conf]_.
166166

167-
.. [#extra_remote_conf] Več o konfiguraciji je na voljo v :ref:`dokumentaciji ogrodja <Remote control (GUI)>`.
167+
.. [#extra_remote_conf] Več o konfiguraciji je na voljo v dokumentaciji ogrodja - :ref:`Remote control (core)`.

docs/thesis/sl/daf/design_development/testing.rst

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,8 @@ kot vhod damo primerjavo dveh seznamov.
6868
6969
assert [1, 2, 3] == [1, 2, 3, 4, 5, 6]
7070
71-
Iz zgornjega testa je očitno, da to ne drži in da bo test neuspel, ampak v assertu nimamo nobene
72-
:func:`print` funkcije, ki bi izpisala kaj je šlo narobe, tako da bi pričakovali da pytest vrne samo informacijo da test ni uspel.
71+
Iz zgornjega testa je očitno, da to ne drži in da bo test dvignil napako, ampak v assertu nimamo nobenega
72+
besedila, da bi se izpisalo kaj je šlo narobe, tako da bi pričakovali da pytest vrne samo informacijo da test ni uspel.
7373
Izkaže se, da nam bo pytest izpisal točno kateri elementi se v seznamu razlikujejo.
7474

7575
.. raw:: latex
@@ -103,6 +103,11 @@ Izkaže se, da nam bo pytest izpisal točno kateri elementi se v seznamu razliku
103103
test.py:6: AssertionError
104104
105105
106+
.. raw:: latex
107+
108+
\newpage
109+
110+
106111
Testiranje ogrodja
107112
---------------------
108113
Testi so v ogrodju razdeljeni po posameznih nivojih in funkcionalnostih. Skoraj vsi testi delujejo sinhrono,

0 commit comments

Comments
 (0)