ForeverNotes

From ICO wiki
Jump to navigationJump to search

Meeskond ja rollid

  • Margus Muru – projektijuht, põhiline Notes tab arendaja
  • Martin Nigul – põhiline To-Do tab arendaja
  • Joosep Koort – põhiline RSS tab arendaja

Tehnoloogia

Kasutatav tehnoloogia: C#, WPF, TFS

Idee

Analüüs

Mida see endas sisaldab?

Projekt sisaldab endas WPF rakendust, andmebaasi ja rohkem testimise eesmärgil konsoolirakendust. Andebaasi saab lisada uusi kasutajaid, neile märkmeid, ülesandeid ja uudistevoogusid.

Mis on selle eesmärk?

Eesmärk on luua kasutajale mugav keskkond oma märkmete, to-do nimekirjade ja rss uudistevoogude haldamiseks ja huvitavate artiklite salvestamiseks. Tavaliselt on sellised rakendused eraldiseisvatena, me paneme need kolm kokku. Nii on kasutajal üksainus rakendus kõige tegemiseks ega pea pidevalt vahetama eri rakenduste vahel.

Mida tavakasutaja sellega teha saaks?

ForeverNotes on osalt sarnane populaarse rakendusega Evernote. Kasutaja saab luua märkmeid, mille juurde kuulub pealkiri, sisu ja tag-id, mille abil saab varasemaid märkmeid otsida ja sorteerida. Märkmeid saab omakorda jagada kaustadesse (gruppidesse, nt toiduretseptid, artiklid, õpetused jne). To-do nimekirjade haldamine käib sarnaselt. Kasutaja saab luua erinevad nimekirjad (nt teemade järgi), lisada sinna uusi ja märkida olemasolevaid tehtuks või neid eemaldada. Samuti saab lisada märke ülesande prioriteedi ja tähtaja kohta. RSS uudistevoo haldur laseb lisada uusi vooge, neid grupeerida, neist uudiseid lugeda ja uudiseid salvestada märkmeteks.

Funktsionaalsus

Must have

  • Uute märkmete loomine, neile pealkirja, sisu ja tag-ide lisamine. Tag-ide kirjutamisel märkme päisesse peaks olema ennustus olemasolevate tag-ide põhjal. St kui kasutaja kirjutab olemasoleva tag-i paar esimest tähte, siis saab vajutada tab-i ja ülejäänud osa lisatakse. Kiirendab tag-ide lisamist ning aitab vältida duplikaate, kus tag-id erinevad mõne tähe või suur-väiketähe poolest.
  • Olemasolevate märkmete muutmine ja kustutamine. Eraldi kaust "prügi", kuhu märkmed kõigepealt liigutatakse. Kui kasutaja peaks peale esmast kustutamist meelt muutma, saab sealt märkme uuesti eelnevasse kohta tagasi liigutada. Kui ka "prügi" kaustast kustutada, kustutatakse märge lõplikult.
  • Märkmete grupeerimine kaustadesse. Nimekiri kaustades, millele klikkides kuvatakse nimekiri neis olevatest märkmetest. Ei luba duplikaatnimedega kaustasid.
  • Märkmete grupeerimine tag-ide alusel. Eraldi nimekiri olemasolevatest tag-idest, klikkides kuvatakse nimekirja vastava tag-iga märkmetest. Nimekiri peidetav põhiaknas.
  • Märkmete otsing sisu ja tag-ide järgi. Otsinguribale mingi märksõna, nt "#tag" ette lisamisel otsitakse vaid tag-ide järgi, "#heading" puhul vaid pealkirjadest.
  • Märkmeid ei pea pärast muutmist käsitsi salvestama, see käib automaatselt (programmi sulgemisel või mingi aja tagant.)
  • Kasutaja saab märkme salvestada txt faili arvutisse.
  • TO-DO ülesannete lisamine, olemasolevate muutmine, kustutamine ja tehtuks märkimine
  • TO-DO ülesannete otsing.
  • TO-DO ülesannetele tähtaegade lisamine
  • TO-DO ülesannetele prioriteetide lisamine
  • TO-DO nimekirjade loomine, ülesannete liigutamine ühest nimekirjast teise.
  • RSS uute uudistevoogude lisamine, kustutamine
  • RSS voogude grupeerimine nende lihtsamaks leidmiseks, kui kasutajal neid palju on.
  • Loetud uudised märgitakse loetuks (teist värvi taust/tekst vms)
  • Uudiste salvestamine märkmeteks.
  • tab-itud kasutajaliides, kasutaja valib mida parasjagu teha tahab, põhiakna sisu muutub selle järgi. Umbes nagu veebibrauseris tab-ide vahetamine.

Nice to have

  • Kasutajaliidesest saaks osasid "välja rebida" eraldi aknasse. Nt uue märkme loomine saab toimuda ka eraldi väiksemas aknas, mitte ainult põhiaknas.
  • Märkmetesse lisaks tekstile ka piltide lisamine. (Drag-n-drop)
  • TO-DO ülesannetele mingi teavitus vms kui tähtaeg on lähenemas. Rakendusesisene. Kui aega tõesti peaks palju üle jääma siis ehk kuidagi integreerida windows10 notification-itega.
  • Mingi aja tagant uuendab uudistevoogusid või valitud voogusid ja teavitab, kui seal on uusi uudiseid mida kasutaja pole lugenud.
  • Programmis kasutaja seadistused salvestatakse andmebaasi. Sisse logides muudetakse vastavalt andmebaasi seadistustele.
  • Märkmetes saab valida erinevaid fonte, värve kirjasuurusi.
  • Kasutajaliidesel erinevad värvilahendused, mille vahel saaks valida.

MVP

Võimalikud probleemid

  • Milliste osade realiseerimine võib osutuda problemaatiliseks? Andmebaasist päringute tegemine ja märkmete kuvamine viisil, kus rakendus ei muutu aeglaseks mäluõgardiks ka suurte märkmete/ülesannete/uudistevoogude olemasolul.

Dokumentatsioon

Arendusprotsessi kirjeldus

Projektiga alustasime oktoobri lõpus. Arendus toimus enamjaolt kodudes, kus kõik meeskonna liikmed olid TeamSpeak-is ning arendasd koos. Rakenduse visuaalse poole loomisel saime eeskoju varem tuntud rakendustest Evernote ja Wunderlist. Suurejoonelisem arendamine algas jaanuaris, kus tuli rohkem aega projektiga tegeleda. Projekti arendus algas rakenduse visuaalse poole loomisega. Algselt sai valmis Notes tabi kujundus, mis sai ka To-Do tabile ja vähesel määral ka RSS tabile eeskujuks. Peale selle loomist algas meeskonna liikmete paralleelne arendamine kolme eri tabi vahel. Alustati tabide põhifunktsionaalsusest, objektide loomine ning seejärel kui põhiloogika oli valmis, hakati liitma funktsioone ka andmebaasiga, et toiminguid salvestada.

Lahenduse kirjeldus

Rakendus on kirjutatud C# keeles kasutades Windows Presentation Foundation tehnoloogiat. Rakenduse peamine funktsioon on märkmete loomine ja haldamine, tehtavate asjade nimekirja loomine ning RSS uudisevoo edastamine. Jaotasime rakenduses loogika ja koodi MVVM (Model-View-ViewModel) struktuuri järgi, päringute tegemiseks kasutatakse LINQ komponenti ning andmete hoiustamiseks tuleb igas klient-arvutis luua Microsofti SQL andmebaas. Äriloogikaks on rakendusel BO-d (Business Objects).

Andmebaas

Rakenduse andmebaas koosneb 9st tabelist:

  • Note – hoiustab andmeid märkmete (note-de) kohta. Note ID, pealkiri, sisu, loomise kuupäev, muutmise kuupäev
  • GroupConnection – kirjeldab ära, milline note, millistesse gruppidesse kuulub.
  • NoteGroup – hoiustab andmeid note gruppide kohta. NoteGroup ID, nimi, loomise kuupäev, muutmise kuupäev.
  • TagConnection – kirjeldab ära, milline note, milliste tagidega seotud on.
  • Tag – hoiustab andmeid tagide kohta. Tag ID, nimi, loomise kuupäev, muutmise kuupäev.
  • RSSFeed – hoiustab infot RSS feedide kohta. Feed ID, loomise kuupäev, URL.
  • ToDo – hoiustab andmeid ToDo-de kohta. ToDo ID, sisu, loomise kuupäev, muutmise kuupäev, märgitud ja prioriteet.
  • ToDoGroupConnection – kirjeldab ära, milline ToDo, millisesse gruppi kuulub.
  • ToDoGroup – hoiustab andmeid ToDo gruppide kohta. ToDoGroup ID, nimi, loomise kuupäev, muutmise kuupäev.

Business Objects

Meil on 6 Business Objekti:

  • FeedBo – hoiab infot feedide (uudiste) kohta, mida alla laetakse. Lisaks sünkroonimisstaatus(Create, Update, Remove, jne).
  • NewsBo – hoiab infot iga eraldi uudise jaoks.
  • NoteBo – hoiab infot iga eraldi note jaoks. Lisaks sünkroonimisstaatus(Create, Update, Remove, jne).
  • NoteGroupBo – hoiab infot iga eraldi note grupi kohta ning nimekiri notedest. Lisaks sünkroonimisstaatus(Create, Update, Remove, jne).
  • ToDoBo - Info iga ToDo kohta. Lisaks sünkroonimisstaatus(Create, Update, Remove, jne).
  • ToDoGroupBo – Info iga ToDo grupi kohta. Nimi, kuupäevad, gruppi kuuluvad ToDo-d. Lisaks sünkroonimisstaatus(Create, Update, Remove, jne).

Teenused (Service)

Meil on 4 Service klassi:

  • LogService - Hoiab nimekirja logidest. Ei sünkrooni andmebaasiga.
  • NoteService - Suhtleb andmebaasiga märkmete, tag-ide ja märkmegruppidega seoses.
  • RssService - Suhtleb andmebaasiga uudistevoogude osas.
  • ToDoService - Suhtleb andmebaasiga ToDo-de osas.

Vaatemudelid

Meil on 5 vaatemudelit:

  • LogWindowVM - logide akna loogika.
  • MainVM - teiste VM-ide parent klass.
  • NotesTabVM - Notes tab vaate loogika.
  • RSSTabVM - RSS tab vaate loogika.
  • ToDoTabVM - ToDo tab vaate loogika.

Kasutajaliides

Kasutajaliides koosneb ühest põhiaknast, millel on 3 eri tabi. Esimene on Notes tab, kus toimetatakse märkmetega, teine on To-Do tab, kus toimetatakse todo nimekirjadega ning kolmas on RSS tab, kus saab lugeda uudisevooge. Lisaks on eraldi aken rakenduse logide kuvamiseks.

Kasutajajuhend

Rakenduse käivitamisel avatakse koheselt kasutajale Notes tab vaade. Seal on võimalik luua gruppe, gruppidesse saab luua märkmeid ning lisaks saab neid grupeerida veel tag-ide alusel. Funktsionaalsuseks on lisatud veel otsing, et leida varem kirjutatud märkmeid hõlpsamalt. Notes tab vaade on jagatud kolmeks osaks, kõige vasakpoolsemas on kuvatud grupid, keskmises kuvatakse märkmete pealkirju ning parempoolses kuvatakse märkme sisu. Selleks, et märkmeid kirjutada, on esmalt vaja luua uus grupp, vajutades +Group nuppu. Seejärel kui grupp on valitud, saab sinna sisse lisada märkmeid. Kui kasutaja on vajalikud muudatused teinud, siis selleks, et need läheksid andmebaasi ja salvestuksid, peab avama menüüribalt File ning sealt Sync, et muudatused andmebaasiga sünkroniseeriksid. Rakenduse teiseks paaniks on To-Do tab. Seal on võimalik kasutajal luua nimekiri asjadest, mida on vaja sooritada või ära teha. Samuti nagu Notes tab puhul, on esmalt vaja luua suurem grupp, mille alla nimekiri vajalikest asjadest teha. Samuti on mõlemal pool kirjet checkbox. Märkides ära parempoolne checkbox, tõstetakse valitud kirje täiesti nimekirja tippu, mis tähistab, et kirje on prioriteediga. Märkides ära vasakpoolne checkbox, tähendab, et valitud kirje on tehtud ning see liigub nimekirja lõppu, olenemata prioriteedist. Kui vajalikud muudatused on tehtud, siis tuleb menüüribalt File alt valida Sync ning kõik muudatused salvestatakse andmebaasis.

RSS tab: Rakenduse kolmandaks tabiks rss tab, kus on võimalik laadida sisestades korrektne url tekstikasti ja klikates Add. Peale add nupu vajutamist kontrollitakse kas url on korrektne st. kas on rss feed ja urli tekstikast seatakse tühjaks. Kui ei ole, siis lisatakse tühi feed nimega “feed error”. Juhul kui feedi url on korrektne, ja andmed saadakse kätte, seatakse feedi nimeks nimi, mis saadakse feedi lingi parsimisel. Juhul kui nime ei leita, siis seatakse feedi nimeks feedi url. Valides vasakult listboxist feed (klikates selle peal), kuvatakse paremale listboxi uudised sellest feedist. Igal klikkamisel laetakse uudised uuesti netist. Uudiseid saab lugeda akent üles-alla kerides. Uudiste listbox on jaotatud kolmeks. Vasakul on pilt uudisest juhul, kui fail sisaldab viidet pildile. Peale pilti on Üleval Uudise pealkiri, uudise pealkirja all on siniselt uudise tekst. Juhul kui hiirega liikuda pildi kohale, kuvatakse uudise postitamise kuupäeva ja kellaaega. Tehes topeltklõps konkreetse uudise peal, avatakse uudis arvutis, mis jooksutab antud rakendust. RSS feede on ka võimalik syncida andmebaasiga. Selleks on võimalus minna FIle->Sync. Peale sync nupu vajutamist kuvatakse logisse kas antud feed lisati või kustutati.

Probleemid

Pisiprobleeme leidus palju, kuid üks järjepidev probleem oli andmebaasiga suhtlus. Kohati oli raske andmebaasist korralikult asju lisada ja kustutada, kuna objektide ja funktsioonide rohkuse tõttu sai service klassi valesi viiteid lisatud. Lisaks olid püsivateks probleemideks veel ajaplaneerimine ning samuti ka TFS-i kasutamine.

Kokkuvõtteks

Projekti maht ületas kõigi ootused. Viimane nädal enne tähtaega veetsime meeskonnaga peaaegu iga päev arvutites, olime ühenduses koguaeg TeamSpeak-is ning aitasime üksteist TeamViewer-iga. Kuna üks meeskonna liige asub koolist ca 1h kaugusel, siis otsustasime, et ei hakka regulaarselt koolis kohtuma ning tegime tööd kodunt. Peab tõdema, et isegi koos ajapikendustega ei suutnud kahjuks kõiki must have funktsioone tööle saada, kuid enamjaolt sarnaneb rakendus siiski algselt plaanituga.