Meeskond "Liivimaa keskmised": Difference between revisions

From ICO wiki
Jump to navigationJump to search
Mposka (talk | contribs)
Iots (talk | contribs)
 
(11 intermediate revisions by 3 users not shown)
Line 25: Line 25:


===Indrek Ots===
===Indrek Ots===
Mina tegelesin põhiliselt Windows Phone 7 rakenduse ehitamisega. Vajalikud tööriistad sain [http://developer.windowsphone.com/ developer.windowsphone.com] lehelt. Telefoni rakendus kasutab meie poolt loodud menüü teenust. Võimalik on valida soovitud kohvik ning vaadata tänast menüüd. Samuti saab menüüd filtreerida toote liikide järgi. Tootel saab näha tema kirjeldust ja hinda.
WP7 SDK'sse ei ole lisatud Panorama control'i. Mis on Panorama control? Seda iseloomustab hästi järgnev pilt.
[[File:WP7_Panorama_control.jpg]]
Õnneks on olemas inimesi, kes on selle ise ära teinud. Rakenduses kasutatav Panorama control on saadud [http://blogs.claritycon.com/blogs/design/archive/2010/03/30/building-the-elusive-windows-phone-panorama-control.aspx siit].


===Mait Poska===
===Mait Poska===
Meie ülesandeks jäi luua kohvikule rakendus ja ka vastavad teenused selle tarvis. Rakenduse otsustasime realiseerida WPF rakendusena, kuna polnud seda varem kasutanud ning soovisime sellega tutvust teha.
Meie ülesandeks jäi luua kohvikule rakendus ja ka vastavad teenused selle tarvis.  
Idee realiseerimiseks oli lihtne: kohviku haldajal peab olema võimalus luua uut menüüd, vaadata vanu menüüsid, muuta neis olevaid tooteid ja ka menüü aktiivsust. Kindlasti ei tohiks ta istuda kõik aeg andmebaasi otsas, vaid peaks sinna ainult siis minema kui on soovib valminud menüüd sinna lisada.
 
'''Kuidas realiseerida rakendus?'''
Algne idee: kohviku haldajal peab olema võimalus luua uut menüüd, vaadata vanu menüüsid, muuta neis olevaid tooteid ja ka menüü aktiivsust. Kindlasti ei ole peale iga toote lisamist menüüse mõtekas kohe lisada seda andmebaasi. Tore oleks kui liigi annaks ette autocompleter.
 
'''Kus realiseerida rakendus?'''
Haldusliides kohvikus tundus igati mõistlik valmistada vormirakendusena. Kuna aga Windowsi vormirakendusega pole meil olnud just kõige paremad suhted, siis otsustasime proovida seda teostada WPF'is, millega polnud varem kokku puutunud. Eks uute asjade näppimine on alati huvitavamt, isegi siis kui see ei õnnestu. Tagant järgi tarkus aga ütleb, et tegime õige valiku. WPF tundub olevat kasutaja sõbralikum ja paindlikum. Lisaks on seda mugavam kujundada.
 
'''Mida me kasutasime rakenduses loomiseks?'''
Rakenduses täidavad kõige tähtsamat rolli kaks Datagrid'i. Ühe Datagrid näol on tegemist toodetega, mis on meenüsse lisatud(ServiceMenuItem's). Tooteid lisatakse järgnevalt:


Kasutajal on olemas vastavad väljad, kuhu saab toote kohta infot kirjutada. Peale vajutamist nupule "Lisa" pannakse toode menüüsse, mida kasutaja ka näeb tabelis. Koodis aga luuakse uus objekt ServiceMenuItem, mis sisaldab endas infot menüü oleva toote kohta, mis pannakse hiljem andmebaasi. Viimane tegevus toimub peale seda, kui kasutaja on menüüsse lisanud vajalikud tooted, märkinud kuupäeva ja vajutanud "Lisa uus menüü" nuppu. Peale seda lisatakse ServiceMenuItem toodete massiiv anmdebaasi. Antud tabeli näol on tegemist Datagrid'iga, mis tegi meie tööd päris palju lihtsamaks, kuna .NET 4.0 on see juba päris võimekas, lubades kasutajal juba lisatud toodet kohe tabelis muuta ning redigeerimisvõimalustega ei pidanud nii me ise väga palju vaeva nägema.
      uuedTooted.Add(new ServiceMenuItem {
                                          Nimi = nimetus.Text,
                                          Hind = Convert.ToDecimal(hind.Text),
                                          Suurus = kogus,
                                          Active = true,
                                          Liik = liik.Text,
                                          Kirjeldus = kommentaar.Text
                                    });
                                puhasta();
                                dataGrid1.ItemsSource = uuedTooted;
                                dataGrid1.Items.Refresh();


Kõikide menüüde kuvamiseks proovisime kasutada esialgu Listview'd. Peale mõningast mässamist matsime selle mõtte maha, kuna see ei tundunud olevat nii paindlik kui Datagrid(või oli asi meie oskamatuses). Nii siirdusime ka menüüde kuvamise teostamiseks Datagrid'i peale. Kõikide menüüde kuvamisel näeb kasutaja: menüü kuupäeva ja tema aktiivsust(kas kasutusel või ei). Esialgu tundub, et sellest peaks piisama.
Ehk datagrid'i source'iks ongi ServiceMenuItem'ite objektide massiiv. Eriti mugavaks teeb selle asjaolu, et kui kasutaja muudab datagridis andmeid, muutuvad need kohe ka juba massiivis olevates objektides.


Nii tunduski, et kõik hakkas valmis saama. Ainuke ülesanne oli veel kaotada kasutaja jaoks kasutud väljad, mida vajas programm.
Põhjuseid selleks oli kaks:
1)Tekkis lisaväli serialiseerimise tõttu, mida tegelt olema ei peaks.
2)Kasutajal oleks lihtsam kuupäeva valida otse kalendrist(Datepicker), see aga eeldab veerule eraldi Template'i määramise.


Tagajärg: RowEditEnding event ei töödanud enam. Ehk kui mingit menüü toodet oli muudetud ja liiguti järgmise peale, siis selle eventi ülesanne oli see kinni püüda. Nii saame salvestada juba tehtud muudatused. Peale staatiliseks muutmist oli see kadunud.
Teine Datagrid kuvab menüüsid, kus on märgitud kuupäev ja kas aktiivne või ei, mida saab kasutaja muidugi muuta. Peale selle on vajalikud tekstiväljad ja mõned nupud, nagu igas rakenduses. Kuvamise põhimõte on sama. Kasutatakse teenust mis annab välja ServiceMenu objektide massiivi vastavalt kohviku ID'le ning see pannakase datagridi ItemsSource'ks.


Põhjus:
'''Probleemid ja lahendused'''


===Madis Vellamäe===
===Madis Vellamäe===
Line 66: Line 87:


--[[User:Mvellama|Mvellama]] 01:08, 13 May 2010 (EEST)
--[[User:Mvellama|Mvellama]] 01:08, 13 May 2010 (EEST)


===Log In===
===Log In===
Line 79: Line 101:
--[[User:Mvellama|Mvellama]] 01:08, 13 May 2010 (EEST)
--[[User:Mvellama|Mvellama]] 01:08, 13 May 2010 (EEST)


==Kasutaja registreerimine==
 
===Menüüde haldamine===
 
===Kasutaja registreerimine===
Kasutaja registreerimisel pannakse andmebaasi kasutajanimi ning salasõna SHA1 hash. Kõigepealt kontrollitakse, ega sellist kasutajanime juba kasutusel pole (kui on olemas näiteks kasutaja "Ain" ja tahetakse luua kasutajat "ain", siis seda ei lubata... sisselogimisel tehakse aga suur- ja väiketähtedel vahet!). Kasutaja parooli hashimise eest vastutab eraldi meetod, mis lisab ka soola. Tugi pole mitte ainult SHA1 vaid ka MD5, SHA256, SHA384 ja SHA512. Selleks kasutatakse '''HashAlgorithm''' klassi.
Kasutaja registreerimisel pannakse andmebaasi kasutajanimi ning salasõna SHA1 hash. Kõigepealt kontrollitakse, ega sellist kasutajanime juba kasutusel pole (kui on olemas näiteks kasutaja "Ain" ja tahetakse luua kasutajat "ain", siis seda ei lubata... sisselogimisel tehakse aga suur- ja väiketähtedel vahet!). Kasutaja parooli hashimise eest vastutab eraldi meetod, mis lisab ka soola. Tugi pole mitte ainult SHA1 vaid ka MD5, SHA256, SHA384 ja SHA512. Selleks kasutatakse '''HashAlgorithm''' klassi.


--[[User:Mvellama|Mvellama]] 01:18, 13 May 2010 (EEST)
--[[User:Mvellama|Mvellama]] 01:18, 13 May 2010 (EEST)
== SortsKood ja all in one ==
Projekti kokkupakitud sortsu ning kõik vajalikud asjad saab siit: [http://enos.itcollege.ee/~mvellama/II%20kursus/VR2/PROJEKT.zip projekti SortsKood]

Latest revision as of 20:29, 4 June 2010

Meeskonna liikmed

  • Indrek Ots
  • Mait Poska
  • Madis Vellamäe
  • Joosep Püüa
  • Toomas Talviste

Projekti ülesande püstitus

Lahenduseks on teenus, mis võimaldab vaadata/muuta/hallata valitud kohviku menüüd. Kõigele lisaks peab valmima seda teenust kasutav rakendus, mis töötab Windows Phone 7 Series platvormil. Lisaks menüüde haldamine teostatuna WPF rakendusena.

Teenuse funktsionaalsed nõuded

  • Vaadata menüüd valitud kohvikus
  • Luua uus menüü
  • Kustutada menüü
  • Lisada toode menüüsse
  • Eemaldada toode menüüst
  • Lisada uus toode baasi
  • Lisada uus toote liik baasi
  • Muuta toote staatust menüüs ("otsas" / "ei ole otsas")

Tööjaotus

Indrek Ots

Mina tegelesin põhiliselt Windows Phone 7 rakenduse ehitamisega. Vajalikud tööriistad sain developer.windowsphone.com lehelt. Telefoni rakendus kasutab meie poolt loodud menüü teenust. Võimalik on valida soovitud kohvik ning vaadata tänast menüüd. Samuti saab menüüd filtreerida toote liikide järgi. Tootel saab näha tema kirjeldust ja hinda.

WP7 SDK'sse ei ole lisatud Panorama control'i. Mis on Panorama control? Seda iseloomustab hästi järgnev pilt.

Õnneks on olemas inimesi, kes on selle ise ära teinud. Rakenduses kasutatav Panorama control on saadud siit.

Mait Poska

Meie ülesandeks jäi luua kohvikule rakendus ja ka vastavad teenused selle tarvis.

Kuidas realiseerida rakendus? Algne idee: kohviku haldajal peab olema võimalus luua uut menüüd, vaadata vanu menüüsid, muuta neis olevaid tooteid ja ka menüü aktiivsust. Kindlasti ei ole peale iga toote lisamist menüüse mõtekas kohe lisada seda andmebaasi. Tore oleks kui liigi annaks ette autocompleter.

Kus realiseerida rakendus? Haldusliides kohvikus tundus igati mõistlik valmistada vormirakendusena. Kuna aga Windowsi vormirakendusega pole meil olnud just kõige paremad suhted, siis otsustasime proovida seda teostada WPF'is, millega polnud varem kokku puutunud. Eks uute asjade näppimine on alati huvitavamt, isegi siis kui see ei õnnestu. Tagant järgi tarkus aga ütleb, et tegime õige valiku. WPF tundub olevat kasutaja sõbralikum ja paindlikum. Lisaks on seda mugavam kujundada.

Mida me kasutasime rakenduses loomiseks? Rakenduses täidavad kõige tähtsamat rolli kaks Datagrid'i. Ühe Datagrid näol on tegemist toodetega, mis on meenüsse lisatud(ServiceMenuItem's). Tooteid lisatakse järgnevalt:

     uuedTooted.Add(new ServiceMenuItem { 
                                          Nimi = nimetus.Text,
                                          Hind = Convert.ToDecimal(hind.Text),
                                          Suurus = kogus,
                                          Active = true,
                                          Liik = liik.Text,  
                                          Kirjeldus = kommentaar.Text
                                   });
                               puhasta();
                               dataGrid1.ItemsSource = uuedTooted;
                               dataGrid1.Items.Refresh();

Ehk datagrid'i source'iks ongi ServiceMenuItem'ite objektide massiiv. Eriti mugavaks teeb selle asjaolu, et kui kasutaja muudab datagridis andmeid, muutuvad need kohe ka juba massiivis olevates objektides.


Teine Datagrid kuvab menüüsid, kus on märgitud kuupäev ja kas aktiivne või ei, mida saab kasutaja muidugi muuta. Peale selle on vajalikud tekstiväljad ja mõned nupud, nagu igas rakenduses. Kuvamise põhimõte on sama. Kasutatakse teenust mis annab välja ServiceMenu objektide massiivi vastavalt kohviku ID'le ning see pannakase datagridi ItemsSource'ks.

Probleemid ja lahendused

Madis Vellamäe

Mina tegin teenusele kasutajate halduse, sessiooni ja rollihalduse. Rakendusele treisin valikuaknad, kohviku kasutajatehalduse ning kohviku halduse, samuti ka teenuse administreerimisliidese. Raskusi tekitas just teenusele tehtud osade omavahel korralikult töölesaamine. Kuna algul ei osanud valida viisi, kuidas teha kasutajate tuvastamine (eri hetkedel käis läbi 3 erinevat viisi: küpsistega, Http mooduliga ning 9. praktikumi põhimõte) ning osad meetodid said selle ajaga valmis, siis on sees mõni üsnagi robustne ja kole meetod.

Projekti tegemine laiendas silmaringi ja treenis mõttemaailma. Kahjuks aga ei olnud selle projekti lõpetamiseks lõputult aega ning nii mõnigi peas mõlkunud asi, mida saaks palju paremini teha, jäi tegemata (nõuaks uurimist, õppimist, proovimist ja tublisti aega). Kuid edaspidi saab neid mõtteid kindlasti rakendada. Samuti sai ka õpitud, mis läks valesti ja mida teha paremini. Arenduse käigus ettetulnud probleemid andsid aluse eelmisele lausele.

--Mvellama 00:36, 13 May 2010 (EEST)

Joosep Püüa

Toomas Talviste

Teenusest

Kasutajate ja nende rollide haldus/kontroll

Teenuse iga meetod, välja arvatud sisselogimine ja uue kasutaja loomine, tahavad saada kaasa kasutaja sessiooni ID. Selle sessiooni ID järgi saadakse teada kasutajanimi ning siis tehakse vastavad päringud andmebaasi, et saaks teada, millistes rollides kasutaja on (kontrollitakse ka rollide aegumist). Iga meetodi jaoks on seatud nõuded, millises rollis kasutaja olema peab (rollide kohta on tehtud ka enum). Kui kasutaja ei ole nõutud rollis, visatakse Exception:

      throw VeaHaldus.RaiseException("meetod", "http://tempuri.org/", "NOT AUTHORIZED: Ei ole vajalikke õigusi", "1",
                   "klass", VeaHaldus.FaultCode.Client);

Antud kood peaks välja andma korraliku nõuetele vastava SoapExceptioni (XML node jms). Samuti kontrollib iga meetod, ega kasutaja sessioon ei ole aegunud, kui on, visatakse Exception:

      throw VeaHaldus.RaiseException("", "http://tempuri.org/", "SESSION EXPIRED: Kasutaja sessioon on aegunud", "1",
              "", VeaHaldus.FaultCode.Client);

Iga meetodi väljakutsumisega kaasneb kasutaja sessiooni pikendamine: hetkeaeg + 15 minutit.

--Mvellama 01:08, 13 May 2010 (EEST)


Log In

    public string logIn(string username, string password)
      {  }

Sisselogimiseks küsitakse kasutajanime ja parooli. Süsteem teeb vahet suurtel ja väikestel tähtedel. Antud meetod genereerib kasutajale unikaalse sessiooni ID (aluseks on võetud VR2 praktikum 9). Kõigepealt kasutaja autenditakse, selleks kontrollitakse vastu andmebaasi, kas kasutajanimi ning parool klapivad. Kusjuures, parool on andmebaasis SHA1 räsina, kuhu on visatud ka soola. Ühtlasi kontrollitakse ka, kas kasutaja on aktiivne - st ei ole kustutatud. Visatakse exception, kui kasutaja on aegunud või kui parool ja kasutajanimi ei klapi. Seejärel genereeritakse sessiooni ID RNGCryptoServiceProvider objekti poolt loodud 16 baidisele jadale toetudes.

     RNGCryptoServiceProvider random = new RNGCryptoServiceProvider();
       byte[] byteMassiiv = new byte[16];
       random.GetNonZeroBytes(byteMassiiv);
       Guid sessID = new Guid(byteMassiiv);

Kui see tehtud, siis salvestatakse sessioonide XML faili App_Data kaustas. Kirja pannakse sessiooni ID, kasutajanimi, kellele see kuulub, tema IP ja sessiooni aegumise aeg.

--Mvellama 01:08, 13 May 2010 (EEST)


Menüüde haldamine

Kasutaja registreerimine

Kasutaja registreerimisel pannakse andmebaasi kasutajanimi ning salasõna SHA1 hash. Kõigepealt kontrollitakse, ega sellist kasutajanime juba kasutusel pole (kui on olemas näiteks kasutaja "Ain" ja tahetakse luua kasutajat "ain", siis seda ei lubata... sisselogimisel tehakse aga suur- ja väiketähtedel vahet!). Kasutaja parooli hashimise eest vastutab eraldi meetod, mis lisab ka soola. Tugi pole mitte ainult SHA1 vaid ka MD5, SHA256, SHA384 ja SHA512. Selleks kasutatakse HashAlgorithm klassi.

--Mvellama 01:18, 13 May 2010 (EEST)

SortsKood ja all in one

Projekti kokkupakitud sortsu ning kõik vajalikud asjad saab siit: projekti SortsKood