Meeskond "Söörlösed"

From ICO wiki
Jump to navigationJump to search

Plaan

Teeme väga hajusa rakenduse ehk veebiteenuse mis omakorda tarbib veebiteenust. Plaan järgmine: EMHI pakub iga tunni aja tagant tasuta ilmainfot oma mõningatest vaatlusjaamadest Lehel: http://www.emhi.ee/index.php?ide=32,1255 Seal on link http://www.emhi.ee/ilma_andmed/xml/observations.php kus värskelt mõõdetud ilmaandmed on kättesaadavad 10 minutit peale igat täistundi.

Meil on plaan tekitada veebiteenus, mis vastavalt sisestatud GPS koordinaatidele ja kuupäev-kellaajale kuvab ilmainfo. Ilmainfo kuvamiseks peame esmalt tekitama XML faili mõõtejaamade kohta. Jaamad, mis meie XML faili lähevad peavad vastama alljärgnevale kahele tingimusele:

  • 1. Iga jaam peab olema jaamade listis, mis on kirjas

http://www.emhi.ee/ilma_andmed/xml/observations.php failis (s.t tema mõõteandmed edastatakse iga tunni tagant)

Esmalt peame valmis tegema n.ö staatilise ehk siis käsitsi sisse löödud XML faili meid huvitavate (punkt 1. olevate) jaamade koordinaatidega. Teise XML faili saame eelpool nimetatud lingilt: http://www.emhi.ee/ilma_andmed/xml/observations.php XSLT abil paneme need 2 kokku - seda esitame oma XML-i pähe.

Edasi on meil plaan kirjutada 2 C# juppi.

  • 1. Programm, mis hakkab iga tunni tagant EMHI käest ilmaandmeid küsima ja neid andmebaasi kirjutama.
  • 2. Veebiteenus, mis saadud kuupäeva-kellaaja ja Eesti piires olevate koordinaatide abil arvutab välja ilmaandmed.

Ilmainfo väljaarvutamiseks kasutaks esialgu kahe lähima jaama vahel lineaarset interpoleerimist. S.t see võiks käia nii: N: Roomassaare jaamas on 1 kraad sooja ja Virtsu jaamas on 4 kraadi sooja. Nende andmete põhjal tahan teada, palju Kuivastus on sooja. Olgu Roomassaare-Virtsu vahemaa 80 km ning Kuivastu-Virtsu vahemaa 15 km. Roomasaarest -Virtsu tõuseb temp. iga kilomeetri kohta 3/80 kraadi, seega saan välja arvutada suvalise punkti temperatuuri, mis jääb Roomassaare-Virtsu vahele. Et Kuivastu on 15 km Virtsust-Roomassaare poole, siis lahutan 4-(15*3/80)=4-45/80=4-0,55=3,45 kraadi.

XML

Jaamade koordinaatide XML

Jaamade koordinaadid koos õhutemperatuuriga HTML-i XSLT abil

XSLT, mis teeb valmis meie XML-i kasutades koordinaatide XML-i ja EMHI reaalaja XML-i

Meie XML, (selle kohta saab arvustuse kirjutada ;)

Meie XML Schema

Veebiteenus

Teenuse meetodite koodifail on see https://www.dropbox.com/sh/st7yxaxwt48bc2c/5RsKTgySU-/koguja/ilmaTeenus/servIlm.cs


Teenuse koguprojekt asub siin koos andmebaasi varundusfailiga https://www.dropbox.com/sh/st7yxaxwt48bc2c/JwxAHWKM9P

Kasutajate haldamiseks on loodud ASP.NET Membership andmebaas, mis sisaldub EMHI.bak failis ja WCF'ile sai selle kasutamiseks õigused ka antud, mis nähtub App.config failidest nagu näiteks siin: https://www.dropbox.com/sh/st7yxaxwt48bc2c/DLp70MYYF8/koguja/WCFilmaKlient/app.config Muuhulgas sisaldab eelpool mainitud servIlm.cs meetodit kasutajanime järgi viimase logimisaja pärimiseks, rohkema kasustajastatistikaga me käesolevas töös ei tegelenud.

Klientrakendus

Temperatuuri saamiseks vajasime rakendust, mis annaks näiteks klikates GPS koordinaadid, mis oleksid sisendparameetriteks meie teenusele. Seepärast on vormi sisse istutatud Google kaart.

Kaardil klõpsates ilmub kaardile vastavalt lähimate ilmajaamade andmebaasist viimase kättesaadava ilmaandmete järgi jaamade kauguse järgi interpoleeritud temperatuur. Näiteks nii nagu siin: http://enos.itcollege.ee/~arasu/temperatuuri_kaart.jpg

Kui teil pole aega/tahtmist/võimalust kogu projekti oma arvutitesse püsti ajada, siis võin koolis näidata, et see päriselt ka töötab :)

Päevik: XML

18.03 Reget tuleb välja kontseptsiooniga, mida teha, Anneli nõustub, et on uhke asi küll.

22.03 Reget jaamade XML koordinaatide faili valmis. Annelile jäi nuputada kuidas see ilma andmetega XSLT abil kokku panna. Reget saadab ka mäidise muutuja kasutamisest.

27.03 Anneli katsetus teha XSLTd, mis näitaks kahe XMLi dokumendi sisu, läheb aia taha, sest selline trikk ei ole XML sissejuhatavas teemas, veebiotsingud päädivad programmide leidmisega küll C#, Javast ja jutuga XPathist.

28.03. Reget avaldab näidst andes saladuse, kuidas kaht XMLi ühte siduda. Anneli kirjutab XSLT lõpuni valmis.

03.04 Reget paneb ette, et nüüd võiks teha ka XSD ja töö esitada. Lõpuks saab ta seda siiski ise teha.

Annelile jääb teiste tööde retsenseerimine.


Päevik: veebiteenus

01.05 koguneme, et tekitada XML failist andmebaas LINQ päringute abil. Koguja nimelise konsoolirakenduse Program.cs all on väljakommenteerituna see kood, mis tõstis XML failist andmed baasi. Teiseks tegime ka programmijupi, mis jälgib EMHI kodulehel (http://www.emhi.ee/ilma_andmed/xml/observations.php)iga tunni tagant tekkivaid uusi ilmaandmeid ja kogub need meie andmebaasi sellisel moel, et EMHI ilmaandmete esimese elemendi atribuut timestamp on baasis ILM tabeli primaarvõtmeks ja kogu XML on salvestatud tekstina ühte lahtrisse. Vahepeal jäime LINQga nats jänni ja helistasime õppejõule ning nõudsime kohest ärkamist ja märkamist. Üritasime panna ka windowsi Task Scheduleri arvuti käimise ajal iga tunni tagant ilma-andmeid baasi koguma, aga Anneli kopeeris kogu projekti koodi teise kohta ja tegi paranduse kunagi hiljem.

Lisasime ka vastavalt õppefilmile WCF Service Library, mille nimeks sai ilmaTeenus, mille all arendame teenusekoodi ja ..., mille nimeks sai ilmaHost, ning häälestasime hosti vastavalt õppevideole teenuseklassi tarbima. Lõime ka ka WCF kliendi, mille nimeks sai ilmaKlient, et oleks võimalik teenust turvaliselt tarbida.

Olles poolteist tundi vaadanud turvamise videot ning jõudnud sellega 12, minutisse, läksime laiali, olles kokku leppinud, et Reget tegeleb vahepeal funktsionaalsete meetodite väljamõtlemisega ja Anneli katsub turvaosa ära teha.

05.05 takerdus Annelil teenuse turvamine salapärase IMetadataExcange veateate taha, mille tekkepõhjuseks oli lõppkokkuvõttes hajameelselt koostatud hosti web.config-i secureBehavior, millest juhuslikult puudusid serviceMetadata ja serviceDebug.

12.05 toimuski Regeti ja Anneli ühisjõul ülalmainitud vea parandamine ning Regeti meetodite lisamine projekti (taidaKoordinaadid, sordiKoordMas, leiaLahimad, interpoleeri) ning lõpliku teenuse programmeerimine. Reget helistas ka õppejõule, et küsida, kuidas saaks andmeid niimoodi klassifailis hoida, et neid iga kliendi puhul poleks vaja uuesti andmebaasist pärida, kuid lõpptulemusena sai "static" meetodite nimetustest ära kustutatud ja jäi nii, et iga uue kliendi puhul päritakse kõik andmebaasist otsast peale. Lisatud said veel meetodid leiaLahimAeg, mille puhul otsustasime, et kuna kasutaja tõenäoliselt mingi minevikuilma vastu huvi ei tunne, oleks meil baasist vaja lihtsalt viimaseid ilmaandmeid. Arendatud sai ka meetod getTemp, mis hangib ILM baasis leidvast XMList kahe lähima ilmajaama temperatuurid ning interpoleerib need üheks. Anneli kirjutas tegevused päevikusse ning tema ülesandeks jäi vaadata turvamise video lõpuni ning vaadata kõik üle ning kommenteerida.

Päevik: veebiteenuse lõpp ja klientrakendus

20.05 saadi taas kokku. Vahepeal oli Reget vormil baseeruva graafilise kliendi ka valmis meisterdanud, et teenus loogiliselt toimida saaks. Selleks pani ta google kaardi WCF vormi. Anneli oli turvamise video lõpuni vaadanud ja teenuse vastavalt turvanud. Mõtlesime välja meetodi kasutaja viimase logina pärimiseks. Anneli kommenteeris üle peamised teenusega seotud meetodid, õppides, kuidas Visual Studiot häälestada XML formaadis dokumentatsiooni kirjutama ja riputas tehtu koopia ühte Dropboxi kausta ja esitas siin wikis. Kuna klientrakenduse esitamisega on veel pisut aega, siis on Annelil plaanis kliendi meetodeid lähemalt uurida ja kommenteerida-dokumenteerida.

Retsensioonid

Unusual Suspects retsensioonid XML, teenuse ja kliendi kohta https://wiki.itcollege.ee/index.php/Talk:Meeskond_%22Unusual_Suspects%22

Akaver meeskonna veebiteenuse ja kliendi retsensioon

Meeskond akaver on mahu poolest valmis teinud suure projekti. Sellesse on lisaks veebiteenusele sisse integreeritud veel mitu tehnoloogiat nagu ASP.NET MVC (model view controller) ja Windows Phone. Dropbox-ist alla tõmmates ei tahtnud lahendus (Solution) osaliselt avaneda. Tervelt kahte projekti viiest ei suutnud Microsofti Visual Studio Ultimate 2010 avada. Selle raha eest mida eeltoodud tarkvara eest küsitakse, võiks ta seda teha. Aga vist on minu arvutis mingid kõige uuemad ja ,,khuulimad” VS2010 pluginad installimata. Me ei hakanud VS2010 hingeellu süvenema vaid proovisime keskenduda projektile enesele. Nagu me ennist mainisime, projekt on mahukas. Esimese asjana tundsime puudust klassidiagrammist vms. seletavast dokumentatsioonist, mis annaks projekti kohta kokkuvõtlikuma vaate. Veebiteenus on jagatud ilusti kahte ossa frontend ja backend. Sellist lahendust näidati/soovitati ka antud kursusel. Teenuse liidesefaili nimi algab korrektselt I-tähega- st. lihtsam on aru saada, et selles on Interface. Veebiteenuse liidesefailist vaatab vastu kolm teenust, mis on tähistatud Operation Contract annotatsiooniga. Veebiteenus loeb kõik oma klassid teisest, EAMK nimelisest projektist. Eeltoodust kasutatakse objekte, mis pärinevad EAMK.DAL (see on vist Data Access Layer) ja EAMK.Models nimeruumidest. Veebiteenuse koodiosa on väga tagasihoidlik. Kõik meetodid koosnevad ainult ühest koodireast. Seda sellepärast, et kogu realisatsiooni raskuspunkt on koondunud EAMK projekti - ASP.NET MVC tehnoloogiasse. Edasi püüdsime kaevuda EAMK DAL kausta. Et me oleme ASP.NET MVC-s suht võhikud ja meeskond tundus olevat oma kommentaarides sama napisõnaline ja ameerikakeelne kui Visual Studio ise, oli meil raske eristada VS poolt tekitatud faile meeskonna poolt tekitatutest. Peale suurematsorti uurimist saime aru, et VS ei kirjuta üldse kommentaare oma tekitatud koodi. Seega saime lugeda need koodifailid, kus olid iga meetodi ees üherealine kommentaar, meeskond akaveri omadeks. Koodi kohapealt on hea, et meetodite ja muutujate nimed on ühes stiilis. Loomulikult võiks nuriseda try-catch lausete puudumise üle, aga sellise projekti ja miinimumini viidud inimressurssi puhul oleks see kohatu.Koolitöö nõuetest oli tehtud ka turvalisuse osa. Samas kasutajatega toimetamise/statistika osa veebiteenuse poolelt ei leidnud. Kõige suurem pluss on see, et projekt on läinud ka juba rakendusse, mitte jäänud lihtsalt "saaks selle kaelast ära ja siis unustaks” nimeliseks koolitööks.

Vahetult enne eksamit selgus, et kliendi kohta tuleks ka midagi arvata. Projektis on näha ainult konsoolirakenduse klient, mis on lihtne ja kui uskuda autori päevikut ka täiesti toimiv, kuid nagu eelpool kurdetud, ei installeeru kogulahendusest kaks projekti, mistõttu oma arvutis ei õnnestu miskit väga toimivat näha. Koolis demonstreeritu põhjal on teada, et kenasti töötas telefoni klient. Selline üle ootuste initsiatiiv on kahtlemata ainult väga positiivne. Kuna konsooliklient eriti huvitav ei olnud, otsustati lahti katkuda EAMKPhoneApp kaust, kus sees telefonikliendi failid. Selgus, et seal leidus väga palju xaml laiendiga faile, mistõttu tuli pisut süveneda, mis see xaml olla võiks. XAMLi kohta leidus netis selline jutt: XAML (eXtensible Application Markup Language)- XML põhine deklaratiivne keel. Mida rakendatakse .NET raamistiku programmitöö mudelis, XAML lihtsustab kasutajaliidese loomist .NET raamistikus. Andes võimaluse luua UI elemendid deklaratiivses XAML märgistuskeeles ja eraldades UI definitsiooni loogika. Nii saavad UI kallal töötada samaaegselt erinevead osapooled (Microsoft Development Network, 2012). Ehk lühidalt - tegemist on eriotstarbelise XMLiga. Veel tasub teada, et eksisteerib kolm XAML implementatsiooni: 1) The Windows Presentation Foundation versioon,mida kasutatakse .NET raamistikus alustades .NET Framework 3.0 -ga, 2) Silverlight 3 versioon ja 3) Silverlight 4 versioon. Jääb üle oletada, et siinkohal on tegemist ikkagi versiooniga nr 1. Telefoniklient jagunes kolme klassi App, MainPage, ja PageEventDetail. Igal neist leidus oma XAML ja cs fail. App.xaml.cs-is leidus ka hunnik kommentaare, mis tõenäoliselt võis olla arendusel ehk keerukaim koht, sest on näha ka väljakommenteeritud katsetusi ja hoiatusi. Teistes cs failides kommentaare ei leidunud, ju need siis seletavad ennast ise, sest õnneks on meetoditele pandud kenad pikad nimed, mis nende tegevust üksiti selgitavad. Natuke arusaamatuks jäi, et kus siis tegelikult andmeid hoitakse, sest ühtegi andmebaasifaili Dropboxi riputet ei olnud, samas põhilisi funktsioone sisaldav MVC mudeli järgi jaotatud EAMK kaustas leiduvas DAL kaustas oli EAMKContext nimeline klassifail, mis omakorda näis pikendavat DbContexti klassi... Meeskond akaver on kahtlemata äärmiselt tõhus ja võimekas ning tõenäoliselt ka lahke selgitusi jagama. Võib ka olla, et kaitsmisel sai muuhulgas räägitud, kus andmed võiksid olla, või kuidas nad lennult moodustuvad, aga kaitsmisega oli mäletatavasti selline lugu, et kuvar ei tahnud Mac-i külge hakata, osad projektid ei tahtnud installeeruda ja üldse sai aeg otsa, mis ehk oligi hea. Lõpp hea kõik hea!

Kolmas meeskonna XML retsensioon

Kolmas https://wiki.itcollege.ee/index.php/Talk:Meeskond_%22Kolmas%22_2012