Opis

Projekt zakończony

Łukasz Łysik llysik@gmail.com

Java ↔ Prolog via Sockets, examples, feasibility study, evaluation An example of enabling a Java tic tac toe GUI to interact with the Prolog tic tac toe game agent, using a socket data connector: http://www.csupomona.edu/~jrfisher/www/prolog_tutorial/8_4.html

Spotkania

08.03.04

  • zmiana java(server) na java client
  • logic server

08.03.18

user_says(Q,A) :- stored_answer(Q,A).
 
user_says(Q,A) :- \+ stored_answer(Q,_),
                  nl,nl,
                  ask_question(Q),
                  get_yes_or_no(Response),
                  asserta(stored_answer(Q,Response)),
                  Response = A.
user_says(Q,A) :- stored_answer(Q,A).
 
user_says(Q,A) :- \+ stored_answer(Q,_),
                  nl,nl,
                  java_ui_quest(Q,Response),
                  asserta(stored_answer(Q,Response)),
                  Response = A.
 
java_ui_quest(Q,R) :-
ask_qest_in_java(Q),
get_ans_from_java(R).

Przy założeniu Java pyta prolog o diagnozę:

Przerobić to:

try_all_possibilities :-     % Backtrack through all possibilities...
   defect_may_be(D),
   explain(D),
   fail.

defect_may_be to zapytanie do prologu…

080401

MISSED

080415

  • upload plików java/prolog do wiki + instr obsługi + wraz z opisem rozwiązania
  • model z varda, view w java, funkcjonalność z varda_model.pl (oraz ew. cześć innych predykatów) ma być udostępniania przez socket jako model, do tego jest view w javie

080422

  • proto varda

080429

  • dynamiczne generowanie zawartości (np. checkbox) okienka do split lub finalize
  • możliwość odpalenia sar/shi z gui.
  • kiedy można zrobić split/finalize →

ard_property

ard_hist
ard_dependency
patrz varda_view:dotgen_ard_body

080520

  • logika w prologu + shi/sar!

080610

  • split(V)→jgrapmvievserialize(V)→xml →split(varda)→sar_socket ←dot2jgxml→update(V)
  • po stronie V jest graphviz

dot -Tsvg us.dot|grep 'text-anchor' us.svg dot -Tsvg us.dot|grep -A1 'node' us.svg dot -Tsvg us.dot|grep -A1 'node' us.svg|cut -d ' ' -f 3|grep points|cut -d'„' -f2

080617

  • zacząć pisać sprawozd
    • krótki opis „protokołu”
    • sugestie co do rozszerzenia api vardy
    • sug. co do poprawy kody („switch”)

FutWork

Projekt

Car expert system

Wersja 1

Wersja 2

Sprawozdanie

Prosze o maila, jeśli coś trzeba jeszcze dodać.

Cele osiągnięte w projekcie (+ fixme)

Serwer (Prolog)

  1. Zaimplementowanie serwera oczekującego na połączenia (dodanie pliku varda_server.pl).
    1. FIXME Serwer wykonuje czynności na modelu na podstawie poleceń otrzymanych z socketów. Narazie realizowane jest to przez zagnieżdzone if. Można to przerobić na ładniejszy kod.
    2. FIXME Poprawić działanie serwera, gdy klient się rozłączy.
  2. Dodanie funkcji ard_split_2, która różni się tym, od ard_split, że nie trzeba podawać drugiego argumentu (czyli tego, na co splitujemy). Jest to obliczane automatycznie na podstawie podanych połączeń ( 3 argument funkcji ard_split).
    1. FIXME Zweryfikować pod względem poprawności i wydajności.
  3. Dodanie odczytu informacji z pliku svg: nazw atrybutów i współrzędnych (dodanie pliku varda_pipesys.pl.
  4. Zmiany w pozostałych plikach projektu varda nie były dokonywane (poza dodaniem nagłówków do pliku varda.pl).

GUI (Java)

  1. Stworzenie GUI do edycji grafu.
    1. FIXME Rozpoczynanie nowego grafu (dodawanie pierwszego elementu).
  2. Możliwość finalizowania i splitowania elementów.
  3. Możliwość przemieszczania elementów (metodą drag and drop - feature jGrapha)
  4. FIXME Serializacja i deserializacja obiektu widoku (pierwsza próba nieudana, ale można spróbować jeszcze raz).

Uruchamianie projektu

Serwer (Prolog)

  1. Ściągnij archiwum: :pl:miw:varda-prolog-1.0.tar.gz
  2. Rozpakuj:
     tar -zxvf varda-prolog-1.0.tar.gz 
  3. Wejdź do katalogu:
     cd varda-prolog-1.0 
  4. Uruchom przykładowy plik:
     ./varda therm-model.pl 
  5. Uruchom serwer na porcie 12345:
     :- create_server(12345). 
  6. Serwer oczekuje na połączenia.

GUI (Java)

  1. Ściągnij archiwum: :pl:miw:varda-gui-1.0.tar.gz
  2. Rozpakuj:
     tar -zxvf varda-gui-1.0.tar.gz 
  3. Wejdź do katalogu:
     cd varda-gui-1.0/bin 
  4. Uruchom program:
     java -cp ../lib/jgraph.jar:./ varda_gui.Main 

Protokół komunikacyjny

Wymiana informacji odbywa się na zasadzie komunikacji synchronicznej. Serwer prologowy jest odpytywany przez cześć javową. W poniższej tabeli przedstawiony jest protokół komunikacji.

FIXME Ujednolicenie i dopracowanie protokołu

Nazwa Zapytanie (od strony javy) Odpowiedź (od prologa)
Pobieranie atrybutów finalizowalnych FIXME Poprawić
list_finalizeables.
[[el1],[el2],[el3]]
Pobieranie atrybutów splitowalnych FIXME Poprawić
list_splitables.
[[el1a,el1b],[el2a,el2b],[el3a,el3b]]
Pobieranie połączeń (zależności)
list_deps.
[[el1]-[el2],[el2]-[el3],[el3]-[el4,el5]]
Pobieranie atrybutów z pliku .svg
list_items_from_svg.
el1@el2@el3,el4@
Pobieranie współrzędnych z pliku .svg
list_coords_from_svg.
12.5,23.4@12.0,34.5@

FIXME Można połączyć ze sobą pobieranie atrybutów i współrzędnych. Są one pobierane z tego samego pliku za pomocą poleceń z konsolowych cat, grep, cut, tr.

Pobieranie atrybutów:

cat therm-model.svg | grep 'class="node"' | cut -d '>' -f3 | cut -d '<' -f1 | tr [:cntrl:] @

Pobieranie współrzędnych:

cat therm-model.svg | grep -A1 'class="node"' | grep polygon | cut -d '"' -f4 | cut -d " " -f1 | tr [:cntrl:] @

n-ty atrybut na liście atrybutów odpowiada n-tej współrzędnej na liście współrzędnych.

Materiały

pl/miw/miw08_prolog_javasockets.txt · ostatnio zmienione: 2017/07/17 08:08 (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