Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:miw:miw08_prolog_javasockets [2008/02/19 10:45] gjn |
pl:miw:miw08_prolog_javasockets [2019/06/27 15:50] (aktualna) |
====== Opis ====== | ====== Opis ====== |
| __**Projekt zakończony**__ |
| |
Łukasz Łysik <llysik@gmail.com> | Łukasz Łysik <llysik@gmail.com> |
| |
| |
====== Spotkania ====== | ====== Spotkania ====== |
| |
===== 08.03.04 ===== | ===== 08.03.04 ===== |
* zmiana java(server) na java client | * zmiana java(server) na java client |
* logic server | * logic server |
| |
todo: | |
car expert system | |
| ===== 08.03.18 ===== |
| * todo: [[pl:prolog:prolog_lab:prolog_lab_2#tematprosty_system_ekspertowy|car expert system]] |
| |
| <code prolog> |
| 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. |
| </code> |
| |
| <code prolog> |
| 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). |
| </code> |
| |
| Przy założeniu Java pyta prolog o diagnozę: |
| |
| Przerobić to: |
| <code prolog> |
| try_all_possibilities :- % Backtrack through all possibilities... |
| defect_may_be(D), |
| explain(D), |
| fail. |
| </code> |
| |
| //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 ====== | ====== 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 ====== | ====== 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: <code> tar -zxvf varda-prolog-1.0.tar.gz </code> |
| - Wejdź do katalogu: <code> cd varda-prolog-1.0 </code> |
| - Uruchom przykładowy plik: <code> ./varda therm-model.pl </code> |
| - Uruchom serwer na porcie 12345: <code> :- create_server(12345). </code> |
| - 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: <code> tar -zxvf varda-gui-1.0.tar.gz </code> |
| - Wejdź do katalogu: <code> cd varda-gui-1.0/bin </code> |
| - Uruchom program: <code> java -cp ../lib/jgraph.jar:./ varda_gui.Main </code> |
| |
| ===== 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ć | <code>list_finalizeables.</code> | <code>[[el1],[el2],[el3]]</code> | |
| | Pobieranie atrybutów splitowalnych FIXME Poprawić | <code>list_splitables.</code> | <code>[[el1a,el1b],[el2a,el2b],[el3a,el3b]]</code> | |
| | Pobieranie połączeń (zależności) | <code>list_deps.</code> | <code>[[el1]-[el2],[el2]-[el3],[el3]-[el4,el5]]</code> | |
| | Pobieranie atrybutów z pliku .svg | <code>list_items_from_svg.</code> | <code>el1@el2@el3,el4@</code> | |
| | Pobieranie współrzędnych z pliku .svg | <code>list_coords_from_svg.</code> | <code>12.5,23.4@12.0,34.5@</code> | |
| |
| 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: |
| <code>cat therm-model.svg | grep 'class="node"' | cut -d '>' -f3 | cut -d '<' -f1 | tr [:cntrl:] @</code> |
| |
| Pobieranie współrzędnych: |
| <code>cat therm-model.svg | grep -A1 'class="node"' | grep polygon | cut -d '"' -f4 | cut -d " " -f1 | tr [:cntrl:] @</code> |
| |
| n-ty atrybut na liście atrybutów odpowiada n-tej współrzędnej na liście współrzędnych. |
| |
====== Materiały ====== | ====== Materiały ====== |
fixme | FIXME |
* http://www.csupomona.edu/~jrfisher/www/prolog_tutorial/8_4.html | * 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]] |