Leemur

From ICO wiki
Jump to navigationJump to search

Meeskond "Leemur"

  • Liikmed
    • Marika Mäemets
    • Rasmus Hommuk
    • Mairo Puusepp
    • Einar Kivisalu

Idee

Et käesoleval hetkel on aktuaalne teedelagunemine ja augud tekivad igalepoole üleöö, siis on meie XML asfaldiaukude teemaline.

XML

XML fail

<?xml version="1.0" encoding="utf-8"?>
<teeauk>
  <tänavad>
    <tänav id = "CU00609359" tyyp = "tänav">
      <nimi>Raja</nimi>
      <pikkus yhik="meeter">856</pikkus>
      <augud>
        <auk id = "1">
          <xkoord>6584427.3</xkoord>
          <ykoord>537660</ykoord>
          <sügavus yhik="meeter">0.08</sügavus>
          <pindala yhik="ruutmeeter">0.4</pindala>
          <teataja id = "1">
            <nimi>Peeter Linnakodanik</nimi>
            <roll>autojuht</roll>
          </teataja>
          <avastatud>2013-02-15</avastatud>
          <likvideeritud>2013-04-10</likvideeritud>
        </auk>
        <auk id = "2">
          <xkoord>6584348.6</xkoord>
          <ykoord>537658.6</ykoord>
          <sügavus yhik="meeter">0.8</sügavus>
          <pindala yhik="ruutmeeter">0.54</pindala>
          <teataja id = "1">
            <nimi>Peeter Linnakodanik</nimi>
            <roll>autojuht</roll>
          </teataja>
          <avastatud>2013-02-15</avastatud>
        </auk>
      </augud>
    </tänav>
    <tänav id = "CU00464822" tyyp = "tänav">
      <nimi>Ehitajate tee</nimi>
      <pikkus yhik="meeter">23</pikkus>
      <augud>
        <auk id = "3">
          <xkoord>6584526.2</xkoord>
          <ykoord>537923.8</ykoord>
          <sügavus yhik="meeter">0.9</sügavus>
          <pindala yhik="ruutmeeter">0.5</pindala>
          <teataja id = "2">
            <nimi>Jüri Kõvaametnik</nimi>
            <roll>Maanteeameti kontroll</roll>
          </teataja>
          <avastatud>2013-02-15</avastatud>
          <likvideeritud>2013-02-15</likvideeritud>
        </auk>
        <auk id = "4">
          <xkoord>6584655.9</xkoord>
          <ykoord>537637.5</ykoord>
          <sügavus yhik="meeter">0.6</sügavus>
          <pindala yhik="ruutmeeter">0.7</pindala>
          <teataja id = "2">
            <nimi>Jüri Kõvaametnik</nimi>
            <roll>Maanteeameti kontroll</roll>
          </teataja>
          <avastatud>2013-02-15</avastatud>
          <likvideeritud>2013-02-15</likvideeritud>
        </auk>
        <auk id = "5">
          <xkoord>6584532</xkoord>
          <ykoord>537954.2</ykoord>
          <sügavus yhik="meeter">0.6</sügavus>
          <pindala yhik="ruutmeeter">1.7</pindala>
          <teataja id = "2">
            <nimi>Jüri Kõvaametnik</nimi>
            <roll>Maanteeameti kontroll</roll>
          </teataja>
          <avastatud>2013-02-15</avastatud>
          <likvideeritud>2013-02-15</likvideeritud>
        </auk>
      </augud>
    </tänav>
    <tänav id = "CU00464824" tyyp = "tänav">
      <nimi>Sõpruse puiestee</nimi>
      <pikkus yhik="meeter">4623</pikkus>
      <augud>
        <auk id = "6">
          <xkoord>6584621.1</xkoord>
          <ykoord>538267</ykoord>
          <sügavus yhik="meeter">0.11</sügavus>
          <pindala yhik="ruutmeeter">2.7</pindala>
          <teataja id = "2">
            <nimi>Jüri Kõvaametnik</nimi>
            <roll>Maanteeameti kontroll</roll>
          </teataja>
          <avastatud>2013-02-15</avastatud>
          <likvideeritud>2013-02-15</likvideeritud>
        </auk>
      </augud>
    </tänav>

    <tänav id = "CU00072238" tyyp = "tänav">
      <nimi>Ranna tee</nimi>
      <pikkus yhik="meeter">623</pikkus>
      <augud>
        <auk id = "11">
          <xkoord>6587966.2</xkoord>
          <ykoord>531049.2</ykoord>
          <sügavus yhik="meeter">0.07</sügavus>
          <pindala yhik="ruutmeeter">0.25</pindala>
          <teataja id = "3">
            <nimi>Mari Vallaametnik</nimi>
            <roll>Vallavalitsuse insener</roll>
          </teataja>
          <avastatud>2013-02-15</avastatud>
          <likvideeritud>2013-02-15</likvideeritud>
        </auk>
      </augud>
    </tänav>
    <tänav id = "CU00072411" tyyp = "tänav">
      <nimi>Ranna tee</nimi>
      <pikkus yhik="meeter">1023</pikkus>
      <augud>
        <auk id = "12">
          <xkoord>6587827.8</xkoord>
          <ykoord>531034.3</ykoord>
          <sügavus yhik="meeter">0.07</sügavus>
          <pindala yhik="ruutmeeter">0.75</pindala>
          <teataja id = "3">
            <nimi>Mari Vallaametnik</nimi>
            <roll>Vallavalitsuse insener</roll>
          </teataja>
          <avastatud>2013-02-15</avastatud>
          <likvideeritud>2013-02-15</likvideeritud>
        </auk>
      </augud>
    </tänav>
    <tänav id = "CU00069699" tyyp = "maantee">
      <nimi>Klooga mnt</nimi>
      <pikkus yhik="meeter">623</pikkus>
      <augud>
        <auk id = "13">
          <xkoord>6588082</xkoord>
          <ykoord>531159.8</ykoord>
          <sügavus yhik="meeter">0.16</sügavus>
          <pindala yhik="ruutmeeter">0.75</pindala>
          <teataja id = "3">
            <nimi>Mari Vallaametnik</nimi>
            <roll>Vallavalitsuse insener</roll>
          </teataja>
          <avastatud>2013-02-15</avastatud>
          <likvideeritud>2013-02-15</likvideeritud>
        </auk>
      </augud>
    </tänav>

    <tänav id = "CU02094396" tyyp = "tänav">
      <nimi>Nõlvaku tänav</nimi>
      <pikkus yhik="meeter">823</pikkus>
      <augud>
        <auk id = "11">
          <xkoord>6579325.4</xkoord>
          <ykoord>536312.7</ykoord>
          <sügavus yhik="meeter">0.11</sügavus>
          <pindala yhik="ruutmeeter">1.55</pindala>
          <teataja id = "4">
            <nimi>Ülo Vallavanem</nimi>
            <roll>Vallavanem</roll>
          </teataja>
          <avastatud>2013-02-15</avastatud>
          <likvideeritud>2013-02-15</likvideeritud>
        </auk>
      </augud>
    </tänav>
  </tänavad>

</teeauk>

XSD fail

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="XMLSchema1"
    targetNamespace="http://tempuri.org/teeauk.xsd"
    elementFormDefault="qualified"
    xmlns="http://tempuri.org/teeauk.xsd"
    xmlns:mstns="http://tempuri.org/teeauk.xsd"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
  <xs:simpleType name="yhikpikkus">
    <xs:restriction base="xs:string">
      <xs:enumeration value="meeter"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="yhiksygavus">
    <xs:restriction base="xs:string">
      <xs:enumeration value="meeter"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="yhikpindala">
    <xs:restriction base="xs:string">
      <xs:enumeration value="ruutmeeter"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:element name="teeauk">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs ="0" maxOccurs="unbounded" name="tänavad">
          <xs:complexType>
            <xs:choice>
              <xs:element minOccurs ="0" maxOccurs="unbounded" name="tänav">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="nimi" type="xs:string"></xs:element>
                    <xs:element name="pikkus">
                      <xs:complexType>
                        <xs:simpleContent>
                          <xs:extension base="xs:int">
                            <xs:attribute name="yhik" type="yhikpikkus"/>
                          </xs:extension>
                        </xs:simpleContent>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="augud">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element maxOccurs="unbounded" name="auk">
                            <xs:complexType>
                              <xs:sequence>
                                <xs:element name="xkoord" type="xs:double"></xs:element>
                                <xs:element name="ykoord" type="xs:double"></xs:element>
                                <xs:element name="sügavus">
                                  <xs:complexType>
                                    <xs:simpleContent>
                                      <xs:extension base="xs:double">
                                        <xs:attribute name="yhik" type="yhiksygavus"/>
                                      </xs:extension>
                                    </xs:simpleContent>
                                  </xs:complexType>
                                </xs:element>
                                <xs:element name="pindala">
                                  <xs:complexType>
                                    <xs:simpleContent>
                                      <xs:extension base="xs:double">
                                        <xs:attribute name="yhik" type="yhikpindala"/>
                                      </xs:extension>
                                    </xs:simpleContent>
                                  </xs:complexType>
                                </xs:element>
                                <xs:element name="teataja">
                                  <xs:complexType>
                                    <xs:sequence>
                                      <xs:element name="nimi" type="xs:string"></xs:element>
                                      <xs:element name="roll" type="xs:string"></xs:element>
                                    </xs:sequence>
                                    <xs:attribute name="id" type="xs:int"></xs:attribute>
                                  </xs:complexType>
                                </xs:element>
                                <xs:element name="avastatud" type="xs:date"></xs:element>
                                <xs:element name="likvideeritud" type="xs:date" minOccurs ="0"></xs:element>
                              </xs:sequence>
                              <xs:attribute name="id" type="xs:int"></xs:attribute>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                  <xs:attribute name="id" type="xs:string"></xs:attribute>
                  <xs:attribute name="tyyp" type="xs:string"></xs:attribute>
                </xs:complexType>
              </xs:element>
            </xs:choice>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

XSLT failid

Asfaldiaukude tabel

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" indent="yes"/>
  <xsl:template match="/">
    <html>
      <head>
        <title>Asfaldiaugud üle kogu maa</title>
      </head>
      <body>
        <h1>Asfaldiaukude nimekiri</h1>
        <ul>
          <xsl:for-each select="/teeauk/tänavad/tänav">
            <li>
              <xsl:value-of select="nimi"/>
              <xsl:text> </xsl:text>
              <xsl:value-of select="@tyyp"/>
              <xsl:text>-</xsl:text>
              <xsl:value-of select="pikkus"/>
              <xsl:value-of select="@yhik"/>
              <xsl:text>-</xsl:text>
                <table border="1">
                  <th>
                    <td>Koordinaadid</td>
                    <td>Sügavus ja pindlala</td>
                    <td>Teavitaja</td>
                    <td>Avastatud</td>
                    <td>Likvideeritud</td>
                  </th>
                  <xsl:for-each select="augud/auk">
                    <tr>
                      <td>
                        <xsl:value-of select="@id" />
                      </td>
                      <td>
                        <xsl:text>X </xsl:text>
                        <xsl:value-of select="xkoord" />
                        <br/>
                        <xsl:text>Y </xsl:text>
                        <xsl:value-of select="ykoord" />
                      </td>
                      <td>
                        <xsl:value-of select="sügavus" />
                        <br/>
                        <xsl:value-of select="pindala" />
                      </td>
                      <td>
                        <xsl:value-of select="teataja/nimi" />
                        <br/>
                        <xsl:value-of select="teataja/roll" />
                      </td>
                      <td>
                        <xsl:value-of select="avastatud" />
                      </td>
                      <td>
                        <xsl:value-of select="likvideeritud" />
                        <xsl:text>.</xsl:text>
                      </td>
                    </tr>
                  </xsl:for-each>
                </table>
            </li>
          </xsl:for-each>
        </ul>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

Aukudest teatajad

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" indent="yes"/>
  <xsl:template match="/">
    <html>
      <head>
        <title>Asfaldiaugud üle kogu maa</title>
      </head>
      <body>
        <h1>Aukudest teatajate nimekiri</h1>
        <ul>
          <xsl:for-each select="/teeauk/tänavad/tänav/augud/auk/teataja">
            <li>
              <xsl:value-of select="./nimi"/>
              <xsl:text> - </xsl:text>
              <xsl:value-of select="./roll"/>
              <xsl:text> </xsl:text>
            </li>
          </xsl:for-each>
        </ul>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

Tänavate nimekiri

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>
  <xsl:template match="/">
    <html>
      <head>
        <title>Teede/tänavate nimekiri</title>
      </head>
      <body>
        <h1>Teede/tänavate nimekiri</h1>
        <ul>
          <xsl:for-each select="/teeauk/tänavad/tänav">
            <li>
              <xsl:value-of select="./nimi"/>
              <xsl:text> - </xsl:text>
              <xsl:value-of select="./pikkus"/>
              <xsl:text> meetrit </xsl:text>
            </li>
          </xsl:for-each>
        </ul>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

Retsensioonid

XML

XML

XML-failis on 6 loogilist dimensiooni. Tasemete kaupa välja kirjutatuna: tase 1: teeauk tase 2: tänavad tase 3: tänav (atribuudid: tüüp) tase 4: nimi, pikkus, augud tase 5: auk tase 6: xkoord, ykoord, sügavus, pindala, teataja, avastatud, likvideeritud. Atribuute on kasutatud nõuetele vastavas koguses. Taseme "tänav" juurde on loodud atribuut "tyyp", mis võib olla kas "tänav" või "maantee". Rühma Leemur oleks võinud paari sõnaga kommenteerida, miks on tänava ja maantee eristamine oluline.

XSD

XSD-faili põhjal võib aukudega tänavaid ka üldse mitte eksisteerida või olla piiramata arv. Põhimõtteliselt võiks tänavate arv olla piiratud mõne mõistliku numbriga, aga samas ei tohiks ka piiramata arv olla probleem. Dimensioon "tänavad" sisaldab järgmise tasemena elemente tüübist "tänav". Miks on sealjuures taseme "tänavad" elementide kirjeldamiseks kasutatud tag'i "choise", mille sees on ainult üks element? Dimensiooni "tänavad" elemendid peavad olema kirjeldatud kindlas järjekorras (nimi, pikkus, augud). Koodi loetavuse seisukohalt on hea, kui see nii on. Atribuutide kirjelduses võiks ehk augu pindala ja sügavus olla lubatud kirjeldada ka vastavalt sentimeetrites ja ruutsentimeetrites.

XSL

XSL-faile on kokku 3, mida on rohkem kui minimaalselt nõutud- 2. Asfaldiaukude tabel Tabelis on augu id, koordinaadid, pindala, teataja nimi ja roll, avastamise ja likvideerimise kuupäev. Aukudest teatajate tabel Tabelis näidatakse teatajate nimesid ja rollisid. Tänavate tabel Näidatakse tänavanimesid koos tänavate pikkustega. Mõne sõnaga võiks ehk kirjeldada, millist eesmärki html-kujule teisendatud tabelid kasutaja seisukohast võiksid täita.

Kokkuvõtvalt võib öelda, et meeskond "Leemur" on oma XML-, XSD -ja XSL-failid koostanud loogiliselt ja hästi struktureeritult.

Meeskond TeravC


Tiim "Leemur" on pakkunud välja XML liidese definitsiooni tänavaaukude kohta käiva info edastamiseks. Teema on igati ajakohane ning antud lahendus omab ka reaalset rakendust näiteks autojuhi GPS tarkvaras. Iseasi, et andmemahu kokkuhoiu mõttes võibolla oleks kasulik terved kohad edastada aukude asemel.


Esitatud lahendus vastab kodutöös nõutud tingimustele ja ootustele keerukuse osas ning isegi ületab neid. XML faili struktuur on arusaadav ja lisakommentaare ei vaja. Näidisena välja pakutud XSLT abil õnnestub genereerida väljund nii HTML kui XML formaadis.


Andmete grupeerimine tänavate kaupa tundub mõistlik arvestades potentsiaalse info tarbija vajadust saada infot parasjagu läbitava tänava kohta. Tänava pikkuse esitamise vajadusest ei saa hästi aru. Aukudel on ka omadus taastekkida, antud struktuur võimaldab aga esitada ühe(viimase?) teataja ning parandaja. Rakenduse võib muidugi luua selliselt, et uuesti teatades muutub parandaja väli väljund XML'is uuesti tühjaks. samas oleks hea info aukude kohta, mis pidevalt lagunevad ja parandatud saavad.


XML välja nimetuses täpitähtede kasutamine ei pruugi olla alati hea mõte, ehkki on loomulikult lubatud.

Meeskond Hops

XML retsensioon

Koduse ülesande täitmiseks tuli luua XML fail andmete edastamiseks, selle XML faili skeemifail ning 2-3 sobivat XSL faili loodud XML failis olevate andmete transformeerimiseks HTML formaati ja XML faili formaadi muutmiseks. XML andmefaili sisu oli vabalt valitav, kuid andmed pidid olema üksteisega loogiliselt seotud ja struktuur otstarbekas. XML failil pidi kindlasti olema vähemalt neli loogilist dimensiooni. Ning lisaks tuli kasutada kolmel dimensioonil attribuute, mis on enamat, kui lihtsalt ID. Meeskond Leemur on loonud kõikidele tingimustele vastava XML andmefaili - sellell on 6 loogilist dimensiooni ja neist on neist on atribuutidena kasutatud rohkemat kui ainult ID väärtust; veelgi enam - on loodud ka XSD vormingus skeemifail, et oleks võimalik ka valideerida kodutööna esitatud XML faili. Peale XML faili ja XSD faili on loodud ka kolm XSLT faili (stiilifaili), mis täidavad eraldi ülesandeid: Esimene neist on asfaldiaukude tabel - see tabel sisaldab mitmesugust palju informatsiooni: augu id, augu kordinaadid, ning isegi augu alune pindala on ära märgitud. Lisaks eelnevale ka muidugi augu esmase registreerimise kuupäev ning meeldiva üllatusena ka augu likvideerimise kuupäev (juhul kui see ikka likvideeritakse). Teise ülesandena on näidata aukude teatajate nimed ning otseloomulikult ka teatajate rollid antud infosüsteemis Kolmas tabel aga sisaldab tänavate nimesid koos nende pikkustega. Vaadates tehtud tööd ja õppejõu poolt püstitatud ülesannet võib kindlalt väita, et meeskond Leemur on edukalt antud ülesande täitnud.

Meeskond "Seekord 3 liiget"

Veebiteenus

Jätkame asfaldiaukude teemaga, kuna tänavate seisukord on endiselt päevakorral olev teema ja ei ole näha, et see aktuaalsuse minetaks.

Veebiteenus peab olema valmis ja ja wikilehel kirjeldatud hiljemalt 20. mai 2013.

Retsensioonid veebiteenuste kohta peavad tehtud olema 27. mai 2013

  • Loodav veebiteenus peab võimaldama:
    • Teenuse pakkumist
    • Teenuse kasutajate tuvastamist ning haldamist
    • Teenuse kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes

Soovitav on luua teenus (FE) ja teenuse seadistamiseks ning kasutajate haldamiseks mõeldud rakendus (BE).

plaanitav funktsionaalsus

 - teha teenus, mis väljastab viimased lisatud augud
 - teha teenus, mis väljastab valitud tänaval asuvad augud
 - teha teenus, mis väljastab kõige suurema aukude arvuga tänavad (suhtes pikkusega)
 - teha teenus, mis ...
 - teha teenus, mis ...

Tööde edenemine

 - Versioonihaldus ülesse seada - Asjassepühendatute jaoks paikneb see siin: https://leemur.visualstudio.com/ 15.05.2013.
 - Andmebaasiserver töökorda seada (OK - Rasmus). Installeeritud MS SQL Express 12 (version 11.0.3128.0) 16.05.2013
 - Domeeni mudel valmis teha - OK
 - EF raamistik paika () - OK
 - Luua standard Repod iga objekti klassi kohta (I{KlassiNimi}Repository + {KlassiNimi}Repository)
   Olemas AukRepository, EFRepositories, KasutusRepository, RollRepository, TanavRepository, TeavitajaRepository
    
 - Funktsionaalsuse teostus (Controllers) (Get + Post + Put + Delete) - OK
    
 - Autentimine, Autoriseerimine - veidi problemaatiline.

Veebiteenuse koodi võib leida siit: http://enos.itcollege.ee/~rhommuk/Poska/Asfaldiauk.zip 20.05.2013.
Realiseeritud meetodite testimiseks on kasutatav aadress ~/Help

Veebiteenuse retsensioon - TeravC

Enne retsenseerima asumist meeskonna Leemur poolt esitatud teadaolevad puudused

"Retsenseerides võib kohe kirja panna, et autentimist ega kasutajate statistikat ei ole ... meil on ainult teenus lahendatud."

Arhitektuuriline ja tehnoloogiline ülesehitus

Lahendus on vastavalt kursuse nõuetele ülesse ehitatud, eraldi seisvad projektid eri otstarbega teekidena:

  • Andmemudeli teek (AsfaldiaukModels),
  • Andme ligipääsu teek (AsfaldiaukDAL),
  • Teenuse enda teostus (AsfaldiaukWebAPI).

Testide tegemiseks loodud ka konsoolirakendus AsfaldiaukTest. Kasutusel Code first Entity Framework andmeligipääsu kihis, ning ASP.NET Web API teenuste poole pealt. Projekti luues oleks võnud "Create unit test projecti" lahtrisse linnukese teha kuid kuna antud raames me unit teste ei kirjuta siis liiga oluline see ei ole.

Domeeni mudel

Natuke on ka arusaamatu, milleks on väljaminevad seosed defineeritud eraldi klassides. Annotatsioonid on täiesti olemas kuid võiks võib-olla kohati natuke rohkem lubatud olla, näiteks AukMall.cs public string Kommentaar lubab 50 tähemärki, mille sisse tekst "Selline pirakas teeauk, et lõhkusin autol parempoolse esiratta ja midagi veel." juba enam ära ei mahu.

Andmeligipääsu kiht

Andmeligipääsu kiht (DAL) teostatud nii, nagu kursusel õpetatud. Võetud kasutusele valmiskirjutatud IEFRepository.cs + EFRepositor.cs Dependency resolver osas kasutusel Ninject ja loodud ka vajalik dummy IAsfaldiaukContext.cs interface selle toimimiseks. Migrations->configuration.cs all võiks internal sealed class... muuta publicuks.

Web API teenus

Peale konsoolirakenduse käivitamist ning andmete baasi saamist võis asuda ka teenust testmima. Nii konsoolirakenduse kui webAPI connectionstring oli määratud (localdb)\v11.0, mille tõttu oli loodud baas kohe hõlpsasti leitav. Baasi loomise/muutmise osas on arendusfaasis kasutatud strateegiat DropCreateDatabaseAlways.

Web API teenus töötab, näitena: api/auk väljastab aukude nimekirja. Teenus annab andmeid JSON formaadis. Controllerid koos vajalike CRUD meetoditega olid kohandatud vastavalt vajadustele ja loodud igale klassile.

Testimine

Testid erinevate klasside peal, kus olid CRUD meetodid kirjeldatud:

GET api/tanav

HTTP päringu sisu:

 GET http://localhost:49407/api/tanav HTTP/1.1
 User-Agent: Fiddler
 Host: localhost:49407

HTTP vastus päringule:

 HTTP/1.1 200 OK
 Cache-Control: no-cache
 Pragma: no-cache
 Content-Type: application/json; charset=utf-8
 Expires: -1
 Server: Microsoft-IIS/8.0
 X-AspNet-Version: 4.0.30319
 X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcb2RhbGJlcmdcRGVza3RvcFxBc2ZhbGRpYXVrXEFzZmFsZGlhdWtUZWVudXNcQXNmYWxkaWF1a1dlYkFQSVxhcGlcdGFuYXY=?=
 X-Powered-By: ASP.NET
 Date: Mon, 27 May 2013 00:20:36 GMT
 Content-Length: 78
 [
   {
     "TanavID": 1,
     "Nimi": "Mustamae",
     "Pikkus": 3.87
   }
 ]
GET api/tanav/1

Sama vastus nagu eelmine.

GET api/tanav/2

HTTP päringu sisu:

 GET http://localhost:49407/api/tanav/2 HTTP/1.1
 User-Agent: Fiddler
 Host: localhost:49407

HTTP päringu vastus:

 HTTP/1.1 404 Not Found
 Cache-Control: no-cache
 Pragma: no-cache
 Content-Type: application/json; charset=utf-8
 Expires: -1
 Server: Microsoft-IIS/8.0
 X-AspNet-Version: 4.0.30319
 X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcb2RhbGJlcmdcRGVza3RvcFxBc2ZhbGRpYXVrXEFzZmFsZGlhdWtUZWVudXNcQXNmYWxkaWF1a1dlYkFQSVxhcGlcdGFuYXZcMg==?=
 X-Powered-By: ASP.NET
 Date: Mon, 27 May 2013 00:23:21 GMT
 Content-Length: 44
 "Sellise id-ga tänavat andmebaasis ei ole!"
POST

HTTP POST päringu sisu:

 POST http://localhost:49407/api/roll HTTP/1.1
 Host: localhost:49407
 User-Agent: Fiddler
 Content-Type: text/json
 Accept: text/json
 Content-Length: 57
 
   {
     "RollID": 1,
     "Nimi": "sample string 2"
   }

HTTP POST päringu vastus:

 HTTP/1.1 201 Created
 Cache-Control: no-cache
 Pragma: no-cache
 Expires: -1
 Location: http://localhost:49407/Help?id=1
 Server: Microsoft-IIS/8.0
 X-AspNet-Version: 4.0.30319
 X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcQW5kcmVcRGVza3RvcFxBc2ZhbGRpYXVrXEFzZmFsZGlhdWtUZWVudXNcQXNmYWxkaWF1a1dlYkFQSVxhcGlccm9sbA==?=
 X-Powered-By: ASP.NET
 Date: Mon, 27 May 2013 17:05:28 GMT
 Content-Length: 0
PUT

HTTP Päringu sisu:

 PUT http://localhost:49407/api/roll/1 HTTP/1.1
 Host: localhost:49407
 User-Agent: Fiddler
 Content-Type: text/json
 Accept: text/json
 Content-Length: 55
 
   {
     "RollID": 1,
     "Nimi": "new Role name"
   }

HTTP Päringu vastus:

 HTTP/1.1 204 No Content
 Cache-Control: no-cache
 Pragma: no-cache
 Expires: -1
 Server: Microsoft-IIS/8.0
 X-AspNet-Version: 4.0.30319
 X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcQW5kcmVcRGVza3RvcFxBc2ZhbGRpYXVrXEFzZmFsZGlhdWtUZWVudXNcQXNmYWxkaWF1a1dlYkFQSVxhcGlccm9sbFwx?=
 X-Powered-By: ASP.NET
 Date: Mon, 27 May 2013 17:08:50 GMT
DELETE

HTTP Päringu sisu:

 DELETE http://localhost:49407/api/roll/1 HTTP/1.1
 Host: localhost:49407
 User-Agent: Fiddler
 Content-Type: text/json
 Accept: text/json

HTTP Päringu vastus:

 HTTP/1.1 204 No Content
 Cache-Control: no-cache
 Pragma: no-cache
 Expires: -1
 Server: Microsoft-IIS/8.0
 X-AspNet-Version: 4.0.30319
 X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcQW5kcmVcRGVza3RvcFxBc2ZhbGRpYXVrXEFzZmFsZGlhdWtUZWVudXNcQXNmYWxkaWF1a1dlYkFQSVxhcGlccm9sbFwx?=
 X-Powered-By: ASP.NET
 Date: Mon, 27 May 2013 17:12:29 GMT


Peale Fiddleriga läbi proovimist said retsenseerijad teada, et meeskond Leemur on realiseerinud /help controlleri, mille kaudu on võimalik ilma Fiddleri abita kõikides controllerites realiseeritud CRUD meetodeid hõlpsasti testida. Teatavasti topelt ei kärise ja sai ka /help uuritud, kus kõik toimis kenasti.

Kodeerimise stiil ja parimad praktikad

Stiil oli okei, kommentaare võiks alati rohkem olla. Ära ei olnud märgitud viited kui oli kasutatud weebi ja õppejõudude materjali abi. Iga projekti Referencide nimekirja vaadates ei hakanud midagi kummalist silma, kõik on selliselt nagu peab. Controllerite osas võiks tuleviku tarbeks luua ja eraldada api controllerid ning tavalised/view eraldi kaustadesse lihtsama jälgitavuse tarbeks. Käveri ASP.NET kodutöö kaitsmistest meelde jäänud soovitus, mida ta jõudis korrata mitmeid kordi: "Ärge kirjutage võimaluse korral koodi eesti keeles, kuna reaalses elus toimub kogu töö ainult inglise keeles."


Veebiteenuse retsensioon - Hops

1. Töö vastavus esitatud tingimustele

Näib, et aru ei ole saadud punktist "Teenuse kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes." WebAPI projektis on KasutamineController koos Post meetodiga, kasutusstatistika muutmiseks? Et siis REST teenuse kasutamise statistikat ei koguta. Tabel on küll olemas.


2. Programmikoodi loetavust ning kommenteeritus

OK, silm puhkab hetkel. Loetav ja kommenteeritud, kus vaja. Kommentaare väga ei leidnud aga samas, polnud ka mingeid häkke, millel kommentaare oleks vaja olnud.


3. Dokumentatsioon

Wikis olemas, midagi.


4. Puudused

DAL projektis Contracts kataloogis olevatest Repository failidest ei saanud väga aru, miks peaks neid iga mudeli jaoks eraldi olema. Samas, nii õpetati ja tuleviku mõttes on OK. Sisuliselt need liidesed ei lisa põhiliidesele IEFRepository-le mitte midagi peale täpsustava tüübi.

DAL projekti Context faili on jäänud meetod LisaKasutamine(), ilmselt arenduse ajast jäänud. "Public" juurdepääsuga ilmselt ei ole õige, samuti ilmselt hüppab välja Intelli-sense autocomplete popup-is.

Models projektis mõjub võõrastavalt "*Mall" nimelised põhiklassid. Midagi valesti ei ole, aga ...teistmoodi. Meenutab matemaatikatunnis nähtud ilma seierita spidomeetrit. Mall nimelisi klasse on loodu igale Models kataloogis oleva klassi kohta. Ilmselt on püütud eraldada andmeannotatsioone äriloogikast? Samas, mudelites äriloogilisi funktsioone/meetodeid ei ole. Võivad tulla aga ka sel juhul ei ole olulist eelist kui klassi muutujad on eraldi mallide klassides.

WebAPI projektis on kontrollerisse kirjutatud koodi, mis on repositooriumi mustri klassides olemas. Näiteks, kasutatakse kontrolleris andmeallika konteksti. Repositoorium võimaldab sellist koodi mitte kirjutada aga kontrolleris on see olemas. Samas, näiteks objektide salvestamisel antakse ülesanne repositooriumile. Sama moodi saaks ka Get() meetodites teha.

Salvestamisel ei ole valideerimine ja tegevuse õnnestumise kontroll eriti tugev.

XmlFormatter on eemaldatud. Eeldame, et xml-ina vastust paluv http klient saab json-i vastuse. Tundub ülekohus olevat. Ka xml-i söövat klienti peab toitma, eriti kui raamistik seda vaikimisi teeb sinu eest, vastavalt kliendi palvele.


Lõppsõna(d)

Ärge siis meie tiimi retsenseerimisel näkku lööge, tuginedes eelnevale jutule :) Üldiselt oleks rohkem oodanud. Samas, kui vaadata palju vaeva kulus endal samasuguse "poolpiduse" asja tegemiseks, siis kiitus tiimile. Põhiasjad on selged, detailid ja iluasjad vajavad veel panust. Loomulikult jäid eespool olevast kriitikast välja kõik kiidusõnad, muidu oleks retsensioon tulnud liiga pikk. Head mõtted oleme juba enda projekti sisse ringi tõstmas.


Veebiteenuse retsensioon

Tsiteerides õppejõu poolt püstitatud ülesannet: Loodav veebiteenus peab võimaldama kolme põhilist teenust - esiteks kindlasti teenuse pakkumist; teiseks teenuse kasutajate tuvastamist ja haldamist; ning lõpuks ka kolmandaks teenuse kasutajate ja kasutusstatistika üle arve pidamist just kasutajate lõikes. Lisaks soovitab härra õppejõud luua eraldi teenus ja teenuse seadistamiseks ning kasutajate haldamiseks mõeldud rakendus. Nüüd vaadates antud meeskonna tööd, siis arvame, et kõige lihtsam ja praktilisem oleks arvatavasti kommentaarid jagada mitmesse ossa - täpsemini nelja:

  • Kas töö vastab esitatud ülesandele ja selle tingimustele?
  • Kas esitatud kood (programmikood) on ikka arusaadavalt ja põhiline just lihtsalt loetav ning otseloomulikult ka kommenteeritud?
  • Kas esitatud tööl on kaasas ka alati vajalik ning hinnatud dokumentatsioon?
  • Ning lõpuks oleme piisavalt nahaalsed ning võtame õiguse kirjeldada antud töö puudusi - muidugi seda juhul kui neid peaksime leidma.

Alustame ei kusagilt mujalt kui ikka esimesest punktist - kas töö vastab tingimustele mis tulid kaasa antud ülesandega? Antud küsimusele on ka meeskond Leemur juba vastanud eelnevalt enda tehtud sissekannetes - kasutajate audentimine ja autoriseerimine on problemaatiline. Lühidalt võttes ei ole neil seega ka kasutajate kohta mittemingisugust statistikat. Seega võiks ju sellest kõigest järeldada, et nii uskumatult kui see ka kõlada ei võiks - on jäänud neil realiseerimata lausa kaks kolmandiku tööst. Noh, jah, vähemalt teenus on on ju tehtud ja tundub, et selle kallal on ka omajagu vaeva nähtud. Ning ootamatult oleme jõudnud teise punkti - kui hästi on võimalik seda programmi koodi lugeda ja kui võimalik, siis ka aru saada? Peab kohe mainima, et kommenteeritud on - üsna viisakalt. Kahjuks ei ole, nii nagu ikka, sellele aga erilist rõhku pööratud - enamusest koodist on piisavalt arusaadav ka ilma komentaarideta. Programmeerijate seisukohalt peabki kood olema kergesti loetav, ning sellisel puhul polegi kommenteerimine alati vajalik. Kolmandaks - kas ja kus on dokumentatsioon?! Üllatuseks seekord oli ka midagi dokumenteeritud. Seda kõike minimaalses koguses, kuid vähemasti oli see olemas. Antud nimekirja lõpust leiamegi neljanda, mõndadele ehk ka kõige magusama punkti - kriitika ja puudused! Kahjuks peab taas juba korra mainitut üle kordama - puuduvad põhimõtteliselt kaks teenust kolmest - teenuste kasutajate tuvastamine ja haldamine ning teenuse kasutajate ja kasutusstatistika üle arve pidamine kasutajate lõikes. Koodis leiduvad mõned pisikesed apsakad, mille oleks võinud viimases versioonis küll korrigeerida kuid ei midagi üleliia koledat ega inetut (mõni tühi meetod jms). Kokkuvõttes võib väita, et vaeva on tööga vähemalt nähtud - rõhutud on just teenuse enda tööle saamisele ja kahjuks arvatavasti just aja puuduse tõttu ei jõutud ülejäänud kahte vajalikku osa valmis mõelda ja kirjutada. Progress on selgelt nähtav ning töö üldine kvaliteet on igati hea.

Meeskond “Seekord 3 liiget”


Klientrakendus

Klientrakendused peavad olema valmis ja wikilehel kirjeldatud hiljemalt 10. juuni 2013. Retsensioonid veebiteenuste kohta peavad tehtud olema 15. juuni 2013

Teeme klientrakenduse enda loodud veebiteenusele. Plaanime teha WPF rakenduse kasutades Bing-i kaarte alusena.

WPF rakendus
- taustaks on Bing kaart
- teeaukude leidmiseks saab kasutada otsingut

 1. aadressi järgi
 2. koordinaatide järgi
 3. nimekirja alusel (nimekirjas oleva augu andmetel klikkides)

- lisada saab uusi auke (topelt klõps kaardil augu asukohas)
- muuta saab aukude staatust (parandatuks märkida, topelt klõps nimekirjas oleva augu andmetel klikkides)
Aukude kuvamiseks kasutatakse tick mark märke.
Taustaks oleva kaardipildiga saab teha tavapäraseid toiminguid nagu zoom in, zoom out, drag jmt.


Klientrakenduse paigaldamise lühijuhend

Kood asub aadressil: http://enos.itcollege.ee/~ekivisal/VRII/.
EDIT* Uus kood asub aadressil : http://enos.itcollege.ee/~rhommuk/vr2/.

  • Esimese asjana lasta käima AsfaldiaukTest (set as startup project). Teiseks panna käima AsfaldiaukWebAPI ehk siis teenus ning seejärel uues VS aknas käivitada WPFBingMapsApp.
  • Vajadusel seadistamisel installida Nuget-i Bing Maps Wpf Control pakett.

Kui ikka on probleemid, siis küsida võib julgesti.