Różnice

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

Odnośnik do tego porównania

pl:miw:miw08_prolog_ardxpce [2008/10/05 15:23]
miw
pl:miw:miw08_prolog_ardxpce [2019/06/27 15:50]
Linia 1: Linia 1:
-====== Opis ====== 
-Wojciech Franczak, <​wojciech.franczak@gmail.com>,​ 
- 
-ARD visualization and interactive,​ shell-based editing, w/ vis. in XPCE (VARDA shell) 
- 
- 
-====== Spotkania ====== 
- 
-===== 08.02.19 ===== 
-Przydzielenie projektu, wstępne omówienie tematu. 
- 
-===== 08.03.04 ===== 
- 
-Pytania: 
- 
-1. pytanie dotyczące aplikacji którą pokazywał Pan na pierwszym spotkaniu (jak działa i jak ja zainstalować,​ i jak wygląda od środka)? 
- 
-2. czy w razie problemów mogę się zgłaszać do Pana? 
- 
-===== 08.03.18 ===== 
-  * generowanie prostych grafów skierowanych w XPCE 
-  * możliwość edycji, sprzężenie zwrotne, t.j. klikam na węźle, krawędzi -> odpala predykat w prologu, callback 
- 
- 
-===== 08.04.01 ===== 
-  * generowanie ARD w XPCE z [[hekate:​varda]] 
- 
- 
- 
-====== Sprawozdanie ====== 
- 
- 
- 
- 
- 
- 
- 
-==== 1. Wstęp: ==== 
- 
-== a. Środowisko pracy: == 
- 
-Przykład tworzenia grafu w XPCE był realizowany w środowisku Windows XP za pomocą programu SWI-Prolog/​XPCE for MS-Windows 5.6.61. Alternatywą jest możliwość uruchomienia na platformie Linux, z powodów trudności z uruchomieniem i konfiguracją nie wybrałem tej możliwości. 
- 
-== b. Oprogramowanie:​ == 
- 
-Po pobraniu i zainstalowaniu programu [[http://​www.swi-prolog.org/​dl-stable.html|SWI-Prolog/​XPCE for MS-Windows 5.6.61]], mozliwa była praca z Prolog/XPCE w środowisku Windows. Możliwości i działanie aplikacji pod systemem Windows jest bardzo zbliżona do pracy pod systemem Linux-owym. 
- 
-== c. Biblioteka XPCE w Prologu: == 
- 
-XPCE to zestaw narzędzi wspomagający tworzenie GUI pod język Prolog. Jest zorientowane obiektowo, daje możliwość tworzenia klas, metod, warunków, iteracji... Procedury zawarte w XPCE tworzone są w C. Jest możliwe do uruchomienia w różnych środowiskach pracy. Dane z Prologa mogą być powiązane ze zmiennymi w XPCE. Zaimplementowane jest za pomocą własnej biblioteki VWS (Virtual Window System) która, definiuje metody do tworzenia i manipulacji oknami, prostymi obiektami jak: linie, kółka, tekst oraz obsługi zdarzeń. Dzięki swojej budowie, programy używające XPCE są w pełni przenośne pomiędzy różnymi środowiskami pracy. ​ 
- 
-== d. Konstrukcja grafów ARD (Atribute Relationship Diagram): == 
- 
-Diagram ARD identyfikuje atrybuty systemu i wskazuje na zależności pomiędzy nimi. W ARD występują dwa rodzaje elementów: atrybuty (attributes) i właściwości (properties). Poniżej przedstawiam przykład diagramu ARD dla problemu budowy kontrolera temperatury:​ 
- 
-{{:​pl:​miw:​oraz1.png|:​pl:​miw:​oraz1.png}} 
- 
- 
- 
- 
-==== 4. Wiadomości wstępne o XPCE: ==== 
- 
-Jednymi z ważniejszych predykatów wykorzystywania XPCE w Prologu są: 
- 
-== a. Tworzenie obiektów NEW: == 
- 
-new(?​Reference,​ +NewTerm) – tworzy obiekt oraz przypisuje do niego dana referencję,​ która jest wykorzystywana do komunikacji pomiędzy obiektami. 
- 
- Przykład: 
- ?- new(@demo, dialog(‘Okno Dialogowe’)). – tworzy okno dialogowe, w którym umieszcza się napisy, przyciski, itp. 
- 
-== b. Modyfikacja stanu obiektów SEND: == 
- 
-send(+Receiver,​ +Selector(..Argumenty..)). – za pomocą tej komendy dokonuje się zmiany stanu obiektów. Pierwszy argument tego predykatu jest referencją do obiektu, natomiast drugi to term, którego nazwa jako funktor jest nazwą metody do wywołania, a argumenty są argumentami operacji. 
- 
- Przykład: 
- ?- send (@demo, append(text_item(Nazwa)). – wywołuje metodę append klasy dialog, dodaje komponent do okna dialogowego. 
- 
-== c. Zapytanie do Obiektów GET: == 
- 
-Służy do pobierania informacji o stanie obiektu. Dwa pierwsze argumentu są podobne jak w predykacie SEND, trzeci zwraca wartość. 
- 
- Przykład: 
- ?- get(@demo, display, D). – zwraca obiekt display, na którym @demo jest wyświetlane. 
- 
-== d. Niszczenie obiektów FREE: == 
- 
-Argumentem jest referencja na obiekt (stworzona przy użyciu NEW i GET). Predykat usuwa obiekt. 
- 
- Przykład: 
- ?​-free(@demo). 
- 
-== e. Tworzenie figur: == 
- 
-arrow - Służy do tworzenia strzałek. 
- 
-bezier - Tworzy krzywe Bezier`a. 
- 
-bitmap - Umieszcza obraz, kolorowy jak i monochromatyczny. 
- 
-box - Tworzy figury takie jak kwadrat i prostokąt, o ostrych lub zaokrąglonych rogach. 
- 
-circle - Słuzy do otrzymywania okręgów. 
- 
-ellipse - Tworzy figury o kształcie elips, może być wypełnione. 
- 
-line - Tworzy linię prostą, może służyć do tworzenia strzałek. 
- 
-path - Wielo linia przechodząca przez kilka punktów. 
- 
-text - Służy do wyświetlania tekstu. 
-Przykład: 
-  ​ 
-  ?- send(@p, display, 
-  new(@box, box(100,​100))). - kwadrat 
- 
-== f. Łączenie i działanie na figurach: == 
- 
-device - Most generic compound graphical object. The window is a subclass of 
-device and all graphical operations are defined on class device. 
- 
-figure - Subclass of device, provides clipping, background, containing rectangle, 
-border and the possibility to show a subset of the displayed graphical objects. 
- 
-format - A format object specifies a two-dimensional table layout. Formats may be 
-associated to graphical devices using ‘device ! format’. 
- 
-table - The successor of format realises tabular layout compatible to the HTML-3 
-model for tables. 
- 
-connection - Subclass of class line. A connection can connect two graphicals 
-on the same window that have handles. The line is automatically 
-updated if either of the graphicals is moved, resized, changed 
-from device, (un)displayed,​ hidden/​exposed or destroyed. 
- 
-handle - Defines the location, nature and name of a connection point for a 
-connection. Handles can be attached to individual graphicals as 
-well as to their class. 
- 
-link - Defines the generic properties of a connection: the nature (‘kind’) 
-of the handle at either side and the line attributes (arrows, pen 
-and colour). 
-connect - gesture Event-processing object used to connect two 
-graphical objects. 
- 
-Przykład: 
-  ​ 
-  :- pce_global(@in_out_link,​ make_in_out_link). 
-  ​ 
-  make_in_out_link(L) :- 
-  new(L, link(in, out, line(arrows := second))). 
-  ​ 
-  linked_box_demo :- 
-  new(P, picture(’Linked Box demo’)), 
-  send(P, open), 
-  send(P, display, new(B1, box(50,​50)),​ point(20,​20)),​ 
-  send(P, display, new(B2, box(25,​25)),​ point(100,​100)),​ 
-  send(B1, handle, handle(w, h/2, in)), 
-  send(B2, handle, handle(w/2, 0, out)), 
-  send_list([B1,​ B2], recogniser, new(move_gesture)),​ 
-  send(B1, connect, B2, @in_out_link). 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
-==== 5. Projekt:​==== 
- 
-Przygotowany plik (na podstawie grafu ard dla termistatu):​ {{:​pl:​miw:​projekt.pl|projekt.pl}} wprowadzam do SWI-Prolog komendą: "​[swi('​demo/​projekt'​)].",​ następnie wpisuję komendę: "​projekt."​. Wynikiem jest przykładowy graf. Jedynym pomysłem na tworzenie diagramów ARD w XPCE, jest ręczne przygotowanie pliku *.pl, który po załadowaniu wyświetli zawarte w nim informacje. Uproszczeniem procesu tworzenia pliku była by prosty edytor. Aby móc przygotować potrzebny plik musimy widzieć jak tworzyć odpowiednie figury, jak je ze sobą łączyć, w jaki sposób możemy mieć na nie wpływ. 
- 
-Wynikiem moich prób jest następujący graf, składający się z prostokątów połączonych odpowiedni strzałkami (jak w wstępie przykład dla termostatu),​ użytkownik ma możliwość przesuwania obiektów wciskając i przytrzymując lewy przycisk myszy.: 
- 
-{{:​pl:​miw:​obraz2.png|:​pl:​miw:​obraz2.png}} 
- 
-i jego kod źródłowy:​ 
- 
-   :- pce_global(@in_out_link,​ make_in_out_link). 
-  
-   ​make_in_out_link(L) :- 
-   ​new(L,​ link(in, out, line(arrows := second))). 
-   ​projekt :- 
-   ​new(P,​ picture('​Projekt'​)),​ 
-   ​send(P,​ open), 
-   ​send(P,​ display, new(B1, box(50,​50)),​ point(10,​100)),​ 
-   ​send(P,​ display, new(B2, box(50,​50)),​ point(100,​20)),​ 
-   ​send(P,​ display, new(B3, box(50,​50)),​ point(100,​100)),​ 
-   ​send(P,​ display, new(B4, box(50,​50)),​ point(100,​180)),​ 
-   ​send(P,​ display, new(B5, box(50,​50)),​ point(190,​20)),​ 
-   ​send(P,​ display, new(B6, box(50,​50)),​ point(190,​100)),​ 
-   ​send(P,​ display, new(B7, box(50,​50)),​ point(280,​75)),​ 
- 
-   ​send(B1,​ handle, handle(w, h/2, in)), 
-   ​send(B2,​ handle, handle(0, h/2, out)), 
-   ​send(B2,​ handle, handle(w, h/2, in)), 
-   ​send(B3,​ handle, handle(0, h/2, out)), 
-   ​send(B3,​ handle, handle(w, h/2, in)), 
-   ​send(B4,​ handle, handle(0, h/2, out)), 
-   ​send(B4,​ handle, handle(w, h/2, in)), 
-   ​send(B5,​ handle, handle(0, h/2, out)), 
-   ​send(B5,​ handle, handle(w, h/2, in)), 
-   ​send(B6,​ handle, handle(0, h/2, out)), 
-   ​send(B6,​ handle, handle(w, h/2, in)), 
-   ​send(B7,​ handle, handle(0, h/2, out)), 
- 
-   ​send_list([B1,​ B3], recogniser, new(move_gesture(left))),​ 
-   ​send_list([B2,​ B5], recogniser, new(move_gesture(left))),​ 
-   ​send_list([B3,​ B6], recogniser, new(move_gesture(left))),​ 
-   ​send_list([B4,​ B6], recogniser, new(move_gesture(left))),​ 
-   ​send_list([B5,​ B7], recogniser, new(move_gesture(left))),​ 
-   ​send_list([B6,​ B7], recogniser, new(move_gesture(left))),​ 
- 
-   ​send(B1,​ connect, B3, @in_out_link),​ 
-   ​send(B2,​ connect, B5, @in_out_link),​ 
-   ​send(B3,​ connect, B6, @in_out_link),​ 
-   ​send(B4,​ connect, B6, @in_out_link),​ 
-   ​send(B5,​ connect, B7, @in_out_link),​ 
-   ​send(B6,​ connect, B7, @in_out_link). 
- 
-Istnieje również możliwość tworzenia podpisanych obiektów. Można to osiągnąć poprzez podpisanie każdego z nich lub stworzenie tak zwanego "text boxa". Drugie wyjście otrzymujemy w przykładowy sposób: 
-  ​ 
-  text_box(TB,​ Text, Width, Height) :- 
-        new(TB, device), 
-        send(TB, display, 
-             ​new(B,​ box(Width, Height))), 
-        send(TB, display, 
-             ​new(T,​ text(Text, center, normal))), 
-        send(T, center, B?center). 
- 
-Niestety nie udało mi się zintegrować tego typu obiektu z przykładowym grafem. Wadą takiego obiektu jest słaba odporność na zmiany wielkość obiektu oraz aby ja modyfikować należy dość dobrze znać się na strukturze obiektu. 
- 
-Przesuwanie obiektu możemy osiągnąć poprzez przykładową komend: 
- 
-   ​send(B1,​x,​100),​ send(B1,​y,​120). 
- 
-Integrację z użytkownikiem możemy osiągnąć poprzez predykat: 
- 
-   ​send(B1,​ recogniser, 
-           ​click_gesture(left,​ '',​ double, 
-                         ​message(@pce,​ write_ln, hello))). 
- 
-Którego rezultatem jest po dwukrotnym kliknięciu kółka w linii komend pojawi się napis: "​hello"​ tak jak na poniższych obrazkach: 
- 
-przed: 
- 
-{{:​pl:​miw:​obraz3.png|:​pl:​miw:​obraz3.png}} 
- 
-po: 
- 
-{{:​pl:​miw:​obraz4.png|:​pl:​miw:​obraz4.png}} 
- 
- 
- 
- 
- 
- 
- 
-  
- 
-<​del>​Dodatkowo nie udało mi się jeszcze, że podwójne kliknięcie spowoduje wywołanie predykatu zadanego predykatu.</​del>​ 
- 
- 
-==== 6. Wnioski: ==== 
- 
-Pierwsze podejście do stworzenia przykładowego grafu podjąłem w systemie Ubuntu 8.04. Po zainstalowaniu z internetu odpowiednich paczek aplikacja nie odpalała się. Mimo prób uzyskania możliwości pracy z prologiem i XPCE pod Linuxem nie otrzymałem żadnych pozytywnych wyników, a brak lepszej znajomości z systemem nie pozwalał mi na rozwiązanie problemu. ​ 
-Drugie podejście podjąłem w bardziej znanym mi środowisku jakim jest Windows XP. Aplikacja działa poprawnie. ​ 
-XPCE nie jest tak proste i przyjazne w użytkowaniu jak może się wydawać na pierwszy rzut oka. Trzeba spędzić dużo czasu zanim się nauczy w nim programować. Jest ono ściśle związane z językiem Prolog, ma duże możliwości lecz stworzenie GUI jest pracochłonne,​ przy założeniu,​ że nie zna się jeszcze XPCE. 
- 
- 
-====== Materiały ====== 
- 
-  * {{:​pl:​miw:​referat.pdf|:​pl:​miw:​referat.pdf}} - referat kolegi na temat XPCE, 
- 
-  * {{:​pl:​miw:​userguide.pdf|:​pl:​miw:​userguide.pdf}} - opis XPCE, 
- 
-  * http://​www.hio.hen.nl/​faq/​xpce-programming.html - przydatne informacje o XPCE (5.05.2008) 
- 
-  * http://​www.urz.uni-heidelberg.de/​UnixCluster/​Hinweise/​Hilfe/​Anwendung/​Compiler/​Prolog/​UserGuide/​Contents.html (7.05.2008) 
- 
-  * http://​gollem.science.uva.nl:​8080/​ 
- 
-  * http://​www.swi-prolog.org/​packages/​xpce/​ 
- 
-  * Grzegorz J. Nalepa and Igor Wojnicki. (2008). An ARD+ Design and Visualization Toolchain Prototype in Prolog. 
- 
-  * Nalepa, G. J. (2008). UServ Case Study, Conceptual Design with ARD+ Method. Paper presented at the FLAIRS-21: Proceedings of the twenty-first international Florida Artificial Intelligence Research Society conference: 15--17 may 2008, Coconut Grove, Florida, USA, Menlo Park, California. 
- 
-  * Nalepa, G. J., & Wojnicki, I. (2008). Towards Formalization of ARD+ Conceptual Design and Refinement Method. Paper presented at the FLAIRS-21: Proceedings of the twenty-first international Florida Artificial Intelligence Research Society conference: 15--17 may 2008, Coconut Grove, Florida, USA, Menlo Park, California. 
- 
  
pl/miw/miw08_prolog_ardxpce.txt · ostatnio zmienione: 2019/06/27 15:50 (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