Implementace protokolu XMPP v JavaScriptu

Wielkość: px
Rozpocząć pokaz od strony:

Download "Implementace protokolu XMPP v JavaScriptu"

Transkrypt

1 České vysoké učení technické v Praze Fakulta elektrotechnická ČVUT FEL katedra počítačů Diplomová práce Implementace protokolu XMPP v JavaScriptu Bc. Jan Brůček Vedoucí práce: Ing. Tomáš Novotný Studijní program: Elektrotechnika a informatika, strukturovaný, Navazující magisterský Obor: Výpočetní technika leden 2011

2 ii

3 Poděkování V první řadě bych rád poděkoval Ing. Tomáši Novotnému za vedení této práce a za čas, který mi věnoval při konzultacích. Dále bych chtěl poděkovat Anně Mírové a své rodině za to, že mi byli oporou nejen při tvorbě této práce, ale i během celého studia. iii

4 iv

5 Prohlášení Prohlašuji, že jsem práci vypracoval samostatně a použil jsem pouze podklady uvedené v přiloženém seznamu. Nemám závažný důvod proti užití tohoto školního díla ve smyslu 60 Zákona č. 121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů (autorský zákon). V Praze dne v

6 vi

7 Abstract This work presents result of analysis and development of XMPP library under Mozilla Application Framework and its implementation as ExtBrain Communicator extension for Mozilla Thunderbird. Abstrakt Práce prezentuje výsledky analýzy a vývoje XMPP knihovny určené pro Mozilla Application Framework. Dále popisuje realizaci rozšíření poštovního klienta Mozilla Thunderbird nazvané ExtBrain Communicator, které využívá tuto knihovnu. vii

8 viii

9 Obsah Seznam obrázků xiv Seznam tabulek xv 1 Úvod 1 2 Specifikace cílů práce Vymezení cílů diplomové práce Požadavky na implementovaný systém Struktura práce ve vztahu k vytyčeným cílům Existující řešení v Mozilla Application Frameworku Sameplace Instantbird Spicebird Ostatní podobná řešení GTalk Facebook Analýza a návrh řešení XMPP Úvod Standardizace a XEPy Protokol IM komunikace a online stavy Message stanza Presence stanza IQ stanza Vyjednání spojení a jeho bezpečnost ix

10 Průběh SASL PLAIN autentifikace DIGEST-MD5 autentifikace Mozilla Application Framework JavaScript Komponenty frameworku Vytváření rozšíření Mozilla aplikace Chrome URL Chrome manifest a struktura add-onu ExtBrain Communicator XMPP knihovna Řešení více souběžných XMPP spojení Kontakty z adresářů a z rosteru Uživatelské rozhraní Vývojové prostředí a použité nástroje Realizace Knihovna XMPP Socket Analýza XML Parser Fragmentace Udržování spojení Zpracování přijatého DOM Napojení dalších komponent do XMPP kanálu DIGEST-MD Uživatelské rozhraní Seznam kontaktů x

11 Slučování kontaktů z adresáře a z rosteru Manipulace s kontakty Informace o kontaktu Konverzace Obsluha událostí Historie konverzací Okno nastavení Testování Testovací prostředí XMPP knihovna Uživatelské rozhraní Závěr 43 Literatura 45 A Diagramy a obrázky 47 B Seznam použitých zkratek 50 C Instalační příručka 51 C.1 Požadavky k instalaci C.2 Instalace ExtBrain Communicatoru D Uživatelská příručka 53 D.1 Nastavení účtů D.2 Nastavení zobrazovaných adresářů D.3 Připojení účtů D.4 Započetí konverzace D.5 Úprava kontaktu D.6 Sloučení kontaktu z rosteru s kontaktem z adresáře xi

12 D.7 Zobrazení historie konverzace E Obsah přiloženého CD 59 xii

13 Seznam obrázků 3.1 Příklad komunikace pomocí IQ stanz Mozilla Application Framework XPConnect, zdroj: [3] Instalace XPI balíku do Mozilla aplikace Návrh třídy XMPPSocket Návrh třídy XMPP Návrh třídy Jabber Návrh třídy Connections Návrh třídy Contact Uživatelské rozhraní hlavního okna Uživatelské rozhraní záložky s konverzací Uživatelské rozhraní nastavení Seznam kontaktů Box s informacemi o kontaktu Záložka s konverzací Modální okno nastavení A.1 Přechody mezi stavy připojování XMPP klienta, zdroj: [2] A.2 Návrh tříd pro XMPP knihovnu A.3 Návrh tříd pro práci s kontakty C.1 Okno Add-ons C.2 Potvrzení instalace C.3 Potvrzení instalace D.1 Okno Nastavení D.2 Seznam kontaktů D.3 Informace o stavu účtů D.4 Nastavení stavu jednotlivých účtů xiii

14 D.5 Kontextové menu kontaktu D.6 Záložka s konverzací D.7 Okno pro úpravu přiřazených JID xiv

15 Seznam tabulek 3.1 Struktura instalovatelného balíku rozšíření SQLite tabulka historie konverzace SQLite tabulka nastavení účtů xv

16 xvi

17 KAPITOLA 1. ÚVOD 1 1 Úvod V současné době zažíváme roustoucí trend v použití aplikací založených na výměně rychlých zpráv, tzv. instant messagingu. Známy jsou zejména díky zprostředkování komunikace mezi lidmi, avšak používané technologie nalézají uplatnění i v předávání zpráv mezi počítači a jinými elektronickými zařízeními. Hlavní výhodou těchto aplikací je tzv. real-time komunikace, tedy s minimálním zpožděním od odeslání do doručení zprávy. Historie internetového instant messagingu 1 se datuje již od konce 80. let 20. století, kdy jako jedna z technologií umožňujících rychlou výměnu zpráv mezi uživateli počítačů, vznikla sít IRC. Masovému rozšíření IM mezi běžné uživatele ale dopomohl až systém ICQ společnosti Mirabilis, který byl spuštěn v roce S podobnými produkty se na trhu objevily také společnosti America Online (AOL Messenger), Microsoft (MSN Messenger), IBM (Lotus Sametime) a další. Společnou vlastnosti všech zmíněných IM systémů je to, že používají proprietární protokol a klientské aplikace. Příliš limitující licenční podmínky a nutnost běhu separátní aplikace pro každý z IM protokolů proto v roce 1998 vedly Jeremie Millera k započetí prací na novém open-source protokolu, který pojmenoval Jabber [11]. Komunita vývojářů, která se později okolo projektu vytvořila, pak v květnu roku 2000 vydala první oficiální verzi nového open-source serveru jménem jabberd 1.0. Projekt měl u technické veřejnosti velký úspěch a vývojáři se rozhodli formalizovat používaný protokol u Internet Engineering Task Force (IETF), organizace, která vyvíjí a standardizuje internetové technologie. Pracovní skupina, která dostala tento protokol na starosti, ho pojmenovala Extensible Messaging and Presence Protocol, tedy zkráceně XMPP. Dnes je již XMPP 2 velmi vyspělým protokolem, celosvětově uznávaným standardem a používanou technologií nejen pro zasílání zpráv mezi lidmi pomocí počítačů, telefonů nebo sociálních sítí. Své využití nachází i v čistě strojové komunikaci pro cloud computing, vzdálený monitoring, ovládání zařízení připojených do sítě a podobně. Pro XMPP existuje velké množství klientů pro různé platformy, některé z nich dokonce podporují i více jiných IM technologií. Cílem této práce bude vytvořit klienta v prostředí Mozilla Application Frameworku, konkrétně pro aplikaci Mozilla Thunderbird. Mozilla Thunderbird je poštovním klientem neziskové organizace Mozilla Foundation, která zastřešuje vývoj několika internetových aplikací, jako je například webový prohlížeč Mozilla Firefox nebo právě zmiňovaný Mozilla Thunderbird. Mezi hlavní výhody aplikací Mozilla Foundation patří to, že jsou open-source a licencované třemi licencemi MPL/GPL/LGPL. 1 V textu bude použito zkrácené označení IM 2často také označováno zkráceně jako Jabber

18 2 KAPITOLA 2. SPECIFIKACE CÍLŮ PRÁCE 2 Specifikace cílů práce 2.1 Vymezení cílů diplomové práce Hlavními cíli této práce jsou implementace XMPP protokolu v jazyku Javascript v prostředí Mozilla Application Frameworku a jeho následná integrace do existujícího rozšíření ExtBrain Communicatoru. Základním bodem bude realizace XMPP knihovny v Javascriptu, funkční v aplikaci Mozilla Thunderbird (resp. ve všech aplikacích, používajících Mozilla Application Framework). Tato knihovna bude zajišt ovat sestavení spojení s XMPP serverem včetně autentizací uživatele a bude poskytovat rozhraní pro přístup k takto vytvořenému kanálu. Dalším bodem bude vývoj rozšíření pro Mozilla Thunderbird, nazvaného ExtBrain Communicator. Práce bude částečně vycházet z již realizovaného rozšíření, které pod vedením Ing. Novotného vytvořil jako bakalářskou práci David Jirovec [7]. Toto rozšíření bude využívat XMPP knihovnu realizovanou v prvním bodě a poskytovat rozhraní pro IM komunikaci pomocí více XMPP účtů přímo v poštovním klientu Thunderbird. Později je také plánováno zařazení výsledku této práce do rodiny ExtBrain rozšíření, která si kladou za cíl co nejvíce zjednodušit kažodenní práci vývojářů softwaru při extrakci a manipulaci s informacemi [9]. 2.2 Požadavky na implementovaný systém Vytvořená aplikace bude používána jako rozšíření v poštovním klientu Mozilla Thunderbird. Bude poskytovat možnost připojení se do XMPP sítě, bude možné ji však také používat bez nastavených účtů jako panel, který slučuje kontakty z vybraných adresářů klienta do jediného seznamu, a který bude jednoduše filtrovatelný. Požadované vlastnosti lze shrnout do seznamu: XMPP knihovna bude podporovat zabezpečení spojení pomocí TLS, SSL. XMPP knihovna bude poskytovat rozhraní pro pozdější napojení dalších aplikací na kanál XMPP, tedy například integraci dalších rozšíření protokolu. Bude implementována správa více XMPP účtů najednou.

19 KAPITOLA 2. SPECIFIKACE CÍLŮ PRÁCE 3 Bude implementován komunikační klient v prostředí Mozilla Thunderbird, který bude využívat vyvinutou XMPP knihovnu, a který bude umožňovat sloučení kontaktů z adresářů poštovního klienta a kontaktů z jabber účtů. 2.3 Struktura práce ve vztahu k vytyčeným cílům Tato diplomová práce je členěna do šesti kapitol vážících se k postupu při řešení problému. První kapitolou je úvod, kde se čtenář seznámí se základy technologií, které budou v práci použity. Další kapitolu tvoří popis a specifikace cílů práce. V ní se čtenář seznámí s řešeným problémem a požadavky na výsledné řešení. Navazuje kapitola obsahující analýzu a samotný návrh řešení. Zde se čtenář detailněji seznámí s technologiemi a s výsledným vybraným postupem pro implementaci. Další kapitolou je kapitola popisující samotnou implementaci projektu a zaměřující se zejména na nestandardní části aplikace. Předposlední kapitola obsahuje popis testování výsledného produktu této práce. V závěru práce je zhodnoceno dosažení vytyčených cílů práce a diskuse možného pokračování v implementaci vyvinutého projektu.

20 4 KAPITOLA 2. SPECIFIKACE CÍLŮ PRÁCE 2.4 Existující řešení v Mozilla Application Frameworku Sameplace Sameplace je v současnosti jediný doplněk do Mozilla Thunderbirdu, který přidává možnost komunikace přes XMPP. Funguje však pouze pro verze Thunderbird 2 a zatím není známo, zda bude někdy k dispozici verze podporující Thunderbird 3. Poslední změna v kódu, který je licencován jako GPLv3, byla provedena v lednu Sameplace pro svou funkčnost vyžaduje knihovnu xmpp4moz, která byla využita i v původním prototypu ExtBrain Communicatoru. Ukázala se však jako nevhodná, mimo jiné pro svou nefunkčnost v zacílené verzi Thunderbirdu Instantbird Instantbird je samostatná aplikace postavená na Mozilla Application Frameworku. V současnosti je vydána ve verzi 0.2 a je založena na knihovně libpurple, která podporuje velké množství komunkačních protokolů. Kromě XMPP tak například ICQ, IRC, Lotus Sametime a další. Aplikace je velmi příjemně použitelná. Tím, že je samostatná, ale není přímo porovnatelná s aplikací, která bude vyvinuta v rámci této práce Spicebird Spicebird je také samostatná aplikace postavená na Mozilla Application Frameworku a vycházející z Mozilla Thunderbirdu. Je zaměřena na spolupráci uživatelů, kteří ji používají, tvůrci ji označují jako collaboration application. Zjednodušuje práci tím, že poskytuje přístup k webovým aplikacím při zachování pohodlí desktopové aplikace. Interně používá xmpp4moz z projektu Sameplace. Podobně jako Instantbird ji ale není možné přímo srovnat s předmětem vývoje v této práci. 2.5 Ostatní podobná řešení XMPP jako standard je použit i jako základ komunikačních modulů některých známych webových aplikací. Za všechny jsou zde uvedeny dva nejpoužívanější: Google Talk společnosti Google a Facebook Chat společnosti Facebook.

21 KAPITOLA 2. SPECIFIKACE CÍLŮ PRÁCE GTalk GoogleTalk 1 jeslužbanabízenázdarmavšemuživatelům ovéschránkyspolečnostigoogle (GMail). Služba byla spuštěna v roce 2005 a kromě podpory XMPP používá i knihovnu libjingle pro přenos zvuku a videa. Protože Google Talk používá standardní XMPP, je možné se k serveru připojit libovolným XMPP klientem. Podpora Google Talk bude zabudována i v aplikaci, která bude vyvinuta v rámci této práce Facebook S celosvětovým rozšířením sociální sítě Facebook přišla i potřeba IM komunikace. Facebook, podobně jako Google, sáhl po otevřeném standardizovaném řešení v podobě XMPP. Na Facebook chat je také možné se připojit libovolným klientem, server ale nepodporuje některá rozšíření XMPP protokolu, která jsou běžná u standardních XMPP serverů nebo například u Google Talk. Pomocí rozšíření, které bude výsledkem této práce, se bude možné připojit i na Facebook Chat. 1 bývá také zkracován jako GTalk

22 6 KAPITOLA 3. ANALÝZA A NÁVRH ŘEŠENÍ 3 Analýza a návrh řešení 3.1 XMPP Úvod Jak již bylo uvedeno výše, XMPP je protokol, který je založen čistě na standardizovaných a otevřených technologiích. Základním stavebním kamenem tohoto protokolu je XML 1. Veškerá komunikace mezi entitami propojenými protokolem XMPP probíhá právě pomocí zpráv odpovídajících XML syntaxi. Entity, propojené sítí XMPP se dělí na klient server Na základě tohoto dělení pak v síti probíhají dva typy komunikace: klient server (označované také c2s, z anglického client to server ) server server (označované také s2s, z anglického server to server ) Sít založená na XMPP je decentralizovaná. Každý klient je registrován na jediném serveru a má přiřazen unikátní identifikátor nazývaný JID Jabber ID. JID je strukturován podobně jako ová adresa, tedy ve formátu username@domain.tld. Díky tomuto schématu není nutné zavádět centrální server, který by obsahoval seznam všech registrovaných uživatelů. Protože je možné se přihlásit k XMPP serveru z více míst (respektive více zařízení) najednou, může být k JID ještě přidán identifikátor tzv. resource, který jednoznačně určuje jednotlivé klienty, připojené k serveru pomocí daného JID. Formát takového identifikátoru je pak username@domain.tld/resource. V rámci této analýzy bude zohledňován zejména pohled ze strany klientské aplikace Standardizace a XEPy Jednotlivé standardy jsou definovány IETF v RFC dokumentech. Nejdůležitější pro IM komunikaci jsou: 1 extensible Markup Language

23 KAPITOLA 3. ANALÝZA A NÁVRH ŘEŠENÍ 7 RFC 3290 XMPP: Core [5] RFC 3291 XMPP: Instant Messaging and Presence [6] XMPP je navrženo tak, aby bylo velmi dobře rozšiřitelné, a proto také vzniklo mnoho rozšíření protokolu, která definují chování entit v síti pro různá použití. Tato rozšíření jsou standardizována v dokumentech zvaných XEP (XMPP Extension Protocol). Tyto dokumenty jsou souhrnně uloženy na stránkách xmpp.org, spravovaných XSF (XMPP Software Foundation). Tam je mohou prohlížet a komentovat ostatní vývojáři. Dokumenty XEP se nacházejí v různých stavech; dokončená a schválená rozšíření pak získávají stav final, který zaručuje, že je dokumentace kompletní a standardizovaná. XEP dokumenty jsou číslovány ve formátu XEP-0000 a existuje pět typů: standards track, informational, historical, humorous a procedural. Nejdůležitějším pro implementaci software je typ standards track, který definuje bud protokol na úrovni sít ové komunikace (tedy popisuje samotné rozšíření základního XMPP) nebo specifikuje tzv. conformace requirements (to jsou podmínky, které musí server/klient splnit, aby mohl prohlašovat, že je vyhovující podle daných požadavků) Protokol XMPP je původně založeno na TCP/IP sítích. Vzhledem k jeho verzatilitě ale není problém jej použít i nad jinými technologiemi resp. na jiné sít ové vrstvě, jmenovitě například nad HTTP za využití polling mechanismů 2. Také existuje návrh standardu pro použití XMPP nad technologií WebSockets, která bude umožňovat více oboustranných, plně duplexních kanálů pro komunikaci přes jediný TCP socket. Výchozí port, používaný v TCP/IP pro připojení klient-server je 5222, při spojení typu server-server se používá Strukturně je komunikace pomocí XMPP jeden dlouhý XML dokument. To svým způsobem ztěžuje implementaci, protože je nutné za běhu načítat tzv. nekonečné XML, zároveň je ale možné komunikaci pomocí XML jednoduše validovat. Povinné kódování je UTF-8. Na začátku každé komunikace je nutné otevřít XML dokument a založit kořenový element. Typicky vypadají první data, poslaná klientem takto: <?xml version="1.0" encoding="utf-8"?> <stream:stream xmlns="jabber:client" 2 polling nad HTTP se věnuje XEP-0206 XMPP over BOSH

24 8 KAPITOLA 3. ANALÝZA A NÁVRH ŘEŠENÍ xmlns:stream=" version="1.0" to="server.tld"> Po úspěšné inicializaci stream elementu, posílají jednotlivé entity skrze tento vytvořený kanál neohraničený počet zpráv, které se v terminologii XMPP nazývají souhrnně stanza. V RFC jsou definovány tři typy zpráv, které je možné poslat v XMPP kanálu: <message /> <presence /> <iq /> Standardní komunikace ve vytvořeném kanále vypadá tedy ve zjednodušení následovně [5]: <stream> <presence> <show/> </presence> <message to= foo > <body/> </message> <iq to= bar > <query/> </iq> </stream> Je důležité zmínit, že zprávy mezi klienty v síti XMPP vždy doručuje server a při komunikaci nevzniká žádný kanál, který by přímo propojoval dvě klientské entity. To je dobré zejména z toho důvodu, že server umí lépe směrovat dané zprávy a zajišt uje také předávání na jiné servery, případně gatewaye pro propojení s jinými komunikačními systémy.

25 KAPITOLA 3. ANALÝZA A NÁVRH ŘEŠENÍ IM komunikace a online stavy Jak bylo zmíněno výše, během bezchybné komunikace můžou být využity pouze tři definované elementy, nazývané stanzy. Veškerá další rozšíření protokolu jsou pak zapouzdřena do těchto základních stanz Message stanza <message /> stanza je základním stavebním kamenem protokolu. Jde o zprávu, která se předá serveru a obvykle není vyžadováno potvrzení. Tento komunikační typ je určen k rychlému předávání zpráv. Je definováno pět typů zpráv podle důvodu jejich vzniku: normal zpráva podobná u, kdy se neočekává okamžitá odpověd chat zpráva využívaná pro IM, kdy se očekává rychlá výměna zpráv mezi dvěma entitami groupchat zpráva, která je využita pro komunikaci mezi více uživateli najednou, typicky velmi podobné místnosti v IRC headline typ zprávy využitý k informování druhé strany, kdy odpověd není očekávána vůbec error zpráva popisující chybu vzniklou v důsledku přijetí předchozí zprávy Typická zpráva, která prochází sítí v případě uvažované IM komunikace, může vypadat například takto: <message from= juliet@example.com to= romeo@example.net type= chat xml:lang= en > <body>art thou not Romeo, and a Montague?</body> <delay xmlns="urn:xmpp:delay" stamp=" t18:42:03z"/> </message> Většina rozšíření protokolu XMPP pracuje právě s tímto typem stanzy a do těla elementu <message /> vkládá další elementy, které se ve většině případů identifikují svou namespace. Jako příklad lze ve výše uvedené ukázkové zprávě najít element <delay />, který byl vložen podle XEP-0203 Delayed Delivery, a který určuje zpoždění, resp. reálný čas odeslání zprávy.

26 10 KAPITOLA 3. ANALÝZA A NÁVRH ŘEŠENÍ Presence stanza Jednou ze základních vlastností IM sítí je určování, zda je druhá entita přístupná k sít ové komunikaci či nikoliv. K tomuto slouží v XMPP stanza <presence />, pomocí které entita informuje server o svém stavu. Protože taková informace není vždy považována jako veřejná, existuje v XMPP autorizační schéma,kterýmkaždýdanýklienturčuje,kdomůžejehostavvsítividětakdonikoliv.vxmpp terminologii je toto schéma pojmenováno jako presence subscription, v češtině se používá termín autorizace. V tomto schématu jsou definovány čtyři stavy none, from, to, both. Popisují stavy, kdy není mezi dvěma entitami žádná autorizace, existuje autorizace jednosměrná nebo jsou entity vzájemně autorizované. Autorizace je uložena u seznamu kontaktů, který se nazývá roster. Jde vlastně o seznam všech kontaktů spojený s jejich Jabber ID, většinou také zobrazující presence a subscription. Tento seznam je uložen na serveru a každý klient má svůj vlastní, se kterým může operovat. V presence stanze může být uložen i tzv. status klienta, což je krátká textová informace, rozšiřující jeden z definovaných presence stavů. Tyto stavy jsou definovány v RFC a odpovídají již historicky zavedeným stavům pro IM komunikaci, které jsou stejné i ve většině jiných IM systémů. on Entita je on-line away Entita je dočasně pryč chat Entita je k dispozici pro komunikaci xa Entita je pryč na delší dobu dnd Entita nechce být rušena off Entita je off-line Presence stanza může vypadat například takto: <presence xml:lang= en > <show>dnd</show> <status>wooing Juliet</status> </presence>

27 KAPITOLA 3. ANALÝZA A NÁVRH ŘEŠENÍ IQ stanza <iq /> (z anglického Info/Query) stanza umožňuje využít strukturované komunikace typu požadavek odpověd. Užití je podobné jako například v HTTP protokolu použití GET, POST a PUT. Existují 4 typy IQ stanz: get odesílatel požaduje nějaké informace či provedení nějaké akce. Tento typ zprávy je podobný HTTP GET. set odesílatel poskytuje informace, případně žádá o provedení nějaké akce. Tento typ zprávy je podobný HTTP POST nebo PUT. result odesílatel odpovídá na get zprávu odesláním požadovaných informací nebo potvrzuje provedení akce žádané pomocí set. error odesílatel upozorňuje protistranu o chybě při zpracování předchozího požadavku. To může být způsobeno chybou oprávnění, chybou systému, atd. Obrázek 3.1: Příklad komunikace pomocí IQ stanz Vyjednání spojení a jeho bezpečnost Existuje několik možností jak zabezpečit XMPP stream. RFC definuje, že obě entity musí použít SASL autentifikaci a měly by použít i TLS šifrování kanálu. Mimo TLS je možné ještě použít SSL anebo posílat komunikaci nezašifrovanou. Poslední z možností je nejméně náročná

28 12 KAPITOLA 3. ANALÝZA A NÁVRH ŘEŠENÍ na použitý hardware, je ale zároveň nejméně bezpečná, protože je možné zasílané zprávy na síti odposlechnout. K zajištění autenticity obou stran komunikace se používá profil SASL, specifická revize pro XMPP. SASL je zkratkou pro Simple Authentication and Security Layer a definuje způsob, jakým účastníci komunikace sestavují spojení tak, aby bylo důvěryhodné Průběh SASL Po úspěšném otevření streamu musí server odeslat seznam povolených mechanismů autentifikace. Společně s tímto seznamem posílá i informaci zda podporuje případně vyžaduje použití TLS během následujícího spojení. Pokud je TLS požadováno, zahájí se komunikace na socketu pomocí TLS. Po získání seznamu podporovaných mechanismů, případně po přepnutí socketu na TLS, klient vybírá, který autentifikační mechanismus vybere. V současné době jsou nejpoužívanějšími (rozhodně ale ne jedinými) mechanismy: DIGEST-MD5 PLAIN Při neúspěšné autentifikaci server obvykle ukončuje spojení. Po úspěšné autentifikaci druhé strany se otevírá nový stream, který již může být považován za ověřený. Dalším krokem k úspěšnému sestavení spojení je tzv. bind, kdy klient žádá server o přiřazení Jabber ID k danému resource. Pokud proběhne tento krok v pořádku, může klient požádat o vytvoření Jabber session (není vždy nutné). Poté je spojení kompletní a může se přistoupit k posílání XMPP stanz. V případě, že se některá ze stran komunikace pokusí o zaslání dat ještě před sestavením ověřené komunikace, kanál musí být serverem uzavřen a je oznámena chyba <not-authorized/>. Celý proces sestavování komunikace je dobře popsaný grafem na obrázku A.1 v příloze PLAIN autentifikace PLAIN autentifikace je nejjednodušší způsob, jak provést ověření uživatele. Klient zasílá JID, uživatelské jméno a heslo v nezašifrované podobě, pouze zakódované jako base64 ve formátu username@server<0>username<0>secret.

29 KAPITOLA 3. ANALÝZA A NÁVRH ŘEŠENÍ 13 Zaslaná data můžou vypadat jako 3 : <auth xmlns="urn:ietf:params:xml:ns:xmpp-sasl" mechanism="plain"> </auth> ag2udmficnvjzwt3az11hawruy29ra2hv3nphyfj3d2vrag9mznf3btk4mq== Server odpovídá na daný token elementy <success /> nebo <failure /> a v případě chyby uzavírá spojení DIGEST-MD5 autentifikace DIGEST-MD5 je založena na ověřování stylem challenge response. To znamená, že klientská strana nikdy neposílá ověřovací data bez vyžádání serverem. To jednoznačně přispívá k bezpečnosti celého způsobu ověřování. Pokud tedy zvolí klient jako mechanismus DIGEST-MD5, musí čekat, než si server vyžádá autorizační údaje zasláním <challenge /> zprávy, tedy výzvy k ověření. V této výzvě jsou pomocí base64 zakódována data, která klient musí přečíst a na jejich základě vytvořit odpověd, která potvrdí, že tento klient zná heslo k danému uživatelskému jménu. <auth xmlns= urn:ietf:params:xml:ns:xmpp-sasl mechanism= DIGEST-MD5 /> Server odpoví výzvou, která obsahuje řetězec s páry atribut-hodnota oddělenými čárkou, například: <challenge xmlns= urn:ietf:params:xml:ns:xmpp-sasl > cmvhbg09imnoyxquzmfjzwjvb2suy29tiixub25jzt0ioezfrujdmzk4rd c1rtffqumwotrenkneqzkzrde3mzgilhfvcd0iyxv0acisy2hhcnnldd11 dgytocxhbgdvcml0ag09bwq1lxnlc3m= </challenge> dekódováno jako: realm="chat.facebook.com",nonce="8feebc398d75e1eac094d6cdc93d1738", qop="auth",charset=utf-8,algorithm=md5-sess 3 při použití SASL není dovoleno posílat tzv. whitespace znaky; zde jsou použity pouze pro zpřehlednění ukázky

30 14 KAPITOLA 3. ANALÝZA A NÁVRH ŘEŠENÍ Na základě získaných údajů může klient sestavit odpověd. Jak napovídá název autentifikace, využívá hashovací algoritmus MD5. Klient přeposílá většinu hodnot původní výzvy, přidává ale zejména atributy username a response, kterými dokazuje znalost hesla. Výhodou je, že heslo z response nelze zpětně získat. Response se sestavuje takto: 1. Sestaví se řetězec username:realm:password, který nazveme A 2. Vypočítá se 16-oktetový MD5 hash z řetězce A, který označíme B 3. Vytvoří se řetězec B:nonce:cnonce:authzid, který nazveme A1 4. Vytvoří se řetězec AUTHENTICATE:digest-uri, který nazveme A2 5. A1 a A2 se zahashují pomocí MD5 jako hexadecimální řetězce a výsledky nazveme H1 a H2 6. Řetězec H1:nonce:nc:cnonce:qop:H2 se zahashuje pomocí MD5 a jeho 32B hexadecimální výsledek je hodnotou response Výsledný řetězec, který klient vrací serveru, může vypadat například takto: username="user1",realm="chat.facebook.com",nonce="8feebc398d75e1eac094", cnonce="8feebc398d75e1eac094",nc= ,qop=auth,digest-uri="xmpp/localhost", response=3b395a5824d41a1bd0228a709e8fd78e,charset=utf-8 A konečný element poslaný do XMPP kanálu tedy bude: <response xmlns="urn:ietf:params:xml:ns:xmpp-sasl"> dxnlcm5hbwu9invzzxixiixyzwfsbt0iy2hhdc5mywnlym9vay5jb20ilg 5vbmNlPSI4RkVFQkMzOThENzVFMUVBQzA5NCIsY25vbmNlPSI4RkVFQkMz OThENzVFMUVBQzA5NCIsbmM9MDAwMDAwMDEscW9wPWF1dGgsZGlnZXN0LX VyaT0ieG1wcC9sb2NhbGhvc3QiLHJlc3BvbnNlPTNiMzk1YTU4MjRkNDFh MWJkMDIyOGE3MDllOGZkNzhlLGNoYXJzZXQ9dXRmLTg= </response> Před samotným dokončením autorizačního mechanismu posílá server ještě jednu <challenge />, na kterou klient odpovídá prázdným <response /> elementem. Poté je úspěch potvrzen přijetím <success /> elementu. V případě chyby je vrácen element <failure /> a spojení je ukončeno 4. 4 V tomto popisu nejsou uvedeny namespace jednotlivých elementů, které musí byt v reálné komunikaci přítomny

31 KAPITOLA 3. ANALÝZA A NÁVRH ŘEŠENÍ Mozilla Application Framework Mozilla Application Framework(původně také označovaný jako XPFE, tj. Cross Platform Front End) je rodina multiplatformních frameworků (resp. komponent), ze kterých se skládají Mozilla aplikace JavaScript Většina kódu Mozilla aplikací je napsána v JavaScriptu. JavaScript je dynamicky typovaný, objektově orientovaný skriptovací jazyk, jeho přístup k objektům je ale od klasických jazyků typu Java odlišný používá totiž prototypování. V jazycích založených na prototypech existují dva způsoby, jak vytvořit objekt (narozdíl od jediné možnosti u klasických class-based jazyků, kde je vždy použit konstruktor). Objekt může být vytvořen takzvaně ex nihilo (latinsky z ničeho) nebo pomocí klonování existujícího objektu (resp. jeho prototypu). Klonováním pak vzniká objekt, který je stejný jako zdrojový. I když takovýto model nepoužívá přímo dědičnost tak, jak je použita v klasických class-based jazycích, je možné tento přístup dobře simulovat (i když ne vždy je to vhodné). JavaScript je velmi vyspělý jazyk a mezi další zajímavé vlastnosti patří anonymní funkce, vnořené funkce, uzávěry, funkce s proměnným počtem argumentů a další Komponenty frameworku Mezi nejdůležitější komponenty Mozilla Application Frameworku patří bezesporu Gecko neboli layout engine, podporující HTML, CSS, JavaScript, XUL a další. Tento vykreslovací engine je základem většiny Mozilla aplikací, z nichž jistě nejznámější je Mozilla Firefox. Komponentou, použitou pro uživatelské rozhraní v Mozilla Application Frameworku, je XUL. XUL je zkratka pro XML User Interface Language a jde o jazyk založený na XML popisující uživatelské rozhraní. Zahrnuje podporu pro CSS a JavaScript a je závislé na vykreslovacím engine Gecko. Definuje obecně velké množství ovládacích prvků, které se mohou na jiných platformách vykreslovat různě a přitom mít stejnou definici v XUL. S XUL souvisí i jazyk XBL, který umožňuje definovat vlastní ovládací prvky, které budou použity v XUL. Další důležitou částí Mozilla Aplication Frameworku je Necko. Jedná se o knihovnu poskytující API pro podporu sít ových aplikací pracující na různých vrstvách OSI modelu. XPCOM je komponentový model, pomocí něhož Mozilla Application Framework poskytuje

32 16 KAPITOLA 3. ANALÝZA A NÁVRH ŘEŠENÍ multiplatformní správu komponent, abstrakci souborů, předávání objektů a správu paměti [8]. Umožňuje využít téměř všechny vlastnosti ostatních částí frameworku využít ze skriptů jakékoliv Mozilla aplikace. Komponenty XPCOM mohou být mimo C++ implementovány i v JavaScriptu, Javě nebo Pythonu. XPCOM používá dialekt IDL (Interface Definition Language), nazývaný XPIDL. XPCOM samo o sobě nabízí základní komponenty jako správu paměti, základní datové struktury (řetězce, pole a další). Většina komponent ale pochází z jiných částí frameworku, zejména z komponent Gecko a Necko. XPConnect je technologie, která propojuje JavaScript na úrovni interface a XPCOM komponenty v rámci Mozilla aplikace, jak ukazuje obrázek 3.2. Obrázek 3.2: Mozilla Application Framework XPConnect, zdroj: [3] XPInstall je technologie, která umožňuje uživatelům i vývojářům Mozilla aplikace jednoduše instalovat, rozšiřovat či aktualizovat. Balík, ve kterém je software distribuován, je nazýván XPI (Cross Platform Installation archive) a je to ZIP soubor obsahující soubory v definované struktuře (více v kapitole ).

33 KAPITOLA 3. ANALÝZA A NÁVRH ŘEŠENÍ 17 Obrázek 3.3: Instalace XPI balíku do Mozilla aplikace Vytváření rozšíření Mozilla aplikace Tato kapitola práce se bude zabývat tím, jak lze vytvořit add-on (resp. rozšíření) pro Mozilla aplikaci, konkrétně Mozilla Thunderbird. Sada souborů XUL, JavaScript, CSS a jiných se souhrnně nazývá balík (package). Do Mozilla aplikací je možné tyto balíky instalovat pomocí XPInstall a jejich obsah referencovat pomocí Chrome URL. Instalovatelný balík se musí řídit pravidly, která definují, jakou má takové rozšíření mít strukturu, aby bylo do aplikace instalovatelné. Balík může obsahovat mimo rozšíření aplikace i definic změny vzhledu, případně více rozšíření najednou. Dále v této práci budou popsány hlavní vlastnosti balíku obsahujícího pouze jedno rozšíření Mozilla aplikace Chrome URL Výraz chrome má v Mozilla Application Frameworku více významů; v této práci bude ale převládat ten, který popisuje chrome:// URL. Taková URL se využívá v Mozilla aplikacích k definici místa, kde se nachází určitý soubor. Zapisují se podobně jako dobře známé HTTP URL, ale referencují soubory, které jsou registrované v tzv. chrome registry. To umožňuje mít soubory fyzicky umístěné kdekoliv a přitom je referencovat vždy stejným chrome URL. Typická chrome URL vypadá má formát chrome://<package name>/<part>/<file.xul>, kde <package name> je název balíku, <part> je název jeho části (může být content, skin nebo locale) a poslední částí je přímo jméno soubor (case-insensitive).

34 18 KAPITOLA 3. ANALÝZA A NÁVRH ŘEŠENÍ Chrome manifest a struktura add-onu Chrome manifest popisuje daný balík a mapuje fyzické umístění souboru na Chrome URL. Navíc definuje jednotlivým adresářům, resp. souborům, jak s nimi má aplikace zacházet, tedy jestli se jedná o spustitelný obsah, definici vzhledu, lokalizaci a podobně. Také je možné pomocí direktivy overlay slučovat soubory se soubory z jiných balíků. Tato funkčnost je velmi důležitá, protože umožňuje sloučit existující uživatelské rozhraní s nově přidaným. content addon.chrome chrome/content/ skin addon.chrome classic chrome/skin/classic/ overlay chrome://messenger/content/messenger.xul \\ chrome://addon.chrome/content/myownoverlay.xul Instalovatelný balík musí také dodržovat předepsanou strukturu souborů, aby byl funkční. Důležitý je RDF soubor, který definuje mimo jiné jméno, verzi, identifikaci balíku a zacílenou Mozilla aplikaci (resp. aplikace). Typické rozšíření pro Mozilla aplikaci může mít strukturu, která je uvedena v tabulce 3.1. /install.rdf Instalační manifest s popisem balíku /chrome.manifest Chrome manifest /chrome/content/* Hlavní obsah balíku /chrome/skin/* Definice vzhledu UI /defaults/preferences/*.js Výchozí nastavení preferences Tabulka 3.1: Struktura instalovatelného balíku rozšíření

35 KAPITOLA 3. ANALÝZA A NÁVRH ŘEŠENÍ ExtBrain Communicator V této práci bude navržena a implementována knihovna pro komunikaci v XMPP tak, aby byla optimalizována pro Mozilla Application Framework a zejména tak, aby poskytovala dobře použitelné rozhraní pro přístup ke XMPP kanálu, které bude přístupné jiným částem projektu ExtBrain. Další částí bude implementace klienta, který umožní komunikovat přes XMPP a pracovat s adresáři poštovního klienta Thunderbird. Jak již bylo řečeno, rozšíření, které vznikne v rámci této práce, vznikne částečně z již existujícho ExtBrain Communicatoru. Tento nefunguje v nové verzi Mozilla Thunderbid, přesto práce bude vycházet z již zavedených konceptů grafického rozhraní; bude ale přidávat nové vlastnosti, které ve starší verzi Thunderbirdu nebyly k dispozici XMPP knihovna Knihovna bude potřebovat přímý přístup k socketu, jenž bude zprostředkován JavaScriptu XPCOM komponentou frameworku Necko. Obrázek 3.4: Návrh třídy XMPPSocket Protože se XMPPSocket bude zabývat pouze připojením ke XMPP serveru, bude objekt naslouchající příchozím datům na socketu data rovnou převádět na DOM reprezentaci daného XML, které bude předáváno dále.

36 20 KAPITOLA 3. ANALÝZA A NÁVRH ŘEŠENÍ Příchozí XML bude analyzováno komponentou nsidomparser, která vrací příslušnou reprezentaci v DOM. DOM, který bude výstupem z objektu XMPPSocket (obrázek 3.4), bude předáván třídě objektu XMPP(obrázek 3.5). Ten bude zastřešovat veškerou základní komunikaci s XMPP serverem. Bude implementovat: Otevření spojení a jeho zabezpečení Autentifikaci vůči serveru (podpora PLAIN a DIGEST-MD5 metod) Binding JID Otevření jabber session Odesílání dat Přijímání dat a vznik událostí na jejich základě Řádné ukončení spojení Obrázek 3.5: Návrh třídy XMPP Zpracování událostí vzniklých při příjmu dat bude řešit objekt, který si zaregistruje daný listener. V tomto případě to bude objekt Jabber (obrázek 3.6), který bude tvořit most mezi událostmi přijatými z grafického rozhraní a z XMPP kanálu. Diagram tříd je k nahlédnutí na obrázku A.3 v příloze.

37 KAPITOLA 3. ANALÝZA A NÁVRH ŘEŠENÍ 21 Obrázek 3.6: Návrh třídy Jabber Řešení více souběžných XMPP spojení Jelikož mezi požadavky na vyvíjený add-on je možnost spuštění více spojení najedou, bude implementován kontejner, ve kterém budou uložena spojení (resp. objekty Jabber), S těmi bude možné hromadně nebo jednotlivě manipulovat. Každý klient s platným XMPP spojením musí mít unikátní Jabber ID, bude možné jednotlivá spojení podle Jabber ID identifikovat. Bude implementován objekt, který bude informace o JID shromažd ovat. Obrázek 3.7: Návrh třídy Connections

38 22 KAPITOLA 3. ANALÝZA A NÁVRH ŘEŠENÍ Kontakty z adresářů a z rosteru Každý XMPP účet má na serveru definován svůj vlastní roster, tedy seznam všech kontaktů. V běžných klientech se po spojení se serverem tento roster zobrazí jako seznam kontaktů současně s informací o online dostupnosti daného kontaktu. Mozilla Thunderbird má svůj vlastní systém adresářů, ve kterých ukládá kontaktní informace, a protože se jedná o poštovní klient, jde zejména o ové adresy. Adresářů může být v Thunderbirdu více než jeden, vyhledávat lze ale vždy jen v jednom vybraném. Proto bude ExtBrain Communicator rozšíření zobrazovat sloučeně kontakty ze všech v nastavení vybraných adresářů a z rosterů všech připojených účtů a umožňovat v nich efektivně vyhledávat. Bude nutné implementovat třídu Contact, která bude schopna zobrazovat informace ze svého rodičovského adresáře, a zároveň se slučovat s kontakty v rosteru podle Jabber ID. Bude upraven formulář na úpravu (resp. přidání) kontaktu a v něm bude zpřístupněna možnost definovat omezený počet Jabber ID, se kterými se tento kontakt sloučí. Obrázek 3.8: Návrh třídy Contact

39 KAPITOLA 3. ANALÝZA A NÁVRH ŘEŠENÍ Uživatelské rozhraní Uživatelské rozhraní bude vycházet z původního prototypu ExtBrain Communicatoru, tedy v levém dolním rohu aplikace bude umístěn seznam kontaktů společně s dalšími ovládacími prvky spojení. Návrh vzhledu je na obrázku 3.9. Obrázek 3.9: Uživatelské rozhraní hlavního okna Po příchodu nové zprávy nebo po uživatelově žádosti se otevře konverzační okno v nové záložce poštovního klienta (obrázek 3.10), kde budou jednotlivé konverzace odděleny systémovými záložkami. Oknu bude dominovat textové pole s konverzací, bude zobrazovat informace o příjemci a bude umožňovat také výběr Jabber ID odesílatele i příjemce.

40 24 KAPITOLA 3. ANALÝZA A NÁVRH ŘEŠENÍ Obrázek 3.10: Uživatelské rozhraní záložky s konverzací K nastavení účtů bude vytvořen formulář (obrázek 3.11), který bude umístěn do hlavní nabídky Tools aplikace. Po vyvolání se zobrazí okno, které bude umožňovat úpravu, mazání a zakládání jednotlivých jabber účtů. Zároveň také bude k dispozici seznam dostupných adresářů, které se budou používat k zobrazení v seznamu kontaktů tohoto rozšíření. Obrázek 3.11: Uživatelské rozhraní nastavení

41 KAPITOLA 3. ANALÝZA A NÁVRH ŘEŠENÍ Vývojové prostředí a použité nástroje Vývoj rozšíření proběhne za pomoci integrovaného vývojového prostředí (IVP, resp. IDE 5 ) NetBeans [10] a jeho plug-inu foxbeans [12]. Ten umožňuje jednoduše konfigurovat, vyvíjet a sestavovat projekt jako rozšíření pro Mozilla aplikace. Pro testování knihovny pro práci s XMPP byl použit open-source jabber server ejabberd verze [4]. Pro debugování na sít ové úrovni byl použit Network Protocol Analyzer Wireshark verze [13]. Pro vývoj a testování v rámci Thunderbirdu byl použit JavaScript Debugger Venkman, klient pro SQLite databáze SQLite Manager a prohlížeč aktivního DOM DOM Inspector. Pro ladění vzhledu aplikace byl použit XUL designer XULExplorer verze 1.0a1, který umožňuje zadané XUL okamžitě prohlížet. Pro průběžné testování klientem na druhé straně spojení byl použit Mac OS X klient Adium verze [1]. Pro verzování byl použit nejdříve systém SubVersion, poté byl projekt převeden na Mercurial, výchozí VCS 6 Mozilla aplikací. 5 Integrated Development Envrironment 6 Version Control System

42 26 KAPITOLA 4. REALIZACE 4 Realizace V této kapitole budou popsány méně standardní části implementace společně s problémy, které při vývoji vyvstaly. 4.1 Knihovna XMPP Socket Implementace XMPP knihovny používá XPCOM komponenty Mozilla Application Frameworku. K získání přístupu k socketu je použita komponenta nsiprotocolproxyservice, která poskytuje přístup k fyzickému socketu pomocí streamů. Pro příchozí data je použit řetěz komponent (resp. jejich rozhraní) nsiinputstreampump, nsiscriptableinputstream a nsiscriptableunicodeconverter. Ten umožňuje číst textová data ze socketu převedená přímo do požadovaného kódování (dle RFC dokumentu je to UTF- 8). Zápis do socketu je prováděn přímo pomocí interface nsiconverteroutputstream, který data konvertuje do zvoleného kódování. Je použito asynchronní čtení ze socketu. Objekt, který zpracovává data, musí implementovat nsisimplestreamlistener, tedy metody: onstartrequest onstoprequest ondataavailable v ní. Třída Socket tyto metody implementuje, takže asynchronní volání jsou zpracovávána přímo this._inputpump = ].createinstance(ci.nsiinputstreampump); this._inputstream = this._transport.openinputstream(0,0,0); this._inputpump.init(this._inputstream, -1, -1, 0, 0, false); this._inputpump.asyncread(this, null); this._outputstream = this._transport.openoutputstream(0,0,0); this._output = ]

43 KAPITOLA 4. REALIZACE 27.createInstance(Ci.nsIConverterOutputStream); this._output.init(this._outputstream, UTF-8, 0,?.charCodeAt(0)); Analýza XML Parser Jak bylo uvedeno dříve, třída Socket zpracovává také přijaté XML a vytváří jeho reprezentaci v DOM, kterou předává dalším komponentám ke zpracování. Jako parser byla použita komponenta DOMParser. Nevýhodou DOMParseru je, že při chybě nepracuje s výjimkami, ale vrací chybu, která není zachytitelná klasickou try catch konstrukcí. Metodou parsefromstring je tedy možné zpracovat pouze validní XML a není možné jednoduchým způsobem zjistit, zda byla operace provedena úspěšně či nikoliv. Protože je XMPP stream takzvaně nekonečné XML a často používá namespace, nejsou části přijaté na straně socketu validním XML. Při sestavování spojení může dojít například k přijetí následující posloupnosti paketů: #1: <?xml version="1.0"?> <stream:stream xmlns="jabber:client" xmlns:stream=" version="1.0" to="localhost"> #2: <stream:features xmlns:stream=" <mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"> <mechanism>plain</mechanism> <mechanism>digest-md5</mechanism> </mechanisms> </stream:features> #3: <success xmlns="urn:ietf:params:xml:ns:xmpp-sasl"/> Z uvedených příkladů můžou být DOMParserem jako validní vyhodnocena pouze data číslo 3. První přijatý text není platným XML, protože element <stream:stream /> není platně uzavřen (což je ale základní vlastností neskončené komunikace pomocí XMPP). Druhý přijatý text také není platný, protože element s lokálním názvem <features /> nemá nad sebou obalový element <stream />.

44 28 KAPITOLA 4. REALIZACE Problém je v kódu vyřešen tak, že se kontroluje, zda jde o začátek XMPP streamu, a následně je pak každý přijatý element zabalen do elementu <stream:stream />. To způsobí, že veškeré elementy přijaté v kanálu jsou platným XML. Následuje příklad zpracovaného elementu číslo 2, který je již platným XML. <stream:stream xmlns="jabber:client" version="1.0" xml:lang="en" xmlns:stream=" <stream:features xmlns:stream=" <mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"> <mechanism>plain</mechanism> <mechanism>digest-md5</mechanism> </mechanisms> </stream:features> </stream:stream> Fragmentace Dalším problémem při zpracování dat přijatých v Socketu je fragmentace příchozího XML. Ta se projevuje zejména při přijímání většího objemu dat, zejména při příjmu binárních dat (v kanále XMPP kódovaných pomocí base64) jako jsou například avatary uživatelů. Pro tento případ je implementována funkce, která kontroluje, zda jsou XML data řádně zakončená. #1: <message from="jid@server" to="jid2@server"> <event xmlns=" <items node="urn:xmpp:avatar:data"> <item id="96dd92efb8c9cbbd62100add0dacbd62b7e0b6af"> <data xmlns="urn:xmpp:avatar:data">ivborw0kggoaa... base64 data... #2: 5m6XSXU+sAAAAASUVORK5CYII= </data> </item> </items> </event> </message>

45 KAPITOLA 4. REALIZACE 29 Pokud se zjistí, že daná data nejsou řádně zakončena, uloží danou část do mezipaměti a při přijetí další části spojí obě dohromady a provede kontrolu znovu. Tím je zajištěno, že výsledné XML, které je předáno parseru, je platné Udržování spojení Protože XMPP jako protokol nemá informaci o délce timeoutu TCP/IP spojení, zavedl se takzvaný whitespace ping, kdy server či klient v určitých intervalech zapíší do kanálu znak mezery, aby nedošlo k uzavření spojení. XML validaci sice znak mezery nebrání, ale nejde o systémové řešení. Proto bylo zavedeno rozšíření XEP-0199, které definuje správný XMPP Ping. Ping je definován jako IQ stanza obsahující element ping s namespace urn:xmpp:ping. Pokud protistrana neimplementuje tento XEP, standardně odpoví chybovou hláškou <service-unavailable />. To však má jako vedlejší účinek to, že se oživí dané TCP/IP spojení. Při testování vyvíjené aplikace byla zjištěna nejmenší hodnota timeoutu u služby serveru jabber.org a podle ní byla nastavena frekvence posílání v pětiminutových intervalech Zpracování přijatého DOM Jak bylo popsáno dříve, výstupem ze třídy Socket je DOM reprezentace elementů (případně elementu) přijatých ze serveru. Pro každý z těchto elementů je pak volána metoda ondataavailable třídy XMPP. Ta na základě jména a namespace elementu rozhodne, jak bude program na přijatá data reagovat. Samotný protokol se může nacházet v několika různých stavech a podle toho také očekávat přijetí různých dat. Toto je popsáno v objektu protocolhandler, který obsahuje logiku zpracování vzniklé události. Jeho struktura vypadá takto: protocolhandler: { stream-opened : { features: function(extxmpp, data) {... } },... connected : { message: function(extxmpp, data) {

46 30 KAPITOLA 4. REALIZACE } }... }, presence: function(extxmpp, data) {... }, iq: function(extxmpp, data) {... } Na ukázce je vidět, že ve stavu stream-opened je očekáván element features. Dále pak, že pokud je spojení aktivní (stav connected), jsou očekávány elementy message, presence nebo iq. Pokud je přijat nějaký element, ke kterému není nalezen příslušný handler, je vyvolána výjimka. Třída XMPP zastřešuje základní práci s protokolem a poskytuje metody pro čtení a zápis do vzniklého kanálu. Pro čtení jsou zde implementovány události, které vznikají jednak na základě změn stavu protokolu (např. connected, disconnected) a také přijatých dat (např. message, presence). Třída poskytuje možnost registrace tzv. listeneru, který je informován o vzniku událostí a jsou mu předávána relevantní data. Listener může implementovat libovolné množství reakcí na události. Příkladem může být následující ukázka kódu, kde jsou zpracovávány události připojení, odpojení a přijetí oznámení o tom, že druhá entita připravuje IM zprávu. listener.prototype = { connected: function(extxmpp, data) {... }, disconnected: function(extxmpp, data) {... } composing: function(extxmpp, data) {... } }

47 KAPITOLA 4. REALIZACE Napojení dalších komponent do XMPP kanálu Návrh knihovny umožňuje jednoduché připojení nových komponent systému do XMPP kanálu. Konkrétní implementace tak může navrhnout svůj vlastní listener, který se připojí k události, kterou chce nový systém sledovat. Pokud by například šlo o analýzu přijatých elementů, je možné využít událost data, která vzniká při příjmu jakéhokoliv XML. Jiný příklad by mohl být monitoring příchozích zpráv, kdy by bylo nutné sledovat událost message. Jednoduchým příkladem by mohl být systém, který by například shromažd oval počet přijatých elementů pro JID user@server. Ten bylo možno implementovat například jako: var connection = connections.getconnectionbyjid( user@server ); var elementscount = 0; connection.xmpp.registerlistenerobject({ data: function() { elementscount++; } }); DIGEST-MD5 Mimo autentifikační metody PLAIN bylo nutné implementovat také metodu DIGEST-MD5. Ta má mezi používanými servery největší podporu právě proto, že je bezpečná 1 i pokud je použita přes nezabezpečené spojení. Metodu popisuje RFC 2831, bohužel je velmi špatně čitelné. Navíc je třeba, aby se v částech algoritmu (popsaném v kapitole ) nepracovalo s obvyklým výstupem MD5 hashovacích algoritmů (tedy s 32 hexadecimálními číslicemi), ale s hrubými daty. Proto byla pro výpočet MD5 použita knihovna napsaná v JavaScriptu a veřejně dostupná pod licencí BSD, která poskytuje jako výstup i nekonvertovaná 128 bitová data. Ta jsou potřeba pro vytvoření odpovědi na DIGEST-MD5 challenge. 4.2 Uživatelské rozhraní Uživatelské rozhraní bylo implementováno dle návrhu v kapitole 3.3.4, které vychází z již existujícího prototypu ExtBrain Communicatoru. Veškerá okna jsou popsána v souborech XUL, z 1 Uměle vykonstruované MD5 kolize sice již byly v roce 2006 prakticky předvedeny, ale v reálném provozu zatím nepředstavují velkou hrozbu.

48 32 KAPITOLA 4. REALIZACE nichž hlavní je contactsbox.xul, který je definován jako overlay hlavního okna poštovního klienta. overlay chrome://messenger/content/messenger.xul \\ chrome://extbrain.thunderbird/content/contactsbox.xul Seznam kontaktů Seznam kontaktů byl pomocí overlaye přes element s id folderpanebox vložen pod seznam účtů a adresářů pošty. Je možné si v něm vybrat, které sloupce budou viditelné a které nikoliv. Obrázek 4.1: Seznam kontaktů Seznam kontaktů je tvořen standardní komponentou XUL tree. Ta umožňuje dynamicky měnit sloupce, které zobrazuje, a zároveň také obsahuje ovládací prvky k řazení podle sloupců. Komponenta tree se definuje jako <tree> <treecols>

49 KAPITOLA 4. REALIZACE 33 <treecol label="column label" /> </treecols> <treechildren> <treeitem> <treerow> <treecell label="item label" /> </treerow>... </treeitem> </treechildren> </tree> Pomocí XUL atributu persist je zajištěno, že si aplikace bude pamatovat i přes své ukončení zobrazené sloupce nebo například hodnotu, podle které byl obsah seznamu řazen. Byla využita již existující implementace nsitreeview, která je popsána v [7]. Seznam všech kontaktů je reprezentován polem contacts uloženým v objektu contactlist. Kontakty, zobrazené v seznamu kontaktů jsou filtrovány z tohoto pole. Je možné vybrat zobrazení pouze on-line uživatelů, je také možné použít textový element nad seznamem kontaktů pro filtrování, resp. hledání mezi zobrazenými kontakty. Filtrace probíhá při volání metody contactlist.search, která do pole contactlist.found zapíše výsledky daného hledání a ty jsou zobrazeny v elementu tree Slučování kontaktů z adresáře a z rosteru V tomto rozšíření existují dva typy kontaktů: Kontakt z adresáře poštovního klienta Kontakt z rosteru jednoho z aktivních účtů Protože poštovní klient Thunderbird umožňuje uživateli mít více adresářů, v nastavení (viz kapitolu 4.2.4) je k dispozici výběr adresářů, ze kterých budou kontakty zobrazeny v seznamu. Každý adresář aplikace Thunderbird je označen vlastním URI, které vypadá například jako moz-abmdbdirectory://abook.mab. Podle tohoto URI se pak v kódu adresář získává za užití rozhraní nsiabmanager.

50 34 KAPITOLA 4. REALIZACE V seznamu kontaktů jsou vždy zobrazeny sloučeně všechny kontakty z vybraných adresářů. Naproti tomu kontakt z rosteru účtu je zobrazen pouze v tu chvíli, kdy je daný účet on-line. Kontakty z adresářů načítá a poskytuje objekt contactsource. Je běžné, že jeden uživatel XMPP sítě vlastní více různých Jabber ID (obvykle na různých serverech), a proto byla implementována funkce slučování kontaktů podle zadaných Jabber ID. Do základního formuláře pro úpravu kontaktu z adresáře byla pomocí overlay vložena další záložka, na které jsou textová pole pro 6 různých Jabber ID. Tyto Jabber ID jsou uloženy ke kontaktu pomocí rozhraní, které poskytuje nsiabcard. K zápisu vlastního atributu ke kontaktu stačí použít metodu setproperty. if (acard instanceof nsiabcard) { for each(var elementid in CardDialogOverlay.customAttributes) { value = adoc.getelementbyid(elementid).value; acard.setproperty(elementid, value); } } Při každém připojení některého z účtů dojde k načtení jeho rosteru ze serveru. Pro každý nový kontakt z rosteru se prochází dosavadní seznam kontaktů a kontroluje se, zda v něm neexistuje kontakt, který by měl již dané Jabber ID definované. Pokud ano, nevytváří se nová položka seznamu, ale k danému kontaktu se napíše, že je dostupný pod daným Jabber ID z daného účtu. Pro rychlé hledání v seznamu je definováno pole jidmap, které obsahuje reference na kontakty podle Jabber ID. Zjednodušeně je proces naznačen v následujícím výtažku z kódu: var tmpcontact = contactlist.jidmap[jid]; if (tmpcontact == undefined) { // Vytvoření nového kontaktu do seznamu... } tmpcontact.addaccount([account, jid]); tmpcontact.addsubscription([account, jid, subscription]);...

51 KAPITOLA 4. REALIZACE Manipulace s kontakty S kontakty je možné manipulovat nejen přes nově vytvořený seznam kontaktů, ale také pomocí standardního rozhraní, které Thunderbird poskytuje. Pokud uživatel kontakt upraví, je nutné tuto změnu propagovat do právě zobrazeného seznamu. Rozhraní nsiabmanager umožňuje přidat listener, který je notifikován o každé změně v adresářích. Jsou definovány tři události: onitemadded onitemremoved onitempropertychanged Protože kontakt v adresáři Thunderbirdu nemá žádný unikátní identifikátor, kterým by jej jedinečně určil, je při zakládání kontaktu do seznamu kontaktů vytvořen a uložen vlastní atribut, nazvaný ExtBrainUniqId. Ten je tvořen MD5 hashem jména kontaktu a časového razítka ve chvíli vytváření. Tento atribut je pouze vytvářen a není nikdy aktualizován a je možné podle něj jednotlivé kontakty identifikovat. Pro obsluhu událostí vznikých v kterémkoliv adresáři byl implementován listener, který na základě změn upravuje zobrazovaný seznam kontaktů. Zejména je nutné hlídat změny v polích obsahujících uživatelem zadaná Jabber ID. Proto byly vytvořeny metody objektu contactsource: mergecardwithrosters unmergecardtoroster Tyto metody se starají o sloučení a případné oddělení kontaktů s daným rosterem. Předpokládejme situaci, kdy uživatel má naplněný seznam kontaktů a jeho jediný XMPP účet je offline. Jeden z kontaktů adresáře má definovány dvě Jabber ID. Pokud se uživatel rozhodne XMPP účet připojit, dojde k následujícímu: 1. Účet se připojí a načte roster 2. Projde se získaný roster pokud dané Jabber ID odpovídá některému z definovaných v kontaktu z adresáře, je toto ID společně s účtem přidáno ke kontaktu pokud dané Jabber ID neexistuje u žádného z kontaktů z adresáře, je zobrazeno v seznamu samostatně

52 36 KAPITOLA 4. REALIZACE Uživatel má nyní účet připojen a pokud upraví tento sloučený kontakt z adresáře tak, že odebere Jabber ID, přes které byl tento kontakt s kontaktem z rosteru sloučen, funkce unmergecardtoroster tuto změnu detekuje. Z kontaktu pak informace o Jabber ID odebere a vytvoří v seznamu nový záznam. Podobná situace nastane při přidání některého z Jabber ID v rosteru k některému kontaktu z adresáře funkce mergecardwithrosters zruší daný roster kontakt a přidá informaci o Jabber ID a účtu ke kontaktu z adresáře Informace o kontaktu Při najetí kurzoru myši na řádek s kontaktem se zobrazí okno, které sumarizuje informace, které jsou o něm dostupné. Toho je dosaženo pomocí XUL elementu tooltip, který je dynamicky přegenerován pokaždé, když se má zobrazit (událost popupshowing). Obrázek 4.2: Box s informacemi o kontaktu Při kliknutí myší pravým tlačítkem je zobrazeno menu, ve kterém může uživatel zahájit konverzaci (pouze pokud má kontakt definované nějaké Jabber ID), měnit autorizace vůči vybranému Jabber ID, zobrazit historii konverzací (viz kapitola 4.2.3), začít psát nový , zahájit hovor na telefonní číslo či zobrazit formulář pro úpravu kontaktu. Pokud uživatel chce upravit data o kontaktu, který není zatím v adresáři, zobrazí se okno pro nový kontakt s předvyplněnými údaji Konverzace Okno s konverzacemi bylo dle návrhu implementováno jako nová záložka poštovního klienta. Ta se otevírá v případě, že přijde nová zpráva nebo uživatel chce započít novou konverzaci. K vyvolání záložky je použito rozhraní Thunderbirdu tabmail. Záložka se pak otevírá následujícím voláním: var tabmail = document.getelementbyid("tabmail");

53 KAPITOLA 4. REALIZACE 37 tabmail.opentab("contenttab", { }); contentpage: "chrome://extbrain.thunderbird/content/consoletab.xul" Obrázek 4.3: Záložka s konverzací Záložka může obsahovat více konverzací; ty jsou pak odděleny systémovými záložkami, kdy každá je nadepsána jménem kontaktu a je na ní zobrazen jeho stav. Pokud má kontakt definováno více různých Jabber ID, jsou tyto zobrazeny v menu, ze kterého může uživatel vybrat, na které JID bude zpráva poslána Obsluha událostí Objekt, který reprezentuje okno s konverzacemi má implementovány handlery pro události přijetí zprávy, změny stavu a zprávy composing (tedy informace o tom, že druhá strana píše zprávu). handlestatuschange

54 38 KAPITOLA 4. REALIZACE handleincomingmessage handlecontactcomposing Při vyvolání některého z handlerů je okno s informacemi příslušně aktualizováno Historie konverzací Historie konverzací je ukládána pomocí objektu chatdb do databáze SQLite, kterou poskytuje rozhraní mozistorageservice. Tabulka má atributy, které jsou uvedeny v tabulce 4.1. Název sloupce Typ sloupce fromjid TEXT tojid TEXT direction TEXT date INTEGER message TEXT Tabulka 4.1: SQLite tabulka historie konverzace Uživatel má možnost zobrazit historii konverzací kliknutím na uživatele v seznamu kontaktů, případně použitím tlačítka přímo v okně s konverzací. Byla převzata i funkčnost z původního prototypu ExtBrain Communicatoru, kdy se jednotlivé zprávy shlukují do konverzací podle zadaného časového intervalu (viz [7], kapitola 4.4) Okno nastavení Okno nastavení (obrázek 4.4) je zobrazeno po výběru volby ExtBrain Settings v menu Tools. V tomto okně má uživatel možnost přidávat a odebírat adresáře, které mají být použity pro zobrazení v seznamu kontaktů, a vytvářet a mazat XMPP účty. Pro vytváření účtů jsou předdefinovány tři šablony, které uživateli usnadní vyplnění údajů a nastavení parametrů spojení. XMPP / Jabber GTalk Facebook

55 KAPITOLA 4. REALIZACE 39 Obrázek 4.4: Modální okno nastavení Šablony jsou definovány v objektu accountplugins, který definuje tranformační funkce pro JID, adresy serveru, portu a zabezpečení spojení. Taková šablona musí vypadat takto: var accountplugins = { jabber: { username:, getusernameprompt: function() { }, getconnecthost: function() { }, getport: function() { }, getsecurity: function() { }, getjid: function() { }, validatejid: function() { } } } Nastavení účtů je uloženo do databáze SQLite podobně jako historie zpráv. Struktura tabulky je uvedena v tabulce 4.2.

56 40 KAPITOLA 4. REALIZACE Název sloupce Typ sloupce jid TEXT connecthost TEXT port INTEGER security INTEGER enabled BOOL Tabulka 4.2: SQLite tabulka nastavení účtů Hesla k jednotlivým účtům jsou bezpečně uložena v systémovém úložišti, ke kterému poskytuje přístup rozhraní nsiloginmanager.

57 KAPITOLA 5. TESTOVÁNÍ 41 5 Testování 5.1 Testovací prostředí K testování byla použita dvě různá prostředí: Microsoft Windows XP SP3, Mozilla Thunderbird Mac OS X , Mozilla Thunderbird Protože je Mozilla Application Framework sám o sobě multiplatformní, všechny jím poskytované funkce musí pracovat stejně na všech platformách. Při testování nebyl zjištěn žádný zásadní rozdíl v chování nebo funkčnosti aplikace ve výše zmíněných testovacích prostředích. Je tedy možné předpokládat, že se aplikace bude chovat stejně i na jiných platformách, než na těch výše uvedených (například v operačním systému Linux). 5.2 XMPP knihovna XMPP knihovna byla testována během vývoje a komunikace se servery byla analyzována pomocí implementované debugovací konzole a také pomocí sít ového analyzátoru Wireshark. Komunikace byla testována zejména s těmito servery, poskytujícími účty zdarma: lokální ejabberd a OpenFire servery jabber.cz jabber.org jabbim.cz talk.google.com chat.facebook.com Komunikace s těmito servery byla monitorována a po dokončení spojení ukládána do souboru, ze kterého byla později analyzována, zda odpovídá standardům a zda nedocházelo během spojení k chybám.

58 42 KAPITOLA 5. TESTOVÁNÍ 5.3 Uživatelské rozhraní Výsledné rozšíření poštovního klienta bylo testováno v součinnosti s vedoucím práce. Nalezené nedostatky byly zaznaménávány a opravovány průběžně během vývoje. Další testování společně s rozšířením doplňku mezi větší množství testerů zajistí vedoucí práce.

59 KAPITOLA 6. ZÁVĚR 43 6 Závěr V rámci této práce byl nastudován protokol XMPP a analyzovány možnosti jeho implementace v prostředí Mozilla Application Frameworku. Následně byla v JavaScriptu implementována knihovna poskytující připojení ke XMPP serverům. Nakonec bylo dle požadavků vedoucího práce implementováno rozšíření aplikace Mozilla Thunderbird, které funguje jako multifunkční XMPP klient. Rozšíření, které vzniklo v této práci, zpřístupňuje kontakty z adresářů Mozilla Thunderbird do jediného seznamu, umožňuje souběžné připojení a komunikaci z více XMPP účtů a slučování kontaktů z nich s kontakty z adresářů poštovní aplikace. Implementuje i podporu jiných komunikačních sítí založených na XMPP jako například Google Talk nebo Facebook Chat. Vzhledem k modulární struktuře implementovaného rozšíření bude možné v budoucnosti využít vzniklou knihovnu i pro implementaci dalších funkčností, například posílání souborů nebo dokonce k sestavování hlasové nebo video komunikace. Do budoucna by také bylo možné vylepšit XMPP knihovnu pracující nyní nad TCP/IP tak, aby pracovala s použitím WebSockets.

60 44 KAPITOLA 6. ZA VE R

61 LITERATURA 45 Literatura [1] ADIUM. Adium, free instant messaging application [online]. [cit ]. [2] BIELAWA, T. State Transitions during the XMPP Client Connection Process [online]. [cit ]. [3] BOSWELL, D. et al. Creating Applications with Mozilla. O Reilly, [4] EJABBERD. ejabberd, the Erlang Jabber/XMPP daemon [online]. [cit ]. [5] IETF. Extensible Messaging and Presence Protocol (XMPP): Core [online]. [cit ]. [6] IETF. Extensible Messaging and Presence Protocol (XMPP): Instant Messaging and Presence [online]. [cit ]. [7] JIROVEC, D. Integrace Mozilla Thunderbird a XMPP [online]. [cit ]. [8] MOZILLA. Mozilla Application Framework in Detail [online]. [cit ]. [9] NOVOTNÝ, T. ExtBrain - to simplify everyday tasks [online]. [cit ]. [10] ORACLE. NetBeans.org [online]. [11] SAINT-ANDRE, P. SMITH, K. TRONÇON, R. XMPP: The Definitive Guide. O Reilly, [12] TEESOFT. FoxBeans NetBeans Plugin [online]. [cit ]. [13] WIRESHARK FOUNDATION. Wireshark [online]. [cit ].

62 46 LITERATURA

63 PŘÍLOHA A. DIAGRAMY A OBRÁZKY 47 A Diagramy a obrázky Obrázek A.1: Přechody mezi stavy připojování XMPP klienta, zdroj: [2]

64 48 PŘÍLOHA A. DIAGRAMY A OBRÁZKY Obrázek A.2: Návrh tříd pro XMPP knihovnu

65 PŘÍLOHA A. DIAGRAMY A OBRÁZKY 49 Obrázek A.3: Návrh tříd pro práci s kontakty

66 50 PŘÍLOHA B. SEZNAM POUŽITÝCH ZKRATEK B Seznam použitých zkratek IM Instant Messaging XMPP Extensible Messaging and Presence Protocol GUI Graphical User Interface (grafické rozhraní aplikace) XML Extensible Markup Language XUL XML User Interface Language XBL XML Binding Language XPCOM Cross Platform Component Object Model DOM Document Object Model DTD Document Type Definition IDE Integrated Development Environment IVP Integrované Vývojové Prostředí HTML Hypertext Markup Language CSS Cascade Style Sheet JS Javascript VCS Version Control System SSL Secure Sockets Layer TLS Transport Layer Security

67 PŘÍLOHA C. INSTALAČNÍ PŘÍRUČKA 51 C Instalační příručka C.1 Požadavky k instalaci K instalaci ExtBrain Communicatoru je nutné mít nainstalován jen Mozilla Thunderbird ve verzi 3.1 a vyšší; optimálně verzi (v době psaní instalační příručky nejnovější verze). C.2 Instalace ExtBrain Communicatoru K instalaci je nutné mít k dispozici balíček extbrain_communicator.xpi. Klikněte v menu Tools na položku Add-ons. V něm vyberte vlevo dole možnost Install a vyberte v adresářové struktuře balíček xpi. Obrázek C.1: Okno Add-ons Thunderbird si vyžádá potvrzení, že opravdu chcete neověřený doplněk nainstalovat - klikněte na Install now.

68 52 PŘÍLOHA C. INSTALAČNÍ PŘÍRUČKA Obrázek C.2: Potvrzení instalace Pro dokončení instalace je třeba Thunderbird restartovat. Jednoduše to lze udělat kliknutím na tlačítko Restart Thunderbird. Obrázek C.3: Potvrzení instalace Po restartu aplikace je instalace dokončena.

69 PŘÍLOHA D. UŽIVATELSKÁ PŘÍRUČKA 53 D Uživatelská příručka D.1 Nastavení účtů Po instalaci rozšíření je seznam nastavených účtů prázdný. Pro nastavení vyberte z menu položku Tools a myší klepněte na ExtBrain Settings. Objeví se okno, ve kterém můžete vytvořit nový účet (obrázek D.1). Pro založení nového účtu vyberte položku Account type a klepněte na tlačítko Create new account. Zobrazí se dialog, který vás vyzve k zadání údajů. V případě klasického Jabber účtu to bude vaše JID, například u účtu Facebook Chat jen vaše uživatelské jméno. Obrázek D.1: Okno Nastavení Po potvrzení je vytvořen nový účet a vy můžete vyplnit jeho heslo do políčka Password. Kontakt lze smazat stisknutím tlačítka Delete this account a potvrzením následného dialogu. Pokud nechcete některý z vašich účtů dočasně používat, odškrtněte položku Account enabled. Účet se tak zakáže a nebude se připojovat. Pokud provedete změny v nastavení některého z účtů, který je právě připojen, bude po zavření okna tlačítkem OK tento účet odpojen a znovu připojen.

70 54 PŘÍLOHA D. UŽIVATELSKÁ PŘÍRUČKA D.2 Nastavení zobrazovaných adresářů Aby se v seznamu kontaktů zobrazovaly kontakty z vašich adresářů, je nutné je v okně nastavení (obrázek D.1) ve sloupci Use zaškrtnout. D.3 Připojení účtů Pro připojení všech povolených účtů klikněte na obrázek stavu levým tlačítkem. Zobrazí se menu (obrázek D.2), ve kterém vyberte požadovaný stav a všechny povolené účty se automaticky připojí. Pro odpojení všech připojených účtů v menu zvolte položku Offline. Obrázek D.2: Seznam kontaktů Informace o stavu připojených účtů se zobrazí, podržíte-li chvíli kurzor nad obrázkem stavu (viz obrázek D.3). Obrázek D.3: Informace o stavu účtů Je také možné nastavit stav jednotlivě pro každý z povolených účtů. To můžete provést kliknutím pravým tlačítkem na obrázek stavu účtů (viz obrázek D.4).

71 PŘÍLOHA D. UŽIVATELSKÁ PŘÍRUČKA 55 Obrázek D.4: Nastavení stavu jednotlivých účtů D.4 Započetí konverzace Dvojitý klik na kontakt v seznamu kontaktů může vyvolat tři různé reakce: Pokud má účet definované alespoň jedno Jabber ID a je k dispozici účet, na kterém je k dispozici, otevře se okno pro IM konverzaci. Pokud účet nemá definované žádné Jabber ID, ale je k dispozici jeho ová adresa, je otevřeno okno pro psaní zprávy. Pokud neplatí ani jedna z výše zmíněných podmínek, je otevřeno okno pro editaci kontaktu. Pro započetí IM konverzace je tedy možné využít dvojitý klik na řádek v seznamu kontaktů. Je ale také možné přímo vybrat Jabber ID, kterému chcete zprávu poslat z kontextového menu kontaktu (obrázek D.5). Obrázek D.5: Kontextové menu kontaktu Po kliknutí se otevře záložka s oknem IM konverzace (obrázek D.6). Odeslání zprávy provedete bud stisknutím klávesy Enter nebo kliknutím na tlačítko Send

72 56 PŘÍLOHA D. UŽIVATELSKÁ PŘÍRUČKA Obrázek D.6: Záložka s konverzací D.5 Úprava kontaktu Položky karty adresáře vybraného kontaktu upravíte kliknutím na položku Edit... v kontextovém menu daného kontaktu. Pokud chcete pracovat s autorizacemi, vyberte v kontextovém menu položku Subscriptions. Posílat, resp. odebírat autorizace můžete pro všechny Jabber ID, které má daný kontakt definované, ze všech vašich připojených účtů. D.6 Sloučení kontaktu z rosteru s kontaktem z adresáře Pokud chcete, aby jeden kontakt z adresáře do sebe slučoval více různých Jabber ID, otevřte úpravu kontaktu, vyberte záložku ExtBrain JID s a vyplňte požadovaná Jabber ID do zobrazených polí. Po uložení kontaktu se tento kontakt automaticky sloučí s kontakty v rosteru, která mají zadané Jabber ID. Pokud Jabber ID z kontaktu odeberete, jednotlivá Jabber ID budou automaticky zobrazena jako kontakty z rosteru.

73 PŘÍLOHA D. UŽIVATELSKÁ PŘÍRUČKA 57 Obrázek D.7: Okno pro úpravu přiřazených JID D.7 Zobrazení historie konverzace Pro zobrazení historie konverzace vyberte položku kontextového menu kontaktu Show chats history... nebo klikněte v otevřené IM záložce na tlačítko Show history. Bude zobrazeno okno s historií všech konverzací s daným kontaktem (resp. všemi jeho přiřazenými Jabber ID). Konverzaci zobrazíte kliknutím na řádek v seznamu konverzací. Konverzaci je možné smazat kliknutím pravým tlačítkem a výběrem položky Delete.

Zásuvný modul QGISu. QGIS plugin pro práci s katastrálními daty

Zásuvný modul QGISu. QGIS plugin pro práci s katastrálními daty Zásuvný modul QGISu pro práci s katastrálními daty Anna Kratochvílová, Václav Petráš České vysoké učení technické v Praze Fakulta stavební 19. dubna 2012 Obsah 1 Úvod 2 Nástroje a knihovny 3 Funkcionalita

Bardziej szczegółowo

Internet a zdroje. (Zdroje na Internetu) Mgr. Petr Jakubec. Katedra fyzikální chemie Univerzita Palackého v Olomouci Tř. 17.

Internet a zdroje. (Zdroje na Internetu) Mgr. Petr Jakubec. Katedra fyzikální chemie Univerzita Palackého v Olomouci Tř. 17. Internet a zdroje (Zdroje na Internetu) Mgr. Petr Jakubec Katedra fyzikální chemie Univerzita Palackého v Olomouci Tř. 17. listopadu 12 26. listopadu 2010 (KFC-INTZ) Databáze, citování 26. listopadu 2010

Bardziej szczegółowo

Aproximace funkcí 1,00 0,841 1,10 0,864 1,20 0,885. Body proložíme lomenou čarou.

Aproximace funkcí 1,00 0,841 1,10 0,864 1,20 0,885. Body proložíme lomenou čarou. Příklad Známe následující hodnoty funkce Φ: u Φ(u) 1,00 0,841 1,10 0,864 1,20 0,885 Odhadněte přibližně hodnoty Φ(1,02) a Φ(1,16). Možnosti: Vezmeme hodnotu v nejbližším bodě. Body proložíme lomenou čarou.

Bardziej szczegółowo

1 Soustava lineárních rovnic

1 Soustava lineárních rovnic Soustavy lineárních rovnic Aplikovaná matematika I Dana Říhová Mendelu Brno Obsah 1 Soustava lineárních rovnic 2 Řešitelnost soustavy lineárních rovnic 3 Gaussova eliminační metoda 4 Jordanova eliminační

Bardziej szczegółowo

Numerické metody 8. května FJFI ČVUT v Praze

Numerické metody 8. května FJFI ČVUT v Praze Obyčejné diferenciální rovnice Numerické metody 8. května 2018 FJFI ČVUT v Praze 1 Úvod Úvod Základní metody Pokročilejší metody Soustava Vyšší řád Program 1 Úvod Úvod - Úloha Základní úloha, kterou řešíme

Bardziej szczegółowo

(1) Derivace. Kristýna Kuncová. Matematika B2 17/18. Kristýna Kuncová (1) Derivace 1 / 35

(1) Derivace. Kristýna Kuncová. Matematika B2 17/18. Kristýna Kuncová (1) Derivace 1 / 35 (1) Derivace Kristýna Kuncová Matematika B2 17/18 Kristýna Kuncová (1) Derivace 1 / 35 Růst populací Zdroj : https://www.tes.com/lessons/ yjzt-cmnwtvsq/noah-s-ark Kristýna Kuncová (1) Derivace 2 / 35 Růst

Bardziej szczegółowo

Edita Pelantová, katedra matematiky / 16

Edita Pelantová, katedra matematiky / 16 Edita Pelantová, katedra matematiky seminář současné matematiky, září 2010 Axiomy reálných čísel Axiomy tělesa Axiom 1. x + y = y + x a xy = yx (komutativní zákon). Axiom 2. x + (y + z) = (x + y) + z a

Bardziej szczegółowo

Martin Pergel. 26. února Martin Pergel

Martin Pergel. 26. února Martin Pergel 26. února 2017 Užitečné informace Navážeme na Programování I, změníme jazyk na C#, podrobnosti o C# budou v navazujícím kurzu, soustředíme se na totéž, co v zimě, tedy: technické programování, návrh a

Bardziej szczegółowo

Úvodní informace. 18. února 2019

Úvodní informace. 18. února 2019 Úvodní informace Funkce více proměnných Cvičení první 18. února 2019 Obsah 1 Úvodní informace. 2 Funkce více proměnných Definiční obor Úvodní informace. Komunikace: e-mail: olga@majling.eu nebo olga.majlingova@fs.cvut.cz

Bardziej szczegółowo

Powyższe reguły to tylko jedna z wersji gry. Istnieje wiele innych wariantów, można też ustalać własne zasady. Miłej zabawy!

Powyższe reguły to tylko jedna z wersji gry. Istnieje wiele innych wariantów, można też ustalać własne zasady. Miłej zabawy! Krykiet W krykieta może grać od 2 do 4 osób, którzy albo grają każdy przeciw każdemu, albo dzielą się na dwie drużyny. Bramki oraz palik startowy i powrotne umieszcza się tak, jak pokazano na rysunku.

Bardziej szczegółowo

Numerické metody minimalizace

Numerické metody minimalizace Numerické metody minimalizace Než vám klesnou víčka - Stříbrnice 2011 12.2. 16.2.2011 Emu (Brkos 2011) Numerické metody minimalizace 12.2. 16.2.2011 1 / 19 Obsah 1 Úvod 2 Základní pojmy 3 Princip minimalizace

Bardziej szczegółowo

Necht je funkce f spojitá v intervalu a, b a má derivaci v (a, b). Pak existuje bod ξ (a, b) tak, že f(b) f(a) b a. Geometricky

Necht je funkce f spojitá v intervalu a, b a má derivaci v (a, b). Pak existuje bod ξ (a, b) tak, že f(b) f(a) b a. Geometricky Monotónie a extrémy funkce Diferenciální počet - průběh funkce Věta o střední hodnotě (Lagrange) Necht je funkce f spojitá v intervalu a, b a má derivaci v (a, b). Pak existuje bod ξ (a, b) tak, že f (ξ)

Bardziej szczegółowo

ggplot2 Efektní vizualizace dat v prostředí jazyka R Martin Golasowski 8. prosince 2016

ggplot2 Efektní vizualizace dat v prostředí jazyka R Martin Golasowski 8. prosince 2016 ggplot2 Efektní vizualizace dat v prostředí jazyka R Martin Golasowski 8. prosince 2016 Jak vizualizovat? Požadované vlastnosti nástroje opakovatelnost, spolehlivost separace formy a obsahu flexibilita,

Bardziej szczegółowo

Linea rnı (ne)za vislost

Linea rnı (ne)za vislost [1] Lineární (ne)závislost Skupiny, resp. množiny, vektorů mohou být lineárně závislé nebo lineárně nezávislé... a) zavislost, 3, b) P. Olšák, FEL ČVUT, c) P. Olšák 2010, d) BI-LIN, e) L, f) 2009/2010,

Bardziej szczegółowo

Obsah. Zobrazení na osmistěn. 1 Zobrazení sféry po částech - obecné vlastnosti 2 Zobrazení na pravidelný konvexní mnohostěn

Obsah. Zobrazení na osmistěn. 1 Zobrazení sféry po částech - obecné vlastnosti 2 Zobrazení na pravidelný konvexní mnohostěn Obsah 1 2 3 Použití Zobrazení rozsáhlého území, ale hodnoty zkreslení nesmí přesáhnout určitou hodnotu Rozdělením území na menší části a ty pak zobrazíme zvlášť Nevýhodou jsou však samostatné souřadnicové

Bardziej szczegółowo

Kristýna Kuncová. Matematika B2 18/19

Kristýna Kuncová. Matematika B2 18/19 (6) Určitý integrál Kristýna Kuncová Matematika B2 18/19 Kristýna Kuncová (6) Určitý integrál 1 / 28 Newtonův integrál Zdroj: https://kwcalculus.wikispaces.com/integral+applications Kristýna Kuncová (6)

Bardziej szczegółowo

Matematika 2, vzorová písemka 1

Matematika 2, vzorová písemka 1 Matematika 2, vzorová písemka Pavel Kreml 9.5.20 Přesun mezi obrazovkami Další snímek: nebo Enter. Zpět: nebo Shift + Enter 2 3 4 Doporučení Pokuste se vyřešit zadané úlohy samostatně. Pokud nebudete vědět

Bardziej szczegółowo

Komplexní analýza. Martin Bohata. Katedra matematiky FEL ČVUT v Praze Martin Bohata Komplexní analýza Mocninné řady 1 / 18

Komplexní analýza. Martin Bohata. Katedra matematiky FEL ČVUT v Praze Martin Bohata Komplexní analýza Mocninné řady 1 / 18 Komplexní analýza Mocninné řady Martin Bohata Katedra matematiky FEL ČVUT v Praze bohata@math.feld.cvut.cz Martin Bohata Komplexní analýza Mocninné řady 1 / 18 Posloupnosti komplexních čísel opakování

Bardziej szczegółowo

Obsah Atributová tabulka Atributové dotazy. GIS1-2. cvičení. ČVUT v Praze, Fakulta stavební, katedra mapování a kartografie

Obsah Atributová tabulka Atributové dotazy. GIS1-2. cvičení. ČVUT v Praze, Fakulta stavební, katedra mapování a kartografie ČVUT v Praze, Fakulta stavební, katedra mapování a kartografie září 2010 prezentace 1 2 Obecně otevření atributové tabulky (vlastnosti vrstvy Open Attribute Table) řádky v tabulce jednotlivé záznamy (objekty)

Bardziej szczegółowo

Automatové modely. Stefan Ratschan. Fakulta informačních technologíı. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Automatové modely. Stefan Ratschan. Fakulta informačních technologíı. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Automatové modely Stefan Ratschan Katedra číslicového návrhu Fakulta informačních technologíı České vysoké učení technické v Praze Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Stefan

Bardziej szczegółowo

Kristýna Kuncová. Matematika B3

Kristýna Kuncová. Matematika B3 (10) Vícerozměrný integrál II Kristýna Kuncová Matematika B3 Kristýna Kuncová (10) Vícerozměrný integrál II 1 / 30 Transformace Otázka Jaký obrázek znázorňuje čtverec vpravo po transformaci u = x + y a

Bardziej szczegółowo

Paralelní implementace a optimalizace metody BDDC

Paralelní implementace a optimalizace metody BDDC Paralelní implementace a optimalizace metody BDDC J. Šístek, M. Čertíková, P. Burda, S. Pták, J. Novotný, A. Damašek, FS ČVUT, ÚT AVČR 22.1.2007 / SNA 2007 Osnova Metoda BDDC (Balancing Domain Decomposition

Bardziej szczegółowo

Kristýna Kuncová. Matematika B2

Kristýna Kuncová. Matematika B2 (3) Průběh funkce Kristýna Kuncová Matematika B2 Kristýna Kuncová (3) Průběh funkce 1 / 26 Monotonie (x 2 ) = 2x (sin x) = cos x Jak souvisí derivace funkce a fakt, zda je funkce rostoucí nebo klesající?

Bardziej szczegółowo

Reprezentace dat. BI-PA1 Programování a Algoritmizace I. Ladislav Vagner

Reprezentace dat. BI-PA1 Programování a Algoritmizace I. Ladislav Vagner Reprezentace dat BI-PA1 Programování a Algoritmizace I. Ladislav Vagner Katedra teoretické informatiky Fakulta informačních technologíı ČVUT v Praze xvagner@fit.cvut.cz 9., 11. a 12. října 2017 Obsah Dvojková

Bardziej szczegółowo

NÁVOD K POUŽITÍ KEZELÉSI KÉZIKÖNYV INSTRUKCJA OBSŁUGI NÁVOD NA POUŽÍVANIE. Česky. Magyar. Polski. Slovensky

NÁVOD K POUŽITÍ KEZELÉSI KÉZIKÖNYV INSTRUKCJA OBSŁUGI NÁVOD NA POUŽÍVANIE. Česky. Magyar. Polski. Slovensky CANON INC. 30-2 Shimomaruko 3-chome, Ohta-ku, Tokyo 146-8501, Japan Europe, Africa & Middle East CANON EUROPA N.V. PO Box 2262, 1180 EG Amstelveen, The Netherlands For your local Canon office, please refer

Bardziej szczegółowo

Kapitola 4: Soustavy diferenciálních rovnic 1. řádu

Kapitola 4: Soustavy diferenciálních rovnic 1. řádu Sbírka příkladů Matematika II pro strukturované studium Kapitola 4: Soustavy diferenciálních rovnic 1 řádu Chcete-li ukončit prohlížení stiskněte klávesu Esc Chcete-li pokračovat stiskněte klávesu Enter

Bardziej szczegółowo

Platforma pro analýzu, agregaci a vizualizaci otevřených dat souv

Platforma pro analýzu, agregaci a vizualizaci otevřených dat souv Platforma pro analýzu, agregaci a vizualizaci otevřených dat souvisejících s územním plánováním University of West Bohemia March 4, 2014 Obsah 1 2 3 Obsah 1 2 3 Otevřená data (Open data) jsou horkým tématem

Bardziej szczegółowo

Co nám prozradí derivace? 21. listopadu 2018

Co nám prozradí derivace? 21. listopadu 2018 Co nám prozradí derivace? Seminář sedmý 21. listopadu 2018 Derivace základních funkcí Tečna a normála Tečna ke grafu funkce f v bodě dotyku T = [x 0, f (x 0 )]: y f (x 0 ) = f (x 0 )(x x 0 ) Normála: y

Bardziej szczegółowo

Serwery. Autorzy: Karol Czosnowski Mateusz Kaźmierczak

Serwery. Autorzy: Karol Czosnowski Mateusz Kaźmierczak Serwery Autorzy: Karol Czosnowski Mateusz Kaźmierczak Czym jest XMPP? XMPP (Extensible Messaging and Presence Protocol), zbiór otwartych technologii do komunikacji, czatu wieloosobowego, rozmów wideo i

Bardziej szczegółowo

Toto zadání je podepsané děkanem a vedoucím katedry, po obhajobě).

Toto zadání je podepsané děkanem a vedoucím katedry, po obhajobě). Na tomto místě bude oficiální zadání vaší práce Toto zadání je podepsané děkanem a vedoucím katedry, musíte si ho vyzvednout na studiijním oddělení Katedry počítačů na Karlově náměstí, v jedné odevzdané

Bardziej szczegółowo

Geometrická nelinearita: úvod

Geometrická nelinearita: úvod Geometrická nelinearita: úvod Opakování: stabilita prutů Eulerovo řešení s využitím teorie 2. řádu) Stabilita prutů Ritzovou metodou Stabilita tenkých desek 1 Geometrická nelinearita Velké deformace průhyby,

Bardziej szczegółowo

DelighTech Fitness App

DelighTech Fitness App PL DelighTech Fitness App FREE Instrukcja użytkowania 1. Wymagania systemowe: - Android 2.3 lub nowszy z obsługą Bluetooth - APPLE ios z obsługą Bluetooth wersja 4.0. 2. Połącz swoje urządzenie z internetem.

Bardziej szczegółowo

Register and win! www.kaercher.com

Register and win! www.kaercher.com Register and win! www.kaercher.com A B A, B A B 2 6 A régi készülékek értékes újrahasznosítható anyagokat tartalmaznak, amelyeket tanácsos újra felhasználni. Szárazelemek, olaj és hasonló anyagok ne kerüljenek

Bardziej szczegółowo

Matematika (KMI/PMATE)

Matematika (KMI/PMATE) Matematika (KMI/PMATE) Úvod do matematické analýzy Limita a spojitost funkce Matematika (KMI/PMATE) Osnova přednášky lineární funkce y = kx + q definice lineární funkce význam (smysl) koeficientů lineární

Bardziej szczegółowo

Anna Kratochvílová Anna Kratochvílová (FJFI ČVUT) PDR ve zpracování obrazu / 17

Anna Kratochvílová Anna Kratochvílová (FJFI ČVUT) PDR ve zpracování obrazu / 17 Parciální diferenciální rovnice ve zpracování obrazu Anna Kratochvílová FJFI ČVUT 10. 6. 2009 Anna Kratochvílová (FJFI ČVUT) PDR ve zpracování obrazu 10. 6. 2009 1 / 17 Obsah 1 Motivace 2 Vyšetření pomocí

Bardziej szczegółowo

PA152,Implementace databázových systémů 2 / 25

PA152,Implementace databázových systémů 2 / 25 PA152 Implementace databázových systémů Pavel Rychlý pary@fi.muni.cz Laboratoř zpracování přirozeného jazyka http://www.fi.muni.cz/nlp/ 19. září 2008 PA152,Implementace databázových systémů 1 / 25 Technické

Bardziej szczegółowo

MATEMATIKA 3. Katedra matematiky a didaktiky matematiky Technická univerzita v Liberci

MATEMATIKA 3.   Katedra matematiky a didaktiky matematiky Technická univerzita v Liberci MATEMATIKA 3 Dana Černá http://www.fp.tul.cz/kmd/ Katedra matematiky a didaktiky matematiky Technická univerzita v Liberci Osnova: Komplexní funkce - definice, posloupnosti, řady Vybrané komplexní funkce

Bardziej szczegółowo

PŘENOS GEOMETRIE 3D SCÉNY PO SÍTI

PŘENOS GEOMETRIE 3D SCÉNY PO SÍTI VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY FAKULTA INFORMAČNÍCH TECHNOLOGIÍ ÚSTAV POČÍTAČOVÉ GRAFIKY A MULTIMÉDIÍ FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF COMPUTER GRAPHICS AND

Bardziej szczegółowo

(13) Fourierovy řady

(13) Fourierovy řady (13) Fourierovy řady Kristýna Kuncová Matematika B3 Kristýna Kuncová (13) Fourierovy řady 1 / 22 O sinech a kosinech Lemma (O sinech a kosinech) Pro m, n N 0 : 2π 0 2π 0 2π 0 sin nx dx = sin nx cos mx

Bardziej szczegółowo

Inverzní Z-transformace

Inverzní Z-transformace Modelování systémů a procesů (11MSP) Bohumil Kovář, Jan Přikryl, Miroslav Vlček Ústav aplikované matematiky ČVUT v Praze, Fakulta dopravní 9. přednáška 11MSP úterý 16. dubna 2019 verze: 2019-04-15 12:25

Bardziej szczegółowo

TVL 26925 LED NÁVOD K POUŽITÍ NÁVOD NA POUŽITIE

TVL 26925 LED NÁVOD K POUŽITÍ NÁVOD NA POUŽITIE TVL 26925 LED NÁVOD K POUŽITÍ NÁVOD NA POUŽITIE BAREVNÝ TELEVIZNÍ PŘÍJÍMAČ S DÁLKOVÝM OVLÁDÁNÍM FAREBNÝ TELEVÍZNY PRIJÍMAČ S DIALKOVÝM OVLÁDÁNÍM TELEWIZOR KOLOROWY Z PILOTEM Obsah Vlastnosti... 2 Úvod...

Bardziej szczegółowo

Paradoxy geometrické pravděpodobnosti

Paradoxy geometrické pravděpodobnosti Katedra aplikované matematiky 1. června 2009 Úvod Cíle práce : Analýza Bertrandova paradoxu. Tvorba simulačního softwaru. Osnova 1 2 3 4 Osnova 1 2 3 4 Osnova 1 2 3 4 Osnova 1 2 3 4 V rovině je zadán kruh

Bardziej szczegółowo

Funkce zadané implicitně. 4. března 2019

Funkce zadané implicitně. 4. března 2019 Funkce zadané implicitně 4. března 2019 Parciální derivace druhého řádu Parciální derivace druhého řádu funkce z = f (x, y) jsou definovány: Parciální derivace 2 f 2 = ( ) f 2 f 2 = ( ) f 2 f a 2 f 2 f

Bardziej szczegółowo

Zadání: Vypočítejte hlavní momenty setrvačnosti a vykreslete elipsu setrvačnosti na zadaných

Zadání: Vypočítejte hlavní momenty setrvačnosti a vykreslete elipsu setrvačnosti na zadaných Příklad k procvičení : Průřeové charakteristik Zadání: Vpočítejte hlavní moment setrvačnosti a vkreslete elipsu setrvačnosti na adaných obracích. Příklad. Zadání: Rokreslení na jednoduché obrace: 500 T

Bardziej szczegółowo

(2) Funkce. Kristýna Kuncová. Matematika B2. Kristýna Kuncová (2) Funkce 1 / 25

(2) Funkce. Kristýna Kuncová. Matematika B2. Kristýna Kuncová (2) Funkce 1 / 25 (2) Funkce Kristýna Kuncová Matematika B2 Kristýna Kuncová (2) Funkce 1 / 25 Sudá a lichá funkce Určete, které funkce jsou sudé a které liché: liché: A, D, E sudé: B Kristýna Kuncová (2) Funkce 2 / 25

Bardziej szczegółowo

Vlastnosti. Příprava. Czech - 2 -

Vlastnosti. Příprava. Czech - 2 - Obsah Vlastnosti... 2 Úvod... 2 Příprava... 2 Bezpečnostní opatření... 3 Obsah balení... 4 Informace o životním prostředí... 5 Tlačítka dálkového ovládání... 6 LCD TV a Ovládací tlačítka... 7 Přehled zapojení

Bardziej szczegółowo

K SAMOSTATNÉ MODULOVÉ SCHODY MONTÁŽI. asta

K SAMOSTATNÉ MODULOVÉ SCHODY MONTÁŽI. asta N O V I N K A K SAMOSTATNÉ MODULOVÉ SCHODY MONTÁŽI asta MODULOVÉ SCHODY asta...jsou nejnovějším výrobkem švédsko-polského koncernu, který se již 10 let specializuje na výrobu schodů různého typu. Jednoduchá

Bardziej szczegółowo

Elementární funkce. Edita Pelantová. únor FJFI, ČVUT v Praze. katedra matematiky, FJFI, ČVUT v Praze

Elementární funkce. Edita Pelantová. únor FJFI, ČVUT v Praze. katedra matematiky, FJFI, ČVUT v Praze Elementární funkce Edita Pelantová FJFI, ČVUT v Praze Seminář současné matematiky katedra matematiky, FJFI, ČVUT v Praze únor 2013 c Edita Pelantová (FJFI) Elementární funkce únor 2013 1 / 19 Polynomiální

Bardziej szczegółowo

podle přednášky doc. Eduarda Fuchse 16. prosince 2010

podle přednášky doc. Eduarda Fuchse 16. prosince 2010 Jak souvisí plochá dráha a konečná geometrie? L ubomíra Balková podle přednášky doc. Eduarda Fuchse Trendy současné matematiky 16. prosince 2010 (FJFI ČVUT v Praze) Konečná geometrie 16. prosince 2010

Bardziej szczegółowo

DFT. verze:

DFT. verze: Výpočet spektra signálu pomocí DFT kacmarp@fel.cvut.cz verze: 009093 Úvod Signály můžeme rozdělit na signály spojité v čase nebo diskrétní v čase. Další možné dělení je na signály periodické nebo signály

Bardziej szczegółowo

TVL 22800 UMP2 NÁVOD K POUŽITÍ NÁVOD NA POUŽITIE

TVL 22800 UMP2 NÁVOD K POUŽITÍ NÁVOD NA POUŽITIE TVL 22800 UMP2 NÁVOD K POUŽITÍ NÁVOD NA POUŽITIE 50193148 BAREVNÝ TELEVIZNÍ PŘÍJÍMAČ S DÁLKOVÝM OVLÁDÁNÍM FAREBNÝ TELEVÍZNY PRIJÍMAČ S DIALKOVÝM OVLÁDÁNÍM TELEWIZOR KOLOROWY Z PILOTEM Obsah Obsah balení...

Bardziej szczegółowo

Návod k použití BUBNOVÁ SUŠIČKA

Návod k použití BUBNOVÁ SUŠIČKA Návod k použití BUBNOVÁ SUŠIČKA CZ Česky, 1 SK Slovenčina, 52 TCD 83B HU Magyar, 18 TR Türkçe, 69 PL Polski, 35 Při prvním zapnutí sušičky musíte zvolit preferovaný jazyk, viz str. 6 Obsah Důležité informace,

Bardziej szczegółowo

kontaktní modely (Winklerův, Pasternakův)

kontaktní modely (Winklerův, Pasternakův) TÉMA 7: Pružný poloprostor, modely podloží pružný poloprostor základní předpoklady pružný poloprostor Boussinesqueovo řešení kontaktní modely (Winklerův, Pasternakův) 1 Pružný poloprostor (1) vychází z

Bardziej szczegółowo

ULS4805FE. Návod k použití Návod na použitie Instrukcja obsługi Instruction Manual Használatı utasítás. Licensed by Hyundai Corporation, Korea

ULS4805FE. Návod k použití Návod na použitie Instrukcja obsługi Instruction Manual Használatı utasítás. Licensed by Hyundai Corporation, Korea ULS4805FE Návod k použití Návod na použitie Instrukcja obsługi Instruction Manual Használatı utasítás Licensed by Hyundai Corporation, Korea Obsah Bezpečnostní informace...2 Označení na produktu...2 Informace

Bardziej szczegółowo

Rekrutacja List Motywacyjny

Rekrutacja List Motywacyjny - Początek Szanowny Panie, Vážený pane, Formalny, odbiorcą jest mężczyzna, którego nazwiska nie znamy. Zamiennie możemy użyć jednego z dwóch zwrotów formalnych Vážená paní, Formalny, odbiorcą jest kobieta,

Bardziej szczegółowo

ZÁVĚREČNÁ KONFERENCE Poslanecká sněmovna PČR Praha 28. 4. 2014 MEZINÁRODNÍ DOTAZNÍKOVÉ ŠETŘENÍ ANKIETY MIEDZYNARODOWE

ZÁVĚREČNÁ KONFERENCE Poslanecká sněmovna PČR Praha 28. 4. 2014 MEZINÁRODNÍ DOTAZNÍKOVÉ ŠETŘENÍ ANKIETY MIEDZYNARODOWE ZÁVĚREČNÁ KONFERENCE oslanecká sněmovna ČR raha 28. 4. 2014 MEZINÁRODNÍ DOTAZNÍKOVÉ ŠETŘENÍ ANKIETY MIEDZYNARODOWE ZÁKLADNÍ INFORMACE ODSTAWOWE INFORMACJE sběr dat proběhl v olsku a v České republice ankiety

Bardziej szczegółowo

Kristýna Kuncová. Matematika B2 18/19. Kristýna Kuncová (1) Vzorové otázky 1 / 36

Kristýna Kuncová. Matematika B2 18/19. Kristýna Kuncová (1) Vzorové otázky 1 / 36 (1) Vzorové otázky Kristýna Kuncová Matematika B2 18/19 Kristýna Kuncová (1) Vzorové otázky 1 / 36 Limity - úlohy Otázka Určete lim x 0 f (x) A -3 B 0 C 5 D 7 E D Zdroj: Calculus: Single and Multivariable,

Bardziej szczegółowo

Katedra kybernetiky skupina Inteligentní Datové Analýzy (IDA) Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Katedra kybernetiky skupina Inteligentní Datové Analýzy (IDA) Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Vytěžování dat Filip Železný Katedra kybernetiky skupina Inteligentní Datové Analýzy (IDA) Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Filip Železný (ČVUT) Vytěžování dat 1 / 26

Bardziej szczegółowo

Expresivní deskripční logiky

Expresivní deskripční logiky Expresivní deskripční logiky Petr Křemen FEL ČVUT Petr Křemen (FEL ČVUT) Expresivní deskripční logiky 79 / 156 Co nás čeká 1 Inference v deskripčních logikách 2 Inferenční algoritmy Tablový algoritmus

Bardziej szczegółowo

SIP: Session Initiation Protocol. Krzysztof Kryniecki 16 marca 2010

SIP: Session Initiation Protocol. Krzysztof Kryniecki 16 marca 2010 SIP: Session Initiation Protocol Krzysztof Kryniecki 16 marca 2010 Wprowadzenie Zaaprobowany przez IETF w 1999 (RFC 2543) Zbudowany przez Mutli Parry Multimedia Session Control Working Group : MMUSIC Oficjalny

Bardziej szczegółowo

IEL Přechodové jevy, vedení

IEL Přechodové jevy, vedení Přechodové jevy Vedení IEL/přechodové jevy 1/25 IEL Přechodové jevy, vedení Petr Peringer peringer AT fit.vutbr.cz Vysoké učení technické v Brně, Fakulta informačních technologíı, Božetěchova 2, 61266

Bardziej szczegółowo

LBF/ZUB22 Programové vybavení ordinace zubního lékaře. Mgr. Markéta Trnečková, Ph.D. Palacký University, Olomouc

LBF/ZUB22 Programové vybavení ordinace zubního lékaře. Mgr. Markéta Trnečková, Ph.D.   Palacký University, Olomouc Databáze LBF/ZUB22 Programové vybavení ordinace zubního lékaře Mgr. Markéta Trnečková, Ph.D. www.marketa-trneckova.cz Palacký University, Olomouc Databáze databáze = uložiště dat dříve členěny hierarchicky,

Bardziej szczegółowo

DXDB 215 NÁVOD K POUŽITÍ NÁVOD NA POUŽITIE INSTRUKCJA OBSŁUGI USER MANUAL

DXDB 215 NÁVOD K POUŽITÍ NÁVOD NA POUŽITIE INSTRUKCJA OBSŁUGI USER MANUAL DXDB 215 NÁVOD K POUŽITÍ NÁVOD NA POUŽITIE INSTRUKCJA OBSŁUGI USER MANUAL KOMBINOVANÝ PŘEHRÁVAČ DVD/DVB-T KOMBINOVANÝ PREHRÁVAČ DVD/DVB-T KOMBINOWANY ODTWARZACZ DVD/DVB-T DVD\DVB-T COMBO PLAYER Podpora

Bardziej szczegółowo

Definice Řekneme, že PDA M = (Q,Σ,Γ,δ,q 0,Z 0,F) je. 1. pro všechna q Q a Z Γ platí: kdykoliv δ(q,ε,z), pak δ(q,a,z) = pro všechna a Σ;

Definice Řekneme, že PDA M = (Q,Σ,Γ,δ,q 0,Z 0,F) je. 1. pro všechna q Q a Z Γ platí: kdykoliv δ(q,ε,z), pak δ(q,a,z) = pro všechna a Σ; Deterministické zásobníkové automaty Definice 3.72. Řekneme, že PDA M = (Q,Σ,Γ,δ,q 0,Z 0,F) je deterministický (DPDA), jestliže jsou splněny tyto podmínky: 1. pro všechna q Q a Z Γ platí: kdykoliv δ(q,ε,z),

Bardziej szczegółowo

Dokumentace...9. Tištěná dokumentace... 9 Netištěná dokumentace... 9 Důležité... 9. Úvod k této příručce...10. Řešení potíží...12

Dokumentace...9. Tištěná dokumentace... 9 Netištěná dokumentace... 9 Důležité... 9. Úvod k této příručce...10. Řešení potíží...12 Contents Dokumentace...9 Tištěná dokumentace... 9 Netištěná dokumentace... 9 Důležité... 9 Úvod k této příručce...10 Řešení potíží Řešení potíží...12 Počítač... 12 Co udělat, pokud se počítač nespouští?...

Bardziej szczegółowo

Představení projektu

Představení projektu Moderní zpřístupnění historických pramenů Představení projektu P. Král 1,2 K. Halla 3 R. Široký4 L. Lenc 2 J. Martínek 1 1 Katedra informatiky a výpočetní techniky, FAV ZČU v Plzni 2 Nové technologie pro

Bardziej szczegółowo

Jednoduchá zobrazení. Podpořeno z projektu FRVŠ 584/2011.

Jednoduchá zobrazení. Podpořeno z projektu FRVŠ 584/2011. Podpořeno z projektu FRVŠ 584/2011. Obsah 1 2 Obsah 1 2 Společné vlastnosti jednoduchých zobrazení: Zobrazovací ref. plocha je rovina - souřadnice X, Y, případně ρ, ɛ Zobrazovaná ref. plocha je eliposid

Bardziej szczegółowo

KATEDRA INFORMATIKY Roman Loník

KATEDRA INFORMATIKY Roman Loník PŘÍRODOVĚDECKÁ FAKULTA UNIVERZITY PALACKÉHO KATEDRA INFORMATIKY BAKALÁŘSKÁ PRÁCE Software pro řízení solárního systému 2010 Roman Loník Místopřísežně prohlašuji, že jsem celou práci včetně příloh vypracoval

Bardziej szczegółowo

IB047. Pavel Rychlý. 21. února

IB047. Pavel Rychlý. 21. února Úvod do korpusové lingvistiky a počítačové lexikografie pary@fi.muni.cz Centrum zpracování přirozeného jazyka 21. února 2018 Technické informace http://www.fi.muni.cz/ pary/ib047/ Technické informace http://www.fi.muni.cz/

Bardziej szczegółowo

Obkládačky a dlaždičky Płytki ścienne i podłogowe: SIGHT šedá szary

Obkládačky a dlaždičky Płytki ścienne i podłogowe: SIGHT šedá szary SIGHT 2 Obkládačky a dlaždičky Płytki ścienne i podłogowe: SIGHT šedá szary SIGHT Fascinující design pro přirozený moderní akcent: SIGHT série obkládaček a dlaždiček ze slinutého materiálu vilbostone vytváří

Bardziej szczegółowo

Paradigmata programování 2

Paradigmata programování 2 Paradigmata programování 2 1. cvičení Radek Janoštík Univerzita Palackého v Olomouci 11.2.2019 Radek Janoštík (Univerzita Palackého v Olomouci) Paradigmata programování 2 11.2.2019 1 / 19 Úvod Předmět

Bardziej szczegółowo

Podrêcznik podstawowej konfiguracji po³¹czeñ Wi-Fi

Podrêcznik podstawowej konfiguracji po³¹czeñ Wi-Fi CEL-SW4QA2M0 Prùvodce základním nastavením Wi-Fi Wi-Fi alapszintû beállítási útmutató Podrêcznik podstawowej konfiguracji po³¹czeñ Wi-Fi Sprievodca základným nastavením Wi-Fi CS HU PL SK Obsah 2 Wi-Fi

Bardziej szczegółowo

Fakulta elektrotechnická

Fakulta elektrotechnická České vysoké učení technické v Praze Fakulta elektrotechnická ČVUT FEL katedra počítačů Diplomová práce Zobrazovací jádro pro vizualizaci třírozměrných dat v reálném čase Petr Slivoň Vedoucí práce: Ing.

Bardziej szczegółowo

Univerzita Karlova v Praze Matematicko-fyzikální fakulta. Jan Šebesta. Studijní program: Informatika, programování

Univerzita Karlova v Praze Matematicko-fyzikální fakulta. Jan Šebesta. Studijní program: Informatika, programování Univerzita Karlova v Praze Matematicko-fyzikální fakulta BAKALÁŘSKÁ PRÁCE Jan Šebesta Správa odkazů Katedra softwarového inženýrství Vedoucí bakalářské práce: RNDr. Michal Žemlička Studijní program: Informatika,

Bardziej szczegółowo

FAKULTA INFORMAČNÍCH TECHNOLOGIÍ

FAKULTA INFORMAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY FAKULTA INFORMAČNÍCH TECHNOLOGIÍ ÚSTAV INTELIGENTNÍCH SYSTÉMŮ FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF INTELLIGENT SYSTEMS VÝVOJ APLIKACÍ

Bardziej szczegółowo

Kombinatorika a grafy I

Kombinatorika a grafy I Kombinatorika a grafy I Martin Balko 1. přednáška 19. února 2019 Základní informace Základní informace úvodní kurs, kde jsou probrány základy kombinatoriky a teorie grafů ( pokračování diskrétní matematiky

Bardziej szczegółowo

Česky. Magyar NÁVOD K POUŽITÍ KEZELÉSI KÉZIKÖNYV INSTRUKCJA OBSŁUGI NÁVOD NA POUŽÍVANIE. Polski. Slovensky

Česky. Magyar NÁVOD K POUŽITÍ KEZELÉSI KÉZIKÖNYV INSTRUKCJA OBSŁUGI NÁVOD NA POUŽÍVANIE. Polski. Slovensky Česky Magyar NÁVOD K POUŽITÍ KEZELÉSI KÉZIKÖNYV INSTRUKCJA OBSŁUGI NÁVOD NA POUŽÍVANIE Polski Slovensky PŘIJÍMAČ GPS Česky Úvod Přijímač GPS GP-E2 může doplňovat zeměpisné údaje ke snímkům a zaznamenávat

Bardziej szczegółowo

Wydział Wywiadu Kryminalnego Komendy Wojewódzkiej Policji we Wrocławiu Wspólna Placówka Kudowa Zdrój

Wydział Wywiadu Kryminalnego Komendy Wojewódzkiej Policji we Wrocławiu Wspólna Placówka Kudowa Zdrój Wydział Wywiadu Kryminalnego Komendy Wojewódzkiej Policji we Wrocławiu Wspólna Placówka Kudowa Zdrój Prezentacja Wspólnej Placówki w Kudowie Zdrój dotycząca współpracy polsko czeskiej Seminarium Wisła

Bardziej szczegółowo

Příručka pro ovládání webového portálu MS2014+ / Instrukcja obsługi portalu internetowego MS2014+

Příručka pro ovládání webového portálu MS2014+ / Instrukcja obsługi portalu internetowego MS2014+ Příručka pro ovládání webového portálu MS2014+ / Instrukcja obsługi portalu internetowego MS2014+ Obsah Obsah... 1 1. Základní informace o MS2014+ / Najważniejsze informacje o MS2014+... 3 1.1. Kde se

Bardziej szczegółowo

POLIURETANOWE SPRĘŻYNY NACISKOWE. POLYURETHANOVÉ TLAČNÉ PRUŽINY

POLIURETANOWE SPRĘŻYNY NACISKOWE. POLYURETHANOVÉ TLAČNÉ PRUŽINY POLIURETAOWE SPRĘŻYY ACISKOWE. POLYURETHAOVÉ TLAČÉ PRUŽIY Oferowane są wymiary wyrobów o różnych twardościach. Konstrukcja tych sprężyn umożliwia zastąpienie sprężyn tradycyjnych tam, gdzie korozja, wibracje,

Bardziej szczegółowo

Bardzo formalny, odbiorca posiada specjalny tytuł, który jest używany zamiast nazwiska

Bardzo formalny, odbiorca posiada specjalny tytuł, który jest używany zamiast nazwiska - Wstęp polski Szanowny Panie Prezydencie, czeski Vážený pane prezidente, Bardzo formalny, odbiorca posiada specjalny tytuł, który jest używany zamiast nazwiska Szanowny Panie, Vážený pane, Formalny, odbiorcą

Bardziej szczegółowo

Jednoduchá zobrazení. Podpořeno z projektu FRVŠ 584/2011.

Jednoduchá zobrazení. Podpořeno z projektu FRVŠ 584/2011. Podpořeno z projektu FRVŠ 584/2011. Obsah 1 2 Obsah 1 2 Společné vlastnosti jednoduchých zobrazení: Zobrazovací ref. plocha je rovina - souřadnice X, Y, případně ρ, ɛ Zobrazovaná ref. plocha je eliposid

Bardziej szczegółowo

HL24285SMART. Návod k použití Návod na použitie Instrukcja obsługi Használatı utasítás. Licensed by Hyundai Corporation, Korea

HL24285SMART. Návod k použití Návod na použitie Instrukcja obsługi Használatı utasítás. Licensed by Hyundai Corporation, Korea HL24285SMART Návod k použití Návod na použitie Instrukcja obsługi Használatı utasítás Licensed by Hyundai Corporation, Korea Obsah Bezpečnostní opatření... 1 Informace o životním prostředí... 2 Zahrnuté

Bardziej szczegółowo

Full HD multimediální přehrávač s duálním HD DVB-T tunerem. Blade DualCorder HD. uživatelský manuál. www.evolve.cz

Full HD multimediální přehrávač s duálním HD DVB-T tunerem. Blade DualCorder HD. uživatelský manuál. www.evolve.cz Full HD multimediální přehrávač s duálním HD DVB-T tunerem Blade DualCorder HD uživatelský manuál www.evolve.cz 1 1. Úvod 1.1 Upozornění 1.2.1 Doporučení k použití Provozní teplota v rozmezí +5 C až +35

Bardziej szczegółowo

A71100TSW0 CS MRAZNIČKA NÁVOD K POUŽITÍ 2 PL ZAMRAŻARKA INSTRUKCJA OBSŁUGI 18 SL ZAMRZOVALNIK NAVODILA ZA UPORABO 35

A71100TSW0 CS MRAZNIČKA NÁVOD K POUŽITÍ 2 PL ZAMRAŻARKA INSTRUKCJA OBSŁUGI 18 SL ZAMRZOVALNIK NAVODILA ZA UPORABO 35 A71100TSW0 CS MRAZNIČKA NÁVOD K POUŽITÍ 2 PL ZAMRAŻARKA INSTRUKCJA OBSŁUGI 18 SL ZAMRZOVALNIK NAVODILA ZA UPORABO 35 2 PRO DOKONALÉ VÝSLEDKY Děkujeme vám, že jste si zvolili výrobek značky AEG. Aby vám

Bardziej szczegółowo

BRNO UNIVERSITY OF TECHNOLOGY FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF COMPUTER GRAPHICS AND MULTIMEDIA MASTER S THESIS AUTHOR

BRNO UNIVERSITY OF TECHNOLOGY FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF COMPUTER GRAPHICS AND MULTIMEDIA MASTER S THESIS AUTHOR VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY FAKULTA INFORMAČNÍCH TECHNOLOGIÍ ÚSTAV POČÍTAČOVÉ GRAFIKY A MULTIMÉDIÍ FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF COMPUTER GRAPHICS AND

Bardziej szczegółowo

TGH01 - Algoritmizace

TGH01 - Algoritmizace TGH01 - Algoritmizace Jan Březina Technical University of Liberec 28. února 2017 Co je to algoritmus? Porovnávání algoritmů Porovnávání algoritmů Co je to algoritmus? Který algoritmus je lepší? Záleží

Bardziej szczegółowo

5. a 12. prosince 2018

5. a 12. prosince 2018 Integrální počet Neurčitý integrál Seminář 9, 0 5. a. prosince 08 Neurčitý integrál Definice. Necht funkce f (x) je definovaná na intervalu I. Funkce F (x) se nazývá primitivní k funkci f (x) na I, jestliže

Bardziej szczegółowo

Logika V. RNDr. Kateřina Trlifajová PhD. Katedra teoretické informatiky Fakulta informačních technologíı BI-MLO, ZS 2011/12

Logika V. RNDr. Kateřina Trlifajová PhD. Katedra teoretické informatiky Fakulta informačních technologíı BI-MLO, ZS 2011/12 Logika V. RNDr. Kateřina Trlifajová PhD. Katedra teoretické informatiky Fakulta informačních technologíı České vysoké učení technické v Praze c Kateřina Trlifajová, 2010 BI-MLO, ZS 2011/12 Evropský sociální

Bardziej szczegółowo

Skraplacze wyparne. Odpaøovací kondenzátory D 127/3-5 PL/CZ

Skraplacze wyparne. Odpaøovací kondenzátory D 127/3-5 PL/CZ Skraplacze wyparne (70 do 80 kw) Odpaøovací kondenzátory (70 do 80 kw) INSTRUKCJA DOBORU I DANE TECHNICZNE VÝBÌR A TECHNICKÁ DATA D 7/-5 PL/CZ VCL DANE I PROCEDURA DOBORU VCL DATA PRO VÝBÌR A POSTUP PØI

Bardziej szczegółowo

}w!"#$%&'()+,-./012345<ya

}w!#$%&'()+,-./012345<ya MASARYKOVA UNIVERZITA FAKULTA INFORMATIKY }w!"#$%&'()+,-./012345

Bardziej szczegółowo

PVM. Luděk Matyska. Jaro Fakulta informatiky MU. Luděk Matyska (FI MU) PVM Jaro / 19

PVM. Luděk Matyska. Jaro Fakulta informatiky MU. Luděk Matyska (FI MU) PVM Jaro / 19 IA039: Architektura superpočítačů a náročné výpočty PVM Luděk Matyska Fakulta informatiky MU Jaro 2014 Luděk Matyska (FI MU) PVM Jaro 2014 1 / 19 Základní vlastnosti Parallel Virtual Machine (PVM) Vyvinut

Bardziej szczegółowo

XML data na disku jako databáze

XML data na disku jako databáze Univerzita Karlova v Praze Matematicko-fyzikální fakulta DIPLOMOVÁ PRÁCE Kamil Toman XML data na disku jako databáze Katedra softwarového inženýrství Vedoucí diplomové práce: prof. RNDr. Jaroslav Pokorný,

Bardziej szczegółowo

Scheelova kometa. Dušan Merta. Colours of Sepsis 2019, OSTRAVA!!!

Scheelova kometa. Dušan Merta. Colours of Sepsis 2019, OSTRAVA!!! Scheelova kometa Laktát posel špatných zpráv? Dušan Merta Colours of Sepsis 2019, OSTRAVA!!! Úvod Carl Wilhelm Scheele 1742 1786 1 Kompanje et al. 2007; Wikipedia contributors 2019. Úvod 1 / 27 Úvod Carl

Bardziej szczegółowo

Příručka pro ovládání webového portálu MS2014+ /

Příručka pro ovládání webového portálu MS2014+ / Příručka pro ovládání webového portálu MS2014+ / Instrukcja obsługi Portalu Internetowego MS2014+ Obsah Příručka pro ovládání webového portálu MS2014+ /... 1 Instrukcja obsługi Portalu Internetowego MS2014+...

Bardziej szczegółowo

Geografická data a databázové systémy, OGC Simple Features pro SQL, PostgreSQL, MySQL, SQLite

Geografická data a databázové systémy, OGC Simple Features pro SQL, PostgreSQL, MySQL, SQLite Přednáška 3 Geografická data a databázové systémy, pro, Postgre, My, ite 155YFSG Free software GIS, letní semestr 2018-2019 My ite Martin Landa martin.landa@fsv.cvut.cz Fakulta stavební ČVUT v Praze Katedra

Bardziej szczegółowo

DŮLEŽITÉ - Před zahájením instalace a používáním si prosím pečlivě přečtěte návod k použití

DŮLEŽITÉ - Před zahájením instalace a používáním si prosím pečlivě přečtěte návod k použití Obsah Bezpečnostní informace...2 Označení na produktu...2 Informace o životním prostředí...3 Vlastnosti...3 Příslušenství...4 Oznámení o Pohotovostním režimu...4 Ovládací tlačítka a Provoz televizoru...4

Bardziej szczegółowo

Programowanie w Internecie

Programowanie w Internecie mariusz@math.uwb.edu.pl http://math.uwb.edu.pl/~mariusz Uniwersytet w Białymstoku 2018/2019 Co to jest Internet? Warunki zaliczenia Zaliczenie na podstawie opracowanej samodzielnie aplikacji WWW Zastosowane

Bardziej szczegółowo

Teorie plasticity. Varianty teorie plasticity. Pružnoplastická matice tuhosti materiálu

Teorie plasticity. Varianty teorie plasticity. Pružnoplastická matice tuhosti materiálu Teorie plasticity Varianty teorie plasticity Teorie plastického tečení Přehled základních vztahů Pružnoplastická matice tuhosti materiálu 1 Pružnoplastické chování materiálu (1) Pracovní diagram pro případ

Bardziej szczegółowo

FAKULTA INFORMAČNÍCH TECHNOLOGIÍ

FAKULTA INFORMAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY FAKULTA INFORMAČNÍCH TECHNOLOGIÍ ÚSTAV POČÍTAČOVÝCH SYSTÉMŮ FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF COMPUTER SYSTEMS ANALÝZA NEDOSTATKŮ

Bardziej szczegółowo