Korisnički alati

Site alati


studenti:zad_deljkic:zd-zr-start

Razlike

Slijede razlike između dviju inačica stranice

Poveznica na ovu usporedbu

Starije izmjene na obje strane Starija izmjena
Novija izmjena
Starija izmjena
studenti:zad_deljkic:zd-zr-start [2015/05/26 18:52]
zdeljkic
studenti:zad_deljkic:zd-zr-start [2023/06/19 16:21] (trenutno)
Redak 2: Redak 2:
  
 ==== Programski alati za automatsko mapiranje tematskih područja ==== ==== Programski alati za automatsko mapiranje tematskih područja ====
 +
 +{{:​studenti:​zad_deljkic:​zavrsni.pdf|Tekst rada}} i {{:​studenti:​zad_deljkic:​prezentacija_zr.odp|prezentacija}}.
 +
  
 //Software tools for automatic mapping of subject areas// //Software tools for automatic mapping of subject areas//
Redak 19: Redak 22:
   - Napraviti i dokumentirati što veći broj različitih transformacija   - Napraviti i dokumentirati što veći broj različitih transformacija
   - Napisati detaljne upute za izradu transformacija - od izrade Python skripte do integriranja u NetGlub sistem   - Napisati detaljne upute za izradu transformacija - od izrade Python skripte do integriranja u NetGlub sistem
-  ​- Uspješno prevesti i pokrenuti klijent-a na Windows OS-u, napisati upute za to +      ​puno o izradi transformacija za netglub se može naučiti iz resursa za Maltego ([[https://​www.paterva.com/​web6/​documentation/​developer-local.php|primjer]]) - jer na kraju krajeva Netglub je baš kopija Maltega 
-  - Isprobati cijeli sistem preko mreže - master i slave(ovi) na Ubuntu OS-u, klijenti na Ubuntu i Windows OS-u +  - <del>Uspješno prevesti i pokrenuti klijent-a na Windows OS-u, napisati upute za to</​del>​ 
-  - Napisati popis budućih projekata u kontekstu ovog rada+  - <del>Isprobati cijeli sistem preko mreže - master i slave(ovi) na Ubuntu OS-u, klijenti na Ubuntu i Windows OS-u</​del>​ 
 +  - <del>Napisati popis budućih projekata u kontekstu ovog rada</​del>​ 
 +  - Ubaciti dobivanje ISBN-a u tranformacije s knjigama 
 +      - trebao bi biti posebni parametar da/ne koji nas pita jel želimo ISBN - zato što dobivanje ISBN-a može biti sporo (otvaranje nove stranice za svaki rezultat) 
 +  - Slično za fraze, treba napraviti mehanizam (Python modul) koji se bavi validacijom fraza - on će nam reći jel fraza koju smo generirali ima smisla (primjerice da proba naći tu frazu u naslovu/​sažetku knjiga i radova) 
 +      - Onda kada imamo taj mehanizam, treba postojati parametar koji nas pita je li želimo velidaciju fraza prilikom neke od transformacija koja generira fraze - jer je opet validacija relativno spora (otvaranje nove stranice)
   - Ostalo:   - Ostalo:
       - <​del>​Provjeri je li NetGlub smatra da su dva entiteta sa istim primarnim (npr. naslov knjige), ali različitim sekundarnim atributima (npr. autori, izdavač) jednaki (je li ih "​merge-a"​)</​del> ​ saznato - zapisano u poglavlje "​Entiteti"​ niže       - <​del>​Provjeri je li NetGlub smatra da su dva entiteta sa istim primarnim (npr. naslov knjige), ali različitim sekundarnim atributima (npr. autori, izdavač) jednaki (je li ih "​merge-a"​)</​del> ​ saznato - zapisano u poglavlje "​Entiteti"​ niže
Redak 51: Redak 59:
 <​prezime1>,​ <​ime1>;​ <​prezime2>,​ <​ime2>;​ … <​prezime1>,​ <​ime1>;​ <​prezime2>,​ <​ime2>;​ …
  
-U različitim stranicama/​bazma je ime autora različito zapisano. U nekim slučajevima ​se u istoj bazi ime autora može biti zapisano u različitim formatima. Zadatak transformacije koja daje knjigu ili članak kao izlaz da pokuša pročitati i zapisati imena autora u ispravnom formatu.+Prezime bi trebali biti puno prezime, dok ime može biti puno ime, inicijali i slično - ovisi što nam je dostupno kod baze koju pretražujemo. 
 + 
 +U različitim stranicama/​bazma je ime autora različito zapisano. U nekim slučajevima u istoj bazi ime autora može biti zapisano u različitim formatima. Zadatak transformacije koja daje knjigu ili članak kao izlaz da pokuša pročitati i zapisati imena autora u ispravnom formatu.
  
 Sam entitet autora ima jedno obavezno polje - prezime. Tako da i ako je na nekim stranicama zapisano puno ime, na nekima samo inicijali, a na nekima primjerice puno prvo ime i inicijali srednjeg imena, autor će se i dalje prepoznati kao isti. Nedostatak toga je rubni slučaj kada postoji više autora sa istim prezimenom u istom području, ali to je prihvatljiva posljedica za dobivenu fleksibilnost. Sam entitet autora ima jedno obavezno polje - prezime. Tako da i ako je na nekim stranicama zapisano puno ime, na nekima samo inicijali, a na nekima primjerice puno prvo ime i inicijali srednjeg imena, autor će se i dalje prepoznati kao isti. Nedostatak toga je rubni slučaj kada postoji više autora sa istim prezimenom u istom području, ali to je prihvatljiva posljedica za dobivenu fleksibilnost.
Redak 59: Redak 69:
 Netglub smatra da su dva entiteta jednaka ako su im svi obavezni atributi (optional=false) jednaki. Službeno ne postoji nikakav "​primarni"​ atribut - no konvencija među default entitetima je da svaki entitet ima atribut nazvan "​value"​ koji je obavezan (uz još ostale obvezne/​neobvezne atribute). Netglub smatra da su dva entiteta jednaka ako su im svi obavezni atributi (optional=false) jednaki. Službeno ne postoji nikakav "​primarni"​ atribut - no konvencija među default entitetima je da svaki entitet ima atribut nazvan "​value"​ koji je obavezan (uz još ostale obvezne/​neobvezne atribute).
  
-Tu nastaje ​problem ​- ako je za knjige i članke jedini obvezni atribut naslov, netglub neće moći razlikovati dve knjige s istim naslovom. Zato je potrebno uvesti još neki atribut koji će ih razlikovati.+Tu nastaje ​dilema ​- ako je za knjige i članke jedini obvezni atribut naslov, netglub neće moći razlikovati dve knjige s istim naslovom. Zato je potrebno uvesti još neki atribut koji će ih razlikovati
 + 
 +Ja sam stavio da to bude polje autora. U tom slučaju se može dogoditi da netglub smatra da su dvije zapravo iste knjige različite jer imaju različiti tekst u polju autora (npr. "Doe John" i "Doe J"), no u praksi je to manji problem od prvog problema kojeg ovo rješava (različite knjige - isti naslov).
  
 Izvor: datoteka qng/​src/​graph.cpp,​ funkcija Node::​isSimilitarTo Izvor: datoteka qng/​src/​graph.cpp,​ funkcija Node::​isSimilitarTo
  
 ==== Transformacije ==== ==== Transformacije ====
 +U sve transformacije bi trebalo implementirati mehanizam da ne "​zaspammaju"​ stranice koje pretražuju - primjerice ako tražimo članke s nekom temom iz samo 2015 godine, mogli bi pretražiti 1000 stranica Google Scholara i naći samo par rezultata. Ukoliko je korisnik zadao da npr. pronađemo 20 takvih rezultata, transformacija ih ne smije beskonačno tražiti već pretražiti razumnu/"​pristojnu"​ količinu. ​
  
 **Gotove transformacije:​** **Gotove transformacije:​**
Redak 101: Redak 114:
 Gornji primjer poziva transformaciju s ulaznim entitetom tipa "​phrase",​ čiji je atribut "​value"​ jednak "​test"​ i s parametrom "​NbResult"​ jednakim "​5"​ Gornji primjer poziva transformaciju s ulaznim entitetom tipa "​phrase",​ čiji je atribut "​value"​ jednak "​test"​ i s parametrom "​NbResult"​ jednakim "​5"​
  
-==== Sigurnost ​====+==== Bugovi/​greške kod Netglub-a ​====
  
-  ​* Master na istom interfaceu očekuje i slaveove i klijente - to bi trebalo biti moguće odvojiti+Netglub za komunikaciju koristi XML-RPC - specifikacija ([[http://​xmlrpc.scripting.com/​spec.html|link]]) može pomoći kod debuggiranja. 
 + 
 +=== Općenito === 
 + 
 +  * Master nezna reagirati na timeout od mysql baze 
 +      * ako se nista ne desava neko vrijeme (8 sati po defaultu kod mysql-a) master ce izgubit konekciju i kod sljedeceg pokusaja konekcije od klijenta ce se pojaviti serial not valid 
 +      * rjesenje za sad je povecati wait_timeout na maksimalnu vrijednost od 1 godine kod mysql-a i restartat master bar 1 godisnje 
 +      * bolje rješenje - promjena source koda, dvijee opcije: 
 +      * a) main.cpp: setconnectoptions(mysql_opt_reconnect) ne cini se da radi 
 +      * b) ntgsessionmanager.cpp:​ db.isopen() i isactive() navodno ne funkcionira [[https://​bugreports.qt.io/​browse/​qtbug-223|https://​bugreports.qt.io/​browse/​qtbug-223]] 
 +      * implementirati provjeru jel db ziv na neki drugi nacin? 
 +  * Kod netglub klijenta, ako se unese URL i konkretno port koji drop-a konekcije (obično firewall), klijent će se "​zamrznuti"​ i vječno čekati odgovor 
 +      * Što je još gore, ako je bio odabran "​Remember settings",​ svaki put kod paljenja će se isto dogoditi i jedini način za spriječini to je ručno nači gdje su pohranjeni settingsi 
 +      * Na windowsima su settingsi pohranjeni u registry-u pod HKEY_CURRENT_USER\Software\Diateam\qng (URL i serial) 
 +  * Na nekim računalima kod netglub klijenta, klijent se nemože spojiti i baca grešku -32300 HTTP request failed 
 +      * Gledajući kroz source, čini se da klasa QHttp ([[https://​github.com/​qtproject/​qt/​blob/​716fbaef34386c8b05d7d63894a5bc116ddd1b6c/​src/​network/​access/​qhttp.cpp|relevantni source]], funckija QHttpPrivate::​_q_slotError) interno koristi QTcpSocket i taj socket se ne uspjeva spojiti i baca neku grešku ([[http://​doc.qt.io/​qt-4.8/​qabstractsocket.html#​SocketError-enum|popis mogućih greška]]) 
 +      * Ne znam još koju točno grešku baca, znam samo po source-u koje ne baca (0, 1, 2 sa popisa) 
 +  * Transformacija PersonToEmailSE ima par greška: 
 +      * vraća dobre rezultate za "john smith" ali ne i za "John Smith" → ubaciti pretvaranje u lowercase prije 
 +        * values = [v.lower() for v in values] nakon values 
 +      * regex za email u dijeli koji matcha domenu bez top dijela treba biti greedy (pretvorit *? u samo *) 
 +        * inače će e-mail primjer@pod.domena.com prepoznati kao primjer@pod.domena 
 +      * kad se dogodi exception ne napravi ništa (pass) i nastavi dalje, expection mogu biti razne greške, u najmanju ruku treba ispisati poruku - ali ne sa write_error jer takvo ispisivanje implicira prekid transformacije 
 + 
 +=== Sigurnost === 
 + 
 +  ​* Master na istom interfaceu/ip adresi ​očekuje i slaveove i klijente - to bi trebalo biti moguće odvojiti 
 +      * npr. slave-ovi samo na 127.0.0.1, a klijenti na 0.0.0.0
   * Master nikako ne autorizira slaveove - postoji "​kostur"​ te funkcionalnosti ali nije implementirana   * Master nikako ne autorizira slaveove - postoji "​kostur"​ te funkcionalnosti ali nije implementirana
   * Datoteke u /​etc/​netglub/​ obično svi korisnici mogu čitati - a između ostalog sadrže username i password za bazu podataka, privatne ključeve certifikata…   * Datoteke u /​etc/​netglub/​ obično svi korisnici mogu čitati - a između ostalog sadrže username i password za bazu podataka, privatne ključeve certifikata…
  
 ==== Budući projekti ==== ==== Budući projekti ====
 +
 +=== Općenito ===
  
   * Alat koji prebacuje datoteku u NetGlub (.ntg) formatu u mind mapu u Freemind formatu (.mm)   * Alat koji prebacuje datoteku u NetGlub (.ntg) formatu u mind mapu u Freemind formatu (.mm)
Redak 116: Redak 158:
       * Na kraju bi rezultate nekako lijepo prikazao - možda u obliku Freemind mind mape (.mm)       * Na kraju bi rezultate nekako lijepo prikazao - možda u obliku Freemind mind mape (.mm)
   * Izrada alternativnog NetGlub klijenta koji radi unutar internet preglednika   * Izrada alternativnog NetGlub klijenta koji radi unutar internet preglednika
-  * Izrada dodatnih transformacija (vidi "​Buduće transformacije"​ gore) 
   * Pokrenuti javno dostupan server koji pokreće Netglub infrastrukturu na koju se ljudi mogu spojiti samo sa klijentom, bez potrebe da sami doma imaju pokrenut master i slave   * Pokrenuti javno dostupan server koji pokreće Netglub infrastrukturu na koju se ljudi mogu spojiti samo sa klijentom, bez potrebe da sami doma imaju pokrenut master i slave
       * Možda je za tu svrhu moguće dobiti [[http://​www.srce.unizg.hr/​vps/​|VPS od srca]]?       * Možda je za tu svrhu moguće dobiti [[http://​www.srce.unizg.hr/​vps/​|VPS od srca]]?
-  * Master nezna reagirati na timeout od mysql baze popraviti to + 
-      * ako se nista ne desava 8 sati po defaultu master ce izgubit konekciju i kod sljedeceg pokusaja konekcije od klijenta ce se pojaviti serial not valid +=== Nadogradnja Netglub-a === 
-      rjesenje za sad je povecati wait_timeout na maksimalnu vrijednost od 1 godine i restartat master bar 1 godisnje + 
-      * rjesenje 2 promjena source koda, dve opcije: +  Izrada dodatnih transformacija ​(vidi "​Buduće transformacije"​ gore
-      * a) main.cpp: setconnectoptions(mysql_opt_reconnectne cini se da radi +  Izrada funkcionalnosti lokalnih transformacija u klijentu ​(već je započeta, postoji kostur)
-      b) ntgsessionmanager.cpp:​ db.isopen() i isactive() navodno ne funkcionira https://​bugreports.qt.io/​browse/​qtbug-223 +
-      * implementirati provjeru jel db ziv na neki drugi nacin?+
  
 ~~NOTOC~~ ~~NOTOC~~
studenti/zad_deljkic/zd-zr-start.1432666360.txt.gz · Zadnja izmjena: 2023/06/19 16:20 (vanjsko uređivanje)