Zadania projektowe ================== Błędy, zapytania i niejasności na `lukpank at o2.pl` Wybór zadania ------------- 1. Wyboru będzie można dokonać począwszy *od czwartku 20 kwietnia od godziny 20.00* wysyłając na adres `lukpank at o2.pl` list o tytule pasującym do wyrażenia regularnego: + .... r'\[xml-wtorek\] select (\w+)(,\w+)*' .... + przykładowo aby wybrać w pierwszej kolejności BIBL, ewentualnie LUDZIE, ewentualnie KONF należy wysłać list o temacie + .... [xml-wtorek] select BIBL,LUDZIE,KONF .... 2. Listy będą przetwarzane w kolejności dostrczenia, przy czym listy wysłane lub odebrane wcześniej niż podany termin będą odsyłane jako *falstart*. 3. W odpowiedzi zwrócona zostanie informacja, które zadanie zostało wybrane lub lista dostępnych zadań, jeśli żadne z nich. 4. Aktualną listę dostępnych zadań będzie można uzyskać wysyłając list o temacie `[xml-wtorek] select \--list`. 5. Jeśli zamierza się realizować zadanie spoza poniższej listy należy użyć tematu `[xml-wtorek] select \--other` i w treści opisać zadanie. 6. Jedno zadanie mogą zarezerwować maksymalnie 3 osoby. 7. W przypadku ponownego wysłania listu zostanie wybrane nowe zadanie (jeśli któreś z podanej jest wolne), a wcześniej wybrane zostanie zwolnione. Proponowane zadania ------------------- Poniżej lista zadań wraz ze słowami kluczowymi do wyboru zadań. Klient może otrzymywać dedykowany XML i przetwarzać go lokalnie (http://en.wikipedia.org/wiki/Ajax_%28programming%29[AJAX]) albo otrzymywać http://www.xulplanet.com/[XUL] lub http://www.w3.org/MarkUp/#xhtml11[XHTML] wygenerowany za pomocą XSLT z jakiegoś innego języka XML. * http://www.xml.com/pub/a/2005/02/09/xml-http-request.html[What is AJAX? Very Dynamic Web Interfaces] -- wprowadzenie do XMLHttpRequest * http://manta.univ.gda.pl/~lpankows/xml-wtorek/links.html#py[Python: instalacja lxml i web.py] === 1. BIBL: Biblioteka wzajemna. Mamy grono przyjaciół, każdy z nich ma książki, których opisy może umieścić na serwerze. Dalej każdy z nich może przeszukiwać informacje o książkach, wybrać książkę i wysłać z serwera list z pytaniem do właściciela czy pożyczy mu zadaną książkę. Komunikacja między klientem, a serwerem musi odbywać się za pomocą XML, mile widziane użycie transformacji XSLT. Klientem może być przeglądarka XHTML lub XUL. .... {Klient} <--XML--> {Serwer} .... Serwer powinien zapisywać bazę, albo w pliku XML, albo w bazie relacyjnej. === 2. LUDZIE: Baza danych postaci historycznych. Mamy bazę danych postaci historycznych (imię, nazwisko, czas życia, komentarz), chcemy dodawać postacie oraz wyświetlić listę osób które żyły w danym roku, albo które żyły w tym samym czasie co wskazana postać (możliwość filtrowania po komentarzu). Program musi generować informację w postaci wykresu wykonanego dowolną techniką, najprostrzy która mi przychodzi głowy to pewien trik HTMLowy. .... {Klient} <--XML--> {Serwer} .... lub .... {GUI} <--XML--> Dysk .... === 3. SKLEPIK: Sklepik internetowy Sklep pozwalający wyszukać artykuły, wybrać i złożyć zamówienie, serwer powinien wysłać potwierdzenie przyjęcia zamówienia mailem. .... {Klient} <--XML--> {Serwer} .... === 4. CENNIK: Zbieracz cen Program zbierający informacje o artykułach z jakiś sklepów internetowych (np. kilku komputerowych) udostępniający tą informację dalej w postaci XML z możliwością wyszukiwania/filtrowania. .... {Klient} <--XML--> {Serwer} <--XML<--NastyHTML Cenniki .... lub .... {GUI} <--XML-- NastyHTML2XML <--NastyHTML-- Cenniki .... Być może trzeba będzie użyć jakiegoś konwertera HTML do XML. Może pomoże: - http://jtidy.sourceforge.net/[JTidy] -- Java port of tidy (2001, strona nowsza) - http://tidy.sourceforge.net/[tidy] - `xmllint --html` - http://www.crummy.com/software/BeautifulSoup/[Beautiful Soup] === 5. XHMS: XHTML + MathML + SVG Konwerter dukumentów http://www.w3.org/TR/XHTMLplusMathMLplusSVG/[XHTML + MathML + SVG] zamieniający http://www.w3.org/1999/07/REC-MathML-19990707/[MathML] i SVG na PNG, na potrzeby przeglądarki która nie obsługuje SVG ani MathML. W przypadku SVG można użyć dowolnego zewnętrznego konwertera: - apachowa http://xmlgraphics.apache.org/batik/[Batik] -- biblioteka Java'owa umożliwiająca taką konwersję - http://librsvg.sourceforge.net/[librsvg] zawiera konwerter SVG do PNG, komenda `rsvg` na mancie W przypadku MathML trzeba by napisać konwerter obsługujący indeksy górne, dolne oraz ułamki: 1. do LaTeXa a dalej komendą `dvipng` do PNG lub 2. do HTML z użyciem tabeli do uzyskania kreski ułamkowej. Interesujące byłoby zrealizowanie tego zadania jako serwer pośredniczący (HTTP proxy), ale można je wykonać jako program uruchamiany z linii poleceń. === 6. FAKTURA: Generator faktur Generator faktur pozwalający wpisywać wszelkie dane do faktury .... {GUI} <--XML--> {generator} -> PDF .... Lub wpisywać tylko dane adresowe (lub wybierać z listy zapamiętanych), a zasadniczą treść faktury (nazwy artykułów ich ilości ceny) otrzymywać jako zewnętrzny dokument XML (np. od innego programu o nazwie kasa) .... XML --> {GUI} <--XML--> {generator} --XSL-FO--> FOP --> PDF .... Generator powinien konwertować faktury do postaci plików PDF np. za pomocą jakiej biblioteki XML2PDF: * apachowej biblioteki http://xmlgraphics.apache.org/fop/[FOP] implementacji http://www.w3.org/StyleSheets/TR/logo-REC[XSL-FO] * http://www.jfree.org/jfreereport/index.php[JFreeReport] ,,At the moment no usefull documentation is available.'' -- czyli http://foldoc.org/?Use+the+Source+Luke[Use the Source, Luke]. W Debianie jest pakiet http://packages.debian.org/stable/doc/libjfreereport-java-doc[libjfreereport-java-doc] z API, ale to nie najnowsza wersja biblioteki. * przez Doocbook np. używając http://dblatex.sourceforge.net/[dblatex] lub http://cyberelk.net/tim/xmlto/[xmlto] * bezpośrednio używając bibliotekę http://itextdocs.lowagie.com/tutorial/[iText] (wykorzystywaną przez JFreeReport) === 7. SER: Generator listów seryjnych Generator listów seryjnych składający wzorzec listu `content.xml` z formatu OpenDocument z plikiem danych adresowych itp. z plikiem XML zawierającym te dane i zapisujący wynik szereg listów do jednego z formatów (do wyboru): XHTML, PDF (sposoby jak w zadaniu faktura) lub do nowego pliku OpenDocument. Informacje o formacie OpenDocument wykorzystywanym przez OpenOffice.org * http://www-128.ibm.com/developerworks/xml/library/x-think15/[Thinking XML: The open office file format] (wprowadzenie -- artykuł) * http://books.evc-cit.info/book.php[OpenOffice.org XML Essentials] (wprowadzenie -- książka) * http://xml.openoffice.org/general.html[OpenOffice.org XML File Format] (specyfikacja) === 8. SKONF: Serwer konfiguracji Serwer konfiguracji przechowujący dane konfiguracyjne w postaci drzewa XML w pliku (podstawowe typy danych). Do ktorego można zgłaszać zapytania (serwer nasłuchuje na sokecie) o wartości zmiennych konfiguracyjnych np. `/apps/przeglądarka/print/left-margin` i zmieniać ich wartości, do tego przykładowy klient odczytujący lub zapisujący dane do serwera konfiguracji według argumentów z linii poleceń. .... {Klient} <--soket:XML--> {Serwer} <--XML--> Dysk .... === 9. RSS: Klient RSS/Atom Prosty klient RSS/Atom client -- zbierający dane z kanałów RSS lub ATOM zapisujący w jednym pliku XMLowym wraz z jakimś interfejsem użytkownika (tekstowym lub graficznym). * Linki do standardów można znaleść na stronie http://www.nongnu.org/newsticker/[newsticker.el]. * http://feedvalidator.org/[FEED Validator] === 10. AUT: Baza danych informacji o artykułach automatycznych. Baza danych informacji o artykułach automatycznych. Artykułami są urządzenia automatyczne dla których dział konstrukcyjny może dorzucać firmware (mogą być linki). Dwa widoki: * Klienta -- ogląda bazę danych bez wewnętrznych linków do firmware'u * Działu produkcji -- dla każdego artykułu widzi dodatkowo link do najnowszego firmware'u. .... {Klient} <--XML--> {Serwer} .... === 12. TRANSFER: Szacowanie oszczędności transferu Mając statystykę odsłon dla poszczególnych stron pewnej witryny oszacować ile można zaoszczędzić miesięcznej przepustowości: konwertując obrazki do wyświetlanego rozmiaru pliku, zmieniając format plików z obrazkami, optymalizując obrazki bezstratnie (np. przy wykorzystaniu http://packages.debian.org/unstable/graphics/optipng[optipng]), konwertując pliki z ludzkim głosem MP3 i Ogg Vorbis do paramterów nie wpływających na utratę jakości odsłuchu. Statystyka zadana jako format XML. === 13. PKONF: Konfigurator programu Napisać program konwertujący zaprojektowany język XMLowy na format konfiguracyjny programu `fetchmail` (lub wybranego programu) oraz edytor konfiguracji zapisujący dane w tym formacie XMLowym i eksportujący do formatu konfiguracyjnego fetchmail (lub wybranego programu). .... {GUI} <--XML--> Dysk --format-programu--> Dysk .... === 14. CHROOT: Konwerter korzenia drzewa *na ocenę 3* Napisać program/konwerter zmieniający korzeń drzewa dokumentu XML. - Wejście: na wejściu drzewo (dokument XMLowy) z węzłami posiadającymi 'identyfikatory' oraz identyfikator węzła, który ma zostać nowym korzeniem. - Wyjście: Nowy dokument XML ze wskazanym węzłem jako nowym korzeniem. === *. \--other: inna aplikacja typu http://en.wikipedia.org/wiki/Ajax_%28programming%29[AJAX] Zaproponować będziemy się targować. Przykładowe Zadania ------------------- Celem zadań jest posmakowanie przetwarzania XML w praktyce. Naturalnymi zadaniami są wszelkiego typu konwertery języków XMLowych (przetwarzanie) oraz aplikacje wykorzystujące format XML (projektowanie i przetwarzanie), zwłaszcza takie dla których wybór języka XML jest naturalny (dlaczego?). Jeśli ktoś wymyśli inne ciekawe (lub mniej) zadanie i chciałby je realizować -- do ustalenia. Konwertery tekstowe lub wizualizacja ------------------------------------ - OpenDocument <==> (La)TeX - ew. OpenDocument <==> XHTML - MathML <==> wzór (La)TeX - SVG ==> (Display|PostScript|PDF) - SVG ==> PDF, może wykorzystując http://xmlgraphics.apache.org/fop/[FOP] - Odnośniki na stronie (zadana głębokość) ==> (Display|Graphviz) - xml diff/patch // - [4] Napisać program konwertujący zaprojektowany język XMLowy na // format konfiguracyjny programu `fetchmail`; [5] napisać dodatkowo // edytor konfiguracji zapisujący dane w tym formacie XMLowym i // eksportujący do formatu konfiguracyjnego fetchmail. - [5] Napisać w TeXu/LaTeXu konwerter XHTML2DVI, który da sensowny wynik dla rekomendacji http://www.w3.org/TR/xml11/. - Zdalny edytor XML napisany przy użyciu http://en.wikipedia.org/wiki/AJAX[AJAX]u (Asynchronous JavaScript And XML (AJAX) //////////// najpierw konwersja do xml potem przetwarzanie dokumentów xmlowych XXX - Zbieranie rozkładów autobusów i lub kolejek, możliwość sprawdzenia czy się coś zmieniło W komunikacji wykorzystać xmldiff (gotowy lub z zadania) XXX a co z prawami autorskimi i licencjami? /////////// Aplikacje rozproszone komunikujące się za pomocą nie trywialnego języka XML. ---------------------------------------------------------------------------- - Serwer/klient gry typu Szachy/Warcaby (serwer tylko poprawność ruchów) komunikujący się za pomocą dokumentów XMLowych (może XML-RPC?). Drobiazgi ----------