Vorgurakendused 2 prax 2

Allikas: Lambda
Redaktsioon seisuga 10. november 2010, kell 14:45 kasutajalt Tammet (arutelu | kaastöö)
Mine navigeerimisribale Mine otsikasti

siit leiad 2009 praktikumi arhiivi


Praktikumi eesmärk on mahuka rehkenduse paralleliseerimine, arendades vajaliku funktsionaalsuse esimeses praksis tehtud rakenduse külge.

Selleks pead realiseerima süsteemi, kus üks rakendus - tööde koordinaator - jagab mahuka ülesande tükid teistele rakendustele, viimased täidavad need tükid, raporteerivad tulemused kordinaatorile, kes omakorda väljastab lõpptulemuse.

Ülesanne, mida lahendada, on objektide (hoonete vms) ehitusaastate leidmine suurt hulka veebilehti läbi otsides ja enimleitud aasta väljaselgitamine.

Konkreetsemalt:

  • koordinaatoril peab olema hulk URL-e, mille taga on harilikud veebilehed, mis tõenäoliselt (aga mitte tingimata kõik) sisaldavad infot ühe konkreetse objekti ehitusaasta kohta. Need URL-d võid võtta kas
    • ise objekti googeldades (näiteks "Eiffel tower") ja tulemused käsitsi faili kirjutades, mille koordinaatorile ette annad
    • või siis - parem variant - lastes koordinaatoril endal seda objekti googeldada, kasutades näiteks Google search API-t.
  • koordinaatoril peab olema mingi hulk IP-sid ja porte, kust ta otsib töötavaid rakendusi, millele ülesandeid jagada:
    • kas lihtsalt kontrollides etteantud IP/pordipaare (et kas seal on töötav rakendus)
    • või - parem variant - tehes eraldi rekursiivse/iteratiivse otsingu, leidmaks juurde IP/pordipaare, kus on töötav rakendus
  • koordinaator peab jagama ülesanded leitud töötajate vahel:
    • kas jagades N urli M töötajate vahel enamvähem võrdsetes osades
    • või - parem variant - jagades ülesanded väiksemate portsude kaupa, eeldades, et mõni töötaja saab varem valmis ja talle võiks anda järgmise portsu
  • töötaja peab leidma võimalike aastaarvude loetelu koos esinemiskordadega:
    • võtab tsüklis järgmise urli talle antud portsust, tõmbab endale urlil oleva teksti (misiganes formaadis)
    • jaotab teksti punkide järgi "lauseteks" ja visates välja ülipikad "laused". Osa lauseid ilmselt ei ole inimkeelsed "normaalsed" laused, vaid on näiteks css või javascripti tekst vms: sellest pole midagi. Ülipikad "laused" lihtsalt on suure tõenäosusega mitte-inimkeelsed ja neid pole ilmselt mõtet arvestada.
    • otsib välja kõik laused, kus on sees uuritava objekti nimi (näiteks "Eiffel tower") ja vaatab, kas selles lauses esineb aastaarv.
    • aastaarvuna käsitleme mistahes neljakohalist numbrit, näiteks 2010 või 1234 või 1889.
    • jätab meelde kõik selliselt leitud aastaarvud (st aastaarv lauses, kus oli objekti nimi) ja nende esinemiskordade arvu: võid nimelt leida hulga erinevaid arve, mõned lihtsalt on sagedamini esinevad.
    • raporteerib leitud aastaarvude/esinemiskordade loendi tagasi koordinaatorile
  • kui koordinaator on saanud raportid kõigilt töötajatelt, koostab ta omakorda koondnimekirja aastaarvude/esinemiskordadega ning trükin välja kõige enam leitud arvu kui tõenäolise vastuse, pluss huvi mõttes kogu nimekirja aastaarvudest/esinemiskordadest
    • parem variant: kui mingi N sekundi jooksul kõigilt töötajatelt vastuseid ei saa (mõni läheb näiteks offline) siis trükkida ikkagi tulemus välja hetkeseisuga





- konkreetsem ülesanne on leida hoonete ehitamisaegu

 veebist crawlides


 - koordinaatoril on N urli


 - jagab urlid laiali, igaühele M tk


 - igaüks tõmbab urlilt lehe ja otsib kas leiab
   mingil moel arusaadavalt ehituse aja


 - koordinaator võtab ajad kokku ja vaatab, mis
   on kõige rohkem vastatud aeg ja valib selle


 - Aastaarvu otsimise põhimõte:


   otsingu jaoks vaja fraas ja url
   tõmbame urlilt htmli
   splitime htmli lauseteks punktide järgi
   võib visata välja ülipikki lauseid
   vaatame, kas lauses on etteantud fraas
   vaatame, kas samas lauses on aastaarv kujul
   1250 või 2004 vms (neli numbrit) või sajand
   kujul 12th või 20th vms.


 - NB! tingimata vaja M urli läbi käia ja leida
   lõpuks kõige rohkem esinenud aasta