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/05/20 03:10]
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 57: Linia 59:
   * obsługa scope?   * obsługa scope?
   * popr do sprawozd   * popr do sprawozd
 +
 +
  
  
Linia 64: Linia 68:
 Opis problemow z cache 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ć. ​    * 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 ( ~~NOCACHE~~ ) na stronach, na których chcemy podać goal i otrzymać wynik działania prologu.+   * 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.   * 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.
Linia 76: Linia 81:
 </​prolog>​ </​prolog>​
 </​code>​ </​code>​
 +
 +===== 080527 =====
 +  * testowanie pluginu
 +  * sprawozdanie (MK)
 +  * email sync
  
 ===== Na kiedyś ===== ===== Na kiedyś =====
Linia 119: Linia 129:
     * jak zadawać scope, co może Panu przeszukać wiki? regexp     * jak zadawać scope, co może Panu przeszukać wiki? regexp
     * defaultowe wypisywanie w celu?     * defaultowe wypisywanie w celu?
 +<​code>​
     <prolog goal="​kobieta(X),​write(X),​nl,​fail">​     <prolog goal="​kobieta(X),​write(X),​nl,​fail">​
     <prolog goal="​kobieta(X)"​ wrt="​y">​     <prolog goal="​kobieta(X)"​ wrt="​y">​
 +</​code>​
   * mieszana składnia wiki... -> msc   * mieszana składnia wiki... -> msc
  
Linia 127: Linia 138:
  
 [[pl:​miw:​miw08_dokuviz:​testy|Testy pluginu na osobnej stronie]] [[pl:​miw:​miw08_dokuviz:​testy|Testy pluginu na osobnej stronie]]
 +
  
  
Linia 136: 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.1211245825.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