Vorgurakendused 2 prax 2: erinevus redaktsioonide vahel

Allikas: Lambda
Mine navigeerimisribale Mine otsikasti
Resümee puudub
 
(ei näidata sama kasutaja 6 vahepealset redaktsiooni)
1. rida: 1. rida:
Ülesandeks on arendada edasi esimeses praktikumis tehtud kodutööd, lisades sellele multichati (mitme osalisega chati) funktsionaalsuse, pluss veel mõningat täiendavat funktsionaalsust.
[[Vorgurakendused_2_prax_2 2009| siit leiad 2009 praktikumi arhiivi]]




== Põhinõuded ==


Sinu P2P chatirakendus peab suutma pidada samaaegset chati N teise kasutajaga. Sinu kirjutatav tekst peab jõudma kõigini neist, nende kirjutatud tekst peab jõudma sinuni ja sa pead selle välja kuvama.
Praktikumi eesmärk on mahuka rehkenduse paralleliseerimine, arendades vajaliku funktsionaalsuse esimeses praksis tehtud rakenduse külge.  


Teise inimese chatti lisamiseks sisestad tema kasutajanime: kui ta on online ja vastab, lisatakse ta chatti.
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.


Eeldame, et korraga on igaühel käimas üks chatt: kasutajal ei ole mitut eri chatti samaaegselt.  
Ülesanne, mida lahendada, on objektide (hoonete vms) ehitusaastate leidmine suurt hulka veebilehti läbi otsides ja enimleitud aasta väljaselgitamine.


Kõk chatiosalised  peavad nägema, kes on chatis (käsurealt tehes vahel trükkida, akent kasutades kuvada mingis eriosas).
== Ülesande detailid ==


Igaühel peab olema võimalus chatist lahkuda: selleks tuleb saata sõnum või vastus teistele osavõtjatele, et minuga enam ühendust ei võetaks.
Konkreetsemalt:


Kui osalisega ühendus kaob ilma, et ta lahkuks, siis kuvatakse ta chatiosaliste seas hoiatava märkmega.
* 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.


Võid realiseerida ka automaatse väljaviskamise, kui kasutajaga ühendust pole viimase N minuti jooksul õnnestunud.
* 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


Kui lisad kellegi chatti, peab talle saatma käimasoleva chati M viimast sõnumit või M viimase minuti jooksul saadetud sõnumid, omal valikul. Samuti, kui kasutaja kaob ajutiselt chatist (temaga ei saa ühendust) ja seejärel tagasi tuleb, tuleb talle saata sõnumid, mis tal vahepeal kätte saamata.
* 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


Kasutaja peab saama valida/sisestada oma kasutuskeele. Vaikimisi valitakse inglise keel.
* 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


Chatisõnumi reas peab olema näha:
* 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
* saatja
** 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
* aeg (saatja pool)
* keel
* sõnum


== Vaheserveri nõue ==
== Hindamispõhimõtted ja realiseerimissoovitused ==


Tulemüüride takistusest ümbersaamiseks peab sinu rakendus suutma kasutada [http://ahman.no-ip.info/chat/ seda vaheserverit]. Võid vaheserveri toodud protokolli järgi ka ise realiseerida.  
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.


NB! Kui sinu rakendus vaheserverit kasutada ei suuda, siis saad praktikumi ikkagi arvestatud, lihtsalt teatud arvu miinuspunktidega.
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.


== Protokoll ja spetsifikatsioon ==
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.
 
Erinevalt esimesest praktikumist pead seekord ise protokolli välja töötama. Võid kasutada ka teiste tudengite tehtud protokolli, st enda eridisain ei ole otseselt kohustuslik.
 
Protokoll tuleb arusaadavalt ja selgitustega kirja panna ja praktikumijuhendajale võimalikult vara ette näidata, <b>kindlasti</b> enne praktikumi näitamist! Protokolli ettenäitamisega hilinemine võtab punkte maha.
 
== Lisafunktsionaalsus ==
 
Chatile võiksid lisada automaatse keeletõlke, mis tõlgib X keeles sissetulnud teksti automaatselt sinu poolt valitud Y keelde. Selleks tõlkeks kasutada [http://code.google.com/p/google-api-translate-java/ Google translate API-t].
 
Keeletõlke lisamine annab ekstrapunkte.

Viimane redaktsioon: 10. november 2010, kell 14:53

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.