Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
pl:miw:miw08_dokuviz [2008/04/15 00:43]
miw
pl:miw:miw08_dokuviz [2019/06/27 15:50] (aktualna)
Linia 1: Linia 1:
 ====== Opis ====== ====== Opis ======
 +__**Projekt zakończony**__
 +
 Michał Kotra, <​mkotra@student.agh.edu.pl>​ Michał Kotra, <​mkotra@student.agh.edu.pl>​
  
-[[:​GraphViz]] plugin dla Dokuwiki, renderowanie diagramow z zamieszczonego w wiki kodu DOT oraz plikow umieszczanych w wiki.+[[misc:GraphViz]] plugin dla Dokuwiki, renderowanie diagramow z zamieszczonego w wiki kodu DOT oraz plikow umieszczanych w wiki.
  
 ====== Spotkania ====== ====== Spotkania ======
Linia 44: Linia 46:
   * dodanie możliwości ustawienia parametrów width i height ''​ height="​300"​ width="​800"''​   * dodanie możliwości ustawienia parametrów width i height ''​ height="​300"​ width="​800"''​
   * aktualna wersja: http://​student.agh.edu.pl/​~mkotra/​graphviz.tar   * aktualna wersja: http://​student.agh.edu.pl/​~mkotra/​graphviz.tar
 +
 +
  
  
Linia 49: Linia 53:
   * sprawozd   * sprawozd
   * debug - graphviz ​   * debug - graphviz ​
-  * protot prologu - zrobiony, ​pokaze ​na konsultacjach+  * protot prologu - zrobiony, ​pokażę ​na konsultacjach 
 + 
 + 
 +===== 080429 ===== 
 +  * obsługa scope? 
 +  * popr do sprawozd 
 + 
 + 
 + 
 + 
 + 
 + 
 +===== 080520 ===== 
 +Opis problemow z cache 
 +   * Wiki w cache zapamiętuje jedynie wynikową stronę, stąd konieczne okazuje się przeglądnie stron w wiki w poszukiwaniu kodu prologu. W przypadku dużej ilości stron, przeszukiwane musiałyby być wszystkie strony znajdujące się w wiki. Zaproponowane rozwiązanie wykorzystuje osobny cache, dla kodu prologu. Jeżeli na stronie zostanie napotkany kod prologu z włączoną opcją cache="​true"​ dla strony zostanie utworzony osobny plik w katalogu wiki/​lib/​plugins/​tmp+(ścieżka taka jaką ma plik w wiki). Przy przeszukiwaniu dostępnego kodu prologu, zostaną zatem przeszukane tylko te pliki, a nie cała data zgromadzona w Wiki. Korzystne w sytuacji kiedy stosunkowo niewielka część stron zawiera kod prologu, który należy cache'​ować.  
 +   * Drugim problemem jest fakt, że cache zależy od zawartości aktualnej strony. Jeżeli nastąpi zmiana strony w wiki, cache na innej stronie nie wykryje jej. Rozsądnym rozwiązaniem wydaje się wyłączenie cache na stronach, na których chcemy podać goal i otrzymać wynik działania prologu. 
 +<​code>​~~NOCACHE~~</​code>​ 
 + 
 +  * prototyp - działa na razie lokalnie, umożliwia zadawanie scope, z którego będzie korzystał prolog, w ścieżce dopuszczane są wyrażenia regularne. 
 + 
 +  * wstępna wersja do pobrania: http://​student.agh.edu.pl/​~mkotra/​prolog.tar 
 + 
 +  * przykład:​ 
 +<code xml>  
 +<prolog scope="​raz:​dwa:​trzy"​ goal="​kobieta(X),​write(X),​nl,​fail"​ cache="​true">​ 
 +kobieta(anna). 
 +</​prolog>​ 
 +</​code>​ 
 + 
 +===== 080527 ===== 
 +  * testowanie pluginu 
 +  * sprawozdanie (MK) 
 +  * email sync
  
 ===== Na kiedyś ===== ===== Na kiedyś =====
Linia 77: Linia 113:
   * mogę skojarzyć z każdą strona wiki kod prologu, zadaję pluginowi goal i scope: interpretowanie tylko tej strony, zbioru stron, np. namespace   * mogę skojarzyć z każdą strona wiki kod prologu, zadaję pluginowi goal i scope: interpretowanie tylko tej strony, zbioru stron, np. namespace
  
-  <prolog goal="​kobieta(X) scope="​.">​ +  <prolog goal="​kobieta(X)" ​scope="​."> ​ta str 
-  <prolog goal="​kobieta(X) scope="​pl:​miw:​proj">​ +  <prolog goal="​kobieta(X)" ​scope="​pl:​miw:​proj"> ​podana str 
-  <prolog goal="​kobieta(X) scope="​pl:​miw:​proj*08">​+  <prolog goal="​kobieta(X)" scope="​pl:​miw:">​ namespace 
 +  <prolog goal="​kobieta(X)" ​scope="​pl:​miw:​proj.*08"> ​regexp
  
  
Linia 87: Linia 124:
   </​prolog>​   </​prolog>​
  
 +  * pytania: 
 +    * co z frag prolog z goal? też merge 
 +    * co z cache -> scenariusze?​ 
 +    * jak zadawać scope, co może Panu przeszukać wiki? regexp 
 +    * defaultowe wypisywanie w celu? 
 +<​code>​ 
 +    <prolog goal="​kobieta(X),​write(X),​nl,​fail">​ 
 +    <prolog goal="​kobieta(X)"​ wrt="​y">​ 
 +</​code>​ 
 +  * mieszana składnia wiki... -> msc
  
 ====== Projekt ====== ====== Projekt ======
  
 [[pl:​miw:​miw08_dokuviz:​testy|Testy pluginu na osobnej stronie]] [[pl:​miw:​miw08_dokuviz:​testy|Testy pluginu na osobnej stronie]]
 +
  
  
Linia 101: Linia 148:
  
 [[pl:​miw:​miw08_dokuviz:​sprawozdanie]] [[pl:​miw:​miw08_dokuviz:​sprawozdanie]]
 +
 +
 +===== Wstęp =====
 +  * celem zadania było utworzenie pluginu dla Dokuwiki umożliwiającego renderowanie diagramów z zamieszczonego kodu DOT, oraz plików umieszczonych w wiki.
 +
 +
 +
 +===== Rozbudowa istniejącego pluginu =====
 +Graphviz plugin dla Dokuwiki został oparty na znalezionym rozwiązaniu http://​wiki.ioslo.net/​dokuwiki/​graphviz/​
 +Wersja ta obsługiwała podstawową funkcjonalność,​ tj. renderowanie diagramów z zamieszczonego w wiki kodu dot.
 +W stosunku do znalezionej w sieci wersji wprowadzono następujące ulepszenia:
 +  * możliwość renderowania diagramów z zamieszczonych w wiki plików dot
 +  * możliwość renderowania diagramów z plików dot znajdujących się w sieci, poprzez podanie ścieżki url. Funkcjonalność ta została osiągnięta,​ dzięki wykorzystaniu narzędzia Curl.
 +  * dodano możliwość zdefiniowania wysokości i szerokości renderowanych diagramów
 +  * poprawiono sposób generowania plików png, gdyż w poprzedniej wersji zastosowane nieoptymalne rozwiązanie powodujące utratę jakości.
 +
 +===== Instalacja pluginu =====
 +  * plugin dostarczony jest w postaci archiwum TAR. Instalacja polega na wskazaniu odpowiedniej lokalizacji w managerze pluginów Dokuwiki. Dalszy proces instalacji przebiega automatycznie. ​
 +  * aby możliwe było zamieszczanie w wiki plików *.dot niezbędne jest dodanie w pliku conf/​mime.conf linii: ​
 +
 +  dot    application/​graphviz
 +===== Sposób użycia =====
 +  * aby kod dot został przetworzony należy umieścić go pomiędzy odpowiednimi tagami, tak jak pokazano w poniższym przykładzie:​
 +  <​code>​ <​graphviz>​KOD DOT</​graphviz>​ </​code>​
 +  * przykładowo po wpisaniu kodu:
 +  <​code><​graphviz>​
 +  digraph G {
 +     a -> b;
 +  }
 +</​graphviz></​code>​
 +uzyskany zostanie następujący efekt:
 +
 +<​graphviz>​
 +digraph G {
 +   a -> b;
 +  }
 +</​graphviz>​
 +  * istnieje możliwość wczytania pliku DOT zamieszczonego w wiki, np. 
 +  <​code><​graphviz file="​pl:​miw:​plik.dot"></​graphviz></​code>​
 +  * można również wczytać plik DOT znajdujący się pod wskazanym adresem URL (do odczytania zawartości pliku plugin wykorzystuje narzędzie [[http://​curl.haxx.se/​|Curl]]). ​
 +  <​code><​graphviz url="​http://​.../​plik.dot"></​graphviz></​code>​
 +  * istnieje możliwość wyboru stylu grafu (domyślnie dot) spośród dostępnych opcji: dot, neato, twopi, circo, fdp 
 +  <​code>​ <​graphviz neato>​KOD DOT</​graphviz>​ </​code>​
 +  * można ustalić rozmiar renderowanej bitmapy ustawiając odpowiednie wartości parametrów width i height:
 +  <​code><​graphviz height="​300"​ width="​800">​KOD DOT</​graphviz></​code>​
 +  * Bardziej rozbudowany przykład użycia:
 +  <​code><​graphviz neato file="​pl:​miw:​plik.dot"​ width ="​100"​ height="​50"></​graphviz></​code>​
 +
 +
 +
 +
 +===== Prolog plugin dla DokuWiki=====
 +
 +Kolejnym celem było zbudowanie pluginu dla DokuWiki umożliwiającego uruchamianie kodu prologu. Plugin miał umożliwić podanie bazy wiedzy w postaci, kodu, adresu url, lub pliku zamieszczonego w wiki, oraz celu. Po zapisaniu strony miał zostać wyświetlony efekt działania. Dodatkowo należało umożliwić cache'​owanie kodu prologu zgromadzonego na stronach DokuWiki, oraz zadawanie przestrzeni nazw (również w postaci wyrażeń regularnych),​ która miała zostać przeszukana. ​
 +
 +===== Instalacja pluginu=====
 +  * plugin dostarczony jest w postaci archiwum TAR. Instalacja polega na wskazaniu odpowiedniej lokalizacji w managerze pluginów Dokuwiki. Dalszy proces instalacji przebiega automatycznie. ​
 +
 +===== Sposób działania =====
 +    * aby kod Prologu został przetworzony należy umieścić go pomiędzy odpowiednimi tagami, oraz zadać goal i określić co chcemy wypisać:
 +<code xml>
 +<prolog goal="​kobieta(X),​write(X),​nl,​fail">​
 +kobieta(kasia).
 +mezczyzna(jasiu).
 +</​prolog>​
 +</​code>​
 +
 +  * istnieje również możliwość podania pliku w wiki:
 +<code xml>
 +<prolog goal="​kobieta(X),​write(X),​nl,​fail"​ file="​pl:​miw:​test.pl">​
 +</​prolog>​
 +</​code>​
 +
 +  * lub adresu url:
 +<code xml>
 +<​prolog ​ goal="​kobieta(X),​write(X),​nl,​fail"​ url="​http://​costam.org/​test.pl">​
 +</​prolog>​
 +</​code>​
 +
 +  * dodatkowa funkcjonalność to możliwość cache'​owania zgromadzonego na poszczególnych stronach kodu prologu, i określenie przestrzeni która ma zostać przeszukana. Przy podawaniu scope można stosować wyrażenia regularne, tak jak w przypadku grepa. PRzy czym "​.*"​ określa całą przestrzeń wiki:
 +<code xml>
 +<prolog goal="​kobieta(X),​write(X),​nl,​fail"​ scope="​pl:​miw:​proj.*08">​
 +</​prolog>​
 +</​code>​
 +
 +  * jeżeli chcemy jedynie zapamiętać w cache kod należy zastosować następującą składnię:
 +<code xml>
 +<prolog cache="​true">​
 +kobieta(anna).
 +</​prolog>​
 +</​code>​
 +
 +
 +
 +===== Zasadzki =====
 +W związku ze sposobem działania mechanizmu cache w Dokuwiki istnieje możliwość,​ że plugin nie zadziała poprawnie. Nie wgłębiając się w szczegóły mechanizm cache w Dokuwiki wywołuje plugin podczas zapisywania dokumentu. Sam plugin renderuje diagramy w przypadku, gdy natrafi na kod, którego nigdy wcześniej nie renderował. W przeciwnym przypadku zostanie załadowany obrazek przechowywany w pamięci cache. Może się zatem zdarzyć, że renderując diagram z zewnętrznego pliku który ulegnie zmianie, plugin tych zmian nie wykryje gdyż podany kod:
 +  "<​graphviz url="​.."></​graphviz>" ​
 +będzie w obu przypadkach identyczny. W razie wystąpienia tego typu problemów pomóc powinno wyczyszczenie zawartości katalogu:
 +  wiki/​data/​media/​graphviz
 +Można również użyć opcji NOCACHE -> http://​wiki.splitbrain.org/​wiki:​caching
 +
 +
 +
 +==== Testy ====
 +[[pl:​miw:​miw08_dokuviz:​testyprolog]]
 +
 +[[pl:​miw:​miw08_dokuviz:​testyprolog2]]
  
 ====== Materiały ====== ====== Materiały ======
pl/miw/miw08_dokuviz.1208213034.txt.gz · ostatnio zmienione: 2019/06/27 15:58 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0