VYSOKEU´ CENˇ ITECHNICK´ EVBRN´ Eˇ FAKULTA INFORMACNˇ ICHTECHNOLOGI´ I´

Jabber/XMPP robot pro pripomˇ ´ınkovacˇ Bakala´rskˇ a´ prace´

2007 Petr Mensˇ´ık Jabber/XMPP robot pro pripomˇ ´ınkovacˇ

Odevzdano´ na Fakulteˇ informacnˇ ´ıch technologi´ı Vysokeho´ ucenˇ ´ı technickeho´ v Brneˇ dne 22. leden 2007

c Petr Mensˇ´ık, 2007

Tato prace´ vznikla jako skolnˇ ´ı d´ılo na Vysokem´ ucenˇ ´ı technickem´ v Brne,ˇ Fakulteˇ informacnˇ ´ıch technologi´ı. Prace´ je chran´ enaˇ autorskym´ zakonem´ a jej´ı uzitˇ ´ı bez udelenˇ ´ı opravn´ enˇ ´ı autorem je nezakonn´ e,´ s vyjimkou´ zakonem´ definovanych´ prˇ´ıpadu.˚

Prohla´senˇ ´ı

Prohlasuji,ˇ zeˇ jsem tuto bakala´rskouˇ praci´ vypracoval samostatneˇ pod veden´ım Mgr. Marka Rychleho.´ Uvedl jsem vsechnyˇ literarn´ ´ı prameny a publikace, ze kterych´ jsem cerpal.ˇ

...... Petr Mensˇ´ık 22. leden 2007 Abstrakt

C´ılem tohoto projektu bylo seznamen´ ´ı se s otevrenouˇ s´ıt´ı XMPP, jej´ımi principy a fungovan´ ´ım. Tento program je urcenˇ k automatickemu´ pripomˇ ´ınan´ ´ı udalost´ ´ı presˇ s´ıt’ instant messangingu. Jeho ukolem´ je organizovat udalosti´ jednoduche,´ pouze pomoc´ı jednoduche´ zpravy´ i slozitˇ ejˇ sˇ´ı opakovane´ deje.ˇ C´ılem bylo usnadnit spravu´ takovych´ udalost´ ´ı dle moznostˇ ´ı klienta.

Kl´ıcovˇ a´ slova

XMPP, Jabber, upom´ınky, casovˇ e´ pasmo,´ svetovˇ y´ cas,ˇ Psi, , Exodus, JAJC, UTC, XML, stanza

Podekovˇ an´ ´ı

Rad´ bych podekovalˇ svemu´ vedouc´ımu Mgr. Markovi Rychlemu´ za vstrˇ´ıcny´ a obetavˇ y´ prˇ´ıstup i velmi peknˇ e´ zadan´ ´ı. Dale´ bych chtelˇ podekovatˇ svoj´ı rodineˇ za laskavy´ prˇ´ıstup a podrzenˇ ´ı ve chv´ıl´ıch nejvetˇ sˇ´ıho napetˇ ´ı. Petrovi Wechovi velice dekujiˇ za komenta´reˇ k tomuto textu. Abstract

The objective of this thesis was acquaint oneself with open IM network XMPP, its principles and working. This program aims to be automatic reminding machine on instant messanging network. It’s work is organizing simple and repeated events.

Keywords

XMPP, Jabber, time zone, world time, Psi, Gajim, Exodus, JAJC, UTC, XML, stanza Obsah

Obsah 6

1 Uvod´ 8 1.1 Motivace ...... 8 1.2 C´ıle projektu ...... 8

2 Teorie 9 2.1 Seznamen´ ´ı s pojmy ...... 9 2.1.1 Instant Messanging ...... 9 2.1.2 Jabber/XMPP ...... 9 2.1.3 IRC ...... 10 2.2 XML ...... 10 2.2.1 Extensible Markup Language ...... 10 2.2.2 Prace´ s XML ...... 11 2.2.3 SAX ...... 11 2.2.4 DOM ...... 11 2.2.5 Streaming XML ...... 11 2.3 Fungovan´ ´ı XMPP/Jabber ...... 12 2.3.1 XMPP Core ...... 12 2.3.2 Stanzy ...... 15 2.3.3 XMPP IM ...... 17 2.3.4 Jabber ID ...... 17 2.3.5 XEP ...... 18 2.3.6 Service Discovery ...... 18 2.4 Servery ...... 18 2.4.1 Jabberd 1.x ...... 18 2.4.2 Jabberd 2 ...... 19 2.4.3 ...... 20 2.5 Klienti ...... 20 2.5.1 Psi ...... 20 2.5.2 Gajim ...... 21 2.5.3 JAJC ...... 21 2.5.4 Exodus ...... 21 2.6 Rozd´ıly sluzbyˇ a klienta ...... 21 2.6.1 Klient ...... 21 2.6.2 Sluzbaˇ ...... 22

6 3 Navrh´ 24 3.1 Databaze´ ...... 24 3.1.1 Prˇ´ıpady pouzitˇ ´ı ...... 24 3.1.2 ER diagram ...... 24 3.2 Trˇ´ıdy robota ...... 25 3.2.1 Knihovna pro XMPP ...... 26 3.2.2 Knihovna pro MySQL ...... 26 3.2.3 Trˇ´ıdy Event a User ...... 26 3.2.4 Trˇ´ıda Time ...... 26 3.2.5 Trˇ´ıdy Lexical a Syntax ...... 27 3.2.6 Princip ...... 27 3.2.7 Posun casuˇ ...... 27

4 Implementace 28 4.1 Casovˇ e´ zony´ ...... 28 4.1.1 Zjistˇ’ovan´ ´ı casuˇ ...... 28 4.1.2 Zkratky casovˇ ych´ pasem´ ...... 29 4.1.3 Prechodyˇ letn´ıho a zimn´ıho casuˇ ...... 29 4.1.4 Reˇ senˇ ´ı posunu casuˇ ...... 30 4.1.5 Podpora klientu˚ ...... 30 4.2 Sprava´ upom´ınek ...... 31 4.2.1 Registrace ...... 31 4.2.2 Prohl´ızenˇ ´ı sluzebˇ ...... 31 4.2.3 Editace upom´ınky ...... 31 4.3 Textove´ prˇ´ıkazy ...... 32 4.3.1 Lexikaln´ ´ı analyzer´ ...... 32 4.3.2 Kl´ıcovˇ a´ slova ...... 33 4.3.3 Syntaxe ...... 34 4.4 Omezen´ı platformy ...... 34

5 Moznostiˇ dalsˇ´ıho vyvoje´ 35 5.1 Internacionalizace ...... 35 5.2 Dalsˇ´ı moznostiˇ ...... 35 5.3 Webove´ rozhran´ı ...... 35 5.4 Synchronizace s kalenda´remˇ ...... 36

6 Zav´ erˇ 37

7 Kapitola 1

Uvod´

Dnesnˇ ´ı doba klade na clovˇ ekaˇ velke´ naroky.´ Modern´ı clovˇ ekˇ zijeˇ v neustalem´ shonu a stresu, mezi des´ıtkami dalsˇ´ıch lid´ı a zneciˇ stˇ enˇ em´ ovzdusˇ´ı. Mimo jine´ i d´ıky pocˇ´ıtacˇum˚ a dalsˇ´ım modern´ım vymozenostemˇ lidstva. Ackolivˇ si clovˇ ekˇ vynalez´ a´ velke´ mnozstvˇ ´ı pomucek,˚ aby si svoje zivobytˇ ´ı usnadnil, ma´ porˇad´ velke´ mnozstvˇ ´ı starost´ı a povinnost´ı, ktere´ nesnesou dalsˇ´ıho odkladu. Protoze,ˇ na rozd´ıl od pocˇ´ıtace,ˇ lidska´ pametˇ’ netika´ ani s taktem digitaln´ ´ıch hodin, ani clovˇ ekˇ nen´ı schopen si ulozitˇ svoje myslenkyˇ natrvalo, stane se, zeˇ clovˇ ekˇ na necoˇ zapomene. Neco,ˇ co uzˇ davno´ meloˇ byt´ hotove.´ Nebo je prˇ´ılisˇ zamestnˇ an´ svoj´ı cinnostˇ ´ı, zeˇ nezareaguje vcas.ˇ

1.1 Motivace

I kdyzˇ organizacnˇ ´ıch programu,˚ ktere´ castoˇ slouzˇ´ı jako soukroma´ sekreta´rka,ˇ je velke´ mnozstvˇ ´ı, ne vzdyˇ jsou priˇ ruce. Protozeˇ v Ceskˇ e´ republice uzˇ rozvoj internetu postoupil kupredu,ˇ je dostupny´ na mnoha m´ıstech, at’ uzˇ je to zamestnˇ an´ ´ı nebo domov. Protozeˇ clovˇ ekˇ pripojenˇ y´ na internet je castoˇ pripojenˇ do s´ıteˇ pomoc´ı komunikacnˇ ´ıho programu, je moznˇ e´ se prav´ eˇ pomoc´ı nejˇ nechat upozornovat.ˇ A prav´ eˇ takove´ upom´ınky jsou nam´ etemˇ tohoto projektu. S´ıt’ pro zas´ılan´ ´ı rychlych´ zprav´ XMPP je rozsiˇ ritelnˇ a´ platforma nejen pro zas´ılan´ ´ı beˇznˇ ych´ zprav.´ Je otevrenˇ a,´ s velmi dobreˇ popsanym´ protokolem a velkym´ mnozstvˇ ´ım podpurn˚ ych´ kniho- ven. Protokol je od pocˇatku´ navrzenˇ pro dalsˇ´ı snadne´ rozsiˇ rovˇ an´ ´ı, anizˇ by ohrozil fungovan´ ´ı jizˇ existuj´ıc´ıch programu.˚ S´ıt’ neslouzˇ´ı zdaleka jenom pro vym´ enuˇ zprav,´ ale kromeˇ informac´ı o stavu mu˚zeˇ prenˇ a´setˇ data, soubory, obrazky´ a jine.´

1.2 C´ıle projektu

V kapitole 2 priblˇ ´ızˇ´ım ctenˇ a´riˇ problematiku nejdrˇ´ıve obecne,ˇ pote´ vysvetlˇ ´ım princip fungovan´ ´ı s´ıteˇ XMPP. Ke konci kapitoli seznam´ ´ım ctenˇ a´reˇ s nekolikaˇ existuj´ıc´ımi implementacemi serveru˚ i kli- entu.˚ Kapitola 3 pribliˇ zujeˇ navrh´ vlastn´ıho programu a velmi obecneˇ jak bude robot fungovat. Kapitola 4 popisuje vlastn´ı implementaci sluzbyˇ a konkretn´ ´ı pricip jej´ıho fungovan´ ´ı. Kapitola 5 shrnuje moznostiˇ dalsˇ´ı prace´ na robotovi a dalsˇ´ı moznˇ a´ vylepsenˇ ´ı, ktere´ by v dalsˇ´ı fazi´ vyvoje´ mohl poskytovat svym´ uzivatelˇ um.˚

8 Kapitola 2

Teorie

2.1 Seznamen´ ´ı s pojmy

2.1.1 Instant Messanging Pro komunikaci mezi lidmi slouzˇ´ı od davn´ ych´ dob internetu system´ zvany´ e-mail. Je to elektronicka´ obdoba postyˇ s mnoha jej´ımi problemy´ a nesvary“.ˇ Je sice nekolikanˇ asobn´ eˇ rychlejsˇ´ı nezˇ jakykoliv´ ” postˇ’ak,´ ktery´ postuˇ rozna´sˇ´ı, ale prestoˇ nen´ı myslenaˇ na komunikaci v realn´ em´ case.ˇ Beˇznˇ y´ email se k uzivateliˇ nedorucujeˇ prˇ´ımo, ale dorucujeˇ se do jeho schranky.´ Teprve z teto´ schranky´ si mu˚zeˇ uzivatelˇ novy´ email vyzvednout a nasledn´ eˇ preˇ cˇ´ıst. I kdyzˇ dnes ma´ vetˇ sinaˇ programu˚ nastavene´ vyb´ıran´ ´ı postyˇ na kratkou´ periodu, nejcastˇ ejiˇ 5 minut, stale´ to nen´ı dost rychle ani na pomaly´ roz- hovor. Protozeˇ lide´ si radi´ vykladaj´ ´ı, radi´ by si vykladali´ troskuˇ rychleji. A to je prav´ eˇ u´celˇ programu˚ Instant Messangingu, volneˇ preloˇ zenoˇ programu˚ pro rychlou vym´ enuˇ zprav.´ Na ceskˇ em´ internetu se podobne´ programy stale´ castˇ ejiˇ oznacujˇ ´ı kecalky“.´ Tyto ” programy uzˇ nemaj´ı zˇadnou´ schranku,´ do ktere´ nejprve necoˇ mus´ı dorucit.ˇ Tyto programy se naopak snazˇ´ı o dorucenˇ ´ı prˇ´ıme,´ od uzivateleˇ k uzivateli.ˇ Komunikace v techtoˇ s´ıt´ıch se nazyv´ a´ komunikac´ı v tem´ eˇrˇ realn´ em´ case.ˇ Slov´ıckoˇ tem´ eˇrˇ je na m´ıste,ˇ protozeˇ nen´ı definovane´ doba, za kterou mus´ı byt´ zprava´ dorucena.ˇ Zas´ılan´ ´ım zprav´ v realn´ em´ caseˇ chapeme´ v dnesnˇ ´ım internetu sp´ıseˇ veciˇ synchro- nizovane´ s casem,ˇ kde zpozdenˇ ´ı ma´ nezˇadouc´ ´ı efekt na kvalitu sluzby.ˇ Systemy´ beˇzˇ´ıc´ı v realn´ em´ caseˇ jsou naprˇ´ıklad rˇ´ıd´ıc´ı jednotky automobilovych´ motoru,˚ kde zpozdˇ enˇ ´ı jedna vterinaˇ v zˇadn´ em´ prˇ´ıpadeˇ nastat nesm´ı. Naproti tomu, v beˇznˇ e´ komunikaci mezi lidmi, nehraje jedna nebo dveˇ vterinyˇ zasadn´ ´ı roli. Problem´ techtoˇ programu˚ ovsemˇ je, ze,ˇ na rozd´ıl od emailu, nepochaz´ ´ı ze stejneho´ navrhu,´ ani nemaj´ı zverejnˇ enˇ y´ protokol popisuj´ıc´ı komunikaci v jejich s´ıti. Dokonce provozovatele´ takovych´ s´ıt´ı obvykle vubec˚ nestoj´ı o to, aby se pripojovalˇ se nekdoˇ do jejich s´ıteˇ s jinym´ programem, nezˇ je jejich vlastn´ım. T´ım padem´ jsou vsechnyˇ takove´ s´ıteˇ oddelenˇ e´ jedna od druhe´ a jejich uzivatelˇ e´ mus´ı byt´ vsichniˇ na te´ stejne´ s´ıti, pokud spolu chtejˇ ´ı komunikovat. Tuto mezeru vyplnujeˇ prav´ eˇ protokol Jabber.

2.1.2 Jabber/XMPP Prvn´ım neznam´ ym´ pojmem je Jabber/XMPP. Slovo Jabber znamena´ v prekladuˇ brebentit nebo breptat. Jako protokol vnikl v roce 1999 a za jeho vznikem a prvotn´ı implementac´ı stoj´ı Jerremie Miller. Jednou z jeho unikatn´ ´ıch vlastnost´ı je, mimo mnoha jinych,´ take´ jeho otevrenost.ˇ Protokol je zalozenˇ y´ na otevrenˇ em´ a uznavan´ em´ standardu XML. Jabber prineslˇ otevrenostˇ a jednoduchy´ popis fungovan´ ´ı protokolu.

9 Narozd´ıl od ostatn´ıch protokolu˚ nebyl prosazovan´ jednou firmou se svym´ oficialn´ ´ım klientem, ale definoval jednoznacnˇ y´ zpusob,˚ jak spolu maj´ı jakekoliv´ dva programy komunikovat. Vyb´ erˇ XML v kombinaci s XML namespaces prineslˇ nav´ıc moznostˇ rozsiˇ rovatˇ protokol o nove´ prvky bez obav, zeˇ sluzbyˇ a programy podporuj´ıc´ı pouze stare´ vlastnosti prestanouˇ fungovat. V te´ dobeˇ byl jestˇ eˇ protokol oznacovˇ an´ jenom Jabber. Prestoˇ zeˇ byl protokol Jabber ve sve´ dobeˇ stabilizovan,´ existovala dostatecnˇ eˇ stabiln´ı implemen- tace serveru a uzivatelˇ e´ pribˇ yvali,´ porˇad´ protokol pripomˇ ´ınal jenom jednu s´ıt’ z mnoha. Aby se predeˇ sloˇ pochybnostem o tom, zeˇ protokol nen´ı jenom dalsˇ´ım z radyˇ jizˇ existuj´ıc´ıch IM s´ıti, jako jsou ICQ nebo MSN Messenger, byl navrzenˇ novy,´ neutraln´ ´ı, nazev´ pro protokol Extensible Messa- ging and Presence Protocol – XMPP.Azˇ pod nazvem´ XMPP byl protokol uznan´ jako doporucenˇ ´ı IETF pod oznacenˇ ´ım RFC 3920 [4] a RFC 3921 [5]. XMPP je kompatibiln´ı protokol s puvodn˚ ´ımi specifikacemi Jabber protokolu, ale zavad´ ´ı nove´ povinnosti. V podstateˇ tak stary´ protokol nahrazuje a pokud se bav´ıme dnes o protokolu Jabber, mame´ na mysli sp´ıseˇ jeho nasledn´ ´ıka protokol XMPP. Detaily protokolu budou popsany´ v dalsˇ´ıch kapitolach.´

2.1.3 IRC Protokol IRC [2] je protokol urcenˇ y´ predevˇ sˇ´ım k diskuz´ım v´ıce lid´ı ve virtualn´ ´ıch m´ıstnostech. Prestoˇ zeˇ nema´ mnoho spolecnˇ eho´ se systemem´ XMPP, je jedn´ım z mala´ otevrenˇ ych´ standardizo- vanych´ protokolu,˚ ktere´ se hojneˇ pouzˇ´ıvaj´ı. Na tomto protokolu jsou peknˇ eˇ videtˇ nesvaryˇ zpusoben˚ e´ vekemˇ tohoto protokolu. Je sice otevrenˇ y,´ verejnˇ eˇ zdokumentovany´ a pocetˇ programu˚ jej podpo- ruj´ıc´ıch lze na rukou teˇzkoˇ spocˇ´ıtat, ale je zalozenˇ y´ na pos´ılan´ ´ı textovych´ zprav´ v textovem´ tvaru. Jedna zprava´ zacˇ´ına´ prˇ´ıkazem, jejich parametry a koncˇ´ı novym´ rˇadkem.´ Z toho plyne omezen´ı pro- tokolu — zpravu´ obsahuj´ıc´ı odrˇadkovan´ y´ text se na jediny´ pokus podaritˇ nikdy nepodarˇ´ı. Nav´ıc ma´ problemy´ s urcovˇ an´ ´ım kodov´ e´ stranky,´ takzeˇ lide´ na ruzn˚ ych´ platformach´ vid´ı text s chybnymi´ znaky m´ısto diakritiky.

2.2 XML

2.2.1 Extensible Markup Language XML [11] je jednoduchy´ hierarchicky´ znackovacˇ ´ı jazyk. Je odvozen od puvodn˚ ´ıho slozitˇ ejˇ sˇ´ıho znac-ˇ kovac´ıho jazyka SGML (ISO 8879). Zam´ eremˇ XML bylo vyvinou dostatecnˇ eˇ jednoduchy´ jazyk pro prenosˇ strukturovanych´ dat. Data jsou v textovem´ formatu´ a nejsou tedy ovlivnenaˇ nekompatibi- litou mezi ruzn˚ ymi´ platformami. Jazyk byl zamy´slenˇ k vym´ enˇ eˇ velkych´ objemu˚ dat mezi archivy textu,˚ naselˇ si ale cestu do vsechˇ odvetvˇ ´ı pocˇ´ıtacovˇ e´ techniky jako nesm´ırneˇ univerzaln´ ´ı format´ pro vym´ enuˇ hierarchickych´ dat. Nasleduje´ mala´ ukazka´ XML.

Pˇr´ıpadn´ydalˇs´ıobsah nen´ıobsaˇzen

10 Elementy jazyka nazyv´ ame´ tagy. Tag je hierarchicky´ jednotka, ktera´ mu˚zeˇ m´ıt svoje atributy, tedy parametry s hodnotou uzavrenouˇ v jednoduchych´ uvozovkach.´ Mu˚zeˇ m´ıt take´ potomky–tagy, nebo vlastn´ı hodnotu uzavrenouˇ mezi pocˇate´ cnˇ ´ım a koncovym´ tagem. Koncovy´ tag je uvozen lom´ıtken /. Jazyk XML nen´ı jenom jednoduchym´ jazykem pro prenosˇ proste´ informace. Existuje naprˇ´ıklad rozsˇ´ırenˇ ´ı XLink, neboli XML Linking Language, ktere´ definuje propojovan´ ´ı a odkazovan´ ´ı na jine´ XML dokumenty nebo jejich cˇasti.´ Dale´ naprˇ´ıklad XPath odkazuje na cˇasti´ dokumentu sameho,´ tedy do jineho´ m´ısta ve stejnem´ souboru. Pro XML existuje velke´ mnozstvˇ ´ı moznostˇ ´ı a pouzitˇ ´ı, ale hlavn´ı vyznam´ ma´ jeho existence pro strojove´ zpracovan´ ´ı informac´ı. Jednak umoznˇ ´ı platformneˇ nezavislou´ vym´ enu,ˇ ale mimo jine´ take´ umozˇnujeˇ transformaci jednoho XML souboru do jineho´ XML souboru pomoc´ı transformacnˇ ´ıho jazyka XSLT. Zaj´ımavost´ı je, zeˇ i definice tohoto jazyka jsou vlastneˇ dalsˇ´ım XML dokumentem.

2.2.2 Prace´ s XML Ackolivˇ uzˇ jsem uvedl, zeˇ znackovacˇ ´ı jazyk XML je jednoduchy´ jazyk, prace´ s n´ım ma´ svoje zvla´stnosti.ˇ I presto,ˇ zeˇ format´ dat je ryze textovy,´ pro ctenˇ ´ı XML souboru˚ se zpravidla pouzˇ´ıva´ knihoven. Sou- bory maj´ı na pohled jednoduchou strukturu, ale ke spravn´ emu´ ctenˇ ´ı a zapisu´ se zpravidla pouzˇ´ıva´ specializovanych´ knihoven. Text mu˚zeˇ obsahovat znakove´ entity, ktere´ je predˇ zobrazen´ım uzivateliˇ prevˇ est.´ Knihovny pro zpracovan´ ´ı XML najdeme dnes snad pro kterykoliv´ pouzˇ´ıvany´ jazyk a plat- formu.

2.2.3 SAX SAX, neboli Simple Api for XML je rozhran´ı pro sekvencnˇ ´ı ctenˇ ´ı XML souboru. Jeho nespornou vyhodou´ je rychlost zpracovan´ ´ı dokumentu. Protozeˇ dokument nenacˇ´ıta´ cely´ naraz´ do pameti,ˇ jeho rychlost se nesnizujeˇ ani priˇ velmi velkych´ dokumentech. Jeho pouzitˇ ´ı je vsakˇ pro programatora´ o to slozitˇ ejˇ sˇ´ı. SAX lze pouzˇ´ıt jenom ke ctenˇ ´ı dokumentu, na zapis´ textu se tento zpusob˚ nehod´ı.Toto rozhran´ı nen´ı standartizovano´ zˇadnou´ organizac´ı a je odvozeno od puvodn˚ ´ı implementace rozhran´ı v Jave.ˇ Jednou z kvalitn´ıch knihoven tohoto typu je knihovna expat.

2.2.4 DOM Document Object Model je naproti tomu rozhran´ı pro objektovy´ prˇ´ıstup k dokumentum.˚ Oproti SAX je zpusob˚ prace´ s dokumentem zcela odlisnˇ y,´ protozeˇ je trebaˇ nacˇ´ıst cely´ dokument do pameti.ˇ Vyhodou´ je snadna´ prace´ s dokumentem a intuitivn´ı moznostˇ pohybu dopreduˇ i zpatky.´ Nevyhodou´ je, zeˇ priˇ opravdu velkych´ dokumentech takovy´ prˇ´ıstup klade velke´ naroky´ na system.´ O to horsˇ´ı je potom dopad na system,´ pokud se tento zpusob˚ pouzˇ´ıva´ ve vetˇ sˇ´ı m´ıreˇ na velkych´ souborech, naprˇ´ıklad na serveru, kde beˇzˇ´ı mnozstvˇ ´ı dalsˇ´ıch procesu˚ s naroky´ na pametˇ’.

2.2.5 Streaming XML Priˇ pouzitˇ ´ı XML presˇ s´ıt’ je problematicke´ ctenˇ ´ı doslˇ ych´ tagu,˚ dokud jestˇ eˇ nejsou zcela kompletn´ı. Jestlizeˇ Jabber/XMPP pouzˇ´ıva´ pro prenosˇ veskerˇ ych´ zprav´ XML, mus´ı byt´ schopen dekodovat´ XML jestˇ eˇ predˇ uzavrenˇ ´ım kompletn´ıho spojen´ı. Jinak bychom mohli hodneˇ teˇzkoˇ mluvit o rychlem´ zas´ılan´ ´ı zprav,´ pokud by priˇ kazdˇ e´ zprav´ eˇ bylo potrebaˇ navazat´ a zase ukoncitˇ spojen´ı. Nav´ıc kazdˇ e´ navazovan´ ´ı a rusenˇ ´ı spojen´ı je zbytecnˇ a´ zat´ eˇzˇ s´ıteˇ i systemu´ v prˇ´ıpade,ˇ zeˇ zpravy´ jsou odes´ılany´ casto.ˇ U systemu´ pro rozhovor lid´ı se necoˇ takoveho´ ocekˇ av´ a´ pokazdˇ e,´ kdyzˇ spolu zacnouˇ komu- nikovat. Je jiste,´ zeˇ zpracovat prijˇ ´ımany´ text pomoc´ı modelu DOM nen´ı moznˇ e,´ protozeˇ za zˇadn´ ych´

11 okolnost´ı nebude k dispozici kompletn´ı XML strom, ktery´ by bylo moznˇ e´ nacˇ´ıst. Po pripojenˇ ´ı XMPP server otev´ıra´ tag , ktery´ se uzav´ıra´ azˇ po ohla´senˇ ´ı od s´ıteˇ nebo po chybeˇ syntaxe XML.

2.3 Fungovan´ ´ı XMPP/Jabber

2.3.1 XMPP Core XMPP Core [4] je zakladn´ ´ı mnozinouˇ protokolu XMPP. Tato cˇast´ definuje zakladn´ ´ı prvky protokolu. I kdyzˇ to nen´ı prikˇ az´ ano,´ obvykla´ je architektura klient-server a spojen´ı pomoc´ı TCP protokolu. Jed- nou z nejvetˇ sˇ´ıch prednostˇ ´ı je decentralizace. Neexistuje zˇadn´ y´ centraln´ ´ı server s´ıteˇ Jabber/XMPP a tedy nen´ı moznˇ e´ vyraditˇ celou s´ıt’ pomoc´ı napaden´ı nebo selhan´ ´ı na jednom m´ıste.ˇ Jak funguje decentralizace ukazuje obrazek´ 2.1. Uzivatelˇ e´ se pripojujˇ ´ı na svuj˚ vlastn´ı server. Pokud chtejˇ ´ı komunikovat s lidmi z jinych´ serveru,˚ pozˇadaj´ ´ı o autorizaci. Server automaticky rozpozna,´ zeˇ zprava´ nen´ı adresovana´ kontaktum˚ lokaln´ ´ım, ale serveru jinemu.´ K dorucenˇ ´ı zpravy´ se potom mus´ı server spojit s c´ılovym´ serverem c´ıloveho´ kontaktu. XMPP Core definuje predevˇ sˇ´ım zpusob˚ pripojenˇ ´ı autentizace klientu˚ k serveru. Tato spe- cifikace uvad´ ´ı pouze podporu SASL1 autentizace, avsakˇ starsˇ´ı klienty a servery mohou pouzˇ´ıvat i starsˇ´ı zpusob˚ autentizace pomoc´ı SHA1 hashe hesla. Jednou z hlavn´ıch prednostˇ ´ı protokolu je sirokˇ a´ podpora bezpecnostˇ ´ıch prvku.˚ Kromeˇ jizˇ zm´ınenˇ e´ bezpecnˇ e´ autorizace pocˇ´ıta´ protokol i s pouzitˇ ´ım sifrovanˇ eho´ kanalu´ pro vym´ enuˇ dat. I kdyzˇ puvodn˚ ´ı Jabber servery podporuj´ı i pripojenˇ ´ı na specialn´ ´ı TCP port chran´ enˇ y´ pomoc´ı SSL spojen´ı, novejˇ sˇ´ı specifikace jasneˇ favorizuje pouzitˇ ´ı TLS negotiation 2 azˇ po ustaven´ı TCP spojen´ı a usp´ eˇsnˇ em´ zpetnˇ em´ volan´ ´ı 3. Specialn´ ´ı port chran´ enˇ y´ sifrovanˇ ym´ kanalem´ mohou vyuzˇ´ıt pouze klienti, pro spojen´ı serveru˚ mezi sebou tato moznostˇ nen´ı podporovana.´ Ve specifikaci se jasneˇ rˇ´ıka,´ zeˇ XMPP je zjednodusenouˇ verz´ı XML a nekterˇ e´ typy dat nesm´ı obsahovat. Mezi takove´ patrˇ´ı naprˇ´ıklad XML komenta´re,ˇ nebo specialn´ ´ı sekce CDATA obsahuj´ıc´ı binarn´ ´ı kod.´ Veskerˇ y´ binarn´ ´ı obsah, jako jsou fotky, ktery´ je prenˇ a´sen,ˇ mus´ı byt´ prevedenˇ do sedmi- bitove´ formy. K tomu se pouzˇ´ıva´ vyhradn´ eˇ kodov´ an´ ´ı base64.

Ukazka´ pripojenˇ ´ı k serveru Pripojujˇ ´ıc´ı se pos´ıla´ hlavickuˇ bez id. Server na ni odpov´ı tagem stream jizˇ s identifkatorem.´

1Simple Authentication and Security Layer 2Ustaven´ı sifrovanˇ eho´ kanalu´ azˇ po navaz´ an´ ´ı nesifrovanˇ eho´ spojen´ı. Server tak mu˚zeˇ pouzˇ´ıt jediny´ port na sifrovanˇ e´ i nesifrovanˇ e´ spojen´ı. 3Princip zpetnˇ eho´ volan´ ´ı je vysvetlenˇ v nasleduj´ ´ıc´ı kapitole

12 Obrazek´ 2.1: Ukazka´ decentralizace

Zpetnˇ e´ volan´ ´ı Zpetnˇ ym´ volan´ ´ım, neboli dialbackem, se oveˇrujeˇ totoznostˇ vzdalen´ eho´ serveru. Protozeˇ s´ıt’ je decen- tralizovana,´ neexistuje zˇadn´ a´ centraln´ ´ı autorita, ktera´ by posuzovala bezpecnostˇ a identitu serveru, se kterym´ se navazuje spojen´ı. Jedina´ moznostˇ je tak spolehnout se na prostredkyˇ oveˇrenˇ ´ı, ktere´ ma´ k dispozici sam´ server. Sice se nab´ız´ı kontrola identity serveru˚ pomoc´ı TLS negotiation a oveˇrovˇ an´ ´ı jejich certifikat´ u.˚ Pokud vsakˇ kontaktovany´ server nepouzˇ´ıva´ TLS vubec˚ nebo jej pouzˇ´ıva,´ ale jeho certifikat´ nen´ı oveˇritelnˇ y´ z nasehoˇ serveru, identitu t´ım neoveˇrˇ´ıme. Serveru˚ ktere´ maj´ı certifikat´ podepsany´ sam´ sebou, prˇ´ıpadneˇ nam´ neznamou´ certifikacnˇ ´ı autoritou je na serveru mnoho. Protozeˇ komunikace mezi server prob´ıha´ na celem´ svetˇ e,ˇ nen´ı vubec˚ realn´ e,´ aby vsechnyˇ servery byly schopny zkontro- lovat pravost kazdˇ eho´ certifikatu´ serveru, se kterym´ budou cht´ıt komunikovat. Nav´ıc existuj´ı zeme,ˇ kde pouzˇ´ıvan´ ´ı kryptografie je v rozporu se zakonem,´ a tam by nebylo moznˇ e´ oveˇritˇ vubec˚ zˇadnou´ identitu. Zkratka´ omezen´ı je prˇ´ılisˇ mnoho na to, aby se dalo mluvit o spolehlivem´ zpusobu.˚ Pokud se ale mu˚zeˇ pripojitˇ kdokoliv k serveru, a rˇ´ıct jakekoliv´ jmeno.´ To je v prostredˇ ´ı internetu zcela neprijatelnˇ e,´ protozeˇ by mohlo doj´ıt k zaslan´ ´ı duv˚ ernˇ ych´ zprav´ nepovolanym´ osobam.´ Je tedy potrebaˇ dostatecnˇ eˇ jednoduchy´ zpusob,˚ jak oveˇritˇ pravost identity vzdalen´ eho´ serveru. Zpetnˇ e´ volan´ ´ı funguje na pricipu sd´ıleneho´ kl´ıce.ˇ Server navazuj´ıc´ı spojen´ı vygeneruje a posleˇ serveru svuj˚ kl´ıcˇ pro toto spojen´ı. Prijˇ ´ımaj´ıc´ı server toto spojen´ı zat´ım nepotvrd´ı, a dokud tak neudelˇ a,´ nepreneseˇ t´ımto spojen´ım zˇadn´ a´ data. Pro prijetˇ ´ı kl´ıceˇ zahaj´ ´ı c´ılovy´ server vlastn´ı nava- zovan´ ´ı spojen´ı. Nejdrˇ´ıve mus´ı urcit,ˇ kam se ma´ pripojovat.ˇ Pro urcenˇ ´ı c´ıle pouzˇ´ıva´ internetem oveˇrenˇ y´ system´ DNS. Domain Name System je beˇznˇ eˇ pouzˇ´ıvany´ system´ v internetu. Jeho prednostmiˇ je vysoka´ dostupnost a rozsˇ´ırenostˇ a kvalitn´ı implementace nekolikaˇ serveru.˚ Hlavn´ı ulohu´ v bezpecnostiˇ dialbacku lezˇ´ı na bedrech systemu´ DNS. Protozeˇ vsakˇ v dobeˇ masoveho´ rozsˇ´ırenˇ ´ı World Wide Webu je tato sluzbaˇ nepodstradatelna´ a podle toho j´ı take´ venujeˇ vysoka´ pozornost kvuli˚ zabezpecenˇ ´ı.

13 K z´ıskan´ ´ı adresy c´ıloveho´ serveru vyuzˇ´ıva´ dotaz na typ odpovediˇ SRV, a parametrem je -server. tcp.jmeno.serveru.net. V odpovediˇ na tento dotaz mu˚zeˇ obdrzetˇ nekolikˇ domenov´ ych´ jmen, s jejich prioritou a portem. Teprve na tato jmena´ se pripojˇ ´ı, podle nejvysˇsˇ´ı priority si vybere tu nejvhodnejˇ sˇ´ı. Po pripojenˇ ´ı na takto z´ıskany´ server zahaj´ ´ı komunikaci zaslan´ ´ım standardn´ıho tagu stream s atributem to, ktery´ urcujeˇ jmeno´ c´ıloveho´ serveru. T´ım zeˇ pripojujˇ ´ıc´ı se server uvede, s jakym´ ser- verem se chce bavit, je umoznˇ enoˇ hostovan´ ´ı v´ıce virtualn´ ´ıch serveru˚ na jedinem´ pocˇ´ıtaciˇ i TCP/IP portu. Po zahajen´ ´ı komunikace server posleˇ sd´ıleny´ kl´ıc,ˇ ktery´ obdrzelˇ od navazuj´ıc´ıho serveru. Pokud je DNS spravn´ eˇ nastaveno, server se pripojilˇ na ten samy´ server, ktery´ mu predtˇ ´ım pos´ılal kl´ıc.ˇ Protozeˇ si pamatuje kl´ıc,ˇ zkontroluje, zda takovy´ kl´ıcˇ skutecnˇ eˇ poslal. Pokud ano, odpov´ı kladne.ˇ Pro server, ktery´ prijˇ ´ımal prvotn´ı spojen´ı, je to potvrzen´ı, zeˇ server je skutecnˇ eˇ t´ım, kym´ tvrd´ı. Posleˇ tedy potvrzen´ı o usp´ eˇsnˇ em´ prijetˇ ´ı dialbacku do puvodn˚ ´ıho spojen´ı a platnost tohoto spojen´ı potvrd´ı. Od teto´ chv´ıle povol´ı odes´ılan´ ´ı i prijˇ ´ıman´ı xml paketu˚ z tohoto spojen´ı. Schematicky´ princip dialbacku je lepe´ videtˇ na obrazku´ 2.2.

Obrazek´ 2.2: Princip zpetnˇ eho´ volan´ ´ı

XML RPC XMPP Core je zam´ ernˇ eˇ oprostenˇ od konkretn´ ´ıch mechanismu˚ fungovan´ ´ı klienta pro zas´ılan´ ´ı zprav.´ Standard je pripravenˇ i pro pouzitˇ ´ı v jinych´ oblastech, kde se nebudou zas´ılat zpravy´ stejnym´ zpusobem,˚ jako v klasicke´ s´ıti Jabber. T´ım, zeˇ protokol je zalozenˇ na XML, nab´ız´ı se mnoho dalsˇ´ıch moznostˇ ´ı, jak vyuzˇ´ıt spolehlivou zakladnu´ pro rychle´ dorucenˇ ´ı cˇast´ ´ı XML dokumentu.˚ Infrastruk- tura umozˇnujeˇ plnou decentralizaci, pritomˇ ale nab´ız´ı take´ vysokou bezpecnost.ˇ Jednou z v´ıtanych´ vlastnost´ı je pouzitˇ ´ı XML–RPC presˇ s´ıt’ XMPP [1]. RPC chapeme´ jako Remote Procedure Call, tedy vzdalen´ e´ volan´ ´ı procedur. Volan´ ´ı funguje tak, zeˇ vzdalen´ e´ sluzbˇ eˇ nekdeˇ na internetu posluˇ parametry a nazev´ operace, a ona mi vrat´ ´ı vysledn´ e´

14 hodnoty zpet.ˇ V jej´ı specifikaci [12] se explicitneˇ pocˇ´ıta´ s nasazen´ım teto´ technologie pomoc´ı pro- tokolu HTTP. Malym´ problemem´ ale je, zeˇ funkce mus´ı vratit´ nejakˇ y´ vysledek´ v urcenˇ em´ case.ˇ HTTP protokol um´ı jedineˇ zadat dotaz a dostat na ni odpovedˇ ’.Priˇ cekˇ an´ ´ı na ni nemu˚zeˇ na stejnem´ spojen´ı dostat odpovedˇ ’ jinou. HTTP servery maj´ı omezenou dobu, po kterou podrzˇ´ı spojen´ı s klien- tem. Pokud by sluzbaˇ presˇ ahla´ tuto dobu, webovy´ server zrusˇ´ı spojen´ı a cely´ dotaz je tak nenavratn´ eˇ ztracen. U HTTP protokolu nen´ı jina´ moznost,ˇ nezˇ pozˇadat´ si znovu se stejnymi´ parametry o stejny´ dotaz a doufat, zeˇ tentokrat´ si sluzbaˇ ulozilaˇ rozpracovane´ d´ılo nebo jej stihne vypracovat rychleji. U XMPP naopak zˇadn´ e´ takove´ omezen´ı nen´ı. Na jedinem´ spojen´ı si mu˚zeˇ sluzbaˇ pozˇadat´ o nekolikˇ pozadavkˇ u˚ naraz´ ruzn˚ ym´ entitam,´ a pritomˇ obsluhovat pouze jedno jedine´ spojen´ı. Sluzbaˇ si posleˇ zˇadost,´ a dokud zustane˚ pripojenaˇ k XMPP serveru, mu˚zeˇ cekat,ˇ jak dlouho povazujeˇ za potrebnˇ e.´ Server sam´ ji neodpoj´ı. Tazatel se mu˚zeˇ v klidu venovatˇ obsluze jinych´ vysledk´ u,˚ dokud nedoraz´ı odpovedˇ ’.

2.3.2 Stanzy Stanzy jsou jednotlive´ datove´ tagy XML, ktere´ se mohou vyskytovat v hlavn´ım tagu spojen´ı . Castoˇ se take´ popisuj´ı slovem XML paket. Stanzami nejsou nekterˇ e´ xml zpravy´ priˇ navazovan´ ´ı spojen´ı, jako parametry SASL autorizace nebo zˇadost´ od navaz´ an´ ´ı sifrovanˇ eho´ spojen´ı TLS. Po usp´ eˇsnˇ em´ dokoncenˇ ´ı pripojovˇ an´ ´ı jak klienta, tak serveru, uzˇ nesm´ı byt´ odeslan´ zˇadn´ y´ jiny´ XML pa- ket, nezˇ povolena´ stanza. Kazdˇ a´ stanza odes´ılana´ mezi servery mus´ı obsahovat prˇ´ıjemce v parame- tru to i odes´ılatele v parametru from. Stanza odeslana´ klientem v zavislosti´ na jej´ım typu nemus´ı m´ıt ani jedno z nich. Potom maj´ı takove´ pakety zvla´snˇ ´ı vyznam´ pro server, ktery´ s nimi zachaz´ ´ı specialn´ e.ˇ Server ale priˇ dorucovˇ an´ ´ı techtoˇ stanz dalsˇ´ım entitam´ v s´ıti tyto informace automaticky dopln´ı.

Zprava´ Prvn´ı stanzou je textova´ zprava.´ Textove´ zpravy´ pro beˇznˇ eho´ uzivateleˇ cestuj´ı v s´ıti XMPP v tagu

Uk´azkov´azpr´ava Zpr´avapro ˇcten´aˇretextu

Zpravy´ mohou byt´ 4. typu˚

• jednoducha´ zprava´

• rozhovor

• titulek

• chybova´ zprava´

Jednoducha´ zprava´ je obdobou emailu v s´ıti XMPP. Tato zprava´ mu˚zeˇ m´ıt volitelneˇ i predmˇ etˇ ve vnorenˇ em´ tagu . Text zpravy´ je obsazenˇ v tagu .

15 Informace o dostupnosti Dalsˇ´ı stanzou je presence.S´ıt’ nedovoluje nikomu zaslat stav o dostupnosti bez toho, aby to ten dany´ clovˇ ekˇ schvalil.´ Pokud chcete vedˇ et,ˇ jestli je prˇ´ıtel online, napredˇ vam´ to mus´ı povo- lit. Pro zaslan´ ´ı informace o stavu dostupnosti i pro dotaz o autorizaci dostupnosti se pouzˇ´ıva´ tag .

Informace o dostupnosti mu˚zeˇ m´ıt nekolikˇ typu.˚ available – stav dostupny.´ Ohlasuje,ˇ zeˇ uzivatelˇ je pripojenˇ a prˇ´ıtomen. Pokud nen´ı typ stavu uve- den, predpoklˇ ad´ a´ se tento. away – stav pryc.ˇ Uzivatelˇ pravdepodobnˇ eˇ nen´ı u sveho´ pocˇ´ıtace,ˇ nebo zarˇ´ızen´ı, kterym´ je do XMPP s´ıteˇ pripojen.ˇ xa – stav extended away, v ceskˇ ych´ prekladechˇ castoˇ preklˇ ad´ an´ jako dlouho pryc.ˇ Ohlasuje,ˇ zeˇ uzivatelˇ nen´ı a pravdepodobnˇ eˇ nebude u pocˇ´ıtaceˇ delsˇ´ı dobu. dnd – stav nerusit.ˇ Uzivatelˇ sice u pocˇ´ıtaceˇ je, ale neprejeˇ si byt´ rusen.ˇ unavailable – stav nedostupny.´ Uzivatelˇ nen´ı vubec˚ pripojen,ˇ nebo je ve skrytem´ stavu.

Anglicky se autorizaci dostupnosti v systemu´ XMPP rˇ´ıka´ subscription. Presnˇ y´ prekladˇ by znelˇ sp´ıseˇ zapis“,´ ale protozeˇ jsou uzivatelˇ e´ zvykl´ı naprˇ´ıklad z ICQ na term´ın autorizace“, obvykle se ” ” pouzˇ´ıva´ v ceskˇ ych´ prekladechˇ term´ın autorizace“. ”

Obecne´ dotazy Pro vsechnyˇ ostatn´ı akce slouzˇ´ı obecne´ dotazy pomoc´ı iq paketu.˚ Iq packet slouzˇ´ı pro obecne´ dotazovan´ ´ı typu dotaz a odpovedˇ ’, ktere´ mu˚zeˇ priˇ komunikaci nastat. Slouzˇ´ı ke zjistˇ’ovan´ ´ı schopnost´ı klientu,˚ k z´ıskav´ an´ ´ı verze klienta, atd. Dotazy maj´ı nekolikˇ povinnych´ parametru.˚ Prvn´ım z nich je id. Id jednoznacnˇ eˇ rozlisujeˇ dotaz a odpovedˇ ’ od ostatn´ıch. Kazdˇ y´ dotaz, ktery´ klient odes´ıla,´ mus´ı m´ıt unikatn´ ´ı identifikator.´ Jedineˇ takto lze jednoznacnˇ eˇ urcit,ˇ o ktery´ typ se jedna.´ Dalsˇ´ı povinny´ parametr je namespace. Namespace rozlisuje,ˇ o jaky´ typ akce se vlastneˇ jedna.´ Namespace jsou definovany´ v jednotlivych´ rozsˇ´ırenˇ ´ıch [9], ktere´ registruje XMPP Registrar. Pouzitˇ ´ı namespace umozˇnujeˇ plynuly´ prechodˇ na novejˇ sˇ´ı tech- nologie a rozlisujeˇ jednotlive´ tagy. S jeho pomoc´ı klienti snadno urcˇ´ı, zda takovy´ dotaz zpracovat um´ı, nebo ne. Namespace je obsazenˇ uvnitrˇ iq tagu v jeho prvn´ım potomkovi. Jmeno´ tagu po- tomka se mu˚zeˇ lisitˇ v zavislosti´ na rozsˇ´ırenˇ ´ı, zpravidla j´ım je ale tag query. Posledn´ım povinnym´ parametrem je type, ktery´ urcuje,ˇ o jaky´ ukon´ se tento dotaz pokousˇ´ı. get – zˇadost´ o ctenˇ ´ı hodnoty nebo polozek.ˇ Asi nejcastˇ ejˇ sˇ´ı typ vyvolany´ klientem. set – zˇadost´ o ulozenˇ ´ı nebo nastaven´ı. result – vysledek´ jednoho z predchozˇ ´ıch. mus´ı obsahovat stejne´ id, jako puvodn˚ ´ı dotaz. Oznacujeˇ usp´ eˇsnˇ y´ vysledek´ a v sobeˇ nese vysledn´ a´ data.

16 error – zˇadost´ skoncilaˇ chybou. Takte´zˇ mus´ı obsahovat id dotazu, ktery´ chybu vyvolal. Obsa- huje jednak hla´senˇ ´ı s chybou a obvykle take´ teloˇ dotazu, ktery´ chybu vyvolal jako dalsˇ´ıho potomka.

Nasleduje´ prˇ´ıklad iq packetu.

2.3.3 XMPP IM XMPP IM [5] definuje rozsˇ´ırenˇ e´ vlastnosti specificke´ pro vym´ enuˇ zprav´ a vym´ enuˇ dostupnosti. Jedna z hlavn´ıch cˇast´ ´ı je take´ popis prace´ se seznamem kontaktu˚ – rosteru. Pozadavkyˇ na zakladn´ ´ı fungovan´ ´ı instang messangingu definuje standard takto. 1. Vym´ enaˇ zprav´ s ostatn´ımi uzivateli.ˇ

2. Vym´ enaˇ informace o dostupnosti s ostatn´ımi uzivateli.ˇ

3. Sprava´ autorizac´ı kontaktu˚

4. Sprava´ polozekˇ v seznamu kontaktu.˚ System´ XMPP nazyv´ a´ seznam kontaktu˚ pojmem Roster

5. Zablokovat komunikaci k nebo od urcitˇ ych´ uzivatelˇ u˚ Prvn´ı triˇ body jizˇ byly popsany´ v predchozˇ ´ıch kapitolach.´ Spravu´ seznamu kontaktu˚ zajistˇ’uje iq query s namespace jabber:x:roster. Tento protokol zajistujeˇ vyzvednut´ı seznamu po prihlˇ a´senˇ ´ı klienta. Vyzvednut´ı a sprava´ kontaktu˚ na serveru je pro klienty povinna.´ Uzivatelˇ nen´ı omezen kontakty ulozenˇ ymi´ na svem´ pocˇ´ıtaci,ˇ protozeˇ podle specifikace kazdˇ y´ klient mus´ı pracovat s kon- takty na serveru. Tato sprava´ kontaktu˚ mimo jine´ umozˇnujeˇ pripojenˇ ´ı nekolikaˇ klientu˚ s ruzn˚ ym´ resource na stejny´ u´cetˇ a udrzujeˇ je vsechnyˇ synchronizovane.´ Kontakty, kterym´ prijmeˇ jeden z pripojenˇ ych´ klientu˚ autorizaci, jsou automaticky serverem poslany´ vsemˇ zbylym´ jako novy´ kontakt do rosteru“. Tato operace se nazyv´ a´ roster push. ” Blokovan´ ´ı komunikace mezi urcitˇ ymi´ uzivateliˇ nen´ı v XMPP IM definovano´ presnˇ e.ˇ Bud’ blo- kovan´ ´ı komunikace zajistˇ’uj´ı klienti ve vlastn´ı rezii,ˇ nebo ji blokuje server podle pravidel rozsˇ´ırenˇ ´ı Privacy Lists [3]

2.3.4 Jabber ID Jabber ID nebo zkracen´ eˇ JID je jednoznacnˇ y´ identifikator´ v s´ıti XMPP. Identifikator´ ma´ 3 cˇasti.´ Prvn´ı je uzivatelskˇ a´ cˇast,´ ktera´ urcujeˇ jednoznacnˇ eˇ uzivateleˇ na jeho serveru. Druha´ cˇast´ je plne´ domenov´ e´ jmeno´ serveru, ktera´ jej jednoznacnˇ eˇ urcujeˇ v s´ıti. Tretˇ ´ı je pak resource, tedy zdroj. Zdroj rozlisujeˇ jednotlive´ pripojenˇ e´ instance daneho´ uzivatele.ˇ Plne´ JID mu˚zeˇ vypadat naprˇ´ıklad nasledovn´ e.ˇ

17 [email protected]/Psi

2.3.5 XEP XMPP Extensions [9] jsou dalsˇ´ı zdokumentovana´ rozsˇ´ırenˇ ´ı XMPP IM, ktera´ pridˇ avaj´ ´ı dalsˇ´ı funkci- onalitu nad ramec´ zakladn´ ´ıho protokolu XMPP. Bez nich je XMPP IM pouhy´ system´ zas´ılan´ ´ı zprav´ s velmi omezenymi´ vlastnostmi.

2.3.6 Service Discovery Jedn´ım z dule˚ zitˇ ych´ rozsˇ´ırenˇ ´ı je XEP-0030, Service Discovery. Toto rozsˇ´ırenˇ ´ı slouzˇ´ı ke zjistovˇ an´ ´ı dostupnych´ sluzebˇ a jejich podporovanych´ vlastnost´ı. Tuto ulohu´ meloˇ dnes jizˇ historicke´ rozsˇ´ırenˇ ´ı Jabber Browsing (XEP–0011) a Agent Information (XEP-0094). Obeˇ tyto rozsˇ´ırenˇ ´ı nahrazuje plneˇ a mnohem lepe.´ Protozeˇ jabber ma´ velke´ mnozstvˇ ´ı rozsˇ´ırenˇ ´ı, je castoˇ potrebaˇ zjistit, ktera´ rozsˇ´ırenˇ ´ı sluzbaˇ podporuje. Toto rozsˇ´ırenˇ ´ı nejenom zeˇ um´ı zobrazit dostupne´ sluzbyˇ pomoc´ı dotazu na polozkyˇ – namespace ’http://jabber.org/protocol/disco#items’, ale take´ jejich vlastnosti pomoc´ı namespace ’http://jabber.org/protocol/disco#info’.

Discovery Info Kazdˇ a´ entita ma´ svoje vlastnosti a schopnosti. Entitou rozum´ıme bud’ sluzbu,ˇ kontakt nebo vnorenˇ y´ objekt nejakˇ e´ sluzby,ˇ naprˇ´ıklad m´ıstnost v diskuzn´ı skupine.ˇ Entita je jedinecnˇ eˇ urcenˇ a´ svym´ JID, tedy uzivatelskouˇ cˇast´ ´ı, jmenem´ serveru a zdrojem (resource), prˇ´ıpadneˇ mu˚zeˇ byt´ urcenaˇ i pomoc´ı node.Uzivatelskˇ a´ cˇast´ i zdroj mu˚zeˇ chybet.ˇ Kazdˇ a´ entita podporuj´ıc´ı Service Discovery mus´ı umetˇ vratit´ seznam podporovanych´ vlastnost´ı a identit. Identity rozlisujˇ ´ı typ a zameˇrenˇ ´ı entity. Vy´cetˇ moznˇ ych´ typu˚ na rozd´ıl od predchozˇ ´ıch specifikac´ı nen´ı dany´ prˇ´ımo v rozsˇ´ırenˇ ´ı, ale je zaregis- trovan´ u Jabber Registrar. Identita se sklad´ a´ z kategorie a typu. Prˇ´ıkladem kategorie je naprˇ´ıklad client, typ u nejˇ mu˚zeˇ byt´ naprˇ´ıklad pc u klasickeho´ PC klienta, nebo phone priˇ pripojenˇ ´ı Java aplikac´ı z mobiln´ıho telefonu. Jedna entita mu˚zeˇ m´ıt vzdyˇ jen jeden typ z kazdˇ e´ kategorie. Kromeˇ identity vrac´ı entita priˇ dotazu na schopnosti take´ seznam podporovanych´ vlastnost´ı v tagu , kde namespace je ten stejny´ namespace, ktery´ se pouzijeˇ v iq stanze k z´ıskan´ ´ı hodnoty. T´ımto zpusobem˚ lze moznˇ e´ tedy zjistit, co vsechnoˇ dany´ kontakt pod- poruje jestˇ eˇ predtˇ ´ım, nezˇ odeslemeˇ zˇadost´ o proveden´ı. To se hod´ı naprˇ´ıklad priˇ vytva´renˇ ´ı nab´ıdky pro dany´ kontakt, protozeˇ nema´ smysl uzivateliˇ nab´ızet tucet vlastnost´ı, priˇ jejichzˇ vykonan´ ´ı na nejˇ stejneˇ vyskocˇ´ı chyba neimplementovano.´

Discovery Items Kazdˇ e´ entita mu˚zeˇ m´ıt nekolikˇ dalsˇ´ıch entit. Jejich zjistˇ enˇ ´ı provad´ ´ı klient dotazem s namespace ’http://jabber.org/protocol/disco#info’. Entita mu˚zeˇ vratit´ nekolikˇ dalsˇ´ıch entit, ktere´ mohou byt´ znovu prohl´ızeny.ˇ Lze tak vytvoritˇ stromovou strukturu s ruzn˚ ymi´ polozkami.ˇ

2.4 Servery

2.4.1 Jabberd 1.x Tento server je pokracovˇ an´ ´ım nejstarsˇ´ı implementace Jabber serveru. Je napsan´ v jazyce C a sˇ´ırenˇ je pod licenc´ı GNU GPL jako open source. Server vyuzˇ´ıva´ knihovnu expat pro parsovan´ ´ı. Protozeˇ

18 je nejstajsˇ´ım open-source serverem, neobsahuje nekterˇ e´ vlastnosti novych´ serveru.˚ Jeho hlavn´ı de- vizou je ozkousenˇ y´ beh,ˇ vysoka´ stabilita, n´ızke´ pametˇ’ove´ naroky´ a pomernˇ eˇ jednoducha´ konfi- gurace. Server nema´ problemy´ s obsluhou nekolikaˇ des´ıtek nebo i stovek uzivatelˇ u.˚ Server mu˚zeˇ beˇzetˇ na nejruzn˚ ejˇ sˇ´ıch unixovych´ systemech´ i na Windows NT nebo novejˇ sˇ´ıch. Vzhledem k vyuzitˇ ´ı knihovny pthread, ktera´ na Windows 9x nefunguje, nemu˚zeˇ na starsˇ´ıch Windows beˇzˇet.ˇ V dnesnˇ ´ı dobeˇ uzˇ ale malokdo´ vubec˚ takovy´ system´ ma´ a snad nikdo by na takovem´ systemu´ nechtelˇ provo- zovat jakykoliv´ server, nejenom jabberd. Server je aktivneˇ vyv´ıjen jedinym´ vyvoj´ a´remˇ Mattiasem Whimmerem, v den psan´ı prace´ byla aktualn´ ´ı stabiln´ı verze 1.6.0. Pro jabberd 1.4 existuje cela´ radaˇ sluzebˇ radaˇ komponent, vyuzˇ´ıvaj´ıc´ıch jej´ı API. Je to naprˇ´ıklad implementace mu-conference poskytuj´ıc´ı Multi User Chat (JEP-0045) pro diskuze ve v´ıce lidech, jednoducha´ puvodn˚ ´ı databaze´ uzivatelˇ u˚ JUD i slozitˇ ejˇ sˇ´ı databaze´ Users-Agent poskytuj´ıc´ı to stejne.´ Vetˇ sinaˇ sluzebˇ psanych´ pro jabberd se ale uzˇ nevyv´ıj´ı, jenom u nekolikaˇ z nich se pokracujeˇ ve vyvoji.´ Pravdepodobnˇ eˇ to souvis´ı s postupnym´ prechodemˇ vetˇ sinyˇ serveru˚ na modernejˇ sˇ´ı ejabberd. Posledn´ı verze doplnila podporu pro platne´ spojen´ı XMPP protokolu. Podporuje pripojenˇ ´ı kom- ponenty pomoc´ı historickeho´ XEP-0114, protokol IPv6, autentizaci pomoc´ı SASL, noveˇ podporu TLS priˇ navazovan´ ´ı spojen´ı mezi servery. Mezi nove´ vlastnosti patrˇ´ı take´ podpora xml:lang ve stanzach,´ ktere´ umozˇnujeˇ komunikovat s uzivatelemˇ v jeho rodne´ reˇ ci.ˇ Jabberd jako celek obsahuje jediny´ binarn´ ´ı spustitelny´ soubor jabberd. Server je modularn´ ´ı, jednotlive´ schopnosti jsou implementovany´ do oddelenˇ ych´ modulu.˚ Integrovany´ XML router rˇ´ıd´ı predˇ av´ an´ ´ı stanzy mezi obsluhou klientskeho´ pripojenˇ ´ı c2s, spravcem´ sezen´ı jsm, komponentami pripojenˇ ymi´ prˇ´ımo k serveru a samozrejmˇ eˇ mezi modulem pro mezi serverova´ spojen´ı s2s. Kom- ponenta pro uklad´ an´ ´ı uzivatelskˇ ych´ dat je pripojenaˇ take´ presˇ intern´ı router.

2.4.2 Jabberd 2 Jabberd verze 2 nen´ı verze vychazej´ ´ıc´ı z jabberd 1.x, jak se prˇ´ımo nab´ız´ı. Tato verze je kompletn´ım prepisemˇ serveru jabberd do modularn´ ejˇ sˇ´ı podoby. Stejneˇ jako jabberd 1.x je napsan´ v jazyce C. Stejneˇ jako Jabberd 1.x je dostupny´ pod licenc´ı GNU GPL i se zdrojovymi´ kody.´ Na rozd´ıl do Jabberd jsou jednotlive´ moduly oddelenyˇ upln´ eˇ a jsou to nezavisl´ e´ procesy. Dohro- mady jsou spojeny XML routerem, ktery´ vymeˇnujeˇ XML stanzy mezi jednotlivymi´ moduly. Stejneˇ jako jabberd ma´ moduly pro pripojovˇ an´ ´ı klientu˚ (c2s), propojovan´ ´ı mezi servery (s2s), spravce´ sezen´ı uzivatele,ˇ ktery´ uklad´ a´ veskerˇ a´ uzivatelovaˇ data (sm). Vyhodou´ tohoto reˇ senˇ ´ı je moznostˇ restartovat jednotlive´ sluzby.ˇ Je tak moznˇ e´ zmenitˇ nastaven´ı s2s serveru a restartovat jej bez odpo- jen´ı vsechˇ klientu,˚ kterˇ´ı jsou pripojenˇ ´ı k jinemu´ procesu. To velmi usnadn´ı administrativn´ı ukony´ spojene´ s nastavovan´ ´ım serveru za plneho´ provozu. Sluzbyˇ se pripojujˇ ´ı prˇ´ımo ke XML routeru. Rozdelenˇ ´ı sluzebˇ se hod´ı priˇ vysokem´ vyt´ızenˇ ´ı, kdy kazdˇ a´ sluzbaˇ mu˚zeˇ beˇzetˇ oddelenˇ eˇ na jinem´ stroji. Jabberd 2 nema´ kvuli˚ znacnˇ ym´ vykonostn´ ´ım problem´ um˚ uklad´ an´ ´ı do XML souboru˚ vubec.˚ M´ısto toho se spoleh´ a´ na databazi´ Mysql, prˇ´ıpadneˇ Berkeley DB. Autentizacnˇ ´ıch modulu˚ je na vyb´ erˇ v´ıce, naprˇ´ıklad Mysql, LDAP, nebo opetˇ Berkeley DB. Server podporuje STARTTLS jak pro klienta i serverove´ spojen´ı, stejneˇ tak pro pripojovˇ an´ ´ı komponent. Podporuje spojen´ı i protokolem IPv6, a to jak klentu,˚ serveru˚ i vlastn´ıch komponent. Implementovano´ je take´ Privacy Lists (XEP- 0016) [3], ktere´ umoznˇ ´ı zcela ignorovat doteˇrnˇ e´ uzivatele,ˇ kterˇ´ı vas´ obteˇzujˇ ´ı. Jabberd 2 nema´ tolik dostupnych´ sluzebˇ napsanych´ pro vlastn´ı rozhran´ı. Projekt nen´ı tak ustalen´ y´ a vyzral´ y´ jako prvn´ı verze jabberd. Sluzebˇ napsanych´ pouze pro jabberd 2 lze nalezt´ velmi malo.´ Pro zprovoznenˇ ´ı sluzebˇ je potrebaˇ nainstalovat JCR API, ktere´ emuluje rozhran´ı Jabberd 1.4, a umoznˇ ´ı tak zprovoznit sluzbyˇ napsane´ pro Jabberd 1.4.

19 2.4.3 eJabberd Ejabberd je momentaln´ eˇ nejintenzivnejiˇ vyvj´ıjenym´ open source serverem. Server je napsany´ v jazyce Erlang vyvinutym´ firmou Siemens pro tvorbu real-time aplikac´ı. Zeˇ jde o jazyk velmi kvalitn´ı napov´ıda´ to, zeˇ ejabberd je momentaln´ eˇ asi nejlepsˇ´ım serverem na vysokou zat´ eˇz.ˇ Pokud je potrebaˇ obsluhovat v´ıc nezˇ tis´ıc uzivatelˇ u,˚ ejabberd mnohem men´ eˇ zateˇzujeˇ CPU serveru nezˇ jabberd 1.4 nebo jabberd 2. V posledn´ı dobeˇ jsou servery jabberd castoˇ nahrazovany´ serverem ejabberd, protozeˇ z dostupnych´ serveru˚ um´ı nejv´ıce rozsˇ´ırenˇ ´ı. Podporuje prihlaˇ sovˇ an´ ´ı pomoc´ı SASL, zapezpecenˇ e´ pripojenˇ ´ı pomoc´ı STARTTLS pro klienty i servery. Implementuje jako jediny´ sd´ılene´ skupiny v seznamech uzivatelˇ u,˚ Stream Commpresion pro sn´ızenˇ ´ı datoveho´ toku. Server ma´ taky nekolikˇ vestavenˇ ych´ komponent, jako Publish Subscribe, Multiuser Chat, IRC gateway a jine.´ Jednou z nevyhod´ ejabberd je vysoka´ naro´ cnostˇ na pametˇ’. Sice usetˇ rˇ´ı znacnˇ e´ zat´ızenˇ ´ı procesoru, pametiˇ ale potrebujeˇ v´ıce nezˇ oba predeˇ slˇ e.´

2.5 Klienti

2.5.1 Psi Psi [7] je multiplatformn´ı Jabber klient napsany´ v toolkitu Qt v jazyce C++. Tento klient je jedn´ım z nejstarsˇ´ıch, nejpouzˇ´ıvanejˇ sˇ´ıch a nejstabilnejˇ sˇ´ıch klientu˚ pro Jabber vubec.˚ I kdyzˇ Psi nen´ı zrovna technologickou bombou podporuj´ıc´ı skoro kazdˇ e´ rozsˇ´ırenˇ ´ı, ktere´ Jabber Working Group vyda,´ ma´ pomernˇ eˇ bohate´ schopnosti. Samozrejmouˇ je podpora Service Discovery, ktera´ je v soucasnˇ em´ kli- entu nutnost´ı. Psi podporuje vyhledav´ an´ ´ı uzivatelˇ u˚ pomoc´ı Data Forms (XEP-004), prenosˇ souboru˚ pomoc´ı SOCKS5 Bytestreams (XEP-0065). Klient take´ mozˇnujeˇ pripojenˇ ´ı v´ıce u´ctˇ u˚ zarove´ n,ˇ ale v posledn´ı stabiln´ı verzi neum´ı ani Ad-Hoc commands ani Multi-User Chat. Oboj´ı je ale soucˇast´ ´ı neoficialn´ ´ıch verz´ı s nekterˇ ymi´ vylepsenˇ ymi´ vlastnostmi. Prednostmiˇ Psi je predevˇ sˇ´ım prˇ´ıjemne´ jednoduche´ uzivatelskˇ e´ rozhran´ı, stabilita a dostupnost na vsechˇ hlavn´ıch platformach.´

Obrazek´ 2.3: Ukazka´ rosteru klienta Psi

20 2.5.2 Gajim Gajim [6] je pomernˇ eˇ mlady´ XMPP klient napsany´ v pythonu. Prestoˇ podporuje asi nejv´ıce rozsˇ´ırenˇ ´ı ze meˇ znam´ ych´ klientu.˚ Jako predchozˇ ´ı Psi je volneˇ dostupny´ i se zdrojovymi´ kody´ pod licenc´ı GNU GPL. Z celkem schopnostmi nabiteho´ klienta, ktery´ melˇ vsakˇ hodneˇ neprˇ´ıjemne´ ovlad´ an´ ´ı, dospelˇ v posledn´ım roce ke spiˇ ccceˇ mezi Jabber klienty. Za posledn´ıch nekolikˇ mesˇ ´ıcu˚ se z nerudneho´ po- divneho´ klienta stal nejlepsˇ´ı klient pro nav´ stˇ evuˇ groupchatu, s nejlepe´ provedenou spravou´ zalo´ zekˇ a zprav´ ach´ v tabech. Je dane´ jeho jazykem, zeˇ pametˇ’oveˇ je trochu naro´ cnˇ ejˇ sˇ´ı nezˇ Psi, preceˇ jenom beˇzˇ´ı v interpretovanem´ jazyku. Um´ı prenosyˇ souboru˚ pomoc´ı SOCKS5 Bytestreams (XEP-0065), Ad-hoc Commands (XEP-0050). Podporuje zabezpecenˇ e´ prihlaˇ sovˇ an´ ´ı pomoc´ı SASL i STARTTLS a jako jediny´ z velkych´ stoln´ıch klientu˚ um´ı pripojenˇ ´ı pomoc´ı IPv6. Ma´ pomernˇ eˇ dobre´ zpracovan´ ´ı Service Discovery, ale neum´ı naprˇ´ıklad vyhledav´ an´ ´ı v seznamech uzivatelˇ u.˚ Funguje na Linuxu i Windows. V na ceskˇ ych´ verz´ıch Windows XP nefungovaly starsˇ´ı verze kvuli˚ chybeˇ priˇ prekladuˇ promennˇ e´ s ceskˇ ymi´ znaky do UTF-8. V posledn´ım vydan´ ´ı je toto uzˇ opraveno a funguje spolehliveˇ i na ceskˇ ych´ Windows. Stejneˇ jako Psi zvlad´ a´ pripojenˇ ´ı k v´ıce u´ctˇ um˚ soucasnˇ e.ˇ

2.5.3 JAJC Just Another Jabber Client nen´ı zase tak obycejnˇ y´ klient, jak napov´ıda´ jeho nazev.´ Program je Jabber klient pouze do MS Windows. Na rozd´ıl od predeˇ slˇ ych´ klientu˚ nen´ı open source, ale je uvolnenˇ jenom jako freeware. Jeho autorem je Mikem Ivanov, programator,´ ktery´ v dobeˇ nej- hektictˇ ejˇ sˇ´ıho vyvoje´ vydaval´ nove´ verze kazdˇ ych´ 14 dnu.˚ JAJC uzˇ se nejakouˇ dobu nevyv´ıj´ı, prestoˇ podporuje raduˇ rozsˇ´ırenˇ ´ı. Podporuje Service Discovery, prohl´ızeˇ cˇ sluzebˇ je dobreˇ zpracovany.´ Dalsˇ´ı hezky provedenou vecˇ ´ı je vyhledav´ an´ ´ı pomoc´ı Data Forms (XEP-0004). Umozˇnujeˇ poslat zpravu´ kteremukoliv´ kontaktu z prohl´ızeˇ ceˇ sluzeb,ˇ cozˇ se jisteˇ mu˚zeˇ hodit.

2.5.4 Exodus Tento klient je jeden z nejstarsˇ´ıch. Za jeho aktivn´ım vyvojem´ stoj´ı jizˇ Peter Millard. Je napsany´ v Delphi a vyvoj´ opadav´ a´ uzˇ delsˇ´ı dobu, stejneˇ jako samotny´ jazyk Delphi. Porˇad´ je ale na spiciˇ v poctuˇ podporovanych´ rozsˇ´ırenˇ ´ı. Podporuje jak Ad-hoc Commands, prenosˇ souboru,˚ vyhledav´ an´ ´ı pomoc´ı Data Forms, Service Discovery takte´z.ˇ Jako jediny´ z uvedenych´ klientu˚ jeho uzivatelskˇ e´ rozhran´ı umozˇnujeˇ poslat zpravu´ i kontaktum˚ vyhledanym´ v databazi´ kontaktu˚ za pomoci Jabber Search.

2.6 Rozd´ıly sluzbyˇ a klienta

2.6.1 Klient Beˇznˇ y´ uzivatelskˇ y´ program pro pripojenˇ ´ı do s´ıteˇ XMPP — klient — se do s´ıteˇ pripojujeˇ pomoc´ı beˇznˇ eho´ klientskeho´ protokolu. Priˇ pripojenˇ ´ı jako klient se mus´ı klient nejdrˇ´ıve zaregistrovat. Re- gistrace na serveru prob´ıha´ pomoc´ı rozsˇ´ırenˇ ´ı XEP-0077: In- Registration. Ne vsechnyˇ ser- very mus´ı m´ıt tuto moznostˇ povolenou, nekterˇ e´ naprˇ´ıklad mohou pouzˇ´ıvat radejiˇ webovy´ formula´r.ˇ Zvla´stˇ eˇ pokud jsou to servery komunitn´ıho charakteru, mohou cht´ıt omezit registrace jenom pro sve´ cleny.ˇ U verejnˇ ych´ serveru˚ je obvykle,´ zeˇ registrace je povolena.´ Jedine,´ co je potrebaˇ k pripojenˇ ´ı je klientstky´ program.

21 Po kazdˇ em´ pripojenˇ ´ı klienta se vzdyˇ mus´ı stahnout´ roster s aktualn´ ´ımi kontakty. Servery ne- dorucˇ´ı zˇadn´ e´ stanzy , dokud se uzivatelˇ sam´ neprihlˇ as´ ´ı online. Teprve po prihlˇ a´senˇ ´ı jsou videtˇ stavy autorizovanych´ uzivatelˇ u.˚ Tyhle vsechnyˇ veciˇ pro robota prˇ´ılisˇ dule˚ zitˇ e´ nejsou. Robot sice mu˚zeˇ uchovavat´ informaci o do- stupnosti uzivatele,ˇ ale nen´ı to zcela nezbytne.´ Robot se stejneˇ tak mu˚zeˇ spolehnou na dorucovacˇ ´ı schopnosti serveru uzivatele,ˇ a poslat prosteˇ upom´ınku na Jabber ID bez uveden´ı zdroje. Pokud je uzivatelˇ online, bude zprava´ dorucenaˇ serverem zdroji s nejvysˇsˇ´ı prioritou nebo posledn´ımu pripojenˇ emu´ zdroji. Nekterˇ e´ servery mohou zvolit zkop´ırovan´ ´ı zpravy´ vsemˇ pripojenˇ ym´ zdrojum,˚ standard tohle chovan´ ´ı nedefinuje.

Sluzbyˇ serveru Klasicky´ klient ma´ mnoho sluzebˇ zprostredkovanˇ ych´ serverem. Naprˇ´ıklad priˇ prijetˇ ´ı nebo odm´ıtnut´ı autorizace server automaticky vyvola´ roster push“ a pridˇ a´ novy´ kontakt automaticky do rosteru ” klienta, pokud to uzˇ nestihl udelatˇ klient sam.´ To sice usnadnujeˇ praci´ klientovi, ale pro robota nestaraj´ıc´ıho se o roster ani stavy nen´ı toto podstatne.´ Techtoˇ sluzebˇ vetˇ sinaˇ robotu˚ nevyuzˇ´ıva.´ Robot se orientuje sp´ıseˇ na vstup ze zprav,´ prˇ´ıpadneˇ iq paketu˚ a prˇ´ıkazu.˚ Robotu˚ v dnesnˇ ´ı s´ıti XMPP existuje cela´ rada.ˇ Velice castoˇ je ale problem´ tyto roboty naj´ıt. V beˇznˇ e´ kartotece´ uzivatelˇ u˚ roboti nebyvaj´ ´ı. Cela´ radaˇ uziteˇ cnˇ ych´ robotu˚ je ztracena nekdeˇ na dis- kuzn´ıch forech´ a na zapadlych´ webech, kde je kazdodennˇ ´ı uzivatelˇ e´ jenom nahodou´ najdou. Snizujeˇ se potom jejich prˇ´ınos s´ıti, protozeˇ vetˇ sinaˇ uzivatelˇ u˚ robota nevyuzˇ´ıva´ z pouhe´ nevedomosti.ˇ I kdyzˇ kontakt je moznˇ e´ vlozitˇ do hlavn´ıho seznamu sluzeb,ˇ snad zˇadn´ y´ z robotu˚ nen´ı uveden v seznamu sluzebˇ na svem´ serveru.

Omezen´ı klienta Pokud je robot v rezimuˇ klienta, mnozstvˇ ´ı klientu˚ neum´ı poslat jemu a jen jemu jiny´ stav nezˇ globaln´ ´ı. Naprˇ´ıklad pokud robot ma´ za ukol´ reagovat pouze v prˇ´ıpade,ˇ zeˇ c´ılovy´ uzivatelˇ je online. Uzivatelˇ mu˚zeˇ cht´ıt odlozitˇ udalost´ jednoduchym´ zaslan´ ´ım stavu offline robotovi. Robot si pak bude myslet, zeˇ uzivatelˇ je odpojeny´ a upom´ınky si odlozˇ´ı. Azˇ se uzivatelˇ rozhodne, zeˇ uzˇ si od robota prejeˇ prijˇ ´ımat udalosti,´ posleˇ mu zase znovu zaslan´ ´ım stavu, tentokrat´ stav online – available. Tento jednoduchy´ princip ma´ vsakˇ svoje uskal´ ´ı. Vetˇ sinaˇ klientu˚ takovou operaci nepodporuje. Bud’ se op´ıraj´ı o pouzitˇ ´ı Privacy Lists, ktere´ je ovsemˇ v tomto prˇ´ıpadeˇ troskuˇ neprakticke.´ Pokud se odlozenˇ ´ı dorucenˇ ´ı tyk´ a´ nekolikaˇ mala´ minut, je to zbytecnˇ eˇ slozitˇ a´ operace.Nekteˇ rˇ´ı klienti neum´ı ani jednu z moznostˇ ´ı. Pro beˇznˇ e´ kontakty um´ı odeslan´ ´ı zvla´stnˇ ´ıho stavu jenom program JAJC. Mnoho specialn´ ´ıch funkc´ı na klienty nefunguje. Klienti naprˇ´ıklad nepredpoklˇ adaj´ ´ı, zeˇ nekdoˇ bude cht´ıt vyhledavat´ na kontaktu s vyplnenouˇ uzivatelskouˇ cˇast´ ´ı.

2.6.2 Sluzbaˇ Sluzbaˇ v systemu´ XMPP je Jabber ID bez udan´ ´ı uzivatelskˇ e´ cˇasti.´ Obvykle je takova´ sluzbaˇ samotny´ server, adresa´rˇ uzivatelˇ u,˚ konference v´ıce uzivatelˇ u˚ nebo brana´ do ciz´ı s´ıte.ˇ Sluzbˇ eˇ neposkytuje server mnoho vysad,´ presnˇ ejiˇ reˇ cenoˇ server j´ı poskytuje pouhe´ pripojenˇ ´ı, jinak vubec˚ nic. Sluzbaˇ si vsechnoˇ ostatn´ı mus´ı rˇ´ıdit sama. To zvysujeˇ slozitost,ˇ na druhou stranu to sluzbˇ eˇ dav´ a´ moznostˇ se chovat jinak, nezˇ je obvykle´ pro obycejnˇ eho´ klienta. Pokud sluzbaˇ chce m´ıt uzivatelskˇ e´ jmeno´ ve formatu´ beˇznˇ eho´ uzivatele,ˇ tedy Jabber ID s uzivatelskouˇ cˇast´ ´ı, serverem a prˇ´ıpadneˇ i zdrojem, mu˚zeˇ nab´ızet takovy´ kontakt svym´ uzivatelˇ um.˚ Format´ neodporuj´ıc´ı formatu´ JID je zcela v reziiˇ sluzby.ˇ Mu˚zeˇ naprˇ´ıklad pouzˇ´ıt zdroje k odlisenˇ ´ı ukolu,´ k vyb´ eruˇ udaje´ nebo podobne´ veci.ˇ Mu˚zeˇ tak stejnou zpravu´ obsluhovat trochu jinak, podle toho, jaky´ zdroj byl c´ılovym´ zdrojem.

22 Sluzbaˇ se obvykle do rosteru uzivateleˇ pridˇ av´ a´ pomoc´ı In-Band Registration. Priˇ registraci naprˇ´ıklad k ICQ bran´ eˇ si zaregistrujeme u sluzbyˇ jmeno´ a heslo do ICQ s´ıte.ˇ Po usp´ eˇsnˇ e´ registraci pozˇad´ a´ entita o autorizaci pro kontakt icq brany,´ tedy jmeno´ brany´ bez uzivatelskˇ e´ cˇasti.´ Nekteˇ rˇ´ı klienti takovy´ dotaz s ohledem na predchozˇ ´ı uzivatelovuˇ zˇadost´ o registraci automaticky povol´ı (Exodus), jine´ si i tento dotaz nechaj´ı od uzivateleˇ potvrdit (Gajim). Faktem ovsemˇ je, zeˇ tento kon- takt je ve vsechˇ klientech specialn´ e.ˇ Prakticky vsechnyˇ programy umozˇnujˇ ´ı se prihlˇ asit´ a odhlasit´ od teto´ sluzby.ˇ Ve sve´ podstateˇ to nen´ı nic jineho,´ nezˇ zaslan´ ´ı vlastn´ıho stavu c´ılene´ pouze urcenˇ e´ kom- ponente,ˇ nikoliv rozeslan´ ´ı vsemˇ uzivatelˇ um.˚ Presnˇ eˇ to stejne,´ co jsem popsal o par´ odstavcu˚ vy´seˇ funguje v upln´ eˇ kazdˇ em´ klientovi, ve kterem´ jsem to zkusil. Vyjimkou´ budou snad jenom multi- protokolove´ klienty, ktere´ berou Jabber jenom jako dalsˇ´ı s´ıt’ s beˇznˇ ymi´ kontakty. Takove´ programy zpravidla nijak nerozlisujˇ ´ı typ sluzeb.ˇ Vetˇ sinouˇ ani neum´ı registraci nebo vyhledav´ an´ ´ı kontaktu, takzeˇ prace´ se sluzbouˇ je pro neˇ velka´ neznam´ a.´ Sluzbyˇ jsou take´ dost castoˇ v klientovi zobrazovane´ jinak, nebo alesponˇ setrˇ´ıdenyˇ do skutecnˇ e´ nebo virtualn´ ´ı skupiny v klientovi. Vetˇ sinaˇ klientu˚ tyto sluzbyˇ seskupuje na spodn´ı straneˇ rosteru ve virtualn´ ´ı skupineˇ transporty nebo podobne.ˇ Ukazka´ zobrazen´ı virtualn´ ´ı skupiny Transports je na obrazku´ 2.4.

Obrazek´ 2.4: Ukazka´ seskupen´ı transportu˚

U serveru Jabberd 2 se sluzbyˇ po usp´ eˇsnˇ em´ pripojenˇ ´ı ke XML routeru automaticky zaregistruj´ı do seznamu sluzebˇ serveru. Ihned po pripojenˇ ´ı je sluzbaˇ nab´ıdnuta´ vsemˇ uzivatelˇ um˚ serveru a ti maj´ı vetˇ sˇ´ı sanciˇ se dovedˇ etˇ o prˇ´ıtomnosti sluzbyˇ velmi snadno.

23 Kapitola 3

Navrh´

3.1 Databaze´

S pouzitˇ ´ım Unified modelling language si priblˇ ´ızˇ´ıme pozadavkyˇ na funkce robota. Robot bude pouzˇ´ıvat pro uklad´ an´ ´ı upom´ınek relacnˇ ´ı databazi.´ Pro nejvetˇ sˇ´ı rozsˇ´ırenostˇ a dostupnost vhodne´ knihovny jsem zvolil databazi´ MySQL. Robot neklade na schopnosti databaze´ zˇadn´ e´ slozitˇ e´ pozadavky,ˇ vetˇ sinaˇ operac´ı je obycejnˇ e´ vlozenˇ ´ı, uprava´ a ctenˇ ´ı s minimem parametru.˚

3.1.1 Prˇ´ıpady pouzitˇ ´ı Obrazek´ 3.1 zachycuje hlavn´ı prˇ´ıpady pouzitˇ ´ı robota. Prvotn´ı uzivatelovouˇ cinnostˇ ´ı predˇ pocˇatkem´ interakce bude registrace ke sluzbˇ e.ˇ Registrace mu˚zeˇ prob´ıhat jenom jako pridˇ an´ ´ı kontaktu a potvr- zen´ı autorizace v prˇ´ıpadeˇ klienta, nebo v prˇ´ıpadeˇ komponenty jako klasicka´ registrace ke sluzbˇ e.ˇ Dalsˇ´ı cinnostiˇ vyplyvaj´ ´ı ze zadan´ ´ı ukolu.´ Aby melˇ cely´ robot smysl, mus´ı byt´ moznˇ e´ vlozitˇ novou upom´ınku. Tuto upom´ınku bude take´ moznˇ e´ zmenitˇ nebo predˇ casnˇ eˇ zrusit.ˇ Aby si uzivatelˇ mohl necoˇ zmenit,ˇ bude napredˇ potrebovatˇ vypsat jizˇ existuj´ıc´ı upom´ınky.

Obrazek´ 3.1: Prˇ´ıpady pouzitˇ ´ı robota

3.1.2 ER diagram Priˇ registraci se uzivateliˇ vytvorˇ´ı unikatn´ ´ı cˇ´ıslo, ktere´ pro nejˇ bude pouzˇ´ıvano´ interne.ˇ Pro jedno- znacnouˇ identifikaci by sice staciloˇ Jabber ID uzivatele,ˇ ale pouzitˇ ´ı jedinecnˇ eho´ identifikatoru´ nav´ıc

24 umoznˇ ´ı spojit nekolikˇ uzivatelˇ u˚ do jedineho.´ Nekteˇ rˇ´ı uzivatelˇ e´ maj´ı naprˇ´ıklad v´ıce u´ctˇ u˚ na ruzn˚ ych´ serverech, ktere´ pouzˇ´ıvaj´ı jenom v nekterˇ ych´ prˇ´ıpadech. Prˇ´ıkladem mu˚zeˇ byt´ oddelenˇ y´ u´cetˇ s mi- nimem kontaktu˚ urcenˇ ym´ pro pouzitˇ ´ı na mobiln´ım telefonu, kde velke´ mnozstvˇ ´ı kontaktu˚ mu˚zeˇ snadno zpusobit˚ nedostatek pametiˇ a pad´ aplikace. Na takovem´ u´ctuˇ uzivatelˇ ma´ jenom kontakty pro nejˇ dule˚ zitˇ e.´ Dalsˇ´ı moznostˇ ´ı je obdrzenˇ ´ı dalsˇ´ıho u´ctuˇ v XMPP s´ıti naprˇ´ıklad praci´ nebo skole,ˇ ktery´ je aktivn´ı ne vzdycky.ˇ Jinou alternativou je vyuzitˇ ´ı dalsˇ´ıho kontaktu jako alternativn´ıho zu´usobu˚ pro upozornenˇ ´ı, pokud nejsem aktivn´ı. V takovem´ prˇ´ıpadeˇ mu˚zeˇ s vyhodou´ poslouzitˇ naprˇ´ıklad SMS brana,´ ktera´ dorucˇ´ı upom´ınku azˇ na mobiln´ı telefon, pokud nen´ı uzivatelˇ dostupny´ prˇ´ımo presˇ XMPP s´ıt’. Kazdˇ y´ uzivatelˇ bude m´ıt jestˇ eˇ nekolikˇ polozekˇ pro drobne´ uzpusoben˚ ´ı robota. Zasadn´ ´ı polozkouˇ je pouze rucnˇ ´ı nastaven´ı casovˇ eho´ pasma.´ Nejv´ıce polozekˇ bude m´ıt tabulka events, ktera´ bude obsahovat parametry jednotlivych´ upom´ınek s urcenˇ ´ım jeho vlastn´ıka. Pro vetˇ sˇ´ı nazornost´ poslouzˇ´ı obrazek´ 3.2. U tabulky jidmap je primarn´ ´ım kl´ıcemˇ dohromady jak cˇ´ıslo uzivatele,ˇ tak Jabber ID k nemuˇ priˇ razenˇ e.´ To, zeˇ dohromady tvorˇ´ı primarn´ ´ı kl´ıc,ˇ zarucujeˇ unikatnost´ propojen´ı. Nen´ı tedy potrebaˇ zˇadn´ y´ dalsˇ´ı index na omezen´ı unikatnosti.´

Obrazek´ 3.2: ER Diagram databaze´

3.2 Trˇ´ıdy robota

Jako jazyk pro implementaci jsem si vybral jazyk C++, i kdyzˇ pro podobne´ roboty se nejcastˇ ejiˇ pouzˇ´ıva´ nejakˇ y´ skriptovac´ı jazyk. V prˇ´ıpadeˇ s´ıteˇ XMPP je to nejcastˇ ejiˇ Python. Priˇ vyb´ eruˇ je vsakˇ dule˚ zitˇ a´ urove´ nˇ zkusenostˇ ´ı programatora´ s danym´ jazykem. I kdyzˇ ja´ mam´ nejvetˇ sˇ´ı zkusenostiˇ s jazykem C, tento jazyk se mi pro zpracovan´ ´ı robota nezdal´ vhodny.´ XMPP je zalozenˇ e´ na XML a pro jeho zpracovan´ ´ı jako hierarchicke´ struktury se nab´ızej´ı objekty. Protozeˇ trochu zkusenostˇ ´ı mam´ i s C++, i kdyzˇ minimum s objektovym´ programovan´ ´ım, a preceˇ jen je C++ prˇ´ıbuzny´ s jazykem C. Nezkusenostˇ s objektovym´ programovan´ ´ım zteˇzujeˇ vytvorenˇ ´ı slusnˇ eho´ navrhu,´ protozeˇ objekty je nutne´ navrhnou predem.ˇ

25 3.2.1 Knihovna pro XMPP Jako knihovnu pro praci´ s Jabberem jsem si vybral knihovnu Gloox. Sice ani s tou jsem nemelˇ zˇadn´ e´ zkusenosti,ˇ ale je jednou z mala´ dostupnych´ knihoven pro jazyk C++ a programove´ rozhran´ı ma´ kvalitneˇ zdokumentovane.´

3.2.2 Knihovna pro MySQL Protozeˇ uzˇ padlo rozhodnut´ı pro jazyk C++, bylo by hloupe´ pouzˇ´ıt jazyka C pro prˇ´ıstup k databazi.´ Zvolil jsem tedy knihovnu MySQL++, ktera´ vyuzˇ´ıva´ vyhod´ pretypovˇ av´ an´ ´ı a sablonˇ v jazyce C++.

3.2.3 Trˇ´ıdy Event a User Jako abstrakci tabulek z databaze´ jsem vytvorilˇ dveˇ hlavn´ı trˇ´ıdy, ktere´ maj´ı uchovavat´ informace o uzivateliˇ i jeho nastaven´ı a udalostech´ uzivatele.ˇ Trˇ´ıda User obsahuje udaje´ o uzivateliˇ a jeho nasta- ven´ı, jeho seznam Jabber ID a obdrzenˇ e´ informace o dostupnosti uzivatele.ˇ Dostupnost uzivateleˇ — presence — se do databaze´ neuklad´ a,´ nemeloˇ by to smysl. Pro praci´ s databaz´ ´ı jsem odvodil z obecnych´ trˇ´ıd pro praci´ s upom´ınkou a uzivatelemˇ jejich databazov´ e´ ekvivalenty, ktere´ nav´ıc k jejich funkc´ım pridajˇ ´ı metody pro ctenˇ ´ı a ulozenˇ ´ı do da- tabaze.´ Vztah techtoˇ dvou trˇ´ıd zachycuje obrazek´ 3.3.Zakladn´ ´ı trˇ´ıda User zpracovav´ a´ dostupnost a online stav uzivatele.ˇ Nese take´ nastaven´ı pro tohoto uzivatele,ˇ schopnosti jeho klienta a jeho casovˇ e´ pasmo.´ Trˇ´ıda Event bude obsahovat vsechnyˇ operace pro zobrazen´ı upom´ınky, praci´ a nasta- vovan´ ´ı jej´ıch parametru,˚ zpracovan´ ´ı formula´reˇ vyplnenˇ eho´ i vyplnenˇ ´ı formula´reˇ uprav´ z parametru˚ upom´ınky. Trˇ´ıda SqlUser bude pouze spravovat ulozenˇ ´ı nastaven´ı uzivatele,ˇ nactenˇ ´ı priˇ prihlˇ a´senˇ ´ı uzivateleˇ a registraci noveho.´ SqlEvent podobneˇ bude spravovat pouze nactenˇ ´ı, ulozenˇ ´ı a vytvorenˇ ´ı nove´ upom´ınky. Prevodˇ na rodicovskouˇ trˇ´ıdu se zajist´ı pretˇ ´ızenˇ ´ım operatoru´ priˇ razenˇ ´ı.

Obrazek´ 3.3: Dedˇ enˇ ´ı trˇ´ıd Event a User

3.2.4 Trˇ´ıda Time Trˇ´ıda Time je abstrakc´ı pro praci´ s casem.ˇ Jej´ı vychoz´ ´ı konstruktor napln´ı strukturu aktualn´ ´ım casem.ˇ Trˇ´ıda implementuje nastavovan´ ´ı casu,ˇ posun casuˇ vpredˇ i zpet.ˇ Mimo jine´ porovnav´ a´ a dekoduje´ data ruzn˚ ych´ format´ u.˚

26 Jej´ı vyznam´ je kl´ıcovˇ y,´ protozeˇ bude zpracovavat´ posunut´ı casu,ˇ konvertovat format´ data z ruzn˚ ych´ zdroju,˚ naprˇ´ıklad mezi XMPP rozsˇ´ırenˇ ´ım a SQL databaz´ ´ı. Tato trˇ´ıda bude take´ provad´ etˇ prepoˇ cˇ´ıtav´ an´ ´ı casuˇ do ruzn˚ ych´ casovˇ ych´ pasem.´

3.2.5 Trˇ´ıdy Lexical a Syntax Pro zpracovan´ ´ı prˇ´ıkazu˚ od uzivateleˇ slouzˇ´ı trˇ´ıdy Lexical a Syntax. Trˇ´ıda Lexical postupneˇ cteˇ jed- notliva´ slova z prˇ´ıkazu a odes´ıla´ je formou trˇ´ıdy Token do trˇ´ıdy Syntax. Pomoc´ı konecnˇ eho´ automatu trˇ´ıdy Syntax bud’ nahlas´ ´ı chybu nebo pripravˇ ´ı upom´ınku pro uvedenou operaci.

3.2.6 Princip Robot bude vyuzˇ´ıvat neblokuj´ıc´ı operace na socket pripojenˇ ´ı k Jabber serveru. Periodicky bude kontrolovat, zda nekterˇ e´ upom´ınce nevyprselaˇ doba cekˇ an´ ´ı a zda se tedy nema´ odeslat. Pokud jsou takove´ upom´ınky nalezeny, nahraj´ı se pomoc´ı metod trˇ´ıd a provede se odeslan´ ´ı upom´ınky. Pokud upom´ınka byla nastavena´ s periodou opakovan´ ´ı,zmenˇ ´ı se datum aktivace upom´ınky na prˇ´ıst´ı cas.ˇ Pokud je uvedeno omezen´ı poctuˇ opakovan´ ´ı, pocetˇ opakovan´ ´ı se sn´ızˇ´ı. Pote´ se ulozˇ´ı zpetˇ do da- tabaze.´ Pokud byla upom´ınka jednorazov´ a´ nebo pocetˇ opakovan´ ´ı uzˇ je roven nule, upom´ınka se vymazeˇ z databaze.´ Ackolivˇ tento zpusob˚ bude vyzadovatˇ castˇ e´ zasahy´ do databaze,´ ma´ i svoje vyhody.´ Muj˚ puvodn˚ ´ı zam´ erˇ byl nacˇ´ıst datum upom´ınky, ktera´ jako prvn´ı vyprsˇ´ı. Stanovit rozd´ıl mezi t´ımto datem a aktualn´ ´ım casem,ˇ a po tuto dobu potom jenom periodicky obsluhovat spojen´ı do s´ıteˇ Jabber. Po- tom jsem usoudil, zeˇ ve spojen´ı s indexem na tabulku casuˇ nebude periodicke´ ctenˇ ´ı vyprsenˇ ych´ upom´ınek nejakouˇ znatelnou zat´ eˇzˇ´ı. Nav´ıc priˇ periodickem´ ctenˇ ´ı s kratk´ ym´ intervalem mu˚zeˇ upo- m´ınkovacˇ spolupracovat trebaˇ s webovym´ formula´rem,ˇ presˇ ktery´ bude moci uzivatelˇ pridatˇ dalsˇ´ı podm´ınku pohodlneˇ do databaze,´ a na Jabber bude upozornen,ˇ azˇ vyprsˇ´ı.

3.2.7 Posun casuˇ Robot se take´ bude snazitˇ automaticky kompenzovat posun casuˇ v ruzn˚ ych´ casovˇ ych´ pasmech.´ Pro automaticke´ nastaven´ı se pouzijeˇ jednoho ze zpusob˚ u˚ pro zjistˇ’ovan´ ´ı casuˇ pomoc´ı rozsˇ´ırenˇ ´ı Entity Time (XEP-90) nebo Entity Time (XEP-202). Vetˇ sinouˇ asi bude implementovan´ pouze prvn´ı zpusob,˚ protozeˇ druhy,´ i kdyzˇ pro zpracovan´ ´ı vyhodn´ ejˇ sˇ´ı, je zat´ım v experimentaln´ ´ım stadiu.´

27 Kapitola 4

Implementace

4.1 Casovˇ e´ zony´

Protozeˇ na svetˇ eˇ je ruzn˚ y´ casˇ a ne kazdˇ y´ uzivatelˇ ma´ casˇ stejny,´ jeden robot mu˚zeˇ m´ıt spatnˇ e´ udaje´ o uzivateli.ˇ Robot sam´ je v jedne´ cˇasti´ zeme,ˇ kde casˇ se nemenˇ ´ı. Ale jeho uzivatelˇ e´ mohou byt´ v sousedn´ıch pasmech,´ nebo i na jinem´ svetadˇ ´ılu. Aby mohli uzivatelˇ e´ smysluplneˇ zadavat´ svoje upom´ınky nejen v relativn´ı formeˇ (upozorni meˇ za 15 minut), ale i se zadan´ ´ım presnˇ eho´ casu,ˇ mus´ı robot vedˇ et,ˇ jaky´ casˇ uzivatelˇ ma.´ Kdyzˇ uzivatelˇ zadav´ a´ cas,ˇ obvykle chce zadavat´ svuj˚ cas,ˇ ktery´ je v m´ısteˇ jeho pobytu. Robot vsakˇ mus´ı nejprve zjistit, jaky´ casˇ uzivatelˇ ma,´ protozeˇ ne nutneˇ mus´ı byt´ ve stejnem´ pasmu´ a m´ıt tak casˇ stejny.´ Uzivatelˇ by byl jisteˇ nespokojen, pokud by si zadal casˇ a jeho upom´ınka, ktera´ melaˇ prijˇ ´ıt za hodinu, priˇ slaˇ za hodin sest.ˇ Robot tedy bude pracovat interneˇ s casemˇ Universal Coordinated Time, ktery´ je univerzaln´ eˇ pouzitelnˇ y´ po celem´ svetˇ eˇ a uznavan´ y.´ Casyˇ od lokaln´ ´ıch uzivatelˇ u˚ si bude robot priˇ kazdˇ e´ uprav´ eˇ prevˇ ad´ etˇ do univerzaln´ ´ıho casu,ˇ aby mohl zarove´ nˇ porovnavat´ casˇ od uzivatelˇ u˚ v ruzn˚ ych´ casovˇ ych´ zon´ ach.´ Priˇ kazdˇ em´ dotazu uzivateleˇ prevedeˇ jeho casˇ zpetˇ na jeho m´ıstn´ı cas.ˇ

4.1.1 Zjistˇ ’ovan´ ´ı casuˇ Zjistovˇ an´ ´ı casuˇ uzivateleˇ zavis´ ´ı na schopnostech jeho klienta. Pokud klient um´ı aleponˇ nejakouˇ metodu urcenˇ ´ı casu,ˇ nen´ı trebaˇ obteˇzovatˇ uzivatele.ˇ Je maximaln´ eˇ vhodne,´ aby uzivatelˇ nebyl nucen nastavovat si svuj˚ casˇ rucnˇ e,ˇ pokud to jde jinak. Casˇ klienta se zjistˇ’uje priˇ kazdˇ em´ prechoduˇ uzivateleˇ do stavu online. U kazdˇ eho´ uzivateleˇ si zjist´ı jeho vlastnosti pomoc´ı Service Discovery, a zkus´ı zjistit cas.ˇ Spravn´ eˇ by melˇ zkousetˇ casˇ jenom u klientu,˚ kterˇ´ı v sekci features odpovediˇ Service Discovery.Nekteˇ rˇ´ı klienti ale nemaj´ı vypsany´ vsechnyˇ podporovane´ vlastnosti a nen´ı moznˇ e´ se na tyto informace na 100 % spolehnout. Protozeˇ protokol ma´ jasneˇ definovanou odpovedˇ ’ priˇ nepodporovanen´ rozsˇ´ırenˇ ´ı, dotaz se posleˇ bez ohledu na ohla´senouˇ podporu. Vsechnyˇ zkousenˇ e´ klienty um´ı korektneˇ nahlasit,´ pokud protokol neumejˇ ´ı. Pokud by ani neumelyˇ spravn´ eˇ ohlasit,´ zeˇ rozsˇ´ırenˇ ´ı neum´ı, robot bude menitˇ casovˇ e´ pasmo´ jenom v prˇ´ıpade,ˇ zeˇ dostane platnou odpovedˇ ’. Pokud dostane chybove´ hla´senˇ ´ı nebo vubec˚ nic, predpoklˇ ad´ a´ puvodn˚ ´ı nastaven´ı. Protozeˇ uzivatelˇ mu˚zeˇ zkousetˇ ruzn˚ e´ klienty a nekterˇ e´ rozsˇ´ırenˇ ´ı um´ı, jine´ nikoliv, bude si robot zaznamenavat´ posledn´ı podporovane´ casovˇ e´ pasmo.´ Jakmile jednou robot obdrzˇ´ı urcenˇ ´ı casovˇ eho´ pasma,´ bude predpoklˇ adat,´ zeˇ tento kontakt moc necestuje a casovˇ e´ pasmo´ ma´ porˇad´ stejne.´ Pokud cestovat bude, pro spravn´ e´ fungovan´ ´ı korekc´ı mus´ı jeho klient podporovat urcenˇ ´ı casovˇ eho´ pasma.´

28 4.1.2 Zkratky casovˇ ych´ pasem´ Kdyzˇ jsem planoval,´ jak robot bude fungovat, predpoklˇ adal´ jsem podporu alesponˇ historickeho´ rozsˇ´ırenˇ ´ı ve vsechˇ dnesnˇ ´ıch klientech. Rozsˇ´ırenˇ ´ı XEP–90 je definovano´ jizˇ hodneˇ dlouho, a pouzˇ´ıvalo se jestˇ eˇ dlouho predˇ t´ım, nezˇ vubec˚ bylo zdokumentovano´ jako rozsˇ´ırenˇ ´ı s cˇ´ıslem 90. Toto rozsˇ´ırenˇ ´ı umozˇnujeˇ z´ıskat od vzdalen´ e´ entity jeho cas,ˇ zkratku jeho casovˇ eho´ pasma´ a casˇ zobrazeny´ ve formatu´ beˇznˇ em´ pro tohoto uzivatele.ˇ Posledn´ı cˇast´ nema´ valne´ uplatnenˇ ´ı, protozeˇ nen´ı moznˇ e´ ji nejakˇ strojoveˇ zpracovat. Pro robota tedy nema´ absolutneˇ zˇadn´ y´ vyznam.´ Ani casˇ klienta nen´ı prˇ´ılisˇ zaj´ımavy,´ protozeˇ je udav´ an´ v mezinarodn´ ´ım caseˇ UTC a tedy by melˇ byt´ stejny´ jako casˇ robota. Je moznˇ e´ sdelitˇ uzivateliˇ rozd´ıl mezi casemˇ robota a uzivatele,ˇ ale pro tyto prostredkyˇ jsou mnohem pokrocilejˇ sˇ´ı protokoly. Nejdule˚ zitˇ ejˇ sˇ´ı je parametr se zkratkou casovˇ e´ zony.´ Jedineˇ tento je schopen poskytnout robo- tovi uziteˇ cnouˇ informaci, a tedy v jakem´ casovˇ e´ pasmo´ je. Co jsem ovsemˇ vubec˚ netusilˇ v dobeˇ teoretickeho´ navrhu´ robota bylo, zeˇ tyto zkratky jsou pomernˇ eˇ chaoticky rozdelenyˇ po svetˇ e.ˇ Nee- xistuje zˇadn´ a´ specifikace podobna´ seznamu zkratek narod´ u˚ nebo zkratek stat´ u.˚ Naj´ıt posunut´ı casuˇ ze zkratky nen´ı tak jednoduche,´ jak jsem si puvodn˚ eˇ myslel. Mym´ zam´ eremˇ bylo vyuzˇ´ıt volan´ ´ı knihovny, kteremu´ zadam´ casˇ a zkratku, a dostanu casˇ v teto´ zon´ e.ˇ Nebyl jsem zase tak prekvapenˇ y,´ kdyzˇ jsem takove´ volan´ ´ı nenaselˇ ani na POSIXu, ani ve Win API. Co meˇ ale prekvapiloˇ v´ıce, zeˇ jsem nenaselˇ ani zˇadn´ e´ systemov´ e´ volan´ ´ı pro zjistˇ enˇ ´ı posunut´ı casuˇ v jine´ zon´ e.ˇ Vlastneˇ prace´ s jinym´ nezˇ mym´ vlastn´ım casovˇ ym´ pasmem´ je docela problematicka,´ v jazyce C ani C++ nen´ı dostupne´ nejakˇ e´ jednoduche´ a prenositelnˇ e´ reˇ senˇ ´ı. Ta- kove´ problemy´ meliˇ pravdepodobnˇ eˇ i jin´ı vyvoj´ a´riˇ nejen Jabber klientu˚ a proto rozsˇ´ırenˇ ´ı vyuzˇ´ıvaj´ıc´ı zkratku casovˇ e´ zony´ je v novem´ experimentaln´ ´ım rozsˇ´ırenˇ ´ı nahrazeno mnohem praktictˇ ejˇ sˇ´ım posu- nut´ım uvedenym´ cˇ´ıselneˇ v hodinach´ a minutach.´ Zvolil jsem tedy vytvorenˇ ´ı tabulky vlastn´ı, vytvorenouˇ ze seznamu casovˇ ych´ pasem´ ze serveru Time Genie [8]. I kdyzˇ tento seznam nen´ı oficialn´ ´ı, byl nejupln´ ejˇ sˇ´ım seznamem casovˇ ych´ pasem.´ Sice nen´ı zcela nutne´ m´ıt seznam casovˇ ych´ pasem´ upln´ eˇ pro cely´ svet,ˇ zvla´stˇ eˇ kdyzˇ stavaj´ ´ıc´ı verze komunikuje pouze cesky.ˇ Pravdepodobnost,ˇ zeˇ by tolik ceskyˇ mluv´ıc´ıch lid´ı cestovalo po svetˇ eˇ nen´ı velka.´ I kdyzˇ autor vetˇ sinyˇ rozsˇ´ırenˇ ´ı i specifikace XMPP Peter Saint-Andre ceskyˇ trochu um´ı a v nekterˇ ych´ rozsˇ´ırenˇ ´ıch ceˇ stinuˇ mu˚zemeˇ zahlednout.´ Prevodyˇ pomoc´ı zkratek se tedy provad´ ´ı vlastn´ımi funkcemi, ktere´ vrac´ı posunut´ı v minutach.´ Existuj´ı zeme,ˇ naprˇ´ıklad stredˇ Australie,´ kde posunut´ı nen´ı po hodinach,´ takzeˇ bylo nutne´ m´ıt mensˇ´ı jednotku.

4.1.3 Prechodyˇ letn´ıho a zimn´ıho casuˇ Puvodn˚ eˇ jsem melˇ si myslel, zeˇ posunovan´ ´ı letn´ıho a zimn´ıho casuˇ mi pomu˚zeˇ nastavovat system.´ Protozeˇ jsem ale zjistil, zeˇ kromeˇ zmenyˇ vlastn´ıho casovˇ eho´ pasma´ mi system´ zˇadnou´ pomoc ne- nab´ız´ı, hledal jsem dalsˇ´ı reˇ senˇ ´ı. Posunovan´ ´ı mezi letn´ım a zimn´ım casemˇ se zavedlo nekdyˇ ke konci 18. stolet´ı z duvodu˚ uspory´ elektricke´ energie. Protozeˇ se v letn´ıch mesˇ ´ıc´ıch posouva´ doba sv´ıtan´ ´ı a zapadu´ slunce na pozdejˇ sˇ´ı hodiny, je nutne´ del´ sˇ´ı dobu sv´ıtit. Aby se nemuselo sv´ıtit tak dlouho a den zacˇ´ınal stejneˇ dlouho po rozednenˇ ´ı, posouva´ se v let´ eˇ casˇ o hodinu zpet.ˇ Takove´ posunut´ı casuˇ nekterˇ e´ staty´ aplikuj´ı, jine´ ne. Neplat´ı tedy, zeˇ v jedne´ casovˇ e´ zoneˇ se posun casuˇ pouzˇ´ıva´ a v jine´ ne. Sice vetˇ sinaˇ zkratek casovˇ ych´ zon´ obsahuje p´ısmeno S od anglickeho´ slova Summer — letn´ı, ale urcit,ˇ zda nekdoˇ pouzˇ´ıva´ nebo nepouzˇ´ıva´ posunuty´ letn´ı casˇ z pohledu robota je tem´ eˇrˇ loterie. Tady je naprˇ´ıklad uziteˇ cnˇ e,´ kdyzˇ klient vrac´ı svoje casovˇ e´ pasmo´ jako nazev´ nebo zkratku. Pokud tak ucinˇ ´ı, mu˚zuˇ u meˇ znam´ ych´ zon´ jasneˇ rˇ´ıct, zeˇ u teto´ casovˇ e´ zony´ pouzˇ´ıvaj´ı letn´ı cas.ˇ Naprˇ´ıklad pro stredoevropskouˇ zonu´ CET se pouzˇ´ıva´ pro oznacenˇ ´ı letn´ıho casuˇ CEST. Z pohledu

29 robota tak mu˚zuˇ tipovat, zda tento uzivatelˇ bude m´ıt od nejakˇ eho´ data casˇ jiny,´ i kdyzˇ zustane˚ na stejnem´ m´ıste.ˇ Jeden z problem´ u˚ ale spocˇ´ıva´ take´ v tom, zeˇ datum prechoduˇ z a na letn´ı casˇ nen´ı vzdyˇ jasneˇ dane.´ Jestˇ eˇ v roce 1982 se casˇ v Ceskˇ e´ Republice menilˇ na letn´ı o pulnoci˚ (viz [10]), od te´ doby se menˇ ´ı ve dveˇ hodiny v noci. Jestˇ eˇ donedavna´ vyhlasovalyˇ data posunu casuˇ ceskˇ e´ u´radyˇ samostatne,ˇ po vstupu do evropske´ unie je posun casuˇ synchronizovan´ ve vsechˇ statech´ a casˇ posunu je zavazn´ y.´ Tyto casyˇ nejsou nijak vhodneˇ planov´ any´ pro vypo´ cetnˇ ´ı techniku, ale sp´ıseˇ s ohledem na pracuj´ıc´ı narod´ a prakticke´ problemy´ zivota.ˇ Zmenaˇ tak prob´ıha´ posledn´ı breznovouˇ nedeliˇ v noci a vrac´ı se v posledn´ı rˇ´ıjnovou nedeliˇ zpet.ˇ Uzˇ jenom to, zeˇ posun nen´ı konkretn´ ´ı datum, ale kazdˇ y´ rok vychaz´ ´ı jinak, je docela problematicky.´ Urcitˇ pro konkretn´ ´ı datum a cas,ˇ jestli v uvedene´ dobeˇ oproti momentaln´ ´ımu casuˇ se posune nebo ne je slozitˇ e´ a zavis´ ´ı na znalosti zvyklost´ı v dane´ zemi. Robot nema´ absolutneˇ zˇadnou´ predstavuˇ o tom, v jake´ zemi se pohybuju. Jedine´ vod´ıtko mu˚zeˇ byt´ casovˇ a´ zona,´ prˇ´ıpadneˇ jazyk uzivatele.ˇ V anglicky mluv´ıc´ıch zem´ıch, ktere´ jsou snad na vsechˇ kontinentech vsakˇ jazyk neurcujeˇ vubec˚ nic.

4.1.4 Reˇ senˇ ´ı posunu casuˇ Kvuli˚ prav´ eˇ vyjmenovanym´ duvod˚ um˚ povazujiˇ korekci letn´ıho casuˇ s ohledem na jine´ staty´ nezˇ Ceskouˇ Republiku tem´ eˇrˇ za neproveditelnou. Pokud tedy uzivatelˇ zada´ zacˇatkem´ brezna,ˇ zeˇ chce byt´ upozornenˇ za mesˇ ´ıc v 15 hodin, robot si jeho casˇ prevedeˇ do UTC a ulozˇ´ı. Kdyzˇ ale bude upom´ınku odes´ılat, uzivatelˇ uzˇ zmenilˇ casˇ a 15 hodin nebude jeho aktualn´ ´ı cas.ˇ Upom´ınka tak dojde o hodinu spatnˇ e.ˇ Moje reˇ senˇ ´ı tohoto problemu´ spocˇ´ıva´ v periodickem´ testovan´ ´ı uzivatelovyˇ casovˇ e´ zony.´ Pokud ma´ uzivatelˇ podporu v klientovi, priˇ kazdˇ em´ pripojenˇ ´ı se mu zkontroluje cas.ˇ Pokud robot zjist´ı, zeˇ se casovˇ e´ pasmo´ uzivateleˇ neshoduje s t´ım posledneˇ ulozenˇ ym,´ provede korekci vsechˇ jeho ulozenˇ ych´ upom´ınek a uprav´ı casˇ jejich aktivace. T´ımto zpusobem˚ se dodrzˇ´ı doba dorucenˇ ´ı, i kdyzˇ se mezit´ım zmenˇ ´ı casovˇ e´ pasmo.´ Lze tak opravit upom´ınky i o v´ıce hodin, nezˇ o jedinou priˇ posunu na letn´ı cas.ˇ Naprˇ´ıklad pokud polet´ım za ocean´ na dovolenou, bude casˇ najednou alesponˇ o 6 hodin posunuty.´ Robot po prihlˇ a´senˇ ´ı zjist´ı, zeˇ casovˇ a´ zona´ se zmenila,ˇ a vypocˇ´ıta´ rozd´ıl casˇ u.˚ Pote´ oprav´ı vsechnyˇ upom´ınky a ty, ktere´ uzˇ melyˇ byt´ dorucenyˇ dodatecnˇ eˇ zasle.ˇ Tento zpusob˚ ma´ take´ nekolikˇ nedostatku.˚ Nen´ı jiste,´ zda kdyzˇ jsem si zadal predˇ zmenouˇ nejakˇ y´ cas,ˇ nemyslel jsem t´ım odpov´ıdaj´ıc´ı casˇ bez ohledu na to, v jake´ zemi budu nebo jestli se zmenˇ ´ı casˇ na letn´ı. Robot provede korekci vzdy,ˇ aby byla dodrzenaˇ urcenˇ a´ hodina. U kazdˇ e´ upom´ınky si tak bude ukladat´ jestˇ eˇ casovˇ e´ posunut´ı, priˇ kterem´ byla vytvorena.ˇ Protozeˇ ale vetˇ sinouˇ opom´ınka s uvedenou hodinou m´ınenaˇ jako presnˇ y´ cas,ˇ predpoklˇ ad´ am´ zeˇ v prevˇ a´znˇ e´ vetˇ sinˇ eˇ prˇ´ıpadu˚ bude zvolene´ chovan´ ´ı nejvhodnejˇ sˇ´ı.

4.1.5 Podpora klientu˚ Tohle chovan´ ´ı ovsemˇ nebude fungovat, pokud pravidelneˇ pouzˇ´ıvany´ klient neum´ı sdelitˇ robotovi svoje casovˇ e´ pasmo.´ Bohuzelˇ jsem zjistil, zeˇ ani v nejnovejˇ sˇ´ı verzi klienti Psi a neum´ı sdelitˇ svuj˚ cas.ˇ Psi je jeden z nejlepsˇ´ıch a nejpouzˇ´ıvanejˇ sˇ´ıch klientu,˚ bohuzelˇ neum´ı ani jednu z moznosti.ˇ Gajim byl jediny,´ ktery´ podporoval i novejˇ sˇ´ı experimentaln´ ´ı rozsˇ´ırenˇ ´ı s uveden´ım casovˇ e´ zony´ pomoc´ı cˇ´ıselneho´ posunu, nikoliv zkratky. Bez klienta s podporou protokolu je posunovan´ ´ı casuˇ plneˇ v rukou uzivatele.ˇ

30 4.2 Sprava´ upom´ınek

4.2.1 Registrace Predˇ zapocetˇ ´ım pouzˇ´ıvan´ ´ı robota se uzivatelˇ mus´ı zaregistrovat. K registraci nepotrebujeˇ ani heslo, ani necoˇ jineho´ kromeˇ vlastn´ıho Jabber ID. Registrace je nutna´ k vytvorenˇ ´ı cˇ´ısla uzivatele,ˇ ktere´ je pak vyuzˇ´ıvano´ priˇ prohledav´ an´ ´ı tabulek v databazi.´ Registrace se provede pouzitˇ ´ım klasicke´ inter- grovane´ registrace pomoc´ı prohl´ızeˇ ceˇ sluzeb.ˇ Prˇ´ıpadneˇ stacˇ´ı si pridatˇ kontakt na robota a pozˇadat´ jej o autorizaci. Robot sam´ autorizaci vyda´ a pokud jestˇ eˇ daneho´ uzivateleˇ nema´ zaregistrovaneho,´ potom si jej zaregistruje. Protozeˇ je robot sluzba,ˇ uzivatelˇ si mu˚zeˇ pridatˇ jakykoliv´ kontakt spadaj´ıc´ı pod jmeno´ sluzby.ˇ Naprˇ´ıklad jmeno´ serveru — sluzbyˇ je bot.example.org, potom si mu˚zuˇ pridatˇ jakykoliv´ kon- takt s ruzn˚ ym´ identifikatorem´ uzivateleˇ a cˇast´ ´ı serveru shodnout se jmenem´ sluzby.ˇ Naprˇ´ıklad [email protected] je ve sve´ funkcnostiˇ ekvivalentn´ı kontaktu [email protected]. Uzivatelˇ si mu˚zeˇ zvolit podle svoj´ı fantazie. Robotovi je celkem jedno, presˇ ktery´ kontakt prijˇ ´ıma´ komunikaci. Svoje odpovediˇ bude pos´ılat vzdyˇ ze zdroje, na kterou priˇ slaˇ zˇadost,´ takzeˇ uzivateleˇ to nijak neovlivn´ı.

4.2.2 Prohl´ızenˇ ´ı sluzebˇ Prakticky vsechnyˇ modern´ı klienty specializovane´ na jabber maj´ı prohl´ızeˇ cˇ sluzebˇ s vyuzˇ´ıvan´ ´ım Service Discovery. Zpusoby˚ zobrazen´ı se lisˇ´ı jeden od druheho.´ Na obrazku´ 4.1 je ukazka´ hlavn´ıho stromu robota s nab´ıdnutymi´ sluzbami.ˇ Pomoc´ı kombinace prohl´ızeˇ ceˇ sluzebˇ a registrac´ı je moznˇ e´ si pohodlneˇ upravovat a pridˇ avat´ nove´ upom´ınky. K uprav´ eˇ se pouzˇ´ıva´ In–band Registration, tedy upln´ eˇ stejna´ registrace, jakou provad´ ´ıte priˇ vytvorenˇ ´ı u´ctuˇ na Jabber serveru. Zaj´ımave´ ale je, zeˇ d´ıky obecnemu´ rozsˇ´ırenˇ ´ı XEP–0004 Data Forms, je moznˇ e´ vytva´retˇ formula´reˇ podobne´ HTML formula´rˇum˚ na webu. To mu˚zeˇ uzivateliˇ nab´ıdnout vysoky´ komfort a prehlednostˇ uprav,´ podobnou specializovanemu´ programu.

Obrazek´ 4.1: Ukazka´ zobrazen´ı sluzebˇ v klientu Psi

4.2.3 Editace upom´ınky K rozlisenˇ ´ı jednotlivych´ ukon´ u˚ jsem pouzilˇ ruzn˚ ych´ cˇast´ ´ı zdroje. T´ım, zeˇ se jedna´ o jine´ Jabber ID, lze priˇ registraci rozlisitˇ jaky´ formula´rˇ se ma´ klientovi poslat. Pro zdroj events se pos´ıla´ vzdyˇ formula´rˇ pro novou upom´ınku. Zdroj ma´ popisek Seznam upom´ınek, priˇ jeho prohl´ızenˇ ´ı se vyp´ıseˇ seznam cekajˇ ´ıc´ıch upom´ınek s jejich zkracen´ ym´ popiskem a casem,ˇ kdy budou vyvolany.´ V Psi

31 verze 0.10 je velmi prˇ´ıjemne´ to, zeˇ na tuto polozkuˇ stacˇ´ı poklepat a otevreˇ se novy´ formula´rˇ pro zadan´ ´ı upom´ınky. Ve formula´riˇ je automaticky predvyplnˇ enˇ e´ aktualn´ ´ı datum a casˇ klienta, s korekc´ı casovˇ eho´ pasma´ ze strany robota. Po prijetˇ ´ı upom´ınky si robot zase prevedeˇ casˇ na univerzaln´ ´ı casˇ a teprve takovy´ si ulozˇ´ı do databaze.´ Ve formula´riˇ je moznˇ e´ si take´ zvolit opakovan´ ´ı upom´ınky. Je moznˇ e´ omezit pocetˇ opakovan´ ´ı, po jeho vyprsenˇ ´ı se upom´ınka smaze.ˇ Pokud bude zvolen s popup nab´ıdky typ opakovan´ ´ı, ale pocetˇ opakovan´ ´ı zustane˚ prazdn´ y,´ bude upom´ınka brana´ jako nekonecnˇ a´ a periodicky se bude pos´ılat azˇ do zrusenˇ ´ı nebo upravy´ uzivatelem.ˇ Prˇ´ıklad editacnˇ ´ıho formula´reˇ je moznˇ e´ videtˇ na obrazku´ 4.2. Je na nemˇ mimo jine´ videtˇ mala´ kolonka pro editaci hlavn´ıho textu upom´ınky. Gajim chybneˇ interpretuje v´ıcerˇadkov´ y´ vstup a kolonka vubec˚ neodpov´ıda´ tomu, jak by vypadat mela.ˇ Znacnˇ y´ pocetˇ klientu˚ ma´ mensˇ´ı nebo vetˇ sˇ´ı problemy´ s rozvrzenˇ ´ım techtoˇ formula´rˇu.˚ Dynamicke´ formula´reˇ bez pevneˇ danych´ pol´ıcekˇ se pouzˇ´ıvaj´ı kratkou´ dobu a vetˇ sinouˇ jde jeno o dveˇ nebo triˇ pol´ıckaˇ priˇ registraci k transportu.

Obrazek´ 4.2: Ukazka´ editace upom´ınky v Gajimu

S mym´ formula´remˇ nemeloˇ velke´ problemy´ Psi ani Tkabber. Jak vypada´ ten stejny´ formula´rˇ v Tkabberu je videtˇ na obrazku´ 4.3. Naopak Exodus sice formula´reˇ um´ı, ale rozvrzenˇ ´ı je znacnˇ eˇ odpudive.´ Jednotlive´ kolonky maj´ı okraje presˇ sebe, vedle nich je nevzhledne´ posouvan´ ´ı rˇadk´ u.˚ V Exodusu je asi pohodlnejˇ sˇ´ı pouzˇ´ıt editaci textovou, protozeˇ editace presˇ registrace je sice plneˇ funkcnˇ ´ı, ale nen´ı vubec˚ uzivatelskyˇ prˇ´ıjemna.´ Tkabber jako jediny´ z klientu˚ obsahuje prˇ´ımo v registracnˇ ´ım formula´riˇ tlacˇ´ıtko Unregister, ktere´ je moznˇ e´ pouzˇ´ıt k upln´ emu´ smazan´ ´ı upom´ınky. U ostatn´ıch klientu˚ je nutne´ pro zrusenˇ ´ı upom´ınky pouzˇ´ıt textovy´ rezimˇ robota.

4.3 Textove´ prˇ´ıkazy

4.3.1 Lexikaln´ ´ı analyzer´ Robot obsahuje minimalisticky´ lexikaln´ ´ı analyzer pro rozlisovˇ an´ ´ı jednotlivych´ slov. Sice robot neum´ı zˇadn´ e´ slozitˇ e´ vyrazy´ a vetˇ sinaˇ zadavan´ ych´ slov jsou slova kl´ıcovˇ a,´ rozdelenˇ ´ı na jenotlive´ tokeny umozˇnujeˇ snadno ignorovat mezery mezi slovy a poskytuje prostor pro snadnejˇ sˇ´ı dalsˇ´ı rozsiˇ rovˇ an´ ´ı robota.

32 Obrazek´ 4.3: Ukazka´ editace upom´ınky v Tkabberu

Zat´ım ma´ lexikaln´ ´ı analyzer´ za ukol´ rozlisovatˇ jenom interpunkcnˇ ´ı znaky, preˇ cˇ´ıst cˇ´ısla a do uvozovek uzavrenˇ e´ rˇetˇ ezce.ˇ Dale´ rozlisujeˇ ctenˇ ´ı casuˇ a data ve formatu´ ISO 8601 i s kontrolou prˇ´ıpustnych´ rozsahu.˚ Ukazku´ stavoveho´ automatu vid´ıme na obrazku´ 4.4.

Obrazek´ 4.4: Ukazka´ stavoveho´ automatu priˇ ctenˇ ´ı cˇ´ısla

4.3.2 Kl´ıcovˇ a´ slova Kl´ıcovˇ a´ slova jsou interneˇ prevˇ ad´ enaˇ ze slov na numericke´ konstanty. Numericke´ vyjad´ renˇ ´ı pridˇ a´ trochu rychlosti na zpracovan´ ´ı vyrazu,´ ale to nen´ı duvod˚ jejich pouzitˇ ´ı. Jako numericke´ hodnoty jsem je mohl vyuzˇ´ıvat v konstrukci switch — case a snadnejiˇ tak nastavovat konecnˇ y´ automat. Dalsˇ´ı velkou vyhodou´ je moznostˇ povazovatˇ nekolikˇ tvaru˚ jednoho slova za stejne´ kl´ıcovˇ e´ slovo, takzeˇ v prechˇ azen´ ´ı do ruzn˚ ych´ stavu˚ se musela napsat jenom jedna hodnota slova. Zvla´stˇ eˇ vyhodn´ y´ je takovy´ prˇ´ıstup, pokud potrebujuˇ m´ıt nekolikˇ tvaru˚ toho stejneho´ slova obslouzenyˇ jako slovo jedine.´ Naprˇ´ıklad pro robota slovo minuta, minut, minuty nebo minute je porˇad´ jeden vyraz,´ a nen´ı duvod˚ pro vsechnyˇ tvary stejneho´ vyznamu´ zohlednovatˇ syntaxi.

33 4.3.3 Syntaxe Syntakticky´ analyzator´ je stavovy´ automat, ktery´ postupneˇ upresˇ nujeˇ parametry vysledn´ e´ operace. Prˇ´ıkazu˚ nen´ı prˇ´ılisˇ mnoho, pro praci´ s upom´ınkami je potrebaˇ jenom nekolikˇ malo´ operac´ı. Pouzˇ´ıt´ım syntaktickeho´ analyzatoru´ jsem se pokusil trochu priblˇ ´ızitˇ lidske´ reˇ ci.ˇ V lidske´ reˇ ciˇ pouzˇ´ıvame´ v´ıc slov a men´ eˇ specialn´ ´ıch znaku.˚ Nekterˇ a´ slova maj´ı nepatrny´ vyznam´ a robot je mu˚zeˇ jednoduseˇ ignorovat. C´ılem syntaktickeho´ analyzatoru´ je predevˇ sˇ´ım umoznitˇ rozvoj dalsˇ´ıch parametru˚ a novych´ prˇ´ıkazu,˚ ktere´ by se teˇzkoˇ pridˇ avaly´ do specialn´ ´ıho ctenˇ ´ı prˇ´ıkazu.˚ I kdyzˇ jsem se snazilˇ vyuzˇ´ıt uzivatelskyˇ hezcˇ´ıch formula´rˇu˚ pomoc´ı registrace, prav´ eˇ v moznostechˇ dalsˇ´ıch prˇ´ıkazu˚ je vetˇ sˇ´ı pro- stor pro rozsiˇ rovˇ an´ ´ı funkc´ı.

4.4 Omezen´ı platformy

Protozeˇ zdaleka ne vsechnaˇ volan´ ´ı knihoven jsou implementovana´ na vsechˇ systemech´ stejne,ˇ potykal´ jsem se priˇ implementaci s prenositelnostˇ ´ı robota na v´ıce platforem. Naprˇ´ıklad chyb´ı univerzaln´ ´ı moznostˇ prekˇ odov´ an´ ´ı UTF-8 retˇ ezceˇ na znaky plneˇ v unikodu.´ Pro Windows i POSIX neexistuje jednotne´ rozhran´ı. Pro praci´ s casemˇ jsem potrebovalˇ intenzivneˇ pracovat s mezinarodn´ ´ım casem.ˇ Knihovna jazyka C ale neum´ı prevˇ est´ datum vyjad´ renˇ e´ v jednotlivych´ polozkˇ ach´ na typ time_t. Jedine´ dostupne´ reˇ senˇ ´ı je pouzitˇ ´ı volan´ ´ı mktime, ktere´ ale pracuje pouze s lokaln´ ´ım casem,ˇ nikoliv univerzaln´ ´ım. Pro praci´ s univerzaln´ ´ım nab´ızej´ı BSD i GNU/Linux systemy´ volan´ ´ı timegm, ktere´ pracuje prˇ´ımo s univerzaln´ ´ım casem.ˇ I kdyzˇ vetˇ sinaˇ Jabber/XMPP serveru˚ mu˚zeˇ beˇzˇetˇ na platformeˇ Windows, vsechnyˇ vetˇ sˇ´ı ser- very byvaj´ ´ı obvykle na unixove´ platforme.ˇ Existuje velke´ mnozstvˇ ´ı podpurn˚ ych´ skriptu˚ pro POSI- Xove´ systemy,´ ale je minimum pomocnych´ programu˚ pro spravu´ serveru na platformach´ windows. Protozeˇ i muj˚ server beˇzˇ´ı na systemu´ GNU/Linux, zvolil jsem nasazen´ı robota pouze na tomto systemu.´ T´ım mu˚zuˇ vyuzˇ´ıt i nekterˇ ych´ volan´ ´ı, ktere´ na platformeˇ windows vubec˚ nejsou.

34 Kapitola 5

Moznostiˇ dalsˇ´ıho vyvoje´

5.1 Internacionalizace

Momentaln´ eˇ je robot napsany´ v ceskˇ em´ jazyce a s uzivatelemˇ komunikuje jenom cesky.ˇ I kdyzˇ ceskˇ a´ komunita kolem protokolu Jabber je pomernˇ eˇ aktivn´ı, mnohem v´ıce uzivatelˇ u˚ by vyuziloˇ cizojazycnˇ e´ verze jako jsou anglicka,´ prˇ´ıpadneˇ francozska.´ Puvodn˚ eˇ jsem chtelˇ pouzˇ´ıt uzˇ v tomto robotu automatickou volbu jazyka a komunikaci s uzivatelemˇ v rodnem´ jazyce. Prekladˇ jsem chtelˇ zajistˇ’ovat pomoc´ı rozhran´ı GNU gettext, ale priˇ jeho zkouman´ ´ı jsem zjistil problemy´ priˇ pouzitˇ ´ı na straneˇ serveru. Tento system´ sice umozˇnujeˇ prekladˇ programu˚ do jinych´ jazyku˚ a kompletn´ı prizpˇ usoben˚ ´ı jazykovych´ vlastnost´ı, neum´ı ale prepˇ ´ınat rychle jazyky mezi sebou. XMPP definuje pouzitˇ ´ı xml:lang tagu pro automatickou detekci jazyka a novejˇ sˇ´ı servery, kterych´ neustale´ pribˇ yv´ a,´ uzˇ korektneˇ pridˇ avaj´ ´ı atribut s jazykem ke kazdˇ e´ odeslane´ zprav´ eˇ nebo stavu. Automaticka´ detekce jazyka a komunikace s uzivatelemˇ se prˇ´ımo nab´ız´ı. Stejneˇ jako je beˇznˇ e,´ zeˇ webovy´ server vam´ priˇ nav´ stˇ evˇ eˇ skolnˇ ´ıch stranek´ ukazeˇ ceskouˇ stranku´ a anglicanoviˇ uka´zeˇ text v jazyce anglickem,´ budou snad brzy dostupne´ sluzbyˇ i v s´ıti XMPP s podporou v´ıce jazyku.˚ Je ale potrebaˇ naj´ıt, nebo vytvorit,ˇ rozhran´ı pro prekladˇ do jineho´ jazyka, ktere´ se mu˚zeˇ prepˇ ´ınat v jedinem´ programu pro kazdˇ eho´ uzivateleˇ jinak.

5.2 Dalsˇ´ı moznostiˇ

Ukon´ u,˚ ktere´ mu˚zeˇ robot vykonavat,´ je velmi mnoho. Kromeˇ zas´ılan´ ´ı upom´ınek by mohl spra- vovat trebaˇ zalo´ zkyˇ na navstˇ ´ıvene´ stranky,´ zaj´ımave´ odkazy s kratk´ ym´ komenta´remˇ nebo obecne´ poznamky.´ Moznostiˇ zavis´ ´ı predevˇ sˇ´ım na srozumitelnem´ zadav´ an´ ´ı pozadavkˇ u.˚ Naprˇ´ıklad na serveru jabbim.cz uzˇ existuje robot na vyhledav´ an´ ´ı vlakoveho´ spojen´ı, ale vyhledav´ an´ ´ı se mus´ı uzav´ırat do neprˇ´ıjemnych´ hvezdiˇ cekˇ a uveden´ı prestupnˇ ´ı stanice je velice slozitˇ e.´ S pouzitˇ ´ım jazyka bl´ızkeho´ lidskemu´ by se podobne´ zˇadosti´ zadavaly´ intuitivneˇ a jisteˇ by prilˇ akaly´ mnohem v´ıce uzivatelˇ u.˚ Dalsˇ´ı moznouˇ volbou je rozsˇ´ırenˇ ´ı robota o sledovacˇ stavu pro WWW stranky,´ protozeˇ robot stejneˇ mus´ı sledovat prˇ´ıtomnost uzivatele.ˇ Ve spolupraci´ s rozsˇ´ırenˇ ´ım User Geolocation by mohl zaznamenavat´ i polohu uzivateleˇ a ukazovat na mape.ˇ Problem´ je jenom s pravy´ na mapove´ pod- klady, ktere´ z´ıskat pro dalsˇ´ı sˇ´ırenˇ ´ı nen´ı levna´ zale´ zitost.ˇ

5.3 Webove´ rozhran´ı

I kdyzˇ se mi mysl´ım podariloˇ dokazat,´ zeˇ s pomoc´ı Jabber klienta je take´ moznˇ e´ pohodlneˇ za- dat upom´ınky do vetˇ sinouˇ slusnˇ eˇ vypadaj´ıc´ıch formula´rˇu,˚ webove´ stranky´ maj´ı stale´ sve´ nesporne´

35 vyhody.´ Je to jejich obrovska´ rozsˇ´ırenostˇ a kompatibilita, kde se vam´ nestane moc casto,ˇ zeˇ formula´rˇ nevypada´ hezky. Internetovy´ prohl´ızeˇ cˇ pouzˇ´ıva´ na internetu kazdˇ y´ uzivatel.ˇ Webovy´ formula´rˇ lze lepe´ logicky organizovat a urcitˇ jeho vzhled i s rozvrzenˇ ´ım a velikost´ı jednotlivych´ polozek.ˇ Pokud by si chtelˇ nekdoˇ presunoutˇ naprˇ´ıklad vsechnyˇ data narozenin do meho´ robota, rozhran´ı ktere´ poskytuje jabber klient neposkyt´ a´ takovou prehlednost,ˇ jakou lze snadno doc´ılit na webove´ strance´ pomoc´ı dynamickeho´ jazyka. Protozeˇ robot vyuzˇ´ıva´ mysql databaze,´ propojen´ı by bylo pomernˇ eˇ jednoduche´ a snadno funkcnˇ ´ı.

5.4 Synchronizace s kalenda´remˇ

Pro spravu´ vetˇ sˇ´ıho mnozstvˇ ´ı upom´ınek, nebo dokonce rozvrhu, se hod´ı moznostˇ synchronizovat takova´ data se specializovanou aplikac´ı, jako je naprˇ´ıklad Microsoft Outlook. Priˇ sprav´ eˇ velkeho´ mnozstvˇ ´ı upom´ınek se upravovan´ ´ı jednotlivych´ polozekˇ stav´ a´ dost teˇzkopˇ adn´ ym,´ stejneˇ jako zadan´ ´ı vetˇ sˇ´ıho mnozstvˇ ´ı novych´ polozek.ˇ Nen´ı ani moznˇ e´ zazalohovat´ si vsechnyˇ upom´ınky pro prˇ´ıpad vypadku´ sluzby.ˇ Do budoucna by bylo uziteˇ cnˇ e´ umoznitˇ import a export upom´ınek do stoln´ıho programu pro organizaci casu.ˇ I kdyzˇ je protokol XMPP snadno rozsiˇ ritelnˇ y,´ komfort uzˇ´ıvan´ ´ı specializovaneho´ programu nemu˚zeˇ nab´ıdnou, ani nikdy nebude. I kdyzˇ s pomoc´ı formula´reˇ se da´ zadan´ ´ı upom´ınky zprˇ´ıjemnit, oproti prehlednˇ emu´ grafickemu´ kalenda´riˇ je to stale´ velmi pracne.´ Pomoc´ı synchroni- zace s programem kalenda´reˇ by bylo moznˇ e´ vyuzˇ´ıt editaci v´ıce polozekˇ specializovaneho´ prostredˇ ´ı a pro upozornovˇ an´ ´ı na upom´ınky s vyhodou´ vyuzˇ´ıt s´ıteˇ XMPP. Zvla´stˇ eˇ v kombinaci s extern´ımi branami do SMS s´ıteˇ by upozornovˇ an´ ´ı bylo velice uziteˇ cnˇ e.´ Pro synchronizaci se stoln´ı aplikac´ı je moznˇ e´ pouzˇ´ıt naprˇ´ıklad standardizovany´ XML doku- ment, ktery´ by se pomoc´ı prenosuˇ souboru˚ odeslal sluzbˇ eˇ ke zpracovan´ ´ı. Podobneˇ by bylo moznˇ e´ zazalohovat´ si vsechnyˇ jizˇ vytvorenˇ e´ upom´ınky a prenˇ est´ je do stoln´ı aplikace, naprˇ´ıklad k vytistˇ enˇ ´ı rozvrhu. Jako vhodny´ format´ se nab´ız´ı naprˇ´ıklad format´ iCalendar, ktery´ je podporovan´ mnoha aplikacemi.

36 Kapitola 6

Zav´ erˇ

S´ıt’ XMPP v sobeˇ skryv´ a´ obrovsky´ potencial.´ Existuje cela´ radaˇ sluzebˇ uzivatelˇ um˚ teto´ s´ıte.ˇ Od pouzitˇ ´ı jednoducheho´ robota pro vyhledav´ an´ ´ı zadanych´ rozsˇ´ırenˇ ´ı podle jmena´ po zaj´ımave´ webove´ mapy, ukazuj´ıc´ı stav a polohu uzivatele.ˇ Muj˚ prˇ´ıspevekˇ mezi dalsˇ´ı sluzbyˇ je robot schopny´ pracovat s poznamkami´ ve v´ıce casovˇ ych´ pasmech.´ Mysl´ım si, zeˇ se mi povedlo zaj´ımavym´ zpusobem˚ zuzitkovatˇ moznostiˇ obecneho´ formula´reˇ pro zadav´ an´ ´ı upom´ınek. Kazdˇ y´ ze specializovanych´ Jabber/XMPP klientu˚ je bez problem´ u˚ schopny´ zaregistrovat novou upom´ınku z hlavn´ıho prohl´ızeˇ ceˇ sluzeb.ˇ Sice ne kazdˇ y´ klient podporuje i upravu´ existuj´ıc´ı upom´ınky pomoc´ı registrace, ale z techˇ pouzˇ´ıvanejˇ sˇ´ıch i tohle nedelaloˇ problemy.´ Velke´ prekvapenˇ ´ı pro meˇ bylo neexistence seznamu casovˇ ych´ pasem´ a velke´ rozd´ıly v casechˇ mezi jednotlivymi´ staty.´ V ruzn˚ ych´ cˇastech´ svetaˇ se pro stejne´ zkratky pouzˇ´ıvaj´ı upln´ eˇ jina´ casovˇ a´ pasma.´ Nav´ıc zaveden´ı letn´ıho casuˇ je prˇ´ıtomno pouze v nekterˇ ych´ statech´ a neexistuje jednotny´ algoritmus pro vsechnyˇ staty.´ Urcitˇ tak spolehliveˇ kolik hodin je na urcenˇ em´ m´ısteˇ ve svetˇ eˇ nen´ı vubec˚ trivialn´ ´ı. Standardn´ı knihovna jazyka C neposkytuje takove´ volan´ ´ı. Protozeˇ jmena´ casovˇ ych´ pasem´ nejsou standardizovana´ zˇadnou´ mezinarodn´ ´ı instituc´ı, jednoznacnˇ eˇ urcitˇ posun casuˇ od uni- verzaln´ ´ıho ani dost dobreˇ nejde. Bohuzelˇ priˇ zkouman´ ´ı moznostˇ ´ı soucasnˇ ych´ klientu˚ jsem zjistil, zeˇ podpora prav´ eˇ pro zjistovˇ an´ ´ı casuˇ klienta nen´ı prˇ´ılisˇ sirokˇ a.´ V nekterˇ ych´ prˇ´ıpadech sice funguje zjistˇ enˇ ´ı univerzaln´ ´ıho casu,ˇ ale pro fungovan´ ´ı tohoto robota je zasadn´ ´ı urcenˇ ´ı beˇznˇ eho´ casuˇ na straneˇ uzivatele.ˇ Moznˇ a´ proto mnoho podobnych´ robotu˚ na internetu nen´ı, protozeˇ je potrebaˇ zlepsitˇ podporu na straneˇ klientu.˚ Jediny´ Tkabber je schopen sdelitˇ svuj˚ casˇ i se zaznamem´ casovˇ eho´ pasma´ tak, aby bylo moznˇ e´ automaticky casovˇ e´ pasmo´ zjistit. Castoˇ je tak nutne´ se spolehnout na rucnˇ ´ı urcenˇ ´ı casovˇ eho´ pasma,´ a tedy absenci automatickeho´ posunut´ı na letn´ı casˇ a zpet.ˇ Zaj´ımavost´ı je klient Gajim. Jako jediny´ uzˇ podporuje novejˇ sˇ´ı rozsˇ´ırenˇ ´ı XEP-202 s cˇ´ıselnym´ vyjad´ renˇ ´ım posunut´ı hodin. Maly´ problem´ spocˇ´ıva´ v orientaci casovˇ eho´ pasma.´ V jazyce python, ve kterem´ je klient napsan,´ vrac´ı volan´ ´ı knihovny posunut´ı, jake´ je trebaˇ priˇ cˇ´ıst k lokaln´ ´ımu casu,ˇ abychom z´ıskali casˇ univerzaln´ ´ı. Tento udaj´ je nespravn´ eˇ vracen´ jako odchylka casovˇ e´ zony.´ Klient tak sice jediny´ protokol implementuje, ale je nutne´ s t´ımto udajem´ zachazet´ v rozporu s dokumentac´ı k dosazenˇ ´ı ocekˇ avan´ eho´ vysledku.´ Na tuto chybu jsem autory upozornil a pravdepodobnˇ eˇ bude brzy odstranena.ˇ

37 Literatura

[1] DJ Adams. Xep-0009: Jabber-rpc. [online]. Last changes: 2006-02-09 [cit. 2007-01-18]. Dostupne´ z WWW http://www.xmpp.org/extensions/xep-0009.html.

[2] D. Reed J. Oirakiren. Internet realay chat protocol. [online]. Last modified: 24 May 1993. [cit. 2007-01-18]. Dostupne´ z WWW ftp://ftp.rfc-editor.org/in-notes/rfc1459.txt.

[3] Peter Saint-Andre. Xep-0016: Privacy lists. [online]. Last changes: 2006-11-27 [cit. 2007-01-18]. Dostupne´ z WWW http://www.xmpp.org/extensions/xep-0016.html.

[4] Peter Saint-Andre. Xmpp core. [online]. Last modified: 30 Sep 2004. [cit. 2007-01-18]. Dostupne´ z WWW http://www.ietf.org/rfc/rfc3920.txt.

[5] Peter Saint-Andre. Xmpp im. [online]. Last modified: 01 Oct 2004. [cit. 2007-01-18]. Dostupne´ z WWW http://www.ietf.org/rfc/rfc3921.txt.

[6] Webova´ stranka.´ Gajim. [online]. [cit. 2007-01-15]. Dostupne´ z WWW http://www.gajim.org/.

[7] Webova´ stranka.´ Psi. [online]. [cit. 2007-01-15]. Dostupne´ z WWW http://www.psi-im.org/.

[8] Webova´ stranka.´ Time zones. [online]. [cit. 2007-01-17]. Dostupne´ z WWW http://www.timegenie.com/timezones.php.

[9] Webova´ stranka.´ Xmpp extensions. [online]. [cit. 2007-01-15]. Dostupne´ z WWW http://www.xmpp.org/extensions/.

[10] Webova´ stranka.´ Zadevedn´ı letn´ıho casu.ˇ [online]. [cit. 2007-01-14]. Dostupne´ z WWW http://astrolot.cz/mimo/letnicas.html.

[11] WWW stranky.´ Xml. [online]. Last modified 2006/09/11. [cit. 2007-01-20]. Dostupne´ z WWW http://www.w3.org/XML/.

[12] Dave Winer. Xml rpc. [online]. Posledn´ı zmeny:ˇ 30. 6. 2003 [cit. 2007-01-18]. Dostupne´ z WWW http://www.xmlrpc.com/spec.

38