Vorgurakendused 2 prax 2

Allikas: Lambda

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.

Ülesande detailid

Konkreetsemalt:

  • koordinaatorile peab saama ette anda otsitava objekti nime (näiteks "Eiffel tower") ja hulga URL-e, mille taga on harilikud veebilehed, mis tõenäoliselt (aga mitte tingimata kõik) sisaldavad infot selle 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

Hindamispõhimõtted ja realiseerimissoovitused

Töö arvestamiseks peab ülalkirjeldatud põhifunktsionaalsus töötama ning pead suutma seda demonstreerida kahe otsitava objekti peal (vali ise huvitavad objektid). "Parem variant" funktsionaalsusi ei pea realiseerima.

Töö hindamisel vaadatakse, kas on täiendavalt realiseeritud mõned "parem variant" funktsionaalsused või lisatud ise mõni huvitav/praktiline funktsionaalsus või tehtud huvitavaid uuringuid.

Näiteks, võid katsetada erinevaid stsenaariume (üks masin X klienti, Y masinat, ...) ja koguda ajastatistikat - kas mitu klienti tegid kiiremaks/aeglasemaks/kui palju, kuidas masinate/klientide arv mõjutas jne - ja teha sellest väike raport.