SVEUČILIŠTE U SPLITU PRIRODOSLOVNO MATEMATIČKI FAKULTET NEFORMALNI OBLICI PRIKAZA ZNANJA U INTERNET OKRUŽENJU DIPLOMSKI RAD Student: MARTINA PRGOMET Mentor: prof. dr. sc. Andrina Granić Neposredni voditelj: dr. sc. Saša Mladenović Split, srpanj 2011. 2 Sadržaj Sadržaj ................................................................................................................................... 3 Uvod ...................................................................................................................................... 5 1. 2. Upravljanje znanjem ...................................................................................................... 6 1.1. Kljuĉni pojmovi ..................................................................................................... 6 1.2. Vrste Znanja .......................................................................................................... 8 1.3. Faze organizacije znanja........................................................................................ 9 1.4. Upravljanje znanjem u razvoju programske podrške .......................................... 11 1.4.1. Upravljanje znanjem i uĉenje ...................................................................... 12 1.4.2. Uloga Upravljanja znanjem u razvoju programske podrške ....................... 12 1.4.3. Implementacija Upravljanja znanjem .......................................................... 13 Mentalne mape ............................................................................................................ 15 2.1. Što su mentalne mape .......................................................................................... 15 2.2. Mentalne mape i ontologija ................................................................................. 17 2.3. Zašto koristiti mentalne mape.............................................................................. 19 2.3.1. Brainstorming .............................................................................................. 19 2.3.2. Uĉenje pomoću mentalnih mapa ................................................................. 20 2.3.3. Ostali naĉini upotrebe mentalnih mapa ....................................................... 21 2.4. Programski alati za izradu mentalnih mapa ......................................................... 23 2.4.1. FreeMind ..................................................................................................... 23 2.4.2. MindManager .............................................................................................. 24 2.4.3. Bookvar ....................................................................................................... 25 2.4.4. Mind42 ........................................................................................................ 26 2.4.5. Mindomo ..................................................................................................... 27 3 2.4.6. 3. Wisemapping ............................................................................................... 28 Eksperimentalni dio ..................................................................................................... 29 3.1. Odabrane tehnologije........................................................................................... 30 3.1.1. HTML5 ........................................................................................................ 30 3.1.2. JavaScript .................................................................................................... 37 3.1.3. JQuery.......................................................................................................... 38 3.1.4. JSON............................................................................................................ 40 3.2. Realizacija ........................................................................................................... 44 3.3. Primjeri koda za specifiĉne zadaće ...................................................................... 48 3.3.1. Oznaĉavanje grane ....................................................................................... 48 3.3.2. Kreiranje grane ............................................................................................ 49 3.3.3. Brisanje grane .............................................................................................. 52 3.3.4. Kopiranje, rezanje i lijepljenje grane ........................................................... 54 3.3.5. Kreiranje novog dokumenta ........................................................................ 56 3.3.6. Otvaranje dokumenta................................................................................... 58 3.3.7. Spremanje dokumenta ................................................................................. 63 Zakljuĉak ............................................................................................................................. 67 Literatura ............................................................................................................................. 68 4 Uvod Ljudi u današnje vrijeme rade na realizaciji kompleksnih zadaća. Za uspješnost realizacije takvih zadaća u ograniĉenom vremenu, nužna je suradnja više pojedinaca. Najplodniji oblik suradnje je dijeljenje znanja. Ono može biti formalno i neformalno: s jedne strane se znanje prenosi pismeno, u obliku dokumenata, a s druge strane svakodnevnom usmenom komunikacijom. Brzi razvoj tehnologije postavlja uvjete za brže uĉenje i dijeljenje znanja izmeĊu pojedinaca. Da bi se olakšao taj proces i povećala uspješnost, postoji potreba za uĉinkovitom programskom podrškom koja na jednostavan naĉin pohranjuje i prenosi znanje koje pojedinci imaju. Ovaj rad je podijeljen na dvije cjeline i ĉetiri poglavlja. Prva dva poglavlja obuhvaćaju teorijski dio rada. U prvom poglavlju je opisana problematika i dana su odreĊena rješenja za organizaciju i upravljanje znanjem koje pojedinci imaju, u svrhu dijeljenja znanja, radi uspješnosti realizacije kompleksnih projekata. U drugom poglavlju je predstavljen teorijski dio vezan za mentalne mape, njihova svrha, uĉinkovitost i naĉini korištenja. Druga cjelina obuhvaća eksperimentalni dio diplomskog rada. U trećem poglavlju su opisane tehnologije koje su korištene u eksperimentalnom dijelu rada, a zatim je predstavljeno rješenje izrade aplikacije za mentalne mape, zajedno sa primjerima specifiĉnih dijelova koda. 5 1. Upravljanje znanjem Moderni poslovni svijet karakteriziraju dinamiĉnost, promjene i konstantni napredak tehnologije. Da bi bile u toku s promjenama, organizacije moraju postati fleksibilnije, a jedan naĉin za to je povećanjem potencijala za uĉenje kao grupa. Slika 1.1: Krug organizacijskog uĉenja Upravljanje znanjem (eng. Knowledge Managment, skraćeno KM) se može shvatiti kao integrirani pristup za postizanje organizacijskih ciljeva, koji postavlja fokus na znanje. Ono podržava i koordinira kreiranje, prijenos i primjenu individualnog znanja u procesu kreiranja vrijednosti [1]. Upravljanje znanjem se pojavilo kao znanstvena disciplina u ranim devedesetim godinama prošlog stoljeća. Ono spaja niz strategija i praksi koje se koriste u organizaciji za identifikaciju, stvaranje, prikazivanje, distribuiranje i usvajanje predodžbi i iskustava [2]. Ova disciplina se odnosi prema pojedincu kao struĉnjaku koji svoja znanja može podijeliti sa ostalim ĉlanovima grupe. 1.1. Ključni pojmovi Uz pojam znanja, usko su vezani i pojmovi podaci, informacije i mudrost koji su definirani u nastavku. Podaci su jednostavni neobraĊeni simboli bez ikakvog znaĉenja osim vlastitog postojanja. Mogu biti u razliĉitim formama, kao što su brojĉani, tekstualni, slikovni itd. Informacije su obraĊeni podaci koji su dobili znaĉenje relacijskim vezama s drugim podacima. Ovako obraĊeni podaci mogu biti korisni, iako to nije uvjet. U raĉunalnom 6 svijetu informacije sadrži relacijska baza na temelju podataka složenih u relacijske odnose. Ponekad se kaže da informacije daju odgovore na pitanja ''tko'', ''što'', ''gdje'' i ''kada''. Iz podataka dolazimo do informacija ukoliko shvatimo odnose ili relacije. Znanje je odgovarajući skup informacija kojima je osnovna namjena da budu korisni. Znanje se stjeĉe kroz proces uĉenja u kojem se informacije pretvaraju u znanje kako bi nam bilo korisno, kako bi nam poslužilo za nešto. Ponekad se kaže da je znanje primjena podataka i informacija sa ciljem davanja odgovora na pitanje ''kako''. Iz informacija do znanja dolazimo ukoliko shvatimo model, obrazac ili predložak. Na temelju njega možemo i predvidjeti što će se u budućnosti dogaĊati, što kod samog poznavanja informacija nije moguće. Shvaćanje temeljnih principa vodi prema mudrosti. Mudrost oznaĉava duboko znanje, odnosno shvaćanje temeljnih principa ukljuĉenih u znanje zbog kojih je znanje upravo takvo kakvo jest. Mudrost je najveći stupanj spoznaje, koji ukljuĉuje ne samo shvaćanje principa već i moral, etiku te dobro rasuĊivanje. Slika 1.2: Veza pojmova podaci, informacije, znanje i mudrost 7 1.2. Vrste Znanja Upravljanje znanjem, kao što je prikazano na Slici 1.3, ĉesto dijeli znanje na: Kognitivnu psihologiju, Mogućnost izražavanja i Nositelje znanja. Slika 1.3: Tipovi znanja Kognitivna psihologija razlikuje deklarativno i proceduralno znanje. Deklarativno znanje se odnosi na ĉinjenice i objekte i daje odgovore na pitanje „što“. Proceduralno znanje opisuje naĉin na koji se izvode kognitivni procesi i akcije i odgovara na pitanje „kako“. Struktura znanja temeljena na mogućnosti izražavanja se fokusira na ĉinjenici dali je nositelj znanja svjestan znanja koje ima i zna li ga izraziti. Ovo rezultira podjelom na eksplicitno i implicitno (prešutno ili skriveno) znanje. Eksplicitno znanje koje je poznato kao kodirano znanje, artikulirano je formalnim jezikom i može se jednostavno prenositi s jedne osobe na drugu u obliku informacije. Implicitno znanje je ugraĊeno znanje ili znanje stvoreno osobnim iskustvom pojedinca i ukljuĉuje nedodirljive ĉimbenike kao što su osobna uvjerenja, instinkt, osobne vrijednosti i steĉene vještine. Ono je personalizirano i do njega nije lako doći, stoga ĉesto ostaje neotkriveno i neiskorišteno. Ovaj oblik znanja je bogatiji od eksplicitnog, ali nema vrijednosti ako nije upotrijebljeno. Podjela znanja prema nositelju znanja razlikuje individualno i kolektivno znanje. Individualno znanje je znanje pojedinca koje nije ovisno o specifiĉnom kontekstu i individualno je kontrolirano. Kolektivno znanje je relevantno u specifiĉnom okruženju, 8 može ukljuĉivati individualno znanje koje ima puni potencijal samo kada je kombinirano sa znanjem grupe ljudi. TakoĊer može ukljuĉivati znanje koje se dijeli sa svima i znanje koje je zajedniĉko pojedincima u grupi. 1.3. Faze organizacije znanja Definirane su faze organizacije znanja, i to su, kao što je prikazano na Slici 1.4: Kreiranje znanja, Prikupljanje/pohranjivanje znanja, Pretvorba/organizacija znanja, Distribucija/pristup znanju i Primjena znanja. Slika 1.4: Faze organizacije znanja Kreiranje znanja: ĉlanovi zajednice kreiraju znanje kroz uĉenje, rješavanje problema, kreativnost, te iz izvora izvan zajednice. Kreiranje znanja može biti postignuto samo u prikladnom okruženju, a zahtjeva timski rad i efektivnu upotrebu kreativnog potencijala. Kao što je prikazano na Slici 1.5, dostupno je mnogo razliĉitih kreativnih tehnika koje podržavaju kreiranje znanja. Interakcija i komunikacija izmeĊu sudionika u ovakvom okruženju stvara nove prijedloge i rješenja. 9 Slika 1.5: Kreativno okruženje i metode kreiranja znanja Za ovaj rad je posebno važna jedna od metoda kreiranja znanja prikazana na Slici 1.5, a to je izrada mentalnih mapa (eng. Mind Mapping), o kojoj će se kasnije detaljnije govoriti. Prikupljanje/pohranjivanje znanja: ĉlanovi zajednice prikupljaju i pohranjuju informacije o znanju u eksplicitnom obliku. Za pohranjivanje prikupljenog znanja najĉešće se koriste programska rješenja za upravljanje sadržajem te razliĉiti oblici baza podataka. Nakon što je prikupljeno, skriveno znanje postaje eksplicitno, a kako bi ono bilo precizno, toĉno, razumljivo i pristupaĉno, potrebno ga je strukturirati. U tu svrhu se koristi niz metoda, a jedna od njih su takoĊer i već spomenute mentalne mape [3]. Pretvorba/organizacija znanja: zajednice organiziraju i pretvaraju znanje te ga ukljuĉuju u pisane dokumente i baze znanja; Distribucija/pristup znanju: znanje se distribuira kroz edukaciju, teĉajeve i razne programe; Primjena znanja: krajnji cilj je primijeniti znanje i to je najvažniji dio ciklusa organizacije znanja. Upravljanje znanjem ima za cilj uĉiniti znanje dostupnim kad god je ono potrebno. 10 1.4. Upravljanje znanjem u razvoju programske podrške Razvoj programske podrške je podruĉje koje se brzo mijenja, stoga je znanje u tom podruĉju raznoliko i neprestano se povećava. Postavlja se pitanje: Koliko upravljanje znanjem može pomoći pri rješavanju problema u razvoju programske podrške? Organizacije mogu primijeniti upravljanje znanjem da bi došle do rješenja vezanih za razliĉite poslovne potrebe. Poslovne potrebe organizacije: Organizacije za razvoj programske podrške imaju potrebu za smanjenjem troškova i vremena potrebnog za razvoj projekata. Da bi to postigli, moraju izbjegavati pogreške, jer to smanjuje potrebu za doradom, a ponavljanje uspješnih procesa povećava produktivnost i vjerojatnost budućih uspjeha. Organizacije trebaju primijeniti znanja steĉena u prethodnim projektima za uspješnu implementaciju budućih projekata. Nažalost, stvarnost je da razvojni timovi ne ostvaruju korist od postojećih iskustava i ponavljaju greške iako pojedinci znaju kako ih izbjeći. Ĉlanovi tima stjeĉu vrijedno iskustvo sa svakim pojedinim projektom, a organizacija i individualci postižu više ako dijele znanje. Kako organizacija raste i radi sa većom koliĉinom informacija, proces stjecanja znanja neformalnim putem postaje nedovoljan te se organizacije više ne mogu osloniti na osobna iskustva zaposlenih. Individualna znanja se moraju dijeliti, a organizacije moraju definirati procese za dijeljenje znanja tako da zaposlenici kroz cijeli projekt mogu donositi ispravne odluke. Organizacije takoĊer mogu primijeniti upravljanje znanjem da bi zadovoljile potrebe za znanjem u razliĉitim podruĉjima. Znanje vezano za nove tehnologije: Nove tehnologije ĉine razvoj programske podrške uĉinkovitijim, no s druge strane, potrebno je odreĊeno vrijeme dok programeri ne usvoje znanja vezana uz njih. Ako koriste tehnologiju koju nisu svladali, okreću se pristupu „uĉenja kroz rad“, koji može uzrokovati ozbiljna zakašnjenja. Stoga programeri moraju brzo stjecati nova znanja vezana za nove tehnologije i nastojati ih savladati. Dijeljenje znanja: Neformalno dijeljenje znanja je važan aspekt u uĉenju i ono bi se trebalo poticati. Ipak, formalno dijeljenje znanja osigurava da svi ĉlanovi grupe mogu pristupiti znanju. Stoga organizacije moraju formalizirati dijeljenje znanja te u isto vrijeme poticati i neformalno dijeljenje znanja. 11 Znanje o tome tko što zna: Organizacije se za razvoj programske podrške uvelike oslanjaju na znanje zaposlenika jer su oni ti koji su kljuĉni za uspjeh projekta. MeĊutim, pristup tim ljudima može biti težak. Jedan od razloga je mobilnost ljudi: kada osoba s posebnim znanjem odjednom napusti organizaciju, stvaraju se praznine u znanju. Potrebno je znati tko posjeduje koju vrstu znanja i tako razviti strategiju za sprjeĉavanje nestanka vrijednog znanja. Suradnja: Razvoj programske podrške je grupna aktivnost. Ĉlanovi grupe su ĉesto na razliĉitim mjestima, ĉak rade i u razliĉitim vremenskim zonama. Ipak, oni moraju komunicirati i suraĊivati te pronaći naĉin za dijeljenje znanja neovisno o prostoru i vremenu. 1.4.1. Upravljanje znanjem i učenje Uĉenje je temeljni dio upravljanja znanjem jer zaposlenici organizacije moraju usvojiti dijeljeno znanje prije nego što ga mogu poĉeti koristiti za obavljanje specifiĉnih zadataka. Pojedinci prvenstveno uĉe jedni od drugih kao i kroz samostalno istraživanje. Znanje se takoĊer može prenositi i od pojedinca na grupu. Upravljanje znanjem nastoji unaprijediti znanje pojedinaca na razinu organizacije, tako da mu cijela organizacija može pristupiti. Pojedinci obavljaju zadatke koji postižu ciljeve organizacije, stoga je aktivnost uĉenja na individualnoj razini od najveće važnosti. 1.4.2. Uloga Upravljanja znanjem u razvoju programske podrške Predloženi su razliĉiti pristupi vezani za poboljšanje procesa, uvoĊenje novih tehnologija, te poboljšanje izvedbe ljudi („peopleware“). Upravljanje znanjem uglavnom obuhvaća poboljšanje izvedbe ljudi. Budući da je razvoj programske podrške rezultat znanja i kreativnosti, upravljanje znanjem naglašava važnost toga da pojedinci imaju pristup traženim informacijama i znanju koje im je potrebno za dovršavanje zadatka. Ne ignorira vrijednost drugih aspekata kao što su proces i tehnologija, niti ih želi zamijeniti. Umjesto toga, radi na poboljšanju razvoja programske podrške upravljanjem organizacijom znanja. Znanje se može prenijeti formalnim obukama ili uĉenjem kroz rad. Formalne obuke su ĉesto dugotrajne i skupe, pogotovo ako se odvijaju izvan organizacije. Uĉenje kroz rad može biti kritiĉno jer ljudi ĉine pogreške i neprestano ih ponavljaju dok ne doĊu do 12 ispravnog rješenja. Upravljanje znanjem podržava i formalne obuke i uĉenje kroz rad. Dokumentirano znanje može pružiti osnove za obuke unutar organizacije, a uĉenje kroz rad osigurava znanje pojedincima koji ga imaju, te ukazuje na te pojedince kada i gdje je potrebno. Dokumenti proizlaze iz znanja koje je nastalo temeljem rješavanja problema na projektima, a ĉlanovi tima to znanje mogu koristiti za buduće projekte. Voditelji projekta moraju napraviti niz odluka na poĉetku i tijekom projekta. Tipiĉno, njihove odluke su voĊene osobnim iskustvom i intuicijom. Pošto je razvoj programske podrške kompleksan i raznolik proces, intuicija nije dovoljna i nemaju svi opsežno iskustvo. Stoga se donošenje odluka za buduće projekte mora voditi prošlim projektima. To znaĉi da organizacije moraju osigurati da se znanje koje je steĉeno tijekom projekta ne izgubi. Ovo zahtjeva odreĊene programe, skupljanje podataka i njihovu analizu. TakoĊer je potrebno simulirati „što ako“ scenarije te moguće ishode za višestruke odluke. Kvaliteta ovog predviĊanja ovisi o kvaliteti prikupljenih podataka. Na višoj razini, organizacije moraju analizirati nekoliko prošlih projekata da bi unaprijedili trenutni projekt. Ovo zahtjeva veliko znanje bazirano na više razliĉitih iskustava u razvoju programske podrške. Kako organizacije stjeĉu više iskustva u provoĊenju ovih sluĉajeva, proces razvoja je ponovljen i postaje još više poboljšan. 1.4.3. Implementacija Upravljanja znanjem Implementacija upravljanja znanjem obuhvaća mnogo izazova i prepreka. Posebno su važna tri pitanja: Pitanje tehnologije: tehnologija za razvoj programske podrške podržava upravljanje znanjem, ali nije uvijek moguće integrirati razliĉite sustave i alate da bi se postigla željena razina dijeljenja. Pitanje organizacije: pogreška je što se organizacije fokusiraju samo na tehnologiju a ne i na metodologiju. Lako je upasti u zamku tehnologije i posvetiti sve resurse razvoju tehnologije bez planiranja implementacije upravljanja znanjem. Individualna pitanja: zaposlenici ĉesto nemaju vremena za primanje i traženje znanja, ne žele dijeliti svoje i ne žele koristiti tuĊe znanje. 13 Iako nova tehnologija dijeljenje znanja ĉini lakšim nego ikada, organizacije ih možda neće promovirati. Neke kulture potiĉu individualizam i zabranjuju zajedniĉki rad. Ako organizacije ne potiĉu dijeljenje, zaposlenici se mogu posesivno odnositi prema svom znanju i neće dragovoljno dijeliti svoje znanje. Zaposlenici znaju da ih organizacija cijeni zbog njihovog znanja te mogu biti u strahu da će ih se smatrati suvišnima i zamjenjivima nakon što poslodavac primi njihovo znanje. TakoĊer mogu ne biti spremni dijeliti svoja negativna iskustva i ono što su nauĉili na temelju neuspjeha zbog negativne konotacije. Dakle, iako je svrha upravljanja znanjem da se izbjegnu sliĉne greške, zaposlenici mogu biti u strahu da će takve informacije biti iskorištene protiv njih. Druga prepreka je “not invented here” sindrom: neki vjeruju da se softverski inženjeri opiru ponovnom korištenju rješenja drugih ljudi. Iako je promjena teška, takva vjerovanja moraju biti promijenjena i zamijenjena pozitivnim stavom vezanim za dijeljenje. Organizacije ne samo da moraju poticati, već moraju i nagraĊivati zaposlenike koji dijele svoje znanje, traže znanje i koriste tuĊe znanje. Iz navedenog se može zakljuĉiti da postoje dobri razlozi za vjerovanje da upravljanje znanjem za razvoj programske podrške može uspjeti ako se organizacije fokusiraju na pravi naĉin i implementiraju ga [4]. 14 2. Mentalne mape Kao što je već naglašeno, ponovna upotreba znanja je važan element upravljanja znanjem. Pri tome se javlja potreba za mehanizmima koji će spremati znanje pojedinaca kao i organizacije, te pružiti mogućnost njegove ponovne upotrebe. Kao pomoć pri ispunjavanju ovih ciljeva uvelike može pomoći mapiranje znanja, koje prema Wiig-u (1993.g.) ima sljedeće karakteristike [5]. Koristi se za izradu hijerarhijskih mapa, Pomaže pri analizi znanja koja je bazirana na interaktivnom radu, Pruža metode dokumentiranja znanja i Identificira podruĉja interesa. U ovom dijelu rada, pažnja je posvećena jednoj takvoj vrsti mapiranja znanja, a to su mentalne mape. Mentalne mape su odabrane iz razloga što je to relativno nova tehnika i sve se više primjenjuje u razliĉitim aspektima života, od individualnog, preko grupnog naĉina rada, sve do razine velikih organizacija. Drugi razlog je jednostavnost njihove izrade, naknadne upotrebe, te velika koliĉina informacija koje mentalne mape mogu pohraniti. 2.1. Što su mentalne mape Mentalna mapa (eng. Mind map) je vrsta dijagrama koji na odreĊeni naĉin prikazuje ideje ili razmišljanja. Mentalne mape su prikaz informacija na vizualno organizirani naĉin koji slijedi hijerarhijsko pojmovno naĉelo, za razliku od uobiĉajenog naĉina pravocrtnog ili linearnog nizanja informacije jedne za drugom kako se one predstavljaju u pisanim dokumentima [6]. Jednostavno reĉeno, mentalne mape su slikoviti prikazi sustava informacija i znanja. Sadrže rijeĉi, reĉenice, simbole ili crteže i razne druge oznake koje predstavljaju znaĉenje ideja ili razmišljanja. Izgled mape izveden je tako da se u središtu nalazi kljuĉna rijeĉ koja 15 predstavlja ideju ili temu, a oko nje se dalje zrakasto granaju ostale zamisli. Svi su ti dijelovi meĊusobno povezani grafiĉki i semantiĉki, a ĉine cjelinu [7]. Jednostavan naĉin za razumijevanje mentalnih mapa je njihova usporedba sa kartom grada. Centar grada predstavlja glavnu ideju u mentalnoj mapi. Glavne ceste koje vode iz centra grada predstavljaju kljuĉne ideje u procesu razmišljanja, dok sporedne ceste predstavljaju sekundarne ideje koje se vežu na osnovne ideje, itd. Slikovne metode su se stoljećima koristile za uĉenje, pamćenje, brainstorming, vizualno razmišljanje i rješavanje problema. Jedan od prvih primjera mentalnih mapa izraĊen je još u trećem stoljeću od strane filozofa Porfirija iz Tira (grĉ. Πορφύριος, 234-305). Tvorcem modernih mentalnih mapa smatra se psiholog i edukacijski savjetnik Tony Buzan, koji je 2006.g. izdao poznati program za izradu mentalnih mapa iMindMap [8]. Elementi koji se granaju podijeljeni su u grupe kako bi se olakšalo razumijevanje i organizacija odreĊenog tipa znanja s ciljem rješavanja problema ili donošenja odluke. Metoda izrade mentalne mape je vizualni pristup rješavanju složenih zadaća, s ciljem da se istakne ono bitno u razmatranoj zadaći. Slika 2.1: Primjer mentalne mape nacrtane rukom Moguće je uoĉiti sliĉnost izmeĊu mentalne mape i ontologije koja se takoĊer koristi za strukturirano predstavljanje znanja. Slika 2.1 prikazuje mentalnu mapu nacrtanu rukom, ali ona ne može predstavljati ontologiju jer nije razumljiva raĉunalu. Osim koncepta kojeg sadrži, mentalna mapa sadrži i relacije koje definiraju odnos meĊu navedenim idejama. Ipak, treba uoĉiti kako se mentalna mapa organizira oko jednog pojma 16 pa je možemo interpretirati kao modul ontologije, koji je takoĊer ontologija, a takoĊer može predstavljati drukĉiji pogled na sustav. Kako se mentalna mapa može predstaviti kao stablo, primjereno je koristiti je za opis hijerarhijskih i heterogenih sustava. Postoji niz programskih alata za izradu mentalnih mapa, a odabir alata ovisi o naĉinu izrade mape [9]. 2.2. Mentalne mape i ontologija Glavna razlika izmeĊu mentalne mape i ontologije je to što mentalna mapa odražava razmišljanje o jednom predmetu razgovora, a ontologije se sastoje od niza meĊusobno povezanih koncepata. Iz ove ĉinjenice može se zakljuĉiti kako za izradu ontologije treba izraditi barem onoliko mentalnih mapa koliko ontologija ima razliĉitih koncepata, a veze izmeĊu mentalnih mapa predstavljat će veze izmeĊu koncepata u ontologiji. Mape koje se sastoje od koncepata povezanih sa usmjerenim lukovima koji predstavljaju razliĉite relacije izmeĊu parova koncepata nazivaju se konceptualne mape, a mogu se predstaviti grafom [10]. Konceptualne mape prikazuju vezu izmeĊu razliĉitih koncepata koji su povezani strelicama u razgranatu hijerarhijsku strukturu. Veza izmeĊu pojmova je, radi lakšeg razumijevanja, povezana frazama koje se nalaze na strelicama, kao npr. rezultira, odnosi se, uključuje ili potrebno je [11]. 17 Slika 2.2: Konceptualna mapa Slika 2.2 prikazuje primjer konceptualne mape izraĊene u programu CMapTools i jedan važan aspekt konceptualnih mapa a to je mogućnost prikaza velikog broja informacija u sažetoj formi. Kombinacija poĉetnog pojma, fraze i pojma s kojim se povezan poĉetni pojam, formira odreĊenu tvrdnju. Jedna takva tvrdnja se može vidjeti iz primjera sa Slike 2.2: „Organizirano znanje je ovisno o kontekstu.“ Ili „Poveznice prikazuju unutarnje veze.“ Za vrijeme izrade konceptualne mape u programu CmapTools, moguće je otvoriti pomoćni prozor koji prikazuje formirane tvrdnje. Prozor je prikazan na Slici 2.3: 18 Slika 2.3: Pomoćni prozor sa listom veza konceptualne mape Konceptualne mape je razvio profesor Joseph D. Novak sa Cornell University 1970.-ih godina. Od samog poĉetka, konceptualne mape su se koristile u nekoliko razliĉitih podruĉja iz razloga što imaju mogućnost korištenja kao sredstvo koje može grafiĉki prikazati kompleksne sadržaje. Mogu se koristiti i kao sredstvo za pouĉavanje identifikacijom kljuĉnih koncepata i njihovih veza. Konceptualne mape ne sadrže dodatne elemente koji nisu koncepti, ali pojašnjavaju ideju koncepta. Koncepte koji tvore konceptualnu mapu izvlaĉi inženjer znanja, temeljem mentalne mape koju je izradio korisnik sustava. 2.3. Zašto koristiti mentalne mape Postoji mnogo naĉina upotrebe mentalnih mapa i to za osobne potrebe, u poslovne svrhe, u edukaciji, kao tehnika pamćenja ili za shvaćanje kompliciranih ideja. Slijedi nekoliko razliĉitih naĉina primjena mentalnih mapa. 2.3.1. Brainstorming Jedna od mogućnosti upotrebe mentalnih mapa je za tehniku kreiranja znanja koju potiĉe Upravljanje znanjem, a naziva se brainstorming. 19 Brainstorming je kreativna tehnika koja potiĉe razvoj novih ideja, obiĉno u grupi ljudi, da bi se došlo do rješenja problema. To može biti npr. novi proizvod. Izrada mentalnih mapa doprinosi kreiranju prepoznatljivih uzoraka i na jedinstveni naĉin unosi red u velikoj koliĉini ideja. Na Slici 2.4 je prikazan primjer generiranja razliĉitih ideja i njihova organizacija [12]. Slika 2.4: Organizacija ideja Ako se ideje linearno vežu jedna na drugu, one postanu neorganizirane i nepovezane sa osnovnom idejom. S druge strane, ako su zrakasto rasporeĊene oko osnovne ideje, mnogo ih je lakše organizirati i uoĉiti njihove meĊusobne veze . 2.3.2. Učenje pomoću mentalnih mapa Druga uĉinkovita upotreba mentalnih mapa je za uĉenje, jer one mogu pomoći pri rješavanju važnog problema obrazovanja, a to je kako postići viši stupanj upotrebe mentalnih sposobnosti ĉovjeka. Uĉenje pomoću mentalnih mapa je uĉenje kroz odvajanje bitnih elemenata i njihova povezivanja u jednu cjelinu. Vizualna narav mentalne mape olakšava razumijevanje, pamćenje, ponavljanje i korištenje (izlaganje) znanja. Postoji nekoliko nedostataka upotrebe standardnih bilješki za vrijeme uĉenja: Kod standardnih bilješki, kljuĉne rijeĉi se ĉesto pojavljuju na razliĉitim mjestima, okružene sa mnogo manje važnih rijeĉi. To ih ĉini nerazumljivima i teško je uoĉiti prikladne veze izmeĊu kljuĉnih koncepata. Bilješke u jednoj boji su vizualno dosadne. Kao takve, brzo se zaboravljaju. S vremenom, standardne bilješke poprime formu monotonih beskrajnih lista sliĉnog izgleda i teško je zapamtiti njihov sadržaj. Bilješke oduzimaju više vremena zbog zapisivanja nepotrebnih stvari, ĉitanja i traženja kljuĉnih rijeĉi. 20 Linearna prezentacija bilješki otežava stvaranje veza i smanjuje kreativnost. Mentalne mape, za razliku od standardnih bilješki, djeluju na naĉin na koji radi mozak: koriste radijalni prikaz podataka, koji potiĉe asocijativne procese razmišljanja koji imaju poĉetak u centralnoj toĉki ili se vežu na nju. Mozak pamti kljuĉne rijeĉi i slike, a ne reĉenice. Kako su mentalne mape vizualne i zorno prikazuju veze izmeĊu kljuĉnih rijeĉi, mnogo ih se lakše prisjetiti nego linearnih bilješki. 2.3.3. Ostali načini upotrebe mentalnih mapa Mentalne mape se takoĊer koriste za [13]: To-do Liste: Ovo je ĉesti primjer upotrebe mentalnih mapa na individualnoj ili grupnoj razini. Na Slici 2.5 je prikazan takav primjer mentalne mape. Slika 2.5: Primjer upotrebe mentalne mape kao to-do liste Rješavanje problema: Mentalne mape pomažu pri definiranju i sagledavanju problema iz razliĉitih perspektiva, uoĉavanju važnih pitanja i njihovog meĊusobnog odnosa, a takoĊer pomažu drugima da dobiju opću sliku o tome kako pojedinac vidi razliĉite aspekte situacije. 21 Slika 2.6: Primjer upotrebe mentalne mape za rješavanje problema Vođenje bilješki: Mentalne mape pomažu pri organiziranju primljene informacije u obliku koji mozak lakše pamti. Mogu se koristiti za bilježenje bilo ĉega, od predavanja, sastanaka do telefonskih razgovora. Sastanke: Mentalne mape su korisne kako za vrijeme, tako i prije sastanka. Prije sastanka mentalna mapa pomaže pri organizaciji vremena i moguće ishode. To povećava uĉinkovitost u smislu komunikacije i donošenja odluka, te smanjuje mogućnost trošenja vremena i dosade. Za vrijeme sastanka, mentalna mapa pomaže kod zadržavanja fokusa na odreĊenoj temi, kao i prijelaz na druge teme. Planiranje: Mentalne mape pomažu pri traženju i organizaciji relevantnih informacija na jednom mjestu. Mogu se upotrijebiti za planiranje bilo koje vrste pisanog rada, npr. u okviru izrade scenarija za knjigu radi se glavna mapa za cijelu knjigu, a iscrpnije podmape za svako poglavlje. Prezentacije: Vizualna narav mentalne mape omogućava ĉitanje cijelog predmeta izlaganja bez gledanja u papir. 22 2.4. Programski alati za izradu mentalnih mapa Kao što je spomenuto ranije, postoji niz razliĉitih programskih alata za izradu mentalnih mapa. Neki od njih su zajedno sa svojim prednostima i nedostatcima navedeni ovdje. 2.4.1. FreeMind Freemind je besplatna programska podrška za izradu mentalnih mapa, napravljena u Java programskom jeziku. Na Slici 2.7 je prikazana mentalna mapa napravljena u ovom programu. Slika 2.7: Mentalna mapa izraĊena u Freemind-u Prednosti: Podržava hrvatski jezik, Radna površina zauzima veliki dio ekrana što je pogodno za manje monitore i lakšu organizaciju prostora, Ima mnogo mogućnosti, kao što su spremanje mapa u razliĉitim oblicima (HTML, slike, Flash, Open Office dokument), umetanje slika, hiperlinkova, ikona. Nedostatci: Ikone potrebne za izradu mape su sitne i to otežava njenu izradu. Sve mogućnosti koje program ima donose i veliku koliĉinu izbornika, a time i teže snalaženje. Većina funkcija je nepotrebna. 23 Preĉaci za tipkovnicu su u oblicima koji se teško pamte. Npr., za povećavanje teksta se koristi preĉac Ctrl+L, a za smanjenje Ctrl+M, što je neuobiĉajeno. Grane mentalne mape su automatski postavljene kao sive, a zbog već spomenute velike koliĉine izbornika, većina vremena u izradi se gubi na traženje opcije mijenjanja boje grane. Kontekstni izbornik je kompliciran, ima previše funkcija i lako je pogriješiti pri odabiru željene funkcije. Postoji još nekoliko programskih alata sliĉnih Freemind-u, neki od njih su XMind, FreePlane, te SciPlore MindMapping. Svi imaju sliĉno suĉelje, kao i izgled mentalne mape koja se izraĊuje. 2.4.2. MindManager MindManager je takoĊer programska podrška za izradu mentalnih mapa, ali za razliku od FreeMind-a, nije besplatna. Na Slici 2.8 je prikazana mentalna mapa izraĊena u ovom programu. Slika 2.8: Mentalna mapa izraĊena u MindManager-u Uoĉene prednosti MindManager-a su: Razni gotovi predlošci za izradu projekata hijerarhijske strukture, što uvelike olakšava rad poĉetnicima, Preĉac za dodavanje grana je realiziran na naĉin da se samo klikne na mjesto na radnoj površini gdje želimo dodati granu, Mogućnost kreiranja interaktivne prezentacije sadržaja mentalne mape, 24 Snalaženje po radnoj površini i izbornicima je vrlo jednostavno. Nedostatci: Preĉac za dodavanje novih grana dodaje grane samo na glavnu ideju, Veze meĊu granama se lako prekidaju, Neke funkcije izbornika su nejasne. 2.4.3. Bookvar Bookvar je besplatna programska podrška za izradu mentalnih mapa izraĊena sa alatom Visual Studio. Slika 2.9: Mentalna mapa izraĊena u Bookvar-u Prednosti: Jednostavan izgled i izbornici, omogućavaju lako upravljanje, Ne sadrži nepotrebne funkcije, ikone su lako shvatljive, dakle ne stvara nikakve zabune pri radu. Nedostatci: Oblik i boja grana su podešeni i ne mogu se mijenjati, Postoji mogućnost izbora izgleda mentalne mape, ali ograniĉena je na samo dva primjera, plavi i crni. Nema mnogo funkcionalnosti, možda ĉak i premalo u odnosu na druge programe. 25 2.4.4. Mind42 Mind42 je Internet aplikacija za izradu mentalnih mapa. Na Slici 2.10 je prikazan izgled mentalne mape napravljene sa ovom aplikacijom. Slika 2.10: Mentalna mapa izraĊena u Mind42 Prednosti: Vrlo jednostavan za korištenje i lagan za uĉenje, Nema nepotrebnih izbornika, tako da ne zahtjeva „traženje“ funkcija po ekranu, Klikom na centralnu misao, otvara se jednostavan izbornik koji nudi osnovne funkcije poput dodavanja grane, mijenjanja boje, brisanja. Izbornik je prikazan na Slici 2.11: Slika 2.11: Osnovne funkcije za upravljanje mentalnom mapom u programu Mind42 Nedostatci: Nemogućnost mijenjanja boje grana, Upadljiva crna alatna traka na vrhu radne površine koja nameće da pozovemo nove korisnike, Odabir crne i tamnoplave boje izbornika. 26 2.4.5. Mindomo Mindomo je Internet aplikacija bazirana na Flash tehnologiji. Izgledom podsjeća na Microsoft Office paket. Slika 2.12: Mentalna mapa izraĊena u Mindom-u Prednosti: Pri pokretanju aplikacije, postoji video sa uputama o radu, Spremanje i organizacija gotovih mentalnih mapa je bogata funkcijama kao što su razmjenjivanje sa drugim korisnicima, objava mapa na internetu, pretraživanje i filtriranje, Mindomo od svih navedenih programa jedini ima ugraĊenu funkciju razmjene iskustava meĊu korisnicima. Nedostatci: Radni prostor, za razliku od dosada opisanih aplikacija, radi velikih izbornika zauzima manje mjesta na ekranu. Zbog velikog broja funkcija, izrada mape može postati kompliciranija od oĉekivanog. Na lijevoj strani radne površine, izbornici su položeni vertikalno i teško je na prvi pogled zakljuĉiti o ĉemu se radi. 27 2.4.6. Wisemapping Wisemapping je takoĊer Internet aplikacija temeljena na tehnologijama HTML5 i Java programskom jeziku. Slika 2.13: Mentalna mapa izraĊena u Wisemapping-u Prednosti: Od svih navedenih primjera, Wisemapping je izgledom najprivlaĉniji i najlakši za izradu mentalnih mapa. Nema nepotrebnih funkcija, a one koje ima su dobro organizirane, lako uoĉljive i jednostavne za korištenje. Jednostavnost glavnog izbornika je prikazan na Slici 2.14: Slika 2.14: Izbornik programa Wisemapping Iako ovu aplikaciju smatram najboljom od svih navedenih, ima dva velika nedostataka, a to su: Mogućnost dodavanja novih grana samo na glavnu granu, dakle nisam uspjela do kraja izraditi mentalnu mapu koja ima više od jednog nivoa, Nemogućnost promjene boje grane, što je vrlo bitno kod mentalnih mapa. 28 3. Eksperimentalni dio U ovom dijelu rada će korištenjem Internet tehnologija biti izraĊena Internet aplikacija za izradu mentalnih mapa. Izgled aplikacije je odabran temeljem uoĉenih prednosti i nedostataka opisanih programa za izradu mentalnih mapa. Važne karakteristike u izboru izgleda su olakšavanje rada korisnicima u smislu jednostavnosti i brzine pri izradi mentalnih mapa, te jednostavna radna površina, radi lakšeg snalaženja. Cilj ovog eksperimentalnog dijela rada je napraviti aplikaciju za izradu mentalnih mapa koja će pojednostavniti i olakšati korisnicima izradu mentalnih mapa, u svrhu dijeljenja znanja. Mentalna mapa bi trebala imati osnovne funkcionalnosti kao što su: Izbornici za upravljanje dokumentom: kreiranje, otvaranje postojećeg, spremanje i zatvaranje dokumenta; Mogućnost upravljanja osnovnim stilovima kao što su mijenjanje boje grane, teksta i veliĉine fonta; Jednostavan naĉin dodavanja novih grana i podgrana, Jednostavno upravljanje mentalnom mapom i prostorom za crtanje. S obzirom da je važna karakteristika mentalne mape razliĉita boja pojedinih grana, ideja je da se boje na grane automatski primjenjuju pri samom dodavanju grane, a da se takoĊer po potrebi mogu i promijeniti. Time bi se skratilo vrijeme ureĊivanja mentalne mape. Radi kompliciranosti izvedbe, rješenje je temeljeno na otvorenom kodu. Otvoreni kod (eng. Open source) je onaj kod koji je objavljen i dostupan javnosti, te dopušta kopiranje, mijenjanje i ponovnu distribuciju, bez plaćanja naknade. Razvija se suradnjom zajednice, koja se sastoji od individualnih programera kao i velikih organizacija. 29 3.1. Odabrane tehnologije Internet tehnologije su odabrane prvenstveno iz razloga sve veće mobilnosti ljudi – internet stranici se može pristupiti s bilo kojeg mjesta u bilo koje vrijeme i neovisna je o platformi. Drugi razlog je što nema nepotrebnog gubljenja vremena za skidanje i instalaciju programa, što opet podrazumijeva brži pristup aplikaciji. Izrada internet tehnologijom takoĊer drugim ljudima omogućava lakši pristup neĉijoj mentalnoj mapi u svrhu dijeljenja znanja. Za osnovni prikaz sadržaja korišten je HTML5, iz razloga što ima veće mogućnosti od HTML4, te je s potrebnim predznanjem vrlo jednostavan za uĉenje. Za samu izradu aplikacije u smislu kodiranja, korišten je JavaScript zajedno sa bibliotekom jQuery i njenim dodacima, te JSON format za pojedine funkcije. 3.1.1. HTML5 HTML5 je jezik za strukturiranje i prikaz sadržaja za World Wide Web, temeljne tehnologije interneta. To je peta revizija HTML (eng. HyperText Markup Language) standarda koji je kreiran 1990.g., a 1997.g. standardiziran kao HTML4, koja je još uvijek u razvoju i još nije službena, ali ju ipak podržava većina Internet pretraživaĉa. Cilj HTML5 jezika je spajanje HTML4, XHTML, te JavaScript jezika [14]. HTML5 je rezultat suradnje W3C1 i WHATWG2 zajednica. Slika 3.1: HTML5 logo HTML5 je nastao kao posljedica opažanja da su HTML i XHTML mješavina znaĉajki sa razliĉitim specifikacijama. To je pokušaj definiranja jedinstvenog jezika koji može biti napisan i u HTML i XHTML sintaksi. 1 W3C (World Wide Web Consortium) je internacionalna zajednica za razvijanje internet standarda. http://www.w3.org/ 2 WHATWG (Web Hypertext Application Technology Working Group) je zajednica za razvoj HTML-a i povezanih tehnologija. http://www.whatwg.org/ 30 Za razliku od ranijih poboljšanja HTML-a, nove specifikacije daju mnogo bolji pogled na ono što je potrebno za razvoj Internet stranica i web programiranje. HTML5 se uĉinkovito može podijeliti na sljedeće segmente [15]: Osnovno strukturiranje Internet stranice, Vizualni prikazi, Grafiĉki alati, Bogata multimedijska podrška i Poboljšanja JavaScript-a. Osnovna znaĉajka HTML5 jezika je pojednostavljenje i izbjegavanje nepotrebne kompleksnosti. Na primjer, DOCTYPE element koji definira tip dokumenta, u HTML4 je bio : <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">, dok je u HTML5 DOCTYPE element pojednostavljen na: <!DOCTYPE html>. Isto tako, deklaracija znakova u HTML4 je bila: <meta http-equiv="Content-Type" content="text/html; charset=utf8">, a u HTML5 je pojednostavljena na: <meta charset="utf-8">. HTML5 uvodi nove elemente radi lakše kontrole koda. Novi elementi pokrivaju sljedeće funkcije: Podjelu sadržaja Internet stranice na „blokove“, Upravljanje multimedijom i Strukturiranje formi. 31 Podjela sadržaja Internet stranice na blokove u HTML-u se tradicionalno postiže korištenjem <DIV> elementa ili kompleksnim tablicama. Novi elementi omogućavaju jednostavno umetanje dijelova sadržaja u Internet stranicu. TakoĊer su imenovani na naĉin da se lako može zakljuĉiti što se postiže njihovom upotrebom. Neki od elemenata za osnovnu strukturu stranice su: <HEADER>: zaglavlje Internet stranice. <SECTION>: element koji zaokružuje znaĉajan dio stranice, na isti naĉin kao što je poglavlje znaĉajan dio knjige. <ARTICLE>: koristi se za identificiranje sadržaja Internet stranice. <ASIDE>: uloga ovog elementa je opis sadržaja koji nije dio glavnog sadržaja Internet stranice, ali je povezan s njim. Nalazi se sa strane. <FOOTER>: podnožje Internet stranice koje najĉešće ukljuĉuje izjavu o zaštiti prava (eng. copyright). <NAV>: identificira grupu poveznica koje zajedno tvore navigaciju Internet stranice. Uloga ovih elemenata je poboljšani opis odreĊenih dijelova dokumenta. Može se usporediti sa pisanjem dokumenta u Microsoft Office Word-u: tipiĉan dokument se sastoji od dijelova sadržaja koji se mogu podijeliti u odlomke, zaglavlje i podnožje. Slika 3.2: Elementi za osnovnu strukturu stranice 32 Kao podršku upravljanja multimedijom, HTML5 je uveo dva nova elementa, <VIDEO> i <AUDIO>, koji omogućavaju funkcije automatskog pokretanja, kontrolu vezanu za pauziranje, veliĉinu i širinu slike, te ponavljanje prikaza. Ovim elementima se upravlja pomoću JavaScript-a. Promjena vezana za forme je vezana za nove tipove atributa unutar <INPUT> elementa. Neki od njih su: <input type=“search”>: specificiranje elementa pretrage, <input type=“color”>: konverzija unosa u vizualni izbor boje, <input type=“tel”>: formatiranje unosa u telefonski broj, <input type=“url”>: specifikacija web adrese, <input type=“email”>: specifikacija e-mail adrese. Osim podrške izgledu web stranice, multimediji i upravljanju formama, HTML5 je uveo i nove znaĉajke vezane za API [16]. API (eng. Application Programming Interface) je odreĊeni skup pravila i specifikacija koji nudi suĉelje za komunikaciju izmeĊu razliĉitih programa i olakšava njihovu interakciju, sliĉno naĉinu na koji korisniĉko suĉelje olakšava interakciju izmeĊu ljudi i raĉunala. API može biti kreiran za aplikacije, biblioteke, operativne sustave itd., kao naĉin definiranja njihovog vokabulara [17]. Kada se koristi u kontekstu razvoja Internet stranica, API je definiran kao set HTTP poruka o zahtjevima, kao i prikladnim odgovorima na te zahtjeve, te je obiĉno u XML (eXtensible Markup Language) ili JSON (JavaScript Object Notation) formatu. Nove API znaĉajke HTML-a 5 znaĉajne za ovaj rad su: Canvas i Spremište podataka (eng. Web Storage). Canvas omogućava dinamiĉno stvaranje i generiranje grafike, tablica, slika i animacija. Korištenjem Canvas-a na Internet stranici, kreira se pravokutnik kojemu se može specificirati željena visina, širina i ostali atributi poput boje pozadine, rubova itd. Manipuliranjem Canvas-om pomoću JavaScript-a omogućeno je dodavanje grafiĉkih ili 33 tekstualnih prikaza, animacija, te crtanje. U nastavku su navedena dva primjera korištenja Canvas-a. <canvas height="200" width="200"></canvas> Kod 3.1: Dodavanje Canvas elementa koji kreira pravokutnik visine i širine 200px <canvas id="diagonal" style="border: 1px solid;" width="200" height="200"></canvas> <script> function drawDiagonal() { var canvas = document.getElementById('diagonal'); var context = canvas.getContext('2d'); context.beginPath(); context.moveTo(70, 140); context.lineTo(140, 70); context.stroke(); } window.addEventListener("load", drawDiagonal, true); </script> Kod 3.2: JavaScript kod za crtanje dijagonalne linije unutar Cavas elementa Slika 3.3: Canvas i dijagonalna linija kao rezultat Koda 3.2 Canvas objektu se pristupa referencom na odreĊenu ID vrijednost koja je u ovom sluĉaju „diagonal“. Zatim se kreiraju context varijable i poziva se getContext metoda koja prosljeĊuje pozvani Canvas. Dijagonalna linija se kreira pomoću tri metode: beginPath(), moveTo() i lineTo(), koje prosljeĊuju poĉetnu i krajnju koordinatu linije, a tek se onda metodom context.stroke() crta linija. Na sliĉne naĉine se mogu primijeniti razne transformacije, kao što su mijenjanje boje linija, pozadine, crtanje krivulja, umetanje slika, teksta, raznih uzoraka, sjenĉanje itd. Može 34 se zakljuĉiti da HTML5 Canvas API pruža jednostavan ali uĉinkovit naĉin za kreiranje i modificiranje izgleda Internet aplikacija. Druga API znaĉajka važna za ovaj rad je HTML5 spremnik. Trajno spremište podataka je podruĉje gdje su desktop aplikacije oduvijek imale prednost nad Internet aplikacijama. Njima operativni sustav pruža mjesta za spremanje i vraćanje podataka, kao što su registry, INI datoteke, XML datoteke ili druga mjesta ovisno o platformi. Za Internet aplikacije su napravljeni cookie-ji koji se mogu koristiti za trajno spremanje male koliĉine podataka. No oni imaju nekoliko velikih nedostataka: Ukljuĉeni su u svaki HTTP zahtjev, te usporavaju Internet aplikaciju nepotrebnim stalnim prijenosom istih podataka; Šalju nezaštićene podatke preko interneta i Ograniĉeni su na 4 KB podataka, što je dovoljno za usporavanje aplikacije, ali nedovoljno da bi bilo korisno za spremanje podataka. HTML5 spremnik koji se ĉesto naziva i DOM spremnik, je API koji olakšava ĉuvanje podataka. Dopušta spremanje veće koliĉine podataka na klijentskoj strani, podaci ostaju saĉuvani i nakon osvježavanja stranice, te se ne šalju poslužitelju, dakle ne usporavaju Internet aplikaciju. Dakle, sada se podaci mogu spremiti direktno u Internet pretraživaĉ na strani klijenta, te im se može pristupiti u bilo kojem trenutku, ĉak i nakon zatvaranja Internet pretraživaĉa. Važno je napomenuti da HTML5 spremnik podržavaju svi Internet pretraživaĉi. Postoje dvije vrste spremnika, to su sessionStorage i localStorage. Razlika je u tome što sessionStorage ĉuva podatke samo dok se pretraživaĉ ne zatvori, a localStorage ih trajno ĉuva, ĉak i pri ponovnom pokretanju Internet pretraživaĉa. Ova razlika je prikazana u Tablici 3.1: 35 sessionStorage localStorage Vrijednosti su spremljene samo Vrijednosti ostaju spremljene i dok je otvoren pretraživaĉ u kojem nakon zatvaranja pretraživaĉa. se nalaze. Vrijednostima se može pristupiti Vrijednosti su vidljive samo unutar prozora u kojem su kreirane. preko bilo kojeg prozora u istom pretraživaĉu. Tablica 3.1: Razlika izmeĊu sessionStorage i localStorage HTML5 spremnik je, jednostavno reĉeno, naĉin na koji Internet stranice lokalno spremaju key/value parove, unutar klijentskog Internet pretraživaĉa. Dakle, podaci se spremaju pomoću kljuĉa s odreĊenim imenom, te se na isti naĉin i vraćaju. Podaci mogu biti bilo kojeg tipa koji je podržan od strane JavaScript-a, a spremaju se u obliku znakova (stringova). Za spremanje podataka koji nisu znakovi, potrebna je funkcija parse() koja će pretvoriti odreĊene podatke u oblik prikladan za JavaScript [18]. HTML5 spremnik ima odreĊene funkcije i atribute koji su detaljnije opisani u nastavku, a to su: Atribut length specificira koliko je parova vrijednosti kljuĉa trenutno spremljeno u storage objektu. Key(index) je funkcija koja dopušta vraćanje danog kljuĉa. Prvi kljuĉ ima index(0), a zadnji ima index(length-1). Kada je kljuĉ jednom vraćen, može se koristiti za pristup njegovoj odgovarajućoj vrijednosti. Kljuĉevi zadržavaju svoje indekse sve dok su prisutni svi njegovi prethodnici, u suprotnom se mijenjaju. getItem(key) funkcija je jedan od naĉina vraćanja vrijednosti danog kljuĉa. Drugi naĉin je referenca na kljuĉ kao polje indeksa u storage objektu. U oba sluĉaja, ako kljuĉ ne postoji u spremniku, bit će vraćena vrijednost null. setItem(key,value) funkcija postavlja u spremnik vrijednost odreĊenog kljuĉa ili zamjenjuje postojeću vrijednost ako postoji pod istim imenom. removeItem(key) funkcija uklanja kljuĉ odreĊene vrijednosti iz spremnika. 36 Clear() funkcija uklanja sve vrijednosti iz liste spremnika. 3.1.2. JavaScript JavaScript je objektno orijentirani, skriptni programski jezik koji se izvršava na klijentskoj strani u Internet pretraživaĉu. Pruža poboljšano korisniĉko suĉelje i dinamiĉke Internet stranice. Originalno je razvijen od strane Brendana Eich-a iz tvrtke Netscape pod imenom Mocha, zatim je preimenovan u LiveScript, a na kraju u JavaScript. LiveScript je bilo službeno ime jezika kada ga je Netscape Navigator 2.0 objavio u rujnu 1995.g. kao beta verziju, no preimenovan je u JavaScript u prosincu iste godine kao posljedica dogovora izmeĊu Sun Microsystems i Netscape-a [19]. Jedna od najĉešćih zabluda je da je JavaScript pojednostavljena verzija Java programskog jezika koji je kreiran od strane Sun Microsystems-a. Sintaksno, JavaScript podsjeća na Javu u programskim konstrukcijama kao što su npr. while petlja ili && operator. No ova dva jezika nisu povezana, iako su sintaksno sliĉni te se oba mogu interpretirati u Internet pretraživaĉu. Osnovni JavaScript jezik podržava primitivne vrste podataka kao što su brojevi, znakovi i Boolean vrijednosti. TakoĊer ukljuĉuje podršku za polja, datume i objekte za regularne izraze. JavaScript se izvršava na klijentskoj strani jer je njegov prevoditelj ukljuĉen u Internet pretraživaĉ. Ovo je i najĉešći oblik upotrebe JavaScript-a, stoga je proširen sa objektima koji dopuštaju skripte za interakciju sa korisnicima i kontroliranje Internet pretraživaĉa i dokumenata u njemu. Ovako orijentirani jezik kombinira mogućnosti skriptiranja JavaScript interpretera sa Document Object Model-om (skraćeno DOM) koji je definiran od strane Internet pretraživaĉa. Dokumenti mogu sadržavati skripte, a one mogu koristiti DOM za mijenjanje dokumenata ili kontroliranje Internet pretraživaĉa koji prikazuje dokument. Drugim rijeĉima, JavaScript daje dinamiku statiĉnim Internet sadržajima, a u nastavku je navedeno nekoliko primjera [20]: Stvaranje vizualnih efekata koji vode korisnika i pomažu mu u navigaciji na Internet stranici (npr. image rollovers), Sortiranje stupaca tablice za pojednostavljenje pretrage, 37 Sakrivanje odreĊenog sadržaja i njegovo postupno prikazivanje korisniku, Direktna komunikacija s poslužiteljem što omogućava prikaz novih informacija bez osvježavanja stranice. Osim što se koristi u Internet pretraživaĉima, JavaScript može biti ukljuĉen i u druge aplikacije, tako da pruži korisnicima podršku za prilagoĊavanje aplikacije svojim potrebama. Kao primjer, Mozilla Firefox koristi JavaScript skripte za kontroliranje korisniĉkog suĉelja. Postoje dva JavaScript interpretera otvorenog koda: SpiderMonkey napravljen u C programskom jeziku koji služi za dodavanje skripti u C aplikaciju i Rhino napravljen u Javi za dodavanje skripti u Java aplikaciju. 3.1.3. JQuery Za jednostavniji razvoj Internet aplikacija pomoću JavaScripta, postoji niz biblioteka koje pružaju sve potrebne funkcije i olakšavaju razvoj dinamiĉnih suĉelja. Biblioteke postoje od samog nastanka JavaScripta, a naglim razvojem tehnologije, korisnicima nude sve više mogućnosti. Gotovo sve JavaScript biblioteke su objavljene pod otvorenom licencom za distribuciju, upotrebu i mijenjanje. Jedna od takvih biblioteka korištena u ovom radu je jQuery. JQuery je JavaScript biblioteka dizajnirana za pojednostavljenje HTML skriptiranja na klijentskoj strani. Objavljena je 2006.g. u BarCamp-u NYC od strane John Resiga, a koristi ju više od 43% od 10.000 najposjećenijih web stranica, što vodi do zakljuĉka da je jQuery danas najpopularnija JavaScript biblioteka, iz jednostavnog razloga što je lagana za korištenje i zauzima malo memorije na raĉunalu. Otvorenog je koda pod MIT licencom3 i GNU javnom licencom4. 3 MIT licenca je otvorena licenca kreirana na Massachusetts Institute of Technology (MIT) koja dopušta ponovnu upotrebu koda pod postavljenim uvjetima. 4 GNU licenca (General Public License) je najpoznatija licenca za otvorenu programsku podršku, kreirana od strane Richarda Stallmana, a o kojoj se danas brine Free Software Foundation. 38 Sintaksa jQuery biblioteke je dizajnirana da bi olakšala navigaciju unutar dokumenta, selektiranje DOM elemenata, kreiranje animacija i dogaĊaja. TakoĊer dopušta proširivanje svojih funkcionalnosti pomoću dodataka (eng. plugins) za JavaScript biblioteke, koje omogućavaju stvaranje naprednih efekata. Ti dodaci pokrivaju veliki dio funkcionalnosti kao što su razne Internet usluge, mreže podataka, dinamiĉne liste, XML i XSLT alati, dogaĊaji itd. JQuery pruža razvoj dinamiĉkih web stranica i Internet aplikacija, uz minimalan broj linija koda, što znaĉi da je biblioteka mala, što je njena velika prednost [21]. JQuery biblioteka se nalazi u jednom JavaScript dokumentu, a sadrži sljedeće znaĉajke [22]: Selektiranje HTML elemenata: jQuery selektori omogućavaju manipulaciju i selektiranje HTML elemenata kao grupe ili kao jedinstvenog elementa. Manipulacija HTML elementima: jQuery sadrži metode (funkcije) za manipulaciju i mijenjanje HTML elemenata i atributa. Manipulacija CSS-om: css() metoda koja može izvršavati tri razliĉita zadatka, a to su vraćanje trenutne vrijednosti, postavljanje novog svojstva i vrijednosti te postavljanje više svojstava i vrijednosti CSS elementima. HTML događaji: metode koje se koriste za registriranje ponašanja koja će pretraživaĉ poprimiti u interakciji s korisnikom, te manipulacija ovim ponašanjima. JavaScript efekti i animacije: jQuery pruža nekoliko naĉina za dodavanje animacija Internet stranici. Ukljuĉene su jednostavne, standardne animacije koje se ĉesto koriste, kao i mogućnost njihova mijenjanja u druge svrhe. Osnovna sintaksa jQuery biblioteke glasi: $(selector).action() Sastoji se od: - Znaka dolar ($) koji definira jQuery, - Selektora (selector) za traženje HTML elemenata po imenu, imenu atributa ili sadržaju, i 39 - jQuery akcije (action()) koje će biti izvršena nad elementima. 3.1.4. JSON JSON ili JavaScript Object Notation je pojednostavljeni otvoreni standard dizajniran za razmjenu podataka. Izveden je iz JavaScript jezika, baziran na tekstu, jednostavan za ĉitanje i pisanje, neovisan o platformi, a služi za prikaz jednostavnih struktura podataka i objekata. Iako je povezan s JavaScript-om i najĉešće se zajedno koriste, samostalan je jezik. JSON format je izvorno specificirao i popularizirao Douglas Crockford, a opisan je u RFC 4627 dopisu, koji daje informacije Internet zajednici, no ne odreĊuje standarde. Službeni format JSON datoteke na Internetu (eng. Internet media type) je application/json, a ekstenzija tekstualne datoteke je *.json. JSON format se ĉesto koristi za konverziju i prijenos strukturiranih podataka preko mreže. Primarno se koristi za prijenos podataka izmeĊu poslužitelja i Internet aplikacije, kao alternativa XML-u [23]. JSON je baziran na dvije strukture [24]: NeureĊena lista name/value parova. U razliĉitim jezicima, ovo je realizirano kao objekt, struktura, itd. UreĊena lista vrijednosti. U većini jezika, ovo je realizirano kao polje, vektor, lista ili slijed. Drugim rijeĉima, JSON podržava osnovne tipove podataka kao što su brojevi, znakovi, Boolean vrijednosti, polja, objekte, te null vrijednost. Ne podržava druge tipove podataka kao što su datumi, regularni izrazi, funkcije itd. Oni moraju biti prezentirani u nekom drugom formatu a zatim konvertirani na univerzalan naĉin da ga razumiju oba jezika. S obzirom da je JSON izveden iz JavaScript-a, moguće ga je prevesti u JavaScript objekt, pozivom eval() funkciji. No ipak se preporuĉuje korištenje JSON prevoditelja koji je uĉinkovitiji i sigurniji, a takoĊer je ukljuĉen u moderne Internet pretraživaĉe kao što su Mozilla Firefox 4 i Internet Explorer 8. Kako je JSON alternativa XML-u, primjereno je usporediti ih. XML je tekstualni zapis izveden iz SGML (Standard Generalized Markup Language). U usporedbi sa SGML-om, 40 XML je jednostavan, no u usporedbi s XML-om, jednostavniji je JSON, koji ima sve prednosti XML-a ali je uz to primjereniji za razmjenu podataka [25]. U Tablici 3.2 je prikazana detaljnija usporedba JSON-a i XML-a: Karakteristika Tipovi podataka XML JSON Za dodavanje tipova podataka Ima mogućnost prikaza potrebna je XML shema. strukturiranih podataka kroz polja i objekte Podrška za polja Koriste se dogovorom, npr. UgraĊena podrška za polja upotrebom vanjskog elementa koji modelira sadržaj polja kao unutarnje elemente. Podrška za Koriste se dogovorom, ĉesto kroz UgraĊena podrška za objekte objekte mješavinu atributa i elemenata preko name/value parova Podrška za null Zahtjeva upotrebu xsi:nil na Prepoznaje null vrijednosti elementima te uvoz odgovarajućih namespace-a Komentari Podržani i dostupni kroz API-je Nisu podržani Namespace Podržani, eliminiraju rizik od Nije podržano, više istih imena mogućnosti više istih imena i se izbjegava gniježĊenjem dopuštaju proširenje XML objekata ili korištenjem standarda prefiksa u imenu Kompleksno, zahtjeva veliki trud Jednostavno, pruža direktnije pri mapiranju podataka u XML mapiranje podataka; elemente i atribute Nedostatak je nepostojanje Formatiranje date/time funkcija 41 Karakteristika XML JSON Veličina Sintaksno duži Sažeta sintaksa; Prevođenje u Zahtjeva XML DOM Korištenjem eval() funkcije JavaScript implementaciju i dodatni kod Učenje Zahtjeva znanje XML sheme, Jednostavna tehnologija; XSLT-a, XML namespaces-a, Lak za uĉenje sa predznanjem DOM-a itd. JavaScript-a Tablica 3.2: Razlika izmeĊu XML-a i JSON-a U nastavku je, u svrhu usporedbe, naveden primjer JSON koda, te isti primjer u XML-u: JSON: {"menu": { "header": "Preglednik slika", "items": [ {"id": "Otvori"}, {"id": "OtvoriNovo", "label": "Otvori Novo"}, null, {"id": "Kvaliteta"}, {"id": "Pauziraj"}, null, {"id": "Pretraga"}, {"id": "Kopiraj"}, {"id": "SpremiKao", "label": "Spremi Kao…"}, null, {"id": "Pomoc"}, ] }} 42 XML: <menu> <header>Preglednik slika</header> <item action="Otvori" id="Otvori">Otvori</item> <item action="OtvoriNovo" id="OtvoriNovo">Otvori Novo</item> <separator/> <item action="Kvaliteta" id="Kvaliteta">Kvaliteta</item> <item action="Pauza" id="Pauza">Pauziraj</item> <separator/> <item action="Pretraga" id="Pretraga">Pretraga</item> <item action="Kopiraj" id="Kopiraj">Kopiraj</item> <item action="SpremiKao" id="SpremiKao">Spremi Kao…</item> <separator/> <item action="Pomoc" id="Pomoc">Pomoc</item> </menu> U ovom primjeru se može uoĉiti jednostavnost JSON koda u odnosu na XML, gdje su vrijednosti action i label potrebne samo ako su razliĉite od id vrijednosti, dok se kod XML-a ne smiju izostaviti. 43 3.2. Realizacija Upotrebom opisanih tehnologija, napravljena je aplikacija za izradu mentalnih mapa, koja je opisana u nastavku. Kao što je već spomenuto, na odabir izgleda i funkcionalnosti su utjecali prednosti i nedostatci postojećih programa za izradu mentalnih mapa. Radna površina treba biti jednostavna, gdje izbornici ne zauzimaju mnogo prostora, upravljanje izradom mentalne mape pojednostavljeno, kao i oblikovanje postojeće mape. Na Slici 3.4 je prikazana radna površina koja se sastoji od: Prostora za crtanje mentalne mape, Alatne trake, Statusne trake i Pomoćnih prozora koji služe za oblikovanje i navigaciju. Slika 3.4:Radna površina Za poĉetak rada dovoljno je pokrenuti aplikaciju, dakle novi dokument se otvara automatski, a sastoji se od glavne grane sa natpisom „Nova mapa“. Ukoliko se natpis na grani ne promijeni, ime spremljenog dokumenta će biti „Novi dokument“, dok će u drugom sluĉaju biti nazvan po tekstu glavne grane. 44 Alatna traka, koja je prikazana na Slici 3.5, na lijevoj strani sadrži osnovne funkcije za upravljanje dokumentom, koje ukljuĉuju kreiranje novog, otvaranje postojećeg, spremanje te zatvaranje dokumenta. Na desnoj strani se nalaze alati za izradu i upravljanje mapom: dodavanje i brisanje grane, poništavanje akcije, te kopiranje, rezanje i lijepljenje. Gumbi za poništavanje su onemogućeni sve dok korisnik ne napravi odreĊenu akciju. Slika 3.5: Alatna traka Na dnu radne površine nalazi se statusna traka, koja ima dva gumba za upravljanje pomoćnim prozorima, koji imaju mogućnost sakrivanja i pomicanja radi bolje preglednosti radne površine. Slika 3.6: Statusna traka Pomoćni prozor navigacije služi za zumiranje i premještanje mape po radnoj površini, dok prozor za oblikovanje sadrži funkcije za oblikovanje kao što su veliĉina, stil i boja teksta, te boja grana. Slika 3.7: Pomoćni prozori za navigaciju i oblikovanje Kreiranje nove grane se može izvršiti na dva naĉina: klikom na gumb „Dodaj“ u alatnoj traci, ĉime se automatski kreira nova grana odreĊene duljine, pozicije i boje, klikom na krug koji se nalazi u sredini glavne grane i njegovim povlaĉenjem do željenog mjesta na radnoj površini. Prelaskom pokazivaĉem miša preko razliĉitih grana, premješta se i krug te na taj naĉin dopušta jednostavno kreiranje nove grane. 45 Slika 3.8: Kreiranje nove grane Važna karakteristika ove aplikacije je automatska primjena razliĉitih boja na grane pri dodavanju grana. To uvelike olakšava ureĊivanje dokumenta, a po potrebi se ista boja može i promijeniti. Naravno, boja grane se automatski primjenjuje na sve njene nasljednike. Druga karakteristika je vezana za preĉace tipkovnice, koji su zamjerka postojećim programima za izradu mentalnih mapa. Stoga su preĉaci za tipkovnicu postavljeni kao: Dodaj – Insert, Izbriši – Delete, Kopiraj – Ctrl+C itd. Gotova mentalna mapa se sprema u HTML5 spremnik unutar Internet pretraživaĉa, te ostaje spremljena sve dok je se ne izbriše, preko izbornika za otvaranje postojećih mapa koji sadrži opcije za otvaranje ili brisanje: Slika 3.9: Izbornik za otvaranje postojeće mape Na Slici 3.10 je prikazana mentalna mapa izraĊena u opisanom programu: 46 Slika 3.10: Mentalna mapa 47 3.3. Primjeri koda za specifične zadaće Crtanje mentalne mape se realizira na naĉin da se korisniku omogući interakcija sa mapom. Drugim rijeĉima, prostor za crtanje mora reagirati na korisnikove akcije poput dodavanja nove grane, brisanja postojeće grane, klikanje na granu itd. 3.3.1. Označavanje grane Pri oznaĉavanju grane, prvo se provjerava dali je grana već oznaĉena, jer nema svrhe dva puta oznaĉavati istu. U sluĉaju da nije, prvo se ukloni oznaka sa prethodno oznaĉene grane, a zatim se oznaĉi željena grana, te se objavljuje dogaĊaj da je grana oznaĉena. var selectNode = function(node) { if (selectedNode === node) { return; } if (selectedNode) { view.unhighlightNode(selectedNode); } view.highlightNode(node); selectedNode = node; eventBus.publish(mindmaps.Event.NODE_SELECTED, node); }; Kod 3.3: Oznaĉavanje grane Prilikom izvršavanja funkcije za oznaĉavanje grane, pozivaju se dvije funkcije: highlightNode() i unhighlightNode(), koje kao varijablu imaju jQuery objekt koji sadrži tekst napisan na grani, te identifikaciju grane, a služe za dodavanje i uklanjanje klase „selected“, dakle sudjeluju u oznaĉavanju grane. this.highlightNode = function(node) { var $text = $getNodeCaption(node); $text.addClass("selected"); }; this.unhighlightNode = function(node) { var $text = $getNodeCaption(node); $text.removeClass("selected"); }; Kod 3.4: Funkcije highlightNode() i unhighlightNode() 48 3.3.2. Kreiranje grane Klikom na gumb „Dodaj“, poziva se funkcija za kreiranje grane sa automatskom pozicijom. Potrebno je provjeriti dali se nova grana dodaje na glavnu ili sporednu granu, jer o tome ovisi izbor boje. S obzirom da glavna grana ima null vrijednost, odnosno nema vrijednost, provjera dali je prethodna grana glavna, vrši se njenom usporedbom sa null: mindmaps.Node.prototype.isRoot = function() { return this.parent === null; }; U sluĉaju da je prethodna grana glavna, nova grana će imati sluĉajno odabranu boju, odnosno: var branchColor = mindmaps.Util.randomColor(); dok će u drugom sluĉaju naslijediti boju glavne grane: var branchColor = parent.branchColor; TakoĊer, u sluĉaju da prethodna grana nije glavna, potrebno je provjeriti dali već ima nasljednika, jer o tome ovisi pozicija nove grane. To se vrši usporedbom prethodne grane sa brojem nasljednika: mindmaps.Node.prototype.isLeaf = function() { return this.children.size() === 0; }; Ako prethodna grana nema nasljednika, nova se dodaje u sredinu, dok se u drugom sluĉaju dodaje s pomakom prema gore ili dolje. Sliĉno je kod odabira duljine grane, koji se takoĊer odreĊuje Math.random() metodom, jedina razlika je, da će grana biti dulja u sluĉaju ako je prethodna grana glavna. mindmaps.action.CreateAutoPositionedNodeAction = function(parent) { if (parent.isRoot()) { var branchColor = mindmaps.Util.randomColor(); var leftRight = Math.random() > 0.49 ? 1 : -1; var topBottom = Math.random() > 0.49 ? 1 : -1; var x = leftRight * (100 + Math.random() * 250); var y = topBottom * (Math.random() * 250); } else { var branchColor = parent.branchColor; 49 var leftRight = parent.offset.x > 0 ? 1 : -1; var x = leftRight * (150 + Math.random() * 10); if (parent.isLeaf()) { var max = 5, min = -5; } else { var max = 150, min = -150; } var y = Math.floor(Math.random() * (max - min + 1) + min); } var node = new mindmaps.Node(); node.branchColor = branchColor; node.shouldEditCaption = true; node.offset = new mindmaps.Point(x, y); return new mindmaps.action.CreateNodeAction(node, parent); }; Kod 3.5: Kreiranje nove grane s automatskom pozicijom Grana koja će biti kreirana, definirana je kroz konstruktor za stablo mape koje se sastoji od grana: svaka nova grana ima identifikacijsko ime, kao roditelju joj je vrijednost postavljena na null, a takoĊer nema ni nasljednike: mindmaps.NodeMap = function() { this.nodes = {}; this.count = 0; }; Nova grana ima natpis „Ideja“, slovima veliĉine 15px i crne boje, kao što je prikazano na Slici 3.11: Slika 3.11: Kreiranje nove grane mindmaps.Node = function() { this.id = mindmaps.Util.getId(); this.parent = null; 50 this.children = new mindmaps.NodeMap(); this.text = { caption : "Ideja", font : { style : "normal", weight : "normal", decoration : "none", size : 15, color : "#000000" } }; this.offset = mindmaps.Point.ZERO; this.collapseChildren = false; this.branchColor = "#000000"; }; Kod 3.6: Konstruktor za novu granu Funkcija opisana u Kodu 3.5 zapravo ne kreira novu granu, već samo odreĊuje kako i gdje će ona biti pozicionirana, te s kojim vrijednostima. Na kraju, kada je sve postavljeno na željene vrijednosti, poziva se CreateNodeAction(node, parent) funkcija za kreiranje nove grane: mindmaps.action.CreateNodeAction = function(node, parent){ this.execute = function(context) { var map = context.getMindMap(); map.addNode(node); parent.addChild(node); }; this.event = [ mindmaps.Event.NODE_CREATED, node ]; this.undo = function() { return new mindmaps.action.DeleteNodeAction(node); }; }; Kod 3.7: Kreiranje nove grane Da bi se u mapu dodala nova grana, varijabla map je deklarirana u kontekstu funkcije getMindMap(), koja vraća dokument mentalne mape: this.getMindMap = function() { if (document) { 51 return document.mindmap; } }; a zatim unutar njega dodaje novu granu pozivom metodama map.addNode(node); i parent.addChild(node): mindmaps.MindMap.prototype.addNode = function(node){ this.nodes.add(node); var self = this; node.forEachDescendant(function(descendant) { self.nodes.add(descendant); }); }; mindmaps.Node.prototype.addChild = function(node) { node.parent = this; this.children.add(node); }; Na kraju se objavljuje dogaĊaj da je nova grana kreirana this.event = [ mindmaps.Event.NODE_CREATED, node]. Još je potrebno osigurati akciju koja će se dogoditi ukoliko se dodavanje nove grane poništi, a to je poziv funkciji DeleteNodeAction(node);, opisanoj u Kodu 3.8, koja ima suprotni uĉinak od funkcije CreateNodeAction(node, parent) za dodavanje nove grane. 3.3.3. Brisanje grane Brisanje grane se može vršiti na dva naĉina: klikom na gumb „Izbriši“ na alatnoj traci, ili preko tipkovnice, kraticom Delete. U oba sluĉaja se objavljuje dogaĊaj: eventBus.subscribe(mindmaps.Event.DELETE_NODE, function() { var action = new mindmaps.action.DeleteNodeAction(self.selectedNode); self.executeAction(action); }); koji traži izvršenje akcije brisanja grane: mindmaps.action.DeleteNodeAction = function(node) { var parent = node.getParent(); this.execute = function(context) { if (node.isRoot()) { 52 return false; } var map = context.getMindMap(); map.removeNode(node); }; this.event = [ mindmaps.Event.NODE_DELETED, node, parent ]; this.undo = function() { return new mindmaps.action.CreateNodeAction(node, parent); }; }; Kod 3.8: Brisanje grane Funkcija DeleteNodeAction(node) prvo vrši provjeru dali je grana koju želimo obrisati glavna, na isti naĉin kao što je opisano u prethodnom primjeru, dakle usporedbom grane sa null vrijednosti. Ukoliko želimo izbrisati glavnu granu, funkcija vraća Boolean vrijednost false, iz razloga što se glavna grana ne može izbrisati. Logiĉki se može zakljuĉiti da grana koju brišemo mora imati roditelja, stoga se roditelj traži funkcijom koja vraća traženog roditelja: mindmaps.Node.prototype.getParent = function() { return this.parent; }; Naravno, kao i u prošlom primjeru, varijabla map je deklarirana u kontekstu funkcije getMindMap(), koja vraća dokument mentalne mape, unutar kojega se izvršava akcija brisanja grane, map.removeNode(node);: mindmaps.MindMap.prototype.removeNode = function(node) { var parent = node.parent; parent.removeChild(node); var self = this; node.forEachDescendant(function(descendant) { self.nodes.remove(descendant); }); this.nodes.remove(node); }; Ovo je zadnja funkcija koja zapravo uklanja granu iz mape. Važno je uoĉiti da brisanjem grane, takoĊer moramo obrisati i sve njene potomke, ako ih ima: 53 mindmaps.Node.prototype.removeChild = function(node) { node.parent = null; this.children.remove(node); }; mindmaps.Node.prototype.forEachDescendant = function(func) { this.children.each(function(node) { func(node); node.forEachDescendant(func); }); }; 3.3.4. Kopiranje, rezanje i lijepljenje grane Pri izradi mentalne mape, potreban je meĊuspremnik za akcije kopiranja, rezanja i lijepljenja grana, koji je u ovom sluĉaju ClipboardController: mindmaps.ClipboardController = function(eventBus, appModel) { var node = null; function doCopy() { var selected = appModel.selectedNode; node = selected.clone(); } function doCut() { var selected = appModel.selectedNode; node = selected.clone(); var action = new mindmaps.action.DeleteNodeAction(selected); appModel.executeAction(action); } function doPaste() { if (!node) { return; } var selected = appModel.selectedNode; var action = new mindmaps.action.CreateNodeAction(node.clone(), selected); appModel.executeAction(action); } eventBus.subscribe(mindmaps.Event.COPY_NODE, doCopy); 54 eventBus.subscribe(mindmaps.Event.CUT_NODE, doCut); eventBus.subscribe(mindmaps.Event.PASTE_NODE, doPaste); }; Kod 3.9: MeĊuspremnik za funkcije kopiranja, rezanja i lijepljenja Kod kopiranja, rezanja i lijepljenja, pozivaju se funkcije doCopy(), doCut() i doPaste(). Razlika izmeĊu funkcija doCopy() i doCut() je to što funkcija doCopy() samo „klonira“ oznaĉenu granu, dok funkcija doCut() uz to što „klonira“ oznaĉenu granu, uz to još poziva akciju DeleteNodeAction(selected);, opisanu u Kodu 3.8, za njeno brisanje. Kao nadopuna ovim funkcijama, potrebna je i funkcija doPaste(), bez koje kopiranje ne bi imalo smisla, a rezanje bi imalo isti uĉinak kao i brisanje, dakle ne bi bilo potrebno. Funkcija doPaste() funkcionira na naĉin da poziva funkciju za kreiranje nove grane: CreateNodeAction(node.clone(),selected);, opisanu u Kodu 3.7, no sa drugim parametrima, dakle ona ponovo kreira granu koja je bila izrezana, na naĉin da kreira njenog „klona“. Samo „kloniranje“ grana, omogućava sljedeća funkcija: mindmaps.Node.prototype.clone = function() { var clone = new mindmaps.Node(); var text = { caption : this.text.caption }; var font = { weight : this.text.font.weight, style : this.text.font.style, decoration : this.text.font.decoration, size : this.text.font.size, color : this.text.font.color }; text.font = font; clone.text = text; clone.offset = this.offset.clone(); clone.collapseChildren = this.collapseChildren; clone.branchColor = this.branchColor; 55 this.forEachChild(function(child) { var childClone = child.clone(); clone.addChild(childClone); }); return clone; }; Kod 3.10: Funkcija za „kloniranje“ grane Ova funkcija kreira novu granu var clone = new mindmaps.Node();, konstruktorom iz Koda 3.6, na naĉin da ona poprimi sve parametre kopirane grane: isti tekst, oblik teksta, boju i duljinu grane, a u sluĉaju da kopirana grana ima nasljednike, oni su takoĊer ukljuĉeni u izradu nove grane. Bit je da nova grana izgleda identiĉno originalnoj grani, što znaĉi da će, ako su prvotnoj grani nasljednici bili skriveni, bit će skriveni i u novoj grani. 3.3.5. Kreiranje novog dokumenta AppController je model aplikacije koji upravlja dogaĊajima vezanima za upravljanje dokumentom, u ovom sluĉaju kreiranjem dokumenta. Objavljuje dogaĊaj kreiranja novog dokumenta te poziva funkciju doNewDocument(), koja prvo zatvara postojeći dokument (ako je prisutan) , a zatim poziva NewDocumentPresenter, funkciju koja je opisana u Kodu 3.12, za kreiranje novog dokumenta: mindmaps.AppController = function(eventBus, appModel) { eventBus.subscribe(mindmaps.Event.NEW_DOCUMENT, doNewDocument); function doNewDocument() { var doc = appModel.getDocument(); if (doc) { eventBus.publish(mindmaps.Event.CLOSE_DOCUMENT); eventBus.publish(mindmaps.Event.DOCUMENT_CLOSED,doc); } var presenter = new mindmaps.NewDocumentPresenter(eventBus, appModel, new mindmaps.NewDocumentView()); presenter.go(); } 56 }; Kod 3.11: Model aplikacije za upravljanje dogaĊajem kreiranja novog dokumenta mindmaps.NewDocumentPresenter = function(eventBus, appModel, view) { this.go = function() { var doc = new mindmaps.Document(); appModel.setDocument(doc); eventBus.publish(mindmaps.Event.DOCUMENT_CREATED, doc); }; }; Kod 3.12: Kreiranje novog dokumenta Funkcija NewDocumentPresenter mindmaps.Document(), konstruktor postavlja koji varijablu novom doc dokumentu kao kreira novi UUID (Universally Unique IDentifier), daje mu naziv „Novi dokument“, te pamti datume njegova kreiranja i modificiranja. TakoĊer mu postavlja dimenzije. mindmaps.Document = function() { this.id = mindmaps.Util.createUUID(); this.title = "Novi dokument"; this.mindmap = new mindmaps.MindMap(); this.dates = { created : new Date(), modified : new Date() }; this.dimensions = new mindmaps.Point(4000, 2000); }; Kod 3.13: Konstruktor novog dokumenta Kreirani dokument se postavlja u varijalbu doc: this.setDocument = function(doc) { document = doc; }; te se nakon toga objavljuje dogaĊaj: eventBus.publish(mindmaps.Event.DOCUMENT_CREATED, doc); koji uzrokuje kreiranje kontrola za poništavanje akcija createUndoManager();, omogućavanje spremanja dokumenta, view.enableSaveButton();, te prikaz nove 57 mentalne mape koja se sastoji od glavne grane koja ima postavljene dimenzije, centrirana je, te je oznaĉena da bi se mogao promijeniti njen sadržaj: function showMindMap(doc) { view.setZoomFactor(zoomController.DEFAULT_ZOOM); var dimensions = doc.dimensions; view.setDimensions(dimensions.x, dimensions.y); var map = doc.mindmap; view.drawMap(map); view.center(); var root = map.root; selectNode(root); } 3.3.6. Otvaranje dokumenta Sliĉno kao kod kreiranja novog dokumenta, i kod otvaranja postojećeg, AppController upravlja dogaĊajima vezanima za otvaranje postojećeg dokumenta: mindmaps.AppController = function(eventBus, appModel) { eventBus.subscribe(mindmaps.Event.OPEN_DOCUMENT, function() { var presenter = new mindmaps.OpenDocumentPresenter(eventBus, appModel, new mindmaps.OpenDocumentView()); presenter.go(); }); } Kod 3.14: Model aplikacije za upravljanje dogaĊajem otvaranja postojećeg dokumenta mindmaps.OpenDocumentPresenter = function(eventBus, appModel, view) { view.documentClicked = function(doc) { view.hideOpenDialog(); appModel.setDocument(doc); eventBus.publish(mindmaps.Event.DOCUMENT_OPENED, doc); }; view.deleteDocumentClicked = function(doc) { mindmaps.LocalDocumentStorage.deleteDocument(doc); var docs = mindmaps.LocalDocumentStorage.getDocuments(); 58 view.render(docs); }; this.go = function() { var docs = mindmaps.LocalDocumentStorage.getDocuments(); docs.sort(mindmaps.Document.sortByModifiedDateDescending); view.showOpenDialog(docs); }; }; Kod 3.15: Upravljanje dogaĊajima nad prozorom za otvaranje dokumenta OpenDocumentPresenter, kao što je opisano u Kodu 3.15, upravlja dogaĊajima koji se izvršavaju nad prozorom za otvaranje postojećih dokumenata. U sluĉaju da je kliknuto na postojeći dokument u svrhu njegova otvaranja, prozor za otvaranje dokumenata se zatvori (view.hideOpenDialog()) , otvori se dokument i objavljuje dogaĊaj da je dokument otvoren. this.hideOpenDialog = function() { $dialog.dialog("close"); }; Ukoliko se želi izbrisati postojeći dokument, poziva se funkcija lokalnog spremnika koja uklanja element iz liste na temelju njegova prefiksa koji je postavljen kao mindmaps.document i identifikacije doc.ID: deleteDocument : function(doc) { localStorage.removeItem(prefix + doc.id); }, Nakon toga, poziva se druga funkcija lokalnog spremnika koja pretražuje lokalni spremnik pomoću indeksa kljuĉa te na temelju toga prepoznanje koji element je izbrisan iz polja. Na kraju prikazuje elemente koji su preostali: getDocuments : function() { var documents = []; for ( var i = 0, max = localStorage.length; i < max; i++){ var key = localStorage.key(i); if (key.indexOf(prefix) == 0) { var doc = getDocumentByKey(key); if (doc) { documents.push(doc); 59 } }} return documents; }, Kod 3.16: Pretraživanje lokalnog spremnika Prije osvježavanja prikaza prozora za otvaranje dokumenta, nakon što je jedan od dokumenata izbrisan, potrebno je još sortirati preostale dokumente prema datumu njihove izmjene, na naĉin da zadnje mijenjani dokument bude prvi na listi. To se izvršava usporedbom datuma modificiranja dvaju dokumenata i ukoliko je datum jednog dokumenta noviji od datuma drugog dokumenta, zamijeni im mjesta i obrnuto: mindmaps.Document.sortByModifiedDateDescending = function(doc1, doc2) { if (doc1.dates.modified > doc2.dates.modified) { return -1; } if (doc1.dates.modified < doc2.dates.modified) { return 1; } return 0; }; Kod 3.17: Sortiranje dokumenata prema datumu modificiranja Na kraju se pozove funkcija view.showOpenDialog(docs); koja vraća prikaz prozora za otvaranje dokumenata: this.showOpenDialog = function(docs) { this.render(docs); $dialog.dialog("open"); }; Osim funkcija koje upravljaju otvaranjem i brisanjem postojećih dokumenata, potreban je i konstruktor za kreiranje izgleda tog prozora. Tome služi funkcija mindmaps.OpenDocumentView(), opisana u Kodu 3.18, pomoću koje se kreira jQuery objekt $dialog, na temelju selektora #template-open, unutar kojega se nalazi objekt $table, odnosno tablica unutar prozora sa popisom spremljenih dokumenata, te mogućnosti brisanja istih. Popis spremljenih dokumenata je jQuery objekt $list. 60 mindmaps.OpenDocumentView = function() { var self = this; var $dialog = $("#template-open").tmpl().dialog({ autoOpen : false, modal : true, zIndex : 5000, width : 550, close : function() { $(this).dialog("destroy"); $(this).remove(); } }); var $table = $dialog.find(".localstorage-filelist"); $table.delegate("a.title", "click", function() { if (self.documentClicked) { var t = $(this).tmplItem(); self.documentClicked(t.data); } }).delegate("a.delete", "click", function() { if (self.deleteDocumentClicked) { var t = $(this).tmplItem(); self.deleteDocumentClicked(t.data); } }); this.render = function(docs) { var $list = $(".document-list", $dialog).empty(); $("#template-open-table-item").tmpl(docs, { format : function(date) { var day = date.getDate(); var month = date.getMonth() + 1; var year = date.getFullYear(); return day + "/" + month + "/" + year; } }).appendTo($list); }; }; Kod 3.18: Kreiranje izgleda prozora za otvaranje dokumenta 61 Da bi se u Internet pretraživaĉu prikazao prozor za otvaranje dokumenta, potrebno je u HTML kod uĉitati kreirane jQuery objekte koji oblikuju izgled prozora za otvaranje dokumenta. Elementi tablice moraju imati naslov, datum modificiranja te mogućnost brisanja: <script id="template-open-table-item" type="text/x-jquerytmpl"> <tr> <td><a class="title" href="#">${title}</a></td> <td>${$item.format(dates.modified)}</td> <td><a class="delete" href="#">Izbriši</a></td> </tr> </script> TakoĊer je potrebno u HTML kodu namjestiti izgled prozora koji se sastoji od naslova i liste spremljenih dokumenata: <script id="template-open" type="text/x-jquery-tmpl"> <div id="open-dialog" class="file-dialog" title="Otvori mentalnu mapu"> <p>Kliknite na ime mape da biste ju otvorili.</p> <table class="localstorage-filelist"> <thead> <tr> <th class="title">Naslov</th> <th class="modified">Zadnje mijenjano</th> <th class="delete">Izbriši</th> </tr> </thead> <tbody class="document-list"></tbody> </table> </div> </script> Kod 3.19: Prozor za otvaranje postojećeg dokumenta Naravno, otvaranje postojećeg dokumenta, kao i kod kreiranja novog, uzrokuje kreiranje kontrola za poništavanje akcija createUndoManager();, omogućavanje spremanja dokumenta, view.enableSaveButton();, te prikaz nove mentalne mape showMindMap(doc);. 62 3.3.7. Spremanje dokumenta Kao što je bilo u prethodna dva sluĉaja, tako je i ovdje od strane AppController-a pozvana funkcija doSaveDocument(): mindmaps.AppController = function(eventBus, appModel) { eventBus.subscribe(mindmaps.Event.SAVE_DOCUMENT, doSaveDocument); } function doSaveDocument() { var presenter = new mindmaps.SaveDocumentPresenter(eventBus, appModel, new mindmaps.SaveDocumentView()); presenter.go(); } Kod 3.20: Model aplikacije za upravljanje dogaĊajem spremanja dokumenta Konstruktor za spremanje dokumenta, kao i kod otvaranja dokumenta, na temelju selektora #template-save kreira jQuery objekt $dialog, koji u sebi sadrži gumb, odnosno jQuery objekt $localStorageButton, koji ukoliko je kliknut, aktivira spremanje dokumenta. Osim toga, potrebne su i dvije funkcije showSaveDialog() i hideSaveDialog(), koje pokazuju, odnosno sakrivaju prozor za spremanje dokumenta. mindmaps.SaveDocumentView = function() { var self = this; var $dialog = $("#template-save").tmpl().dialog({ autoOpen : false, modal : true, zIndex : 5000, width : 350, close : function() { $(this).dialog("destroy"); $(this).remove(); } }); var $localStorageButton = $("#button-save localstorage").button().click( function() { if (self.localStorageButtonClicked) { 63 self.localStorageButtonClicked(); } }); this.showSaveDialog = function() { $dialog.dialog("open"); }; this.hideSaveDialog = function() { $dialog.dialog("close"); };}; Kod 3.21: Konstruktor prozora za spremanje dokumenta Ukoliko je kliknuto na gumb za spremanje dokumenta, kreira se datum modificiranja, te se dokument sprema u lokalni spremnik. Ukoliko je spremanje dokumenta bilo uspješno, objavljuje se dogaĊaj DOCUMENT_SAVED, a prozor za spremanje dokumenta se zatvara. mindmaps.SaveDocumentPresenter = function(eventBus, appModel, view) { view.localStorageButtonClicked = function() { var doc = appModel.getDocument(); doc.dates.modified = new Date(); var success = mindmaps.LocalDocumentStorage.saveDocument(doc); if (success) { eventBus.publish(mindmaps.Event.DOCUMENT_SAVED, doc); view.hideSaveDialog(); } }; }; Spremanje dokumenta izvršava funkcija lokalnog spremnika saveDocument(doc), opisana u Kodu 3.22, koja postavlja element u lokalni spremnik na temelju njegova imena i identifikacije. Da bi se spremljeni dokument proslijedio u lokalni spremnik, potrebna je i funkcija serialize() koja će razliĉite vrste tipova varijabli pretvoriti u isti tip. U sluĉaju neuspješnog spremanja dokumenta, pojavit će se poruka o greški. saveDocument : function(doc) { try { localStorage.setItem(prefix + doc.id, doc.serialize()); return true; } catch (error) { 64 console.error("Greška prilikom spremanja dokumenta.",error); return false; } }, Kod 3.22: Funkcija lokalnog spremnika za spremanje dokumenta TakoĊer je, kao i u prethodnom primjeru, potrebno jQuery objekte smjestiti u HTML kod, za prikaz u Internet pretraživaĉu. Prozor za spremanje dokumenta se sastoji od naslova, teksta te gumba za spremanje mentalne mape, kao što je prikazano na Slici 3.12. <script id="template-save" type="text/x-jquery-tmpl"> <div id="save-dialog" class="file-dialog" title="Spremi mentalnu mapu"> <p>Kliknite na gumb SPREMI da biste spremili mentalnu mapu.</p> <button id="button-save-localstorage">Spremi</button> </div> </script> Slika 3.12: Prozor za spremanje mentalne mape Važno je napomenuti da se dokument u lokalni spremnik sprema u obliku JSON tekstualne datoteke. Stoga je prilikom spremanja dokumenta, kao i otvaranja postojećeg dokumenta, potrebno provesti pretvorbu iz objekta u JSON tekst i obrnuto. Za to se koriste dvije metode: JSON.parse i JSON.stringify. Metoda JSON.parse prepoznaje JSON tekst i pretvara ga u objekte koje sadrži dokument mentalne mape: mindmaps.Document.fromJSON = function(json) { return mindmaps.Document.fromObject(JSON.parse(json)); }; mindmaps.Document.fromObject = function(obj) { var doc = new mindmaps.Document(); 65 doc.id = obj.id; doc.title = obj.title; doc.mindmap = mindmaps.MindMap.fromObject(obj.mindmap); doc.dates = { created : new Date(obj.dates.created), modified : new Date(obj.dates.modified) }; doc.dimensions = mindmaps.Point.fromObject(obj.dimensions); return doc; }; Suprotno tome, JSON.stringify metoda konvertira JavaScript strukturu podataka u JSON tekst. Ukoliko stringify metoda uoĉi objekt koji sadrži metodu toJSON, ona poziva tu metodu, izvrši akciju nad njom, te vraća konvertiranu vrijednost. mindmaps.Document.prototype.toJSON = function() { return { id : this.id, title : this.title, mindmap : this.mindmap, dates : { created : this.dates.created.getTime(), modified : this.dates.modified.getTime() }, dimensions : this.dimensions };}; mindmaps.Document.prototype.serialize = function() { return JSON.stringify(this); }; 66 Zaključak U zadnjim desetljećima prošlog stoljeća su se dogodile velike promjene vezane uz brzi razvoj tehnologije. Za pojedinca je teško biti u toku s tim promjenama, stoga postoji potreba za brzim i uĉinkovitim naĉinima stjecanja znanja. To se postiže dijeljenjem znanja, a još uvijek najefikasniji naĉin prijenosa znanja je komunikacija meĊu ljudima. Osim dijeljenja znanja, takoĊer je vrlo važno spremanje znanja u razliĉitim oblicima, u svrhu njegova širenja. Iako postoji odreĊeni otpor pojedinaca prema dijeljenju znanja, ono je neophodno za praćenje brzih promjena tehnologije i napredovanje. Kao rezultat sveprisutnog okruženja novom tehnologijom, dogodile su se i velike promjene u uĉenju i pouĉavanju. Današnji uĉenici, koji pripadaju tzv. digitalnoj generaciji, razmišljaju i procesuiraju informacije drugaĉije od svojih prethodnika, koji nisu bili u dodiru s tehnologijom u tolikoj mjeri. S druge strane, ostali koji nisu roĊeni u digitalnom svijetu, u nekom trenutku života žele ili moraju usvojiti aspekte nove tehnologije, te ih se stoga naziva digitalnim imigrantima. (Prensky, 2001.g.) Kao posljedica, današnje škole se susreću sa ozbiljnim problemom: s jedne strane, digitalni imigranti uĉe polako, korak po korak, dok je digitalna generacija odrasla uz Internet, mobitele, knjižnice na raĉunalima, te imaju malo prakse u praćenju instrukcija i uĉenju korak po korak. Vrlo je vjerojatno da se digitalna generacija nikada neće okrenuti klasiĉnom naĉinu uĉenja. Stoga profesori moraju prilagoditi svoj pristup, metodologiju i sadržaje, bilo uĉenjem novih sadržaja u skladu sa digitalnom generacijom ili uĉenje novog naĉina za pouĉavanje klasiĉnih sadržaja. Potrebno je pronaći i prilagoditi materijale digitalnoj generaciji. Temeljna ideja ovog rada bila je olakšati razmjenu informacija i znanja grupi ljudi, a to je upotrebom mentalnih mapa kao sredstva za stjecanje i dijeljenje znanja. Programska podrška u obliku aplikacije za izradu mentalnih mapa uvelike može pomoći u procesu kako kreiranja, tako i spremanja znanja za njegovo daljnje korištenje. Osim toga, ovakav oblik programske podrške može pomoći i profesorima koji su prisiljeni prilagoditi se naĉinu razmišljanja današnjih uĉenika, koji pružaju otpor klasiĉnim naĉinima uĉenja. 67 Literatura [1] WISSENSMANAGEMENT FORUM, An illustrated guide to knowledge managment, [Mrežno] http://www.wm-forum.org.[Zadnji pristup: 28.06.2011.] [2] Knowledge management. [Mrežno]: www.wikipedia.org. http://en.wikipedia.org/wiki/Knowledge_management. [Zadnji pristup: 28.06.2011.] [3] VUKUŠIĆ, MILANOVIĆ, GOMBAŠEK, Uloga informacijske tehnologije i drugih čimbenika u upravljanju znanjem. [4] I. RUS, M. LINDVALL, Knowledge Managment in Software Engineering. Maryland: Fraunhofer Center for Experimental Software Engineering. [5] D. WHITE, Mind Mapping and Managment. [6] T. BUZAN, B. BUZAN The mind map book. Pearson Education, 2006. [7] T. BUZAN, B. BUZAN, How to mind map, Thorsons, 2002. [8] Tony Buzan. [Mrežno]: www.wikipedia.org. http://en.wikipedia.org/wiki/Tony_Buzan. [Zadnji pristup: 30.06.2011.] [9] Mindmapping, concept mapping and information organisation software. [Mrežno] www.mind-mapping.org. [Zadnji pristup: 30.06.2011.] [10] J.D. NOVAK, A.J. CANAS, The theory underlying concept maps and how to construct and use them. Florida Institute for Human and Machine Cognition, 2008. [11] Konceptualne mape. [Mrežno]: www,wikipedia.org. http://hr.wikipedia.org/wiki/Konceptualne_mape. [Zadnji pristup: 30.06.2011.] [12] How To Use Mind Maps for Brainstorming. [Mrežno]: http://www.michaelonmindmapping.com/blog/mind-maps/brainstorming-mindmapping-and-other-creative-confusions/.[Zadnji pristup: 30.06.2011.] [13] Mind mapping. [Mrežno]: www.novamind.com. http://www.novamind.com/mind-mapping/.[Zadnji pristup: 30.06.2011.] [14] HTML5, [Mrežno]: www.wikipedia.org. http://en.wikipedia.org/wiki/HTML5. [Zadnji pristup: 04.07.2011.] [15] MATTHEW DAVID, Pro HTML5 Programming, Powerful APIs for Richer Internet Application Development. [16] ALBERS LUBBERS, SALIM, Pro HTML5 Programming, Powerful APIs for Richer Internet Application Development 68 [17] Web APIs, [Mrežno]: www.wikipedia.org. http://en.wikipedia.org/wiki/Application_programming_interface#Web_APIs. [Zadnji pristup: 04.07.2011]. [18] HTML5 storage. [Mrežno]: diveintohtml5.org. http://diveintohtml5.org/storage.html. [Zadnji pristup: 08.07.2011]. [19] JavaScript History. [Mrežno]: www.wikipedia.org. http://en.wikipedia.org/wiki/JavaScript#History. [Zadnji pristup: 08.07.2011]. [20] DAVID FLANAGAN, JavaScript: The Definitive Guide, 3th edition, OReilly, 2006. [21] jQuery, [Mrežno]: www.wikipedia.org. http://en.wikipedia.org/wiki/JQuery [Zadnji pristup: 08.07.2011]. [22] jQuery, [Mrežno]: www.w3schools.com. http://www.w3schools.com/jquery/jquery_intro.asp. [Zadnji pristup: 08.07.2011]. [23] JSON, [Mrežno]: www.wikipedia.org. http://en.wikipedia.org/wiki/JSON. [Zadnji pristup: 11.07.2011]. [24] Introducing JSON, [Mrežno]: http://www.json.org/ .[Zadnji pristup: 11.07.2011]. [25] Comparing JSON to XML, [Mrežno]: msdn.microsoft.com. http://msdn.microsoft.com/en-us/library/bb299886.aspx. [Zadnji pristup: 11.07.2011].. 69
© Copyright 2024 Paperzz