Hajautetut ja samanaikaiset järjestelmät 6.5.2008 Harjoitus 8 Nämä harjoitukset ti 6.5 klo 10.30 - 12 salissa T/D106, molemmat ryhmät yhdessä. Viimeiset luennot 28.-29.4. Kurssin loppukoe 6.5. 08.00-10.00. Muunnetaan viimeviikkoinen ajansopiminen JavaRMI -versioksi. Nyt palvelin tarjoaa ajansopimisrajapinnan (AgreeServerInterface) johon asiakkaat rekisteröityvät ja jolla asiakkaat aloittavat uuden ajansopimisen. Kun ajansopiminen on aloitettu, palvelin pyytää kaikilta rekisteröityneiltä asiakkailta (myös sopimisen aloittaneelta) sopivia aikoja. Kun vastaukset on saatu (tai kohtuullinen aika kulunut), palvelin ilmoittaa valitun ajan kaikille vastanneille asiakkaille. Aikojen pyytäminen ja päätöksen ilmoittaminen tehdään aika-asiakasrajapinnan (AgreeClientInterface) kutsuin. Asiakas siis avaa käynnistyessään ko. rajapinnan ja välittää palvelimelle etäviittauksen siihen rekisteröityessään. Palvelin muistaa nämä viittaukset ja ottaa niihin yhteyden tarvittaessa. Kukin erillinen ajansopiminen tunnistetaan kokonaislukutunnuksella jonka aloittanut asiakas lähettää aloituksen yhteydessä. Seuraava X4 tehtävä on pakollinen kaikille opiskelijoille. X-tehtävien ratkaisujen pitää olla kunkin opiskelijan itse tekemiä. Saman ratkaisun kopioita ei hyväksytä (versioitunakaan). Vastaukset pitää lähettää edeltävänä päivänä (ma) klo 14.00 mennessä sähköpostitse allaolevaa ohjetta käyttäen. Saat automaattisen vastauksen pian onnistuneen lähetyksen jälkeen. Vastauksen on sisällettävä (ohjelman kommenttina) lyhyt itsearviointi jossa arvioit ratkaisun toimivuutta, luotettavuutta ja mahdollisia parannusmahdollisuuksia. Oikea itsearvointi (jonkinlaiseen ratkaisuun) on yhden pisteen arvoinen. Lähetä ratkaisusi cs:n käyttäjälle sjuva käyttäen viestin otsikkona merkkijonoa HS_X4_tunnus missä tunnus on sinun cs-käyttäjätunnuksesi (tai tunnus@cc). Helpointa lähettäminen on cs:ltä käyttäen komentoa: /usr/ucb/mail -s HS_X4_tunnus sjuva < tunnus.java missä tunnus on cs-käyttäjätunnuksesi ja tunnus.java on ohjelmatiedosto joka sisältää vastauksesi. Jotta tehtävä kääntyisi, on pääohjelman luokan nimen oltava täsmälleen sama kuin käyttäjätunnuksesi (kuitenkin ilman @cc tms. osuutta). AgreeProto, AgreeClientInterface, AgreeServerInterface tai palvelimen luokkia ei tarvitse sisällyttää mukaan. Huomaa myös, ettei Java-kääntäjälle kelpaa HTML, MIME, allekirjoitukset, eikä merkkijonojen/kommenttien jakaminen usealle riville. X4) Kirjoita ym. protokollan mukainen asiakas. Tämä koostuu kahdesta osasta, toisaalta käyttäjän kanssa sopimisen käynnistävästä osasta (joka ottaa yhteyden palvelimeen) ja kuuntelevasta osasta joka vastaa palvelimelta tuleviin aikapyyntöihin. Kuunteleva osa on AgreeClientInterface:n toteutus. Käyttäjän annettua sopivat ajat, ohjelma ottaa yhteyden palvelimeen (ja antaa ajat palvelimelle kun se niitä pyytää). Muiden aloittamille sopimisille riittää satunnaisesti arvotut ajat. Ota runko ja rajapintatiedostot www-sivulta (jossa on myös palvelin testaamista varten). 45) Oletetaan salaseura joka voi vaihtaa avaimia kokouksissaan. Täydennä edellisen tehtävän rajapinnat (mutta ei niiden toteutusta) sellaisiksi, että kaikki liikenne salataan. Kuvaa myös miten rajapintoja on käytettävä (sillä tarkkuudella, asiakkaan ja palvelimen voi toteuttaa käyttäen vain tätä rajapintaa). 46) Jatketaan tehtävän 26 (harj. 5) ajansopimista oletuksella, että monilähetyksessä osa viesteistä (esim. 20 %) katoaa. Miten ajansopiminen voitaisiin saada toimimaan oikein suurella todennäköisyydellä, mutta kohtuullisella määrällä monilähetyksiä? Käytä pelkkiä monilähetyksiä (ei yksittäisviestejä). 47) Jatka edellistä tehtävää varmistamalla että sopiminen toimii aina myös huono-onnisella joukkiolla. 48) Oletetaan joukko (esim. 32) henkilöitä istumaan piiriin siten, että kullakin on näyttötaulu johon hän itse voi kirjoittaa ja jonka kaikki näkevät (CROW). Aluksi kullakin on taulullaan yksi luku. Miten henkilöt voisivat nopeasti (o(n)) laskea lukujen summan siten, että lopussa summa olisi kullakin taululla? Kirjoita toimintaohjeet henkilöille.