• No results found

Recursive Web Search in KDE

N/A
N/A
Protected

Academic year: 2021

Share "Recursive Web Search in KDE"

Copied!
34
0
0

Loading.... (view fulltext now)

Full text

(1)

VYSOK ´

E U ˇ

CEN´I TECHNICK ´

E V BRN ˇ

E

BRNO UNIVERSITY OF TECHNOLOGY

FAKULTA INFORMA ˇ

CN´ICH TECHNOLOGI´I

´

USTAV INFORMA ˇ

CN´ICH SYST ´

EM ˚

U

FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF INFORMATION SYSTEMS

REKURZIVN´I PROHLED ´

AVA ˇ

C WEBU PRO KDE

RECURSIVE WEB SEARCH IN KDE

BAKAL ´

A ˇ

RSK ´

A PR ´

ACE

BACHELOR’S THESIS

AUTOR PR ´

ACE

LUK ´

A ˇ

S HEFKA

AUTHOR

VEDOUC´I PR ´

ACE

Ing. RADEK BURGET, Ph.D.

SUPERVISOR

(2)

Rekurzivn´ı prohled´

avaˇc webu pro KDE

Zad´

an´ı

1. Seznamte se s aplikaˇcn´ım rozhran´ım unixov´eho pracovn´ıho prostˇred´ı KDE.

2. Prostudujte komponentovou architekturu tohoto prostˇred´ı.

3. Navrhnˇete aplikaci pro rekurzivn´ı prohled´an´ı webov´ych str´anek s moˇznost´ı definovat r˚uzn´a omezen´ı.

4. Implementujte navrˇzenou aplikaci v jazyce C++.

5. Integrujte aplikaci do prostˇred´ı KDE.

(3)

Licenˇcn´ı smlouva

Licenˇcn´ı smlouva je uloˇzena v archivu Fakulty informaˇcn´ıch technologi´ı Vysok´eho uˇcen´ı technick´eho v Brnˇe.

(4)

Abstrakt

Tato bakal´aˇrsk´a pr´ace se zab´yv´a problematikou prohled´av´an´ı webov´ych str´anek z desk-topov´eho prostˇred´ı KDE. Souˇc´ast´ı pr´ace je sezn´amen´ı s aplikaˇcn´ım rozhran´ım tohoto pro-stˇred´ı, popis n´avrhu a implementace aplikace. Ta podporuje ˇradu omezen´ı, jak uˇz na oblast hled´an´ı, tak na hled´an´ı samotn´e. Aplikace proch´az´ı internetem za pomoci rekurze a hy-pertextov´ych odkaz˚u str´anek. V z´avˇeru pr´ace jsou pops´any v´yhody aplikace oproti jin´ym alternativ´am.

Kl´ıˇcov´

a slova

vyhled´avaˇc, KDE, Linux, rozhran´ı, vyhled´av´an´ı, omezen´ı, rekurze, Qt, C++, web, internet

Abstract

The bachelor thesis deals with problems related to web sites browsing from the KDE desktop environment. Part of this thesis is to introduce the application interface of this environ-ment, suggestion description and application amplementation. The thesis supports range of restrictions both for searching area and searching itself. Application goes through the internet with the help of recursion and hypertext links. In conclusion there are descriobed application advatages in comparison with other alternative.

Keywords

finder, KDE, Linux, interface, searching, limitation, recursion, Qt, C++, web, internet

Citace

Luk´aˇs Hefka: Rekurzivn´ı prohled´avaˇc webu pro KDE, bakal´aˇrsk´a pr´ace, Brno, FIT VUT v Brnˇe, 2007

(5)

Rekurzivn´ı prohled´

avaˇc webu pro KDE

Prohl´

aˇsen´ı

Prohlaˇsuji, ˇze jsem tuto bakal´aˇrskou pr´aci vypracoval samostatnˇe pod veden´ım Ing. Radka Burgeta, Ph.D. Uvedl jsem vˇsechny liter´arn´ı prameny a publikace, ze kter´ych jsem ˇcerpal.

. . . . Luk´aˇs Hefka 12. kvˇetna 2007

Podˇekov´

an´ı

Chtˇel bych t´ımto podˇekovat vedouc´ımu pr´ace Ing. Radku Burgetovi, Ph.D., za jeho cenn´e pˇripom´ınky a trpˇelivost, se kterou pr´aci ˇcetl.

c

Luk´aˇs Hefka, 2007.

Tato pr´ace vznikla jako ˇskoln´ı d´ılo na Vysok´em uˇcen´ı technick´em v Brnˇe, Fakultˇe in-formaˇcn´ıch technologi´ı. Pr´ace je chr´anˇena autorsk´ym z´akonem a jej´ı uˇzit´ı bez udˇelen´ı opr´ a-vnˇen´ı autorem je nez´akonn´e, s v´yjimkou z´akonem definovan´ych pˇr´ıpad˚u.

(6)

Obsah

1 Uvod´ 2

2 Vyhled´av´an´ı na webu 3

2.1 Vyhled´av´an´ı dokument˚u . . . 3

2.2 Internetov´e vyhled´avaˇce . . . 4

2.3 Souˇcasn´y stav . . . 5

3 Implementaˇcn´ı prostˇred´ı 7 3.1 Desktopov´e prostˇred´ı KDE . . . 7

3.1.1 Aplikaˇcn´ı rozhran´ı KDE . . . 7

3.2 Grafick´a knihovna Qt . . . 9

3.2.1 Hlavn´ı rysy . . . 10

3.2.2 Sign´aly a sloty . . . 10

3.2.3 Lad´ıc´ı techniky . . . 13

4 N´avrh ˇreˇsen´ı 15 4.1 Poˇzadavky na aplikaci . . . 15

4.2 Objektov´y n´avrh . . . 18

5 Implementace 20 5.1 Z´akladn´ı tˇr´ıdy. . . 20

5.2 Parsov´an´ı HTML . . . 22

5.3 Konverze znakov´ych sad . . . 22

5.4 Export do XML. . . 23

5.5 Grafick´e uˇzivatelsk´e rozhran´ı . . . 23

6 V´ysledky 25

7 Z´avˇer 27

(7)

Kapitola 1

´

Uvod

Tato pr´ace si klade za c´ıl vytvoˇrit aplikaci pracuj´ıc´ı pod linuxov´ym desktopov´ym prostˇred´ım KDE. Ta by mˇela slouˇzit k rekurzivn´ımu prohled´av´an´ı webu s moˇznost´ı definovat ˇradu omezen´ı, jak na oblast hled´an´ı, tak na hled´an´ı samotn´e. Implementaˇcn´ım jazykem je C++. Kapitola2obsahuje obecn´e informace t´ykaj´ıc´ı se internetov´eho vyhled´av´an´ı a vyhled´avaˇc˚u. V kapitole 4 je vysvˇetlen n´avrh aplikace v nˇekolika kroc´ıch. Pˇredevˇs´ım jsou zde nast´ınˇen´e hlavn´ı probl´emy a tak´e objektov´y n´avrh. Kapitola 5 shrnuje implementaci aplikace a po-pisuje nˇekter´e zaj´ımav´e implementaˇcn´ı detaily. Cel´a pr´ace i s dosaˇzen´ymi v´ysledky je shrnuta v kapitole6.

(8)

Kapitola 2

Vyhled´

av´

an´ı na webu

2.1

Vyhled´

av´

an´ı dokument˚

u

Dnes uˇz neodmysliteln´a souˇc´ast internetu, kter´a s rostouc´ım poˇctem str´anek nab´yv´a na sv´e d˚uleˇzitosti. Klasick´e z´ısk´av´an´ı informac´ı (information retrieval - IR) si klade za c´ıl z´ısk´av´an´ı informace jako takov´e. Pˇredpokl´ad´a potˇrebu informace. Na internetu nemus´ı b´yt poˇzadavek na vyhled´av´an´ı ˇcistˇe informaˇcn´ı. M˚uˇze j´ıt napˇr. o typ navigaˇcn´ı (chci z´ıskat jednu poˇzadovanou str´anku) nebo transakˇcn´ı (najdi str´anky, kde mohu uˇcinit poˇzadovanou ˇ

cinnost - transakci). Podrobnˇejˇs´ı informace lze naj´ıt v kapitole 3 A taxonomy of web searches, [3].

Podle typu dotaz˚u v internetov´ych vyhled´avaˇc´ıch je dˇel´ıme na tˇri druhy:

• Navigaˇcn´ı

• Informaˇcn´ı

• Transakˇcn´ı

Navigaˇcn´ı dotazy – tyto typy dotaz˚u pouˇzije uˇzivatel v pˇr´ıpadˇe, ˇze se chce dostat na nˇejakou konkr´etn´ı str´anku. M´a jiˇz pˇredstavu o str´ance, jen si ale nepamatuje konkr´etn´ı adresu nebo se chce na str´anku dostat t´ımto zp˚usobem (kdyˇz se na ni tak dostal uˇz dˇr´ıv). Podobn´e typy dotaz˚u se v klasick´em IR oznaˇcuj´ı tak´e jako vy-hled´av´an´ı

”zn´am´e poloˇzky“. Navigaˇcn´ı dotazy se ˇcasto pouˇz´ıvaj´ı pro vyhodnocov´an´ı r˚uzn´ych syst´em˚u. Tyto dotazy maj´ı jako v´ysledek pouze jedinou spr´avnou odpovˇed’ a d´a se tak snadno zjistit, zda syst´em spr´avnˇe odpovˇedˇel ˇci nikoli. Spr´avn´a odpovˇed’ v podobˇe str´anky z mnoˇziny odkaz˚u (hub page) m˚uˇze b´yt tak´e uspokojiv´y v´ysledek, nicm´enˇe je jiˇz o nˇeco nepohodlnˇejˇs´ı a horˇs´ı neˇz pˇresn´y odkaz.

Informaˇcn´ı dotazy – d˚uvodem pouˇzit´ı informaˇcn´ıch dotaz˚u je snaha z´ıskat konkr´etn´ı informaci, kter´a se na webu nal´ez´a ve statick´e podobˇe. Takov´y v´ysledn´y dokument nen´ı odpovˇed´ı na konkr´etn´ı uˇzivatelsk´y dotaz. Informaˇcn´ı dotazy jsou na webu ˇcasto velmi obecn´e napˇr´ıklad:

(9)

s konkr´etnˇejˇs´ım zamˇeˇren´ım jako:

”Transkripˇcn´ı anal´yza“ nebo ”Britsk´y parlamen-tarismus“. A v t´emˇeˇr 15% takov´ych dotaz˚u je mnohem lepˇs´ı odpovˇed´ı str´anka, kter´a vede na dalˇs´ı informace (hub), neˇz jeden urˇcit´y dokument.

Transakˇcn´ı dotazy – za t´ımto typem dotazu uˇzivatel oˇcek´av´a jeˇstˇe dalˇs´ı akci. Mezi hlavn´ı kategorie dotaz˚u tohoto typu patˇr´ı nakupov´an´ı, stahov´an´ı soubor˚u (obr´azk˚u, p´ısniˇcek, atd.), pˇr´ıstup k nˇejak´e datab´azi (poˇstovn´ı smˇerovac´ı ˇc´ısla, zlat´e str´anky aj.) nebo vyhled´an´ı nˇejak´eho typu serveru s konkr´etn´ım zamˇeˇren´ım (hern´ı server).

Z klasick´eho pohledu IR se tento typ dotazu velmi tˇeˇzko hodnot´ı. Ned´a se jednoduˇse rozhodnout, zda je informace pro uˇzivatele dostateˇcn´a nebo nedostateˇcn´a. U tˇechto typ˚u dotaz˚u se hodnot´ı tak´e dalˇs´ı extern´ı faktory d˚uleˇzit´e pro uˇzivatele (cena zboˇz´ı, rychlost sluˇzby, kvalita obr´azk˚u apod.), kter´e nejsou pˇr´ıliˇs dostupn´e obecn´ym vy-hled´avaˇc˚um.

V´ıce o information retrieval si m˚uˇzete pˇreˇc´ıst napˇr. v [1].

2.2

Internetov´

e vyhled´

avaˇ

ce

Vyhled´avac´ı servery lze rozdˇelit do dvou z´akladn´ıch typ˚u:

• Fulltextov´e vyhled´avaˇce

• Katalogy

V n´asleduj´ıc´ım textu je pops´an rozd´ıl mezi fulltextov´ymi vyhled´avaˇci a katalogy a zp˚usob, jak funguj´ı.

Fulltextov´e vyhled´avaˇce – pokud do fulltextov´eho vyhled´avaˇce zad´ate dotaz, vyhled´avaˇc nehled´a dan´y v´yraz na internetu, n´ybrˇz pouze v datab´azi str´anek na sv´em serveru. Program takov´eho vyhled´avaˇce (kter´emu se tak´e ˇr´ık´a indexovac´ı robot) funguje n´asledovnˇe: proch´az´ı internetem a pomoc´ı odkaz˚u se dost´av´a na dalˇs´ı a dalˇs´ı str´anky, kter´e n´aslednˇe ukl´ad´a do sv´e datab´aze.1 Robot proch´az´ı web v podstatˇe jako velkou

”pavuˇcinu“ po jej´ıch vl´aknech, odkazech, kter´e spojuj´ı jednotliv´e str´anky internetu mezi sebou.

Roboti tedy po pˇr´ıchodu na str´anku

”parsuj´ı “ (viz. kapitola Vlastn´ı HTML parser

4.1) jej´ı zdrojov´y k´od, zaindexuj´ı do sv´e datab´aze a pokraˇcuj´ı na vyhledan´em odkazu, kde se ˇcinnost opˇet opakuje. Pˇri indexov´an´ı robot zpracov´av´a a ukl´ad´a zdrojov´y k´od str´anky do sv´e datab´aze na serveru vyhled´avaˇce. V t´eto datab´azi je pak my, jako uˇzivatel´e, hled´ame. Hled´an´ı tedy neprob´ıh´a v re´aln´em ˇcase na internetu, ale pouze na serveru vyhled´avaˇce, a ten n´am n´aslednˇe odeˇsle do internetov´eho prohl´ıˇzeˇce v´ysledek tohoto hled´an´ı. D´ıky t´eto metodˇe (indexace str´anek na serveru) dostaneme v´ysledek hled´an´ı t´emˇeˇr okamˇzitˇe. Mezi nejvˇetˇs´ı nev´yhody patˇr´ı neaktu´alnost dat.

1

(10)

Katalogy – katalog odkaz˚u je web, obsahuj´ıc´ı ˇradu odkaz˚u na r˚uzn´e str´anky internetu, ˇrazen´e do t´ematick´ych sekc´ı. Na rozd´ıl od fulltextov´ych vyhled´avaˇc˚u se z´apis str´anek do katalogu prov´ad´ı ruˇcnˇe. Na pˇr´ısluˇsn´e registraˇcn´ı str´ance se str´anka zaregistruje a odkaz je schv´alen pracovn´ıky katalogu, kteˇr´ı posuzuj´ı tak´e jeho vhodnost pro danou kategorii. Pˇri registrov´an´ı odkazu do katalogu je obvykle tˇreba zadat URL str´anky, titulek odkazu, kter´y bude v katalogu slouˇzit souˇcasnˇe jako odkaz na str´anku, d´ale doplˇnuj´ıc´ı popis str´anky, a zvolit vhodnou kategorii pro registraci. Vˇetˇsina katalog˚u nedovoluje v z´apisu pouˇz´ıvat superlativy, vulg´arn´ı nebo ur´aˇzliv´e v´yrazy a podobnˇe.

2.3

Souˇ

casn´

y stav

V dneˇsn´ı dobˇe modern´ıch internetov´ych vyhled´avaˇc˚u najde vˇetˇsina z n´as na internetu to co potˇrebuje. Rok od roku se inteligence a funkcionalita tˇechto syst´em˚u zvyˇsuje. Klade se velk´y d˚uraz na rychlost hled´an´ı a na porozumˇen´ı zadan´eho dotazu.

Nyn´ı se na internetu nach´az´ı obrovsk´e mnoˇzstv´ı nejr˚uznˇejˇs´ıch vyhled´avaˇc˚u. K nejzn´ a-mˇejˇs´ım z nich patˇr´ı bez pochybywww.google.com, kter´y si uˇz dlouhou dobu udrˇzuje pozici nejpouˇz´ıvanˇejˇs´ıho vyhled´avaˇce. ˇRada nez´avisl´ych mˇeˇren´ı ve svˇetˇe uv´ad´ı pod´ıl Googlu okolo 60 - 80%. Umoˇzˇnuje prohled´avat jen str´anky ve zvolen´em jazyce (jazykov´e mutace webu), hledat dle data zmˇeny internetov´e str´anky ˇci prohled´avat jen urˇcitou dom´enu. Mezi dalˇs´ı svˇetov´e konkurenty patˇr´ı www.yahoo.com a www.msn.com. V´ıce informac´ı o svˇetov´ych vyhled´avaˇc´ıch na searchenginewatch.com.

Na ˇcesk´em internetu je to pˇrev´aˇznˇe www.seznam.cz, kter´y v souˇcasn´e dobˇe pro vyhle-d´av´an´ı ve svˇetˇe vyuˇz´ıv´a sluˇzeb vyhled´avaˇce Google. Velmi modern´ı a ne pˇr´ıliˇs pouˇz´ıvan´e jsou u n´as tak´ejyxo.czamorfeo.cz. Maj´ı relativnˇe dobr´e vlastnosti pˇri vyhled´av´an´ı ˇcesk´ych v´yraz˚u. Dok´aˇz´ı oh´yb´an´ı slov, um´ı rozpozn´avat pˇreklepy a tak´e dobˇre pracuj´ı s diakritikou. Svou pozici na ˇcesk´em internetu posiluje tak´e samotn´y Google.

Jak uˇz jsem pˇredeslal (kapitola 2. Teoretick´a ˇc´ast, 2.2) vyhled´avaˇce se dˇel´ı do dvou z´akladn´ıch skupin: fulltextov´e a katalogy. Obˇe kategorie maj´ı probl´em s aktu´alnost´ı dat. Vyhled´avaˇce fulltextov´e jsou z´avisl´e na prohled´avac´ıch robotech, kteˇr´ı ne pˇr´ıliˇs ˇcasto aktualizuj´ı indexaˇcn´ı datab´azi. M˚uˇze se tak st´at, ˇze vyhled´avaˇc obsahuje data o webov´ych str´ank´ach i nˇekolik t´ydn˚u ˇci mˇes´ıc˚u star´a nebo je dokonce neobsahuje v˚ubec2. Katalogy jsou oproti fulltextov´ym vyhled´avaˇc˚um odk´az´any na uˇzivatele internetu, kteˇr´ı pln´ı indexaˇcn´ı datab´azi.

Jedin´y zp˚usob zajiˇst’uj´ıc´ı nalezen´ı aktu´aln´ıch dat je tzv. real-time hled´an´ı. Jedn´a se o vyhled´av´an´ı informac´ı na webov´ych serverech v re´aln´em ˇcase. Tuto moˇznost nejv´ıce vyuˇzijeme u hled´an´ı dat, kter´e se ˇcasto mˇen´ı, jako napˇr. zpr´avy, poˇcas´ı, kurzy mˇen a jin´e. Dalˇs´ı moˇznosti vyuˇzit´ı jsou napˇr´ıklad u web˚u, kter´e nepodporuj´ı vyhled´av´an´ı (ˇcasto to

2Tento fakt nast´av´a v pˇr´ıpadˇe, ˇze web je na internetu kr´atkou dobu a vyhled´avaˇc jej jeˇstˇe nezaregistroval

(11)

b´yvaj´ı i emailov´e konference). Nepˇr´ıjemnou vlastnost´ı tˇechto vyhled´avaˇc˚u je delˇs´ı doba hled´an´ı. Oblast hled´an´ı se zpravidla zamˇeˇruje na jeden konkr´etn´ı server a ne na cel´y internet. V kategorii real-time vyhled´avaˇc˚u je softwarov´ych produkt˚u velmi m´alo. Jedn´ım z nich je

Web Finalist. Je urˇcen pouze pro platformu Windows. Nab´ız´ı z´akladn´ı sadu vyhled´avac´ıch omezen´ı jako jsou case sensitive a hled´an´ı cel´ych slov. Na unixov´ych syst´emech doposud ˇ

z´adn´y podobn´y software nen´ı. Tento fakt byl inspirac´ı pro vytvoˇren´ı t´eto bakal´aˇrsk´e pr´ace - Rekurzivn´ı prohled´avaˇc webu pro KDE.

(12)

Kapitola 3

Implementaˇ

cn´ı prostˇ

red´ı

3.1

Desktopov´

e prostˇ

red´ı KDE

KDE (K Desktop Environment) je desktopov´e prostˇred´ı pro Linux a jin´e unixov´e operaˇcn´ı syst´emy. V souˇcasn´e dobˇe patˇr´ı k jednomu z nejpouˇz´ıvanˇejˇs´ıch v t´eto oblasti. Prvn´ı impuls pro vytvoˇren´ı projektu KDE dal v roce 1996 Matthias Ettrich, kter´y nebyl spokojen se souˇcasnou situac´ı a pˇredevˇs´ım se mu nel´ıbila nejednotnost vzhledu jednotliv´ych aplikac´ı. Jeho prvn´ı verze (KDE 1.0) byla uvedena v ˇcervenci 1998. Nyn´ı na projektu KDE pracuj´ı stovky v´yvoj´aˇr˚u po cel´em svˇetˇe, jedn´a se o svobodn´y software, kter´y je ˇs´ıˇren pod GPL (General Public License) licenc´ı1. V´yznamnou podporu v´yvoje software poskytuj´ı firmy MandrakeSoft, Trolltech a SuSE.

Toto prostˇred´ı je do znaˇcn´e m´ıry podobn´e MS Windows. Obsahuje tak´e ˇradu inte-grovan´ych aplikac´ı, kter´e jsou zahrnuty pˇr´ımo do distribuce KDE. Jejich n´azev vˇetˇsinou zaˇc´ın´a p´ısmenem K (KWrite, KPaint, KAlarm apod.). Souborov´ym manaˇzerem a z´aroveˇn nativn´ım WWW prohl´ıˇzeˇcem pro toto prostˇred´ı je Konqueror. KDE je tak´e lokalizov´ano do ˇ

ceˇstiny. Prostˇred´ı se vyznaˇcuje velk´ym mnoˇzstv´ım konfigurac´ı. Jin´ym vˇseobecnˇe zn´am´ym a pouˇz´ıvan´ym grafick´ym uˇzivatelsk´ym prostˇred´ım pro unixov´e syst´emy je GNOME. Obˇe tato nejv´yznamnˇejˇs´ı linuxov´a desktopov´a prostˇred´ı jsou v souˇcasnosti zapojena v projektu

Freedesktop.org. KDE pouˇz´ıv´a grafickou knihovnu Qt firmy Trolltech (viz 3.1.1).

3.1.1 Aplikaˇcn´ı rozhran´ı KDE

V tomto desktopov´em prostˇred´ı vˇsechny aplikace vych´azej´ı z objektu KApplication a odvo-zuj´ı se z objektu KMainWindow. Aplikace vytvoˇren´e touto cestou se pak automaticky pˇrizp˚usobuj´ı standard˚um KDE. Z´akladn´ı sch´ema KDE pro v´yvoj´aˇre je nast´ınˇeno na obr´azku

3.1.

Pro v´yvoj korektn´ıch aplikac´ı do tohoto prostˇred´ı je d˚uleˇzit´ych nˇekolik aspekt˚u. Jedn´ım z nich je seznam ´ukol˚u a vlastnost´ı KDE Application Developer’s Checklist na [5], kter´e

1

Software pod licenc´ı GPL m˚uˇze b´yt svobodnˇe pouˇz´ıv´an a upravov´an. ˇS´ıˇren vˇsak opˇet pouze pod GPL, a to obvykle bezplatnˇe.

(13)

Obr´azek 3.1: Z´akladn´ı sch´ema KDE.

mus´ı aplikace splˇnovat. Z nejzaj´ımavˇejˇs´ım bych uvedl spr´avn´e um´ıstˇen´ı do CVS, napsat manu´al, vytvoˇrit standardn´ı soubory AUTHORS, ChangeLog, README, TODO, desktop, .lsm (Linux Software Map), .spec (RPM bal´ıˇcky), registrace na freshmeat.net, konfigurace uˇzivatelsk´eho rozhran´ı v XML, definov´an´ı standard˚u uˇzivatelsk´eho rozhran´ı, kontrola porta-bility, lokalizace vˇsech text˚u.

Pˇr´ıkladem jednoduch´e aplikace pro KDE m˚uˇze b´yt:

#include <kapp.h>

#include <kmainwindow.h>

int main (int argc, char **argv) {

KApplication a (argc, argv, ‘‘Hello KWorld!’’); KMainWindow *w = new KMainWindow();

w->setGeometry(100, 100, 200, 100); a.setMainWidget(w);

w->show();

return a.exec(); }

Kaˇzd´y program urˇcen´y pro KDE vyˇzaduje jednu instanci objektu KApplication. T´eto in-stanci pomoc´ı metody setMainWidget() nastav´ıme hlavn´ı okno aplikace - objekt z tˇr´ıdy KMainWindow. Metodou setGeometry() nastav´ıme um´ıstˇen´ı a velikost okna. Celou aplikaci spouˇst´ı ˇr´adek return a.exec();.

Nativn´ım v´yvojov´ym prostˇred´ım pro prostˇred´ı KDE je KDevelop2. Jedn´a se o pro-jekt, kter´y byl spuˇstˇen v roce 1998 s c´ılem nab´ıdnout program´ator˚um, kteˇr´ı potˇrebuj´ı

2

(14)

vyv´ıjet aplikace pro linux integrovan´e v´yvojov´e prostˇred´ı pro jazyk C/C++3. Od t´e doby

je publikov´an pod licenc´ı GPL a podporuje projekty KDE, GNOME anebo programov´an´ı v ˇcist´em C/C++. KDevelop poskytuje volnˇe ˇsiˇriteln´e prostˇred´ı pro psan´ı programov´eho k´odu, zjednoduˇsuje pouˇz´ıv´an´ı standardn´ıch n´astroj˚u jako je autoconf a automake4. Mezi dalˇs´ı v´yhody tohoto v´yvojov´eho prostˇred´ı patˇr´ı grafick´y dialogov´y editor pro rychlejˇs´ı n´avrh a tvorbu grafick´eho prostˇred´ı aplikace a pˇr´ım´y pˇr´ıstup k dokumentaci pro KDE a Qt API (Application Programming Interface - Rozhran´ı aplikaˇcn´ıch program˚u). To program´ator˚um umoˇzˇnuje sn´ıˇzit dobu nutnou pro v´yvoj aplikace na minimum. I kdyˇz KDevelop k pr´aci potˇrebuje KDE a Qt, d´a se pouˇz´ıt pro v´yvoj jak´ehokoli C++ projektu, protoˇze je v prvn´ı ˇradˇe navrˇzen jako v´yvojov´e prostˇred´ı pro C/C++. Podrobnˇejˇs´ı informace lze naj´ıt na str´ance projektu www.kdevelop.org.

3.2

Grafick´

a knihovna Qt

Qt je multi-platformn´ı C++ GUI syst´em, plnˇe objektovˇe orientovan´y a jednoduˇse rozˇsiˇ ri-teln´y. Od jeho komerˇcn´ıho uveden´ı na trh v roce 1996 bylo na z´akladech Qt vytvoˇreno tis´ıce aplikac´ı. Jak uˇz jsem pˇredeslal dˇr´ıve 3 tvoˇr´ı z´aklad linuxov´eho desktopu KDE. I pˇresto, ˇze pˇresn´a definice pro Qt je

”C++ GUI system“, budu v t´eto kapitole v souvislosti s Qt uˇz´ıvat pojem

”knihovna Qt“.

V souˇcasn´e dobˇe je knihovna podporov´ana na tˇechto platform´ach: • MS Windows (od verze 95 po souˇcasn´e)

• Unix/X11 - Linux, Sun Solaris, HP-UX, IBM AIX, Digital Unix a dalˇs´ı

• Macintosh - Mac OS X

• Embedded - Linux s podporou framebufferu

Knihovna Qt je produktem firmy Trolltech www.trolltech.com. Obsahuje sadu velmi uˇziteˇcn´ych n´astroj˚u: designer, assistent, uic, qt-config, qmake, moc, linquist. Tyto n´astroje pom´ahaj´ı v´yvoj´aˇri zkr´atit urˇcit´e etapy v´yvoje aplikace. Domovskou str´anku Qt lze nal´ezt na adresewww.trolltech.com/qt.

Program´ator na stˇrednˇe pokroˇcil´e ´urovni zvl´adne z´aklady pr´ace s knihovnou Qt velmi rychle. V n´asleduj´ıc´ım textu se zamˇeˇr´ım na vlastnost, se kterou se program´ator v C++ nesetkal, a kter´a vyˇzaduje jist´y ˇcas na asimilaci program´atorov´ych technik. Jedn´a se o te-chnologii sign´al˚u a slot˚u (viz. Sign´aly a sloty 3.2.1) Dalˇs´ı velmi zaj´ımavou vlastnost´ı Qt jsou zp˚usoby lokalizace aplikace, pˇrenos na jin´e platformy (n´astroj qmake) atd. Popis tˇechto vlastnost´ı vˇsak v´yraznˇe pˇresahuje r´amec t´eto bakal´aˇrsk´e pr´ace.

3KDevelop jako ˇasteˇcn´a obdoba Visual Studia v prostˇred´ı Microsoft Windows 4

V dobˇe psan´ı t´eto bakal´aˇrsk´e pr´ace, tedy v dobˇe pˇrechodu z KDE verze 3 na verzi 4 se zav´ad´ı n´astroj cmake, kter´y uˇz takt´eˇz KDevelop podporuje. Pro podrobnˇejˇs´ı informace o cmake bych odk´azal na literaturu [6, Mastering Cmake 2.2 Edition]

(15)

Existuj´ı tˇri r˚uzn´e edice knihovny Qt:

Qt Enterprise Edition a Qt Professional Edition – edice slouˇz´ıc´ı pro v´yvoj komer-ˇcn´ıho software. Tyto edice zahrnuj´ı zdarma upgrade a technickou podporu. Informace o aktu´aln´ıch cen´ach je moˇzn´e nal´ezt na www str´ank´ach firmy TrollTech nebo pˇr´ımo kontaktovat [email protected]. Enterprise Edition nab´ız´ı oproti Professional Edition ˇradu rozˇsiˇruj´ıc´ıch modul˚u.

Qt Free Edition – tato edice je dostupn´a pro Unix, k dispozici pouze pro v´yvoj ”free software“ (Free and Open Source software). Je poskytov´ana zdarma pod licencemi Q Public License5 a GNU General Pulic License.

Qt/Embedded Free Edition – edice je urˇcen´a pouze pro v´yvoj

”free software“. Je posky-tov´ana zdarma pod licenc´ı GNU General Public License.

3.2.1 Hlavn´ı rysy

Knihovna Qt vyuˇz´ıv´a standardn´ı C/C++ tˇr´ıdy a funkce, sama ovˇsem nab´ız´ı velk´e mnoˇzstv´ı vlastn´ıch tˇr´ıd, jeˇz definuj´ı objekty, kter´e n´am ve velk´e m´ıˇre usnadn´ı tvorbu aplikac´ı (napˇr. QTime pro pr´aci s ˇcasem nebo QRegExpr pro pr´aci s regul´arn´ımi v´yrazy).

Nejvˇetˇs´ı zaj´ımavost´ı knihovny Qt je vz´ajemn´a komunikace mezi objekty, dynamick´e identifikace typ˚u a properties. Rozˇs´ıˇren´ı jsou implementov´ana pomoc´ı maker a preproce-soru moc (Meta Object Compiler). Existuj´ı i rozhran´ı pro pouˇzit´ı Qt z jin´ych jazyk˚u jako napˇr´ıklad Perlu (PerlQt) a Pythonu (PyQt). Pokud chceme Qt aplikaci doplnit o skrip-tov´an´ı, je moˇzn´e pouˇz´ıt n´astroj QSA (Qt Scrtipt for Applications), kter´y je zaloˇzen´y na jazyce ECMAScript.

3.2.2 Sign´aly a sloty

Sign´aly a sloty slouˇz´ı pro komunikaci mezi objekty. Mechanismus sign´al˚u a slot˚u je z´akladn´ı vlastnost´ı knihovny Qt a pr´avˇe tato vlastnost dˇel´a knihovnu jedineˇcnou. Pˇri programov´an´ı GUI je ˇz´adouc´ı, aby zmˇena v jednom widgetu byla zaznamen´ana na widgetu druh´em. Chceme tedy, aby objekt libovoln´e tˇr´ıdy byl schopen komunikovat s jin´ym objektem (opˇet libovoln´e tˇr´ıdy).

Pˇr´ıklad: Po stisku tlaˇc´ıtka objekt (pro vyps´an´ı textu napˇr. Label) zachyt´ı tuto ˇcinnost a vyp´ıˇse nˇejak´y text.

U starˇs´ıch grafick´ych knihoven se ke komunikaci mezi objekty pouˇz´ıvaly tzv.

”callback“ metody6.

”Callbacks“ nejsou typovˇe bezpeˇcn´e a program´ator nem´a jistotu, zdali je ” call-back“ vol´an se spr´avn´ymi parametry. V ˇcesk´e literatuˇre se term´ın

”callbacks“ odbornˇe

5V´ıce o t´eto licenci, viz. domovsk´a str´anka firmy Trolltech. 6

(16)

pˇrekl´ad´a, jako

”zpˇetn´e vol´an´ı“. Prototyp funkce zpˇetn´eho vol´an´ı m´a tento tvar (X Toolkit, jazyk C K&R):

void (*XtCallbackProc)(Widget, XtPointer, XtPointer)

Widget w; // urˇcuje widget, pro kter´y byla funkce vol´ana XtPointer client_data; // aplikaˇcnˇe z´avisl´a data

XtPointer call_data; // data spec. pro zpˇetn´e vol´an´ı

V Qt je tedy alternativa k vol´an´ı technikou

”callback“ - sign´aly a sloty. Sign´al je vysl´an, jestliˇze nastane konkr´etn´ı ud´alost. Slot je funkce, kter´a se vol´a jako ud´alost na urˇcit´y sign´al. Pohled na sign´aly a sloty se snaˇz´ı pˇribl´ıˇzit obr´azek 3.2. Widgety v Qt maj´ı mnoho pˇreddefinovan´ych sign´al˚u a slot˚u, ale obvykle se pˇrid´avaj´ı sign´aly a sloty vlastn´ı. T´ımto zp˚usobem m˚uˇzeme ovl´adat sign´aly, kter´e n´as zaj´ımaj´ı. Mechanismus sign´al˚u a slot˚u je typovˇe bezpeˇcn´y7.

Obr´azek 3.2: Komunikace objekt˚u pomoc´ı sign´al˚u a slot˚u.

Sign´aly a sloty mohou obsahovat pouze ty tˇr´ıdy, kter´e jsou odvozeny (dˇedˇeny) od tˇr´ıdy QObject, nebo od libovoln´eho n´asledn´ıka t´eto tˇr´ıdy (napˇr. QWidget ). Objekty vys´ılaj´ı sign´aly tehdy, jestliˇze se zmˇen´ı takov´y stav objektu, kter´y m˚uˇze b´yt zaj´ımav´y i pro

”okoln´ı svˇet“. Toto je zp˚usob komunikace mezi objekty.

Sloty se pˇrev´aˇznˇe pouˇz´ıvaj´ı k pˇrij´ım´an´ı sign´al˚u, ale jsou to tak´e norm´aln´ı funkce a tak´e se s nimi d´a tak pracovat. Objekty nezaj´ım´a a nestaraj´ı se o to, zdali existuje objekt, kter´y pˇrijal vyslan´y sign´al, ˇci zdali byl na jej´ı sloty nˇejak´y sign´al napojen. Objekty nev´ı nic o komunikaˇcn´ım mechanismu. Do jednoho slotu je moˇzno pˇripojit i v´ıce sign´al˚u a naopak. Tak´e lze jeden konkr´etn´ı sign´al spojit pˇr´ımo s dalˇs´ım sign´alem.

Mechanizmus sign´al˚u a slot˚u je velmi ´uˇcinn´y. Za takovou flexibilitu si ale daˇn bere rychlost, kter´a je nepatrnˇe niˇzˇs´ı neˇz pˇri pouˇzit´ı

”callbacks“ metod.

7

(17)

Pˇr´ıklad: Jednoduch´a uk´azka pˇredv´ad´ı pouˇzit´ı sign´al˚u a slot˚u.

Mˇejme n´asleduj´ıc´ı tˇr´ıdu:

class Foo {

public: Foo();

int value() const { return val; } void setValue( int );

private: int val; };

Tuto tˇr´ıdu pˇrep´ıˇseme, aby podporovala sign´aly a sloty:

#include <qobject.h>

class FooQt : public QObject {

Q_OBJECT public:

FooQt();

int value() const { return val; } public slots:

void setValue( int ); signals:

void valueChanged( int ); private:

int val; };

Tato tˇr´ıda m´a stejn´y priv´atn´ı ˇclen (int val) a stejn´e veˇrejn´e metody pro pˇr´ıstup k tomuto ˇ

clenu:

int value();

void setValue( int );

jako tˇr´ıda Foo. Tˇr´ıda FooQt m´a pˇrid´anu podporu pro vyuˇzit´ı slot˚u a sign´al˚u. M˚uˇze tak ozn´amit okoln´ımu svˇetu zmˇenu sv´eho vnitˇrn´ıho stavu (int val), vysl´an´ım sign´alu value-Changed(). M´a tak´e definov´an slot void setValue(int), kter´emu mohou ostatn´ı objekty

(18)

pos´ılat sign´aly. Vˇsechny tˇr´ıdy, kter´e obsahuj´ı sign´aly nebo sloty mus´ı m´ıt uveden´e makro Q OBJECT v deklaraci. V´ıce o tˇr´ıd´ach v C++ v kapitole Objekty a tˇr´ıdy, [7].

Uk´azka slotu z tˇr´ıdy FooQt:

void FooQt::setValue( int v~) { if ( v != val ) { val = v; emit valueChanged(v); } } ˇ

R´adka emit valueChanged(v); vys´ıl´a sign´al valueChanged(int) ˇc´ımˇz informuje okoln´ı svˇet o zmˇenˇe hodnoty priv´atn´ıho ˇclenu int val. Z uk´azky je patrn´e jak´ym zp˚usobem lze vys´ılat sign´al:

emit signal(argumenty);

Moˇznost´ı jak propojit objekty dohromady je v´ıcero. Jednou z nich je:

FooQt a, b;

QObject::connect(&a, SIGNAL(valueChanged(int)), &b, SLOT(setValue(int)));

Preprocesor zmˇen´ı ˇci odstran´ı kl´ıˇcov´a slova signals, slots a emit tak, aby kompil´ator jazyka C++ s nimi nemˇel probl´emy. Pokud spust´ıme program moc8 na definici tˇr´ıdy, kter´a obsahuje sign´aly nebo sloty je zdrojov´y C++ soubor, kter´y m˚uˇze b´yt kompilov´an a linkov´an s ostatn´ımi objektov´ymi soubory aplikace. (Zdroj [8])

3.2.3 Lad´ıc´ı techniky

Knihovna Qt obsahuje tˇri glob´aln´ı funkce pro v´ypis lad´ıc´ıch a upozorˇnovac´ıch text˚u.

QDebug – tato funkce slouˇz´ı pro testovac´ı v´ypisy pˇri ladˇen´ı programu.

qWarning() – funkce slouˇz´ı pro upozornˇen´ı, jestliˇze program zp˚usob´ı chybu.

8

Program moc (meta object compiler) analyzuje deklaraci tˇr´ıdy v C++ souboru a generuje C++ k´od, kter´y inicializuje meta object. Meta objekt obsahuje jm´ena vˇsech sign´al˚u a slot˚u vˇcetnˇe ukazatel˚u na tyto funkce. V´ıce informac´ı v kapitole 2 Creating Dialogs, [2].

(19)

Pˇr´ıklad pouˇzit´ı:

void f( int c ) {

if ( c > 200 )

qWarning( ‘‘f: chybn´y argument, c == %d’’, c ); }

qFatal() – pˇri fat´aln´ı chybˇe programu vyp´ıˇse text a ukonˇc´ı program Pˇr´ıklad pouˇzit´ı:

int divide( int a, int b ) {

if ( b == 0 ) // chyba v programu qFata( ‘‘dˇelen´ı: nelze dˇelit nulou’’ );

return a/b; }

(20)

Kapitola 4

avrh ˇ

reˇ

sen´ı

Aplikace bude umoˇzˇnovat prohled´av´an´ı webu za pomoc´ı rekurzivn´ıho proch´azen´ı str´anek na z´akladˇe obsaˇzen´ych hypertextov´ych odkaz˚u. Pˇri vyhled´av´an´ı bude moˇzno definovat r˚uzn´a omezen´ı. D˚uleˇzit´ym aspektem je, ˇze bude integrov´ana do unixov´eho desktopov´eho prostˇred´ı KDE.

4.1

Poˇ

zadavky na aplikaci

Z hlediska n´avrhu jsou poˇzadavky n´asleduj´ıc´ı:

• Efektivnost

• Vlastn´ı HTML parser

• Omezen´ı pr˚uchodu robota

• Parametry hled´an´ı

• Podpora r˚uzn´ych znakov´ych sad

• Hled´an´ı s diakritikou

• Uˇzivatelsk´e rozhran´ı

Efektivnost – jelikoˇz aplikace bude prohled´avat web v re´aln´em ˇcase, bude z tohoto d˚uvodu hled´an´ı ˇcasovˇe i v´ykonovˇe n´aroˇcn´e. Efektivita algoritm˚u bude hr´at tedy nejd˚uleˇzitˇejˇs´ı roli. Rychlost hled´an´ı mus´ı b´yt zat´ıˇzena hlavnˇe pˇrenosovou rychlost´ı linky a ne zpra-cov´av´an´ım obsahu.

Vlastn´ı HTML parser – vytvoˇren´ı vlastn´ıho HTML parseru m´a pˇr´ımou souvislost s pˇ red-choz´ım bodem, tedy efektivnost´ı. Parsov´an´ı bude nejn´aroˇcnˇejˇs´ı operac´ı cel´e aplikace, coˇz by mohlo m´ıt velk´y dopad na celkov´y v´ykon. Za pˇredpokladu, ˇze se budou zpra-cov´avat soubory ve velikosti i nˇekolika megabajt˚u, nepˇripad´a pouˇzit´ı technologi´ı jako

(21)

napˇr. DOM1v ´uvahu. Dalo by se uvaˇzovat o obecn´ych HTML parserech, kter´e uˇz jsou

na tom v´ykonnostnˇe podstatnˇe l´ıp, ale i pˇresto se snaˇz´ı z HTML k´odu vytˇeˇzit vˇse co se d´a, coˇz nen´ı ˇz´adouc´ı. Z tohoto d˚uvodu jsem se rozhodl vytvoˇrit parser vlastn´ı, splˇnuj´ıc´ı pˇresnˇe ty poˇzadavky, kter´e potˇrebuji. Ten jedin´ym pr˚uchodem parsuje cel´y zdrojov´y k´od HTML str´anky.

Poˇzadavky na parsov´an´ı jsou tedy n´asleduj´ıc´ı:

• Zjiˇstˇen´ı titulku str´anky • Uloˇzen´ı vˇsech odkaz˚u • Uloˇzen´ı ˇcist´eho textu

• Ignorov´an´ı ostatn´ıch tag˚u, skript˚u a koment´aˇr˚u

Omezen´ı pr˚uchodu robota – pr˚uchod prohled´avac´ıho robota by mˇel b´yt maxim´aln´ı m´ırou nastaviteln´y uˇzivatelem. Jelikoˇz se jedn´a o vyhled´av´an´ı pouze v textov´em obsahu, mˇel by umˇet rozpozn´avat bin´arn´ı soubory a nezpracov´avat je. Dalˇs´ı velmi d˚uleˇzitou vlastnost´ı by mˇelo b´yt oˇsetˇren´ı proti zacyklen´ı v rekurzi. Toho se dos´ahne t´ım, ˇze si bude pamatovat uˇz prohled´avan´e str´anky a odkazy na tyto str´anky igno-rovat. Pˇri stahov´an´ı str´anek by mˇel robot rozpozn´avat stavov´e k´ody vr´acen´e webov´ym serverem. Stavov´e k´ody jsou ˇc´ısla, ke kter´ym pˇr´ısluˇs´ı stavov´a hl´aˇsen´ı. Ta jsou jen slovn´ım popisem dan´eho k´odu. Tato dvojice ´udaj˚u v odpovˇedi klientovi hodnot´ı, jak se podaˇrilo splnit jeho poˇzadavek. Viz. tabulka4.1.

Kategorie Rozsah stavov´ych Popis k´od˚u

Informaˇcn´ı 100 - 199 Zpr´avy definovan´e konkr´etn´ı aplikac´ı. ´

Uspˇech 200 - 299 Poˇzadavek byl ´uspˇeˇsnˇe zpracov´an. Pˇresmˇerov´an´ı 300 - 399 Klient mus´ı pro koneˇcn´e zpracov´an´ı

poˇzadavk˚u vykonat urˇcitou ˇcinnost. O t´eto ˇcinnosti se uˇzivatel nemus´ı dovˇedˇet.

Chyba klienta 400 - 499 Probl´emy na stranˇe klienta. Chyba serveru 500 - 599 Probl´emy na stranˇe serveru.

Tabulka 4.1: Stavov´e k´ody a hl´aˇsen´ı v odpovˇedi protokolu HTTP

O stavov´ych k´odech si m˚uˇzete v´ıce pˇreˇc´ıst na serveru Interval.cz [4].

1DOM (akronym anglick´eho Document Object Model – objektov´y model dokumentu) je objektovˇe

orien-tovan´a reprezentace XML nebo HTML dokumentu. DOM je API umoˇzˇnuj´ıc´ı pˇr´ıstup ˇci modifikaci obsahu, struktury nebo stylu dokumentu, ˇci jeho ˇc´ast´ı. Definice modelu DOM podle Wikipedie[12].

(22)

Omezen´ı budou definovat tyto podm´ınky:

• Poˇc´ateˇcn´ı adresa (startovac´ı adresa, ze kter´e bude robot vych´azet) • Hloubka rekurze (po kterou ´uroveˇn zanoˇren´ı v odkazech m´a robot j´ıt) • Zda pouze v dom´enˇe nebo i mimo dom´enu

• Poˇcet v´ysledk˚u (poˇcet v´ysledk˚u, kter´y uˇzivateli staˇc´ı)

Parametry hled´an´ı – samotn´e vyhled´av´an´ı na str´ank´ach bude moˇzno nastavovat nˇekolika parametry.

Parametry hled´an´ı:

• Hledan´y ˇretˇezec

• Citlivost na velikost p´ısma • Ignorov´an´ı diakritiky

• Cel´a slova (vyhled´av´an´ı v cel´ych slovech nebo jen v jejich ˇc´astech) • Pouze v titulc´ıch

• Hled´an´ı regul´arn´ım v´yrazem

Podpora r˚uzn´ych znakov´ych sad – aby program umˇel pracovat s r˚uzn´ymi znakov´ymi sadami bude je muset z HTML dokumentu nˇejak´ym zp˚usobem zjistit. Jsou dvˇe moˇznosti jak se d´a znakov´a sada z HTML dokumentu vyˇc´ıst. Jedn´ım ze zp˚usob˚u je, ˇze tento ´udaj poˇsle webov´y server v http hlaviˇcce. Dalˇs´ı moˇznost´ı je zjistit si znakovou sadu v meta tagu HTML k´odu. Prvn´ı moˇznost m´a vˇetˇs´ı prioritu, coˇz znamen´a, ˇze pokud by webov´y server k´odov´an´ı v hlaviˇcce neposlal, zjist´ı se k´odov´an´ı z meta tagu str´anky. V pˇr´ıpadˇe, ˇze by ani zde znakov´a sada uvedena nebyla, pouˇzije se ASCII k´odov´an´ı.

Po zjiˇstˇen´ı k´odov´an´ı HTML str´anky se text pˇrevede do znakov´e sady Unicode. V t´eto znakov´e sadˇe uˇz bude bezprobl´emov´e hled´an´ı jak´ychkoli znak˚u.

Hled´an´ı s diakritikou – aplikace bude umoˇzˇnovat vyhled´av´an´ıˇcistˇe napˇr. ˇcesk´ych v´yraz˚u. To znamen´a, ˇze bude pracovat s diakritick´ymi znam´enky, pokud si tuto moˇznost uˇzivatel zvol´ı. V pˇr´ıpadˇe ˇze ne, bude se muset diakritika z ˇretˇezc˚u odstranit. Pro takov´e nahrazen´ı p´ısmen s diakritikou za p´ısmena bez n´ı se vyuˇzije k´odovac´ıch tabulek. Jedna bude obsahovat v´yˇcet p´ısmen s diakritikou a druh´a bez n´ı. Pˇriˇcemˇz p´ısmena n´aleˇz´ıc´ı k sobˇe se budou nach´azet na stejn´ych indexech. T´ım se urychl´ı cel´y pr˚ubˇeh konverze.

Export v´ysledk˚u do XML souboru – aby se s v´ysledky aplikace mohlo d´ale pracovat bude aplikace umoˇzˇnovat jejich uloˇzen´ı do XML souboru. V´ysledky se mysl´ı trojice hodnot pro kaˇzd´y nalezen´y z´aznam, coˇz je:

(23)

• Adresa URL • Titulek str´anky

• ´Uryvek textu s nalezen´ym v´yrazem

Uˇzivatelsk´e rozhran´ı – ovl´ad´an´ı aplikace bude jednoduch´e a intuitivn´ı. D˚uraz bude kla-den na pˇrehledn´e zobrazov´an´ı v´ysledk˚u. Jelikoˇz struktura webu pˇredstavuje pˇrev´aˇznˇe

”strom“, budou se v´ysledky zobrazovat ve stromov´em uspoˇr´ad´an´ım. U jednotliv´ych v´ysledk˚u by mˇelo b´yt moˇzn´e pˇrej´ıt na danou vyhledanou adresu nebo ji zkop´ırovat do schr´anky (clipboardu). Uˇzivatelsk´e rozhran´ı by mˇelo d´ale informovat o aktu´aln´ım stavu programu2, poˇctu nalezen´ych v´ysledk˚u a dobˇe hled´an´ı. Komponenty pro na-staven´ı parametr˚u hled´an´ı zaberou evidentnˇe hodnˇe m´ısta, bylo by dobr´e panel s tˇemito volbami skr´yvat. Zvˇetˇs´ı se tak prostor pro zobrazov´an´ı v´ysledk˚u, a t´ım se stane apli-kace pˇrehlednˇejˇs´ı. Pˇri prov´adˇen´ı ˇcasovˇe n´aroˇcn´ych operac´ı v pr˚ubˇehu hled´an´ı nesm´ı doj´ıt k zablokov´an´ı aplikace. Ta mus´ı nad´ale komunikovat s uˇzivatelem. Tomuto neˇz´adouc´ımu jevu se pˇredejde spr´avn´ym pouˇzit´ım sign´al˚u a slot˚u (viz. kapitola Sign´aly a sloty, 3.2.1).

4.2

Objektov´

y n´

avrh

Stejnˇe tak, jako ve vˇetˇsinˇe projekt˚u, tvoˇr´ı spr´avn´y objektov´y n´avrh velmi dobr´y z´aklad. U t´eto aplikace to podle m´eho plat´ı obzvl´aˇstˇe. Asi nejvˇetˇs´ım probl´emem pˇri objektov´em n´avrhu t´eto aplikace je rekurze, kter´a tvoˇr´ı j´adro cel´eho vyhled´avac´ıho syst´emu.

Obr´azek 4.1: Vazba mezi z´akladn´ımi tˇr´ıdami aplikace

(24)

Hlavn´ı tˇr´ıdou aplikace bude manaˇzer cel´eho hled´an´ı nazvan´y DownloadManager, jehoˇz nejvˇetˇs´ım ´ukolem bude spr´ava rekurzivn´ıho pr˚uchodu internetem. Tato tˇr´ıda bude pro kaˇzdou webovou str´anku vytv´aˇret objekt tˇr´ıdy Engine. Ten se bude starat o zpracov´an´ı dan´e str´anky. Str´anku st´ahne z internetu, za pomoci tˇr´ıdy Parser parsuje zdrojov´y k´od na potˇrebn´e elementy a n´aslednˇe ve spolupr´aci s tˇr´ıdou Searcher vyhled´a zadan´y v´yraz v textu. Tˇr´ıda DownloadManager, kterou budou objekty tˇr´ıdy Engine plnit z´ıskan´ymi odkazy ze str´anek. Tˇr´ıda pˇredstavuj´ıc´ı rozhran´ı aplikace se jmenuje KWebSearchWidget. V t´eto tˇr´ıdˇe se bude inicializovat DownloadManager a spouˇstˇet cel´e hled´an´ı. Vazbu mezi tˇemito tˇr´ıdami lze vidˇet na obr´azku 4.1.

(25)

Kapitola 5

Implementace

Aplikace byla implementov´ana v jazyce C++ za pouˇzit´ı Qt toolkitu verze 3.3.6. Jako v´yvojov´e prostˇred´ı jsem pouˇzil nativn´ı aplikaci prostˇred´ı KDE KDevelop verze 3.4, kter´a splˇnovala veˇsker´e m´e poˇzadavky. Pro optimalizov´an´ı jsem vyuˇzil n´astroj˚u Valgrind a KCache-Gring1.

5.1

akladn´ı tˇ

r´ıdy

Zde bych se pokusil popsat jen nˇekolik z´akladn´ıch tˇr´ıd aplikace, jejich ´ulohu a tak´e okra-jovˇe jejich implementaci. API cel´e aplikace vˇcetnˇe diagram˚u tˇr´ıdn´ıch vazeb lze nal´ezt na pˇriloˇzen´em CD.

Donwload manager – hlavn´ı tˇr´ıda aplikace staraj´ıc´ı se o cel´e prohled´av´an´ı webu. Ob-sahuje frontu poˇzadavk˚u2, kterou pln´ı objekty tˇr´ıdy Engine. Z t´eto fronty vybere poˇzadavek, vytvoˇr´ı objekt tˇr´ıdy Engine a zavol´a jeho metodu Download pro staˇzen´ı a n´asledn´e zpracov´an´ı str´anky. Aby nedoˇslo k zahlcen´ı socketu (o t´eto problematice v´ıce zde[10]) poˇzadavky, m´a tato tˇr´ıda pevn´y poˇcet slot˚u, kter´e se mohou vyuˇz´ıvat. Sama si kontroluje obsazenost jednotliv´ym slot˚u a v pˇr´ıpadˇe, ˇze jsou zaplnˇeny, nedovol´ı staˇzen´ı dalˇs´ı str´anky. Zacyklen´ı v rekurzi oˇsetˇruje tato tˇr´ıda t´ım, ˇze obsahuje haˇsovac´ı ta-bulku (viz. kapitola 14.1 Haˇsovac´ı funkce, [9]), do kter´e ukl´ad´a jiˇz prohledan´e str´anky. Pˇri vstupu na novou str´anku se tak zjiˇst’uje, zda jeˇstˇe nebyla str´anka prohled´ana. V pr˚ubˇehu zpracov´av´an´ı poˇzadavk˚u mus´ı tˇr´ıda kontrolovat, zda nedoˇslo k dokonˇcen´ı hled´an´ı. K tomu m˚uˇze doj´ıt v n´asleduj´ıc´ıch pˇr´ıpadech:

• Byl dosaˇzen uˇzivatelem zadan´y poˇcet v´ysledk˚u

• Fronta poˇzadavk˚u a souˇcasnˇe vˇsechny sloty jsou pr´azdn´e (neˇcek´a ˇz´adn´y poˇ zada-vek ani ˇz´adn´y nen´ı zpracov´av´an)

1

Aplikace slouˇz´ıc´ı k zobrazen´ı grafu vol´an´ı. Pouˇz´ıv´a se pˇrev´aˇznˇe v kombinaci s aplikac´ı Valgrind

2Poˇzadavky zde pˇredstavuj´ı objekty tˇr´ıdy Request, coˇz jsou ve sv´e podstatˇe struktury, kter´e v sobˇe nesou

(26)

• Pˇriˇsel sign´al o explicitn´ım ukonˇcen´ı hled´an´ı (uˇzivatel hled´an´ı zastavil) • Nastala chyba pˇri spojen´ı

Engine – hlavn´ım ´ukolem t´eto tˇr´ıdy je zpracov´an´ı jedn´e str´anky. Zpracov´an´ım se rozum´ı n´asleduj´ıc´ı ´ukony

• Staˇzen´ı webov´e str´anky • Parsov´an´ı str´anky

• Konverze textu z p˚uvodn´ı znakov´e sady do Unicode.

• Dalˇs´ı ´uprava textu podle zadan´ych vyhled´avac´ıch parametr˚u (odstranˇen´ı diakri-tiky, pˇrevod na mal´a p´ısmena atd.)

• Vyhled´an´ı v´yrazu

• Podle nalezen´ych odkaz˚u se vytvoˇr´ı poˇzadavky (objekty tˇr´ıdy Request ), kter´e se pˇridaj´ı do fronty poˇzadavk˚u.

Parser – slouˇz´ı k parsov´an´ı zdrojov´eho textu HTML str´anky. M´a nejvˇetˇs´ı pod´ıl na efe-ktivnosti cel´e aplikace. I pˇres veˇsker´e m´e snahy o optimalizov´an´ı v n´ı program tr´av´ı nejv´ıce strojov´eho ˇcasu. B´azov´a metoda t´eto tˇr´ıdy se naz´yv´a baseParser(). Je tvoˇrena pˇrev´aˇznˇe z jedin´eho pˇr´ıkazu switch, kde kaˇzd´y case n´aleˇz´ı jednomu stavu koneˇcn´eho automatu. V´ıce v kapitole Parsov´an´ı HTML,5.1.

Searcher – jak uˇz z anglick´eho n´azvu vypl´yv´a, tato tˇr´ıda se star´a o vyhled´av´an´ı v´yrazu v textu, jeˇz byl za pomoci tˇr´ıdy Parser vytaˇzen ze zdrojov´eho k´odu HTML. K tomuto hled´an´ı vyuˇz´ıv´a knihovnu z Qt toolkitu qregexp.h. Na z´akladˇe parametr˚u zadan´ych uˇzivatelem vytvoˇr´ı tˇr´ıda regul´arn´ı v´yraz, kter´ym n´aslednˇe v textu vyhled´av´a.

Pˇr´ıklad pouˇzit´ı knihovny qregexp.h, kter´a z textu zjist´ı hodnotu velikosti a jednotku d´elky:

QRegExp rxlen( ‘‘(\\d+)(?:\\s*)(cm|inch)’’ ); int pos = rxlen.search( ‘‘Length: 189cm’’ ); if ( pos > -1 ) {

QString value = rxlen.cap( 1 ); // ‘‘189’’ QString unit = rxlen.cap( 2 ); // ‘‘cm’’ // ...

}

Z´akladn´ı metodou t´eto tˇr´ıdy je metoda Search() vracej´ıc´ı true nebo false podle ´

(27)

KWebSearchWidget – je tˇr´ıda obsahuj´ıc´ı hlavn´ı widget aplikace. Tvoˇr´ı tedy rozhran´ı mezi uˇzivatelem a aplikac´ı. Star´a se o spr´avu komponent a zjiˇst’ov´an´ı jejich stavu. Po spuˇstˇen´ı vyhled´avac´ıho procesu, se v t´eto tˇr´ıdˇe zjist´ı nastaven´e parametry hled´an´ı a pˇredaj´ı se tˇr´ıdˇe DownloadManager, kter´a se jimi bude ˇr´ıdit. N´aslednˇe se vytvoˇr´ı objekt tˇr´ıdy Engine a jeho metodou Start se spust´ı cel´y proces. Komunikace jedno-tliv´ych komponent se odehr´av´a prostˇrednictv´ım sign´al˚u a slot˚u viz. 3.2.1. Jedn´ım ze sign´al˚u jsou tak´e nalezen´e v´ysledky, kter´e jsou pˇr´ımo zobrazov´any v hierarchick´em uspoˇr´ad´an´ı. Pro tento v´ypis byla pouˇzita komponenta ListView, kter´a nejv´ıce splˇnovala poˇzadavky na pˇrehlednost.

5.2

Parsov´

an´ı HTML

HTML parser je implementov´an jako koneˇcn´y automat3 obsahuj´ıc´ı 14 stav˚u. Ten pro kaˇzd´y znak vstupn´ıho ˇretˇezce pˇrech´az´ı do jednoho ze stav˚u. V´ysledkem parsov´an´ı jsou dva ˇretˇezce obsahuj´ıc´ı titulek str´anky a ˇcist´y text a datov´y kontejner vector z tˇr´ıdy STL naplnˇen´y nalezen´ymi odkazy. Podrobnˇejˇs´ı popis koneˇcn´eho automatu spad´a mimo r´amec t´eto techni-ck´e zpr´avy, proto odkazuji alespoˇn na graf tohoto automatu v pˇr´ıloze A.1.

5.3

Konverze znakov´

ych sad

Aby program mohl pracovat se vˇsemi texty (vr´acen´ymi Parserem) jednotnˇe, bylo tˇreba jed-notliv´a k´odov´an´ı sjednotit do Unicodu. Protoˇze Qt toolkit pracuje s unicode ˇretˇezci, byla tato volba jasn´a. Pro pˇrevod mezi k´odov´an´ımi jsem vyuˇzil Qt knihovnu qtextcodec.h. Ta podporuje celou ˇradu k´odov´an´ı od klasick´eho cp1250 aˇz po nejr˚uznˇejˇs´ı japonsk´e a ˇc´ınsk´e znakov´e sady. Pouˇz´ıv´a se k pˇrek´odov´av´an´ı mezi Unicodem a danou sadou. Nejprve je nutno vytvoˇrit codec pro znakovou sadu a n´aslednˇe pouˇz´ıt bud’ funkci fromUnicode() nebo toUni-code. V naˇsem pˇr´ıpadˇe to bude druh´a varianta.

Pˇr´ıklad pˇrevodu ˇretˇezce v k´odov´an´ı cp1250 do Unicode:

QTextCodec * codec;

QTextCodec::codecForName(‘‘cp1250’’);

QString unicodeString = codec->toUnicode(originalString);

O t´eto problematice v´ıce zde[11].

3

Definice koneˇcn´eho automatu podle Wikipedie[13]: Koneˇcn´y automat (KA, t´eˇz FSM z anglick´eho finite state machine) je teoretick´y v´ypoˇcetn´ı model pouˇz´ıvan´y v informatice pro studium vyˇc´ıslitelnosti a obecnˇe form´aln´ıch jazyk˚u. Popisuje velice jednoduch´y poˇc´ıtaˇc, kter´y m˚uˇze b´yt v jednom z nˇekolika stav˚u, mezi kter´ymi pˇrech´az´ı na z´akladˇe symbol˚u, kter´e ˇcte ze vstupu.

(28)

5.4

Export do XML

Export v´ysledk˚u se neukl´ad´a do XML ve stromov´e hierarchii, tak jako tomu je pˇri zo-brazov´an´ı v komponentˇe ListView. Vˇsechny v´ysledky jsou jakoby v jedn´e ´urovni. Podle uˇzivatelem vybran´e cesty a n´azvu souboru se v´ysledky uloˇz´ı v n´asleduj´ıc´ım form´atu.

Element results obsahuje neomezen´e mnoˇzstv´ı element˚u result, kter´e maj´ı tyto atributy:

• title (titulek str´anky)

• fragment (´uryvek textu s hledan´ym v´yrazem)

• url (adresa str´anky)

Pˇr´ıklad takov´eho v´ystupu4:

<!DOCTYPE XML> <results>

<result title=‘‘´Uˇredn´ı deska’’ fragment=‘‘(all text)’’ url=‘‘http://www.fit.vutbr.cz/info/’’ />

<result title=‘‘Aktuality’’ fragment=‘‘(all text)’’ url=‘‘http://www.fit.vutbr.cz/lib/’’ /> <result title=‘‘Odkazy’’ fragment=‘‘(all text)’’

url=‘‘http://www.fit.vutbr.cz/links/’’ /> </results>

5.5

Grafick´

e uˇ

zivatelsk´

e rozhran´ı

Pro tvorbu uˇzivatelsk´eho rozhran´ı bylo vyuˇzito aplikace Qt Designer. Tento n´astroj slouˇz´ı k tvorbˇe rozhran´ı aplikac´ı a formul´aˇr˚u zaloˇzen´ych na Qt toolkitu. Funguje bud’ jako samo-statn´a aplikace nebo je integrov´ana jakou souˇc´ast IDE (KDevelop, Visual Studio a jin´e.). Nab´ız´ı tak´e jednoduch´y manaˇzer spr´avy sign´al˚u a slot˚u nad formul´aˇri. V aplikaci jsou pouˇzity jak komponenty samotn´eho Qt toolkitu, tak prostˇred´ı KDE5.

4

Hodnota “all text” u atributu fragment znamen´a, ˇze uˇzivatel nezadal v´yraz pro vyhled´an´ı, t´ım se ´

uryvkem textu st´av´a text cel´y.

5

(29)

Obr´azek 5.1: Vzhled aplikace

Pˇri rozloˇzen´ı komponent jsem kladl velk´y d˚uraz na jednoduchost a pˇrehlednost. Jak je vidˇet na obr´azku5.1, panel pro nastaven´ı parametr˚u hled´an´ı zab´ır´a pomˇernˇe velkou ˇc´ast okna. To v pˇr´ıpadˇe zobrazen´ı vˇetˇs´ıho poˇctu v´ysledk˚u hled´an´ı m˚uˇze b´yt znaˇcnˇe nepˇrehledn´e. Z toho d˚uvodu jsem implementoval skr´yv´an´ı panelu pro nastaven´ı parametr˚u hled´an´ı.

(30)

Kapitola 6

ysledky

C´ılem t´eto pr´ace bylo vytvoˇrit aplikaci, kter´a by prohled´avala rekurzivn´ım zp˚usobem webo-v´e str´anky. Do jak´e m´ıry se mi to podaˇrilo bych chtˇel nast´ınit v n´asleduj´ıc´ı kapitole.

Aplikace pracuje korektnˇe v desktopov´em prostˇred´ı KDE. Dok´aˇze prohled´avat web podle nejr˚uznˇejˇs´ıch krit´eri´ı, kter´a jednak vymezuj´ı pohyb robota, ale tak´e upˇresˇnuj´ı poˇzadavek na hled´an´ı v´yrazu. Samotn´e ovl´ad´an´ı je pˇresto velmi jednoduch´e a intuitivn´ı. I kdyˇz aplikace mus´ı pro vyhled´av´an´ı vˇsechny str´anky stahovat a n´aslednˇe s nimi pracovat, je rychlost hled´an´ı podle m´eho m´ınˇen´ı dobr´a. Pro srovn´an´ı na lince o rychlosti 2 MB/s prohled´a pr˚umˇernˇe 100 webov´ych str´anek za 18 sekund.

Rychlost hled´an´ı je ovlivˇnov´ana nˇekolika faktory:

• Rychlost´ı linky

• Zadan´ymi parametry pro hled´an´ı

• V´ykonem poˇc´ıtaˇce

Aplikace dok´aˇze pˇrehlednˇe zobrazit v´ysledky hled´an´ı ve stromov´e hierarchii a umoˇzˇnuje uˇzivateli otevˇr´ıt si vyhledanou str´anku ve webov´em prohl´ıˇzeˇci nebo si odkaz zkop´ırovat do schr´anky. Vˇsechny v´ysledky hled´an´ı tak´e um´ı exportovat do XML souboru.

Pro n´azornost jsem provedl test, kter´y ud´av´a, jak moc ovlivˇnuj´ı parametry pro hled´an´ı rychlost. Testovan´ymi parametry jsou Case sesitive (citlivost na velk´a a mal´a p´ısmena), Ignore diacritic (ignorov´an´ı znak˚u s diakritikou) a Whole words only (hled´an´ı jen cel´ych slov). Testov´an´ı bylo prov´adˇeno na webov´ych str´ank´ach www.fit.vutbr.cz s rychlost´ı linky 2 MB/s a po dosaˇzen´ı 150 v´ysledk˚u:

(31)

ˇ

C´ıslo Case sensitive Ignore diacritic Whole words only Casˇ

1 TRUE TRUE TRUE 28s

2 FALSE TRUE TRUE 26s

3 TRUE FALSE TRUE 28s

4 FALSE FALSE TRUE 34s

5 TRUE TRUE FALSE 24s

6 FALSE TRUE FALSE 26s

7 TRUE FALSE FALSE 25s

8 FALSE FALSE FALSE 31s

Tabulka 6.1: Z´avislost nastaven´ych parametr˚u na rychlosti hled´an´ı

Z tabulky lze vyˇc´ıst, ˇze mezi nejhorˇs´ım (24s) a nejlepˇs´ım (34s) v´ysledkem je aˇz 10s rozd´ıl, coˇz je pomˇernˇe hodnˇe. Nejv´ıce n´aroˇcn´a volba je Ignore diacritic ve stavu TRUE. Mus´ı se zde pro kaˇzd´y znak v ˇretˇezci vyhledat odpov´ıdaj´ıc´ı hodnota v k´odovac´ı tabulce, coˇz patˇr´ı k n´aroˇcnˇejˇs´ım operac´ım.

(32)

Kapitola 7

avˇ

er

Pr´ace se zab´yvala real-time vyhled´avaˇcem, kter´y proch´az´ı web rekurzivn´ım zp˚usobem. Hlavn´ım c´ılem byla snaha o co nejrychlejˇs´ı hled´an´ı. Tento c´ıl byl z vˇetˇs´ı ˇc´asti splnˇen. V´ıce neˇz polovinu pr´ace na aplikaci tvoˇrila optimalizace a ladˇen´ı.

Nejvˇetˇs´ım probl´emem bylo nauˇcit aplikaci stahovat soubory tak, aby souˇcasnˇe nebloko-vala uˇzivatelsk´e rozhran´ı. Pro stahov´an´ı soubor˚u jsem vyzkouˇsel nejr˚uznˇejˇs´ı knihovny. Na-konec jsem probl´em vyˇreˇsil knihovnou pˇr´ımo od Qt toolkitu za pomoci sign´al˚u a slot˚u. Jedn´ım z dalˇs´ı probl´em˚u se uk´azal HTML parser, jehoˇz vytvoˇren´ı bylo ˇc´asteˇcnˇe proble-matick´e.

Aplikace by se do budoucna mohla rozˇs´ıˇrit napˇr´ıklad o inteligentn´ı odhad poˇctu prohle-dan´ych str´anek. I pˇres tento fakt je aplikace plnˇe pouˇziteln´a.

(33)

Literatura

[1] Baeza-yates and B. Ribeiro-Neto. Modern Information Retrieval. Addison-Wesley, ACM Press, 1999. ISBN 0-201-39829-X.

[2] Jasmin Blanchette and Mark Summerfield. C++ GUI Programming with Qt 3. Prentice Hall PTR; Pap/Cdr edition, 2004. ISBN 978-0131240728.

[3] Andrei Broder. A taxonomy of web search. ACM Press, 2002. ISSN 0163-5840.

[4] Interval.cz. Stavov´e k´ody a hl´aˇsen´ı v odpovˇedi protokolu HTTP.

http://interval.cz/clanky/stavove-kody-a-hlaseni-v-odpovedi-protokolu-http/, 2002.

[5] KDE. KDE Application Developers’ Checklist.

http://developer.kde.org/documentation/other/checklist.html.

[6] Ken Martin and Bill Hoffman. Mastering Cmake 2.2 Edition (Paperback). Kitware, Inc., 2006. ISBN 978-1930934160.

[7] Stephen Prata. Mistrovstv´ı v C++. Computer Press, 2004. ISBN 80-251-0098-7.

[8] Jan Pytel. Objektov´e uˇzivatelsk´e grafick´e prostˇred´ı pro vyrovn´av´an´ı geodetick´ych s´ıt´ı. Master’s thesis, ˇCesk´e vysok´e uˇcen´ı technick´e v Praze, 2001.

[9] Robert Sedgewick. Algoritmy v C. SoftPress, 2003. ISBN 80-86497-56-9.

[10] W. Richard Stevens, Bill Fenner, and Andrew M. Rudoff. UNIX Network Programming Volumen 1, Third Edition: The Sockets Networking API. Addison Wesley, 2003. ISBN 0-13-141155-1.

[11] Trolltech. Text Related Classes. http://doc.trolltech.com/3.3/text.html, 2005.

[12] Wikipedia. Document Object Model.

http://cs.wikipedia.org/wiki/Document Object Model, 2007.

[13] Wikipedia. Finite state machine.

(34)

Dodatek A

Koneˇ

cn´

y automat HTML parseru

References

Related documents

To capture CNVs within CDH candidate regions, we developed and tested a targeted array comparative genomic hybridization platform to identify CNVs within 140 regions in 196 patients

In this study using difference-in-differences models, the 2006 Massachusetts health care reform was associated with a 26% increased rate of thyroidectomy for treating thyroid cancer

 Chair of Information Systems and Management (Prof. Veit) and Chair for Value Based Marketing (Prof. Paul) both focus on digital media in research and teaching..  Bachelor and

Basing on implications of the current web on everyday action, this paper suggests necessary and recommended changes for geographical learning, focusing on the improvement of

Among the most notable food markets are the Neighbourgoods Market which operates in Braamfontein the Market on Main in Maboneng Precinct, the Fourways Farmers Market,

We estimated the number of cancer cases and deaths attributable to alcohol drinking in 2002 by sex and WHO subregion, based on relative risks of cancers of the oral cavity,

Ultraviolet and optical stellar spectra of the HgMn slowly rotat- ing star HD 175640, observed with both HST-STIS and UVES instruments, were used to extend and discuss the atomic