====== Opis ====== __**Projekt zakończony**__ Łukasz Łysik 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 ===== * todo: [[pl:prolog:prolog_lab:prolog_lab_2#tematprosty_system_ekspertowy|car expert system]] 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 [[hekate: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 ==== {{:pl:miw:car_expers_system_v.1.tar.gz|:pl:miw:car_expers_system_v.1.tar.gz}} {{:pl:miw:prolog_javasockets_v.1.jpg|:pl:miw:prolog_javasockets_v.1.jpg}} ==== Wersja 2 ==== {{:pl:miw:car_expers_system_v.2.tar.gz|:pl:miw:car_expers_system_v.2.tar.gz}} {{:pl:miw:prolog_javasockets_v.2.jpg|:pl:miw:prolog_javasockets_v.2.jpg}} ====== Sprawozdanie ====== Prosze o maila, jeśli coś trzeba jeszcze dodać. ===== Cele osiągnięte w projekcie (+ fixme) ===== ==== Serwer (Prolog) ==== - Zaimplementowanie serwera oczekującego na połączenia (dodanie pliku //varda_server.pl//). - 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. - FIXME Poprawić działanie serwera, gdy klient się rozłączy. - 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//). - FIXME Zweryfikować pod względem poprawności i wydajności. - Dodanie odczytu informacji z pliku //svg//: nazw atrybutów i współrzędnych (dodanie pliku //varda_pipesys.pl//. - Zmiany w pozostałych plikach projektu //varda// nie były dokonywane (poza dodaniem nagłówków do pliku //varda.pl//). ==== GUI (Java) ==== - Stworzenie GUI do edycji grafu. - FIXME Rozpoczynanie nowego grafu (dodawanie pierwszego elementu). - Możliwość finalizowania i splitowania elementów. - Możliwość przemieszczania elementów (metodą drag and drop - feature jGrapha) - FIXME Serializacja i deserializacja obiektu widoku (pierwsza próba nieudana, ale można spróbować jeszcze raz). ===== Uruchamianie projektu ===== ==== Serwer (Prolog) ==== - Ściągnij archiwum: {{:pl:miw:varda-prolog-1.0.tar.gz|:pl:miw:varda-prolog-1.0.tar.gz}} - Rozpakuj: tar -zxvf varda-prolog-1.0.tar.gz - Wejdź do katalogu: cd varda-prolog-1.0 - Uruchom przykładowy plik: ./varda therm-model.pl - Uruchom serwer na porcie 12345: :- create_server(12345). - Serwer oczekuje na połączenia. ==== GUI (Java) ==== - Ściągnij archiwum: {{:pl:miw:varda-gui-1.0.tar.gz|:pl:miw:varda-gui-1.0.tar.gz}} - Rozpakuj: tar -zxvf varda-gui-1.0.tar.gz - Wejdź do katalogu: cd varda-gui-1.0/bin - 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 ====== FIXME * http://www.csupomona.edu/~jrfisher/www/prolog_tutorial/8_4.html * [[pl:prolog:prolog_lab:prolog_lab_5|bagof/findall]] * [[pl:prolog:prolog_lab:prolog_lab_6|call etc.]] * [[http://72.5.124.55/docs/books/tutorial/uiswing/components/dialog.html|Java message box types]] * [[http://72.5.124.55/docs/books/tutorial/uiswing/components/tree.html|Trees in Java Swing]]