Unnamed Team

From EIK wiki

Meeskond

  • Andreas Kirotar
  • Jaan Kostõgov

Idee

XML ideeks on arvuti mängude kataloog.

Veebiteenuse analüüs

Nt: http://store.steampowered.com/ https://www.g2a.com/?d=276 Nimetupood on rakendus, millega on võimalik kasutajatel osta mängude võtmeid. Rakenduse eesmärk on lubada kasutajatel ennast registreerida ja sisselogida, kui kasutaja on sisse loginud, siis on tal võimalik vaadata ja otsida mänge. Mänge on võimalik ka filtreerida hinna ja kategooria kaudu. Mängu cd-key saab lisada kindla mängu alla. Mängu infot saab lisada ja muuta admin kasutaja. Cd-key saab lisada admin kasutaja, kuid (nice-to-have võiks olla müük-kasutaja). Reitingu süsteem müüjale on 5 palli süsteemis, mis tekib hinnangute jagamise tulemusena (nice-to-have). Põhilised(must-have) vajadused rakendusele on järgmised: kuulutuste olemasolu, kergesti kasutatav rakendus, maksevõimalus(nice-to-have). Selleks, et põhilisi vajadusi täita on vaja mängude kirjelduste olemasolu süsteemis, ehk admin lisab kirjeldused. Rakenduse tugevuseks on see eest mõistlik kasutajaliides ning mugav viis soovitud toote leidmiseks.

Must have features

Külastaja

Külastaja saab:

  • Registreerida kasutajaks
  • Logida registreeritud kasutajaga sisse

Kasutaja

Kasutaja saab:

  • Saab sisselogida
  • Saab vaadata olemasoleviad mänge ja neid ostukorvi lisada
  • Saab koostada favourite mängu liste
  • Saab muuta oma kasutaja andmeid
  • Otsida mänge
  • Otsida mänge kategooriate läbi

Admin

Admin saab:

  • Saab kustutada mänge
  • Saab lisada mänge
  • Saab muuta mängude kirjeldust
  • Saab kasutajaid moderaatoriks luua
  • Saab kustutada kasutajaid

Nice to have features

  • Külastav kasutaja saab ilma registreerimata veebi vaadata
  • Saab hinnata mänge
  • Saab tõmmata mänge
  • Saab sooritada ostu

ERD

Selline võiks olla veebirakenduse ERD Entity Relationship Diagram UnnamedTeam.jpg

XML / XSD / XSLT

<?xml version="1.0" encoding="utf-8" ?>
<GameShop>
  <Genres>
    <Genre>Action</Genre>
    <Genre>RPG</Genre>
    <Genre>Action</Genre>
    <Genre>Fantasy</Genre>
    <Genre>Sci-fi</Genre>
    <Genre>Horror</Genre>
  </Genres>
  <Games>
    <Game Title="Fallout4" Year="2016" >
      <Genres>
        <Genre>FPS</Genre>
        <Genre>Action</Genre>
        <Genre>Sci-fi</Genre>
      </Genres>
      <Images>
        <Image>http://cdn.akamai.steamstatic.com/steam/apps/377160/header.jpg?t=1486403180</Image>
        <Image>http://cdn.akamai.steamstatic.com/steam/apps/377160/header.jpg?t=1486403180</Image>
      </Images>
      <SystemRequiments RequimentType="Minimum">
        <Oses>
          <Os Architecture="64bit">Windows 7</Os>
          <Os Architecture ="64bit">Windows 10</Os>
        </Oses>
        <Processor>Intel Core i5-2400/AMD FX-8320 or better</Processor>
        <Memory>4 GB RAM</Memory>
        <Graphics>NVIDIA GTX 670 2GB/AMD Radeon HD 7870 2GB or better</Graphics>
        <Storage>25 GB available space</Storage>
        <AdditionalNotes>Requires broadband internet connection for Multiplayer</AdditionalNotes>
      </SystemRequiments>
      <SystemRequiments RequimentType="Reccomended" >
        <Oses>
          <Os Architecture="64bit">Windows 7</Os>
          <Os Architecture ="64bit">Windows 10</Os>
          <Os Architecture="64bit">Windows 8</Os>
        </Oses>
        <Processor> Intel Core i7-3770/AMD FX-8350 or better</Processor>
        <Memory>8 GB RAM</Memory>
        <Graphics>NVIDIA GTX 970 4GB/AMD Radeon R9 290 4GB or better</Graphics>
        <Storage>25 GB available space</Storage>
        <AdditionalNotes>Requires broadband internet connection for Multiplayer</AdditionalNotes>
      </SystemRequiments>
    </Game>
    <Game Title="Fallout 3 NewVegas" Year="2016" >
      <Genres>
        <Genre>FPS</Genre>
        <Genre>Action</Genre>
        <Genre>Sci-fi</Genre>
      </Genres>
      <Images>
        <Image>https://i.kinja-img.com/gawker-media/image/upload/s--dWfA2BXt--/ilz6yicwfquqoyalkwjd.jpg</Image>
      </Images>
      <SystemRequiments RequimentType="Minimum">
        <Oses>
          <Os Architecture="32bit">Windows xp</Os>
          <Os Architecture ="32bit">Windows Vista</Os>
        </Oses>
        <Processor>2.4 Ghz Intel Pentium 4 or equivalent processor</Processor>
        <Memory>1 GB (XP)/ 2 GB (Vista) </Memory>
        <Graphics>Direct X 9.0c compliant video card with 256MB RAM (NVIDIA 6800 or better/ATI X850 or better)  </Graphics>
        <Storage>25 GB available space</Storage>
        <AdditionalNotes> Online play requires log-in to Games For Windows - Live</AdditionalNotes>
      </SystemRequiments>
    </Game>
    <Game Title="Dark Souls 3" Year="2016">
      <Genres>
        <Genre>RPG</Genre>
      </Genres>
      <Images>
        <Image>
          https://d1r7xvmnymv7kg.cloudfront.net/sites_products/darksouls3/assets/img/DARKSOUL_facebook_mini.jpg
        </Image>
        <Image>
          https://cdn2.vox-cdn.com/uploads/chorus_asset/file/6323691/Dark_Souls_3_concept_art.0.jpg
        </Image>
        <Image>
          https://i.ytimg.com/vi/Ha8eRiP0DmI/maxresdefault.jpg
        </Image>
      </Images>
      <SystemRequiments RequimentType="Minimum">
        <Oses>
          <Os Architecture="32bit">Windows xp</Os>
          <Os Architecture ="32bit">Windows Vista</Os>
        </Oses>
        <Processor>Intel Core i3-2100 / AMD® FX-6300</Processor>
        <Memory>4 GB RAM</Memory>
        <Graphics>NVIDIA® GeForce GTX 750 Ti / ATI Radeon HD 7950</Graphics>
        <DirectX>Version 11</DirectX>
        <Network>Broadband Internet connection</Network>
        <Storage>25 GB available space</Storage>
        <SoundCard>DirectX 11 sound device</SoundCard>
      </SystemRequiments>
      <SystemRequiments RequimentType="Recommended">
        <Oses>
          <Os Architecture="64bit">Windows 7</Os>
          <Os Architecture ="64bit">Windows 8.1</Os>
          <Os Architecture ="64bit">Windows 10</Os>
        </Oses>
        <Processor>Intel Core i7-3770 / AMD® FX-8350</Processor>
        <Memory>8 GB RAM </Memory>
        <Graphics>NVIDIA® GeForce GTX 970 / ATI Radeon R9 series</Graphics>
        <DirectX>Version 11</DirectX>
        <Network>Broadband Internet connection</Network>
        <Storage>25 GB</Storage>
        <SoundCard>DirectX 11 sound device</SoundCard>
      </SystemRequiments>
    </Game>
  </Games>
</GameShop>

XSD

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified">
   <xs:element name="GameShop">
      <xs:complexType>
         <xs:sequence>
            <xs:element name="Genres">
               <xs:complexType>
                  <xs:sequence>
                     <xs:element maxOccurs="unbounded" name="Genre" type="xs:string" />
                  </xs:sequence>
               </xs:complexType>
            </xs:element>
            <xs:element name="Games">
               <xs:complexType>
                  <xs:sequence>
                     <xs:element maxOccurs="unbounded" name="Game">
                        <xs:complexType>
                           <xs:sequence>
                              <xs:element name="Genres">
                                 <xs:complexType>
                                    <xs:sequence>
                                       <xs:element maxOccurs="unbounded" name="Genre" type="xs:string" />
                                    </xs:sequence>
                                 </xs:complexType>
                              </xs:element>
                              <xs:element name="Images">
                                 <xs:complexType>
                                    <xs:sequence>
                                       <xs:element maxOccurs="unbounded" name="Image" type="xs:string" />
                                    </xs:sequence>
                                 </xs:complexType>
                              </xs:element>
                              <xs:element maxOccurs="unbounded" name="SystemRequiments">
                                 <xs:complexType>
                                    <xs:sequence>
                                       <xs:choice maxOccurs="unbounded">
                                          <xs:element name="Oses">
                                             <xs:complexType>
                                                <xs:sequence>
                                                   <xs:element maxOccurs="unbounded" name="Os">
                                                      <xs:complexType>
                                                         <xs:simpleContent>
                                                            <xs:extension base="xs:string">
                                                               <xs:attribute name="Architecture" type="xs:string" use="required" />
                                                            </xs:extension>
                                                         </xs:simpleContent>
                                                      </xs:complexType>
                                                   </xs:element>
                                                </xs:sequence>
                                             </xs:complexType>
                                          </xs:element>
                                          <xs:element name="Processor" type="xs:string" />
                                          <xs:element name="Memory" type="xs:string" />
                                          <xs:element name="Graphics" type="xs:string" />
                                          <xs:element name="Storage" type="xs:string" />
                                          <xs:element name="AdditionalNotes" type="xs:string" />
                                          <xs:element name="DirectX" type="xs:string" />
                                          <xs:element name="Network" type="xs:string" />
                                          <xs:element name="SoundCard" type="xs:string" />
                                       </xs:choice>
                                    </xs:sequence>
                                    <xs:attribute name="RequimentType" type="xs:string" use="required" />
                                 </xs:complexType>
                              </xs:element>
                           </xs:sequence>
                           <xs:attribute name="Title" type="xs:string" use="required" />
                           <xs:attribute name="Year" type="xs:unsignedShort" use="required" />
                        </xs:complexType>
                     </xs:element>
                  </xs:sequence>
               </xs:complexType>
            </xs:element>
         </xs:sequence>
      </xs:complexType>
   </xs:element>
</xs:schema>

XSLT

XSLT (HTML)

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" version="1.0" exclude-result-prefixes="msxsl">
   <xsl:output method="html" indent="yes" />
   <xsl:template match="/">
      <html>
         <head>
            <title>Games by genre(windows 7)</title>
         </head>
         <body>
            <xsl:for-each select="/GameShop/Genres/Genre">
               <xsl:variable name="MainGenre" select="." />
               <h2>
                  <xsl:value-of select="$MainGenre" />
               </h2>
               <ul style="list-style-type:none">
                  <xsl:for-each select="/GameShop/Games/Game">
                     <xsl:if test="(Genres/Genre = $MainGenre) and (SystemRequiments/Oses/Os ='Windows 7')">
                        <xsl:variable name="Game" select="." />
                        <li>
                           Name:
                           <xsl:value-of select="./@Title" />
                        </li>
                        <li>
                           Release year:
                           <xsl:value-of select="./@Year" />
                        </li>
                        <li>
                           <xsl:for-each select="./Images/Image">
                              <xsl:variable name="ImageUrl" select="." />
                              <img src="{$ImageUrl}" width="400" height="200" />
                           </xsl:for-each>
                        </li>
                        <li>Requirements:</li>
                        <li>
                           Operating systems:
                           <xsl:value-of select="$Game/SystemRequiments/Oses" />
                        </li>
                        <li>
                           Processor:
                           <xsl:value-of select="$Game/SystemRequiments/Processor" />
                        </li>
                        <li>
                           Memory:
                           <xsl:value-of select="$Game/SystemRequiments/Memory" />
                        </li>
                        <li>
                           Graphics card:
                           <xsl:value-of select="$Game/SystemRequiments/Graphics" />
                        </li>
                        <li>
                           Storage:
                           <xsl:value-of select="$Game/SystemRequiments/Storage" />
                        </li>
                        <li>
                           Notes:
                           <xsl:value-of select="$Game/SystemRequiments/AdditionalNotes" />
                        </li>
                        <li>
                           Sound:
                           <xsl:value-of select="$Game/SystemRequiments/SoundCard" />
                        </li>
                        <li>
                           DirectX:
                           <xsl:value-of select="$Game/SystemRequiments/DirectX" />
                        </li>
                     </xsl:if>
                  </xsl:for-each>
               </ul>
            </xsl:for-each>
         </body>
      </html>
   </xsl:template>
</xsl:stylesheet>

XSLT (XML)

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="@* | node()">
    <GameShop>
        <Games>
          <xsl:for-each select="/GameShop/Games/Game">
            <xsl:if test="Genres/Genre = 'Action'">
              <xsl:variable name="Game" select="."/>
              <Game>
              <Name>
                <xsl:value-of select="./@Title"/>
              </Name>
              <Realease>
                <xsl:value-of select="./@Year"/>
              </Realease>
              <Images>
                <xsl:for-each select="./Images/Image">
                  <xsl:variable name="ImageUrl" select="."/>
                  <img src="{$ImageUrl}" width="400" height="200"/>
                </xsl:for-each>
              </Images>
              <xsl:if test="SystemRequiments/@RequimentType = 'Minimum'">
              <MinimumSystemRequiments>
                <OperatingSystems>
                  <xsl:for-each select="./SystemRequiments/Oses/Os">
                    <OperatingSystem>
                      <xsl:value-of select="."/>
                    </OperatingSystem>
                  </xsl:for-each>
                </OperatingSystems>
                <Processor>
                  <xsl:value-of select="$Game/SystemRequiments/Processor"/>
                </Processor>
                  <Memory>
                <xsl:value-of select="$Game/SystemRequiments/Memory"/>
                </Memory>
                <GraphicsCard>
                  <xsl:value-of select="$Game/SystemRequiments/Graphics"/>
                </GraphicsCard>
                <Storage>
                  <xsl:value-of select="$Game/SystemRequiments/Storage"/>
                </Storage>
                <Notes>
                  <xsl:value-of select="$Game/SystemRequiments/AdditionalNotes"/>
                </Notes>
                <Sound>
                  <xsl:value-of select="$Game/SystemRequiments/SoundCard"/>
                </Sound>
                <DirectX>
                  <xsl:value-of select="$Game/SystemRequiments/DirectX"/>
                </DirectX>
              </MinimumSystemRequiments>
              </xsl:if>
              </Game>
              </xsl:if>
          </xsl:for-each>
        </Games>
    </GameShop>
  </xsl:template>
</xsl:stylesheet>
XSLT(XML) Tulem
<?xml version="1.0" encoding="utf-8"?>
<GameShop>
  <Games>
    <Game>
      <Name>Fallout4</Name>
      <Realease>2016</Realease>
      <Images>
        <img src="http://cdn.akamai.steamstatic.com/steam/apps/377160/header.jpg?t=1486403180" width="400" height="200" />
        <img src="http://cdn.akamai.steamstatic.com/steam/apps/377160/header.jpg?t=1486403180" width="400" height="200" />
      </Images>
      <MinimumSystemRequiments>
        <OperatingSystems>
          <OperatingSystem>Windows 7</OperatingSystem>
          <OperatingSystem>Windows 10</OperatingSystem>
        </OperatingSystems>
        <Processor>Intel Core i5-2400/AMD FX-8320 or better</Processor>
        <Memory>4 GB RAM</Memory>
        <GraphicsCard>NVIDIA GTX 670 2GB/AMD Radeon HD 7870 2GB or better</GraphicsCard>
        <Storage>25 GB available space</Storage>
        <Notes>Requires broadband internet connection for Multiplayer</Notes>
        <Sound></Sound>
        <DirectX></DirectX>
      </MinimumSystemRequiments>
    </Game>
    <Game>
      <Name>Fallout 3 NewVegas</Name>
      <Realease>2016</Realease>
      <Images>
        <img src="https://i.kinja-img.com/gawker-media/image/upload/s--dWfA2BXt--/ilz6yicwfquqoyalkwjd.jpg" width="400" height="200" />
      </Images>
      <MinimumSystemRequiments>
        <OperatingSystems>
          <OperatingSystem>Windows xp</OperatingSystem>
          <OperatingSystem>Windows Vista</OperatingSystem>
        </OperatingSystems>
        <Processor>2.4 Ghz Intel Pentium 4 or equivalent processor</Processor>
        <Memory>1 GB (XP)/ 2 GB (Vista) </Memory>
        <GraphicsCard>Direct X 9.0c compliant video card with 256MB RAM (NVIDIA 6800 or better/ATI X850 or better)  </GraphicsCard>
        <Storage>25 GB available space</Storage>
        <Notes> Online play requires log-in to Games For Windows - Live</Notes>
        <Sound></Sound>
        <DirectX></DirectX>
      </MinimumSystemRequiments>
    </Game>
  </Games>
</GameShop>

Log

  • 17.03 Esimene kokkusaamine, XML, XSD, XSLT(HTML) kujul loomine.
  • 20.03 Kaugtööna XSLT(HTML) ja XSLT(XML) lõpetamine, Wiki lehe loomine.
  • 26.03 Kaugtöö eelneva lõpetamine.
  • 12.04 Analüüsi alustamine koolis
  • 17.04 Analüüsi wikisse kaugtööna

Sauce projektile

http://enos.itcollege.ee/~akirotar/Unnamed.zip

Veebiteenusele retsensioon

Retsensioon meeskonna Meeskond:_Falador veebiteenusele Veebiteenus on tutvumisäppidele, kus pannakse paari inimesi, kes vihkavad ühesuguseid asju. Enamus funktsionaalsusest on meeskonnal täitsa saavutatud ning on märgata, et teenusega on vaeva nähtud. Veebiteenuse aadressil avaneb mingi registreemise/sisselogimise leht. Lisaks kõrval ka mingi api väljakutsumise koht. See kõik tundub väga segane(mille jaoks on seda vaja sinna?)ja lisaks meil ei õnnestu seal lehel mitte kuidagi registreerida end kasutajaks. Viskab ette erroreid, et Json-il puuduvad nõutud atribuudid. Registreemislehel aga neid asju ei saagi lisada.Näiteks registreemislehel küsitakse ainult kasutaja, parooli ja. nime.Erroris aga nõutakse, et oleks näiteks lisatud ka sünnikuupäev ja sugu. Meie arvates, veebiteenusel võiks olla abileht(mis tavaliselt asp.net web apis olemas by default), kus on toodud välja kõik selle veebiteenuse päringute url-d. See on väga tähtis, et klient saaks teada, milliseid päringuid saab ta teha. Faladori meeskonnal olid aga urlid toodud välja kontrollerite meetodite kommentaarides. See aga oleks kliendile suhteliselt kasutu, kuna tavaliselt klient ei näe veebiteenuse lähtekoodi. Fiddleriga sai proovitud teha päringuid, mis ka õnnestus.

Projektis on palju puudusi: repod, service kiht, dto. Domeeni mudelites oli kasutatud õigeid andmetüüpe, kuid Id-del kasutaksime stringi asemel integer tüüpi väärtusi. Samuti, ei ole seal näha, et oleks kasutatud andmete annotatsioone. Kontrollerites pöördutakse otse andmebaasi poole, mis on suur viga, kuna soovi korral oleks seda koodi raske muuta ja nii kirjutatakse üleliigset koodi, mis teeb asja segaseks. Kõik andmebaasi päringud võiksid olla repositooriumites. See vähendaks mõttetut koodi kirjutamist- nt samasuguseid päringuid saaks panna baasrepositooriumi ja siis panna kõiki teisi repositooriume implementeerima seda. Samuti andmebaasipäringute muutmise soovi korral, ei peaks neid päringuid kontrolleritest otsima, vaid need oleksid kättesaadavad ühest kohast. Äriloogika on samuti kontrollerites, mis teeb samuti kontrollereid väga suureks ja segaseks. Kontrollerites võiks olla ainult web api-ga seotud koodi, ja kõik äriloogika võiks viia üle teisse kihti. Erinevate kihtide olemasolu parandaks koodi loetavuse ja lihtsustaks selle koodi muutmist. Projekti idee on huvitav ning selle äriloogika on päris keeruline, kuid kahjuks selles projektis puudusid vajalikud kihid, see oli aga tähtis osa sellest ainest.

Klientrakendusele retsensioon

Retsensioon meeskonna Ott klientrakendusele - Klientrakendus kasutades veebiteenust lihtsustab korteriühistu tööd. Enamus klientrakenduse funktsionaalsusest oli tehtud, kuid puudus sisselogimise ja registreemise võimalus, sest see oli puudu ka veebiteenuses. Klientrakenduse disain on väga lihtne ning enamvähem mugav, kuid mõni vaade on halva ülesehitusega. Näiteks vaates “Inimeste ja korterite lisamine” on tekstiväljad ja nende nimetused teineteisest liiga kaugel ning asuvad erineval real, see teeb väljade täitmist väga ebamugavaks. Klientrakenduses pole arvestatud rakenduse akna suuruse dünaamilisusega: rakendust skaleerides jäävad nupud asetsema sama koha peale. Kuna sellega ei arvestata, siis oleks võinud akna staatilise/fikseeritud suurusega jätta. Mõningad bugid mis tekkisid klientrakendust kasutades on kirjeldatud allpool. Kui lisada tühjade andmetega isikut, siis rakendus jookseb kokku ja kuvatakse IndexOutOfBoundException. Lisaks peale tühja teate sisestamist, minnes “Kodu” vaatesse, kuvatakse “Newtonsoft.Json.JsonSerializationException”, sama kehtib ka hääletuste lisamisel, tühja korteri lisamisel või lihtsalt mitte midagi lisades navigeerides erinevate vaadete vahel. Seega võib väita, et jäid mõned asja testimata. Samas kui rakendust edasi proovida, tundub JsonSerializationException tekkivat kohe kui minna “Kodu” peale. See tekitab aga tahtmise klientrakenduse kinni panna ja minna koodi vaatama. Rakenduses on kasutatud pärishästi MVVM arendusmustrit. Ilusasti on olemas vaated, vaatemudelid ja mudelid. Samuti ka service kiht, mille abiga klientrakendus suhtleb veebiteenusega. Kokkuvõtteks: võib väita, et koodi osatakse kirjutada küll, kuid testimise peale on mõeldud liiga vähe ning kasutajamugavuse peale samuti. Siiski julgeks väita, et selle projektiga õpiti tegema korraliku arendusmustriga rakendusi.