David Bednárek Jakub Yaghob Filip Zavoral.

Podobné dokumenty
C++ a vnitřní svět. David Bednárek Jakub Yaghob Filip Zavoral

Java a XML. 10/26/09 1/7 Java a XML

David Bednárek Jakub Yaghob Filip Zavoral.

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

PREPROCESOR POKRAČOVÁNÍ

3. týden týden týden týden týden týden Termín DÚ: vždy úterý 9:00. Zadání DÚ 1

Programování v Javě I. Leden 2008

Programování v Javě I. Únor 2009

1. Téma 12 - Textové soubory a výjimky

Komponenty v.net. Obsah přednášky

Multiplatformní GUI toolkity

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

Podpora XML v.net. Podpora XML v.net. nezávislý publicista. Jirka Kosek.

ios Cvičení RSS čtečka

1 - Úvod do platformy.net. IW5 - Programování v.net a C#

První kapitola úvod do problematiky

Semestrální práce z předmětu. Jan Bařtipán / A03043 bartipan@studentes.zcu.cz

Doxygen. Jakub Břečka

Rozhraní SAX, SAX vs. SAX2. Jaroslav Ciml

Algoritmizace a programování

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 3.4.

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

UJO Framework. revoluční architektura beans. verze

David Bednárek Jakub Yaghob Filip Zavoral.

Pokročilé Webové služby a Caché security. Š. Havlíček

Novinky ve Visual Studio Tomáš Kroupa

API pro práci s XML. Jirka Kosek. Poslední modifikace: $Date: 2014/12/17 17:15:28 $ Copyright Jiří Kosek

Jazyk C# (seminář 5)

Datové struktury. alg12 1

Jazyk C# (seminář 6)

MVVM pro desktop i web

Object-relational mapping (JPA, Hibernate)

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Čipové karty Lekařská informatika

Skriptovací jazyky. Obsah

<surface name="pozadi" file="obrazky/pozadi/pozadi.png"/> ****************************************************************************

Ošetřování chyb v programech

OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC

Úvod do programovacích jazyků (Java)

Michal Podzimek

NSWI096 - INTERNET JavaScript

Jazyk C# (seminář 3)

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Vývoj multiplatformní aplikace v Qt

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Začínáme s vývojem pro Android

3 KTE / ZPE Informační technologie

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

Architektura COM. Historie Component Object Model (COM) Komunikace s komponentami Rozhraní komponent COM komponenty v.net.

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Zápis programu v jazyce C#

Programování v C++ 1, 17. cvičení

public class Karel { private int position; public boolean issmiling; public int getposition() { return position;

KTE / ZPE Informační technologie

GUIDELINES FOR CONNECTION TO FTP SERVER TO TRANSFER PRINTING DATA

Abstraktní datové typy: zásobník

Úvod do programovacích jazyků (Java)

Chain of responsibility

Google Web Toolkit. Martin Šurkovský, SUR března Katedra informatiky

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ

IUJCE 07/08 Přednáška č. 1

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE STRUKTURA PŘEKLADAČE

Generické programování

Kurz Databáze. Přechod na SQL server. Obsah. Vytvoření databáze. Lektor: Doc. Ing. Radim Farana, CSc.

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Jazyk C# (seminář 9)

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 12.2.

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Úvod do programování v jazyce Java

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 26.3.

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Generování vnitřní reprezentace programu

Příklad aplikace Klient/Server s Boss/Worker modelem (informativní)

Vstupní a vstupní proudy v C++

Multiplatformní GUI knihovna

18. února 2015, Brno Připravil: David Procházka. Programovací jazyk C++

Obsah přednášky. GUI v Javě a událostmi řízené programování. Základní prvky grafického rozhraní. Základní komponenty.

Objektově orientované programování

Knot DNS Resolver. Modulární rekurzivní resolver. Karel Slaný

IRAE 07/08 Přednáška č. 7. Začátek (head)

7. Datové typy v Javě

Abstraktní třídy, polymorfní struktury

Úvod Jednoduchá komunikace Sockety Konec. Programování v C# Síťová komunikace. Petr Vaněček 1 / 33

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Osnova přednášky. Programové prostředky řízení Úvod do C# II. Přístup ke členům. Členy (Members)

PRG036 Technologie XML

Abstraktní datové typy

Obsah přednášky. GUI v Javě a událostmi řízené programování. Základní prvky grafického rozhraní. Základní komponenty.

GUI v Javě a událostmi řízené programování

Programování v jazyce C pro chemiky (C2160) 12. Specifické problémy při vývoji vědeckého softwaru

Úvod do programování - Java. Cvičení č.4

Kapitola 5 WCF, webové služby a mezidoménové zásady

Vláknové programování část V

Základní datové struktury

Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12.

Tvorba informačních systémů

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

GUI v Javě a událostmi řízené programování

Transkript:

David Bednárek Jakub Yaghob Filip Zavoral http://data.ksi.ms.mff.cuni.cz/svn/nprg051pub/html/nprg051.html

XML SAX, DOM, XmlReader libxml+libxslt xerces, xalan, altova,... Nemá nahradit přednášku o XML NPRG036 Technologie XML Použití konfigurace a sejvy export / import serializace konverze dat...... jsem si vytvořil vlastní formát na ukládání konfigurace

Sekvenční - SAX Rychlé, paměťově nenáročné Jeden lineární průchod Události - callback Stromová reprezentace - DOM Celý dokument je načten v paměti Opakovaný průchod, paměťově náročné Push vs. pull parser - XmlReader Proud událostí vs. čtení na vyžádání

SAX = Simple API for XML Sekvenční průchod Čtení části dokumentu = událost callback - obsluha

class Parser {... ; parse_xml(const char *fn) { Parser my_state; xmlsaxhandler saxhandler; memset( &saxhandler, 0, sizeof(saxhandler) ); saxhandler.initialized = XML_SAX2_MAGIC; saxhandler.characters = &Parse::characters; saxhandler.startelementns = &Parse::startElementNs; saxhandler.endelementns = &Parse::endElementNs; saxhandler.warning = &Parse::warning; saxhandler.error = &Parse::error; if( xmlsaxuserparsefile(&saxhandler, &my_state, fn) < 0) { return -1; else return my_state.return_val; vlastní třída - callbacks - stav struktura s nadefinovanými handlery parsování celého souboru postupně obvolávané funkce

class Parser { private: whatever state; public: void startelementns( const string& name) { if( state...)... static void startelementns( void * ctx, const xmlchar * localname, const xmlchar * prefix, const xmlchar * URI, int nb_namespaces, const xmlchar ** namespaces, int nb_attributes, int nb_defaulted, const xmlchar ** attributes ) { Parser &p = *( static_cast<parser *>( ctx)); p.startelementns( string( localname)); metoda objekt - stav callback - funkce statická metoda static void error( void * ctx, const char * msg,...) { Parser &p = *( static_cast<parse *>( ctx ) ); va_list args; va_start(args, msg); vprintf( msg, args ); va_end(args);

void print_element_names(xmlnode* a_node) { xmlnode *cur_node = NULL; for(cur_node=a_node; cur_node; cur_node=cur_node->next) { if (cur_node->type == XML_ELEMENT_NODE) printf("name: %s\n", cur_node->name); print_element_names(cur_node->children); void parse { xmldoc *doc = NULL; xmlnode *root_element = NULL; doc = xmlreadfile(fn, NULL, 0); if (doc == NULL) printf("error: %s\n", argv[1]); root_element = xmldocgetrootelement(doc); print_element_names(root_element); xmlfreedoc(doc); xmlcleanupparser(); 2. navigace v interních strukturách 1. načtení celého stromu

void processnode(xmltextreaderptr reader) { const xmlchar *name, *value; xmlnodetype type; type = xmltextreadernodetype(reader) name = xmltextreaderconstname(reader); value = xmltextreaderconstvalue(reader);... void streamfile(const char *fn) { xmltextreaderptr reader; int ret; reader = xmlreaderforfile(fn, NULL, 0); if( reader == NULL) return -1; while((ret=xmltextreaderread(reader))==1) { processnode(reader); xmlfreetextreader(reader); return ret; aktivní čtení - pull řízeno klientem, ne parserem

SAX Rychlé, paměťově nenáročné Jeden lineární průchod Nepříliš pohodlné programování DOM Plná navigace v dokumentu Celý dokument je načten v paměti Paměťově náročné XmlReader Čtení na vyžádání Ruční zpracování / datové struktury Není podporováno všemi parsery

kritika XML příliš ukecané nevhodné tam, kde je třeba šetřit - přenos po síti, mobily,... JSON { "firstname": "John", struktura podobná XML "lastname" : "Smith", výrazně úspornější "age" : 25, "address" : { vychází z JavaScriptu "Address": "21 X Street", "city" : "New York" libjson... a mnoho dalších Binary XML několik formátů neexistuje de-facto standard BiM - ISO Standard (MPEG working group) BXML - open binary encoding format for XML Efficient XML - basis for the W3C Standard for Binary XML...

HANDLE f = CreateFile("f.txt", FILE_READ_DATA, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_FLAG_RANDOM_ACCESS FILE_FLAG_OVERLAPPED, 0); OVERLAPPED o; memset(&o, 0, sizeof(overlapped)); o.hevent = CreateEvent(0, TRUE, FALSE, 0); o.offset = offs; ReadFile(f, buf, sz, &rsz, &o); nejaky_uzitecny_kod WaitForSingleObject(o.hEvent, INFINITE); CloseHandle(o.hEvent); CloseHandle(f);

int f = open("f.txt", O_RDONLY O_LARGEFILE, rights); aiocb a; memset(&a, 0, sizeof(aiocb)); a.aio_fildes = f; a.aio_offset = offs; a.aio_nbytes = sz; a.aio_buf = buf; a.aio_sigevent.sigev_notify = SIGEV_NONE; aio_read(&a); nejaky_uzitecny_kod if( aio_error( &a)!= EINPROGRESS) yyy // finished aio_suspend(&a, 1, 0); rsz = aio_return(&a); close(f);

win win api / mfc / win forms / WPF linux / unix X-Windows / multiplatform multiplatform Qt, gtk, wxwidgets,... Nemá nahradit přednášku Programování pro... NSWI079 Programování pro X Window System NSWI036 Programování pro Windows I NSWI037 Programování pro Windows II NSWI038 Praktikum programování pro Windows

Win API MFC

základní rozhraní pro Win, nejen GUI 'objektové' C relativně low-level proč? efektivní malý prográmek 'Jak mám udělat tohle?...žádná komponenta na to není' g_hwndbutton1 = CreateWindowEx(0, TEXT("BUTTON"), TEXT("Tlac"), WS_CHILD WS_VISIBLE BS_PUSHBUTTON, 10, 50, 75, 25, g_hwndmain, (HMENU)NULL, g_hinstance, NULL); if ( g_hwndbutton1 == NULL ) return FALSE; g_hwndend = CreateWindowEx(0, TEXT("BUTTON"), TEXT("Konec"), WS_CHILD WS_VISIBLE BS_PUSHBUTTON, 95, 50, 75, 25, g_hwndmain, (HMENU)ID_END, g_hinstance, NULL); if ( g_hwndend == NULL ) return FALSE;

MS Foundation Class objektová nadstavba nad Win API C++ knihovny integrováno s VS - wizards void CMfcView::OnMouseMove(UINT nflags, CPoint point) { // TODO: Add your message handler code here and/or call default CMfcDoc* pdoc = GetDocument(); if (blbdown) { LINE line( ptprev, point); pdoc->cary.add(line); pdoc->setmodifiedflag(true); UpdateStatusBar(); CView::OnMouseMove(nFlags, point); void CMfcView::OnEditUndo() { // TODO: Add your command handler code here CMfcDoc* pdoc = GetDocument(); pdoc->cary.removeat(pdoc->cary.getsize()-1); Invalidate(); pdoc->setmodifiedflag(true); UpdateStatusBar();

.Net 2.0 Interoperabilita C#, VB,... C++/CLI Click'n'Go On the File menu, click New, and then click Project. To add controls to a form - click Toolbox on the View menu. - place three controls from the Toolbox on the Form1: - drag a Label control to near... To write code to handle events - double-click on the button to add a button click event handler - an empty event handler method is generated for you - press Enter after the opening brace of the button1_click - type the code to run when that event occurs: Application::Exit();

Windows Presentation Foundation jiné (modernější) API.Net 3.0+ různé druhy médií tlusté ribbony skiny,... XAML extensible Application Markup Language <Button Content="Click Me" Click="OnButtonClick"> <Button.Background> <LinearGradientBrush> <GradientStop Color="Yellow" Offset="0" /> <GradientStop Color="Green" Offset="1" /> </LinearGradientBrush> </Button.Background> </Button>

GTK+ Trolltech/Nokia Qt wxwidgets často nejen GUI ale kompletní knihovny (qtstring) 'Multiplatform GUI Libraries Are A Dead End' VLC player, Google Earth 'multi-' platformní aplikace Skype.Lx, KOffice, KDE #include "wx/wx.h" #include "HelloWorldApp.h" IMPLEMENT_APP(HelloWorldApp) #ifndef INCLUDED_HELLOWORLDAPP_H #define INCLUDED_HELLOWORLDAPP_H class HelloWorldApp : public wxapp { public: virtual bool OnInit(); ; DECLARE_APP(HelloWorldApp) #endif // INCLUDED_HELLOWORLDAPP_H bool HelloWorldApp::OnInit() { wxframe *frame = new wxframe((wxframe*) NULL, -1, _T("Hello World")); frame->createstatusbar(); frame->setstatustext(_t("hello World")); frame->show(true); SetTopWindow(frame); return true;