Erinevus lehekülje "ITI0011:Säuts draft" redaktsioonide vahel

Allikas: Kursused
Mine navigeerimisribale Mine otsikasti
31. rida: 31. rida:
 
* ...
 
* ...
  
 +
Argumendid võivad tulla suvalises järjekorras. Ehk siis kaks järgnevat käivitamist peaks andma sama tulemuse:
 +
 +
 +
  java Twitter Tallinn -count 50 -sort date desc -search tere
 +
 +
  java Twitter Tallinn -search tere -sort date desc -count 50
  
 
== Lisaosa: Kohanimede puhverdamine faili (2p) ==
 
== Lisaosa: Kohanimede puhverdamine faili (2p) ==

Redaktsioon: 18. märts 2015, kell 15:37

Põhiosa

Säuts

Põhiosa: käsurealt juhtimine

Programm peab olema juhitav käsurealt, näiteks

 java Twitter Tallinn -count 50 -sort date desc -search tere

Minimaalne käivitamine toimub näiteks selliselt:

 java Twitter Tallinn

kus

  • java on java programm ise, mis hakkab teie programmi jooksutama.
  • Twitter on klassi nimi, mida käivitatakse
  • Tallinn on asukoht, mida otsitakse.

Seega sellise käivitamise puhul antakse teie programmi ette üks argument: "Tallinn"

Kui programm pannakse käima ilma argumentideta, tuleb kasutajala kuvada juhised, kuidas programmi käima panna.

Argumendid, mida programm peab ära tundma:

  • -help (põhiosa) - kuvab kasutajale juhise, kuidas programmi käima panna. Peale juhiste kuvamist pannakse programm kinni, väljumiskood (exit code) peaks olema 1. Samad juhised näidatakse (ja sama väljumiskood tagastatakse) siis, kui:
    • programm pannakse ilma argumentideta käima või
    • sisestatud argumendid on valed
  • -count num (põhiosa) - määrab ära, mitu säutsu välja näidatakse. Kui see puudub, siis praks programmis olema määratud vaikimisi säutsude kogus 15.
  • -sort field [asc|desc] (lisaosa) - määrab ära, kuidas säutsud järjestatakse väljaprintimiseks. Väli võib olla kas: author, date või tweet. Valikuliselt võib kaasa panna kas asc või desc. Esimesel juhul toimub järjestamine kasvavalt, teisel juhul kahanevalt. Kui pole määratud, siis vaikimisi järjestatakse kasvavalt. Vaata ka vastavat lisaosa kirjeldust.
  • -search keyword (lisaosa) - kuvatakse vaid säutsud, milles esineb etteantud otsisõna.
  • ...

Argumendid võivad tulla suvalises järjekorras. Ehk siis kaks järgnevat käivitamist peaks andma sama tulemuse:


 java Twitter Tallinn -count 50 -sort date desc -search tere
 java Twitter Tallinn -search tere -sort date desc -count 50

Lisaosa: Kohanimede puhverdamine faili (2p)

Kuna linnade/asukohtade koordinaadid ei ole ajas muutuvad, siis ei ole mõtet igal korral, kui kasutaja otsib "Tallinna" kohta säutse, uut koordinaatide päringut teha. Tulemus on väga suure tõenäosusega täpselt sama, mis eelmisel korral. Seoses sellega oleks mõistlik salvestada tulemused kuskilt puhvrisse (faili) ning neid hiljem sealt lugeda.

Selle lisaosa funktsionaalsus on:

  • asukoha koordinaatide päringu tulemused salvestatakse faili, et järgmisel korral ei peaks neid uuesti küsima (kohalik cache)
  • nimetatud faili saab lisada ise uusi asukohti (näiteks "kodu", "TTÜ" jne)

Puhverdamiseks kasuta vaikimisi faili "kohad.csv", mis peab olema sinu programmile kättesaadav (soovitavalt paikneb samas kataloogis käivitatava klassiga) ja peab koosnema CSV kujul ridadest:

   ametlik_nimi,latitude,longitude,raadius_km,alternatiivnenimi_1,..,alternatiivnenimi_N

või ridadest, kus koordinaadid ja raadius on puudu:

   ametlik_nimi,,,,alternatiivnenimi_1,...,alternatiivnenimi_N

kus

  • ametlik_nimi on kohanimi, mida otsitakse API-st (näiteks tallinn)
  • alternatiivnimi_1, ..., alternatiivnimi_N on nimed, mida kasutaja saab sisestada. Näiteks saab kasutaja siin määrata "kodu". Kui vastav päring tehakse, otsitakse tegelikult ametlik_nimi asukohta (või kasutatakse juba olemasoelvaid koordinaate ja raadiust, kui need on olemas) (näiteks kodu,elupaik)
  • latitude, longitude ja raadius_km on standardse tähendusega. Need võivad puududa. (näiteks: 59.4,24.5,10)

Sinu programm kasutab puhvrifaili järgmiselt:

  • Enne asukoha API poole pöördumist vaatab programm, kas vastav kohanimi on selles failis olemas
    • Kui jah, ja koordinaadid-raadius on antud, kasutab ta koordinaate ja raadiust Twitteri päringu tegemiseks. Asukoha päringut ei tehta
    • Kui jah, aga koordinaadid on puudu, siis
      • teeb uue asukoha API päringu ametliku kohanime järgi, leiab koordinaadid ja arvutab raadiuse
      • kirjutab saadud koordinaadid ja raadiuse vastava rea juurde. Järgmisel korral sama päringu puhul pole vaja asukoha API-t enam kasutada.
    • Kui ei, siis tehakse uus päring ning puhverdatakse tulemused faili (kirjutatakse uus rida, kus on ametlik_nimi, koordinaadid ja raadius: pärnu,58.3800572,24.5200466,5).

Näited:

1) kohad.csv:

   tallinn,59.4,24.5,10,kodu,ttü

Kui tehakse otsing "tallinn", siis kasutatakse koordinaate 59.4 ja 24.5, raadius = 10km. Sama juhtub, kui teha päring "ttü", "kodu". kohad.csv fail ei muutu.


2) kohad.csv:

   pärnu,,,,vanaema,suvila

Kui tehakse otsing "pärnu" või "vanaema" või "suvila", siis otsitakse asukoha API-ga üles "pärnu", loetakse välja koordinaadid ja arvutatakse välja raadius. Tulemuseks on sama rida failis:

   pärnu,58.3,24.5,5,vanaema,suvila

3) kohad.csv:

   tallinn,59.4,24.5,10,kodu,ttü

Kui tehakse otsing "pärnu", siis tehakse asukoha otsing "pärnu" ja salvestatakse koordinaadid ja raadius faili. Tulemuseks on fail:

   tallinn,59.4,24.5,10,kodu,ttü
   pärnu,58.3,24.5,5

4) kohad.csv

   tallinn,59.4,24.5,10,kodu,pärnu
   pärnu,58.3,24.5,5

Kui tehakse otsing "pärnu", siis kasutatakse infot teiselt realt. Ehk siis ametlik nimi on prioriteetsem kui alternatiivsed nimed. Kui sellist ametlikku nime ei leidu, otsitakse alternatiivsete nimede seast.

Faili sisu ei tohi olla tõstutundlik, ehk siis otsingud jm toimub case-insensitive printsiibil, kus suur- ja väiketäht on võrdsed ("Pärnu", "pärnu" ja "PÄRNU" on kõik samad).

Teie programmis mingeid muid operatsioone ei pea failiga tegema (näiteks kustuta rida või muuda vms). Faili muutmine toimub käsitsi. Samuti ei pea te otseselt tegelema valesti formaaditud failiga. Samas, kui tekib viga andmete lugemisel, ei tohiks see programmi kinni panna. Pigem kui cache'i ei suudega lugeda, siis arvestada olukorraga nagu cache puudub (kõik päringud tehakse veebist).

See lisaosa täielikult realiseerituna annab 2 punkti.


Lisaosa: sortimine ja filtreerimine(otsimine) (1p)

Võimaldab säutse sorteerida vastavalt etteantud väljale. Sorteerida saab järgmiste väljade järgi:

  • autor
  • postituse kuupäev
  • postitus (ehk siis säutsu tekst)

Sorteerida saab nii kasvavas (väiksemad ees, näiteks: a, b, c, ... või 1, 3, 5, ...) kui kahanevas (suuremad ees, näiteks: ü, ö, ä, ... või 9, 8, 4, ...) järjekorras.

Samuti on võimalik anda ette otsisõna. Näidatakse välja vaid neid säutse, kus otsisõna esineb. Vihjeks: teie kasutada olev teek võimaldab otsingut suhteliselt lihtsalt teha.

Selle lisaosa täielik realiseerimine annab 1 punkti.

Lisaosa: interaktiivne juhtimine