Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:miw:miw08_dokuviz [2008/04/29 10:19] gjn |
pl:miw:miw08_dokuviz [2019/06/27 15:50] (aktualna) |
====== 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 ====== |
* obsługa scope? | * obsługa scope? |
* popr do sprawozd | * popr do sprawozd |
| |
| |
| |
| |
| |
| |
===== 080520 ===== | ===== 080520 ===== |
* opis problemow z cache | Opis problemow z cache |
* prototyp | * 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ś ===== |
* 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 |
| |
| |
[[pl:miw:miw08_dokuviz:testy|Testy pluginu na osobnej stronie]] | [[pl:miw:miw08_dokuviz:testy|Testy pluginu na osobnej stronie]] |
| |
| |
| |
| |
[[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 ====== |