====== Varda Fix ====== Paweł Płazieński, niver@student.agh.edu.pl :!: Fix, [[hekate:VARDA]] improve, extend, build better ui, * list -> set! * audit! * [[http://gollem.science.uva.nl/SWI-Prolog/Manual/ugraphs.html]] * doc in pldoc * shell?: add, split, finalize * evaluate java guis FIXME ====== Spotkania ====== ===== 20090305 ==== * zalety ugraph, krótki przykład 1-2 predykatów * prosty shell: predykat czytajacy linie z wejscia z automatycznym dopelnianiem odpowiednich wartosci ===== 20090219 ==== Główny punkt spotkania: * ugraph i sens jego zastosowania * Lista ugraph-ów jako historia rozwoju diagramu ARD? Dodatkowe punkty: * Wyjaśnienie czy sort/2 wystarczy * shell: readline? ====== Projekt ====== Projekt Varda_Fix jest zbiorem kilku niezależnych względem siebie części związanych z VARDA'ą. ===== Zamiana list na zbiory ===== Patch do VARDY, który podował, że propercje zachowywały się jak zbiory, nie jak listy. Przykładowo lista ['Temp', 'Temp', 'Status'] powinna zachowywać się jak zbiór ['Status', 'Temp']. ===== Ugraphs ===== Sprawdzenie czy biblioteka [[http://www.swi-prolog.org/pldoc/doc_for?object=section(2%2C%20'A.25'%2C%20swi('%2Fdoc%2FManual%2Fugraphs.html'))|ugraphs]] nadaje się jako baza danych w VARDA'zie ===== Shell ===== Napisanie prostej, interaktywnej, podpowiadającej linii komend do użycia w VARDA'zie. ====== Sprawozdanie ====== ===== Zamiana list na zbiory ===== Naprawione to zostało przez predykat sort/2, który unifikuje drugi argument z pierwszym argumentem z usuniętymi duplikatami i posortowanym leksykograficznie. Predykat ten został umieszczony w niektórych klauzulach w których propercje były jednym z argumentów. Patch: [[http://student.agh.edu.pl/~niver/files/varda-sorting.diff]] ===== Ugraphs ===== Biblioteka ugraphs ustala prostą reprezentacje grafów skierownych i oferuje proste operacje na grafach. Sens jej użycia w VARDA'ize jest ciężki do ustalenia, gdyż nie oferuje ona nic więcej z czego VARDA mogłaby korzystać, a wymaga przepisania większości kodu i wymyślenia sposobu trzymania dwóch osobnych grafów na raz (zależności historyczne i zleżności modelowe). W ramach sprawdzenia sensowności użycia napisałem [[http://student.agh.edu.pl/~niver/files/minivarda.zip|MiniVarda]], która jest częściową implemntacją tego co oferuje VARDA, jednak opartą na Ugraphs. ===== Shell ===== Zimplementowany predykat getline/3, znajdujący się w pliku read-tools.pl w [[http://student.agh.edu.pl/~niver/files/minivarda.zip|MiniVardzie]] realizuje odczytanie linijki z klawiatury umożliwiając podpowiedzi i własny prompt. Może to w bardzo prosty sposób zostać wykorzystane w VARDA'zie. Później ten predykat został dostosowany do samej Vardy, zamieszczony jest w patchu razem z generacją schenariuszy historii poniżej. Patrz także przykład użycia shella na dole strony. ===== Generacja historii ===== Stworzyłem także metode generacji scenariuszy tworzenia diagramów ARD, które doprowadzają do tej samej histori TPH. Po wygenerowaniu scenariuszy, pierwsze 10 zapisywane jest do plików z wybranym przedrostkiem i odpowiednim numerem w formacie modelu Vardy. Patch (także dla shella): [[http://student.agh.edu.pl/~niver/files/varda-shell-generations.diff]] ====== Przykład użycia shella ====== Shell obsługuje pięć dodatkowych komend: * **ada** - dodanie atrybutu * **adp** - dodanie propercji * **fin** - finalizacja propercji * **spl** - split propercji * **dep** - stworzenie zależności pomiędzy propercjami Komendy są interaktywne, nie podaje się do nich żadnych argumentów [tzn po wpisaniu np. ''ada'' naciska się enter], same pytają o potrzebne informacje. Przy wpisywaniu tych danych można używać klawisza tabulacji [znanego także jako tabulator] aby uzyskać podpowiedzi. Przykładowy scenariusz prostego tworzenia diagramu ARD: - Aby uruchomić shell należy wpisać ''shl.'' i nacisnąć enter - to jest jeszcze polecenie prologa, nie shella - Aby dodać pierwszy atrybut, należy wpisać ''ada''. Po wciśnięciu entera na pytanie o nazwe, należy napisać ''Thermostat'' - Aby dodać propercje trzeba wpisać ''adp'' i naciśnąć enter. Można wpisać nazwę atrybutu, który wykorzystamy, ale shell po naciśnięciu klawisza tabulacji podpowie jedyną możliwością i uzupełni nią linijkę. Po wciśnięciu entera zostanie dodana propercja - Przed finalizacją trzeba dodać atrybuty poprzez polecenia ''ada''. Dalej będę zakładał, że nazywają się one ''Time'' i ''Temperature'' - Aby wykonać finalizacje propercji, należy napisać ''fin'' i nacisnąć enter. - Shell zapyta o starą propercje, wystaczy użyć klawisza tabulacji i nacisnąć enter. Można też spróbować napisać ''The'' i nacisnąć tabulator - shell dopełni możliwości mające taki prefiks. - Po wpisaniu albo wymuszeniu uzupełnienia i naciśnięciu enter system zapyta na jakie atrybuty sfinalizować propercje. Klawisz tabulacji w tym przypadku nie dopełni w linii poleceń, ponieważ jest więcej niż jedna wartość możliwa. Jednak po wpisaniu ''Ti'' naciśnięcie klawisza tabulacji spowoduje dopełnienie do ''Time'' - ponieważ tylko ta możliwość pasuje. Atrybuty na które się finalizuje podaje się osobno zatwierdzając każdy enterem. - Aby zakończyć wpisywanie atrybutów należy po prostu wysłać pustą linijkę, czyli nacisnąć enter bez wpisywania czegokolwiek. - Aby wykonać split należy wpisać ''spl'' i nacisnąć enter. - Shell zapyta o pełną [wieloargumentową propercje] na której będzie wykonywany split. W reprezentacji takiej propercji atrybuty są oddzielane przecinkiem. Aby wybrać naszą propercje, można wpisać ''Tem'' i nacisnąć klawisz tabulacji. - Następnie należy podać propercje na które ma zostać podzielona obecna. Wpisywane jest to tak jak atrybuty przy finalizacji, jednak to są pełne propercje - tzn. kolejne atrybuty podaje się oddzielając przecinkiem. Podaje się wiele takich propercji. - Aby zakończyć wybór propercji wynikowych, należy wysłać pustą linijkę. - Shell nie obsługuje dodawania bezpośrednio zależności w splicie, należy to zrobić osobno wpisując ''dep''. - Pierwsze podaje się śródło zależności - pełną propercje i naciska się enter. - Drugie podaje się cel zależności, także pełną propercje. - Aby zobaczyć wynik tych komend można wpisać ''sha''.