<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.itcollege.ee/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Anroots</id>
	<title>ICO wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.itcollege.ee/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Anroots"/>
	<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php/Special:Contributions/Anroots"/>
	<updated>2026-05-08T18:35:22Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=49145</id>
		<title>Meeskond &quot;Harold&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=49145"/>
		<updated>2012-06-11T13:34:27Z</updated>

		<summary type="html">&lt;p&gt;Anroots: /* Kood */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
{| style=&amp;quot;width:100%;height: 40px; background-color:#dff0d8;border: 1px solid ##468847;color:#468847;padding:10px;font-size:16px;font-weight:bold-webkit-border-radius: 8px;-moz-border-radius: 8px;border-radius: 8px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
| Ära kaitsesime. Maksimumpunktidele. Aitähh!!&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Tegemist on IT Kolledži aine raames eksamieeldust taotleva projektimeeskonna töö dokumentatsiooniga.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 30em; padding-left: 2em; float: right; font-size: 95%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Meeskond &#039;&#039;&amp;quot;Harold&amp;quot;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Aine:&#039;&#039;&#039;&lt;br /&gt;
| [[:Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhend:&#039;&#039;&#039;&lt;br /&gt;
| [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2012 Juhend]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Tüüp:&#039;&#039;&#039;&lt;br /&gt;
| Projekt&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Anroots]]&amp;lt;br /&amp;gt;[[User:Mparast]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhendajad:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Mposka]]&amp;lt;br /&amp;gt;[[User:Kraspel]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Semester:&#039;&#039;&#039;&lt;br /&gt;
| 2011/2012 kevad&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Lingid&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|API Demo&lt;br /&gt;
|[http://api.sqroot.eu http://api.sqroot.eu] &#039;&#039;(offline)&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Projekt =&lt;br /&gt;
&lt;br /&gt;
Projekti esimesed kaks osa keskenduvad veebiteenuse &amp;quot;Challengo&amp;quot; taasloomisele. Projekti esimene osa valmistab ette peamis(t)e päringu(te) XML vastuse struktuuri, projekti teine osa (veebiteenuse loomine) ehitab vastava API.&lt;br /&gt;
&lt;br /&gt;
== Korraldus ==&lt;br /&gt;
&lt;br /&gt;
Projektiga seonduv dokumentatsioon (erandiks on käesolev wiki leht), kasutajale nähtavad tekstid ning lähtekood on kirjutatud inglise keeles. Võimalusel on kood kirjutatud hilisema I18n toe võimaldamiseks.&lt;br /&gt;
&lt;br /&gt;
Koodi haldab GitHub repositoorium, juurdepääsu saamiseks tuleb projektijuhile saata oma GitHub kasutajanimi (või &#039;&#039;pull request&#039;&#039;). Tegemist vajavaid töid näeb GitHub lehel &#039;&#039;Issues&#039;&#039; vahekaardilt ning asjakohane dokumentatsioon (API) on GitHub wiki alamjaotises.&lt;br /&gt;
&lt;br /&gt;
Lähtekood on põhjalikult kommenteeritud, muud, eraldiseisvat dokumentatsiooni koodi kohta on minimaalselt.&lt;br /&gt;
&lt;br /&gt;
== XML Andmefailid ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 3. märts 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
XML andmefail kirjeldab veebiteenuse &amp;quot;[http://garage48.org/blogger/projects-on-garage48-tallinn-2011 Challengo]&amp;quot; andmeid. Andmed asuvad MYSQL andmebaasis, mille struktuur on kirjeldatud ERD mudeliga [[File:Harold_Challengo_MYSQL_ERD.png|200px|thumb|MYSQL ERD mudel]]. XML formaadis andmeid väljastab serveris asuv PHP API. Järgnevalt toodud XML näited ei pruugi projekti esimese osa nõudmiste tõttu olla vastavuses teise osana valmiva veebiteenuse tegeliku väljundiga.&lt;br /&gt;
&lt;br /&gt;
Faile saab vaadata ka võrgust: http://enos.itcollege.ee/~anroots/challengo/xml/. Soovitatav on seda teha just XSLT stiilifaili jaoks (http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml).&lt;br /&gt;
&lt;br /&gt;
=== XML [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml link]]===&lt;br /&gt;
&lt;br /&gt;
Järgnevalt on toodud lõik kasutaja praeguste väljakutsete päringust. Kasutajal on parajasti kaks aktiivset väljakutset, igal väljakutsel on veidi meta-infot, mingi hulk ülesandeid (tasks) ning igal ülesandel on üks või mitu autasu (rewards).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;Response.xsl&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!-- List of user&#039;s current challenges --&amp;gt;&lt;br /&gt;
&amp;lt;challenges&amp;gt;&lt;br /&gt;
  &amp;lt;!-- First challenge, started by the user --&amp;gt;&lt;br /&gt;
  &amp;lt;challenge id=&amp;quot;4&amp;quot; tasks=&amp;quot;6&amp;quot; progress=&amp;quot;17%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;The Improgrupp Jaa!&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Inspired by a true story, the Improgrupp Jaa! contains tasks that challenge ones spontaniety and social courage.&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;duration&amp;gt;1209600&amp;lt;/duration&amp;gt;&lt;br /&gt;
    &amp;lt;points_required&amp;gt;18&amp;lt;/points_required&amp;gt;&lt;br /&gt;
    &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;!-- Each challenge has a number of tasks that have to be completed.--&amp;gt;&lt;br /&gt;
    &amp;lt;!-- No challenge can be completed before earned points from tasks (rewards) exceed the points_required field --&amp;gt;&lt;br /&gt;
    &amp;lt;tasks max_points=&amp;quot;26&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;19&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Make a present to a homeless person&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;If you can read this, you&#039;re probably among the luckier ones. Do something for the ones who can&#039;t.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;!-- Each task yields rewards on completion. Rewards are &amp;quot;power&amp;quot; points of different categories.--&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;20&amp;quot; completed=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment a stranger&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Make a sincere compliment to someone you don&#039;t know. We could do with more praise where it&#039;s due.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;21&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Do volunteer work&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Offer yourself as a volunteer to an event or a cause.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;22&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Perform to a security camera&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Do a little dance to a security camera. It shouldn&#039;t be illegal...probably. Don&#039;t get in trouble!&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;23&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment someone for a job well done&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;When was the last time you thanked the janitor?&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;24&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Take a day off&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;This is mostly for work-a-holics: rest for a while.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
    &amp;lt;/tasks&amp;gt;&lt;br /&gt;
  &amp;lt;/challenge&amp;gt;&lt;br /&gt;
&amp;lt;/challenges&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT (stiilifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsl link]] ===&lt;br /&gt;
&lt;br /&gt;
Toodud stiilifail muudab ülaltoodud XML vastuse inimesele kergemini loetavaks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html class=&amp;quot;no-js&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;Ando Roots&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Challengo Response&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.css&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.responsive.css&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Challengo API response&amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
            The following is a list of challenges reported by the XML API.&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;!-- Go over each challenge --&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;challenges/challenge&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h2&amp;gt;&lt;br /&gt;
              &lt;br /&gt;
              &amp;lt;!-- Challenge badge image and title --&amp;gt;&lt;br /&gt;
              &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;&lt;br /&gt;
                  http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/img&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
              &amp;lt;!-- Challenge progress, if applicable --&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:if test=&amp;quot;@progress&amp;quot;&amp;gt;&lt;br /&gt;
                (&amp;lt;span&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@progress&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/span&amp;gt;)&lt;br /&gt;
              &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
            &amp;lt;/h2&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;p class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- Table for some challenge meta-info --&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered span4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Points required to complete:&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;points_required&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Time left (hours):&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;round(duration div 1800)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;!-- List all challenge tasks --&amp;gt;&lt;br /&gt;
            &amp;lt;h3 style=&amp;quot;margin-top:140px&amp;quot;&amp;gt;Tasks (&amp;lt;xsl:value-of select=&amp;quot;@tasks&amp;quot;/&amp;gt;)&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered table-striped table-condensed&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;thead&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;ID&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Title&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Badge&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Rewards&amp;lt;/th&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/thead&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;tasks/task&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;tr&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Color the row gray if task is completed --&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;@completed&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:attribute name=&amp;quot;class&amp;quot;&amp;gt;&lt;br /&gt;
                        help-block&lt;br /&gt;
                      &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                      &amp;lt;/img&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:for-each select=&amp;quot;rewards/reward&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;li&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=1&amp;quot;&amp;gt;&lt;br /&gt;
                              Compassion&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=2&amp;quot;&amp;gt;&lt;br /&gt;
                              Strength&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=3&amp;quot;&amp;gt;&lt;br /&gt;
                              Intelligence&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;span&amp;gt;&lt;br /&gt;
                              &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                            &amp;lt;/span&amp;gt;&lt;br /&gt;
                          &amp;lt;/li&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;!-- End of challenge task table --&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;!-- End of challenge --&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD (skeemifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsd link]] ===&lt;br /&gt;
&lt;br /&gt;
Skeemifail kirjeldab päringu vastuse XML struktuuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;challenges&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;challenge&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;duration&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;points_required&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;tasks&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;task&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rewards&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;reward&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:extension base=&amp;quot;xs:unsignedByte&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:attribute name=&amp;quot;power_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;completed&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;max_points&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;tasks&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;progress&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Veebiteenus ==&lt;br /&gt;
&#039;&#039;Tähtaeg 30. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:challengo_req2.png|300px|thumb|Näidis HTTP API päringust]]&lt;br /&gt;
&lt;br /&gt;
Veebiteenusena realiseeriti API, mis võimaldab klientide registreerimist, haldamist ning Challengo teenuse põhifunktsionaalsuse pakkumist HTTP päringute kaudu. API loomisel kasutati RESTful arhitektuuri. Täpsem dokumentatsioon asub API lehel: [http://api.sqroot.eu &amp;quot;API dokumentatsioon&amp;quot;] (tegemist on ajutise aadressiga, mis võetakse maha aine lõppemisel).&lt;br /&gt;
&lt;br /&gt;
=== Kriteeriumid ===&lt;br /&gt;
&lt;br /&gt;
Kõik õppejõu poolt esitatud kriteeriumid on täidetud. Erikokkuleppe alusel on projekti keeleks PHP.&lt;br /&gt;
&lt;br /&gt;
Kriteeriumid:&lt;br /&gt;
&lt;br /&gt;
* Teenuse pakkumist - API suudab vastata talle esitatud, valideeruvatele (vt. API dokumentatsiooni) päringutele&lt;br /&gt;
* Teenuse kasutajate tuvastamist ning haldamist - Kasutajatuvastus toimub nime/parooli alusel HTTP Basic Authentication protokollil, ideaalis üle HTTPS-i. Süsteemi sisemiselt on kasutajatel rollid, mida saab kasutada halduseks, näiteks LOGIN rolli eemaldamisel ei saa kasutaja enam sisse logida.&lt;br /&gt;
* Teenuse kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes - Kõik API päringud käivad API tokeni alusel. Tokeni kasutaja päringud logitakse nii logifaili kui andmebaasi, neid on sealt võimalik pärida. Lisaks on igal tokenil päringulimiit (tunnis), selle ületamisel päringuid eiratakse. Tokeneid saab tühistada, mis tähendab, et klientrakenduse päringuid ei töödelda mingil juhul.&lt;br /&gt;
&lt;br /&gt;
=== Testimine ===&lt;br /&gt;
&lt;br /&gt;
Veebiteenusel ei ole eraldi kasutajaliidest. Testimiseks on kaks varianti:&lt;br /&gt;
&lt;br /&gt;
# Luua ise vastav kasutajaliides ehk klientrakendus&lt;br /&gt;
# Kasutada mõnd abitööriista HTTP päringute koostamiseks. Soovitus: [https://chrome.google.com/webstore/detail/aejoelaoggembcahagimdiliamlcdmfm &amp;quot;Chrome plugin&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
Autentimisandmed rakendusele saab luua dokumentatsiooni lehel oleva vormi kaudu (andmed saadetakse e-mailile). Kasutajakonto saab luua juba API päringute abil.&lt;br /&gt;
&lt;br /&gt;
N.B. Juhul, kui uute API tokenite loomine ebaõnnestub (serveri mailiserver on veidi ebastabiilne), võib kasutada ka järgnevaid andmeid:&lt;br /&gt;
&lt;br /&gt;
Secret: fowhosurtothab&lt;br /&gt;
Token: fleraffahskuff&lt;br /&gt;
&lt;br /&gt;
=== Kood ===&lt;br /&gt;
&lt;br /&gt;
Lähtekoodi saab [http://api.sqroot.eu/anroots-challengo-a6da30942c8c.tar.gz siit] &#039;&#039;(removed)&#039;&#039;. Kohtmasinasse paigaldamiseks tuleb alla laadida [http://kohanaframework.org Kohana] framework ning paigaldada application/bootstrap.php failis märgitud moodulid. Andmebaasi schema on database kaustas. Kood on testitud ainult Linux platvormil LAMP stack-iga.&lt;br /&gt;
&lt;br /&gt;
== Klientrakendus ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 5. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:5554-IceCream 024.png|300px|thumb|Ekraanipilt tulevaste etenduste nimekirjast]]&lt;br /&gt;
[[File:5554-IceCream 025.png|300px|thumb|Ekraanipilt etenduse detailvaatest]]&lt;br /&gt;
&lt;br /&gt;
Klientrakendus on Android rakendus, mis kuvab teater NO99 etendusi ning võimaldab punktide alusel pileteid osta. Tegu on jQuery Mobile pordiga Android platvormile.&lt;br /&gt;
&lt;br /&gt;
Rakendus suhtleb Play! raamistikus kirjutatud API-ga, mis asub kahjuks meeskonna localhostis, sest selle võrku panemiseks oli vaja VPS serverit. Seega ei suuda rakendus Teie arvutites sisselogimist teostada.&lt;br /&gt;
&lt;br /&gt;
Rakendusel on neli peamist vaadet: sisselogimine, etenduste nimekiri, etenduse detailvaade ning konto info. Pileteid saab osta punktide alusel (punktid peavad eelneva mehanismiga juba kontol olema, konto on punkt.no99.ee-ga ühine). Kui pilet on ostetud, märgib rakendus vastava etenduse taustavärviga, teiskordselt piletit osta ei saa, kuid seda pole raske realiseerida.&lt;br /&gt;
&lt;br /&gt;
Peale sisselogimist tõmmatakse serverist alla nimekiri etendustest ning hakatakse siis ükshaaval sellele nimekirjale pisipilte laadima. Allalaaditud pisipildid salvestatakse Android poolt antud vahemälukausta, neid teiskordselt ei laadita.&lt;br /&gt;
&lt;br /&gt;
Kõik suhtlused serveris on asünkroonsed, seda kahel põhjusel: esiteks tapab Android rakenduse ära (ja kasutajal on ebamugav), kui päringu vastust kasutajaliidese &#039;&#039;thread&#039;&#039;-ist oodata. Teiseks saab asünkroonset päringut mugavalt taustalt teha ning kasutaja saab oma asjadega edasi tegeleda.&lt;br /&gt;
&lt;br /&gt;
Rakenduse kood asub [https://bitbucket.org/anroots/punkt99-android/src/f87687bbe41d BitBucketis] (develop branch).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensendile&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Kuna rakendust iseseisvalt testida ei saa, olen soovi korral valmis seda uuesti oma arvutist demoma.&lt;br /&gt;
&lt;br /&gt;
=== Feature list === &lt;br /&gt;
&lt;br /&gt;
* Autentimine&lt;br /&gt;
* Tulevaste etenduste nimekirja vaatamine&lt;br /&gt;
* Etenduse detailide vaatamine (sh pilt)&lt;br /&gt;
* Allalaaditud piltide &#039;&#039;&#039;cache&#039;&#039;&#039;-mine&lt;br /&gt;
* Pileti ostmine etendusele punktide alusel&lt;br /&gt;
* Konto info vaatamine&lt;br /&gt;
&lt;br /&gt;
= Meeskonna Liikmed =&lt;br /&gt;
&lt;br /&gt;
* Ando Roots &#039;&#039;anroots@itcollege.ee&#039;&#039;&lt;br /&gt;
* Mikk Pärast &#039;&#039;mparast@itcollege.ee&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Liitumine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for t in tudengid:&lt;br /&gt;
  if !t.laisk &amp;amp;&amp;amp; t.oskab_progreda:&lt;br /&gt;
    kutsu_meeskonda(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ mail -s &amp;quot;Harold&amp;quot; anroots@itcollege.ee&amp;lt;/pre&amp;gt;&lt;br /&gt;
Eeldan varasemaid teadmisi ning usaldusväärsust. Soovin, et asi ei lõppeks jälle nii, et projektijuht on kaitsmiseelsel õhtul üleval ja lõpetab üksinda projekti.&lt;br /&gt;
Ole nii kena ja anna huvist märku enne &#039;&#039;&#039;26. veebruari&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Lisad =&lt;br /&gt;
&lt;br /&gt;
[http://jaa.ee Kes on Harold?]&lt;br /&gt;
&lt;br /&gt;
== Challengo ==&lt;br /&gt;
&lt;br /&gt;
Challengo.me on Garage48 Tallinn 2011 raames alustatud veebiteenus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A social network of themed challenges, comes with a Karma profile and level-system.&lt;br /&gt;
Revenues from ads on the mobile version.&lt;br /&gt;
Team members: Ando Roots, Kristo Vaher, Valeria Gasik, Jelena Savinen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube v=&amp;quot;pPfHJD5F7sc&amp;quot; /&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=pPfHJD5F7sc Jelena tutvustab Challengo teenust]&lt;br /&gt;
&lt;br /&gt;
== Punkt99 ==&lt;br /&gt;
&lt;br /&gt;
[http://garage48.org/blogger/projects-launched-at-garage48-tallinn-music-2012 Punkt99] valmis Garage48-l 2012 kevadel paljude hakkajate inimeste koostööl. Tegu on piletimüügirakendusega teater NO99-le.&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=49144</id>
		<title>Meeskond &quot;Harold&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=49144"/>
		<updated>2012-06-11T13:30:06Z</updated>

		<summary type="html">&lt;p&gt;Anroots: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
{| style=&amp;quot;width:100%;height: 40px; background-color:#dff0d8;border: 1px solid ##468847;color:#468847;padding:10px;font-size:16px;font-weight:bold-webkit-border-radius: 8px;-moz-border-radius: 8px;border-radius: 8px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
| Ära kaitsesime. Maksimumpunktidele. Aitähh!!&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Tegemist on IT Kolledži aine raames eksamieeldust taotleva projektimeeskonna töö dokumentatsiooniga.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 30em; padding-left: 2em; float: right; font-size: 95%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Meeskond &#039;&#039;&amp;quot;Harold&amp;quot;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Aine:&#039;&#039;&#039;&lt;br /&gt;
| [[:Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhend:&#039;&#039;&#039;&lt;br /&gt;
| [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2012 Juhend]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Tüüp:&#039;&#039;&#039;&lt;br /&gt;
| Projekt&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Anroots]]&amp;lt;br /&amp;gt;[[User:Mparast]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhendajad:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Mposka]]&amp;lt;br /&amp;gt;[[User:Kraspel]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Semester:&#039;&#039;&#039;&lt;br /&gt;
| 2011/2012 kevad&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Lingid&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|API Demo&lt;br /&gt;
|[http://api.sqroot.eu http://api.sqroot.eu] &#039;&#039;(offline)&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Projekt =&lt;br /&gt;
&lt;br /&gt;
Projekti esimesed kaks osa keskenduvad veebiteenuse &amp;quot;Challengo&amp;quot; taasloomisele. Projekti esimene osa valmistab ette peamis(t)e päringu(te) XML vastuse struktuuri, projekti teine osa (veebiteenuse loomine) ehitab vastava API.&lt;br /&gt;
&lt;br /&gt;
== Korraldus ==&lt;br /&gt;
&lt;br /&gt;
Projektiga seonduv dokumentatsioon (erandiks on käesolev wiki leht), kasutajale nähtavad tekstid ning lähtekood on kirjutatud inglise keeles. Võimalusel on kood kirjutatud hilisema I18n toe võimaldamiseks.&lt;br /&gt;
&lt;br /&gt;
Koodi haldab GitHub repositoorium, juurdepääsu saamiseks tuleb projektijuhile saata oma GitHub kasutajanimi (või &#039;&#039;pull request&#039;&#039;). Tegemist vajavaid töid näeb GitHub lehel &#039;&#039;Issues&#039;&#039; vahekaardilt ning asjakohane dokumentatsioon (API) on GitHub wiki alamjaotises.&lt;br /&gt;
&lt;br /&gt;
Lähtekood on põhjalikult kommenteeritud, muud, eraldiseisvat dokumentatsiooni koodi kohta on minimaalselt.&lt;br /&gt;
&lt;br /&gt;
== XML Andmefailid ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 3. märts 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
XML andmefail kirjeldab veebiteenuse &amp;quot;[http://garage48.org/blogger/projects-on-garage48-tallinn-2011 Challengo]&amp;quot; andmeid. Andmed asuvad MYSQL andmebaasis, mille struktuur on kirjeldatud ERD mudeliga [[File:Harold_Challengo_MYSQL_ERD.png|200px|thumb|MYSQL ERD mudel]]. XML formaadis andmeid väljastab serveris asuv PHP API. Järgnevalt toodud XML näited ei pruugi projekti esimese osa nõudmiste tõttu olla vastavuses teise osana valmiva veebiteenuse tegeliku väljundiga.&lt;br /&gt;
&lt;br /&gt;
Faile saab vaadata ka võrgust: http://enos.itcollege.ee/~anroots/challengo/xml/. Soovitatav on seda teha just XSLT stiilifaili jaoks (http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml).&lt;br /&gt;
&lt;br /&gt;
=== XML [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml link]]===&lt;br /&gt;
&lt;br /&gt;
Järgnevalt on toodud lõik kasutaja praeguste väljakutsete päringust. Kasutajal on parajasti kaks aktiivset väljakutset, igal väljakutsel on veidi meta-infot, mingi hulk ülesandeid (tasks) ning igal ülesandel on üks või mitu autasu (rewards).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;Response.xsl&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!-- List of user&#039;s current challenges --&amp;gt;&lt;br /&gt;
&amp;lt;challenges&amp;gt;&lt;br /&gt;
  &amp;lt;!-- First challenge, started by the user --&amp;gt;&lt;br /&gt;
  &amp;lt;challenge id=&amp;quot;4&amp;quot; tasks=&amp;quot;6&amp;quot; progress=&amp;quot;17%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;The Improgrupp Jaa!&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Inspired by a true story, the Improgrupp Jaa! contains tasks that challenge ones spontaniety and social courage.&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;duration&amp;gt;1209600&amp;lt;/duration&amp;gt;&lt;br /&gt;
    &amp;lt;points_required&amp;gt;18&amp;lt;/points_required&amp;gt;&lt;br /&gt;
    &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;!-- Each challenge has a number of tasks that have to be completed.--&amp;gt;&lt;br /&gt;
    &amp;lt;!-- No challenge can be completed before earned points from tasks (rewards) exceed the points_required field --&amp;gt;&lt;br /&gt;
    &amp;lt;tasks max_points=&amp;quot;26&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;19&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Make a present to a homeless person&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;If you can read this, you&#039;re probably among the luckier ones. Do something for the ones who can&#039;t.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;!-- Each task yields rewards on completion. Rewards are &amp;quot;power&amp;quot; points of different categories.--&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;20&amp;quot; completed=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment a stranger&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Make a sincere compliment to someone you don&#039;t know. We could do with more praise where it&#039;s due.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;21&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Do volunteer work&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Offer yourself as a volunteer to an event or a cause.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;22&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Perform to a security camera&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Do a little dance to a security camera. It shouldn&#039;t be illegal...probably. Don&#039;t get in trouble!&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;23&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment someone for a job well done&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;When was the last time you thanked the janitor?&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;24&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Take a day off&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;This is mostly for work-a-holics: rest for a while.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
    &amp;lt;/tasks&amp;gt;&lt;br /&gt;
  &amp;lt;/challenge&amp;gt;&lt;br /&gt;
&amp;lt;/challenges&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT (stiilifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsl link]] ===&lt;br /&gt;
&lt;br /&gt;
Toodud stiilifail muudab ülaltoodud XML vastuse inimesele kergemini loetavaks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html class=&amp;quot;no-js&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;Ando Roots&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Challengo Response&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.css&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.responsive.css&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Challengo API response&amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
            The following is a list of challenges reported by the XML API.&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;!-- Go over each challenge --&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;challenges/challenge&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h2&amp;gt;&lt;br /&gt;
              &lt;br /&gt;
              &amp;lt;!-- Challenge badge image and title --&amp;gt;&lt;br /&gt;
              &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;&lt;br /&gt;
                  http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/img&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
              &amp;lt;!-- Challenge progress, if applicable --&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:if test=&amp;quot;@progress&amp;quot;&amp;gt;&lt;br /&gt;
                (&amp;lt;span&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@progress&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/span&amp;gt;)&lt;br /&gt;
              &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
            &amp;lt;/h2&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;p class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- Table for some challenge meta-info --&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered span4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Points required to complete:&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;points_required&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Time left (hours):&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;round(duration div 1800)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;!-- List all challenge tasks --&amp;gt;&lt;br /&gt;
            &amp;lt;h3 style=&amp;quot;margin-top:140px&amp;quot;&amp;gt;Tasks (&amp;lt;xsl:value-of select=&amp;quot;@tasks&amp;quot;/&amp;gt;)&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered table-striped table-condensed&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;thead&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;ID&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Title&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Badge&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Rewards&amp;lt;/th&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/thead&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;tasks/task&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;tr&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Color the row gray if task is completed --&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;@completed&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:attribute name=&amp;quot;class&amp;quot;&amp;gt;&lt;br /&gt;
                        help-block&lt;br /&gt;
                      &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                      &amp;lt;/img&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:for-each select=&amp;quot;rewards/reward&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;li&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=1&amp;quot;&amp;gt;&lt;br /&gt;
                              Compassion&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=2&amp;quot;&amp;gt;&lt;br /&gt;
                              Strength&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=3&amp;quot;&amp;gt;&lt;br /&gt;
                              Intelligence&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;span&amp;gt;&lt;br /&gt;
                              &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                            &amp;lt;/span&amp;gt;&lt;br /&gt;
                          &amp;lt;/li&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;!-- End of challenge task table --&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;!-- End of challenge --&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD (skeemifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsd link]] ===&lt;br /&gt;
&lt;br /&gt;
Skeemifail kirjeldab päringu vastuse XML struktuuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;challenges&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;challenge&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;duration&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;points_required&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;tasks&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;task&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rewards&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;reward&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:extension base=&amp;quot;xs:unsignedByte&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:attribute name=&amp;quot;power_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;completed&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;max_points&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;tasks&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;progress&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Veebiteenus ==&lt;br /&gt;
&#039;&#039;Tähtaeg 30. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:challengo_req2.png|300px|thumb|Näidis HTTP API päringust]]&lt;br /&gt;
&lt;br /&gt;
Veebiteenusena realiseeriti API, mis võimaldab klientide registreerimist, haldamist ning Challengo teenuse põhifunktsionaalsuse pakkumist HTTP päringute kaudu. API loomisel kasutati RESTful arhitektuuri. Täpsem dokumentatsioon asub API lehel: [http://api.sqroot.eu &amp;quot;API dokumentatsioon&amp;quot;] (tegemist on ajutise aadressiga, mis võetakse maha aine lõppemisel).&lt;br /&gt;
&lt;br /&gt;
=== Kriteeriumid ===&lt;br /&gt;
&lt;br /&gt;
Kõik õppejõu poolt esitatud kriteeriumid on täidetud. Erikokkuleppe alusel on projekti keeleks PHP.&lt;br /&gt;
&lt;br /&gt;
Kriteeriumid:&lt;br /&gt;
&lt;br /&gt;
* Teenuse pakkumist - API suudab vastata talle esitatud, valideeruvatele (vt. API dokumentatsiooni) päringutele&lt;br /&gt;
* Teenuse kasutajate tuvastamist ning haldamist - Kasutajatuvastus toimub nime/parooli alusel HTTP Basic Authentication protokollil, ideaalis üle HTTPS-i. Süsteemi sisemiselt on kasutajatel rollid, mida saab kasutada halduseks, näiteks LOGIN rolli eemaldamisel ei saa kasutaja enam sisse logida.&lt;br /&gt;
* Teenuse kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes - Kõik API päringud käivad API tokeni alusel. Tokeni kasutaja päringud logitakse nii logifaili kui andmebaasi, neid on sealt võimalik pärida. Lisaks on igal tokenil päringulimiit (tunnis), selle ületamisel päringuid eiratakse. Tokeneid saab tühistada, mis tähendab, et klientrakenduse päringuid ei töödelda mingil juhul.&lt;br /&gt;
&lt;br /&gt;
=== Testimine ===&lt;br /&gt;
&lt;br /&gt;
Veebiteenusel ei ole eraldi kasutajaliidest. Testimiseks on kaks varianti:&lt;br /&gt;
&lt;br /&gt;
# Luua ise vastav kasutajaliides ehk klientrakendus&lt;br /&gt;
# Kasutada mõnd abitööriista HTTP päringute koostamiseks. Soovitus: [https://chrome.google.com/webstore/detail/aejoelaoggembcahagimdiliamlcdmfm &amp;quot;Chrome plugin&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
Autentimisandmed rakendusele saab luua dokumentatsiooni lehel oleva vormi kaudu (andmed saadetakse e-mailile). Kasutajakonto saab luua juba API päringute abil.&lt;br /&gt;
&lt;br /&gt;
N.B. Juhul, kui uute API tokenite loomine ebaõnnestub (serveri mailiserver on veidi ebastabiilne), võib kasutada ka järgnevaid andmeid:&lt;br /&gt;
&lt;br /&gt;
Secret: fowhosurtothab&lt;br /&gt;
Token: fleraffahskuff&lt;br /&gt;
&lt;br /&gt;
=== Kood ===&lt;br /&gt;
&lt;br /&gt;
Lähtekoodi saab [http://api.sqroot.eu/anroots-challengo-a6da30942c8c.tar.gz siit]. Kohtmasinasse paigaldamiseks tuleb alla laadida [http://kohanaframework.org Kohana] framework ning paigaldada application/bootstrap.php failis märgitud moodulid. Andmebaasi schema on database kaustas. Kood on testitud ainult Linux platvormil LAMP stack-iga.&lt;br /&gt;
&lt;br /&gt;
== Klientrakendus ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 5. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:5554-IceCream 024.png|300px|thumb|Ekraanipilt tulevaste etenduste nimekirjast]]&lt;br /&gt;
[[File:5554-IceCream 025.png|300px|thumb|Ekraanipilt etenduse detailvaatest]]&lt;br /&gt;
&lt;br /&gt;
Klientrakendus on Android rakendus, mis kuvab teater NO99 etendusi ning võimaldab punktide alusel pileteid osta. Tegu on jQuery Mobile pordiga Android platvormile.&lt;br /&gt;
&lt;br /&gt;
Rakendus suhtleb Play! raamistikus kirjutatud API-ga, mis asub kahjuks meeskonna localhostis, sest selle võrku panemiseks oli vaja VPS serverit. Seega ei suuda rakendus Teie arvutites sisselogimist teostada.&lt;br /&gt;
&lt;br /&gt;
Rakendusel on neli peamist vaadet: sisselogimine, etenduste nimekiri, etenduse detailvaade ning konto info. Pileteid saab osta punktide alusel (punktid peavad eelneva mehanismiga juba kontol olema, konto on punkt.no99.ee-ga ühine). Kui pilet on ostetud, märgib rakendus vastava etenduse taustavärviga, teiskordselt piletit osta ei saa, kuid seda pole raske realiseerida.&lt;br /&gt;
&lt;br /&gt;
Peale sisselogimist tõmmatakse serverist alla nimekiri etendustest ning hakatakse siis ükshaaval sellele nimekirjale pisipilte laadima. Allalaaditud pisipildid salvestatakse Android poolt antud vahemälukausta, neid teiskordselt ei laadita.&lt;br /&gt;
&lt;br /&gt;
Kõik suhtlused serveris on asünkroonsed, seda kahel põhjusel: esiteks tapab Android rakenduse ära (ja kasutajal on ebamugav), kui päringu vastust kasutajaliidese &#039;&#039;thread&#039;&#039;-ist oodata. Teiseks saab asünkroonset päringut mugavalt taustalt teha ning kasutaja saab oma asjadega edasi tegeleda.&lt;br /&gt;
&lt;br /&gt;
Rakenduse kood asub [https://bitbucket.org/anroots/punkt99-android/src/f87687bbe41d BitBucketis] (develop branch).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensendile&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Kuna rakendust iseseisvalt testida ei saa, olen soovi korral valmis seda uuesti oma arvutist demoma.&lt;br /&gt;
&lt;br /&gt;
=== Feature list === &lt;br /&gt;
&lt;br /&gt;
* Autentimine&lt;br /&gt;
* Tulevaste etenduste nimekirja vaatamine&lt;br /&gt;
* Etenduse detailide vaatamine (sh pilt)&lt;br /&gt;
* Allalaaditud piltide &#039;&#039;&#039;cache&#039;&#039;&#039;-mine&lt;br /&gt;
* Pileti ostmine etendusele punktide alusel&lt;br /&gt;
* Konto info vaatamine&lt;br /&gt;
&lt;br /&gt;
= Meeskonna Liikmed =&lt;br /&gt;
&lt;br /&gt;
* Ando Roots &#039;&#039;anroots@itcollege.ee&#039;&#039;&lt;br /&gt;
* Mikk Pärast &#039;&#039;mparast@itcollege.ee&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Liitumine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for t in tudengid:&lt;br /&gt;
  if !t.laisk &amp;amp;&amp;amp; t.oskab_progreda:&lt;br /&gt;
    kutsu_meeskonda(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ mail -s &amp;quot;Harold&amp;quot; anroots@itcollege.ee&amp;lt;/pre&amp;gt;&lt;br /&gt;
Eeldan varasemaid teadmisi ning usaldusväärsust. Soovin, et asi ei lõppeks jälle nii, et projektijuht on kaitsmiseelsel õhtul üleval ja lõpetab üksinda projekti.&lt;br /&gt;
Ole nii kena ja anna huvist märku enne &#039;&#039;&#039;26. veebruari&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Lisad =&lt;br /&gt;
&lt;br /&gt;
[http://jaa.ee Kes on Harold?]&lt;br /&gt;
&lt;br /&gt;
== Challengo ==&lt;br /&gt;
&lt;br /&gt;
Challengo.me on Garage48 Tallinn 2011 raames alustatud veebiteenus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A social network of themed challenges, comes with a Karma profile and level-system.&lt;br /&gt;
Revenues from ads on the mobile version.&lt;br /&gt;
Team members: Ando Roots, Kristo Vaher, Valeria Gasik, Jelena Savinen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube v=&amp;quot;pPfHJD5F7sc&amp;quot; /&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=pPfHJD5F7sc Jelena tutvustab Challengo teenust]&lt;br /&gt;
&lt;br /&gt;
== Punkt99 ==&lt;br /&gt;
&lt;br /&gt;
[http://garage48.org/blogger/projects-launched-at-garage48-tallinn-music-2012 Punkt99] valmis Garage48-l 2012 kevadel paljude hakkajate inimeste koostööl. Tegu on piletimüügirakendusega teater NO99-le.&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=49143</id>
		<title>Meeskond &quot;Harold&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=49143"/>
		<updated>2012-06-11T13:29:21Z</updated>

		<summary type="html">&lt;p&gt;Anroots: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
{| style=&amp;quot;width:100%;height: 40px; background-color:#dff0d8;border: 1px solid ##468847;color:#468847;padding:10px;font-size:16px;font-weight:bold-webkit-border-radius: 8px;-moz-border-radius: 8px;border-radius: 8px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
| Ära kaitsesime. Maksimumpunktidele. Aitähh!!&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Tegemist on IT Kolledži aine raames eksamieeldust taotleva projektimeeskonna töö dokumentatsiooniga.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 30em; padding-left: 2em; float: right; font-size: 95%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Meeskond &#039;&#039;&amp;quot;Harold&amp;quot;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Aine:&#039;&#039;&#039;&lt;br /&gt;
| [[:Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhend:&#039;&#039;&#039;&lt;br /&gt;
| [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2012 Juhend]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Tüüp:&#039;&#039;&#039;&lt;br /&gt;
| Projekt&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Anroots]]&amp;lt;br /&amp;gt;[[User:Mparast]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhendajad:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Mposka]]&amp;lt;br /&amp;gt;[[User:Kraspel]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Semester:&#039;&#039;&#039;&lt;br /&gt;
| 2011/2012 kevad&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Lingid&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|API Demo&lt;br /&gt;
|[http://api.sqroot.eu http://api.sqroot.eu]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Projekt =&lt;br /&gt;
&lt;br /&gt;
Projekti esimesed kaks osa keskenduvad veebiteenuse &amp;quot;Challengo&amp;quot; taasloomisele. Projekti esimene osa valmistab ette peamis(t)e päringu(te) XML vastuse struktuuri, projekti teine osa (veebiteenuse loomine) ehitab vastava API.&lt;br /&gt;
&lt;br /&gt;
== Korraldus ==&lt;br /&gt;
&lt;br /&gt;
Projektiga seonduv dokumentatsioon (erandiks on käesolev wiki leht), kasutajale nähtavad tekstid ning lähtekood on kirjutatud inglise keeles. Võimalusel on kood kirjutatud hilisema I18n toe võimaldamiseks.&lt;br /&gt;
&lt;br /&gt;
Koodi haldab GitHub repositoorium, juurdepääsu saamiseks tuleb projektijuhile saata oma GitHub kasutajanimi (või &#039;&#039;pull request&#039;&#039;). Tegemist vajavaid töid näeb GitHub lehel &#039;&#039;Issues&#039;&#039; vahekaardilt ning asjakohane dokumentatsioon (API) on GitHub wiki alamjaotises.&lt;br /&gt;
&lt;br /&gt;
Lähtekood on põhjalikult kommenteeritud, muud, eraldiseisvat dokumentatsiooni koodi kohta on minimaalselt.&lt;br /&gt;
&lt;br /&gt;
== XML Andmefailid ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 3. märts 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
XML andmefail kirjeldab veebiteenuse &amp;quot;[http://garage48.org/blogger/projects-on-garage48-tallinn-2011 Challengo]&amp;quot; andmeid. Andmed asuvad MYSQL andmebaasis, mille struktuur on kirjeldatud ERD mudeliga [[File:Harold_Challengo_MYSQL_ERD.png|200px|thumb|MYSQL ERD mudel]]. XML formaadis andmeid väljastab serveris asuv PHP API. Järgnevalt toodud XML näited ei pruugi projekti esimese osa nõudmiste tõttu olla vastavuses teise osana valmiva veebiteenuse tegeliku väljundiga.&lt;br /&gt;
&lt;br /&gt;
Faile saab vaadata ka võrgust: http://enos.itcollege.ee/~anroots/challengo/xml/. Soovitatav on seda teha just XSLT stiilifaili jaoks (http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml).&lt;br /&gt;
&lt;br /&gt;
=== XML [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml link]]===&lt;br /&gt;
&lt;br /&gt;
Järgnevalt on toodud lõik kasutaja praeguste väljakutsete päringust. Kasutajal on parajasti kaks aktiivset väljakutset, igal väljakutsel on veidi meta-infot, mingi hulk ülesandeid (tasks) ning igal ülesandel on üks või mitu autasu (rewards).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;Response.xsl&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!-- List of user&#039;s current challenges --&amp;gt;&lt;br /&gt;
&amp;lt;challenges&amp;gt;&lt;br /&gt;
  &amp;lt;!-- First challenge, started by the user --&amp;gt;&lt;br /&gt;
  &amp;lt;challenge id=&amp;quot;4&amp;quot; tasks=&amp;quot;6&amp;quot; progress=&amp;quot;17%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;The Improgrupp Jaa!&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Inspired by a true story, the Improgrupp Jaa! contains tasks that challenge ones spontaniety and social courage.&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;duration&amp;gt;1209600&amp;lt;/duration&amp;gt;&lt;br /&gt;
    &amp;lt;points_required&amp;gt;18&amp;lt;/points_required&amp;gt;&lt;br /&gt;
    &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;!-- Each challenge has a number of tasks that have to be completed.--&amp;gt;&lt;br /&gt;
    &amp;lt;!-- No challenge can be completed before earned points from tasks (rewards) exceed the points_required field --&amp;gt;&lt;br /&gt;
    &amp;lt;tasks max_points=&amp;quot;26&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;19&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Make a present to a homeless person&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;If you can read this, you&#039;re probably among the luckier ones. Do something for the ones who can&#039;t.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;!-- Each task yields rewards on completion. Rewards are &amp;quot;power&amp;quot; points of different categories.--&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;20&amp;quot; completed=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment a stranger&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Make a sincere compliment to someone you don&#039;t know. We could do with more praise where it&#039;s due.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;21&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Do volunteer work&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Offer yourself as a volunteer to an event or a cause.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;22&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Perform to a security camera&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Do a little dance to a security camera. It shouldn&#039;t be illegal...probably. Don&#039;t get in trouble!&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;23&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment someone for a job well done&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;When was the last time you thanked the janitor?&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;24&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Take a day off&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;This is mostly for work-a-holics: rest for a while.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
    &amp;lt;/tasks&amp;gt;&lt;br /&gt;
  &amp;lt;/challenge&amp;gt;&lt;br /&gt;
&amp;lt;/challenges&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT (stiilifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsl link]] ===&lt;br /&gt;
&lt;br /&gt;
Toodud stiilifail muudab ülaltoodud XML vastuse inimesele kergemini loetavaks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html class=&amp;quot;no-js&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;Ando Roots&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Challengo Response&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.css&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.responsive.css&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Challengo API response&amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
            The following is a list of challenges reported by the XML API.&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;!-- Go over each challenge --&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;challenges/challenge&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h2&amp;gt;&lt;br /&gt;
              &lt;br /&gt;
              &amp;lt;!-- Challenge badge image and title --&amp;gt;&lt;br /&gt;
              &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;&lt;br /&gt;
                  http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/img&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
              &amp;lt;!-- Challenge progress, if applicable --&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:if test=&amp;quot;@progress&amp;quot;&amp;gt;&lt;br /&gt;
                (&amp;lt;span&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@progress&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/span&amp;gt;)&lt;br /&gt;
              &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
            &amp;lt;/h2&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;p class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- Table for some challenge meta-info --&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered span4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Points required to complete:&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;points_required&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Time left (hours):&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;round(duration div 1800)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;!-- List all challenge tasks --&amp;gt;&lt;br /&gt;
            &amp;lt;h3 style=&amp;quot;margin-top:140px&amp;quot;&amp;gt;Tasks (&amp;lt;xsl:value-of select=&amp;quot;@tasks&amp;quot;/&amp;gt;)&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered table-striped table-condensed&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;thead&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;ID&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Title&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Badge&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Rewards&amp;lt;/th&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/thead&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;tasks/task&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;tr&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Color the row gray if task is completed --&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;@completed&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:attribute name=&amp;quot;class&amp;quot;&amp;gt;&lt;br /&gt;
                        help-block&lt;br /&gt;
                      &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                      &amp;lt;/img&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:for-each select=&amp;quot;rewards/reward&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;li&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=1&amp;quot;&amp;gt;&lt;br /&gt;
                              Compassion&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=2&amp;quot;&amp;gt;&lt;br /&gt;
                              Strength&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=3&amp;quot;&amp;gt;&lt;br /&gt;
                              Intelligence&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;span&amp;gt;&lt;br /&gt;
                              &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                            &amp;lt;/span&amp;gt;&lt;br /&gt;
                          &amp;lt;/li&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;!-- End of challenge task table --&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;!-- End of challenge --&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD (skeemifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsd link]] ===&lt;br /&gt;
&lt;br /&gt;
Skeemifail kirjeldab päringu vastuse XML struktuuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;challenges&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;challenge&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;duration&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;points_required&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;tasks&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;task&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rewards&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;reward&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:extension base=&amp;quot;xs:unsignedByte&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:attribute name=&amp;quot;power_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;completed&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;max_points&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;tasks&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;progress&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Veebiteenus ==&lt;br /&gt;
&#039;&#039;Tähtaeg 30. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:challengo_req2.png|300px|thumb|Näidis HTTP API päringust]]&lt;br /&gt;
&lt;br /&gt;
Veebiteenusena realiseeriti API, mis võimaldab klientide registreerimist, haldamist ning Challengo teenuse põhifunktsionaalsuse pakkumist HTTP päringute kaudu. API loomisel kasutati RESTful arhitektuuri. Täpsem dokumentatsioon asub API lehel: [http://api.sqroot.eu &amp;quot;API dokumentatsioon&amp;quot;] (tegemist on ajutise aadressiga, mis võetakse maha aine lõppemisel).&lt;br /&gt;
&lt;br /&gt;
=== Kriteeriumid ===&lt;br /&gt;
&lt;br /&gt;
Kõik õppejõu poolt esitatud kriteeriumid on täidetud. Erikokkuleppe alusel on projekti keeleks PHP.&lt;br /&gt;
&lt;br /&gt;
Kriteeriumid:&lt;br /&gt;
&lt;br /&gt;
* Teenuse pakkumist - API suudab vastata talle esitatud, valideeruvatele (vt. API dokumentatsiooni) päringutele&lt;br /&gt;
* Teenuse kasutajate tuvastamist ning haldamist - Kasutajatuvastus toimub nime/parooli alusel HTTP Basic Authentication protokollil, ideaalis üle HTTPS-i. Süsteemi sisemiselt on kasutajatel rollid, mida saab kasutada halduseks, näiteks LOGIN rolli eemaldamisel ei saa kasutaja enam sisse logida.&lt;br /&gt;
* Teenuse kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes - Kõik API päringud käivad API tokeni alusel. Tokeni kasutaja päringud logitakse nii logifaili kui andmebaasi, neid on sealt võimalik pärida. Lisaks on igal tokenil päringulimiit (tunnis), selle ületamisel päringuid eiratakse. Tokeneid saab tühistada, mis tähendab, et klientrakenduse päringuid ei töödelda mingil juhul.&lt;br /&gt;
&lt;br /&gt;
=== Testimine ===&lt;br /&gt;
&lt;br /&gt;
Veebiteenusel ei ole eraldi kasutajaliidest. Testimiseks on kaks varianti:&lt;br /&gt;
&lt;br /&gt;
# Luua ise vastav kasutajaliides ehk klientrakendus&lt;br /&gt;
# Kasutada mõnd abitööriista HTTP päringute koostamiseks. Soovitus: [https://chrome.google.com/webstore/detail/aejoelaoggembcahagimdiliamlcdmfm &amp;quot;Chrome plugin&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
Autentimisandmed rakendusele saab luua dokumentatsiooni lehel oleva vormi kaudu (andmed saadetakse e-mailile). Kasutajakonto saab luua juba API päringute abil.&lt;br /&gt;
&lt;br /&gt;
N.B. Juhul, kui uute API tokenite loomine ebaõnnestub (serveri mailiserver on veidi ebastabiilne), võib kasutada ka järgnevaid andmeid:&lt;br /&gt;
&lt;br /&gt;
Secret: fowhosurtothab&lt;br /&gt;
Token: fleraffahskuff&lt;br /&gt;
&lt;br /&gt;
=== Kood ===&lt;br /&gt;
&lt;br /&gt;
Lähtekoodi saab [http://api.sqroot.eu/anroots-challengo-a6da30942c8c.tar.gz siit]. Kohtmasinasse paigaldamiseks tuleb alla laadida [http://kohanaframework.org Kohana] framework ning paigaldada application/bootstrap.php failis märgitud moodulid. Andmebaasi schema on database kaustas. Kood on testitud ainult Linux platvormil LAMP stack-iga.&lt;br /&gt;
&lt;br /&gt;
== Klientrakendus ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 5. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:5554-IceCream 024.png|300px|thumb|Ekraanipilt tulevaste etenduste nimekirjast]]&lt;br /&gt;
[[File:5554-IceCream 025.png|300px|thumb|Ekraanipilt etenduse detailvaatest]]&lt;br /&gt;
&lt;br /&gt;
Klientrakendus on Android rakendus, mis kuvab teater NO99 etendusi ning võimaldab punktide alusel pileteid osta. Tegu on jQuery Mobile pordiga Android platvormile.&lt;br /&gt;
&lt;br /&gt;
Rakendus suhtleb Play! raamistikus kirjutatud API-ga, mis asub kahjuks meeskonna localhostis, sest selle võrku panemiseks oli vaja VPS serverit. Seega ei suuda rakendus Teie arvutites sisselogimist teostada.&lt;br /&gt;
&lt;br /&gt;
Rakendusel on neli peamist vaadet: sisselogimine, etenduste nimekiri, etenduse detailvaade ning konto info. Pileteid saab osta punktide alusel (punktid peavad eelneva mehanismiga juba kontol olema, konto on punkt.no99.ee-ga ühine). Kui pilet on ostetud, märgib rakendus vastava etenduse taustavärviga, teiskordselt piletit osta ei saa, kuid seda pole raske realiseerida.&lt;br /&gt;
&lt;br /&gt;
Peale sisselogimist tõmmatakse serverist alla nimekiri etendustest ning hakatakse siis ükshaaval sellele nimekirjale pisipilte laadima. Allalaaditud pisipildid salvestatakse Android poolt antud vahemälukausta, neid teiskordselt ei laadita.&lt;br /&gt;
&lt;br /&gt;
Kõik suhtlused serveris on asünkroonsed, seda kahel põhjusel: esiteks tapab Android rakenduse ära (ja kasutajal on ebamugav), kui päringu vastust kasutajaliidese &#039;&#039;thread&#039;&#039;-ist oodata. Teiseks saab asünkroonset päringut mugavalt taustalt teha ning kasutaja saab oma asjadega edasi tegeleda.&lt;br /&gt;
&lt;br /&gt;
Rakenduse kood asub [https://bitbucket.org/anroots/punkt99-android/src/f87687bbe41d BitBucketis] (develop branch).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensendile&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Kuna rakendust iseseisvalt testida ei saa, olen soovi korral valmis seda uuesti oma arvutist demoma.&lt;br /&gt;
&lt;br /&gt;
=== Feature list === &lt;br /&gt;
&lt;br /&gt;
* Autentimine&lt;br /&gt;
* Tulevaste etenduste nimekirja vaatamine&lt;br /&gt;
* Etenduse detailide vaatamine (sh pilt)&lt;br /&gt;
* Allalaaditud piltide &#039;&#039;&#039;cache&#039;&#039;&#039;-mine&lt;br /&gt;
* Pileti ostmine etendusele punktide alusel&lt;br /&gt;
* Konto info vaatamine&lt;br /&gt;
&lt;br /&gt;
= Meeskonna Liikmed =&lt;br /&gt;
&lt;br /&gt;
* Ando Roots &#039;&#039;anroots@itcollege.ee&#039;&#039;&lt;br /&gt;
* Mikk Pärast &#039;&#039;mparast@itcollege.ee&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Liitumine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for t in tudengid:&lt;br /&gt;
  if !t.laisk &amp;amp;&amp;amp; t.oskab_progreda:&lt;br /&gt;
    kutsu_meeskonda(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ mail -s &amp;quot;Harold&amp;quot; anroots@itcollege.ee&amp;lt;/pre&amp;gt;&lt;br /&gt;
Eeldan varasemaid teadmisi ning usaldusväärsust. Soovin, et asi ei lõppeks jälle nii, et projektijuht on kaitsmiseelsel õhtul üleval ja lõpetab üksinda projekti.&lt;br /&gt;
Ole nii kena ja anna huvist märku enne &#039;&#039;&#039;26. veebruari&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Lisad =&lt;br /&gt;
&lt;br /&gt;
[http://jaa.ee Kes on Harold?]&lt;br /&gt;
&lt;br /&gt;
== Challengo ==&lt;br /&gt;
&lt;br /&gt;
Challengo.me on Garage48 Tallinn 2011 raames alustatud veebiteenus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A social network of themed challenges, comes with a Karma profile and level-system.&lt;br /&gt;
Revenues from ads on the mobile version.&lt;br /&gt;
Team members: Ando Roots, Kristo Vaher, Valeria Gasik, Jelena Savinen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube v=&amp;quot;pPfHJD5F7sc&amp;quot; /&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=pPfHJD5F7sc Jelena tutvustab Challengo teenust]&lt;br /&gt;
&lt;br /&gt;
== Punkt99 ==&lt;br /&gt;
&lt;br /&gt;
[http://garage48.org/blogger/projects-launched-at-garage48-tallinn-music-2012 Punkt99] valmis Garage48-l 2012 kevadel paljude hakkajate inimeste koostööl. Tegu on piletimüügirakendusega teater NO99-le.&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=48705</id>
		<title>Meeskond &quot;Harold&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=48705"/>
		<updated>2012-05-24T20:15:25Z</updated>

		<summary type="html">&lt;p&gt;Anroots: /* Klientrakendus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
{| style=&amp;quot;width:100%;height: 40px; background-color:#dff0d8;border: 1px solid ##468847;color:#468847;padding:10px;font-size:16px;font-weight:bold-webkit-border-radius: 8px;-moz-border-radius: 8px;border-radius: 8px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
| Ära kaitsesime.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Tegemist on IT Kolledži aine raames eksamieeldust taotleva projektimeeskonna töö dokumentatsiooniga.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 30em; padding-left: 2em; float: right; font-size: 95%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Meeskond &#039;&#039;&amp;quot;Harold&amp;quot;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Aine:&#039;&#039;&#039;&lt;br /&gt;
| [[:Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhend:&#039;&#039;&#039;&lt;br /&gt;
| [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2012 Juhend]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Tüüp:&#039;&#039;&#039;&lt;br /&gt;
| Projekt&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Anroots]]&amp;lt;br /&amp;gt;[[User:Mparast]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhendajad:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Mposka]]&amp;lt;br /&amp;gt;[[User:Kraspel]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Semester:&#039;&#039;&#039;&lt;br /&gt;
| 2011/2012 kevad&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Lingid&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|API Demo&lt;br /&gt;
|[http://api.sqroot.eu http://api.sqroot.eu]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Projekt =&lt;br /&gt;
&lt;br /&gt;
Projekti esimesed kaks osa keskenduvad veebiteenuse &amp;quot;Challengo&amp;quot; taasloomisele. Projekti esimene osa valmistab ette peamis(t)e päringu(te) XML vastuse struktuuri, projekti teine osa (veebiteenuse loomine) ehitab vastava API.&lt;br /&gt;
&lt;br /&gt;
== Korraldus ==&lt;br /&gt;
&lt;br /&gt;
Projektiga seonduv dokumentatsioon (erandiks on käesolev wiki leht), kasutajale nähtavad tekstid ning lähtekood on kirjutatud inglise keeles. Võimalusel on kood kirjutatud hilisema I18n toe võimaldamiseks.&lt;br /&gt;
&lt;br /&gt;
Koodi haldab GitHub repositoorium, juurdepääsu saamiseks tuleb projektijuhile saata oma GitHub kasutajanimi (või &#039;&#039;pull request&#039;&#039;). Tegemist vajavaid töid näeb GitHub lehel &#039;&#039;Issues&#039;&#039; vahekaardilt ning asjakohane dokumentatsioon (API) on GitHub wiki alamjaotises.&lt;br /&gt;
&lt;br /&gt;
Lähtekood on põhjalikult kommenteeritud, muud, eraldiseisvat dokumentatsiooni koodi kohta on minimaalselt.&lt;br /&gt;
&lt;br /&gt;
== XML Andmefailid ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 3. märts 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
XML andmefail kirjeldab veebiteenuse &amp;quot;[http://garage48.org/blogger/projects-on-garage48-tallinn-2011 Challengo]&amp;quot; andmeid. Andmed asuvad MYSQL andmebaasis, mille struktuur on kirjeldatud ERD mudeliga [[File:Harold_Challengo_MYSQL_ERD.png|200px|thumb|MYSQL ERD mudel]]. XML formaadis andmeid väljastab serveris asuv PHP API. Järgnevalt toodud XML näited ei pruugi projekti esimese osa nõudmiste tõttu olla vastavuses teise osana valmiva veebiteenuse tegeliku väljundiga.&lt;br /&gt;
&lt;br /&gt;
Faile saab vaadata ka võrgust: http://enos.itcollege.ee/~anroots/challengo/xml/. Soovitatav on seda teha just XSLT stiilifaili jaoks (http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml).&lt;br /&gt;
&lt;br /&gt;
=== XML [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml link]]===&lt;br /&gt;
&lt;br /&gt;
Järgnevalt on toodud lõik kasutaja praeguste väljakutsete päringust. Kasutajal on parajasti kaks aktiivset väljakutset, igal väljakutsel on veidi meta-infot, mingi hulk ülesandeid (tasks) ning igal ülesandel on üks või mitu autasu (rewards).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;Response.xsl&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!-- List of user&#039;s current challenges --&amp;gt;&lt;br /&gt;
&amp;lt;challenges&amp;gt;&lt;br /&gt;
  &amp;lt;!-- First challenge, started by the user --&amp;gt;&lt;br /&gt;
  &amp;lt;challenge id=&amp;quot;4&amp;quot; tasks=&amp;quot;6&amp;quot; progress=&amp;quot;17%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;The Improgrupp Jaa!&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Inspired by a true story, the Improgrupp Jaa! contains tasks that challenge ones spontaniety and social courage.&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;duration&amp;gt;1209600&amp;lt;/duration&amp;gt;&lt;br /&gt;
    &amp;lt;points_required&amp;gt;18&amp;lt;/points_required&amp;gt;&lt;br /&gt;
    &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;!-- Each challenge has a number of tasks that have to be completed.--&amp;gt;&lt;br /&gt;
    &amp;lt;!-- No challenge can be completed before earned points from tasks (rewards) exceed the points_required field --&amp;gt;&lt;br /&gt;
    &amp;lt;tasks max_points=&amp;quot;26&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;19&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Make a present to a homeless person&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;If you can read this, you&#039;re probably among the luckier ones. Do something for the ones who can&#039;t.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;!-- Each task yields rewards on completion. Rewards are &amp;quot;power&amp;quot; points of different categories.--&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;20&amp;quot; completed=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment a stranger&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Make a sincere compliment to someone you don&#039;t know. We could do with more praise where it&#039;s due.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;21&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Do volunteer work&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Offer yourself as a volunteer to an event or a cause.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;22&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Perform to a security camera&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Do a little dance to a security camera. It shouldn&#039;t be illegal...probably. Don&#039;t get in trouble!&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;23&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment someone for a job well done&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;When was the last time you thanked the janitor?&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;24&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Take a day off&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;This is mostly for work-a-holics: rest for a while.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
    &amp;lt;/tasks&amp;gt;&lt;br /&gt;
  &amp;lt;/challenge&amp;gt;&lt;br /&gt;
&amp;lt;/challenges&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT (stiilifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsl link]] ===&lt;br /&gt;
&lt;br /&gt;
Toodud stiilifail muudab ülaltoodud XML vastuse inimesele kergemini loetavaks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html class=&amp;quot;no-js&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;Ando Roots&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Challengo Response&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.css&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.responsive.css&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Challengo API response&amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
            The following is a list of challenges reported by the XML API.&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;!-- Go over each challenge --&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;challenges/challenge&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h2&amp;gt;&lt;br /&gt;
              &lt;br /&gt;
              &amp;lt;!-- Challenge badge image and title --&amp;gt;&lt;br /&gt;
              &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;&lt;br /&gt;
                  http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/img&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
              &amp;lt;!-- Challenge progress, if applicable --&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:if test=&amp;quot;@progress&amp;quot;&amp;gt;&lt;br /&gt;
                (&amp;lt;span&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@progress&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/span&amp;gt;)&lt;br /&gt;
              &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
            &amp;lt;/h2&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;p class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- Table for some challenge meta-info --&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered span4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Points required to complete:&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;points_required&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Time left (hours):&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;round(duration div 1800)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;!-- List all challenge tasks --&amp;gt;&lt;br /&gt;
            &amp;lt;h3 style=&amp;quot;margin-top:140px&amp;quot;&amp;gt;Tasks (&amp;lt;xsl:value-of select=&amp;quot;@tasks&amp;quot;/&amp;gt;)&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered table-striped table-condensed&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;thead&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;ID&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Title&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Badge&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Rewards&amp;lt;/th&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/thead&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;tasks/task&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;tr&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Color the row gray if task is completed --&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;@completed&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:attribute name=&amp;quot;class&amp;quot;&amp;gt;&lt;br /&gt;
                        help-block&lt;br /&gt;
                      &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                      &amp;lt;/img&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:for-each select=&amp;quot;rewards/reward&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;li&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=1&amp;quot;&amp;gt;&lt;br /&gt;
                              Compassion&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=2&amp;quot;&amp;gt;&lt;br /&gt;
                              Strength&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=3&amp;quot;&amp;gt;&lt;br /&gt;
                              Intelligence&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;span&amp;gt;&lt;br /&gt;
                              &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                            &amp;lt;/span&amp;gt;&lt;br /&gt;
                          &amp;lt;/li&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;!-- End of challenge task table --&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;!-- End of challenge --&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD (skeemifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsd link]] ===&lt;br /&gt;
&lt;br /&gt;
Skeemifail kirjeldab päringu vastuse XML struktuuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;challenges&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;challenge&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;duration&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;points_required&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;tasks&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;task&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rewards&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;reward&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:extension base=&amp;quot;xs:unsignedByte&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:attribute name=&amp;quot;power_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;completed&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;max_points&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;tasks&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;progress&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Veebiteenus ==&lt;br /&gt;
&#039;&#039;Tähtaeg 30. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:challengo_req2.png|300px|thumb|Näidis HTTP API päringust]]&lt;br /&gt;
&lt;br /&gt;
Veebiteenusena realiseeriti API, mis võimaldab klientide registreerimist, haldamist ning Challengo teenuse põhifunktsionaalsuse pakkumist HTTP päringute kaudu. API loomisel kasutati RESTful arhitektuuri. Täpsem dokumentatsioon asub API lehel: [http://api.sqroot.eu &amp;quot;API dokumentatsioon&amp;quot;] (tegemist on ajutise aadressiga, mis võetakse maha aine lõppemisel).&lt;br /&gt;
&lt;br /&gt;
=== Kriteeriumid ===&lt;br /&gt;
&lt;br /&gt;
Kõik õppejõu poolt esitatud kriteeriumid on täidetud. Erikokkuleppe alusel on projekti keeleks PHP.&lt;br /&gt;
&lt;br /&gt;
Kriteeriumid:&lt;br /&gt;
&lt;br /&gt;
* Teenuse pakkumist - API suudab vastata talle esitatud, valideeruvatele (vt. API dokumentatsiooni) päringutele&lt;br /&gt;
* Teenuse kasutajate tuvastamist ning haldamist - Kasutajatuvastus toimub nime/parooli alusel HTTP Basic Authentication protokollil, ideaalis üle HTTPS-i. Süsteemi sisemiselt on kasutajatel rollid, mida saab kasutada halduseks, näiteks LOGIN rolli eemaldamisel ei saa kasutaja enam sisse logida.&lt;br /&gt;
* Teenuse kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes - Kõik API päringud käivad API tokeni alusel. Tokeni kasutaja päringud logitakse nii logifaili kui andmebaasi, neid on sealt võimalik pärida. Lisaks on igal tokenil päringulimiit (tunnis), selle ületamisel päringuid eiratakse. Tokeneid saab tühistada, mis tähendab, et klientrakenduse päringuid ei töödelda mingil juhul.&lt;br /&gt;
&lt;br /&gt;
=== Testimine ===&lt;br /&gt;
&lt;br /&gt;
Veebiteenusel ei ole eraldi kasutajaliidest. Testimiseks on kaks varianti:&lt;br /&gt;
&lt;br /&gt;
# Luua ise vastav kasutajaliides ehk klientrakendus&lt;br /&gt;
# Kasutada mõnd abitööriista HTTP päringute koostamiseks. Soovitus: [https://chrome.google.com/webstore/detail/aejoelaoggembcahagimdiliamlcdmfm &amp;quot;Chrome plugin&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
Autentimisandmed rakendusele saab luua dokumentatsiooni lehel oleva vormi kaudu (andmed saadetakse e-mailile). Kasutajakonto saab luua juba API päringute abil.&lt;br /&gt;
&lt;br /&gt;
N.B. Juhul, kui uute API tokenite loomine ebaõnnestub (serveri mailiserver on veidi ebastabiilne), võib kasutada ka järgnevaid andmeid:&lt;br /&gt;
&lt;br /&gt;
Secret: fowhosurtothab&lt;br /&gt;
Token: fleraffahskuff&lt;br /&gt;
&lt;br /&gt;
=== Kood ===&lt;br /&gt;
&lt;br /&gt;
Lähtekoodi saab [http://api.sqroot.eu/anroots-challengo-a6da30942c8c.tar.gz siit]. Kohtmasinasse paigaldamiseks tuleb alla laadida [http://kohanaframework.org Kohana] framework ning paigaldada application/bootstrap.php failis märgitud moodulid. Andmebaasi schema on database kaustas. Kood on testitud ainult Linux platvormil LAMP stack-iga.&lt;br /&gt;
&lt;br /&gt;
== Klientrakendus ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 5. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:5554-IceCream 024.png|300px|thumb|Ekraanipilt tulevaste etenduste nimekirjast]]&lt;br /&gt;
[[File:5554-IceCream 025.png|300px|thumb|Ekraanipilt etenduse detailvaatest]]&lt;br /&gt;
&lt;br /&gt;
Klientrakendus on Android rakendus, mis kuvab teater NO99 etendusi ning võimaldab punktide alusel pileteid osta. Tegu on jQuery Mobile pordiga Android platvormile.&lt;br /&gt;
&lt;br /&gt;
Rakendus suhtleb Play! raamistikus kirjutatud API-ga, mis asub kahjuks meeskonna localhostis, sest selle võrku panemiseks oli vaja VPS serverit. Seega ei suuda rakendus Teie arvutites sisselogimist teostada.&lt;br /&gt;
&lt;br /&gt;
Rakendusel on neli peamist vaadet: sisselogimine, etenduste nimekiri, etenduse detailvaade ning konto info. Pileteid saab osta punktide alusel (punktid peavad eelneva mehanismiga juba kontol olema, konto on punkt.no99.ee-ga ühine). Kui pilet on ostetud, märgib rakendus vastava etenduse taustavärviga, teiskordselt piletit osta ei saa, kuid seda pole raske realiseerida.&lt;br /&gt;
&lt;br /&gt;
Peale sisselogimist tõmmatakse serverist alla nimekiri etendustest ning hakatakse siis ükshaaval sellele nimekirjale pisipilte laadima. Allalaaditud pisipildid salvestatakse Android poolt antud vahemälukausta, neid teiskordselt ei laadita.&lt;br /&gt;
&lt;br /&gt;
Kõik suhtlused serveris on asünkroonsed, seda kahel põhjusel: esiteks tapab Android rakenduse ära (ja kasutajal on ebamugav), kui päringu vastust kasutajaliidese &#039;&#039;thread&#039;&#039;-ist oodata. Teiseks saab asünkroonset päringut mugavalt taustalt teha ning kasutaja saab oma asjadega edasi tegeleda.&lt;br /&gt;
&lt;br /&gt;
Rakenduse kood asub [https://bitbucket.org/anroots/punkt99-android/src/f87687bbe41d BitBucketis] (develop branch).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensendile&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Kuna rakendust iseseisvalt testida ei saa, olen soovi korral valmis seda uuesti oma arvutist demoma.&lt;br /&gt;
&lt;br /&gt;
=== Feature list === &lt;br /&gt;
&lt;br /&gt;
* Autentimine&lt;br /&gt;
* Tulevaste etenduste nimekirja vaatamine&lt;br /&gt;
* Etenduse detailide vaatamine (sh pilt)&lt;br /&gt;
* Allalaaditud piltide &#039;&#039;&#039;cache&#039;&#039;&#039;-mine&lt;br /&gt;
* Pileti ostmine etendusele punktide alusel&lt;br /&gt;
* Konto info vaatamine&lt;br /&gt;
&lt;br /&gt;
= Meeskonna Liikmed =&lt;br /&gt;
&lt;br /&gt;
* Ando Roots &#039;&#039;anroots@itcollege.ee&#039;&#039;&lt;br /&gt;
* Mikk Pärast &#039;&#039;mparast@itcollege.ee&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Liitumine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for t in tudengid:&lt;br /&gt;
  if !t.laisk &amp;amp;&amp;amp; t.oskab_progreda:&lt;br /&gt;
    kutsu_meeskonda(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ mail -s &amp;quot;Harold&amp;quot; anroots@itcollege.ee&amp;lt;/pre&amp;gt;&lt;br /&gt;
Eeldan varasemaid teadmisi ning usaldusväärsust. Soovin, et asi ei lõppeks jälle nii, et projektijuht on kaitsmiseelsel õhtul üleval ja lõpetab üksinda projekti.&lt;br /&gt;
Ole nii kena ja anna huvist märku enne &#039;&#039;&#039;26. veebruari&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Lisad =&lt;br /&gt;
&lt;br /&gt;
[http://jaa.ee Kes on Harold?]&lt;br /&gt;
&lt;br /&gt;
== Challengo ==&lt;br /&gt;
&lt;br /&gt;
Challengo.me on Garage48 Tallinn 2011 raames alustatud veebiteenus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A social network of themed challenges, comes with a Karma profile and level-system.&lt;br /&gt;
Revenues from ads on the mobile version.&lt;br /&gt;
Team members: Ando Roots, Kristo Vaher, Valeria Gasik, Jelena Savinen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube v=&amp;quot;pPfHJD5F7sc&amp;quot; /&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=pPfHJD5F7sc Jelena tutvustab Challengo teenust]&lt;br /&gt;
&lt;br /&gt;
== Punkt99 ==&lt;br /&gt;
&lt;br /&gt;
[http://garage48.org/blogger/projects-launched-at-garage48-tallinn-music-2012 Punkt99] valmis Garage48-l 2012 kevadel paljude hakkajate inimeste koostööl. Tegu on piletimüügirakendusega teater NO99-le.&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Talk:Meeskond_%22HM%22&amp;diff=48704</id>
		<title>Talk:Meeskond &quot;HM&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Talk:Meeskond_%22HM%22&amp;diff=48704"/>
		<updated>2012-05-24T20:10:09Z</updated>

		<summary type="html">&lt;p&gt;Anroots: /* Klientrakenduse retsensioon */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Loodud on lennujaamade XML fail, mis on tehtud kombineerides olemasolevaid vabavaralisi lennujaamade andmebaase. Idee tundub olevat kasulik ning huvitav. &lt;br /&gt;
Kasutusel on kuus loogilist dimensiooni, mis on enam kui ülesande püstituses on nõutud. Atribuute on kasutatud parajalt, kuid kontinent tag pole oluline ega vajalik, kuna lennujaamade joaks on tähtis riik. Kui lennukiga lennata siis pole oluline, kas inimene vahetab kontinenti. Oluline on mis linnast mis linna lennata. Samas kontinent võiks olla ka, et lihtsamini riike eraldada. Rahvaarv igal kontinendil pole ka oluline, kui arvestada, et tegu on lennujaamade andmebaasiga. &lt;br /&gt;
Riik tag’is olevad raha ja rahanimi on suhteliselt ebaolulised arvestades, et tegu on jällegi lennujaamade andmebaasiga. Pigem võiks riigi ID kõrval olla atribuudina riigi nimi. &lt;br /&gt;
Linnadel on ID’ks linna nimi ning eraldi välja toodud ka nimi tag’ina. Kaks korda sama asja pole vaja välja tuua.&lt;br /&gt;
Lennujaamade ID välja toomine on hea, sest seda ID’d kasutatakse rahvusvaheliselt lennujaamade- ja turismiinfosüsteemides. Samuti on väga hea, et välja on toodud GPS koordinaadid. Nii on võimalik andmebaasist otse võtta lennujaamade asukoht.  &lt;br /&gt;
Kood on ühtlaselt ja loogiliselt kirjutatud, pole erinevaid suuri ja väikeseid tähti, vaid on kasutatud ühtset stiili. Välja arvatud root elemendi puhul, kus element  &amp;lt;Maa&amp;gt; algab suure tähega. Kahjuks pole koodi aga kommenteeritud, mis teeb selle lugemise natukene raskemaks. 	&lt;br /&gt;
&lt;br /&gt;
Retsenseerijateks oli [[Meeskond &amp;quot;.NOT&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse Retsensioon ==&lt;br /&gt;
&lt;br /&gt;
Valminud teenus omab kasutajate poolset sisselogimist, mida on näha teenuse käivitamisel, kui küsitakse kasutajanime ja parooli, mille otsimiseks õnneks eriti kaua ei läinud, sest andmebaasi uurides selgus, et koos andmebaasi loomise skriptiga oli &#039;by default&#039; tehtud ka kasutaja &#039;Administraator&#039;, mille sain kätte ühe lihtsa SELECT päringuga. Põhjalikumal andmebaasiga tutvumisel selgus, et pole tehtud lennujaamasid ja kontinente, mis võib-olla oleks võinud koos andmebaasi loomise skriptiga kaasa tulla, kuid Administraatori rollis olev kasutaja saab neid ise lisada. &lt;br /&gt;
&lt;br /&gt;
Algul tundus, et lennujaama sain ilusti lisatud kasutades Administraatori paneelis Lisa lennujaam funktsionaalsust. Kontrollides üle SELECT päringuga ei olnud seda lennujaama andmebaasis. Ning kaldun arvama, et ainuüksi lennujaama nimest, lühendist ja koordinaatidest jääb väheks, kuna lennujaamu saab otsida kontinentide, riikide ja linnade järgi. Või on see rakendus piisavalt arukas, et paigutab koordinaatide järgi automaatselt lennujaama vastavasse riiki ning linna?&lt;br /&gt;
&lt;br /&gt;
Peale kontinentide lisamist andmebaasi tundus, et lennujaamade otsimine hakkas justkui tööle, kuid kuna riike ning linnasid pole veel lisatud andmebaasi, siis tulemuste tabelisse tuli imelik &amp;quot;lennujaam&amp;quot;: ID on 1, Nimi on &amp;quot;puudub&amp;quot;, Latitude ning Longitude on 0 ning lühend on tühi.&lt;br /&gt;
&lt;br /&gt;
Peale mõnede kontinentide, riikide, linnade ning lennujaamade lisamist andmebaasi tundus, et otsing hakkab tööle, kuid riigid ning linnad on kuidagimoodi valesti seotud kontinentidega. Enda arust sisestasin kõik õigesti SQL päringutega (kontrollisin üle mitu korda), kuid enda sisestatud Eesti sai seotud kuidagi Aafrika kontinendiga, kusjuures linnadest ainult Tallinn (lisasin ka Tartu, seda pole üldse näha). Ehk tundub et iga riigiga on seotud üks linn (õigesti), kuid kontinentidega on valesti läinud. Ning ka siis ei tööta otsing õigesti/üldse, annab tulemuseks ikka lennujaama mille ID on 1, nimi puudub jne.&lt;br /&gt;
&lt;br /&gt;
Longitude ja Latitude valideerimine töötab osaliselt. Tähti ega stringe küll ei saa kirjutada textbox&#039;i, kuid tuleks võtta Latitude maksimaalseks väärtuseks 90 ning minimaalseks -90 (nagu on kaartide peal, s.h. Google Maps); Longitude maksimaalseks väärtuseks on sel juhul 180 ning minimaalseks -180. Kui sisestada käsitsi arv, mis on suurem kui 700, siis jääb väärtuseks sinna 700, kui sisestada arv, mis on väiksem kui 700 ning suurem kui 0, siis jääb vastuseks see arv koos komakohtadega. Komakohtade ümardamisega ei tundu olevat probleeme: kui kirjutada arv väiksema täpsusega kui 10 kohta peale koma, siis lisatakse nullid otsa arvule ning kui on täpsus suurem kui 10 koma-kohta, siis ümardab õigesti arvu selle täpsuseks. Kui sisestada arv, mis on negatiivne (ehk näiteks -4), siis muutub see väärtus 0-ks.&lt;br /&gt;
&lt;br /&gt;
Koodi on natukene liiga vähe kommenteeritud ja sellest tulenevalt läheb mõni kord natukene kaua, et hakata aru saama koodist. LINQ päringutel soovitaksin soojalt kasutada First() meetodi asemel FirstOrDefault() meetodit, kuna kui päringust tagastatakse null, siis võib programm kokku joosta kui kasutatakse First() meetodit. Seda on õppejõud maininud mitmetel kordadel.&lt;br /&gt;
&lt;br /&gt;
Andmebaasi kohta mainiks ära nii palju, et kõikidel tabelitel võiks olla uuendamise ja loomise kuupäevade atribuudid, sest siis saaks parema ülevaate sellest, mis on andmebaasis toimunud (ehk millal kanti andmed sisse, millal andmeid uuendati, millal eemaldati jms).&lt;br /&gt;
&lt;br /&gt;
Kasutajate haldamine on natukene poolik. Oleks tore kui saaks kasutajate andmeid ka muuta (parool, isAdmin jms). Samuti ei saa kasutajaid luua teenuse kaudu. Aktsepteeritavam oleks, kui seda saab teha kasutaja ise sisse logimise aknas, sest hetkel toetub asi puhtalt andmebaasile ligi pääsevale inimesele. Teenuse kasutajate ja kasutusstatistika üle ei saa arvet pidada, see on üks nõuetest veebiteenusele. Failid ise on kõik kenasti puhtad, et neis ei ole välja kommenteeritud vana ja/või mitte töötavat koodi ning trepitud on koodi kenasti.&lt;br /&gt;
&lt;br /&gt;
Töötavad asjad: Kasutajate nimekiri, lennujaamade laiuskraadide validatsioon, kuvab riigid/linnad/kontinendid dropdown menüüs kui need on lisatud andmebaasi&lt;br /&gt;
Mitte töötavad asjad: lennujaamade otsing (nii kontinendi/riikide/linnade järgi kui ka laiuskraadide vahemikus), lennujaama lisamine formi kaudu, kasutajate kustutamine, lennujaamade kustutamine.&lt;br /&gt;
&lt;br /&gt;
Retsenseeris [[Meeskond &amp;quot;.NOT&amp;quot;]] liikmed&lt;br /&gt;
&lt;br /&gt;
== Klientrakenduse retsensioon ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039; by [[Meeskond &amp;quot;Harold&amp;quot;]] (disclaimer: retsensiooni kirjutas [[User:Anroots]] oma subjektiivsel arvamusel ja heade kavatsustega, püüdes jääda võimalikult poliitiliseks)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Live demo ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Veebiliides &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Esmalt tagasiside praktikumis kuuldu/nähtu põhjal. Esimese asjana hakkas silma kujundus. Öeldakse, et kujundus ei mängi tehniliste katsetuste puhul rolli, olen sellega enam-vähem nõus; siiski tuleks oma tahtmist selgelt väljendada. Mis ma sellega öelda tahan on järgmine: kui disainerit pole võtta ja projekt ei lähe turustamisele on kõige parem mõte võtta mõni vabavaraline kujundusraamistik (CSS framework) ja kasutada selle võimalusi. Teie poolt valitud kujundus tundus ebamugavalt suurena ning jäi sisutühjaks.&lt;br /&gt;
&lt;br /&gt;
Edasi sarnasel teemal: kasutajaliidese elementide paigutuse ja väljanägemisse võiks natuke panustada. Näiteid: Avalehe otsingu nupp võiks olla samal real sisestuskastiga. Tekstid (tabeli pealkirjad, stringid) võiksid alata suure tähega ning olla valitud keeles, mitte andmebaasi kujul. Inimesed on emotsionaalsed olevused ja võtavad otsuseid tihti vastu tunnete, mitte loogika põhjal; eks õpetata seepärast ju ka äripsüholoogiat. Igasugustes prototüüpides on mõnikord tähtsam väljanägemine kui see, et väiksem funktsionaalsus töötaks. Ebameeldiv esmakogemus kasutajaliidesega võib saada põhjuseks miks mina, külastaja, paaril esimesel saidil/rakendusel viibinud sekundil juba Back nuppu otsin.&lt;br /&gt;
&lt;br /&gt;
...veel nurinat, navigatsioon: menüüd (city/country/continent/advanced, samuti paremas tulbas olev analoog) on liiga keerukad. Keerukad just selles mõttes, et ekraan on infot täis. Vaadakem Google esialgset kasutajaliidest, üks otsingukast ja valmis. Teie otsingufunktsionaalsus, mis hetkel on alamlehtedele peidetud erineb tegelikult vaid ühe kriteeriumi poolest, seega oleks loogiline ta ka kenasti ühte kohta kokku panna.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Admin-liides &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Jällegi, esimese paari sekundi muljest rääkides: mulle tundus, et olin sattunud lennujuhtimiskeskusesse, sest Windows Forms Admin liides oli sedavõrd keeruka väljanägemisega. Siis süvenesin natukene ja sain aru, et tegelikult on lihtne funktsionaalsus paigutatud kõik ühe lehe peale ja keerulist pole seal midagi. Siiski - esmamulje. Andmete sisestamine admin liidesest töötas, aga võiks jällegi lihtsam olla. Mingisugused auto-complete tekstboxid, rippmenüüde asemel näiteks aadressiotsingu kast, mis Googlest abi küsib... või midagi sellist.&lt;br /&gt;
&lt;br /&gt;
Meeldis see, et oli mõeldud kahe andmeallika peale, esmalt andmebaas ja redundancy XML fail... kuid nagu küsimusest selgus, oli XML-iga siiski natuke probleeme, nimelt just sünkroniseerimine andmebaasiga. Päriselt kasutuses olevas rakenduses oleks see lubamatu viga.&lt;br /&gt;
&lt;br /&gt;
=== Kood (PHP) ===&lt;br /&gt;
&lt;br /&gt;
# Kood on kommenteerimata&lt;br /&gt;
# Miks on kasutatud &#039;&#039;hardcoded&#039;&#039; väärtusi?&lt;br /&gt;
# Kasutatud mõningaid (vaieldavalt) halbu praktikaid: globaalsed muutujad, kihtide (MVC vms) puudumine, konfiguratsiooni hoidmine otse koodis (punkt 2), veatöötluse puudumine&lt;br /&gt;
&lt;br /&gt;
Arvan, et sellisel kujul olev kood on raskesti hooldatav, loetav ning laiendatav. Näeksin meelsasti vaadete, loogika ja andmeallika eraldamist. Koodi ei olnud kerge lugeda ja mõista, kasuks tuleks ka suurem reavahetuste ja loogeliste sulgude kasutamine. Meeldis, et kasutusel oli konventsioon muutujate nimetamisel ning nimed olid ingliskeelsed.&lt;br /&gt;
&lt;br /&gt;
Kas koodi turvalisusele on mõeldud? Nii alloleva teenuse kontekstis kui operatsioonisüsteemi osas, mis PHP rakendust jooksutab.&lt;br /&gt;
&lt;br /&gt;
=== Juhumõtted ===&lt;br /&gt;
&lt;br /&gt;
* Google Maps, mis kuvatakse lennujaamade asukohtadega, võiks olla interaktiivne.&lt;br /&gt;
* Lennujaama andmetele annab igasuguseid põnevaid linkimisi teha, näiteks otsida nime/aadressi järgi välja selle jaama Wikipedia artikkel vms&lt;br /&gt;
* Parema menüü otsingukast ei tööta&lt;br /&gt;
* Lehel võiks olla tervitus-, tutvustus- ja abitekstid, samuti kontakt e-mail (mis mõningates kohtades on igas avaldatud rakenduses kohustuslik)&lt;br /&gt;
* Otsing paistab problemaatiline, mängisin sellega natuke erinevaid sisendandmeid (nii vigaseid kui õigeid) kasutades ja sain üllatavaid tulemusi&lt;br /&gt;
* HTML ei valideeru&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Kokkuvõtteks &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Idee on iseenesest korralik. Kuigi lennujaamade otsingut on kindlasti realiseeritud juba mitmel erineval korral sobib selline ülesandepüstitus aine konteksti.  Meeskond sai valmis enamjaolt töötava veebiteenuse ning seda kasutavad klientrakendused.&lt;br /&gt;
&lt;br /&gt;
Üldmuljet rikkusid avastatud hooletusvead nii kujunduse kui testimata/lõpetamata funktsionaalsuse osas, samuti eksis retsensent koodi lugedes ära, sest &amp;lt;u&amp;gt;kood oli kommenteerimata&amp;lt;/u&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Vabandused otsese ning karmi kriitika eest. Hakkasin lihtsalt algusest kirjutama ning panin kõik mõtted ausalt kirja. Loodan, et sellise retsensiooni mõttega läbilugemine annab Teile midagi kasuliku nii tehnoloogilises- kui ärimaailmas.&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Talk:Meeskond_%22HM%22&amp;diff=48703</id>
		<title>Talk:Meeskond &quot;HM&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Talk:Meeskond_%22HM%22&amp;diff=48703"/>
		<updated>2012-05-24T19:56:50Z</updated>

		<summary type="html">&lt;p&gt;Anroots: /* Klientrakenduse retsensioon */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Loodud on lennujaamade XML fail, mis on tehtud kombineerides olemasolevaid vabavaralisi lennujaamade andmebaase. Idee tundub olevat kasulik ning huvitav. &lt;br /&gt;
Kasutusel on kuus loogilist dimensiooni, mis on enam kui ülesande püstituses on nõutud. Atribuute on kasutatud parajalt, kuid kontinent tag pole oluline ega vajalik, kuna lennujaamade joaks on tähtis riik. Kui lennukiga lennata siis pole oluline, kas inimene vahetab kontinenti. Oluline on mis linnast mis linna lennata. Samas kontinent võiks olla ka, et lihtsamini riike eraldada. Rahvaarv igal kontinendil pole ka oluline, kui arvestada, et tegu on lennujaamade andmebaasiga. &lt;br /&gt;
Riik tag’is olevad raha ja rahanimi on suhteliselt ebaolulised arvestades, et tegu on jällegi lennujaamade andmebaasiga. Pigem võiks riigi ID kõrval olla atribuudina riigi nimi. &lt;br /&gt;
Linnadel on ID’ks linna nimi ning eraldi välja toodud ka nimi tag’ina. Kaks korda sama asja pole vaja välja tuua.&lt;br /&gt;
Lennujaamade ID välja toomine on hea, sest seda ID’d kasutatakse rahvusvaheliselt lennujaamade- ja turismiinfosüsteemides. Samuti on väga hea, et välja on toodud GPS koordinaadid. Nii on võimalik andmebaasist otse võtta lennujaamade asukoht.  &lt;br /&gt;
Kood on ühtlaselt ja loogiliselt kirjutatud, pole erinevaid suuri ja väikeseid tähti, vaid on kasutatud ühtset stiili. Välja arvatud root elemendi puhul, kus element  &amp;lt;Maa&amp;gt; algab suure tähega. Kahjuks pole koodi aga kommenteeritud, mis teeb selle lugemise natukene raskemaks. 	&lt;br /&gt;
&lt;br /&gt;
Retsenseerijateks oli [[Meeskond &amp;quot;.NOT&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse Retsensioon ==&lt;br /&gt;
&lt;br /&gt;
Valminud teenus omab kasutajate poolset sisselogimist, mida on näha teenuse käivitamisel, kui küsitakse kasutajanime ja parooli, mille otsimiseks õnneks eriti kaua ei läinud, sest andmebaasi uurides selgus, et koos andmebaasi loomise skriptiga oli &#039;by default&#039; tehtud ka kasutaja &#039;Administraator&#039;, mille sain kätte ühe lihtsa SELECT päringuga. Põhjalikumal andmebaasiga tutvumisel selgus, et pole tehtud lennujaamasid ja kontinente, mis võib-olla oleks võinud koos andmebaasi loomise skriptiga kaasa tulla, kuid Administraatori rollis olev kasutaja saab neid ise lisada. &lt;br /&gt;
&lt;br /&gt;
Algul tundus, et lennujaama sain ilusti lisatud kasutades Administraatori paneelis Lisa lennujaam funktsionaalsust. Kontrollides üle SELECT päringuga ei olnud seda lennujaama andmebaasis. Ning kaldun arvama, et ainuüksi lennujaama nimest, lühendist ja koordinaatidest jääb väheks, kuna lennujaamu saab otsida kontinentide, riikide ja linnade järgi. Või on see rakendus piisavalt arukas, et paigutab koordinaatide järgi automaatselt lennujaama vastavasse riiki ning linna?&lt;br /&gt;
&lt;br /&gt;
Peale kontinentide lisamist andmebaasi tundus, et lennujaamade otsimine hakkas justkui tööle, kuid kuna riike ning linnasid pole veel lisatud andmebaasi, siis tulemuste tabelisse tuli imelik &amp;quot;lennujaam&amp;quot;: ID on 1, Nimi on &amp;quot;puudub&amp;quot;, Latitude ning Longitude on 0 ning lühend on tühi.&lt;br /&gt;
&lt;br /&gt;
Peale mõnede kontinentide, riikide, linnade ning lennujaamade lisamist andmebaasi tundus, et otsing hakkab tööle, kuid riigid ning linnad on kuidagimoodi valesti seotud kontinentidega. Enda arust sisestasin kõik õigesti SQL päringutega (kontrollisin üle mitu korda), kuid enda sisestatud Eesti sai seotud kuidagi Aafrika kontinendiga, kusjuures linnadest ainult Tallinn (lisasin ka Tartu, seda pole üldse näha). Ehk tundub et iga riigiga on seotud üks linn (õigesti), kuid kontinentidega on valesti läinud. Ning ka siis ei tööta otsing õigesti/üldse, annab tulemuseks ikka lennujaama mille ID on 1, nimi puudub jne.&lt;br /&gt;
&lt;br /&gt;
Longitude ja Latitude valideerimine töötab osaliselt. Tähti ega stringe küll ei saa kirjutada textbox&#039;i, kuid tuleks võtta Latitude maksimaalseks väärtuseks 90 ning minimaalseks -90 (nagu on kaartide peal, s.h. Google Maps); Longitude maksimaalseks väärtuseks on sel juhul 180 ning minimaalseks -180. Kui sisestada käsitsi arv, mis on suurem kui 700, siis jääb väärtuseks sinna 700, kui sisestada arv, mis on väiksem kui 700 ning suurem kui 0, siis jääb vastuseks see arv koos komakohtadega. Komakohtade ümardamisega ei tundu olevat probleeme: kui kirjutada arv väiksema täpsusega kui 10 kohta peale koma, siis lisatakse nullid otsa arvule ning kui on täpsus suurem kui 10 koma-kohta, siis ümardab õigesti arvu selle täpsuseks. Kui sisestada arv, mis on negatiivne (ehk näiteks -4), siis muutub see väärtus 0-ks.&lt;br /&gt;
&lt;br /&gt;
Koodi on natukene liiga vähe kommenteeritud ja sellest tulenevalt läheb mõni kord natukene kaua, et hakata aru saama koodist. LINQ päringutel soovitaksin soojalt kasutada First() meetodi asemel FirstOrDefault() meetodit, kuna kui päringust tagastatakse null, siis võib programm kokku joosta kui kasutatakse First() meetodit. Seda on õppejõud maininud mitmetel kordadel.&lt;br /&gt;
&lt;br /&gt;
Andmebaasi kohta mainiks ära nii palju, et kõikidel tabelitel võiks olla uuendamise ja loomise kuupäevade atribuudid, sest siis saaks parema ülevaate sellest, mis on andmebaasis toimunud (ehk millal kanti andmed sisse, millal andmeid uuendati, millal eemaldati jms).&lt;br /&gt;
&lt;br /&gt;
Kasutajate haldamine on natukene poolik. Oleks tore kui saaks kasutajate andmeid ka muuta (parool, isAdmin jms). Samuti ei saa kasutajaid luua teenuse kaudu. Aktsepteeritavam oleks, kui seda saab teha kasutaja ise sisse logimise aknas, sest hetkel toetub asi puhtalt andmebaasile ligi pääsevale inimesele. Teenuse kasutajate ja kasutusstatistika üle ei saa arvet pidada, see on üks nõuetest veebiteenusele. Failid ise on kõik kenasti puhtad, et neis ei ole välja kommenteeritud vana ja/või mitte töötavat koodi ning trepitud on koodi kenasti.&lt;br /&gt;
&lt;br /&gt;
Töötavad asjad: Kasutajate nimekiri, lennujaamade laiuskraadide validatsioon, kuvab riigid/linnad/kontinendid dropdown menüüs kui need on lisatud andmebaasi&lt;br /&gt;
Mitte töötavad asjad: lennujaamade otsing (nii kontinendi/riikide/linnade järgi kui ka laiuskraadide vahemikus), lennujaama lisamine formi kaudu, kasutajate kustutamine, lennujaamade kustutamine.&lt;br /&gt;
&lt;br /&gt;
Retsenseeris [[Meeskond &amp;quot;.NOT&amp;quot;]] liikmed&lt;br /&gt;
&lt;br /&gt;
== Klientrakenduse retsensioon ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039; by [[Meeskond &amp;quot;Harold&amp;quot;]] (disclaimer: retsensiooni kirjutas [[User:Anroots]] oma subjektiivsel arvamusel ja heade kavatsustega, püüdes jääda võimalikult poliitiliseks)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Live demo ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Veebiliides &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Esmalt tagasiside praktikumis kuuldu/nähtu põhjal. Esimese asjana hakkas silma kujundus. Öeldakse, et kujundus ei mängi tehniliste katsetuste puhul rolli, olen sellega enam-vähem nõus; siiski tuleks oma tahtmist selgelt väljendada. Mis ma sellega öelda tahan on järgmine: kui disainerit pole võtta ja projekt ei lähe turustamisele on kõige parem mõte võtta mõni vabavaraline kujundusraamistik (CSS framework) ja kasutada selle võimalusi. Teie poolt valitud kujundus tundus ebamugavalt suurena ning jäi sisutühjaks.&lt;br /&gt;
&lt;br /&gt;
Edasi sarnasel teemal: kasutajaliidese elementide paigutuse ja väljanägemisse võiks natuke panustada. Näiteid: Avalehe otsingu nupp võiks olla samal real sisestuskastiga. Tekstid (tabeli pealkirjad, stringid) võiksid alata suure tähega ning olla valitud keeles, mitte andmebaasi kujul. Inimesed on emotsionaalsed olevused ja võtavad otsuseid tihti vastu tunnete, mitte loogika põhjal; eks õpetata seepärast ju ka äripsüholoogiat. Igasugustes prototüüpides on mõnikord tähtsam väljanägemine kui see, et väiksem funktsionaalsus töötaks. Ebameeldiv esmakogemus kasutajaliidesega võib saada põhjuseks miks mina, külastaja, paaril esimesel saidil/rakendusel viibinud sekundil juba Back nuppu otsin.&lt;br /&gt;
&lt;br /&gt;
...veel nurinat, navigatsioon: menüüd (city/country/continent/advanced, samuti paremas tulbas olev analoog) on liiga keerukad. Keerukad just selles mõttes, et ekraan on infot täis. Vaadakem Google esialgset kasutajaliidest, üks otsingukast ja valmis. Teie otsingufunktsionaalsus, mis hetkel on alamlehtedele peidetud erineb tegelikult vaid ühe kriteeriumi poolest, seega oleks loogiline ta ka kenasti ühte kohta kokku panna.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Admin-liides &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Jällegi, esimese paari sekundi muljest rääkides: mulle tundus, et olin sattunud lennujuhtimiskeskusesse, sest Windows Forms Admin liides oli sedavõrd keeruka väljanägemisega. Siis süvenesin natukene ja sain aru, et tegelikult on lihtne funktsionaalsus paigutatud kõik ühe lehe peale ja keerulist pole seal midagi. Siiski - esmamulje. Andmete sisestamine admin liidesest töötas, aga võiks jällegi lihtsam olla. Mingisugused auto-complete tekstboxid, rippmenüüde asemel näiteks aadressiotsingu kast, mis Googlest abi küsib... või midagi sellist.&lt;br /&gt;
&lt;br /&gt;
Meeldis see, et oli mõeldud kahe andmeallika peale, esmalt andmebaas ja redundancy XML fail... kuid nagu küsimusest selgus, oli XML-iga siiski natuke probleeme, nimelt just sünkroniseerimine andmebaasiga. Päriselt kasutuses olevas rakenduses oleks see lubamatu viga.&lt;br /&gt;
&lt;br /&gt;
=== Juhumõtted ===&lt;br /&gt;
&lt;br /&gt;
* Google Maps, mis kuvatakse lennujaamade asukohtadega, võiks olla interaktiivne.&lt;br /&gt;
* Lennujaama andmetele annab igasuguseid põnevaid linkimisi teha, näiteks otsida nime/aadressi järgi välja selle jaama Wikipedia artikkel vms&lt;br /&gt;
* Parema menüü otsingukast ei tööta&lt;br /&gt;
* Lehel võiks olla tervitus-, tutvustus- ja abitekstid, samuti kontakt e-mail (mis mõningates kohtades on igas avaldatud rakenduses kohustuslik)&lt;br /&gt;
* Otsing paistab problemaatiline, mängisin sellega natuke erinevaid sisendandmeid (nii vigaseid kui õigeid) kasutades ja sain üllatavaid tulemusi&lt;br /&gt;
* HTML ei valideeru&lt;br /&gt;
&lt;br /&gt;
=== Kood (PHP) ===&lt;br /&gt;
&lt;br /&gt;
# Kood on kommenteerimata&lt;br /&gt;
# Miks on kasutatud &#039;&#039;hardcoded&#039;&#039; väärtusi?&lt;br /&gt;
# Kasutatud mõningaid (vaieldavalt) halbu praktikaid: globaalsed muutujad, kihtide (MVC vms) puudumine, konfiguratsiooni hoidmine otse koodis (punkt 2), veatöötluse puudumine&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Talk:Meeskond_%22HM%22&amp;diff=48702</id>
		<title>Talk:Meeskond &quot;HM&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Talk:Meeskond_%22HM%22&amp;diff=48702"/>
		<updated>2012-05-24T19:25:53Z</updated>

		<summary type="html">&lt;p&gt;Anroots: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Loodud on lennujaamade XML fail, mis on tehtud kombineerides olemasolevaid vabavaralisi lennujaamade andmebaase. Idee tundub olevat kasulik ning huvitav. &lt;br /&gt;
Kasutusel on kuus loogilist dimensiooni, mis on enam kui ülesande püstituses on nõutud. Atribuute on kasutatud parajalt, kuid kontinent tag pole oluline ega vajalik, kuna lennujaamade joaks on tähtis riik. Kui lennukiga lennata siis pole oluline, kas inimene vahetab kontinenti. Oluline on mis linnast mis linna lennata. Samas kontinent võiks olla ka, et lihtsamini riike eraldada. Rahvaarv igal kontinendil pole ka oluline, kui arvestada, et tegu on lennujaamade andmebaasiga. &lt;br /&gt;
Riik tag’is olevad raha ja rahanimi on suhteliselt ebaolulised arvestades, et tegu on jällegi lennujaamade andmebaasiga. Pigem võiks riigi ID kõrval olla atribuudina riigi nimi. &lt;br /&gt;
Linnadel on ID’ks linna nimi ning eraldi välja toodud ka nimi tag’ina. Kaks korda sama asja pole vaja välja tuua.&lt;br /&gt;
Lennujaamade ID välja toomine on hea, sest seda ID’d kasutatakse rahvusvaheliselt lennujaamade- ja turismiinfosüsteemides. Samuti on väga hea, et välja on toodud GPS koordinaadid. Nii on võimalik andmebaasist otse võtta lennujaamade asukoht.  &lt;br /&gt;
Kood on ühtlaselt ja loogiliselt kirjutatud, pole erinevaid suuri ja väikeseid tähti, vaid on kasutatud ühtset stiili. Välja arvatud root elemendi puhul, kus element  &amp;lt;Maa&amp;gt; algab suure tähega. Kahjuks pole koodi aga kommenteeritud, mis teeb selle lugemise natukene raskemaks. 	&lt;br /&gt;
&lt;br /&gt;
Retsenseerijateks oli [[Meeskond &amp;quot;.NOT&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
== Veebiteenuse Retsensioon ==&lt;br /&gt;
&lt;br /&gt;
Valminud teenus omab kasutajate poolset sisselogimist, mida on näha teenuse käivitamisel, kui küsitakse kasutajanime ja parooli, mille otsimiseks õnneks eriti kaua ei läinud, sest andmebaasi uurides selgus, et koos andmebaasi loomise skriptiga oli &#039;by default&#039; tehtud ka kasutaja &#039;Administraator&#039;, mille sain kätte ühe lihtsa SELECT päringuga. Põhjalikumal andmebaasiga tutvumisel selgus, et pole tehtud lennujaamasid ja kontinente, mis võib-olla oleks võinud koos andmebaasi loomise skriptiga kaasa tulla, kuid Administraatori rollis olev kasutaja saab neid ise lisada. &lt;br /&gt;
&lt;br /&gt;
Algul tundus, et lennujaama sain ilusti lisatud kasutades Administraatori paneelis Lisa lennujaam funktsionaalsust. Kontrollides üle SELECT päringuga ei olnud seda lennujaama andmebaasis. Ning kaldun arvama, et ainuüksi lennujaama nimest, lühendist ja koordinaatidest jääb väheks, kuna lennujaamu saab otsida kontinentide, riikide ja linnade järgi. Või on see rakendus piisavalt arukas, et paigutab koordinaatide järgi automaatselt lennujaama vastavasse riiki ning linna?&lt;br /&gt;
&lt;br /&gt;
Peale kontinentide lisamist andmebaasi tundus, et lennujaamade otsimine hakkas justkui tööle, kuid kuna riike ning linnasid pole veel lisatud andmebaasi, siis tulemuste tabelisse tuli imelik &amp;quot;lennujaam&amp;quot;: ID on 1, Nimi on &amp;quot;puudub&amp;quot;, Latitude ning Longitude on 0 ning lühend on tühi.&lt;br /&gt;
&lt;br /&gt;
Peale mõnede kontinentide, riikide, linnade ning lennujaamade lisamist andmebaasi tundus, et otsing hakkab tööle, kuid riigid ning linnad on kuidagimoodi valesti seotud kontinentidega. Enda arust sisestasin kõik õigesti SQL päringutega (kontrollisin üle mitu korda), kuid enda sisestatud Eesti sai seotud kuidagi Aafrika kontinendiga, kusjuures linnadest ainult Tallinn (lisasin ka Tartu, seda pole üldse näha). Ehk tundub et iga riigiga on seotud üks linn (õigesti), kuid kontinentidega on valesti läinud. Ning ka siis ei tööta otsing õigesti/üldse, annab tulemuseks ikka lennujaama mille ID on 1, nimi puudub jne.&lt;br /&gt;
&lt;br /&gt;
Longitude ja Latitude valideerimine töötab osaliselt. Tähti ega stringe küll ei saa kirjutada textbox&#039;i, kuid tuleks võtta Latitude maksimaalseks väärtuseks 90 ning minimaalseks -90 (nagu on kaartide peal, s.h. Google Maps); Longitude maksimaalseks väärtuseks on sel juhul 180 ning minimaalseks -180. Kui sisestada käsitsi arv, mis on suurem kui 700, siis jääb väärtuseks sinna 700, kui sisestada arv, mis on väiksem kui 700 ning suurem kui 0, siis jääb vastuseks see arv koos komakohtadega. Komakohtade ümardamisega ei tundu olevat probleeme: kui kirjutada arv väiksema täpsusega kui 10 kohta peale koma, siis lisatakse nullid otsa arvule ning kui on täpsus suurem kui 10 koma-kohta, siis ümardab õigesti arvu selle täpsuseks. Kui sisestada arv, mis on negatiivne (ehk näiteks -4), siis muutub see väärtus 0-ks.&lt;br /&gt;
&lt;br /&gt;
Koodi on natukene liiga vähe kommenteeritud ja sellest tulenevalt läheb mõni kord natukene kaua, et hakata aru saama koodist. LINQ päringutel soovitaksin soojalt kasutada First() meetodi asemel FirstOrDefault() meetodit, kuna kui päringust tagastatakse null, siis võib programm kokku joosta kui kasutatakse First() meetodit. Seda on õppejõud maininud mitmetel kordadel.&lt;br /&gt;
&lt;br /&gt;
Andmebaasi kohta mainiks ära nii palju, et kõikidel tabelitel võiks olla uuendamise ja loomise kuupäevade atribuudid, sest siis saaks parema ülevaate sellest, mis on andmebaasis toimunud (ehk millal kanti andmed sisse, millal andmeid uuendati, millal eemaldati jms).&lt;br /&gt;
&lt;br /&gt;
Kasutajate haldamine on natukene poolik. Oleks tore kui saaks kasutajate andmeid ka muuta (parool, isAdmin jms). Samuti ei saa kasutajaid luua teenuse kaudu. Aktsepteeritavam oleks, kui seda saab teha kasutaja ise sisse logimise aknas, sest hetkel toetub asi puhtalt andmebaasile ligi pääsevale inimesele. Teenuse kasutajate ja kasutusstatistika üle ei saa arvet pidada, see on üks nõuetest veebiteenusele. Failid ise on kõik kenasti puhtad, et neis ei ole välja kommenteeritud vana ja/või mitte töötavat koodi ning trepitud on koodi kenasti.&lt;br /&gt;
&lt;br /&gt;
Töötavad asjad: Kasutajate nimekiri, lennujaamade laiuskraadide validatsioon, kuvab riigid/linnad/kontinendid dropdown menüüs kui need on lisatud andmebaasi&lt;br /&gt;
Mitte töötavad asjad: lennujaamade otsing (nii kontinendi/riikide/linnade järgi kui ka laiuskraadide vahemikus), lennujaama lisamine formi kaudu, kasutajate kustutamine, lennujaamade kustutamine.&lt;br /&gt;
&lt;br /&gt;
Retsenseeris [[Meeskond &amp;quot;.NOT&amp;quot;]] liikmed&lt;br /&gt;
&lt;br /&gt;
== Klientrakenduse retsensioon ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; by [[Meeskond &amp;quot;Harold&amp;quot;]] &#039;&#039;&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=48680</id>
		<title>Meeskond &quot;Harold&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=48680"/>
		<updated>2012-05-24T08:25:58Z</updated>

		<summary type="html">&lt;p&gt;Anroots: /* Klientrakendus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
{| style=&amp;quot;width:100%;height: 40px; background-color:#dff0d8;border: 1px solid ##468847;color:#468847;padding:10px;font-size:16px;font-weight:bold-webkit-border-radius: 8px;-moz-border-radius: 8px;border-radius: 8px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
| Ära kaitsesime.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Tegemist on IT Kolledži aine raames eksamieeldust taotleva projektimeeskonna töö dokumentatsiooniga.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 30em; padding-left: 2em; float: right; font-size: 95%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Meeskond &#039;&#039;&amp;quot;Harold&amp;quot;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Aine:&#039;&#039;&#039;&lt;br /&gt;
| [[:Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhend:&#039;&#039;&#039;&lt;br /&gt;
| [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2012 Juhend]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Tüüp:&#039;&#039;&#039;&lt;br /&gt;
| Projekt&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Anroots]]&amp;lt;br /&amp;gt;[[User:Mparast]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhendajad:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Mposka]]&amp;lt;br /&amp;gt;[[User:Kraspel]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Semester:&#039;&#039;&#039;&lt;br /&gt;
| 2011/2012 kevad&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Lingid&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|API Demo&lt;br /&gt;
|[http://api.sqroot.eu http://api.sqroot.eu]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Projekt =&lt;br /&gt;
&lt;br /&gt;
Projekti esimesed kaks osa keskenduvad veebiteenuse &amp;quot;Challengo&amp;quot; taasloomisele. Projekti esimene osa valmistab ette peamis(t)e päringu(te) XML vastuse struktuuri, projekti teine osa (veebiteenuse loomine) ehitab vastava API.&lt;br /&gt;
&lt;br /&gt;
== Korraldus ==&lt;br /&gt;
&lt;br /&gt;
Projektiga seonduv dokumentatsioon (erandiks on käesolev wiki leht), kasutajale nähtavad tekstid ning lähtekood on kirjutatud inglise keeles. Võimalusel on kood kirjutatud hilisema I18n toe võimaldamiseks.&lt;br /&gt;
&lt;br /&gt;
Koodi haldab GitHub repositoorium, juurdepääsu saamiseks tuleb projektijuhile saata oma GitHub kasutajanimi (või &#039;&#039;pull request&#039;&#039;). Tegemist vajavaid töid näeb GitHub lehel &#039;&#039;Issues&#039;&#039; vahekaardilt ning asjakohane dokumentatsioon (API) on GitHub wiki alamjaotises.&lt;br /&gt;
&lt;br /&gt;
Lähtekood on põhjalikult kommenteeritud, muud, eraldiseisvat dokumentatsiooni koodi kohta on minimaalselt.&lt;br /&gt;
&lt;br /&gt;
== XML Andmefailid ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 3. märts 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
XML andmefail kirjeldab veebiteenuse &amp;quot;[http://garage48.org/blogger/projects-on-garage48-tallinn-2011 Challengo]&amp;quot; andmeid. Andmed asuvad MYSQL andmebaasis, mille struktuur on kirjeldatud ERD mudeliga [[File:Harold_Challengo_MYSQL_ERD.png|200px|thumb|MYSQL ERD mudel]]. XML formaadis andmeid väljastab serveris asuv PHP API. Järgnevalt toodud XML näited ei pruugi projekti esimese osa nõudmiste tõttu olla vastavuses teise osana valmiva veebiteenuse tegeliku väljundiga.&lt;br /&gt;
&lt;br /&gt;
Faile saab vaadata ka võrgust: http://enos.itcollege.ee/~anroots/challengo/xml/. Soovitatav on seda teha just XSLT stiilifaili jaoks (http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml).&lt;br /&gt;
&lt;br /&gt;
=== XML [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml link]]===&lt;br /&gt;
&lt;br /&gt;
Järgnevalt on toodud lõik kasutaja praeguste väljakutsete päringust. Kasutajal on parajasti kaks aktiivset väljakutset, igal väljakutsel on veidi meta-infot, mingi hulk ülesandeid (tasks) ning igal ülesandel on üks või mitu autasu (rewards).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;Response.xsl&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!-- List of user&#039;s current challenges --&amp;gt;&lt;br /&gt;
&amp;lt;challenges&amp;gt;&lt;br /&gt;
  &amp;lt;!-- First challenge, started by the user --&amp;gt;&lt;br /&gt;
  &amp;lt;challenge id=&amp;quot;4&amp;quot; tasks=&amp;quot;6&amp;quot; progress=&amp;quot;17%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;The Improgrupp Jaa!&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Inspired by a true story, the Improgrupp Jaa! contains tasks that challenge ones spontaniety and social courage.&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;duration&amp;gt;1209600&amp;lt;/duration&amp;gt;&lt;br /&gt;
    &amp;lt;points_required&amp;gt;18&amp;lt;/points_required&amp;gt;&lt;br /&gt;
    &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;!-- Each challenge has a number of tasks that have to be completed.--&amp;gt;&lt;br /&gt;
    &amp;lt;!-- No challenge can be completed before earned points from tasks (rewards) exceed the points_required field --&amp;gt;&lt;br /&gt;
    &amp;lt;tasks max_points=&amp;quot;26&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;19&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Make a present to a homeless person&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;If you can read this, you&#039;re probably among the luckier ones. Do something for the ones who can&#039;t.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;!-- Each task yields rewards on completion. Rewards are &amp;quot;power&amp;quot; points of different categories.--&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;20&amp;quot; completed=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment a stranger&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Make a sincere compliment to someone you don&#039;t know. We could do with more praise where it&#039;s due.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;21&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Do volunteer work&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Offer yourself as a volunteer to an event or a cause.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;22&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Perform to a security camera&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Do a little dance to a security camera. It shouldn&#039;t be illegal...probably. Don&#039;t get in trouble!&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;23&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment someone for a job well done&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;When was the last time you thanked the janitor?&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;24&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Take a day off&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;This is mostly for work-a-holics: rest for a while.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
    &amp;lt;/tasks&amp;gt;&lt;br /&gt;
  &amp;lt;/challenge&amp;gt;&lt;br /&gt;
&amp;lt;/challenges&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT (stiilifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsl link]] ===&lt;br /&gt;
&lt;br /&gt;
Toodud stiilifail muudab ülaltoodud XML vastuse inimesele kergemini loetavaks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html class=&amp;quot;no-js&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;Ando Roots&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Challengo Response&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.css&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.responsive.css&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Challengo API response&amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
            The following is a list of challenges reported by the XML API.&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;!-- Go over each challenge --&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;challenges/challenge&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h2&amp;gt;&lt;br /&gt;
              &lt;br /&gt;
              &amp;lt;!-- Challenge badge image and title --&amp;gt;&lt;br /&gt;
              &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;&lt;br /&gt;
                  http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/img&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
              &amp;lt;!-- Challenge progress, if applicable --&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:if test=&amp;quot;@progress&amp;quot;&amp;gt;&lt;br /&gt;
                (&amp;lt;span&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@progress&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/span&amp;gt;)&lt;br /&gt;
              &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
            &amp;lt;/h2&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;p class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- Table for some challenge meta-info --&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered span4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Points required to complete:&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;points_required&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Time left (hours):&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;round(duration div 1800)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;!-- List all challenge tasks --&amp;gt;&lt;br /&gt;
            &amp;lt;h3 style=&amp;quot;margin-top:140px&amp;quot;&amp;gt;Tasks (&amp;lt;xsl:value-of select=&amp;quot;@tasks&amp;quot;/&amp;gt;)&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered table-striped table-condensed&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;thead&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;ID&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Title&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Badge&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Rewards&amp;lt;/th&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/thead&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;tasks/task&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;tr&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Color the row gray if task is completed --&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;@completed&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:attribute name=&amp;quot;class&amp;quot;&amp;gt;&lt;br /&gt;
                        help-block&lt;br /&gt;
                      &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                      &amp;lt;/img&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:for-each select=&amp;quot;rewards/reward&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;li&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=1&amp;quot;&amp;gt;&lt;br /&gt;
                              Compassion&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=2&amp;quot;&amp;gt;&lt;br /&gt;
                              Strength&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=3&amp;quot;&amp;gt;&lt;br /&gt;
                              Intelligence&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;span&amp;gt;&lt;br /&gt;
                              &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                            &amp;lt;/span&amp;gt;&lt;br /&gt;
                          &amp;lt;/li&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;!-- End of challenge task table --&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;!-- End of challenge --&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD (skeemifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsd link]] ===&lt;br /&gt;
&lt;br /&gt;
Skeemifail kirjeldab päringu vastuse XML struktuuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;challenges&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;challenge&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;duration&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;points_required&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;tasks&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;task&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rewards&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;reward&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:extension base=&amp;quot;xs:unsignedByte&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:attribute name=&amp;quot;power_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;completed&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;max_points&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;tasks&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;progress&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Veebiteenus ==&lt;br /&gt;
&#039;&#039;Tähtaeg 30. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:challengo_req2.png|300px|thumb|Näidis HTTP API päringust]]&lt;br /&gt;
&lt;br /&gt;
Veebiteenusena realiseeriti API, mis võimaldab klientide registreerimist, haldamist ning Challengo teenuse põhifunktsionaalsuse pakkumist HTTP päringute kaudu. API loomisel kasutati RESTful arhitektuuri. Täpsem dokumentatsioon asub API lehel: [http://api.sqroot.eu &amp;quot;API dokumentatsioon&amp;quot;] (tegemist on ajutise aadressiga, mis võetakse maha aine lõppemisel).&lt;br /&gt;
&lt;br /&gt;
=== Kriteeriumid ===&lt;br /&gt;
&lt;br /&gt;
Kõik õppejõu poolt esitatud kriteeriumid on täidetud. Erikokkuleppe alusel on projekti keeleks PHP.&lt;br /&gt;
&lt;br /&gt;
Kriteeriumid:&lt;br /&gt;
&lt;br /&gt;
* Teenuse pakkumist - API suudab vastata talle esitatud, valideeruvatele (vt. API dokumentatsiooni) päringutele&lt;br /&gt;
* Teenuse kasutajate tuvastamist ning haldamist - Kasutajatuvastus toimub nime/parooli alusel HTTP Basic Authentication protokollil, ideaalis üle HTTPS-i. Süsteemi sisemiselt on kasutajatel rollid, mida saab kasutada halduseks, näiteks LOGIN rolli eemaldamisel ei saa kasutaja enam sisse logida.&lt;br /&gt;
* Teenuse kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes - Kõik API päringud käivad API tokeni alusel. Tokeni kasutaja päringud logitakse nii logifaili kui andmebaasi, neid on sealt võimalik pärida. Lisaks on igal tokenil päringulimiit (tunnis), selle ületamisel päringuid eiratakse. Tokeneid saab tühistada, mis tähendab, et klientrakenduse päringuid ei töödelda mingil juhul.&lt;br /&gt;
&lt;br /&gt;
=== Testimine ===&lt;br /&gt;
&lt;br /&gt;
Veebiteenusel ei ole eraldi kasutajaliidest. Testimiseks on kaks varianti:&lt;br /&gt;
&lt;br /&gt;
# Luua ise vastav kasutajaliides ehk klientrakendus&lt;br /&gt;
# Kasutada mõnd abitööriista HTTP päringute koostamiseks. Soovitus: [https://chrome.google.com/webstore/detail/aejoelaoggembcahagimdiliamlcdmfm &amp;quot;Chrome plugin&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
Autentimisandmed rakendusele saab luua dokumentatsiooni lehel oleva vormi kaudu (andmed saadetakse e-mailile). Kasutajakonto saab luua juba API päringute abil.&lt;br /&gt;
&lt;br /&gt;
N.B. Juhul, kui uute API tokenite loomine ebaõnnestub (serveri mailiserver on veidi ebastabiilne), võib kasutada ka järgnevaid andmeid:&lt;br /&gt;
&lt;br /&gt;
Secret: fowhosurtothab&lt;br /&gt;
Token: fleraffahskuff&lt;br /&gt;
&lt;br /&gt;
=== Kood ===&lt;br /&gt;
&lt;br /&gt;
Lähtekoodi saab [http://api.sqroot.eu/anroots-challengo-a6da30942c8c.tar.gz siit]. Kohtmasinasse paigaldamiseks tuleb alla laadida [http://kohanaframework.org Kohana] framework ning paigaldada application/bootstrap.php failis märgitud moodulid. Andmebaasi schema on database kaustas. Kood on testitud ainult Linux platvormil LAMP stack-iga.&lt;br /&gt;
&lt;br /&gt;
== Klientrakendus ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 5. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:5554-IceCream 024.png|300px|thumb|Ekraanipilt tulevaste etenduste nimekirjast]]&lt;br /&gt;
[[File:5554-IceCream 025.png|300px|thumb|Ekraanipilt etenduse detailvaatest]]&lt;br /&gt;
&lt;br /&gt;
Klientrakendus on Android rakendus, mis kuvab teater NO99 etendusi ning võimaldab punktide alusel pileteid osta. Tegu on jQuery Mobile pordiga Android platvormile.&lt;br /&gt;
&lt;br /&gt;
Rakendus suhtleb Play! raamistikus kirjutatud API-ga, mis asub kahjuks meeskonna localhostis, sest selle võrku panemiseks oli vaja VPS serverit. Seega ei suuda rakendus Teie arvutites sisselogimist teostada.&lt;br /&gt;
&lt;br /&gt;
Rakendusel on neli peamist vaadet: sisselogimine, etenduste nimekiri, etenduse detailvaade ning konto info. Pileteid saab osta punktide alusel (punktid peavad eelneva mehanismiga juba kontol olema, konto on punkt.no99.ee-ga ühine). Kui pilet on ostetud, märgib rakendus vastava etenduse taustavärviga, teiskordselt piletit osta ei saa, kuid seda pole raske realiseerida.&lt;br /&gt;
&lt;br /&gt;
Peale sisselogimist tõmmatakse serverist alla nimekiri etendustest ning hakatakse siis ükshaaval sellele nimekirjale pisipilte laadima. Allalaaditud pisipildid salvestatakse Android poolt antud vahemälukausta, neid teiskordselt ei laadita.&lt;br /&gt;
&lt;br /&gt;
Kõik suhtlused serveris on asünkroonsed, seda kahel põhjusel: esiteks tapab Android rakenduse ära (ja kasutajal on ebamugav), kui päringu vastust kasutajaliidese &#039;&#039;thread&#039;&#039;-ist oodata. Teiseks saab asünkroonset päringut mugavalt taustalt teha ning kasutaja saab oma asjadega edasi tegeleda.&lt;br /&gt;
&lt;br /&gt;
Rakenduse kood asub [https://bitbucket.org/anroots/punkt99-android BitBucketis].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensendile&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Kuna rakendust iseseisvalt testida ei saa, olen soovi korral valmis seda uuesti oma arvutist demoma.&lt;br /&gt;
&lt;br /&gt;
=== Feature list === &lt;br /&gt;
&lt;br /&gt;
* Autentimine&lt;br /&gt;
* Tulevaste etenduste nimekirja vaatamine&lt;br /&gt;
* Etenduse detailide vaatamine (sh pilt)&lt;br /&gt;
* Allalaaditud piltide &#039;&#039;&#039;cache&#039;&#039;&#039;-mine&lt;br /&gt;
* Pileti ostmine etendusele punktide alusel&lt;br /&gt;
* Konto info vaatamine&lt;br /&gt;
&lt;br /&gt;
= Meeskonna Liikmed =&lt;br /&gt;
&lt;br /&gt;
* Ando Roots &#039;&#039;anroots@itcollege.ee&#039;&#039;&lt;br /&gt;
* Mikk Pärast &#039;&#039;mparast@itcollege.ee&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Liitumine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for t in tudengid:&lt;br /&gt;
  if !t.laisk &amp;amp;&amp;amp; t.oskab_progreda:&lt;br /&gt;
    kutsu_meeskonda(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ mail -s &amp;quot;Harold&amp;quot; anroots@itcollege.ee&amp;lt;/pre&amp;gt;&lt;br /&gt;
Eeldan varasemaid teadmisi ning usaldusväärsust. Soovin, et asi ei lõppeks jälle nii, et projektijuht on kaitsmiseelsel õhtul üleval ja lõpetab üksinda projekti.&lt;br /&gt;
Ole nii kena ja anna huvist märku enne &#039;&#039;&#039;26. veebruari&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Lisad =&lt;br /&gt;
&lt;br /&gt;
[http://jaa.ee Kes on Harold?]&lt;br /&gt;
&lt;br /&gt;
== Challengo ==&lt;br /&gt;
&lt;br /&gt;
Challengo.me on Garage48 Tallinn 2011 raames alustatud veebiteenus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A social network of themed challenges, comes with a Karma profile and level-system.&lt;br /&gt;
Revenues from ads on the mobile version.&lt;br /&gt;
Team members: Ando Roots, Kristo Vaher, Valeria Gasik, Jelena Savinen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube v=&amp;quot;pPfHJD5F7sc&amp;quot; /&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=pPfHJD5F7sc Jelena tutvustab Challengo teenust]&lt;br /&gt;
&lt;br /&gt;
== Punkt99 ==&lt;br /&gt;
&lt;br /&gt;
[http://garage48.org/blogger/projects-launched-at-garage48-tallinn-music-2012 Punkt99] valmis Garage48-l 2012 kevadel paljude hakkajate inimeste koostööl. Tegu on piletimüügirakendusega teater NO99-le.&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=48679</id>
		<title>Meeskond &quot;Harold&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=48679"/>
		<updated>2012-05-24T08:19:53Z</updated>

		<summary type="html">&lt;p&gt;Anroots: /* Klientrakendus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
{| style=&amp;quot;width:100%;height: 40px; background-color:#dff0d8;border: 1px solid ##468847;color:#468847;padding:10px;font-size:16px;font-weight:bold-webkit-border-radius: 8px;-moz-border-radius: 8px;border-radius: 8px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
| Ära kaitsesime.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Tegemist on IT Kolledži aine raames eksamieeldust taotleva projektimeeskonna töö dokumentatsiooniga.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 30em; padding-left: 2em; float: right; font-size: 95%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Meeskond &#039;&#039;&amp;quot;Harold&amp;quot;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Aine:&#039;&#039;&#039;&lt;br /&gt;
| [[:Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhend:&#039;&#039;&#039;&lt;br /&gt;
| [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2012 Juhend]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Tüüp:&#039;&#039;&#039;&lt;br /&gt;
| Projekt&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Anroots]]&amp;lt;br /&amp;gt;[[User:Mparast]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhendajad:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Mposka]]&amp;lt;br /&amp;gt;[[User:Kraspel]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Semester:&#039;&#039;&#039;&lt;br /&gt;
| 2011/2012 kevad&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Lingid&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|API Demo&lt;br /&gt;
|[http://api.sqroot.eu http://api.sqroot.eu]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Projekt =&lt;br /&gt;
&lt;br /&gt;
Projekti esimesed kaks osa keskenduvad veebiteenuse &amp;quot;Challengo&amp;quot; taasloomisele. Projekti esimene osa valmistab ette peamis(t)e päringu(te) XML vastuse struktuuri, projekti teine osa (veebiteenuse loomine) ehitab vastava API.&lt;br /&gt;
&lt;br /&gt;
== Korraldus ==&lt;br /&gt;
&lt;br /&gt;
Projektiga seonduv dokumentatsioon (erandiks on käesolev wiki leht), kasutajale nähtavad tekstid ning lähtekood on kirjutatud inglise keeles. Võimalusel on kood kirjutatud hilisema I18n toe võimaldamiseks.&lt;br /&gt;
&lt;br /&gt;
Koodi haldab GitHub repositoorium, juurdepääsu saamiseks tuleb projektijuhile saata oma GitHub kasutajanimi (või &#039;&#039;pull request&#039;&#039;). Tegemist vajavaid töid näeb GitHub lehel &#039;&#039;Issues&#039;&#039; vahekaardilt ning asjakohane dokumentatsioon (API) on GitHub wiki alamjaotises.&lt;br /&gt;
&lt;br /&gt;
Lähtekood on põhjalikult kommenteeritud, muud, eraldiseisvat dokumentatsiooni koodi kohta on minimaalselt.&lt;br /&gt;
&lt;br /&gt;
== XML Andmefailid ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 3. märts 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
XML andmefail kirjeldab veebiteenuse &amp;quot;[http://garage48.org/blogger/projects-on-garage48-tallinn-2011 Challengo]&amp;quot; andmeid. Andmed asuvad MYSQL andmebaasis, mille struktuur on kirjeldatud ERD mudeliga [[File:Harold_Challengo_MYSQL_ERD.png|200px|thumb|MYSQL ERD mudel]]. XML formaadis andmeid väljastab serveris asuv PHP API. Järgnevalt toodud XML näited ei pruugi projekti esimese osa nõudmiste tõttu olla vastavuses teise osana valmiva veebiteenuse tegeliku väljundiga.&lt;br /&gt;
&lt;br /&gt;
Faile saab vaadata ka võrgust: http://enos.itcollege.ee/~anroots/challengo/xml/. Soovitatav on seda teha just XSLT stiilifaili jaoks (http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml).&lt;br /&gt;
&lt;br /&gt;
=== XML [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml link]]===&lt;br /&gt;
&lt;br /&gt;
Järgnevalt on toodud lõik kasutaja praeguste väljakutsete päringust. Kasutajal on parajasti kaks aktiivset väljakutset, igal väljakutsel on veidi meta-infot, mingi hulk ülesandeid (tasks) ning igal ülesandel on üks või mitu autasu (rewards).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;Response.xsl&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!-- List of user&#039;s current challenges --&amp;gt;&lt;br /&gt;
&amp;lt;challenges&amp;gt;&lt;br /&gt;
  &amp;lt;!-- First challenge, started by the user --&amp;gt;&lt;br /&gt;
  &amp;lt;challenge id=&amp;quot;4&amp;quot; tasks=&amp;quot;6&amp;quot; progress=&amp;quot;17%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;The Improgrupp Jaa!&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Inspired by a true story, the Improgrupp Jaa! contains tasks that challenge ones spontaniety and social courage.&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;duration&amp;gt;1209600&amp;lt;/duration&amp;gt;&lt;br /&gt;
    &amp;lt;points_required&amp;gt;18&amp;lt;/points_required&amp;gt;&lt;br /&gt;
    &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;!-- Each challenge has a number of tasks that have to be completed.--&amp;gt;&lt;br /&gt;
    &amp;lt;!-- No challenge can be completed before earned points from tasks (rewards) exceed the points_required field --&amp;gt;&lt;br /&gt;
    &amp;lt;tasks max_points=&amp;quot;26&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;19&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Make a present to a homeless person&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;If you can read this, you&#039;re probably among the luckier ones. Do something for the ones who can&#039;t.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;!-- Each task yields rewards on completion. Rewards are &amp;quot;power&amp;quot; points of different categories.--&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;20&amp;quot; completed=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment a stranger&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Make a sincere compliment to someone you don&#039;t know. We could do with more praise where it&#039;s due.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;21&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Do volunteer work&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Offer yourself as a volunteer to an event or a cause.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;22&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Perform to a security camera&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Do a little dance to a security camera. It shouldn&#039;t be illegal...probably. Don&#039;t get in trouble!&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;23&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment someone for a job well done&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;When was the last time you thanked the janitor?&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;24&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Take a day off&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;This is mostly for work-a-holics: rest for a while.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
    &amp;lt;/tasks&amp;gt;&lt;br /&gt;
  &amp;lt;/challenge&amp;gt;&lt;br /&gt;
&amp;lt;/challenges&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT (stiilifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsl link]] ===&lt;br /&gt;
&lt;br /&gt;
Toodud stiilifail muudab ülaltoodud XML vastuse inimesele kergemini loetavaks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html class=&amp;quot;no-js&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;Ando Roots&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Challengo Response&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.css&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.responsive.css&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Challengo API response&amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
            The following is a list of challenges reported by the XML API.&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;!-- Go over each challenge --&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;challenges/challenge&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h2&amp;gt;&lt;br /&gt;
              &lt;br /&gt;
              &amp;lt;!-- Challenge badge image and title --&amp;gt;&lt;br /&gt;
              &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;&lt;br /&gt;
                  http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/img&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
              &amp;lt;!-- Challenge progress, if applicable --&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:if test=&amp;quot;@progress&amp;quot;&amp;gt;&lt;br /&gt;
                (&amp;lt;span&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@progress&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/span&amp;gt;)&lt;br /&gt;
              &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
            &amp;lt;/h2&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;p class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- Table for some challenge meta-info --&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered span4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Points required to complete:&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;points_required&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Time left (hours):&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;round(duration div 1800)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;!-- List all challenge tasks --&amp;gt;&lt;br /&gt;
            &amp;lt;h3 style=&amp;quot;margin-top:140px&amp;quot;&amp;gt;Tasks (&amp;lt;xsl:value-of select=&amp;quot;@tasks&amp;quot;/&amp;gt;)&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered table-striped table-condensed&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;thead&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;ID&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Title&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Badge&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Rewards&amp;lt;/th&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/thead&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;tasks/task&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;tr&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Color the row gray if task is completed --&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;@completed&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:attribute name=&amp;quot;class&amp;quot;&amp;gt;&lt;br /&gt;
                        help-block&lt;br /&gt;
                      &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                      &amp;lt;/img&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:for-each select=&amp;quot;rewards/reward&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;li&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=1&amp;quot;&amp;gt;&lt;br /&gt;
                              Compassion&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=2&amp;quot;&amp;gt;&lt;br /&gt;
                              Strength&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=3&amp;quot;&amp;gt;&lt;br /&gt;
                              Intelligence&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;span&amp;gt;&lt;br /&gt;
                              &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                            &amp;lt;/span&amp;gt;&lt;br /&gt;
                          &amp;lt;/li&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;!-- End of challenge task table --&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;!-- End of challenge --&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD (skeemifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsd link]] ===&lt;br /&gt;
&lt;br /&gt;
Skeemifail kirjeldab päringu vastuse XML struktuuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;challenges&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;challenge&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;duration&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;points_required&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;tasks&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;task&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rewards&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;reward&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:extension base=&amp;quot;xs:unsignedByte&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:attribute name=&amp;quot;power_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;completed&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;max_points&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;tasks&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;progress&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Veebiteenus ==&lt;br /&gt;
&#039;&#039;Tähtaeg 30. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:challengo_req2.png|300px|thumb|Näidis HTTP API päringust]]&lt;br /&gt;
&lt;br /&gt;
Veebiteenusena realiseeriti API, mis võimaldab klientide registreerimist, haldamist ning Challengo teenuse põhifunktsionaalsuse pakkumist HTTP päringute kaudu. API loomisel kasutati RESTful arhitektuuri. Täpsem dokumentatsioon asub API lehel: [http://api.sqroot.eu &amp;quot;API dokumentatsioon&amp;quot;] (tegemist on ajutise aadressiga, mis võetakse maha aine lõppemisel).&lt;br /&gt;
&lt;br /&gt;
=== Kriteeriumid ===&lt;br /&gt;
&lt;br /&gt;
Kõik õppejõu poolt esitatud kriteeriumid on täidetud. Erikokkuleppe alusel on projekti keeleks PHP.&lt;br /&gt;
&lt;br /&gt;
Kriteeriumid:&lt;br /&gt;
&lt;br /&gt;
* Teenuse pakkumist - API suudab vastata talle esitatud, valideeruvatele (vt. API dokumentatsiooni) päringutele&lt;br /&gt;
* Teenuse kasutajate tuvastamist ning haldamist - Kasutajatuvastus toimub nime/parooli alusel HTTP Basic Authentication protokollil, ideaalis üle HTTPS-i. Süsteemi sisemiselt on kasutajatel rollid, mida saab kasutada halduseks, näiteks LOGIN rolli eemaldamisel ei saa kasutaja enam sisse logida.&lt;br /&gt;
* Teenuse kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes - Kõik API päringud käivad API tokeni alusel. Tokeni kasutaja päringud logitakse nii logifaili kui andmebaasi, neid on sealt võimalik pärida. Lisaks on igal tokenil päringulimiit (tunnis), selle ületamisel päringuid eiratakse. Tokeneid saab tühistada, mis tähendab, et klientrakenduse päringuid ei töödelda mingil juhul.&lt;br /&gt;
&lt;br /&gt;
=== Testimine ===&lt;br /&gt;
&lt;br /&gt;
Veebiteenusel ei ole eraldi kasutajaliidest. Testimiseks on kaks varianti:&lt;br /&gt;
&lt;br /&gt;
# Luua ise vastav kasutajaliides ehk klientrakendus&lt;br /&gt;
# Kasutada mõnd abitööriista HTTP päringute koostamiseks. Soovitus: [https://chrome.google.com/webstore/detail/aejoelaoggembcahagimdiliamlcdmfm &amp;quot;Chrome plugin&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
Autentimisandmed rakendusele saab luua dokumentatsiooni lehel oleva vormi kaudu (andmed saadetakse e-mailile). Kasutajakonto saab luua juba API päringute abil.&lt;br /&gt;
&lt;br /&gt;
N.B. Juhul, kui uute API tokenite loomine ebaõnnestub (serveri mailiserver on veidi ebastabiilne), võib kasutada ka järgnevaid andmeid:&lt;br /&gt;
&lt;br /&gt;
Secret: fowhosurtothab&lt;br /&gt;
Token: fleraffahskuff&lt;br /&gt;
&lt;br /&gt;
=== Kood ===&lt;br /&gt;
&lt;br /&gt;
Lähtekoodi saab [http://api.sqroot.eu/anroots-challengo-a6da30942c8c.tar.gz siit]. Kohtmasinasse paigaldamiseks tuleb alla laadida [http://kohanaframework.org Kohana] framework ning paigaldada application/bootstrap.php failis märgitud moodulid. Andmebaasi schema on database kaustas. Kood on testitud ainult Linux platvormil LAMP stack-iga.&lt;br /&gt;
&lt;br /&gt;
== Klientrakendus ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 5. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:5554-IceCream 024.png|300px|thumb|Ekraanipilt tulevaste etenduste nimekirjast]]&lt;br /&gt;
[[File:5554-IceCream 025.png|300px|thumb|Ekraanipilt etenduse detailvaatest]]&lt;br /&gt;
&lt;br /&gt;
Klientrakendus on Android rakendus, mis kuvab teater NO99 etendusi ning võimaldab punktide alusel pileteid osta. Tegu on jQuery Mobile pordiga Android platvormile.&lt;br /&gt;
&lt;br /&gt;
Rakendus suhtleb Play! raamistikus kirjutatud API-ga, mis asub kahjuks meeskonna localhostis, sest selle võrku panemiseks oli vaja VPS serverit. Seega ei suuda rakendus Teie arvutites sisselogimist teostada.&lt;br /&gt;
&lt;br /&gt;
Rakendusel on neli peamist vaadet: sisselogimine, etenduste nimekiri, etenduse detailvaade ning konto info. Pileteid saab osta punktide alusel (punktid peavad eelneva mehanismiga juba kontol olema, konto on punkt.no99.ee-ga ühine). Kui pilet on ostetud, märgib rakendus vastava etenduse taustavärviga, teiskordselt piletit osta ei saa, kuid seda pole raske realiseerida.&lt;br /&gt;
&lt;br /&gt;
Peale sisselogimist tõmmatakse serverist alla nimekiri etendustest ning hakatakse siis ükshaaval sellele nimekirjale pisipilte laadima. Allalaaditud pisipildid salvestatakse Android poolt antud vahemälukausta, neid teiskordselt ei laadita.&lt;br /&gt;
&lt;br /&gt;
Kõik suhtlused serveris on asünkroonsed, seda kahel põhjusel: esiteks tapab Android rakenduse ära (ja kasutajal on ebamugav), kui päringu vastust kasutajaliidese &#039;&#039;thread&#039;&#039;-ist oodata. Teiseks saab asünkroonset päringut mugavalt taustalt teha ning kasutaja saab oma asjadega edasi tegeleda.&lt;br /&gt;
&lt;br /&gt;
Rakenduse kood asub [https://bitbucket.org/anroots/punkt99-android BitBucketis].&lt;br /&gt;
&lt;br /&gt;
=== Feature list === &lt;br /&gt;
&lt;br /&gt;
* Autentimine&lt;br /&gt;
* Tulevaste etenduste nimekirja vaatamine&lt;br /&gt;
* Etenduse detailide vaatamine (sh pilt)&lt;br /&gt;
* Allalaaditud piltide &#039;&#039;&#039;cache&#039;&#039;&#039;-mine&lt;br /&gt;
* Pileti ostmine etendusele punktide alusel&lt;br /&gt;
* Konto info vaatamine&lt;br /&gt;
&lt;br /&gt;
= Meeskonna Liikmed =&lt;br /&gt;
&lt;br /&gt;
* Ando Roots &#039;&#039;anroots@itcollege.ee&#039;&#039;&lt;br /&gt;
* Mikk Pärast &#039;&#039;mparast@itcollege.ee&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Liitumine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for t in tudengid:&lt;br /&gt;
  if !t.laisk &amp;amp;&amp;amp; t.oskab_progreda:&lt;br /&gt;
    kutsu_meeskonda(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ mail -s &amp;quot;Harold&amp;quot; anroots@itcollege.ee&amp;lt;/pre&amp;gt;&lt;br /&gt;
Eeldan varasemaid teadmisi ning usaldusväärsust. Soovin, et asi ei lõppeks jälle nii, et projektijuht on kaitsmiseelsel õhtul üleval ja lõpetab üksinda projekti.&lt;br /&gt;
Ole nii kena ja anna huvist märku enne &#039;&#039;&#039;26. veebruari&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Lisad =&lt;br /&gt;
&lt;br /&gt;
[http://jaa.ee Kes on Harold?]&lt;br /&gt;
&lt;br /&gt;
== Challengo ==&lt;br /&gt;
&lt;br /&gt;
Challengo.me on Garage48 Tallinn 2011 raames alustatud veebiteenus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A social network of themed challenges, comes with a Karma profile and level-system.&lt;br /&gt;
Revenues from ads on the mobile version.&lt;br /&gt;
Team members: Ando Roots, Kristo Vaher, Valeria Gasik, Jelena Savinen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube v=&amp;quot;pPfHJD5F7sc&amp;quot; /&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=pPfHJD5F7sc Jelena tutvustab Challengo teenust]&lt;br /&gt;
&lt;br /&gt;
== Punkt99 ==&lt;br /&gt;
&lt;br /&gt;
[http://garage48.org/blogger/projects-launched-at-garage48-tallinn-music-2012 Punkt99] valmis Garage48-l 2012 kevadel paljude hakkajate inimeste koostööl. Tegu on piletimüügirakendusega teater NO99-le.&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=48678</id>
		<title>Meeskond &quot;Harold&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=48678"/>
		<updated>2012-05-24T08:13:31Z</updated>

		<summary type="html">&lt;p&gt;Anroots: /* Klientrakendus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
{| style=&amp;quot;width:100%;height: 40px; background-color:#dff0d8;border: 1px solid ##468847;color:#468847;padding:10px;font-size:16px;font-weight:bold-webkit-border-radius: 8px;-moz-border-radius: 8px;border-radius: 8px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
| Ära kaitsesime.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Tegemist on IT Kolledži aine raames eksamieeldust taotleva projektimeeskonna töö dokumentatsiooniga.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 30em; padding-left: 2em; float: right; font-size: 95%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Meeskond &#039;&#039;&amp;quot;Harold&amp;quot;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Aine:&#039;&#039;&#039;&lt;br /&gt;
| [[:Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhend:&#039;&#039;&#039;&lt;br /&gt;
| [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2012 Juhend]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Tüüp:&#039;&#039;&#039;&lt;br /&gt;
| Projekt&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Anroots]]&amp;lt;br /&amp;gt;[[User:Mparast]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhendajad:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Mposka]]&amp;lt;br /&amp;gt;[[User:Kraspel]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Semester:&#039;&#039;&#039;&lt;br /&gt;
| 2011/2012 kevad&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Lingid&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|API Demo&lt;br /&gt;
|[http://api.sqroot.eu http://api.sqroot.eu]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Projekt =&lt;br /&gt;
&lt;br /&gt;
Projekti esimesed kaks osa keskenduvad veebiteenuse &amp;quot;Challengo&amp;quot; taasloomisele. Projekti esimene osa valmistab ette peamis(t)e päringu(te) XML vastuse struktuuri, projekti teine osa (veebiteenuse loomine) ehitab vastava API.&lt;br /&gt;
&lt;br /&gt;
== Korraldus ==&lt;br /&gt;
&lt;br /&gt;
Projektiga seonduv dokumentatsioon (erandiks on käesolev wiki leht), kasutajale nähtavad tekstid ning lähtekood on kirjutatud inglise keeles. Võimalusel on kood kirjutatud hilisema I18n toe võimaldamiseks.&lt;br /&gt;
&lt;br /&gt;
Koodi haldab GitHub repositoorium, juurdepääsu saamiseks tuleb projektijuhile saata oma GitHub kasutajanimi (või &#039;&#039;pull request&#039;&#039;). Tegemist vajavaid töid näeb GitHub lehel &#039;&#039;Issues&#039;&#039; vahekaardilt ning asjakohane dokumentatsioon (API) on GitHub wiki alamjaotises.&lt;br /&gt;
&lt;br /&gt;
Lähtekood on põhjalikult kommenteeritud, muud, eraldiseisvat dokumentatsiooni koodi kohta on minimaalselt.&lt;br /&gt;
&lt;br /&gt;
== XML Andmefailid ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 3. märts 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
XML andmefail kirjeldab veebiteenuse &amp;quot;[http://garage48.org/blogger/projects-on-garage48-tallinn-2011 Challengo]&amp;quot; andmeid. Andmed asuvad MYSQL andmebaasis, mille struktuur on kirjeldatud ERD mudeliga [[File:Harold_Challengo_MYSQL_ERD.png|200px|thumb|MYSQL ERD mudel]]. XML formaadis andmeid väljastab serveris asuv PHP API. Järgnevalt toodud XML näited ei pruugi projekti esimese osa nõudmiste tõttu olla vastavuses teise osana valmiva veebiteenuse tegeliku väljundiga.&lt;br /&gt;
&lt;br /&gt;
Faile saab vaadata ka võrgust: http://enos.itcollege.ee/~anroots/challengo/xml/. Soovitatav on seda teha just XSLT stiilifaili jaoks (http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml).&lt;br /&gt;
&lt;br /&gt;
=== XML [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml link]]===&lt;br /&gt;
&lt;br /&gt;
Järgnevalt on toodud lõik kasutaja praeguste väljakutsete päringust. Kasutajal on parajasti kaks aktiivset väljakutset, igal väljakutsel on veidi meta-infot, mingi hulk ülesandeid (tasks) ning igal ülesandel on üks või mitu autasu (rewards).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;Response.xsl&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!-- List of user&#039;s current challenges --&amp;gt;&lt;br /&gt;
&amp;lt;challenges&amp;gt;&lt;br /&gt;
  &amp;lt;!-- First challenge, started by the user --&amp;gt;&lt;br /&gt;
  &amp;lt;challenge id=&amp;quot;4&amp;quot; tasks=&amp;quot;6&amp;quot; progress=&amp;quot;17%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;The Improgrupp Jaa!&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Inspired by a true story, the Improgrupp Jaa! contains tasks that challenge ones spontaniety and social courage.&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;duration&amp;gt;1209600&amp;lt;/duration&amp;gt;&lt;br /&gt;
    &amp;lt;points_required&amp;gt;18&amp;lt;/points_required&amp;gt;&lt;br /&gt;
    &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;!-- Each challenge has a number of tasks that have to be completed.--&amp;gt;&lt;br /&gt;
    &amp;lt;!-- No challenge can be completed before earned points from tasks (rewards) exceed the points_required field --&amp;gt;&lt;br /&gt;
    &amp;lt;tasks max_points=&amp;quot;26&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;19&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Make a present to a homeless person&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;If you can read this, you&#039;re probably among the luckier ones. Do something for the ones who can&#039;t.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;!-- Each task yields rewards on completion. Rewards are &amp;quot;power&amp;quot; points of different categories.--&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;20&amp;quot; completed=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment a stranger&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Make a sincere compliment to someone you don&#039;t know. We could do with more praise where it&#039;s due.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;21&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Do volunteer work&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Offer yourself as a volunteer to an event or a cause.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;22&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Perform to a security camera&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Do a little dance to a security camera. It shouldn&#039;t be illegal...probably. Don&#039;t get in trouble!&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;23&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment someone for a job well done&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;When was the last time you thanked the janitor?&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;24&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Take a day off&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;This is mostly for work-a-holics: rest for a while.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
    &amp;lt;/tasks&amp;gt;&lt;br /&gt;
  &amp;lt;/challenge&amp;gt;&lt;br /&gt;
&amp;lt;/challenges&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT (stiilifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsl link]] ===&lt;br /&gt;
&lt;br /&gt;
Toodud stiilifail muudab ülaltoodud XML vastuse inimesele kergemini loetavaks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html class=&amp;quot;no-js&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;Ando Roots&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Challengo Response&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.css&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.responsive.css&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Challengo API response&amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
            The following is a list of challenges reported by the XML API.&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;!-- Go over each challenge --&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;challenges/challenge&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h2&amp;gt;&lt;br /&gt;
              &lt;br /&gt;
              &amp;lt;!-- Challenge badge image and title --&amp;gt;&lt;br /&gt;
              &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;&lt;br /&gt;
                  http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/img&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
              &amp;lt;!-- Challenge progress, if applicable --&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:if test=&amp;quot;@progress&amp;quot;&amp;gt;&lt;br /&gt;
                (&amp;lt;span&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@progress&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/span&amp;gt;)&lt;br /&gt;
              &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
            &amp;lt;/h2&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;p class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- Table for some challenge meta-info --&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered span4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Points required to complete:&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;points_required&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Time left (hours):&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;round(duration div 1800)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;!-- List all challenge tasks --&amp;gt;&lt;br /&gt;
            &amp;lt;h3 style=&amp;quot;margin-top:140px&amp;quot;&amp;gt;Tasks (&amp;lt;xsl:value-of select=&amp;quot;@tasks&amp;quot;/&amp;gt;)&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered table-striped table-condensed&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;thead&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;ID&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Title&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Badge&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Rewards&amp;lt;/th&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/thead&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;tasks/task&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;tr&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Color the row gray if task is completed --&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;@completed&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:attribute name=&amp;quot;class&amp;quot;&amp;gt;&lt;br /&gt;
                        help-block&lt;br /&gt;
                      &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                      &amp;lt;/img&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:for-each select=&amp;quot;rewards/reward&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;li&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=1&amp;quot;&amp;gt;&lt;br /&gt;
                              Compassion&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=2&amp;quot;&amp;gt;&lt;br /&gt;
                              Strength&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=3&amp;quot;&amp;gt;&lt;br /&gt;
                              Intelligence&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;span&amp;gt;&lt;br /&gt;
                              &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                            &amp;lt;/span&amp;gt;&lt;br /&gt;
                          &amp;lt;/li&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;!-- End of challenge task table --&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;!-- End of challenge --&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD (skeemifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsd link]] ===&lt;br /&gt;
&lt;br /&gt;
Skeemifail kirjeldab päringu vastuse XML struktuuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;challenges&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;challenge&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;duration&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;points_required&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;tasks&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;task&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rewards&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;reward&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:extension base=&amp;quot;xs:unsignedByte&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:attribute name=&amp;quot;power_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;completed&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;max_points&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;tasks&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;progress&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Veebiteenus ==&lt;br /&gt;
&#039;&#039;Tähtaeg 30. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:challengo_req2.png|300px|thumb|Näidis HTTP API päringust]]&lt;br /&gt;
&lt;br /&gt;
Veebiteenusena realiseeriti API, mis võimaldab klientide registreerimist, haldamist ning Challengo teenuse põhifunktsionaalsuse pakkumist HTTP päringute kaudu. API loomisel kasutati RESTful arhitektuuri. Täpsem dokumentatsioon asub API lehel: [http://api.sqroot.eu &amp;quot;API dokumentatsioon&amp;quot;] (tegemist on ajutise aadressiga, mis võetakse maha aine lõppemisel).&lt;br /&gt;
&lt;br /&gt;
=== Kriteeriumid ===&lt;br /&gt;
&lt;br /&gt;
Kõik õppejõu poolt esitatud kriteeriumid on täidetud. Erikokkuleppe alusel on projekti keeleks PHP.&lt;br /&gt;
&lt;br /&gt;
Kriteeriumid:&lt;br /&gt;
&lt;br /&gt;
* Teenuse pakkumist - API suudab vastata talle esitatud, valideeruvatele (vt. API dokumentatsiooni) päringutele&lt;br /&gt;
* Teenuse kasutajate tuvastamist ning haldamist - Kasutajatuvastus toimub nime/parooli alusel HTTP Basic Authentication protokollil, ideaalis üle HTTPS-i. Süsteemi sisemiselt on kasutajatel rollid, mida saab kasutada halduseks, näiteks LOGIN rolli eemaldamisel ei saa kasutaja enam sisse logida.&lt;br /&gt;
* Teenuse kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes - Kõik API päringud käivad API tokeni alusel. Tokeni kasutaja päringud logitakse nii logifaili kui andmebaasi, neid on sealt võimalik pärida. Lisaks on igal tokenil päringulimiit (tunnis), selle ületamisel päringuid eiratakse. Tokeneid saab tühistada, mis tähendab, et klientrakenduse päringuid ei töödelda mingil juhul.&lt;br /&gt;
&lt;br /&gt;
=== Testimine ===&lt;br /&gt;
&lt;br /&gt;
Veebiteenusel ei ole eraldi kasutajaliidest. Testimiseks on kaks varianti:&lt;br /&gt;
&lt;br /&gt;
# Luua ise vastav kasutajaliides ehk klientrakendus&lt;br /&gt;
# Kasutada mõnd abitööriista HTTP päringute koostamiseks. Soovitus: [https://chrome.google.com/webstore/detail/aejoelaoggembcahagimdiliamlcdmfm &amp;quot;Chrome plugin&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
Autentimisandmed rakendusele saab luua dokumentatsiooni lehel oleva vormi kaudu (andmed saadetakse e-mailile). Kasutajakonto saab luua juba API päringute abil.&lt;br /&gt;
&lt;br /&gt;
N.B. Juhul, kui uute API tokenite loomine ebaõnnestub (serveri mailiserver on veidi ebastabiilne), võib kasutada ka järgnevaid andmeid:&lt;br /&gt;
&lt;br /&gt;
Secret: fowhosurtothab&lt;br /&gt;
Token: fleraffahskuff&lt;br /&gt;
&lt;br /&gt;
=== Kood ===&lt;br /&gt;
&lt;br /&gt;
Lähtekoodi saab [http://api.sqroot.eu/anroots-challengo-a6da30942c8c.tar.gz siit]. Kohtmasinasse paigaldamiseks tuleb alla laadida [http://kohanaframework.org Kohana] framework ning paigaldada application/bootstrap.php failis märgitud moodulid. Andmebaasi schema on database kaustas. Kood on testitud ainult Linux platvormil LAMP stack-iga.&lt;br /&gt;
&lt;br /&gt;
== Klientrakendus ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 5. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:5554-IceCream 024.png|300px|thumb|Ekraanipilt tulevaste etenduste nimekirjast]]&lt;br /&gt;
[[File:5554-IceCream 025.png|300px|thumb|Ekraanipilt etenduse detailvaatest]]&lt;br /&gt;
&lt;br /&gt;
Klientrakendus on Android rakendus, mis kuvab teater NO99 etendusi ning võimaldab punktide alusel pileteid osta. Tegu on jQuery Mobile pordiga Android platvormile.&lt;br /&gt;
&lt;br /&gt;
Rakendus suhtleb Play! raamistikus kirjutatud API-ga, mis asub kahjuks meeskonna localhostis, sest selle võrku panemiseks oli vaja VPS serverit. Seega ei suuda rakendus Teie arvutites sisselogimist teostada.&lt;br /&gt;
&lt;br /&gt;
Rakenduse kood asub [https://bitbucket.org/anroots/punkt99-android BitBucketis].&lt;br /&gt;
&lt;br /&gt;
=== Feature list === &lt;br /&gt;
&lt;br /&gt;
* Autentimine&lt;br /&gt;
* Tulevaste etenduste nimekirja vaatamine&lt;br /&gt;
* Etenduse detailide vaatamine (sh pilt)&lt;br /&gt;
* Allalaaditud piltide &#039;&#039;&#039;cache&#039;&#039;&#039;-mine&lt;br /&gt;
* Pileti ostmine etendusele punktide alusel&lt;br /&gt;
* Konto info vaatamine&lt;br /&gt;
&lt;br /&gt;
= Meeskonna Liikmed =&lt;br /&gt;
&lt;br /&gt;
* Ando Roots &#039;&#039;anroots@itcollege.ee&#039;&#039;&lt;br /&gt;
* Mikk Pärast &#039;&#039;mparast@itcollege.ee&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Liitumine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for t in tudengid:&lt;br /&gt;
  if !t.laisk &amp;amp;&amp;amp; t.oskab_progreda:&lt;br /&gt;
    kutsu_meeskonda(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ mail -s &amp;quot;Harold&amp;quot; anroots@itcollege.ee&amp;lt;/pre&amp;gt;&lt;br /&gt;
Eeldan varasemaid teadmisi ning usaldusväärsust. Soovin, et asi ei lõppeks jälle nii, et projektijuht on kaitsmiseelsel õhtul üleval ja lõpetab üksinda projekti.&lt;br /&gt;
Ole nii kena ja anna huvist märku enne &#039;&#039;&#039;26. veebruari&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Lisad =&lt;br /&gt;
&lt;br /&gt;
[http://jaa.ee Kes on Harold?]&lt;br /&gt;
&lt;br /&gt;
== Challengo ==&lt;br /&gt;
&lt;br /&gt;
Challengo.me on Garage48 Tallinn 2011 raames alustatud veebiteenus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A social network of themed challenges, comes with a Karma profile and level-system.&lt;br /&gt;
Revenues from ads on the mobile version.&lt;br /&gt;
Team members: Ando Roots, Kristo Vaher, Valeria Gasik, Jelena Savinen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube v=&amp;quot;pPfHJD5F7sc&amp;quot; /&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=pPfHJD5F7sc Jelena tutvustab Challengo teenust]&lt;br /&gt;
&lt;br /&gt;
== Punkt99 ==&lt;br /&gt;
&lt;br /&gt;
[http://garage48.org/blogger/projects-launched-at-garage48-tallinn-music-2012 Punkt99] valmis Garage48-l 2012 kevadel paljude hakkajate inimeste koostööl. Tegu on piletimüügirakendusega teater NO99-le.&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=File:5554-IceCream_025.png&amp;diff=48677</id>
		<title>File:5554-IceCream 025.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=File:5554-IceCream_025.png&amp;diff=48677"/>
		<updated>2012-05-24T08:08:10Z</updated>

		<summary type="html">&lt;p&gt;Anroots: Meeskond &amp;quot;Harold&amp;quot; Android klientrakendus, etenduse detailvaade&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Meeskond &amp;quot;Harold&amp;quot;]] Android klientrakendus, etenduse detailvaade&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=48676</id>
		<title>Meeskond &quot;Harold&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=48676"/>
		<updated>2012-05-24T08:03:28Z</updated>

		<summary type="html">&lt;p&gt;Anroots: /* Klientrakendus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
{| style=&amp;quot;width:100%;height: 40px; background-color:#dff0d8;border: 1px solid ##468847;color:#468847;padding:10px;font-size:16px;font-weight:bold-webkit-border-radius: 8px;-moz-border-radius: 8px;border-radius: 8px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
| Ära kaitsesime.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Tegemist on IT Kolledži aine raames eksamieeldust taotleva projektimeeskonna töö dokumentatsiooniga.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 30em; padding-left: 2em; float: right; font-size: 95%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Meeskond &#039;&#039;&amp;quot;Harold&amp;quot;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Aine:&#039;&#039;&#039;&lt;br /&gt;
| [[:Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhend:&#039;&#039;&#039;&lt;br /&gt;
| [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2012 Juhend]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Tüüp:&#039;&#039;&#039;&lt;br /&gt;
| Projekt&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Anroots]]&amp;lt;br /&amp;gt;[[User:Mparast]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhendajad:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Mposka]]&amp;lt;br /&amp;gt;[[User:Kraspel]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Semester:&#039;&#039;&#039;&lt;br /&gt;
| 2011/2012 kevad&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Lingid&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|API Demo&lt;br /&gt;
|[http://api.sqroot.eu http://api.sqroot.eu]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Projekt =&lt;br /&gt;
&lt;br /&gt;
Projekti esimesed kaks osa keskenduvad veebiteenuse &amp;quot;Challengo&amp;quot; taasloomisele. Projekti esimene osa valmistab ette peamis(t)e päringu(te) XML vastuse struktuuri, projekti teine osa (veebiteenuse loomine) ehitab vastava API.&lt;br /&gt;
&lt;br /&gt;
== Korraldus ==&lt;br /&gt;
&lt;br /&gt;
Projektiga seonduv dokumentatsioon (erandiks on käesolev wiki leht), kasutajale nähtavad tekstid ning lähtekood on kirjutatud inglise keeles. Võimalusel on kood kirjutatud hilisema I18n toe võimaldamiseks.&lt;br /&gt;
&lt;br /&gt;
Koodi haldab GitHub repositoorium, juurdepääsu saamiseks tuleb projektijuhile saata oma GitHub kasutajanimi (või &#039;&#039;pull request&#039;&#039;). Tegemist vajavaid töid näeb GitHub lehel &#039;&#039;Issues&#039;&#039; vahekaardilt ning asjakohane dokumentatsioon (API) on GitHub wiki alamjaotises.&lt;br /&gt;
&lt;br /&gt;
Lähtekood on põhjalikult kommenteeritud, muud, eraldiseisvat dokumentatsiooni koodi kohta on minimaalselt.&lt;br /&gt;
&lt;br /&gt;
== XML Andmefailid ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 3. märts 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
XML andmefail kirjeldab veebiteenuse &amp;quot;[http://garage48.org/blogger/projects-on-garage48-tallinn-2011 Challengo]&amp;quot; andmeid. Andmed asuvad MYSQL andmebaasis, mille struktuur on kirjeldatud ERD mudeliga [[File:Harold_Challengo_MYSQL_ERD.png|200px|thumb|MYSQL ERD mudel]]. XML formaadis andmeid väljastab serveris asuv PHP API. Järgnevalt toodud XML näited ei pruugi projekti esimese osa nõudmiste tõttu olla vastavuses teise osana valmiva veebiteenuse tegeliku väljundiga.&lt;br /&gt;
&lt;br /&gt;
Faile saab vaadata ka võrgust: http://enos.itcollege.ee/~anroots/challengo/xml/. Soovitatav on seda teha just XSLT stiilifaili jaoks (http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml).&lt;br /&gt;
&lt;br /&gt;
=== XML [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml link]]===&lt;br /&gt;
&lt;br /&gt;
Järgnevalt on toodud lõik kasutaja praeguste väljakutsete päringust. Kasutajal on parajasti kaks aktiivset väljakutset, igal väljakutsel on veidi meta-infot, mingi hulk ülesandeid (tasks) ning igal ülesandel on üks või mitu autasu (rewards).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;Response.xsl&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!-- List of user&#039;s current challenges --&amp;gt;&lt;br /&gt;
&amp;lt;challenges&amp;gt;&lt;br /&gt;
  &amp;lt;!-- First challenge, started by the user --&amp;gt;&lt;br /&gt;
  &amp;lt;challenge id=&amp;quot;4&amp;quot; tasks=&amp;quot;6&amp;quot; progress=&amp;quot;17%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;The Improgrupp Jaa!&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Inspired by a true story, the Improgrupp Jaa! contains tasks that challenge ones spontaniety and social courage.&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;duration&amp;gt;1209600&amp;lt;/duration&amp;gt;&lt;br /&gt;
    &amp;lt;points_required&amp;gt;18&amp;lt;/points_required&amp;gt;&lt;br /&gt;
    &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;!-- Each challenge has a number of tasks that have to be completed.--&amp;gt;&lt;br /&gt;
    &amp;lt;!-- No challenge can be completed before earned points from tasks (rewards) exceed the points_required field --&amp;gt;&lt;br /&gt;
    &amp;lt;tasks max_points=&amp;quot;26&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;19&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Make a present to a homeless person&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;If you can read this, you&#039;re probably among the luckier ones. Do something for the ones who can&#039;t.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;!-- Each task yields rewards on completion. Rewards are &amp;quot;power&amp;quot; points of different categories.--&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;20&amp;quot; completed=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment a stranger&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Make a sincere compliment to someone you don&#039;t know. We could do with more praise where it&#039;s due.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;21&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Do volunteer work&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Offer yourself as a volunteer to an event or a cause.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;22&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Perform to a security camera&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Do a little dance to a security camera. It shouldn&#039;t be illegal...probably. Don&#039;t get in trouble!&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;23&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment someone for a job well done&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;When was the last time you thanked the janitor?&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;24&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Take a day off&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;This is mostly for work-a-holics: rest for a while.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
    &amp;lt;/tasks&amp;gt;&lt;br /&gt;
  &amp;lt;/challenge&amp;gt;&lt;br /&gt;
&amp;lt;/challenges&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT (stiilifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsl link]] ===&lt;br /&gt;
&lt;br /&gt;
Toodud stiilifail muudab ülaltoodud XML vastuse inimesele kergemini loetavaks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html class=&amp;quot;no-js&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;Ando Roots&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Challengo Response&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.css&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.responsive.css&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Challengo API response&amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
            The following is a list of challenges reported by the XML API.&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;!-- Go over each challenge --&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;challenges/challenge&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h2&amp;gt;&lt;br /&gt;
              &lt;br /&gt;
              &amp;lt;!-- Challenge badge image and title --&amp;gt;&lt;br /&gt;
              &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;&lt;br /&gt;
                  http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/img&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
              &amp;lt;!-- Challenge progress, if applicable --&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:if test=&amp;quot;@progress&amp;quot;&amp;gt;&lt;br /&gt;
                (&amp;lt;span&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@progress&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/span&amp;gt;)&lt;br /&gt;
              &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
            &amp;lt;/h2&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;p class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- Table for some challenge meta-info --&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered span4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Points required to complete:&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;points_required&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Time left (hours):&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;round(duration div 1800)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;!-- List all challenge tasks --&amp;gt;&lt;br /&gt;
            &amp;lt;h3 style=&amp;quot;margin-top:140px&amp;quot;&amp;gt;Tasks (&amp;lt;xsl:value-of select=&amp;quot;@tasks&amp;quot;/&amp;gt;)&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered table-striped table-condensed&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;thead&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;ID&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Title&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Badge&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Rewards&amp;lt;/th&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/thead&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;tasks/task&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;tr&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Color the row gray if task is completed --&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;@completed&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:attribute name=&amp;quot;class&amp;quot;&amp;gt;&lt;br /&gt;
                        help-block&lt;br /&gt;
                      &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                      &amp;lt;/img&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:for-each select=&amp;quot;rewards/reward&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;li&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=1&amp;quot;&amp;gt;&lt;br /&gt;
                              Compassion&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=2&amp;quot;&amp;gt;&lt;br /&gt;
                              Strength&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=3&amp;quot;&amp;gt;&lt;br /&gt;
                              Intelligence&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;span&amp;gt;&lt;br /&gt;
                              &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                            &amp;lt;/span&amp;gt;&lt;br /&gt;
                          &amp;lt;/li&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;!-- End of challenge task table --&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;!-- End of challenge --&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD (skeemifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsd link]] ===&lt;br /&gt;
&lt;br /&gt;
Skeemifail kirjeldab päringu vastuse XML struktuuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;challenges&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;challenge&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;duration&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;points_required&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;tasks&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;task&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rewards&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;reward&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:extension base=&amp;quot;xs:unsignedByte&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:attribute name=&amp;quot;power_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;completed&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;max_points&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;tasks&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;progress&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Veebiteenus ==&lt;br /&gt;
&#039;&#039;Tähtaeg 30. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:challengo_req2.png|300px|thumb|Näidis HTTP API päringust]]&lt;br /&gt;
&lt;br /&gt;
Veebiteenusena realiseeriti API, mis võimaldab klientide registreerimist, haldamist ning Challengo teenuse põhifunktsionaalsuse pakkumist HTTP päringute kaudu. API loomisel kasutati RESTful arhitektuuri. Täpsem dokumentatsioon asub API lehel: [http://api.sqroot.eu &amp;quot;API dokumentatsioon&amp;quot;] (tegemist on ajutise aadressiga, mis võetakse maha aine lõppemisel).&lt;br /&gt;
&lt;br /&gt;
=== Kriteeriumid ===&lt;br /&gt;
&lt;br /&gt;
Kõik õppejõu poolt esitatud kriteeriumid on täidetud. Erikokkuleppe alusel on projekti keeleks PHP.&lt;br /&gt;
&lt;br /&gt;
Kriteeriumid:&lt;br /&gt;
&lt;br /&gt;
* Teenuse pakkumist - API suudab vastata talle esitatud, valideeruvatele (vt. API dokumentatsiooni) päringutele&lt;br /&gt;
* Teenuse kasutajate tuvastamist ning haldamist - Kasutajatuvastus toimub nime/parooli alusel HTTP Basic Authentication protokollil, ideaalis üle HTTPS-i. Süsteemi sisemiselt on kasutajatel rollid, mida saab kasutada halduseks, näiteks LOGIN rolli eemaldamisel ei saa kasutaja enam sisse logida.&lt;br /&gt;
* Teenuse kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes - Kõik API päringud käivad API tokeni alusel. Tokeni kasutaja päringud logitakse nii logifaili kui andmebaasi, neid on sealt võimalik pärida. Lisaks on igal tokenil päringulimiit (tunnis), selle ületamisel päringuid eiratakse. Tokeneid saab tühistada, mis tähendab, et klientrakenduse päringuid ei töödelda mingil juhul.&lt;br /&gt;
&lt;br /&gt;
=== Testimine ===&lt;br /&gt;
&lt;br /&gt;
Veebiteenusel ei ole eraldi kasutajaliidest. Testimiseks on kaks varianti:&lt;br /&gt;
&lt;br /&gt;
# Luua ise vastav kasutajaliides ehk klientrakendus&lt;br /&gt;
# Kasutada mõnd abitööriista HTTP päringute koostamiseks. Soovitus: [https://chrome.google.com/webstore/detail/aejoelaoggembcahagimdiliamlcdmfm &amp;quot;Chrome plugin&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
Autentimisandmed rakendusele saab luua dokumentatsiooni lehel oleva vormi kaudu (andmed saadetakse e-mailile). Kasutajakonto saab luua juba API päringute abil.&lt;br /&gt;
&lt;br /&gt;
N.B. Juhul, kui uute API tokenite loomine ebaõnnestub (serveri mailiserver on veidi ebastabiilne), võib kasutada ka järgnevaid andmeid:&lt;br /&gt;
&lt;br /&gt;
Secret: fowhosurtothab&lt;br /&gt;
Token: fleraffahskuff&lt;br /&gt;
&lt;br /&gt;
=== Kood ===&lt;br /&gt;
&lt;br /&gt;
Lähtekoodi saab [http://api.sqroot.eu/anroots-challengo-a6da30942c8c.tar.gz siit]. Kohtmasinasse paigaldamiseks tuleb alla laadida [http://kohanaframework.org Kohana] framework ning paigaldada application/bootstrap.php failis märgitud moodulid. Andmebaasi schema on database kaustas. Kood on testitud ainult Linux platvormil LAMP stack-iga.&lt;br /&gt;
&lt;br /&gt;
== Klientrakendus ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 5. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:5554-IceCream 024.png|300px|thumb|Ekraanipilt töötavast rakendusest emulaatoris]]&lt;br /&gt;
&lt;br /&gt;
Klientrakendus on Android rakendus, mis kuvab teater NO99 etendusi ning võimaldab punktide alusel pileteid osta. Tegu on jQuery Mobile pordiga Android platvormile.&lt;br /&gt;
&lt;br /&gt;
Rakendus suhtleb Play! raamistikus kirjutatud API-ga, mis asub kahjuks meeskonna localhostis, sest selle võrku panemiseks oli vaja VPS serverit. Seega ei suuda rakendus Teie arvutites sisselogimist teostada.&lt;br /&gt;
&lt;br /&gt;
Rakenduse kood asub [https://bitbucket.org/anroots/punkt99-android BitBucketis].&lt;br /&gt;
&lt;br /&gt;
=== Feature list === &lt;br /&gt;
&lt;br /&gt;
* Autentimine&lt;br /&gt;
* Tulevaste etenduste nimekirja vaatamine&lt;br /&gt;
* Etenduse detailide vaatamine (sh pilt)&lt;br /&gt;
* Allalaaditud piltide &#039;&#039;&#039;cache&#039;&#039;&#039;-mine&lt;br /&gt;
* Pileti ostmine etendusele punktide alusel&lt;br /&gt;
* Konto info vaatamine&lt;br /&gt;
&lt;br /&gt;
= Meeskonna Liikmed =&lt;br /&gt;
&lt;br /&gt;
* Ando Roots &#039;&#039;anroots@itcollege.ee&#039;&#039;&lt;br /&gt;
* Mikk Pärast &#039;&#039;mparast@itcollege.ee&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Liitumine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for t in tudengid:&lt;br /&gt;
  if !t.laisk &amp;amp;&amp;amp; t.oskab_progreda:&lt;br /&gt;
    kutsu_meeskonda(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ mail -s &amp;quot;Harold&amp;quot; anroots@itcollege.ee&amp;lt;/pre&amp;gt;&lt;br /&gt;
Eeldan varasemaid teadmisi ning usaldusväärsust. Soovin, et asi ei lõppeks jälle nii, et projektijuht on kaitsmiseelsel õhtul üleval ja lõpetab üksinda projekti.&lt;br /&gt;
Ole nii kena ja anna huvist märku enne &#039;&#039;&#039;26. veebruari&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Lisad =&lt;br /&gt;
&lt;br /&gt;
[http://jaa.ee Kes on Harold?]&lt;br /&gt;
&lt;br /&gt;
== Challengo ==&lt;br /&gt;
&lt;br /&gt;
Challengo.me on Garage48 Tallinn 2011 raames alustatud veebiteenus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A social network of themed challenges, comes with a Karma profile and level-system.&lt;br /&gt;
Revenues from ads on the mobile version.&lt;br /&gt;
Team members: Ando Roots, Kristo Vaher, Valeria Gasik, Jelena Savinen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube v=&amp;quot;pPfHJD5F7sc&amp;quot; /&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=pPfHJD5F7sc Jelena tutvustab Challengo teenust]&lt;br /&gt;
&lt;br /&gt;
== Punkt99 ==&lt;br /&gt;
&lt;br /&gt;
[http://garage48.org/blogger/projects-launched-at-garage48-tallinn-music-2012 Punkt99] valmis Garage48-l 2012 kevadel paljude hakkajate inimeste koostööl. Tegu on piletimüügirakendusega teater NO99-le.&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=File:5554-IceCream_024.png&amp;diff=48675</id>
		<title>File:5554-IceCream 024.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=File:5554-IceCream_024.png&amp;diff=48675"/>
		<updated>2012-05-24T07:55:38Z</updated>

		<summary type="html">&lt;p&gt;Anroots: Meeskond &amp;quot;Harold&amp;quot; klientrakendus: Punkt99 Android&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Meeskond &amp;quot;Harold&amp;quot;]] klientrakendus: Punkt99 Android&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=48674</id>
		<title>Meeskond &quot;Harold&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=48674"/>
		<updated>2012-05-24T07:51:32Z</updated>

		<summary type="html">&lt;p&gt;Anroots: /* Lisad */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
{| style=&amp;quot;width:100%;height: 40px; background-color:#dff0d8;border: 1px solid ##468847;color:#468847;padding:10px;font-size:16px;font-weight:bold-webkit-border-radius: 8px;-moz-border-radius: 8px;border-radius: 8px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
| Ära kaitsesime.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Tegemist on IT Kolledži aine raames eksamieeldust taotleva projektimeeskonna töö dokumentatsiooniga.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 30em; padding-left: 2em; float: right; font-size: 95%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Meeskond &#039;&#039;&amp;quot;Harold&amp;quot;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Aine:&#039;&#039;&#039;&lt;br /&gt;
| [[:Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhend:&#039;&#039;&#039;&lt;br /&gt;
| [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2012 Juhend]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Tüüp:&#039;&#039;&#039;&lt;br /&gt;
| Projekt&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Anroots]]&amp;lt;br /&amp;gt;[[User:Mparast]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhendajad:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Mposka]]&amp;lt;br /&amp;gt;[[User:Kraspel]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Semester:&#039;&#039;&#039;&lt;br /&gt;
| 2011/2012 kevad&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Lingid&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|API Demo&lt;br /&gt;
|[http://api.sqroot.eu http://api.sqroot.eu]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Projekt =&lt;br /&gt;
&lt;br /&gt;
Projekti esimesed kaks osa keskenduvad veebiteenuse &amp;quot;Challengo&amp;quot; taasloomisele. Projekti esimene osa valmistab ette peamis(t)e päringu(te) XML vastuse struktuuri, projekti teine osa (veebiteenuse loomine) ehitab vastava API.&lt;br /&gt;
&lt;br /&gt;
== Korraldus ==&lt;br /&gt;
&lt;br /&gt;
Projektiga seonduv dokumentatsioon (erandiks on käesolev wiki leht), kasutajale nähtavad tekstid ning lähtekood on kirjutatud inglise keeles. Võimalusel on kood kirjutatud hilisema I18n toe võimaldamiseks.&lt;br /&gt;
&lt;br /&gt;
Koodi haldab GitHub repositoorium, juurdepääsu saamiseks tuleb projektijuhile saata oma GitHub kasutajanimi (või &#039;&#039;pull request&#039;&#039;). Tegemist vajavaid töid näeb GitHub lehel &#039;&#039;Issues&#039;&#039; vahekaardilt ning asjakohane dokumentatsioon (API) on GitHub wiki alamjaotises.&lt;br /&gt;
&lt;br /&gt;
Lähtekood on põhjalikult kommenteeritud, muud, eraldiseisvat dokumentatsiooni koodi kohta on minimaalselt.&lt;br /&gt;
&lt;br /&gt;
== XML Andmefailid ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 3. märts 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
XML andmefail kirjeldab veebiteenuse &amp;quot;[http://garage48.org/blogger/projects-on-garage48-tallinn-2011 Challengo]&amp;quot; andmeid. Andmed asuvad MYSQL andmebaasis, mille struktuur on kirjeldatud ERD mudeliga [[File:Harold_Challengo_MYSQL_ERD.png|200px|thumb|MYSQL ERD mudel]]. XML formaadis andmeid väljastab serveris asuv PHP API. Järgnevalt toodud XML näited ei pruugi projekti esimese osa nõudmiste tõttu olla vastavuses teise osana valmiva veebiteenuse tegeliku väljundiga.&lt;br /&gt;
&lt;br /&gt;
Faile saab vaadata ka võrgust: http://enos.itcollege.ee/~anroots/challengo/xml/. Soovitatav on seda teha just XSLT stiilifaili jaoks (http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml).&lt;br /&gt;
&lt;br /&gt;
=== XML [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml link]]===&lt;br /&gt;
&lt;br /&gt;
Järgnevalt on toodud lõik kasutaja praeguste väljakutsete päringust. Kasutajal on parajasti kaks aktiivset väljakutset, igal väljakutsel on veidi meta-infot, mingi hulk ülesandeid (tasks) ning igal ülesandel on üks või mitu autasu (rewards).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;Response.xsl&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!-- List of user&#039;s current challenges --&amp;gt;&lt;br /&gt;
&amp;lt;challenges&amp;gt;&lt;br /&gt;
  &amp;lt;!-- First challenge, started by the user --&amp;gt;&lt;br /&gt;
  &amp;lt;challenge id=&amp;quot;4&amp;quot; tasks=&amp;quot;6&amp;quot; progress=&amp;quot;17%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;The Improgrupp Jaa!&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Inspired by a true story, the Improgrupp Jaa! contains tasks that challenge ones spontaniety and social courage.&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;duration&amp;gt;1209600&amp;lt;/duration&amp;gt;&lt;br /&gt;
    &amp;lt;points_required&amp;gt;18&amp;lt;/points_required&amp;gt;&lt;br /&gt;
    &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;!-- Each challenge has a number of tasks that have to be completed.--&amp;gt;&lt;br /&gt;
    &amp;lt;!-- No challenge can be completed before earned points from tasks (rewards) exceed the points_required field --&amp;gt;&lt;br /&gt;
    &amp;lt;tasks max_points=&amp;quot;26&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;19&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Make a present to a homeless person&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;If you can read this, you&#039;re probably among the luckier ones. Do something for the ones who can&#039;t.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;!-- Each task yields rewards on completion. Rewards are &amp;quot;power&amp;quot; points of different categories.--&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;20&amp;quot; completed=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment a stranger&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Make a sincere compliment to someone you don&#039;t know. We could do with more praise where it&#039;s due.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;21&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Do volunteer work&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Offer yourself as a volunteer to an event or a cause.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;22&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Perform to a security camera&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Do a little dance to a security camera. It shouldn&#039;t be illegal...probably. Don&#039;t get in trouble!&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;23&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment someone for a job well done&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;When was the last time you thanked the janitor?&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;24&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Take a day off&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;This is mostly for work-a-holics: rest for a while.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
    &amp;lt;/tasks&amp;gt;&lt;br /&gt;
  &amp;lt;/challenge&amp;gt;&lt;br /&gt;
&amp;lt;/challenges&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT (stiilifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsl link]] ===&lt;br /&gt;
&lt;br /&gt;
Toodud stiilifail muudab ülaltoodud XML vastuse inimesele kergemini loetavaks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html class=&amp;quot;no-js&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;Ando Roots&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Challengo Response&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.css&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.responsive.css&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Challengo API response&amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
            The following is a list of challenges reported by the XML API.&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;!-- Go over each challenge --&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;challenges/challenge&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h2&amp;gt;&lt;br /&gt;
              &lt;br /&gt;
              &amp;lt;!-- Challenge badge image and title --&amp;gt;&lt;br /&gt;
              &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;&lt;br /&gt;
                  http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/img&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
              &amp;lt;!-- Challenge progress, if applicable --&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:if test=&amp;quot;@progress&amp;quot;&amp;gt;&lt;br /&gt;
                (&amp;lt;span&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@progress&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/span&amp;gt;)&lt;br /&gt;
              &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
            &amp;lt;/h2&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;p class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- Table for some challenge meta-info --&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered span4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Points required to complete:&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;points_required&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Time left (hours):&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;round(duration div 1800)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;!-- List all challenge tasks --&amp;gt;&lt;br /&gt;
            &amp;lt;h3 style=&amp;quot;margin-top:140px&amp;quot;&amp;gt;Tasks (&amp;lt;xsl:value-of select=&amp;quot;@tasks&amp;quot;/&amp;gt;)&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered table-striped table-condensed&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;thead&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;ID&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Title&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Badge&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Rewards&amp;lt;/th&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/thead&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;tasks/task&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;tr&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Color the row gray if task is completed --&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;@completed&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:attribute name=&amp;quot;class&amp;quot;&amp;gt;&lt;br /&gt;
                        help-block&lt;br /&gt;
                      &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                      &amp;lt;/img&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:for-each select=&amp;quot;rewards/reward&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;li&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=1&amp;quot;&amp;gt;&lt;br /&gt;
                              Compassion&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=2&amp;quot;&amp;gt;&lt;br /&gt;
                              Strength&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=3&amp;quot;&amp;gt;&lt;br /&gt;
                              Intelligence&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;span&amp;gt;&lt;br /&gt;
                              &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                            &amp;lt;/span&amp;gt;&lt;br /&gt;
                          &amp;lt;/li&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;!-- End of challenge task table --&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;!-- End of challenge --&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD (skeemifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsd link]] ===&lt;br /&gt;
&lt;br /&gt;
Skeemifail kirjeldab päringu vastuse XML struktuuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;challenges&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;challenge&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;duration&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;points_required&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;tasks&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;task&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rewards&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;reward&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:extension base=&amp;quot;xs:unsignedByte&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:attribute name=&amp;quot;power_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;completed&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;max_points&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;tasks&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;progress&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Veebiteenus ==&lt;br /&gt;
&#039;&#039;Tähtaeg 30. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:challengo_req2.png|300px|thumb|Näidis HTTP API päringust]]&lt;br /&gt;
&lt;br /&gt;
Veebiteenusena realiseeriti API, mis võimaldab klientide registreerimist, haldamist ning Challengo teenuse põhifunktsionaalsuse pakkumist HTTP päringute kaudu. API loomisel kasutati RESTful arhitektuuri. Täpsem dokumentatsioon asub API lehel: [http://api.sqroot.eu &amp;quot;API dokumentatsioon&amp;quot;] (tegemist on ajutise aadressiga, mis võetakse maha aine lõppemisel).&lt;br /&gt;
&lt;br /&gt;
=== Kriteeriumid ===&lt;br /&gt;
&lt;br /&gt;
Kõik õppejõu poolt esitatud kriteeriumid on täidetud. Erikokkuleppe alusel on projekti keeleks PHP.&lt;br /&gt;
&lt;br /&gt;
Kriteeriumid:&lt;br /&gt;
&lt;br /&gt;
* Teenuse pakkumist - API suudab vastata talle esitatud, valideeruvatele (vt. API dokumentatsiooni) päringutele&lt;br /&gt;
* Teenuse kasutajate tuvastamist ning haldamist - Kasutajatuvastus toimub nime/parooli alusel HTTP Basic Authentication protokollil, ideaalis üle HTTPS-i. Süsteemi sisemiselt on kasutajatel rollid, mida saab kasutada halduseks, näiteks LOGIN rolli eemaldamisel ei saa kasutaja enam sisse logida.&lt;br /&gt;
* Teenuse kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes - Kõik API päringud käivad API tokeni alusel. Tokeni kasutaja päringud logitakse nii logifaili kui andmebaasi, neid on sealt võimalik pärida. Lisaks on igal tokenil päringulimiit (tunnis), selle ületamisel päringuid eiratakse. Tokeneid saab tühistada, mis tähendab, et klientrakenduse päringuid ei töödelda mingil juhul.&lt;br /&gt;
&lt;br /&gt;
=== Testimine ===&lt;br /&gt;
&lt;br /&gt;
Veebiteenusel ei ole eraldi kasutajaliidest. Testimiseks on kaks varianti:&lt;br /&gt;
&lt;br /&gt;
# Luua ise vastav kasutajaliides ehk klientrakendus&lt;br /&gt;
# Kasutada mõnd abitööriista HTTP päringute koostamiseks. Soovitus: [https://chrome.google.com/webstore/detail/aejoelaoggembcahagimdiliamlcdmfm &amp;quot;Chrome plugin&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
Autentimisandmed rakendusele saab luua dokumentatsiooni lehel oleva vormi kaudu (andmed saadetakse e-mailile). Kasutajakonto saab luua juba API päringute abil.&lt;br /&gt;
&lt;br /&gt;
N.B. Juhul, kui uute API tokenite loomine ebaõnnestub (serveri mailiserver on veidi ebastabiilne), võib kasutada ka järgnevaid andmeid:&lt;br /&gt;
&lt;br /&gt;
Secret: fowhosurtothab&lt;br /&gt;
Token: fleraffahskuff&lt;br /&gt;
&lt;br /&gt;
=== Kood ===&lt;br /&gt;
&lt;br /&gt;
Lähtekoodi saab [http://api.sqroot.eu/anroots-challengo-a6da30942c8c.tar.gz siit]. Kohtmasinasse paigaldamiseks tuleb alla laadida [http://kohanaframework.org Kohana] framework ning paigaldada application/bootstrap.php failis märgitud moodulid. Andmebaasi schema on database kaustas. Kood on testitud ainult Linux platvormil LAMP stack-iga.&lt;br /&gt;
&lt;br /&gt;
== Klientrakendus ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 5. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Klientrakendus on Android rakendus, mis kuvab teater NO99 etendusi ning võimaldab punktide alusel pileteid osta. Tegu on jQuery Mobile pordiga Android platvormile.&lt;br /&gt;
&lt;br /&gt;
Rakendus suhtleb Play! raamistikus kirjutatud API-ga.&lt;br /&gt;
&lt;br /&gt;
Rakenduse kood asub [https://bitbucket.org/anroots/punkt99-android BitBucketis].&lt;br /&gt;
&lt;br /&gt;
= Meeskonna Liikmed =&lt;br /&gt;
&lt;br /&gt;
* Ando Roots &#039;&#039;anroots@itcollege.ee&#039;&#039;&lt;br /&gt;
* Mikk Pärast &#039;&#039;mparast@itcollege.ee&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Liitumine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for t in tudengid:&lt;br /&gt;
  if !t.laisk &amp;amp;&amp;amp; t.oskab_progreda:&lt;br /&gt;
    kutsu_meeskonda(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ mail -s &amp;quot;Harold&amp;quot; anroots@itcollege.ee&amp;lt;/pre&amp;gt;&lt;br /&gt;
Eeldan varasemaid teadmisi ning usaldusväärsust. Soovin, et asi ei lõppeks jälle nii, et projektijuht on kaitsmiseelsel õhtul üleval ja lõpetab üksinda projekti.&lt;br /&gt;
Ole nii kena ja anna huvist märku enne &#039;&#039;&#039;26. veebruari&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Lisad =&lt;br /&gt;
&lt;br /&gt;
[http://jaa.ee Kes on Harold?]&lt;br /&gt;
&lt;br /&gt;
== Challengo ==&lt;br /&gt;
&lt;br /&gt;
Challengo.me on Garage48 Tallinn 2011 raames alustatud veebiteenus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A social network of themed challenges, comes with a Karma profile and level-system.&lt;br /&gt;
Revenues from ads on the mobile version.&lt;br /&gt;
Team members: Ando Roots, Kristo Vaher, Valeria Gasik, Jelena Savinen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube v=&amp;quot;pPfHJD5F7sc&amp;quot; /&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=pPfHJD5F7sc Jelena tutvustab Challengo teenust]&lt;br /&gt;
&lt;br /&gt;
== Punkt99 ==&lt;br /&gt;
&lt;br /&gt;
[http://garage48.org/blogger/projects-launched-at-garage48-tallinn-music-2012 Punkt99] valmis Garage48-l 2012 kevadel paljude hakkajate inimeste koostööl. Tegu on piletimüügirakendusega teater NO99-le.&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=48673</id>
		<title>Meeskond &quot;Harold&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=48673"/>
		<updated>2012-05-24T07:48:27Z</updated>

		<summary type="html">&lt;p&gt;Anroots: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
{| style=&amp;quot;width:100%;height: 40px; background-color:#dff0d8;border: 1px solid ##468847;color:#468847;padding:10px;font-size:16px;font-weight:bold-webkit-border-radius: 8px;-moz-border-radius: 8px;border-radius: 8px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
| Ära kaitsesime.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Tegemist on IT Kolledži aine raames eksamieeldust taotleva projektimeeskonna töö dokumentatsiooniga.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 30em; padding-left: 2em; float: right; font-size: 95%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Meeskond &#039;&#039;&amp;quot;Harold&amp;quot;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Aine:&#039;&#039;&#039;&lt;br /&gt;
| [[:Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhend:&#039;&#039;&#039;&lt;br /&gt;
| [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2012 Juhend]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Tüüp:&#039;&#039;&#039;&lt;br /&gt;
| Projekt&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Anroots]]&amp;lt;br /&amp;gt;[[User:Mparast]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhendajad:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Mposka]]&amp;lt;br /&amp;gt;[[User:Kraspel]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Semester:&#039;&#039;&#039;&lt;br /&gt;
| 2011/2012 kevad&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Lingid&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|API Demo&lt;br /&gt;
|[http://api.sqroot.eu http://api.sqroot.eu]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Projekt =&lt;br /&gt;
&lt;br /&gt;
Projekti esimesed kaks osa keskenduvad veebiteenuse &amp;quot;Challengo&amp;quot; taasloomisele. Projekti esimene osa valmistab ette peamis(t)e päringu(te) XML vastuse struktuuri, projekti teine osa (veebiteenuse loomine) ehitab vastava API.&lt;br /&gt;
&lt;br /&gt;
== Korraldus ==&lt;br /&gt;
&lt;br /&gt;
Projektiga seonduv dokumentatsioon (erandiks on käesolev wiki leht), kasutajale nähtavad tekstid ning lähtekood on kirjutatud inglise keeles. Võimalusel on kood kirjutatud hilisema I18n toe võimaldamiseks.&lt;br /&gt;
&lt;br /&gt;
Koodi haldab GitHub repositoorium, juurdepääsu saamiseks tuleb projektijuhile saata oma GitHub kasutajanimi (või &#039;&#039;pull request&#039;&#039;). Tegemist vajavaid töid näeb GitHub lehel &#039;&#039;Issues&#039;&#039; vahekaardilt ning asjakohane dokumentatsioon (API) on GitHub wiki alamjaotises.&lt;br /&gt;
&lt;br /&gt;
Lähtekood on põhjalikult kommenteeritud, muud, eraldiseisvat dokumentatsiooni koodi kohta on minimaalselt.&lt;br /&gt;
&lt;br /&gt;
== XML Andmefailid ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 3. märts 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
XML andmefail kirjeldab veebiteenuse &amp;quot;[http://garage48.org/blogger/projects-on-garage48-tallinn-2011 Challengo]&amp;quot; andmeid. Andmed asuvad MYSQL andmebaasis, mille struktuur on kirjeldatud ERD mudeliga [[File:Harold_Challengo_MYSQL_ERD.png|200px|thumb|MYSQL ERD mudel]]. XML formaadis andmeid väljastab serveris asuv PHP API. Järgnevalt toodud XML näited ei pruugi projekti esimese osa nõudmiste tõttu olla vastavuses teise osana valmiva veebiteenuse tegeliku väljundiga.&lt;br /&gt;
&lt;br /&gt;
Faile saab vaadata ka võrgust: http://enos.itcollege.ee/~anroots/challengo/xml/. Soovitatav on seda teha just XSLT stiilifaili jaoks (http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml).&lt;br /&gt;
&lt;br /&gt;
=== XML [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml link]]===&lt;br /&gt;
&lt;br /&gt;
Järgnevalt on toodud lõik kasutaja praeguste väljakutsete päringust. Kasutajal on parajasti kaks aktiivset väljakutset, igal väljakutsel on veidi meta-infot, mingi hulk ülesandeid (tasks) ning igal ülesandel on üks või mitu autasu (rewards).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;Response.xsl&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!-- List of user&#039;s current challenges --&amp;gt;&lt;br /&gt;
&amp;lt;challenges&amp;gt;&lt;br /&gt;
  &amp;lt;!-- First challenge, started by the user --&amp;gt;&lt;br /&gt;
  &amp;lt;challenge id=&amp;quot;4&amp;quot; tasks=&amp;quot;6&amp;quot; progress=&amp;quot;17%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;The Improgrupp Jaa!&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Inspired by a true story, the Improgrupp Jaa! contains tasks that challenge ones spontaniety and social courage.&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;duration&amp;gt;1209600&amp;lt;/duration&amp;gt;&lt;br /&gt;
    &amp;lt;points_required&amp;gt;18&amp;lt;/points_required&amp;gt;&lt;br /&gt;
    &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;!-- Each challenge has a number of tasks that have to be completed.--&amp;gt;&lt;br /&gt;
    &amp;lt;!-- No challenge can be completed before earned points from tasks (rewards) exceed the points_required field --&amp;gt;&lt;br /&gt;
    &amp;lt;tasks max_points=&amp;quot;26&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;19&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Make a present to a homeless person&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;If you can read this, you&#039;re probably among the luckier ones. Do something for the ones who can&#039;t.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;!-- Each task yields rewards on completion. Rewards are &amp;quot;power&amp;quot; points of different categories.--&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;20&amp;quot; completed=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment a stranger&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Make a sincere compliment to someone you don&#039;t know. We could do with more praise where it&#039;s due.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;21&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Do volunteer work&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Offer yourself as a volunteer to an event or a cause.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;22&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Perform to a security camera&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Do a little dance to a security camera. It shouldn&#039;t be illegal...probably. Don&#039;t get in trouble!&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;23&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment someone for a job well done&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;When was the last time you thanked the janitor?&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;24&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Take a day off&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;This is mostly for work-a-holics: rest for a while.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
    &amp;lt;/tasks&amp;gt;&lt;br /&gt;
  &amp;lt;/challenge&amp;gt;&lt;br /&gt;
&amp;lt;/challenges&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT (stiilifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsl link]] ===&lt;br /&gt;
&lt;br /&gt;
Toodud stiilifail muudab ülaltoodud XML vastuse inimesele kergemini loetavaks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html class=&amp;quot;no-js&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;Ando Roots&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Challengo Response&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.css&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.responsive.css&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Challengo API response&amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
            The following is a list of challenges reported by the XML API.&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;!-- Go over each challenge --&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;challenges/challenge&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h2&amp;gt;&lt;br /&gt;
              &lt;br /&gt;
              &amp;lt;!-- Challenge badge image and title --&amp;gt;&lt;br /&gt;
              &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;&lt;br /&gt;
                  http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/img&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
              &amp;lt;!-- Challenge progress, if applicable --&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:if test=&amp;quot;@progress&amp;quot;&amp;gt;&lt;br /&gt;
                (&amp;lt;span&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@progress&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/span&amp;gt;)&lt;br /&gt;
              &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
            &amp;lt;/h2&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;p class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- Table for some challenge meta-info --&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered span4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Points required to complete:&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;points_required&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Time left (hours):&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;round(duration div 1800)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;!-- List all challenge tasks --&amp;gt;&lt;br /&gt;
            &amp;lt;h3 style=&amp;quot;margin-top:140px&amp;quot;&amp;gt;Tasks (&amp;lt;xsl:value-of select=&amp;quot;@tasks&amp;quot;/&amp;gt;)&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered table-striped table-condensed&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;thead&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;ID&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Title&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Badge&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Rewards&amp;lt;/th&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/thead&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;tasks/task&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;tr&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Color the row gray if task is completed --&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;@completed&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:attribute name=&amp;quot;class&amp;quot;&amp;gt;&lt;br /&gt;
                        help-block&lt;br /&gt;
                      &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                      &amp;lt;/img&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:for-each select=&amp;quot;rewards/reward&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;li&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=1&amp;quot;&amp;gt;&lt;br /&gt;
                              Compassion&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=2&amp;quot;&amp;gt;&lt;br /&gt;
                              Strength&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=3&amp;quot;&amp;gt;&lt;br /&gt;
                              Intelligence&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;span&amp;gt;&lt;br /&gt;
                              &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                            &amp;lt;/span&amp;gt;&lt;br /&gt;
                          &amp;lt;/li&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;!-- End of challenge task table --&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;!-- End of challenge --&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD (skeemifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsd link]] ===&lt;br /&gt;
&lt;br /&gt;
Skeemifail kirjeldab päringu vastuse XML struktuuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;challenges&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;challenge&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;duration&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;points_required&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;tasks&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;task&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rewards&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;reward&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:extension base=&amp;quot;xs:unsignedByte&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:attribute name=&amp;quot;power_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;completed&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;max_points&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;tasks&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;progress&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Veebiteenus ==&lt;br /&gt;
&#039;&#039;Tähtaeg 30. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:challengo_req2.png|300px|thumb|Näidis HTTP API päringust]]&lt;br /&gt;
&lt;br /&gt;
Veebiteenusena realiseeriti API, mis võimaldab klientide registreerimist, haldamist ning Challengo teenuse põhifunktsionaalsuse pakkumist HTTP päringute kaudu. API loomisel kasutati RESTful arhitektuuri. Täpsem dokumentatsioon asub API lehel: [http://api.sqroot.eu &amp;quot;API dokumentatsioon&amp;quot;] (tegemist on ajutise aadressiga, mis võetakse maha aine lõppemisel).&lt;br /&gt;
&lt;br /&gt;
=== Kriteeriumid ===&lt;br /&gt;
&lt;br /&gt;
Kõik õppejõu poolt esitatud kriteeriumid on täidetud. Erikokkuleppe alusel on projekti keeleks PHP.&lt;br /&gt;
&lt;br /&gt;
Kriteeriumid:&lt;br /&gt;
&lt;br /&gt;
* Teenuse pakkumist - API suudab vastata talle esitatud, valideeruvatele (vt. API dokumentatsiooni) päringutele&lt;br /&gt;
* Teenuse kasutajate tuvastamist ning haldamist - Kasutajatuvastus toimub nime/parooli alusel HTTP Basic Authentication protokollil, ideaalis üle HTTPS-i. Süsteemi sisemiselt on kasutajatel rollid, mida saab kasutada halduseks, näiteks LOGIN rolli eemaldamisel ei saa kasutaja enam sisse logida.&lt;br /&gt;
* Teenuse kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes - Kõik API päringud käivad API tokeni alusel. Tokeni kasutaja päringud logitakse nii logifaili kui andmebaasi, neid on sealt võimalik pärida. Lisaks on igal tokenil päringulimiit (tunnis), selle ületamisel päringuid eiratakse. Tokeneid saab tühistada, mis tähendab, et klientrakenduse päringuid ei töödelda mingil juhul.&lt;br /&gt;
&lt;br /&gt;
=== Testimine ===&lt;br /&gt;
&lt;br /&gt;
Veebiteenusel ei ole eraldi kasutajaliidest. Testimiseks on kaks varianti:&lt;br /&gt;
&lt;br /&gt;
# Luua ise vastav kasutajaliides ehk klientrakendus&lt;br /&gt;
# Kasutada mõnd abitööriista HTTP päringute koostamiseks. Soovitus: [https://chrome.google.com/webstore/detail/aejoelaoggembcahagimdiliamlcdmfm &amp;quot;Chrome plugin&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
Autentimisandmed rakendusele saab luua dokumentatsiooni lehel oleva vormi kaudu (andmed saadetakse e-mailile). Kasutajakonto saab luua juba API päringute abil.&lt;br /&gt;
&lt;br /&gt;
N.B. Juhul, kui uute API tokenite loomine ebaõnnestub (serveri mailiserver on veidi ebastabiilne), võib kasutada ka järgnevaid andmeid:&lt;br /&gt;
&lt;br /&gt;
Secret: fowhosurtothab&lt;br /&gt;
Token: fleraffahskuff&lt;br /&gt;
&lt;br /&gt;
=== Kood ===&lt;br /&gt;
&lt;br /&gt;
Lähtekoodi saab [http://api.sqroot.eu/anroots-challengo-a6da30942c8c.tar.gz siit]. Kohtmasinasse paigaldamiseks tuleb alla laadida [http://kohanaframework.org Kohana] framework ning paigaldada application/bootstrap.php failis märgitud moodulid. Andmebaasi schema on database kaustas. Kood on testitud ainult Linux platvormil LAMP stack-iga.&lt;br /&gt;
&lt;br /&gt;
== Klientrakendus ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 5. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Klientrakendus on Android rakendus, mis kuvab teater NO99 etendusi ning võimaldab punktide alusel pileteid osta. Tegu on jQuery Mobile pordiga Android platvormile.&lt;br /&gt;
&lt;br /&gt;
Rakendus suhtleb Play! raamistikus kirjutatud API-ga.&lt;br /&gt;
&lt;br /&gt;
Rakenduse kood asub [https://bitbucket.org/anroots/punkt99-android BitBucketis].&lt;br /&gt;
&lt;br /&gt;
= Meeskonna Liikmed =&lt;br /&gt;
&lt;br /&gt;
* Ando Roots &#039;&#039;anroots@itcollege.ee&#039;&#039;&lt;br /&gt;
* Mikk Pärast &#039;&#039;mparast@itcollege.ee&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Liitumine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for t in tudengid:&lt;br /&gt;
  if !t.laisk &amp;amp;&amp;amp; t.oskab_progreda:&lt;br /&gt;
    kutsu_meeskonda(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ mail -s &amp;quot;Harold&amp;quot; anroots@itcollege.ee&amp;lt;/pre&amp;gt;&lt;br /&gt;
Eeldan varasemaid teadmisi ning usaldusväärsust. Soovin, et asi ei lõppeks jälle nii, et projektijuht on kaitsmiseelsel õhtul üleval ja lõpetab üksinda projekti.&lt;br /&gt;
Ole nii kena ja anna huvist märku enne &#039;&#039;&#039;26. veebruari&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Lisad =&lt;br /&gt;
&lt;br /&gt;
[http://jaa.ee Kes on Harold?]&lt;br /&gt;
&lt;br /&gt;
== Challengo ==&lt;br /&gt;
&lt;br /&gt;
Challengo.me on Garage48 Tallinn 2011 raames alustatud veebiteenus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A social network of themed challenges, comes with a Karma profile and level-system.&lt;br /&gt;
Revenues from ads on the mobile version.&lt;br /&gt;
Team members: Ando Roots, Kristo Vaher, Valeria Gasik, Jelena Savinen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube v=&amp;quot;pPfHJD5F7sc&amp;quot; /&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=pPfHJD5F7sc Jelena tutvustab Challengo teenust]&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=48668</id>
		<title>Meeskond &quot;Harold&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=48668"/>
		<updated>2012-05-24T06:57:37Z</updated>

		<summary type="html">&lt;p&gt;Anroots: /* Klientrakendus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
{| style=&amp;quot;width:100%;height: 40px; background-color:#dff0d8;border: 1px solid ##468847;color:#468847;padding:10px;font-size:16px;font-weight:bold-webkit-border-radius: 8px;-moz-border-radius: 8px;border-radius: 8px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
| Täna kaitseme klientrakendust.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Tegemist on IT Kolledži aine raames eksamieeldust taotleva projektimeeskonna töö dokumentatsiooniga.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 30em; padding-left: 2em; float: right; font-size: 95%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Meeskond &#039;&#039;&amp;quot;Harold&amp;quot;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Aine:&#039;&#039;&#039;&lt;br /&gt;
| [[:Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhend:&#039;&#039;&#039;&lt;br /&gt;
| [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2012 Juhend]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Tüüp:&#039;&#039;&#039;&lt;br /&gt;
| Projekt&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Anroots]]&amp;lt;br /&amp;gt;[[User:Mparast]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhendajad:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Mposka]]&amp;lt;br /&amp;gt;[[User:Kraspel]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Semester:&#039;&#039;&#039;&lt;br /&gt;
| 2011/2012 kevad&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Lingid&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|API Demo&lt;br /&gt;
|[http://api.sqroot.eu http://api.sqroot.eu]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Projekt =&lt;br /&gt;
&lt;br /&gt;
Projekti esimesed kaks osa keskenduvad veebiteenuse &amp;quot;Challengo&amp;quot; taasloomisele. Projekti esimene osa valmistab ette peamis(t)e päringu(te) XML vastuse struktuuri, projekti teine osa (veebiteenuse loomine) ehitab vastava API.&lt;br /&gt;
&lt;br /&gt;
== Korraldus ==&lt;br /&gt;
&lt;br /&gt;
Projektiga seonduv dokumentatsioon (erandiks on käesolev wiki leht), kasutajale nähtavad tekstid ning lähtekood on kirjutatud inglise keeles. Võimalusel on kood kirjutatud hilisema I18n toe võimaldamiseks.&lt;br /&gt;
&lt;br /&gt;
Koodi haldab GitHub repositoorium, juurdepääsu saamiseks tuleb projektijuhile saata oma GitHub kasutajanimi (või &#039;&#039;pull request&#039;&#039;). Tegemist vajavaid töid näeb GitHub lehel &#039;&#039;Issues&#039;&#039; vahekaardilt ning asjakohane dokumentatsioon (API) on GitHub wiki alamjaotises.&lt;br /&gt;
&lt;br /&gt;
Lähtekood on põhjalikult kommenteeritud, muud, eraldiseisvat dokumentatsiooni koodi kohta on minimaalselt.&lt;br /&gt;
&lt;br /&gt;
== XML Andmefailid ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 3. märts 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
XML andmefail kirjeldab veebiteenuse &amp;quot;[http://garage48.org/blogger/projects-on-garage48-tallinn-2011 Challengo]&amp;quot; andmeid. Andmed asuvad MYSQL andmebaasis, mille struktuur on kirjeldatud ERD mudeliga [[File:Harold_Challengo_MYSQL_ERD.png|200px|thumb|MYSQL ERD mudel]]. XML formaadis andmeid väljastab serveris asuv PHP API. Järgnevalt toodud XML näited ei pruugi projekti esimese osa nõudmiste tõttu olla vastavuses teise osana valmiva veebiteenuse tegeliku väljundiga.&lt;br /&gt;
&lt;br /&gt;
Faile saab vaadata ka võrgust: http://enos.itcollege.ee/~anroots/challengo/xml/. Soovitatav on seda teha just XSLT stiilifaili jaoks (http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml).&lt;br /&gt;
&lt;br /&gt;
=== XML [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml link]]===&lt;br /&gt;
&lt;br /&gt;
Järgnevalt on toodud lõik kasutaja praeguste väljakutsete päringust. Kasutajal on parajasti kaks aktiivset väljakutset, igal väljakutsel on veidi meta-infot, mingi hulk ülesandeid (tasks) ning igal ülesandel on üks või mitu autasu (rewards).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;Response.xsl&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!-- List of user&#039;s current challenges --&amp;gt;&lt;br /&gt;
&amp;lt;challenges&amp;gt;&lt;br /&gt;
  &amp;lt;!-- First challenge, started by the user --&amp;gt;&lt;br /&gt;
  &amp;lt;challenge id=&amp;quot;4&amp;quot; tasks=&amp;quot;6&amp;quot; progress=&amp;quot;17%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;The Improgrupp Jaa!&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Inspired by a true story, the Improgrupp Jaa! contains tasks that challenge ones spontaniety and social courage.&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;duration&amp;gt;1209600&amp;lt;/duration&amp;gt;&lt;br /&gt;
    &amp;lt;points_required&amp;gt;18&amp;lt;/points_required&amp;gt;&lt;br /&gt;
    &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;!-- Each challenge has a number of tasks that have to be completed.--&amp;gt;&lt;br /&gt;
    &amp;lt;!-- No challenge can be completed before earned points from tasks (rewards) exceed the points_required field --&amp;gt;&lt;br /&gt;
    &amp;lt;tasks max_points=&amp;quot;26&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;19&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Make a present to a homeless person&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;If you can read this, you&#039;re probably among the luckier ones. Do something for the ones who can&#039;t.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;!-- Each task yields rewards on completion. Rewards are &amp;quot;power&amp;quot; points of different categories.--&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;20&amp;quot; completed=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment a stranger&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Make a sincere compliment to someone you don&#039;t know. We could do with more praise where it&#039;s due.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;21&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Do volunteer work&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Offer yourself as a volunteer to an event or a cause.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;22&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Perform to a security camera&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Do a little dance to a security camera. It shouldn&#039;t be illegal...probably. Don&#039;t get in trouble!&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;23&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment someone for a job well done&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;When was the last time you thanked the janitor?&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;24&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Take a day off&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;This is mostly for work-a-holics: rest for a while.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
    &amp;lt;/tasks&amp;gt;&lt;br /&gt;
  &amp;lt;/challenge&amp;gt;&lt;br /&gt;
&amp;lt;/challenges&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT (stiilifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsl link]] ===&lt;br /&gt;
&lt;br /&gt;
Toodud stiilifail muudab ülaltoodud XML vastuse inimesele kergemini loetavaks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html class=&amp;quot;no-js&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;Ando Roots&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Challengo Response&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.css&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.responsive.css&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Challengo API response&amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
            The following is a list of challenges reported by the XML API.&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;!-- Go over each challenge --&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;challenges/challenge&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h2&amp;gt;&lt;br /&gt;
              &lt;br /&gt;
              &amp;lt;!-- Challenge badge image and title --&amp;gt;&lt;br /&gt;
              &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;&lt;br /&gt;
                  http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/img&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
              &amp;lt;!-- Challenge progress, if applicable --&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:if test=&amp;quot;@progress&amp;quot;&amp;gt;&lt;br /&gt;
                (&amp;lt;span&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@progress&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/span&amp;gt;)&lt;br /&gt;
              &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
            &amp;lt;/h2&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;p class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- Table for some challenge meta-info --&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered span4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Points required to complete:&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;points_required&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Time left (hours):&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;round(duration div 1800)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;!-- List all challenge tasks --&amp;gt;&lt;br /&gt;
            &amp;lt;h3 style=&amp;quot;margin-top:140px&amp;quot;&amp;gt;Tasks (&amp;lt;xsl:value-of select=&amp;quot;@tasks&amp;quot;/&amp;gt;)&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered table-striped table-condensed&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;thead&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;ID&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Title&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Badge&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Rewards&amp;lt;/th&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/thead&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;tasks/task&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;tr&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Color the row gray if task is completed --&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;@completed&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:attribute name=&amp;quot;class&amp;quot;&amp;gt;&lt;br /&gt;
                        help-block&lt;br /&gt;
                      &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                      &amp;lt;/img&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:for-each select=&amp;quot;rewards/reward&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;li&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=1&amp;quot;&amp;gt;&lt;br /&gt;
                              Compassion&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=2&amp;quot;&amp;gt;&lt;br /&gt;
                              Strength&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=3&amp;quot;&amp;gt;&lt;br /&gt;
                              Intelligence&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;span&amp;gt;&lt;br /&gt;
                              &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                            &amp;lt;/span&amp;gt;&lt;br /&gt;
                          &amp;lt;/li&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;!-- End of challenge task table --&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;!-- End of challenge --&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD (skeemifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsd link]] ===&lt;br /&gt;
&lt;br /&gt;
Skeemifail kirjeldab päringu vastuse XML struktuuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;challenges&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;challenge&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;duration&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;points_required&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;tasks&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;task&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rewards&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;reward&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:extension base=&amp;quot;xs:unsignedByte&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:attribute name=&amp;quot;power_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;completed&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;max_points&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;tasks&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;progress&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Veebiteenus ==&lt;br /&gt;
&#039;&#039;Tähtaeg 30. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:challengo_req2.png|300px|thumb|Näidis HTTP API päringust]]&lt;br /&gt;
&lt;br /&gt;
Veebiteenusena realiseeriti API, mis võimaldab klientide registreerimist, haldamist ning Challengo teenuse põhifunktsionaalsuse pakkumist HTTP päringute kaudu. API loomisel kasutati RESTful arhitektuuri. Täpsem dokumentatsioon asub API lehel: [http://api.sqroot.eu &amp;quot;API dokumentatsioon&amp;quot;] (tegemist on ajutise aadressiga, mis võetakse maha aine lõppemisel).&lt;br /&gt;
&lt;br /&gt;
=== Kriteeriumid ===&lt;br /&gt;
&lt;br /&gt;
Kõik õppejõu poolt esitatud kriteeriumid on täidetud. Erikokkuleppe alusel on projekti keeleks PHP.&lt;br /&gt;
&lt;br /&gt;
Kriteeriumid:&lt;br /&gt;
&lt;br /&gt;
* Teenuse pakkumist - API suudab vastata talle esitatud, valideeruvatele (vt. API dokumentatsiooni) päringutele&lt;br /&gt;
* Teenuse kasutajate tuvastamist ning haldamist - Kasutajatuvastus toimub nime/parooli alusel HTTP Basic Authentication protokollil, ideaalis üle HTTPS-i. Süsteemi sisemiselt on kasutajatel rollid, mida saab kasutada halduseks, näiteks LOGIN rolli eemaldamisel ei saa kasutaja enam sisse logida.&lt;br /&gt;
* Teenuse kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes - Kõik API päringud käivad API tokeni alusel. Tokeni kasutaja päringud logitakse nii logifaili kui andmebaasi, neid on sealt võimalik pärida. Lisaks on igal tokenil päringulimiit (tunnis), selle ületamisel päringuid eiratakse. Tokeneid saab tühistada, mis tähendab, et klientrakenduse päringuid ei töödelda mingil juhul.&lt;br /&gt;
&lt;br /&gt;
=== Testimine ===&lt;br /&gt;
&lt;br /&gt;
Veebiteenusel ei ole eraldi kasutajaliidest. Testimiseks on kaks varianti:&lt;br /&gt;
&lt;br /&gt;
# Luua ise vastav kasutajaliides ehk klientrakendus&lt;br /&gt;
# Kasutada mõnd abitööriista HTTP päringute koostamiseks. Soovitus: [https://chrome.google.com/webstore/detail/aejoelaoggembcahagimdiliamlcdmfm &amp;quot;Chrome plugin&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
Autentimisandmed rakendusele saab luua dokumentatsiooni lehel oleva vormi kaudu (andmed saadetakse e-mailile). Kasutajakonto saab luua juba API päringute abil.&lt;br /&gt;
&lt;br /&gt;
N.B. Juhul, kui uute API tokenite loomine ebaõnnestub (serveri mailiserver on veidi ebastabiilne), võib kasutada ka järgnevaid andmeid:&lt;br /&gt;
&lt;br /&gt;
Secret: fowhosurtothab&lt;br /&gt;
Token: fleraffahskuff&lt;br /&gt;
&lt;br /&gt;
=== Kood ===&lt;br /&gt;
&lt;br /&gt;
Lähtekoodi saab [http://api.sqroot.eu/anroots-challengo-a6da30942c8c.tar.gz siit]. Kohtmasinasse paigaldamiseks tuleb alla laadida [http://kohanaframework.org Kohana] framework ning paigaldada application/bootstrap.php failis märgitud moodulid. Andmebaasi schema on database kaustas. Kood on testitud ainult Linux platvormil LAMP stack-iga.&lt;br /&gt;
&lt;br /&gt;
== Klientrakendus ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 5. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Klientrakendus on Android rakendus, mis kuvab teater NO99 etendusi ning võimaldab punktide alusel pileteid osta. Tegu on jQuery Mobile pordiga Android platvormile.&lt;br /&gt;
&lt;br /&gt;
Rakendus suhtleb Play! raamistikus kirjutatud API-ga.&lt;br /&gt;
&lt;br /&gt;
Rakenduse kood asub [https://bitbucket.org/anroots/punkt99-android BitBucketis].&lt;br /&gt;
&lt;br /&gt;
= Meeskonna Liikmed =&lt;br /&gt;
&lt;br /&gt;
* Ando Roots &#039;&#039;anroots@itcollege.ee&#039;&#039;&lt;br /&gt;
* Mikk Pärast &#039;&#039;mparast@itcollege.ee&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Liitumine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for t in tudengid:&lt;br /&gt;
  if !t.laisk &amp;amp;&amp;amp; t.oskab_progreda:&lt;br /&gt;
    kutsu_meeskonda(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ mail -s &amp;quot;Harold&amp;quot; anroots@itcollege.ee&amp;lt;/pre&amp;gt;&lt;br /&gt;
Eeldan varasemaid teadmisi ning usaldusväärsust. Soovin, et asi ei lõppeks jälle nii, et projektijuht on kaitsmiseelsel õhtul üleval ja lõpetab üksinda projekti.&lt;br /&gt;
Ole nii kena ja anna huvist märku enne &#039;&#039;&#039;26. veebruari&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Lisad =&lt;br /&gt;
&lt;br /&gt;
[http://jaa.ee Kes on Harold?]&lt;br /&gt;
&lt;br /&gt;
== Challengo ==&lt;br /&gt;
&lt;br /&gt;
Challengo.me on Garage48 Tallinn 2011 raames alustatud veebiteenus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A social network of themed challenges, comes with a Karma profile and level-system.&lt;br /&gt;
Revenues from ads on the mobile version.&lt;br /&gt;
Team members: Ando Roots, Kristo Vaher, Valeria Gasik, Jelena Savinen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube v=&amp;quot;pPfHJD5F7sc&amp;quot; /&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=pPfHJD5F7sc Jelena tutvustab Challengo teenust]&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=48667</id>
		<title>Meeskond &quot;Harold&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=48667"/>
		<updated>2012-05-24T06:56:11Z</updated>

		<summary type="html">&lt;p&gt;Anroots: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
{| style=&amp;quot;width:100%;height: 40px; background-color:#dff0d8;border: 1px solid ##468847;color:#468847;padding:10px;font-size:16px;font-weight:bold-webkit-border-radius: 8px;-moz-border-radius: 8px;border-radius: 8px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
| Täna kaitseme klientrakendust.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Tegemist on IT Kolledži aine raames eksamieeldust taotleva projektimeeskonna töö dokumentatsiooniga.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 30em; padding-left: 2em; float: right; font-size: 95%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Meeskond &#039;&#039;&amp;quot;Harold&amp;quot;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Aine:&#039;&#039;&#039;&lt;br /&gt;
| [[:Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhend:&#039;&#039;&#039;&lt;br /&gt;
| [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2012 Juhend]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Tüüp:&#039;&#039;&#039;&lt;br /&gt;
| Projekt&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Anroots]]&amp;lt;br /&amp;gt;[[User:Mparast]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhendajad:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Mposka]]&amp;lt;br /&amp;gt;[[User:Kraspel]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Semester:&#039;&#039;&#039;&lt;br /&gt;
| 2011/2012 kevad&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Lingid&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|API Demo&lt;br /&gt;
|[http://api.sqroot.eu http://api.sqroot.eu]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Projekt =&lt;br /&gt;
&lt;br /&gt;
Projekti esimesed kaks osa keskenduvad veebiteenuse &amp;quot;Challengo&amp;quot; taasloomisele. Projekti esimene osa valmistab ette peamis(t)e päringu(te) XML vastuse struktuuri, projekti teine osa (veebiteenuse loomine) ehitab vastava API.&lt;br /&gt;
&lt;br /&gt;
== Korraldus ==&lt;br /&gt;
&lt;br /&gt;
Projektiga seonduv dokumentatsioon (erandiks on käesolev wiki leht), kasutajale nähtavad tekstid ning lähtekood on kirjutatud inglise keeles. Võimalusel on kood kirjutatud hilisema I18n toe võimaldamiseks.&lt;br /&gt;
&lt;br /&gt;
Koodi haldab GitHub repositoorium, juurdepääsu saamiseks tuleb projektijuhile saata oma GitHub kasutajanimi (või &#039;&#039;pull request&#039;&#039;). Tegemist vajavaid töid näeb GitHub lehel &#039;&#039;Issues&#039;&#039; vahekaardilt ning asjakohane dokumentatsioon (API) on GitHub wiki alamjaotises.&lt;br /&gt;
&lt;br /&gt;
Lähtekood on põhjalikult kommenteeritud, muud, eraldiseisvat dokumentatsiooni koodi kohta on minimaalselt.&lt;br /&gt;
&lt;br /&gt;
== XML Andmefailid ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 3. märts 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
XML andmefail kirjeldab veebiteenuse &amp;quot;[http://garage48.org/blogger/projects-on-garage48-tallinn-2011 Challengo]&amp;quot; andmeid. Andmed asuvad MYSQL andmebaasis, mille struktuur on kirjeldatud ERD mudeliga [[File:Harold_Challengo_MYSQL_ERD.png|200px|thumb|MYSQL ERD mudel]]. XML formaadis andmeid väljastab serveris asuv PHP API. Järgnevalt toodud XML näited ei pruugi projekti esimese osa nõudmiste tõttu olla vastavuses teise osana valmiva veebiteenuse tegeliku väljundiga.&lt;br /&gt;
&lt;br /&gt;
Faile saab vaadata ka võrgust: http://enos.itcollege.ee/~anroots/challengo/xml/. Soovitatav on seda teha just XSLT stiilifaili jaoks (http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml).&lt;br /&gt;
&lt;br /&gt;
=== XML [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml link]]===&lt;br /&gt;
&lt;br /&gt;
Järgnevalt on toodud lõik kasutaja praeguste väljakutsete päringust. Kasutajal on parajasti kaks aktiivset väljakutset, igal väljakutsel on veidi meta-infot, mingi hulk ülesandeid (tasks) ning igal ülesandel on üks või mitu autasu (rewards).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;Response.xsl&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!-- List of user&#039;s current challenges --&amp;gt;&lt;br /&gt;
&amp;lt;challenges&amp;gt;&lt;br /&gt;
  &amp;lt;!-- First challenge, started by the user --&amp;gt;&lt;br /&gt;
  &amp;lt;challenge id=&amp;quot;4&amp;quot; tasks=&amp;quot;6&amp;quot; progress=&amp;quot;17%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;The Improgrupp Jaa!&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Inspired by a true story, the Improgrupp Jaa! contains tasks that challenge ones spontaniety and social courage.&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;duration&amp;gt;1209600&amp;lt;/duration&amp;gt;&lt;br /&gt;
    &amp;lt;points_required&amp;gt;18&amp;lt;/points_required&amp;gt;&lt;br /&gt;
    &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;!-- Each challenge has a number of tasks that have to be completed.--&amp;gt;&lt;br /&gt;
    &amp;lt;!-- No challenge can be completed before earned points from tasks (rewards) exceed the points_required field --&amp;gt;&lt;br /&gt;
    &amp;lt;tasks max_points=&amp;quot;26&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;19&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Make a present to a homeless person&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;If you can read this, you&#039;re probably among the luckier ones. Do something for the ones who can&#039;t.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;!-- Each task yields rewards on completion. Rewards are &amp;quot;power&amp;quot; points of different categories.--&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;20&amp;quot; completed=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment a stranger&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Make a sincere compliment to someone you don&#039;t know. We could do with more praise where it&#039;s due.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;21&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Do volunteer work&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Offer yourself as a volunteer to an event or a cause.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;22&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Perform to a security camera&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Do a little dance to a security camera. It shouldn&#039;t be illegal...probably. Don&#039;t get in trouble!&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;23&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment someone for a job well done&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;When was the last time you thanked the janitor?&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;24&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Take a day off&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;This is mostly for work-a-holics: rest for a while.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
    &amp;lt;/tasks&amp;gt;&lt;br /&gt;
  &amp;lt;/challenge&amp;gt;&lt;br /&gt;
&amp;lt;/challenges&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT (stiilifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsl link]] ===&lt;br /&gt;
&lt;br /&gt;
Toodud stiilifail muudab ülaltoodud XML vastuse inimesele kergemini loetavaks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html class=&amp;quot;no-js&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;Ando Roots&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Challengo Response&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.css&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.responsive.css&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Challengo API response&amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
            The following is a list of challenges reported by the XML API.&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;!-- Go over each challenge --&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;challenges/challenge&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h2&amp;gt;&lt;br /&gt;
              &lt;br /&gt;
              &amp;lt;!-- Challenge badge image and title --&amp;gt;&lt;br /&gt;
              &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;&lt;br /&gt;
                  http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/img&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
              &amp;lt;!-- Challenge progress, if applicable --&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:if test=&amp;quot;@progress&amp;quot;&amp;gt;&lt;br /&gt;
                (&amp;lt;span&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@progress&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/span&amp;gt;)&lt;br /&gt;
              &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
            &amp;lt;/h2&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;p class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- Table for some challenge meta-info --&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered span4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Points required to complete:&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;points_required&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Time left (hours):&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;round(duration div 1800)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;!-- List all challenge tasks --&amp;gt;&lt;br /&gt;
            &amp;lt;h3 style=&amp;quot;margin-top:140px&amp;quot;&amp;gt;Tasks (&amp;lt;xsl:value-of select=&amp;quot;@tasks&amp;quot;/&amp;gt;)&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered table-striped table-condensed&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;thead&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;ID&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Title&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Badge&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Rewards&amp;lt;/th&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/thead&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;tasks/task&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;tr&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Color the row gray if task is completed --&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;@completed&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:attribute name=&amp;quot;class&amp;quot;&amp;gt;&lt;br /&gt;
                        help-block&lt;br /&gt;
                      &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                      &amp;lt;/img&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:for-each select=&amp;quot;rewards/reward&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;li&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=1&amp;quot;&amp;gt;&lt;br /&gt;
                              Compassion&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=2&amp;quot;&amp;gt;&lt;br /&gt;
                              Strength&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=3&amp;quot;&amp;gt;&lt;br /&gt;
                              Intelligence&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;span&amp;gt;&lt;br /&gt;
                              &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                            &amp;lt;/span&amp;gt;&lt;br /&gt;
                          &amp;lt;/li&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;!-- End of challenge task table --&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;!-- End of challenge --&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD (skeemifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsd link]] ===&lt;br /&gt;
&lt;br /&gt;
Skeemifail kirjeldab päringu vastuse XML struktuuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;challenges&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;challenge&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;duration&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;points_required&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;tasks&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;task&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rewards&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;reward&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:extension base=&amp;quot;xs:unsignedByte&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:attribute name=&amp;quot;power_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;completed&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;max_points&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;tasks&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;progress&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Veebiteenus ==&lt;br /&gt;
&#039;&#039;Tähtaeg 30. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:challengo_req2.png|300px|thumb|Näidis HTTP API päringust]]&lt;br /&gt;
&lt;br /&gt;
Veebiteenusena realiseeriti API, mis võimaldab klientide registreerimist, haldamist ning Challengo teenuse põhifunktsionaalsuse pakkumist HTTP päringute kaudu. API loomisel kasutati RESTful arhitektuuri. Täpsem dokumentatsioon asub API lehel: [http://api.sqroot.eu &amp;quot;API dokumentatsioon&amp;quot;] (tegemist on ajutise aadressiga, mis võetakse maha aine lõppemisel).&lt;br /&gt;
&lt;br /&gt;
=== Kriteeriumid ===&lt;br /&gt;
&lt;br /&gt;
Kõik õppejõu poolt esitatud kriteeriumid on täidetud. Erikokkuleppe alusel on projekti keeleks PHP.&lt;br /&gt;
&lt;br /&gt;
Kriteeriumid:&lt;br /&gt;
&lt;br /&gt;
* Teenuse pakkumist - API suudab vastata talle esitatud, valideeruvatele (vt. API dokumentatsiooni) päringutele&lt;br /&gt;
* Teenuse kasutajate tuvastamist ning haldamist - Kasutajatuvastus toimub nime/parooli alusel HTTP Basic Authentication protokollil, ideaalis üle HTTPS-i. Süsteemi sisemiselt on kasutajatel rollid, mida saab kasutada halduseks, näiteks LOGIN rolli eemaldamisel ei saa kasutaja enam sisse logida.&lt;br /&gt;
* Teenuse kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes - Kõik API päringud käivad API tokeni alusel. Tokeni kasutaja päringud logitakse nii logifaili kui andmebaasi, neid on sealt võimalik pärida. Lisaks on igal tokenil päringulimiit (tunnis), selle ületamisel päringuid eiratakse. Tokeneid saab tühistada, mis tähendab, et klientrakenduse päringuid ei töödelda mingil juhul.&lt;br /&gt;
&lt;br /&gt;
=== Testimine ===&lt;br /&gt;
&lt;br /&gt;
Veebiteenusel ei ole eraldi kasutajaliidest. Testimiseks on kaks varianti:&lt;br /&gt;
&lt;br /&gt;
# Luua ise vastav kasutajaliides ehk klientrakendus&lt;br /&gt;
# Kasutada mõnd abitööriista HTTP päringute koostamiseks. Soovitus: [https://chrome.google.com/webstore/detail/aejoelaoggembcahagimdiliamlcdmfm &amp;quot;Chrome plugin&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
Autentimisandmed rakendusele saab luua dokumentatsiooni lehel oleva vormi kaudu (andmed saadetakse e-mailile). Kasutajakonto saab luua juba API päringute abil.&lt;br /&gt;
&lt;br /&gt;
N.B. Juhul, kui uute API tokenite loomine ebaõnnestub (serveri mailiserver on veidi ebastabiilne), võib kasutada ka järgnevaid andmeid:&lt;br /&gt;
&lt;br /&gt;
Secret: fowhosurtothab&lt;br /&gt;
Token: fleraffahskuff&lt;br /&gt;
&lt;br /&gt;
=== Kood ===&lt;br /&gt;
&lt;br /&gt;
Lähtekoodi saab [http://api.sqroot.eu/anroots-challengo-a6da30942c8c.tar.gz siit]. Kohtmasinasse paigaldamiseks tuleb alla laadida [http://kohanaframework.org Kohana] framework ning paigaldada application/bootstrap.php failis märgitud moodulid. Andmebaasi schema on database kaustas. Kood on testitud ainult Linux platvormil LAMP stack-iga.&lt;br /&gt;
&lt;br /&gt;
== Klientrakendus ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 5. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Klientrakendus on Windows Phone 7 klient Challengo teenusele, mis kasutab projekti esimeses osas koostatud XML andmestruktuuri.&lt;br /&gt;
&lt;br /&gt;
XML-i väljastab Challengo API, mis vajab veel kirjutamist. Challengo on realiseeritud PHP-s.&lt;br /&gt;
&lt;br /&gt;
Rakenduse kood asub [https://bitbucket.org/anroots/punkt99-android BitBucketis].&lt;br /&gt;
&lt;br /&gt;
=== Feature set ===&lt;br /&gt;
&lt;br /&gt;
* Autentimine&lt;br /&gt;
** Login&lt;br /&gt;
** Logout&lt;br /&gt;
* Nimekiri aktiivsetest väljakutsetest ja nende staatustest&lt;br /&gt;
** Nimekiri väljakutse alamülesannetest ja nende staatustest&lt;br /&gt;
* Väljakutse märkimine lõpetatuks&lt;br /&gt;
** Alamülesande märkimine lõpetatuks&lt;br /&gt;
* Uue väljakutse valimine nimekirjast&lt;br /&gt;
** Väljakutse detailide ja alamülesannete vaatamine&lt;br /&gt;
* Väljakutse &amp;quot;hülgamine&amp;quot; (&#039;&#039;abandon&#039;&#039;)&lt;br /&gt;
* Kasutaja statistika näitamine&lt;br /&gt;
** Praegune punktiseis&lt;br /&gt;
** Lõpetatud väljakutsed&lt;br /&gt;
*** Lõpetatud alamülesanded&lt;br /&gt;
** Teenitud märgid&lt;br /&gt;
&lt;br /&gt;
= Meeskonna Liikmed =&lt;br /&gt;
&lt;br /&gt;
* Ando Roots &#039;&#039;anroots@itcollege.ee&#039;&#039;&lt;br /&gt;
* Mikk Pärast &#039;&#039;mparast@itcollege.ee&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Liitumine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for t in tudengid:&lt;br /&gt;
  if !t.laisk &amp;amp;&amp;amp; t.oskab_progreda:&lt;br /&gt;
    kutsu_meeskonda(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ mail -s &amp;quot;Harold&amp;quot; anroots@itcollege.ee&amp;lt;/pre&amp;gt;&lt;br /&gt;
Eeldan varasemaid teadmisi ning usaldusväärsust. Soovin, et asi ei lõppeks jälle nii, et projektijuht on kaitsmiseelsel õhtul üleval ja lõpetab üksinda projekti.&lt;br /&gt;
Ole nii kena ja anna huvist märku enne &#039;&#039;&#039;26. veebruari&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Lisad =&lt;br /&gt;
&lt;br /&gt;
[http://jaa.ee Kes on Harold?]&lt;br /&gt;
&lt;br /&gt;
== Challengo ==&lt;br /&gt;
&lt;br /&gt;
Challengo.me on Garage48 Tallinn 2011 raames alustatud veebiteenus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A social network of themed challenges, comes with a Karma profile and level-system.&lt;br /&gt;
Revenues from ads on the mobile version.&lt;br /&gt;
Team members: Ando Roots, Kristo Vaher, Valeria Gasik, Jelena Savinen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube v=&amp;quot;pPfHJD5F7sc&amp;quot; /&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=pPfHJD5F7sc Jelena tutvustab Challengo teenust]&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Category:V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine&amp;diff=48347</id>
		<title>Category:Võrgurakendused II: hajussüsteemide ehitamine</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Category:V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine&amp;diff=48347"/>
		<updated>2012-05-21T08:15:07Z</updated>

		<summary type="html">&lt;p&gt;Anroots: /* Projekti kaitsmisele registreerumine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Võrgurakendused II: hajussüsteemide ehitamine=&lt;br /&gt;
==Eesmärk==&lt;br /&gt;
Õppeaine eesmärgiks on tutvustada õppijale XML märgendikeelel baseeruvaid hajuslahendusi ja nende loomise võimalusi ning arendada õppijates .Net raamistiku vahenditega tarkvara arendamisoskuseid&lt;br /&gt;
&lt;br /&gt;
==Lühitutvustus==&lt;br /&gt;
Õppeaines käsitletakse XML märgendikeelt ning veebiteenuseid.  Kursuse käigus disainitakse, koostatakse ja testitakse veebiteenustel ning XML märgendikeelel põhinevaid lahendusi.&lt;br /&gt;
&lt;br /&gt;
==Õpiväljundid==&lt;br /&gt;
* Õppija oskab kasutada XML märgendikeelt keerulisema strukuuriga andmete hoidmiseks ja esitamiseks struktureeritud kujul.&lt;br /&gt;
* Õppija oskab avalikult kättesaadavate juhendite abil koostada lihtsamaid klientrakendusi levinud veebiteenustele.&lt;br /&gt;
* Õppija oskab luua lihtsamaid veebiteenuseid kasutades selleks .Net raamistiku tehnoloogiaid ning vahendeid.&lt;br /&gt;
* Õppija teab veebiteenuste turvamiseks kasutatavaid tehnoloogiaid ja vahendeid ning oskab leid tavaolukorras rakendada.&lt;br /&gt;
* Õppija teab ning oskab kirjeldada hajusrakenduste kasutusvaldkondi ning nende arhitektuure.&lt;br /&gt;
* Õppija oskab töötada 3-5 liikmelises meeskonnas.&lt;br /&gt;
&lt;br /&gt;
==Õppejõud==&lt;br /&gt;
Aine läbiviijateks on õppejõud Mait Poska ja Kaarel Raspel.&lt;br /&gt;
&lt;br /&gt;
Mait Poska kanda on enamasti loengud ja Kaarel Raspeli kanda praktikumid.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;ins&amp;gt;Kontaktid:&amp;lt;/ins&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Kaarel Raspel&lt;br /&gt;
* kaarel.raspel&amp;lt;ät&amp;gt; gmail.com&lt;br /&gt;
* Skype: vellotis&lt;br /&gt;
* +372 522 2468&lt;br /&gt;
&lt;br /&gt;
Mait Poska&lt;br /&gt;
* mait.poska&amp;lt;ät&amp;gt; itcollege.ee&lt;br /&gt;
* Skype: minamait&lt;br /&gt;
* +372 53 469 734&lt;br /&gt;
&lt;br /&gt;
==Hinne==&lt;br /&gt;
Aine hinde kujunemine:&lt;br /&gt;
* &amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;Eeldused&amp;lt;/span&amp;gt; (mille eest ei saa punkte)&lt;br /&gt;
** Kohal tuleb käia vähemalt &#039;&#039;&#039;50% praktikumidest&#039;&#039;&#039;&lt;br /&gt;
*** Kes seda nõuet ei täida peavad viimases praktikumis sooritama komplekstesti, mis sisaldab endas praktilisi ülesandeid.&lt;br /&gt;
**&amp;lt;ins&amp;gt;Grupitöö kõik osad on realiseeritud minimaalse tulemusega 51%&amp;lt;/ins&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--Hinde kujunemisel arvestatakse kahte tööd:&lt;br /&gt;
alamosast:&lt;br /&gt;
**XML andmefail&lt;br /&gt;
**Veebirakendus&lt;br /&gt;
**Veebiteenus&lt;br /&gt;
*Eksam(45%), mis koosneb kahest osast:&lt;br /&gt;
**Teooria, mis annab sellest 20%&lt;br /&gt;
**Praktiline osa, mis annab sellest 25%&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;ins&amp;gt;Hinne&amp;lt;/ins&amp;gt; (&#039;&#039;&#039;100p / 100%&#039;&#039;&#039;) - Hinde kujunemisel arvestatakse kahte tööd:&lt;br /&gt;
** [[Kodutöö aines &amp;quot;Võrgurakendused II: hajussüsteemide ehitamine&amp;quot; 2012]], mis moodustab hindest 55%. &#039;&#039;&#039;55p&#039;&#039;&#039; (koosneb kolmest osast)&lt;br /&gt;
*** XML (xsd, xslt) &#039;&#039;&#039;10p&#039;&#039;&#039;&lt;br /&gt;
**** Retsensioonid kahe grupi XLM-i kohta &#039;&#039;&#039;2p+3p&#039;&#039;&#039;&lt;br /&gt;
*** Veebiteenus &#039;&#039;&#039;15p&#039;&#039;&#039;&lt;br /&gt;
**** Retsensioonid kahe grupi Veebiteenuse kohta &#039;&#039;&#039;2p+3p&#039;&#039;&#039;&lt;br /&gt;
*** Klientrakendused veebiteenusele &#039;&#039;&#039;15p&#039;&#039;&#039;&lt;br /&gt;
**** Retsensioonid kahe grupi Klientrakenduse kohta &#039;&#039;&#039;2p+3p&#039;&#039;&#039;&lt;br /&gt;
** &amp;lt;ins&amp;gt;Individuaalne teadmiste kontroll&amp;lt;/ins&amp;gt; &#039;&#039;&#039;45p&#039;&#039;&#039;&lt;br /&gt;
*** Teooria (Test) &#039;&#039;&#039;20p&#039;&#039;&#039; (tulemus vähemalt 51%)&lt;br /&gt;
*** Praktiline (Programmeerimine) &#039;&#039;&#039;25p&#039;&#039;&#039; (tulemus vähemalt 51%)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Hinne kujuneb järgmiselt:&lt;br /&gt;
* Iga grupitöö vahekaitsmine annab kuni 10 punkti (kokku siis 30 punkti)&lt;br /&gt;
* Lõppkaitsmine annab 30 punkti (kõik kolm tööd koos, koos paranduste ja täiendustega)&lt;br /&gt;
* Iga grupp saab lisaks iga liikme kohta 20 punkti, mis tuleb grupi sees vastavalt panusele jagada (näiteks kolmeliikmeline grupp saab 60 punkti, neljaliikmeline 80 punkti jne).&lt;br /&gt;
* Valikvastustega test (kuni 20 punkti)&lt;br /&gt;
* Eksamieeldus on see, et tuleb anda tähtajaks neli hinnangut (üks hinnang XML failile, üks veebiteenusele, üks veebiteenustele tehtud rakendustele ning üks projektile kokkuvõtvalt).&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--Aasta 2012(praegu) [[Kodutöö aines &amp;quot;Võrgurakendused II: hajussüsteemide ehitamine&amp;quot; 2012]]&lt;br /&gt;
&lt;br /&gt;
Aastal 2011 olnud teemad[[Kodutöö aines &amp;quot;Võrgurakendused II: hajussüsteemide ehitamine&amp;quot; 2011]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Võrgurakendused II: 2011 kevadel valminud kodutööd]]&lt;br /&gt;
&lt;br /&gt;
==Tähtajad==&lt;br /&gt;
&amp;lt;!--* Teema ning meeskonna koosseis peab olema õppejõuga kooskõlastatud hiljemalt 21. veebruar 2011.--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;XML fail&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2012#XML_andmefail NB! Täpsem info]&lt;br /&gt;
** XML fail, stiilifail ja skeemifail peavad olema valmis ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;3. märts 2012&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid XML-failide kohta peavad tehtud olema &#039;&#039;&#039;17. märts 2012&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Veebiteenus&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2012#Veebiteenus NB! Täpsem info]&lt;br /&gt;
** Veebiteenus peab olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;30. aprill 2012&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid veebiteenuste kohta peavad tehtud olema &#039;&#039;&#039;13. mai 2012&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Klientrakendused&#039;&#039;&#039; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2012#Klientrakendus NB! Täpsem info]&lt;br /&gt;
** Klientrakendused peavad olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;20. mai 2012&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid klientrakenduste kohta peavad tehtud olema &#039;&#039;&#039;27. mai 2012&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--* &#039;&#039;&#039;Meeskonna kokkuvõttev aruanne&#039;&#039;&#039;&lt;br /&gt;
** Meeskonnatöö kokkuvõttev aruanne peab olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt 8.mai 2012&lt;br /&gt;
** Arvamused Meeskonnatöö kokkuvõtva aruande ja esitluse kohta tuleb esitada hiljemalt päev enne eksamit&lt;br /&gt;
** &#039;&#039;&#039;Meeskonna kokkuvõttev aruanne ja töö lõplik tulemus&#039;&#039;&#039; tuleb esitleda!&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Retsensioonid==&lt;br /&gt;
&lt;br /&gt;
Iga grupp peab tegema lisaks igale grupitööle vastavalt ka 2 retsensiooni. Retsensioonid võib teha vabalt valitud gruppide tööde kohta. Tingimuseks on see, et ühe töö kohta saab teha maksimaalselt kolm retsensiooni.&lt;br /&gt;
&lt;br /&gt;
Seega kokku tuleb esitada 6 retsensiooni ühel grupil.&lt;br /&gt;
&lt;br /&gt;
Kui grupp on teinud vaid ühe retsensiooni, siis selle eest saab 2 punkti. Kui sellele lisandub ka teine retsensioon, siis teise retsensiooni eest saab 3 punkti. Kokku 5 punkti.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Lisaks iga grupp, kelle töö kohta retsensioon tehakse saab iga töö kohta boonuseks ühe punkti. Seega võib koguneda igale grupile kokku 6 boonuspunkti kolme töö eest.--&amp;gt;&lt;br /&gt;
&amp;lt;ins&amp;gt;Lisaks tuleb silmas pidada retsensioonide minimaalseid pikkusi projektide kohta.&amp;lt;/ins&amp;gt; [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2012#Retsensioonid Retsensioonide minimaalsed pikkused]&lt;br /&gt;
&lt;br /&gt;
==Meeskonnad==&lt;br /&gt;
Ühte meeskonda võib kuuluda 3 kuni 4 tudengit. Gruppi kuuluvate tudengite nimekiri kinnitatakse esimese projekti esitamisega.&lt;br /&gt;
&lt;br /&gt;
=== [[Hello Kitty]] ===&lt;br /&gt;
=== [[TTiim]] ===&lt;br /&gt;
=== [[Meeskond &amp;quot;Harold&amp;quot;|Harold]] ===&lt;br /&gt;
&lt;br /&gt;
===[[Meeskond &amp;quot;WP&amp;quot;]]===&lt;br /&gt;
&lt;br /&gt;
===Meeskond &amp;quot;[[-.-]]&amp;quot;===&lt;br /&gt;
* Erki Miilberg (projektijuht)&lt;br /&gt;
* Kalev Vallsalu &lt;br /&gt;
* Oliver Naaris&lt;br /&gt;
* Margo Kuustik&lt;br /&gt;
&lt;br /&gt;
=== Meeskond &amp;quot;[[PhoneBook]]&amp;quot; ===&lt;br /&gt;
*Lauri Jansen&lt;br /&gt;
*Tanel Jüris&lt;br /&gt;
*Madis Rääk&lt;br /&gt;
&lt;br /&gt;
===Meeskond &amp;quot;[[LLL]]&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
* Joonas Püüa&lt;br /&gt;
* Janno Toomingas&lt;br /&gt;
* Janek Kople&lt;br /&gt;
* Roland Krindal&lt;br /&gt;
&lt;br /&gt;
===Meeskond &amp;quot;[[Peeter VR2]]&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
* Lennart Lüsi&lt;br /&gt;
* Kairo Koik&lt;br /&gt;
* Marek Kikas&lt;br /&gt;
* Kaivar Kull&lt;br /&gt;
&lt;br /&gt;
===[[Meeskond &amp;quot;.NOT&amp;quot;]]===&lt;br /&gt;
* Martin Kosk&lt;br /&gt;
* Kalmer Tart&lt;br /&gt;
* Martin Aarne&lt;br /&gt;
* Gert Glükmann&lt;br /&gt;
&lt;br /&gt;
==Projekti kaitsmisele registreerumine==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NB!&#039;&#039;&#039; Meeskonnad, kelle liikmed sooritavad neljapäevasel päeval ASP.NET arvestust, peaksid VRII projekti kaitsma esmaspäeval.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;21.05.2012&#039;&#039;&#039;&lt;br /&gt;
**14.00 - 14.20 [[Meeskond &amp;quot;.NOT&amp;quot;]]&lt;br /&gt;
**14.20-14.40&lt;br /&gt;
**14.40 - 15.00&lt;br /&gt;
**15.00-15.20&lt;br /&gt;
**15.20-15.40&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;24.05.2012&#039;&#039;&#039;&lt;br /&gt;
**10.00 - 10.20 &lt;br /&gt;
**10.20 - 10.40 [[Meeskond &amp;quot;Harold&amp;quot;]]&lt;br /&gt;
**10.40 - 11.00 Meeskond &amp;quot;[[PhoneBook]]&amp;quot;&lt;br /&gt;
**11.00-11.20 [[Meeskond &amp;quot;HM&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NB!&#039;&#039;&#039; Kõige tublimad teevad ka slaidiesitluse, kus selgub:&lt;br /&gt;
*Iga meeskonnaliikme panus ja liikmed&lt;br /&gt;
*Projekti üleüldine eesmärk&lt;br /&gt;
*Tööde kava&lt;br /&gt;
*Teostatud funktsionaalus&lt;br /&gt;
*Teostamata osad&lt;br /&gt;
*Enda arvamus projektist ning hindesoov&lt;br /&gt;
*Raskemad osad projekti juures&lt;br /&gt;
*Mida uut juurde õpiti&lt;br /&gt;
&lt;br /&gt;
=Teemad=&lt;br /&gt;
=XML failivorming ja sellega seotud tehnoloogiad=&lt;br /&gt;
&lt;br /&gt;
==XML failivorming==&lt;br /&gt;
===Loengusalvestused===&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* &#039;&#039;&#039;Esimese loengu salvestus http://enos.itcollege.ee/~htahis/VRII/WR2%20-%20Loeng%201/WR2%20-%20Loeng%201.html&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Teise loengu salvestus http://echo360.e-uni.ee/ess/echo/presentation/9264dd7c-990a-4e3f-9045-1a7a5e04039b&#039;&#039;&#039;&lt;br /&gt;
** Teise loengu näited: http://enos.itcollege.ee/~htahis/VRII/Praktikum2%20(loeng2)/&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Esimese loengu salvestus, kus räägiti XML andmefailist asub siin:  http://echo360.e-uni.ee/ess/echo/presentation/d590aaa6-2d08-4852-9db6-42041cc7e438 &#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Teise loengu salvestus, kus räägiti XML skeemidest ja transformatsioonidest asub siin: http://echo360.e-uni.ee/ess/echo/presentation/fa1431fb-3b80-42a3-a7de-f18fe6a1d3ae &#039;&#039;&#039;&lt;br /&gt;
**Teises loengus tehtud näited, asuvad siin: http://enos.itcollege.ee/~mposka/Vorgurakendused_II_2012/Paevaope/Loengud/Loeng2/&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Kolmas loeng, kus räägiti LINQ&#039;st: http://echo360.e-uni.ee/ess/echo/presentation/bbb940ea-fb20-49b4-9d5b-7b2e41f1ac39 &#039;&#039;&#039;&lt;br /&gt;
**Kolmandas loengus tehtud näited asuvad siin: http://enos.itcollege.ee/~mposka/Vorgurakendused_II_2012/Paevaope/Loengud/Loeng3/&lt;br /&gt;
&lt;br /&gt;
===Teooria=== &lt;br /&gt;
* XML failid&lt;br /&gt;
**  Kippar, J. &amp;quot;XML rakendused&amp;quot;, TLU:2009 http://minitorn.tlu.ee/~jaagup/kool/java/kursused/10/xmlrak/trykk/xmlrak.pdf&lt;br /&gt;
** XMLi rakendused ainekursuse leht by Jaagup Kippar http://minitorn.tlu.ee/~jaagup/kool/java/kursused/10/xmlrak/juht.html&lt;br /&gt;
** Introduction to XML by w3schools.com http://www.w3schools.com/xml/xml_whatis.asp&lt;br /&gt;
* XSLT - XML failide transformeerimine ehk stiilifailid&lt;br /&gt;
** XSLT Tutorial by w3schools.com http://www.w3schools.com/xsl/default.asp&lt;br /&gt;
&lt;br /&gt;
===Praktika===&lt;br /&gt;
* [[Praktikum: XML failide loomine, VR2.1]]&lt;br /&gt;
* [[Linq_päringukeel|Praktikum: LINQ päringute tegemine XML-i peal, VR2.2]]&lt;br /&gt;
** [http://enos.itcollege.ee/~kraspel/VRII/%5b2012.02.09%5d%20Praktikum%202%20/ Praktikumi näide]&lt;br /&gt;
* [[Praktikum: XML failide valideerimine (XSD, DTD) ning XML stiilide (XSLT) loomine , VR2.3]]&lt;br /&gt;
** [http://enos.itcollege.ee/~kraspel/VRII/%5b2012.02.16%5d%20Praktikum%203/ Praktikumi näide]&lt;br /&gt;
* [[Praktikum: XML failidega töötamine (kokkuvõttev praktikum), VR2.4]]&lt;br /&gt;
** [http://enos.itcollege.ee/~kraspel/VRII/%5b2012.02.23%5d%20Praktikum%204/ Praktikumi näide]&lt;br /&gt;
* [[Praktikum: Lihtne andmebaasil veebiteenus, VR2.6]]&lt;br /&gt;
** [http://enos.itcollege.ee/~kraspel/VRII/%5b2012.03.08%5d%20Praktikum%206/ Praktikumi näide]&lt;br /&gt;
* [[Praktikum: Veebiteenuse loomine Windows Communication Foundation abil, VR2.7]]&lt;br /&gt;
** [http://enos.itcollege.ee/~kraspel/VRII/%5b2012.03.15%5d%20Praktikum%208/ Praktikumi näide]&lt;br /&gt;
* Praktikum: Object Orientated crash, VR2.8&lt;br /&gt;
** [http://enos.itcollege.ee/~kraspel/VRII/%5b2012.03.22%5d%20Praktikum%209/ Praktikumi näide]&lt;br /&gt;
* [[Praktikum: Windows Communication Foundation teenuse turvamine, VR2.9]]&lt;br /&gt;
** [http://enos.itcollege.ee/~kraspel/VRII/%5b2012.04.05%5d%20Praktikum%2010/ Praktikumi näide]&lt;br /&gt;
* [[Praktikum: Windows Communication Foundation teenuse turvamine jätk, VR2.10]]&lt;br /&gt;
** [http://enos.itcollege.ee/~kraspel/VRII/%5b2012.04.13%5d%20Praktikum%2011/ Praktikumi näide]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[Praktikum: XML failide loomine vol 2, VR2.2]]&lt;br /&gt;
* [[Praktikum: XML failide lugemine ja muutmine .Net vahenditega, VR2.3]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Veebiteenused=&lt;br /&gt;
==Loengud==&lt;br /&gt;
* &#039;&#039;&#039; Neljas loeng: http://echo360.e-uni.ee/ess/echo/presentation/7b97f540-e6e1-4bbb-99c3-04e9833b690b &#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039; Viies loeng. Lihtsa veebiteenuse loomise algus: http://echo360.e-uni.ee/ess/echo/presentation/7babae6b-fd76-4564-b60b-d30f82d3d2cf&lt;br /&gt;
* &#039;&#039;&#039; Kuues loeng. &amp;lt;i&amp;gt;Windows Communication Foundation&amp;lt;/i&amp;gt;: http://echo360.e-uni.ee/ess/echo/presentation/78ee4f6d-e7d5-47e0-92b9-824331027bbd&lt;br /&gt;
* &#039;&#039;&#039; [http://echo360.e-uni.ee/ess/echo/presentation/8c5b7bba-7f5f-4a2c-b143-473ea810ac34 Loeng 19.03.2012]&lt;br /&gt;
* &#039;&#039;&#039; [http://echo360.e-uni.ee/ess/echo/presentation/8c5b7bba-7f5f-4a2c-b143-473ea810ac34 Loeng 02.04.2012]&lt;br /&gt;
* &#039;&#039;&#039; [http://echo360.e-uni.ee/ess/echo/presentation/6aba1a81-fab2-418d-bb70-969dbe97de9e Loeng 09.04.2012]&lt;br /&gt;
&lt;br /&gt;
==Veebiteenuste loomine==&lt;br /&gt;
* ASP.NET Web Services http://msdn.microsoft.com/en-us/library/t745kdsh.aspx&lt;br /&gt;
* Creating and Consuming .NET Web Services in 5 Easy Steps http://articles.sitepoint.com/article/net-web-services-5-steps&lt;br /&gt;
&lt;br /&gt;
==Andmebaasiga ühendumine==&lt;br /&gt;
* Database Connectivity using WebService http://www.c-sharpcorner.com/UploadFile/raj1979/DatabaseWebService01142008011107AM/DatabaseWebService.aspx&lt;br /&gt;
&lt;br /&gt;
==Veebiteenuste turvamine==&lt;br /&gt;
* Securing ASP.Net Web Services with Forms Authentication http://dotnetslackers.com/articles/aspnet/Securing-ASP-Net-Web-Services-with-Forms-Authentication.aspx&lt;br /&gt;
&lt;br /&gt;
==Praktika==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[Praktikum: Lihtne andmebaasil veebiteenus, VR2.6]]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[Praktikum: Lihtne andmebaasil veebiteenus 2 (mitme tabeliga), VR2.7]]&lt;br /&gt;
* [[Praktikum: Rollipõhine kasutajahaldus veebiteenuses, VR2.8]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Veebiteenuste kasutamine=&lt;br /&gt;
==Praktika==&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[Praktikum: Flickr&#039;i veebiteenuse rakendus, VR2.10]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
[[Praktikum: Flickr&#039;i veebiteenusele klientrakenduse loomine]]&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=47612</id>
		<title>Meeskond &quot;Harold&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=47612"/>
		<updated>2012-05-01T13:38:05Z</updated>

		<summary type="html">&lt;p&gt;Anroots: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
{| style=&amp;quot;width:100%;height: 40px; background-color:#dff0d8;border: 1px solid ##468847;color:#468847;padding:10px;font-size:16px;font-weight:bold-webkit-border-radius: 8px;-moz-border-radius: 8px;border-radius: 8px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
| Praeguses faasis tegeleb tiim klientrakenduse arendusega&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Tegemist on IT Kolledži aine raames eksamieeldust taotleva projektimeeskonna töö dokumentatsiooniga.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 30em; padding-left: 2em; float: right; font-size: 95%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Meeskond &#039;&#039;&amp;quot;Harold&amp;quot;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Aine:&#039;&#039;&#039;&lt;br /&gt;
| [[:Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhend:&#039;&#039;&#039;&lt;br /&gt;
| [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2012 Juhend]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Tüüp:&#039;&#039;&#039;&lt;br /&gt;
| Projekt&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Anroots]]&amp;lt;br /&amp;gt;[[User:Mparast]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhendajad:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Mposka]]&amp;lt;br /&amp;gt;[[User:Kraspel]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Semester:&#039;&#039;&#039;&lt;br /&gt;
| 2011/2012 kevad&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Lingid&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|API Demo&lt;br /&gt;
|[http://api.sqroot.eu http://api.sqroot.eu]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Projekt =&lt;br /&gt;
&lt;br /&gt;
Projekti esimesed kaks osa keskenduvad veebiteenuse &amp;quot;Challengo&amp;quot; taasloomisele. Projekti esimene osa valmistab ette peamis(t)e päringu(te) XML vastuse struktuuri, projekti teine osa (veebiteenuse loomine) ehitab vastava API.&lt;br /&gt;
&lt;br /&gt;
== Korraldus ==&lt;br /&gt;
&lt;br /&gt;
Projektiga seonduv dokumentatsioon (erandiks on käesolev wiki leht), kasutajale nähtavad tekstid ning lähtekood on kirjutatud inglise keeles. Võimalusel on kood kirjutatud hilisema I18n toe võimaldamiseks.&lt;br /&gt;
&lt;br /&gt;
Koodi haldab GitHub repositoorium, juurdepääsu saamiseks tuleb projektijuhile saata oma GitHub kasutajanimi (või &#039;&#039;pull request&#039;&#039;). Tegemist vajavaid töid näeb GitHub lehel &#039;&#039;Issues&#039;&#039; vahekaardilt ning asjakohane dokumentatsioon (API) on GitHub wiki alamjaotises.&lt;br /&gt;
&lt;br /&gt;
Lähtekood on põhjalikult kommenteeritud, muud, eraldiseisvat dokumentatsiooni koodi kohta on minimaalselt.&lt;br /&gt;
&lt;br /&gt;
== XML Andmefailid ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 3. märts 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
XML andmefail kirjeldab veebiteenuse &amp;quot;[http://garage48.org/blogger/projects-on-garage48-tallinn-2011 Challengo]&amp;quot; andmeid. Andmed asuvad MYSQL andmebaasis, mille struktuur on kirjeldatud ERD mudeliga [[File:Harold_Challengo_MYSQL_ERD.png|200px|thumb|MYSQL ERD mudel]]. XML formaadis andmeid väljastab serveris asuv PHP API. Järgnevalt toodud XML näited ei pruugi projekti esimese osa nõudmiste tõttu olla vastavuses teise osana valmiva veebiteenuse tegeliku väljundiga.&lt;br /&gt;
&lt;br /&gt;
Faile saab vaadata ka võrgust: http://enos.itcollege.ee/~anroots/challengo/xml/. Soovitatav on seda teha just XSLT stiilifaili jaoks (http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml).&lt;br /&gt;
&lt;br /&gt;
=== XML [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml link]]===&lt;br /&gt;
&lt;br /&gt;
Järgnevalt on toodud lõik kasutaja praeguste väljakutsete päringust. Kasutajal on parajasti kaks aktiivset väljakutset, igal väljakutsel on veidi meta-infot, mingi hulk ülesandeid (tasks) ning igal ülesandel on üks või mitu autasu (rewards).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;Response.xsl&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!-- List of user&#039;s current challenges --&amp;gt;&lt;br /&gt;
&amp;lt;challenges&amp;gt;&lt;br /&gt;
  &amp;lt;!-- First challenge, started by the user --&amp;gt;&lt;br /&gt;
  &amp;lt;challenge id=&amp;quot;4&amp;quot; tasks=&amp;quot;6&amp;quot; progress=&amp;quot;17%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;The Improgrupp Jaa!&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Inspired by a true story, the Improgrupp Jaa! contains tasks that challenge ones spontaniety and social courage.&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;duration&amp;gt;1209600&amp;lt;/duration&amp;gt;&lt;br /&gt;
    &amp;lt;points_required&amp;gt;18&amp;lt;/points_required&amp;gt;&lt;br /&gt;
    &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;!-- Each challenge has a number of tasks that have to be completed.--&amp;gt;&lt;br /&gt;
    &amp;lt;!-- No challenge can be completed before earned points from tasks (rewards) exceed the points_required field --&amp;gt;&lt;br /&gt;
    &amp;lt;tasks max_points=&amp;quot;26&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;19&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Make a present to a homeless person&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;If you can read this, you&#039;re probably among the luckier ones. Do something for the ones who can&#039;t.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;!-- Each task yields rewards on completion. Rewards are &amp;quot;power&amp;quot; points of different categories.--&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;20&amp;quot; completed=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment a stranger&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Make a sincere compliment to someone you don&#039;t know. We could do with more praise where it&#039;s due.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;21&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Do volunteer work&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Offer yourself as a volunteer to an event or a cause.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;22&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Perform to a security camera&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Do a little dance to a security camera. It shouldn&#039;t be illegal...probably. Don&#039;t get in trouble!&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;23&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment someone for a job well done&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;When was the last time you thanked the janitor?&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;24&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Take a day off&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;This is mostly for work-a-holics: rest for a while.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
    &amp;lt;/tasks&amp;gt;&lt;br /&gt;
  &amp;lt;/challenge&amp;gt;&lt;br /&gt;
&amp;lt;/challenges&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT (stiilifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsl link]] ===&lt;br /&gt;
&lt;br /&gt;
Toodud stiilifail muudab ülaltoodud XML vastuse inimesele kergemini loetavaks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html class=&amp;quot;no-js&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;Ando Roots&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Challengo Response&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.css&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.responsive.css&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Challengo API response&amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
            The following is a list of challenges reported by the XML API.&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;!-- Go over each challenge --&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;challenges/challenge&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h2&amp;gt;&lt;br /&gt;
              &lt;br /&gt;
              &amp;lt;!-- Challenge badge image and title --&amp;gt;&lt;br /&gt;
              &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;&lt;br /&gt;
                  http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/img&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
              &amp;lt;!-- Challenge progress, if applicable --&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:if test=&amp;quot;@progress&amp;quot;&amp;gt;&lt;br /&gt;
                (&amp;lt;span&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@progress&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/span&amp;gt;)&lt;br /&gt;
              &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
            &amp;lt;/h2&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;p class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- Table for some challenge meta-info --&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered span4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Points required to complete:&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;points_required&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Time left (hours):&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;round(duration div 1800)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;!-- List all challenge tasks --&amp;gt;&lt;br /&gt;
            &amp;lt;h3 style=&amp;quot;margin-top:140px&amp;quot;&amp;gt;Tasks (&amp;lt;xsl:value-of select=&amp;quot;@tasks&amp;quot;/&amp;gt;)&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered table-striped table-condensed&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;thead&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;ID&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Title&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Badge&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Rewards&amp;lt;/th&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/thead&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;tasks/task&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;tr&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Color the row gray if task is completed --&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;@completed&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:attribute name=&amp;quot;class&amp;quot;&amp;gt;&lt;br /&gt;
                        help-block&lt;br /&gt;
                      &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                      &amp;lt;/img&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:for-each select=&amp;quot;rewards/reward&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;li&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=1&amp;quot;&amp;gt;&lt;br /&gt;
                              Compassion&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=2&amp;quot;&amp;gt;&lt;br /&gt;
                              Strength&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=3&amp;quot;&amp;gt;&lt;br /&gt;
                              Intelligence&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;span&amp;gt;&lt;br /&gt;
                              &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                            &amp;lt;/span&amp;gt;&lt;br /&gt;
                          &amp;lt;/li&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;!-- End of challenge task table --&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;!-- End of challenge --&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD (skeemifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsd link]] ===&lt;br /&gt;
&lt;br /&gt;
Skeemifail kirjeldab päringu vastuse XML struktuuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;challenges&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;challenge&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;duration&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;points_required&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;tasks&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;task&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rewards&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;reward&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:extension base=&amp;quot;xs:unsignedByte&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:attribute name=&amp;quot;power_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;completed&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;max_points&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;tasks&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;progress&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Veebiteenus ==&lt;br /&gt;
&#039;&#039;Tähtaeg 30. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:challengo_req2.png|300px|thumb|Näidis HTTP API päringust]]&lt;br /&gt;
&lt;br /&gt;
Veebiteenusena realiseeriti API, mis võimaldab klientide registreerimist, haldamist ning Challengo teenuse põhifunktsionaalsuse pakkumist HTTP päringute kaudu. API loomisel kasutati RESTful arhitektuuri. Täpsem dokumentatsioon asub API lehel: [http://api.sqroot.eu &amp;quot;API dokumentatsioon&amp;quot;] (tegemist on ajutise aadressiga, mis võetakse maha aine lõppemisel).&lt;br /&gt;
&lt;br /&gt;
=== Kriteeriumid ===&lt;br /&gt;
&lt;br /&gt;
Kõik õppejõu poolt esitatud kriteeriumid on täidetud. Erikokkuleppe alusel on projekti keeleks PHP.&lt;br /&gt;
&lt;br /&gt;
Kriteeriumid:&lt;br /&gt;
&lt;br /&gt;
* Teenuse pakkumist - API suudab vastata talle esitatud, valideeruvatele (vt. API dokumentatsiooni) päringutele&lt;br /&gt;
* Teenuse kasutajate tuvastamist ning haldamist - Kasutajatuvastus toimub nime/parooli alusel HTTP Basic Authentication protokollil, ideaalis üle HTTPS-i. Süsteemi sisemiselt on kasutajatel rollid, mida saab kasutada halduseks, näiteks LOGIN rolli eemaldamisel ei saa kasutaja enam sisse logida.&lt;br /&gt;
* Teenuse kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes - Kõik API päringud käivad API tokeni alusel. Tokeni kasutaja päringud logitakse nii logifaili kui andmebaasi, neid on sealt võimalik pärida. Lisaks on igal tokenil päringulimiit (tunnis), selle ületamisel päringuid eiratakse. Tokeneid saab tühistada, mis tähendab, et klientrakenduse päringuid ei töödelda mingil juhul.&lt;br /&gt;
&lt;br /&gt;
=== Testimine ===&lt;br /&gt;
&lt;br /&gt;
Veebiteenusel ei ole eraldi kasutajaliidest. Testimiseks on kaks varianti:&lt;br /&gt;
&lt;br /&gt;
# Luua ise vastav kasutajaliides ehk klientrakendus&lt;br /&gt;
# Kasutada mõnd abitööriista HTTP päringute koostamiseks. Soovitus: [https://chrome.google.com/webstore/detail/aejoelaoggembcahagimdiliamlcdmfm &amp;quot;Chrome plugin&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
Autentimisandmed rakendusele saab luua dokumentatsiooni lehel oleva vormi kaudu (andmed saadetakse e-mailile). Kasutajakonto saab luua juba API päringute abil.&lt;br /&gt;
&lt;br /&gt;
N.B. Juhul, kui uute API tokenite loomine ebaõnnestub (serveri mailiserver on veidi ebastabiilne), võib kasutada ka järgnevaid andmeid:&lt;br /&gt;
&lt;br /&gt;
Secret: fowhosurtothab&lt;br /&gt;
Token: fleraffahskuff&lt;br /&gt;
&lt;br /&gt;
=== Kood ===&lt;br /&gt;
&lt;br /&gt;
Lähtekoodi saab [http://api.sqroot.eu/anroots-challengo-a6da30942c8c.tar.gz siit]. Kohtmasinasse paigaldamiseks tuleb alla laadida [http://kohanaframework.org Kohana] framework ning paigaldada application/bootstrap.php failis märgitud moodulid. Andmebaasi schema on database kaustas. Kood on testitud ainult Linux platvormil LAMP stack-iga.&lt;br /&gt;
&lt;br /&gt;
== Klientrakendus ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 5. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Klientrakendus on Windows Phone 7 klient Challengo teenusele, mis kasutab projekti esimeses osas koostatud XML andmestruktuuri.&lt;br /&gt;
&lt;br /&gt;
XML-i väljastab Challengo API, mis vajab veel kirjutamist. Challengo on realiseeritud PHP-s.&lt;br /&gt;
&lt;br /&gt;
=== Feature set ===&lt;br /&gt;
&lt;br /&gt;
* Autentimine&lt;br /&gt;
** Login&lt;br /&gt;
** Logout&lt;br /&gt;
* Nimekiri aktiivsetest väljakutsetest ja nende staatustest&lt;br /&gt;
** Nimekiri väljakutse alamülesannetest ja nende staatustest&lt;br /&gt;
* Väljakutse märkimine lõpetatuks&lt;br /&gt;
** Alamülesande märkimine lõpetatuks&lt;br /&gt;
* Uue väljakutse valimine nimekirjast&lt;br /&gt;
** Väljakutse detailide ja alamülesannete vaatamine&lt;br /&gt;
* Väljakutse &amp;quot;hülgamine&amp;quot; (&#039;&#039;abandon&#039;&#039;)&lt;br /&gt;
* Kasutaja statistika näitamine&lt;br /&gt;
** Praegune punktiseis&lt;br /&gt;
** Lõpetatud väljakutsed&lt;br /&gt;
*** Lõpetatud alamülesanded&lt;br /&gt;
** Teenitud märgid&lt;br /&gt;
&lt;br /&gt;
= Meeskonna Liikmed =&lt;br /&gt;
&lt;br /&gt;
* Ando Roots &#039;&#039;anroots@itcollege.ee&#039;&#039;&lt;br /&gt;
* Mikk Pärast &#039;&#039;mparast@itcollege.ee&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Liitumine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for t in tudengid:&lt;br /&gt;
  if !t.laisk &amp;amp;&amp;amp; t.oskab_progreda:&lt;br /&gt;
    kutsu_meeskonda(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ mail -s &amp;quot;Harold&amp;quot; anroots@itcollege.ee&amp;lt;/pre&amp;gt;&lt;br /&gt;
Eeldan varasemaid teadmisi ning usaldusväärsust. Soovin, et asi ei lõppeks jälle nii, et projektijuht on kaitsmiseelsel õhtul üleval ja lõpetab üksinda projekti.&lt;br /&gt;
Ole nii kena ja anna huvist märku enne &#039;&#039;&#039;26. veebruari&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Lisad =&lt;br /&gt;
&lt;br /&gt;
[http://jaa.ee Kes on Harold?]&lt;br /&gt;
&lt;br /&gt;
== Challengo ==&lt;br /&gt;
&lt;br /&gt;
Challengo.me on Garage48 Tallinn 2011 raames alustatud veebiteenus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A social network of themed challenges, comes with a Karma profile and level-system.&lt;br /&gt;
Revenues from ads on the mobile version.&lt;br /&gt;
Team members: Ando Roots, Kristo Vaher, Valeria Gasik, Jelena Savinen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube v=&amp;quot;pPfHJD5F7sc&amp;quot; /&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=pPfHJD5F7sc Jelena tutvustab Challengo teenust]&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=47611</id>
		<title>Meeskond &quot;Harold&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=47611"/>
		<updated>2012-05-01T13:26:58Z</updated>

		<summary type="html">&lt;p&gt;Anroots: /* Veebiteenus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
{| style=&amp;quot;width:100%;height: 40px; background-color:#dff0d8;border: 1px solid ##468847;color:#468847;padding:10px;font-size:16px;font-weight:bold-webkit-border-radius: 8px;-moz-border-radius: 8px;border-radius: 8px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
| Praeguses faasis tegeleb tiim veebiteenuse kaitsmisega.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Tegemist on IT Kolledži aine raames eksamieeldust taotleva projektimeeskonna töö dokumentatsiooniga.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 30em; padding-left: 2em; float: right; font-size: 95%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Meeskond &#039;&#039;&amp;quot;Harold&amp;quot;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Aine:&#039;&#039;&#039;&lt;br /&gt;
| [[:Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhend:&#039;&#039;&#039;&lt;br /&gt;
| [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2012 Juhend]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Tüüp:&#039;&#039;&#039;&lt;br /&gt;
| Projekt&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Anroots]]&amp;lt;br /&amp;gt;[[User:Mparast]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhendajad:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Mposka]]&amp;lt;br /&amp;gt;[[User:Kraspel]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Semester:&#039;&#039;&#039;&lt;br /&gt;
| 2011/2012 kevad&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Lingid&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|API Demo&lt;br /&gt;
|[http://api.sqroot.eu http://api.sqroot.eu]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Projekt =&lt;br /&gt;
&lt;br /&gt;
Projekti esimesed kaks osa keskenduvad veebiteenuse &amp;quot;Challengo&amp;quot; taasloomisele. Projekti esimene osa valmistab ette peamis(t)e päringu(te) XML vastuse struktuuri, projekti teine osa (veebiteenuse loomine) ehitab vastava API.&lt;br /&gt;
&lt;br /&gt;
== Korraldus ==&lt;br /&gt;
&lt;br /&gt;
Projektiga seonduv dokumentatsioon (erandiks on käesolev wiki leht), kasutajale nähtavad tekstid ning lähtekood on kirjutatud inglise keeles. Võimalusel on kood kirjutatud hilisema I18n toe võimaldamiseks.&lt;br /&gt;
&lt;br /&gt;
Koodi haldab GitHub repositoorium, juurdepääsu saamiseks tuleb projektijuhile saata oma GitHub kasutajanimi (või &#039;&#039;pull request&#039;&#039;). Tegemist vajavaid töid näeb GitHub lehel &#039;&#039;Issues&#039;&#039; vahekaardilt ning asjakohane dokumentatsioon (API) on GitHub wiki alamjaotises.&lt;br /&gt;
&lt;br /&gt;
Lähtekood on põhjalikult kommenteeritud, muud, eraldiseisvat dokumentatsiooni koodi kohta on minimaalselt.&lt;br /&gt;
&lt;br /&gt;
== XML Andmefailid ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 3. märts 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
XML andmefail kirjeldab veebiteenuse &amp;quot;[http://garage48.org/blogger/projects-on-garage48-tallinn-2011 Challengo]&amp;quot; andmeid. Andmed asuvad MYSQL andmebaasis, mille struktuur on kirjeldatud ERD mudeliga [[File:Harold_Challengo_MYSQL_ERD.png|200px|thumb|MYSQL ERD mudel]]. XML formaadis andmeid väljastab serveris asuv PHP API. Järgnevalt toodud XML näited ei pruugi projekti esimese osa nõudmiste tõttu olla vastavuses teise osana valmiva veebiteenuse tegeliku väljundiga.&lt;br /&gt;
&lt;br /&gt;
Faile saab vaadata ka võrgust: http://enos.itcollege.ee/~anroots/challengo/xml/. Soovitatav on seda teha just XSLT stiilifaili jaoks (http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml).&lt;br /&gt;
&lt;br /&gt;
=== XML [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml link]]===&lt;br /&gt;
&lt;br /&gt;
Järgnevalt on toodud lõik kasutaja praeguste väljakutsete päringust. Kasutajal on parajasti kaks aktiivset väljakutset, igal väljakutsel on veidi meta-infot, mingi hulk ülesandeid (tasks) ning igal ülesandel on üks või mitu autasu (rewards).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;Response.xsl&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!-- List of user&#039;s current challenges --&amp;gt;&lt;br /&gt;
&amp;lt;challenges&amp;gt;&lt;br /&gt;
  &amp;lt;!-- First challenge, started by the user --&amp;gt;&lt;br /&gt;
  &amp;lt;challenge id=&amp;quot;4&amp;quot; tasks=&amp;quot;6&amp;quot; progress=&amp;quot;17%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;The Improgrupp Jaa!&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Inspired by a true story, the Improgrupp Jaa! contains tasks that challenge ones spontaniety and social courage.&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;duration&amp;gt;1209600&amp;lt;/duration&amp;gt;&lt;br /&gt;
    &amp;lt;points_required&amp;gt;18&amp;lt;/points_required&amp;gt;&lt;br /&gt;
    &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;!-- Each challenge has a number of tasks that have to be completed.--&amp;gt;&lt;br /&gt;
    &amp;lt;!-- No challenge can be completed before earned points from tasks (rewards) exceed the points_required field --&amp;gt;&lt;br /&gt;
    &amp;lt;tasks max_points=&amp;quot;26&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;19&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Make a present to a homeless person&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;If you can read this, you&#039;re probably among the luckier ones. Do something for the ones who can&#039;t.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;!-- Each task yields rewards on completion. Rewards are &amp;quot;power&amp;quot; points of different categories.--&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;20&amp;quot; completed=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment a stranger&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Make a sincere compliment to someone you don&#039;t know. We could do with more praise where it&#039;s due.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;21&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Do volunteer work&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Offer yourself as a volunteer to an event or a cause.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;22&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Perform to a security camera&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Do a little dance to a security camera. It shouldn&#039;t be illegal...probably. Don&#039;t get in trouble!&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;23&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment someone for a job well done&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;When was the last time you thanked the janitor?&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;24&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Take a day off&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;This is mostly for work-a-holics: rest for a while.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
    &amp;lt;/tasks&amp;gt;&lt;br /&gt;
  &amp;lt;/challenge&amp;gt;&lt;br /&gt;
&amp;lt;/challenges&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT (stiilifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsl link]] ===&lt;br /&gt;
&lt;br /&gt;
Toodud stiilifail muudab ülaltoodud XML vastuse inimesele kergemini loetavaks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html class=&amp;quot;no-js&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;Ando Roots&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Challengo Response&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.css&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.responsive.css&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Challengo API response&amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
            The following is a list of challenges reported by the XML API.&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;!-- Go over each challenge --&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;challenges/challenge&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h2&amp;gt;&lt;br /&gt;
              &lt;br /&gt;
              &amp;lt;!-- Challenge badge image and title --&amp;gt;&lt;br /&gt;
              &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;&lt;br /&gt;
                  http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/img&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
              &amp;lt;!-- Challenge progress, if applicable --&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:if test=&amp;quot;@progress&amp;quot;&amp;gt;&lt;br /&gt;
                (&amp;lt;span&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@progress&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/span&amp;gt;)&lt;br /&gt;
              &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
            &amp;lt;/h2&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;p class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- Table for some challenge meta-info --&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered span4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Points required to complete:&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;points_required&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Time left (hours):&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;round(duration div 1800)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;!-- List all challenge tasks --&amp;gt;&lt;br /&gt;
            &amp;lt;h3 style=&amp;quot;margin-top:140px&amp;quot;&amp;gt;Tasks (&amp;lt;xsl:value-of select=&amp;quot;@tasks&amp;quot;/&amp;gt;)&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered table-striped table-condensed&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;thead&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;ID&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Title&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Badge&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Rewards&amp;lt;/th&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/thead&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;tasks/task&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;tr&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Color the row gray if task is completed --&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;@completed&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:attribute name=&amp;quot;class&amp;quot;&amp;gt;&lt;br /&gt;
                        help-block&lt;br /&gt;
                      &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                      &amp;lt;/img&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:for-each select=&amp;quot;rewards/reward&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;li&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=1&amp;quot;&amp;gt;&lt;br /&gt;
                              Compassion&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=2&amp;quot;&amp;gt;&lt;br /&gt;
                              Strength&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=3&amp;quot;&amp;gt;&lt;br /&gt;
                              Intelligence&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;span&amp;gt;&lt;br /&gt;
                              &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                            &amp;lt;/span&amp;gt;&lt;br /&gt;
                          &amp;lt;/li&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;!-- End of challenge task table --&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;!-- End of challenge --&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD (skeemifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsd link]] ===&lt;br /&gt;
&lt;br /&gt;
Skeemifail kirjeldab päringu vastuse XML struktuuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;challenges&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;challenge&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;duration&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;points_required&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;tasks&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;task&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rewards&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;reward&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:extension base=&amp;quot;xs:unsignedByte&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:attribute name=&amp;quot;power_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;completed&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;max_points&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;tasks&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;progress&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Veebiteenus ==&lt;br /&gt;
&#039;&#039;Tähtaeg 30. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:challengo_req2.png|300px|thumb|Näidis HTTP API päringust]]&lt;br /&gt;
&lt;br /&gt;
Veebiteenusena realiseeriti API, mis võimaldab klientide registreerimist, haldamist ning Challengo teenuse põhifunktsionaalsuse pakkumist HTTP päringute kaudu. API loomisel kasutati RESTful arhitektuuri. Täpsem dokumentatsioon asub API lehel: [http://api.sqroot.eu &amp;quot;API dokumentatsioon&amp;quot;] (tegemist on ajutise aadressiga, mis võetakse maha aine lõppemisel).&lt;br /&gt;
&lt;br /&gt;
=== Kriteeriumid ===&lt;br /&gt;
&lt;br /&gt;
Kõik õppejõu poolt esitatud kriteeriumid on täidetud. Erikokkuleppe alusel on projekti keeleks PHP.&lt;br /&gt;
&lt;br /&gt;
Kriteeriumid:&lt;br /&gt;
&lt;br /&gt;
* Teenuse pakkumist - API suudab vastata talle esitatud, valideeruvatele (vt. API dokumentatsiooni) päringutele&lt;br /&gt;
* Teenuse kasutajate tuvastamist ning haldamist - Kasutajatuvastus toimub nime/parooli alusel HTTP Basic Authentication protokollil, ideaalis üle HTTPS-i. Süsteemi sisemiselt on kasutajatel rollid, mida saab kasutada halduseks, näiteks LOGIN rolli eemaldamisel ei saa kasutaja enam sisse logida.&lt;br /&gt;
* Teenuse kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes - Kõik API päringud käivad API tokeni alusel. Tokeni kasutaja päringud logitakse nii logifaili kui andmebaasi, neid on sealt võimalik pärida. Lisaks on igal tokenil päringulimiit (tunnis), selle ületamisel päringuid eiratakse. Tokeneid saab tühistada, mis tähendab, et klientrakenduse päringuid ei töödelda mingil juhul.&lt;br /&gt;
&lt;br /&gt;
=== Testimine ===&lt;br /&gt;
&lt;br /&gt;
Veebiteenusel ei ole eraldi kasutajaliidest. Testimiseks on kaks varianti:&lt;br /&gt;
&lt;br /&gt;
# Luua ise vastav kasutajaliides ehk klientrakendus&lt;br /&gt;
# Kasutada mõnd abitööriista HTTP päringute koostamiseks. Soovitus: [https://chrome.google.com/webstore/detail/aejoelaoggembcahagimdiliamlcdmfm &amp;quot;Chrome plugin&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
Autentimisandmed rakendusele saab luua dokumentatsiooni lehel oleva vormi kaudu (andmed saadetakse e-mailile). Kasutajakonto saab luua juba API päringute abil.&lt;br /&gt;
&lt;br /&gt;
N.B. Juhul, kui uute API tokenite loomine ebaõnnestub (serveri mailiserver on veidi ebastabiilne), võib kasutada ka järgnevaid andmeid:&lt;br /&gt;
&lt;br /&gt;
Secret: fowhosurtothab&lt;br /&gt;
Token: fleraffahskuff&lt;br /&gt;
&lt;br /&gt;
=== Kood ===&lt;br /&gt;
&lt;br /&gt;
Lähtekoodi saab [http://api.sqroot.eu/challengo-2012-04-29-v2.0.tar.gz siit]. Kohtmasinasse paigaldamiseks tuleb alla laadida [http://kohanaframework.org Kohana] framework ning paigaldada application/bootstrap.php failis märgitud moodulid. Andmebaasi schema on database kaustas. Kood on testitud ainult Linux platvormil LAMP stack-iga.&lt;br /&gt;
&lt;br /&gt;
== Klientrakendus ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 5. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Klientrakendus on Windows Phone 7 klient Challengo teenusele, mis kasutab projekti esimeses osas koostatud XML andmestruktuuri.&lt;br /&gt;
&lt;br /&gt;
XML-i väljastab Challengo API, mis vajab veel kirjutamist. Challengo on realiseeritud PHP-s.&lt;br /&gt;
&lt;br /&gt;
=== Feature set ===&lt;br /&gt;
&lt;br /&gt;
* Autentimine&lt;br /&gt;
** Login&lt;br /&gt;
** Logout&lt;br /&gt;
* Nimekiri aktiivsetest väljakutsetest ja nende staatustest&lt;br /&gt;
** Nimekiri väljakutse alamülesannetest ja nende staatustest&lt;br /&gt;
* Väljakutse märkimine lõpetatuks&lt;br /&gt;
** Alamülesande märkimine lõpetatuks&lt;br /&gt;
* Uue väljakutse valimine nimekirjast&lt;br /&gt;
** Väljakutse detailide ja alamülesannete vaatamine&lt;br /&gt;
* Väljakutse &amp;quot;hülgamine&amp;quot; (&#039;&#039;abandon&#039;&#039;)&lt;br /&gt;
* Kasutaja statistika näitamine&lt;br /&gt;
** Praegune punktiseis&lt;br /&gt;
** Lõpetatud väljakutsed&lt;br /&gt;
*** Lõpetatud alamülesanded&lt;br /&gt;
** Teenitud märgid&lt;br /&gt;
&lt;br /&gt;
= Meeskonna Liikmed =&lt;br /&gt;
&lt;br /&gt;
* Ando Roots &#039;&#039;anroots@itcollege.ee&#039;&#039;&lt;br /&gt;
* Mikk Pärast &#039;&#039;mparast@itcollege.ee&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Liitumine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for t in tudengid:&lt;br /&gt;
  if !t.laisk &amp;amp;&amp;amp; t.oskab_progreda:&lt;br /&gt;
    kutsu_meeskonda(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ mail -s &amp;quot;Harold&amp;quot; anroots@itcollege.ee&amp;lt;/pre&amp;gt;&lt;br /&gt;
Eeldan varasemaid teadmisi ning usaldusväärsust. Soovin, et asi ei lõppeks jälle nii, et projektijuht on kaitsmiseelsel õhtul üleval ja lõpetab üksinda projekti.&lt;br /&gt;
Ole nii kena ja anna huvist märku enne &#039;&#039;&#039;26. veebruari&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Lisad =&lt;br /&gt;
&lt;br /&gt;
[http://jaa.ee Kes on Harold?]&lt;br /&gt;
&lt;br /&gt;
== Challengo ==&lt;br /&gt;
&lt;br /&gt;
Challengo.me on Garage48 Tallinn 2011 raames alustatud veebiteenus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A social network of themed challenges, comes with a Karma profile and level-system.&lt;br /&gt;
Revenues from ads on the mobile version.&lt;br /&gt;
Team members: Ando Roots, Kristo Vaher, Valeria Gasik, Jelena Savinen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube v=&amp;quot;pPfHJD5F7sc&amp;quot; /&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=pPfHJD5F7sc Jelena tutvustab Challengo teenust]&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=47596</id>
		<title>Meeskond &quot;Harold&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=47596"/>
		<updated>2012-04-30T14:26:19Z</updated>

		<summary type="html">&lt;p&gt;Anroots: /* Veebiteenus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
{| style=&amp;quot;width:100%;height: 40px; background-color:#dff0d8;border: 1px solid ##468847;color:#468847;padding:10px;font-size:16px;font-weight:bold-webkit-border-radius: 8px;-moz-border-radius: 8px;border-radius: 8px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
| Praeguses faasis tegeleb tiim veebiteenuse kaitsmisega.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Tegemist on IT Kolledži aine raames eksamieeldust taotleva projektimeeskonna töö dokumentatsiooniga.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 30em; padding-left: 2em; float: right; font-size: 95%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Meeskond &#039;&#039;&amp;quot;Harold&amp;quot;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Aine:&#039;&#039;&#039;&lt;br /&gt;
| [[:Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhend:&#039;&#039;&#039;&lt;br /&gt;
| [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2012 Juhend]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Tüüp:&#039;&#039;&#039;&lt;br /&gt;
| Projekt&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Anroots]]&amp;lt;br /&amp;gt;[[User:Mparast]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhendajad:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Mposka]]&amp;lt;br /&amp;gt;[[User:Kraspel]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Semester:&#039;&#039;&#039;&lt;br /&gt;
| 2011/2012 kevad&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Lingid&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|API Demo&lt;br /&gt;
|[http://api.sqroot.eu http://api.sqroot.eu]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Projekt =&lt;br /&gt;
&lt;br /&gt;
Projekti esimesed kaks osa keskenduvad veebiteenuse &amp;quot;Challengo&amp;quot; taasloomisele. Projekti esimene osa valmistab ette peamis(t)e päringu(te) XML vastuse struktuuri, projekti teine osa (veebiteenuse loomine) ehitab vastava API.&lt;br /&gt;
&lt;br /&gt;
== Korraldus ==&lt;br /&gt;
&lt;br /&gt;
Projektiga seonduv dokumentatsioon (erandiks on käesolev wiki leht), kasutajale nähtavad tekstid ning lähtekood on kirjutatud inglise keeles. Võimalusel on kood kirjutatud hilisema I18n toe võimaldamiseks.&lt;br /&gt;
&lt;br /&gt;
Koodi haldab GitHub repositoorium, juurdepääsu saamiseks tuleb projektijuhile saata oma GitHub kasutajanimi (või &#039;&#039;pull request&#039;&#039;). Tegemist vajavaid töid näeb GitHub lehel &#039;&#039;Issues&#039;&#039; vahekaardilt ning asjakohane dokumentatsioon (API) on GitHub wiki alamjaotises.&lt;br /&gt;
&lt;br /&gt;
Lähtekood on põhjalikult kommenteeritud, muud, eraldiseisvat dokumentatsiooni koodi kohta on minimaalselt.&lt;br /&gt;
&lt;br /&gt;
== XML Andmefailid ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 3. märts 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
XML andmefail kirjeldab veebiteenuse &amp;quot;[http://garage48.org/blogger/projects-on-garage48-tallinn-2011 Challengo]&amp;quot; andmeid. Andmed asuvad MYSQL andmebaasis, mille struktuur on kirjeldatud ERD mudeliga [[File:Harold_Challengo_MYSQL_ERD.png|200px|thumb|MYSQL ERD mudel]]. XML formaadis andmeid väljastab serveris asuv PHP API. Järgnevalt toodud XML näited ei pruugi projekti esimese osa nõudmiste tõttu olla vastavuses teise osana valmiva veebiteenuse tegeliku väljundiga.&lt;br /&gt;
&lt;br /&gt;
Faile saab vaadata ka võrgust: http://enos.itcollege.ee/~anroots/challengo/xml/. Soovitatav on seda teha just XSLT stiilifaili jaoks (http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml).&lt;br /&gt;
&lt;br /&gt;
=== XML [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml link]]===&lt;br /&gt;
&lt;br /&gt;
Järgnevalt on toodud lõik kasutaja praeguste väljakutsete päringust. Kasutajal on parajasti kaks aktiivset väljakutset, igal väljakutsel on veidi meta-infot, mingi hulk ülesandeid (tasks) ning igal ülesandel on üks või mitu autasu (rewards).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;Response.xsl&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!-- List of user&#039;s current challenges --&amp;gt;&lt;br /&gt;
&amp;lt;challenges&amp;gt;&lt;br /&gt;
  &amp;lt;!-- First challenge, started by the user --&amp;gt;&lt;br /&gt;
  &amp;lt;challenge id=&amp;quot;4&amp;quot; tasks=&amp;quot;6&amp;quot; progress=&amp;quot;17%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;The Improgrupp Jaa!&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Inspired by a true story, the Improgrupp Jaa! contains tasks that challenge ones spontaniety and social courage.&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;duration&amp;gt;1209600&amp;lt;/duration&amp;gt;&lt;br /&gt;
    &amp;lt;points_required&amp;gt;18&amp;lt;/points_required&amp;gt;&lt;br /&gt;
    &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;!-- Each challenge has a number of tasks that have to be completed.--&amp;gt;&lt;br /&gt;
    &amp;lt;!-- No challenge can be completed before earned points from tasks (rewards) exceed the points_required field --&amp;gt;&lt;br /&gt;
    &amp;lt;tasks max_points=&amp;quot;26&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;19&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Make a present to a homeless person&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;If you can read this, you&#039;re probably among the luckier ones. Do something for the ones who can&#039;t.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;!-- Each task yields rewards on completion. Rewards are &amp;quot;power&amp;quot; points of different categories.--&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;20&amp;quot; completed=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment a stranger&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Make a sincere compliment to someone you don&#039;t know. We could do with more praise where it&#039;s due.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;21&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Do volunteer work&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Offer yourself as a volunteer to an event or a cause.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;22&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Perform to a security camera&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Do a little dance to a security camera. It shouldn&#039;t be illegal...probably. Don&#039;t get in trouble!&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;23&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment someone for a job well done&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;When was the last time you thanked the janitor?&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;24&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Take a day off&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;This is mostly for work-a-holics: rest for a while.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
    &amp;lt;/tasks&amp;gt;&lt;br /&gt;
  &amp;lt;/challenge&amp;gt;&lt;br /&gt;
&amp;lt;/challenges&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT (stiilifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsl link]] ===&lt;br /&gt;
&lt;br /&gt;
Toodud stiilifail muudab ülaltoodud XML vastuse inimesele kergemini loetavaks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html class=&amp;quot;no-js&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;Ando Roots&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Challengo Response&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.css&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.responsive.css&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Challengo API response&amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
            The following is a list of challenges reported by the XML API.&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;!-- Go over each challenge --&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;challenges/challenge&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h2&amp;gt;&lt;br /&gt;
              &lt;br /&gt;
              &amp;lt;!-- Challenge badge image and title --&amp;gt;&lt;br /&gt;
              &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;&lt;br /&gt;
                  http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/img&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
              &amp;lt;!-- Challenge progress, if applicable --&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:if test=&amp;quot;@progress&amp;quot;&amp;gt;&lt;br /&gt;
                (&amp;lt;span&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@progress&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/span&amp;gt;)&lt;br /&gt;
              &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
            &amp;lt;/h2&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;p class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- Table for some challenge meta-info --&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered span4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Points required to complete:&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;points_required&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Time left (hours):&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;round(duration div 1800)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;!-- List all challenge tasks --&amp;gt;&lt;br /&gt;
            &amp;lt;h3 style=&amp;quot;margin-top:140px&amp;quot;&amp;gt;Tasks (&amp;lt;xsl:value-of select=&amp;quot;@tasks&amp;quot;/&amp;gt;)&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered table-striped table-condensed&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;thead&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;ID&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Title&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Badge&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Rewards&amp;lt;/th&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/thead&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;tasks/task&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;tr&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Color the row gray if task is completed --&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;@completed&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:attribute name=&amp;quot;class&amp;quot;&amp;gt;&lt;br /&gt;
                        help-block&lt;br /&gt;
                      &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                      &amp;lt;/img&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:for-each select=&amp;quot;rewards/reward&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;li&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=1&amp;quot;&amp;gt;&lt;br /&gt;
                              Compassion&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=2&amp;quot;&amp;gt;&lt;br /&gt;
                              Strength&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=3&amp;quot;&amp;gt;&lt;br /&gt;
                              Intelligence&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;span&amp;gt;&lt;br /&gt;
                              &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                            &amp;lt;/span&amp;gt;&lt;br /&gt;
                          &amp;lt;/li&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;!-- End of challenge task table --&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;!-- End of challenge --&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD (skeemifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsd link]] ===&lt;br /&gt;
&lt;br /&gt;
Skeemifail kirjeldab päringu vastuse XML struktuuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;challenges&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;challenge&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;duration&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;points_required&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;tasks&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;task&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rewards&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;reward&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:extension base=&amp;quot;xs:unsignedByte&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:attribute name=&amp;quot;power_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;completed&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;max_points&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;tasks&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;progress&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Veebiteenus ==&lt;br /&gt;
&#039;&#039;Tähtaeg 30. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:challengo_req2.png|300px|thumb|Näidis HTTP API päringust]]&lt;br /&gt;
&lt;br /&gt;
Veebiteenusena realiseeriti API, mis võimaldab klientide registreerimist, haldamist ning Challengo teenuse põhifunktsionaalsuse pakkumist HTTP päringute kaudu. API loomisel kasutati RESTful arhitektuuri. Täpsem dokumentatsioon asub API lehel: [http://api.sqroot.eu &amp;quot;API dokumentatsioon&amp;quot;] (tegemist on ajutise aadressiga, mis võetakse maha aine lõppemisel).&lt;br /&gt;
&lt;br /&gt;
=== Testimine ===&lt;br /&gt;
&lt;br /&gt;
Veebiteenusel ei ole eraldi kasutajaliidest. Testimiseks on kaks varianti:&lt;br /&gt;
&lt;br /&gt;
# Luua ise vastav kasutajaliides ehk klientrakendus&lt;br /&gt;
# Kasutada mõnd abitööriista HTTP päringute koostamiseks. Soovitus: [https://chrome.google.com/webstore/detail/aejoelaoggembcahagimdiliamlcdmfm &amp;quot;Chrome plugin&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
Autentimisandmed rakendusele saab luua dokumentatsiooni lehel oleva vormi kaudu (andmed saadetakse e-mailile). Kasutajakonto saab luua juba API päringute abil.&lt;br /&gt;
&lt;br /&gt;
N.B. Juhul, kui uute API tokenite loomine ebaõnnestub (serveri mailiserver on veidi ebastabiilne), võib kasutada ka järgnevaid andmeid:&lt;br /&gt;
&lt;br /&gt;
Secret: fowhosurtothab&lt;br /&gt;
Token: fleraffahskuff&lt;br /&gt;
&lt;br /&gt;
=== Kood ===&lt;br /&gt;
&lt;br /&gt;
Lähtekoodi saab [http://api.sqroot.eu/challengo-2012-04-29-v2.0.tar.gz siit]. Kohtmasinasse paigaldamiseks tuleb alla laadida [http://kohanaframework.org Kohana] framework ning paigaldada application/bootstrap.php failis märgitud moodulid. Andmebaasi schema on database kaustas. Kood on testitud ainult Linux platvormil LAMP stack-iga.&lt;br /&gt;
&lt;br /&gt;
== Klientrakendus ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 5. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Klientrakendus on Windows Phone 7 klient Challengo teenusele, mis kasutab projekti esimeses osas koostatud XML andmestruktuuri.&lt;br /&gt;
&lt;br /&gt;
XML-i väljastab Challengo API, mis vajab veel kirjutamist. Challengo on realiseeritud PHP-s.&lt;br /&gt;
&lt;br /&gt;
=== Feature set ===&lt;br /&gt;
&lt;br /&gt;
* Autentimine&lt;br /&gt;
** Login&lt;br /&gt;
** Logout&lt;br /&gt;
* Nimekiri aktiivsetest väljakutsetest ja nende staatustest&lt;br /&gt;
** Nimekiri väljakutse alamülesannetest ja nende staatustest&lt;br /&gt;
* Väljakutse märkimine lõpetatuks&lt;br /&gt;
** Alamülesande märkimine lõpetatuks&lt;br /&gt;
* Uue väljakutse valimine nimekirjast&lt;br /&gt;
** Väljakutse detailide ja alamülesannete vaatamine&lt;br /&gt;
* Väljakutse &amp;quot;hülgamine&amp;quot; (&#039;&#039;abandon&#039;&#039;)&lt;br /&gt;
* Kasutaja statistika näitamine&lt;br /&gt;
** Praegune punktiseis&lt;br /&gt;
** Lõpetatud väljakutsed&lt;br /&gt;
*** Lõpetatud alamülesanded&lt;br /&gt;
** Teenitud märgid&lt;br /&gt;
&lt;br /&gt;
= Meeskonna Liikmed =&lt;br /&gt;
&lt;br /&gt;
* Ando Roots &#039;&#039;anroots@itcollege.ee&#039;&#039;&lt;br /&gt;
* Mikk Pärast &#039;&#039;mparast@itcollege.ee&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Liitumine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for t in tudengid:&lt;br /&gt;
  if !t.laisk &amp;amp;&amp;amp; t.oskab_progreda:&lt;br /&gt;
    kutsu_meeskonda(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ mail -s &amp;quot;Harold&amp;quot; anroots@itcollege.ee&amp;lt;/pre&amp;gt;&lt;br /&gt;
Eeldan varasemaid teadmisi ning usaldusväärsust. Soovin, et asi ei lõppeks jälle nii, et projektijuht on kaitsmiseelsel õhtul üleval ja lõpetab üksinda projekti.&lt;br /&gt;
Ole nii kena ja anna huvist märku enne &#039;&#039;&#039;26. veebruari&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Lisad =&lt;br /&gt;
&lt;br /&gt;
[http://jaa.ee Kes on Harold?]&lt;br /&gt;
&lt;br /&gt;
== Challengo ==&lt;br /&gt;
&lt;br /&gt;
Challengo.me on Garage48 Tallinn 2011 raames alustatud veebiteenus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A social network of themed challenges, comes with a Karma profile and level-system.&lt;br /&gt;
Revenues from ads on the mobile version.&lt;br /&gt;
Team members: Ando Roots, Kristo Vaher, Valeria Gasik, Jelena Savinen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube v=&amp;quot;pPfHJD5F7sc&amp;quot; /&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=pPfHJD5F7sc Jelena tutvustab Challengo teenust]&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=47579</id>
		<title>Meeskond &quot;Harold&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=47579"/>
		<updated>2012-04-29T23:23:52Z</updated>

		<summary type="html">&lt;p&gt;Anroots: /* Veebiteenus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
{| style=&amp;quot;width:100%;height: 40px; background-color:#dff0d8;border: 1px solid ##468847;color:#468847;padding:10px;font-size:16px;font-weight:bold-webkit-border-radius: 8px;-moz-border-radius: 8px;border-radius: 8px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
| Praeguses faasis tegeleb tiim veebiteenuse kaitsmisega.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Tegemist on IT Kolledži aine raames eksamieeldust taotleva projektimeeskonna töö dokumentatsiooniga.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 30em; padding-left: 2em; float: right; font-size: 95%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Meeskond &#039;&#039;&amp;quot;Harold&amp;quot;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Aine:&#039;&#039;&#039;&lt;br /&gt;
| [[:Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhend:&#039;&#039;&#039;&lt;br /&gt;
| [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2012 Juhend]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Tüüp:&#039;&#039;&#039;&lt;br /&gt;
| Projekt&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Anroots]]&amp;lt;br /&amp;gt;[[User:Mparast]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhendajad:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Mposka]]&amp;lt;br /&amp;gt;[[User:Kraspel]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Semester:&#039;&#039;&#039;&lt;br /&gt;
| 2011/2012 kevad&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Lingid&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|API Demo&lt;br /&gt;
|[http://api.sqroot.eu http://api.sqroot.eu]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Projekt =&lt;br /&gt;
&lt;br /&gt;
Projekti esimesed kaks osa keskenduvad veebiteenuse &amp;quot;Challengo&amp;quot; taasloomisele. Projekti esimene osa valmistab ette peamis(t)e päringu(te) XML vastuse struktuuri, projekti teine osa (veebiteenuse loomine) ehitab vastava API.&lt;br /&gt;
&lt;br /&gt;
== Korraldus ==&lt;br /&gt;
&lt;br /&gt;
Projektiga seonduv dokumentatsioon (erandiks on käesolev wiki leht), kasutajale nähtavad tekstid ning lähtekood on kirjutatud inglise keeles. Võimalusel on kood kirjutatud hilisema I18n toe võimaldamiseks.&lt;br /&gt;
&lt;br /&gt;
Koodi haldab GitHub repositoorium, juurdepääsu saamiseks tuleb projektijuhile saata oma GitHub kasutajanimi (või &#039;&#039;pull request&#039;&#039;). Tegemist vajavaid töid näeb GitHub lehel &#039;&#039;Issues&#039;&#039; vahekaardilt ning asjakohane dokumentatsioon (API) on GitHub wiki alamjaotises.&lt;br /&gt;
&lt;br /&gt;
Lähtekood on põhjalikult kommenteeritud, muud, eraldiseisvat dokumentatsiooni koodi kohta on minimaalselt.&lt;br /&gt;
&lt;br /&gt;
== XML Andmefailid ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 3. märts 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
XML andmefail kirjeldab veebiteenuse &amp;quot;[http://garage48.org/blogger/projects-on-garage48-tallinn-2011 Challengo]&amp;quot; andmeid. Andmed asuvad MYSQL andmebaasis, mille struktuur on kirjeldatud ERD mudeliga [[File:Harold_Challengo_MYSQL_ERD.png|200px|thumb|MYSQL ERD mudel]]. XML formaadis andmeid väljastab serveris asuv PHP API. Järgnevalt toodud XML näited ei pruugi projekti esimese osa nõudmiste tõttu olla vastavuses teise osana valmiva veebiteenuse tegeliku väljundiga.&lt;br /&gt;
&lt;br /&gt;
Faile saab vaadata ka võrgust: http://enos.itcollege.ee/~anroots/challengo/xml/. Soovitatav on seda teha just XSLT stiilifaili jaoks (http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml).&lt;br /&gt;
&lt;br /&gt;
=== XML [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml link]]===&lt;br /&gt;
&lt;br /&gt;
Järgnevalt on toodud lõik kasutaja praeguste väljakutsete päringust. Kasutajal on parajasti kaks aktiivset väljakutset, igal väljakutsel on veidi meta-infot, mingi hulk ülesandeid (tasks) ning igal ülesandel on üks või mitu autasu (rewards).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;Response.xsl&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!-- List of user&#039;s current challenges --&amp;gt;&lt;br /&gt;
&amp;lt;challenges&amp;gt;&lt;br /&gt;
  &amp;lt;!-- First challenge, started by the user --&amp;gt;&lt;br /&gt;
  &amp;lt;challenge id=&amp;quot;4&amp;quot; tasks=&amp;quot;6&amp;quot; progress=&amp;quot;17%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;The Improgrupp Jaa!&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Inspired by a true story, the Improgrupp Jaa! contains tasks that challenge ones spontaniety and social courage.&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;duration&amp;gt;1209600&amp;lt;/duration&amp;gt;&lt;br /&gt;
    &amp;lt;points_required&amp;gt;18&amp;lt;/points_required&amp;gt;&lt;br /&gt;
    &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;!-- Each challenge has a number of tasks that have to be completed.--&amp;gt;&lt;br /&gt;
    &amp;lt;!-- No challenge can be completed before earned points from tasks (rewards) exceed the points_required field --&amp;gt;&lt;br /&gt;
    &amp;lt;tasks max_points=&amp;quot;26&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;19&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Make a present to a homeless person&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;If you can read this, you&#039;re probably among the luckier ones. Do something for the ones who can&#039;t.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;!-- Each task yields rewards on completion. Rewards are &amp;quot;power&amp;quot; points of different categories.--&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;20&amp;quot; completed=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment a stranger&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Make a sincere compliment to someone you don&#039;t know. We could do with more praise where it&#039;s due.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;21&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Do volunteer work&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Offer yourself as a volunteer to an event or a cause.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;22&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Perform to a security camera&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Do a little dance to a security camera. It shouldn&#039;t be illegal...probably. Don&#039;t get in trouble!&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;23&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment someone for a job well done&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;When was the last time you thanked the janitor?&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;24&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Take a day off&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;This is mostly for work-a-holics: rest for a while.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
    &amp;lt;/tasks&amp;gt;&lt;br /&gt;
  &amp;lt;/challenge&amp;gt;&lt;br /&gt;
&amp;lt;/challenges&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT (stiilifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsl link]] ===&lt;br /&gt;
&lt;br /&gt;
Toodud stiilifail muudab ülaltoodud XML vastuse inimesele kergemini loetavaks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html class=&amp;quot;no-js&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;Ando Roots&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Challengo Response&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.css&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.responsive.css&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Challengo API response&amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
            The following is a list of challenges reported by the XML API.&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;!-- Go over each challenge --&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;challenges/challenge&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h2&amp;gt;&lt;br /&gt;
              &lt;br /&gt;
              &amp;lt;!-- Challenge badge image and title --&amp;gt;&lt;br /&gt;
              &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;&lt;br /&gt;
                  http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/img&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
              &amp;lt;!-- Challenge progress, if applicable --&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:if test=&amp;quot;@progress&amp;quot;&amp;gt;&lt;br /&gt;
                (&amp;lt;span&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@progress&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/span&amp;gt;)&lt;br /&gt;
              &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
            &amp;lt;/h2&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;p class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- Table for some challenge meta-info --&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered span4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Points required to complete:&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;points_required&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Time left (hours):&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;round(duration div 1800)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;!-- List all challenge tasks --&amp;gt;&lt;br /&gt;
            &amp;lt;h3 style=&amp;quot;margin-top:140px&amp;quot;&amp;gt;Tasks (&amp;lt;xsl:value-of select=&amp;quot;@tasks&amp;quot;/&amp;gt;)&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered table-striped table-condensed&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;thead&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;ID&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Title&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Badge&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Rewards&amp;lt;/th&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/thead&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;tasks/task&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;tr&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Color the row gray if task is completed --&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;@completed&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:attribute name=&amp;quot;class&amp;quot;&amp;gt;&lt;br /&gt;
                        help-block&lt;br /&gt;
                      &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                      &amp;lt;/img&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:for-each select=&amp;quot;rewards/reward&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;li&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=1&amp;quot;&amp;gt;&lt;br /&gt;
                              Compassion&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=2&amp;quot;&amp;gt;&lt;br /&gt;
                              Strength&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=3&amp;quot;&amp;gt;&lt;br /&gt;
                              Intelligence&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;span&amp;gt;&lt;br /&gt;
                              &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                            &amp;lt;/span&amp;gt;&lt;br /&gt;
                          &amp;lt;/li&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;!-- End of challenge task table --&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;!-- End of challenge --&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD (skeemifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsd link]] ===&lt;br /&gt;
&lt;br /&gt;
Skeemifail kirjeldab päringu vastuse XML struktuuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;challenges&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;challenge&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;duration&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;points_required&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;tasks&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;task&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rewards&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;reward&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:extension base=&amp;quot;xs:unsignedByte&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:attribute name=&amp;quot;power_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;completed&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;max_points&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;tasks&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;progress&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Veebiteenus ==&lt;br /&gt;
&#039;&#039;Tähtaeg 14. aprill 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:challengo_req2.png|300px|thumb|Näidis HTTP API päringust]]&lt;br /&gt;
&lt;br /&gt;
Veebiteenusena realiseeriti API, mis võimaldab klientide registreerimist, haldamist ning Challengo teenuse põhifunktsionaalsuse pakkumist HTTP päringute kaudu. API loomisel kasutati RESTful arhitektuuri. Täpsem dokumentatsioon asub API lehel: [http://api.sqroot.eu &amp;quot;API dokumentatsioon&amp;quot;] (tegemist on ajutise aadressiga, mis võetakse maha aine lõppemisel).&lt;br /&gt;
&lt;br /&gt;
Veebiteenusel ei ole eraldi kasutajaliidest. Testimiseks on kaks varianti:&lt;br /&gt;
&lt;br /&gt;
# Luua ise vastav kasutajaliides ehk klientrakendus&lt;br /&gt;
# Kasutada mõnd abitööriista HTTP päringute koostamiseks. Soovitus: [https://chrome.google.com/webstore/detail/aejoelaoggembcahagimdiliamlcdmfm &amp;quot;Chrome plugin&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
Autentimisandmed rakendusele saab luua dokumentatsiooni lehel oleva vormi kaudu (andmed saadetakse e-mailile). Kasutajakonto saab luua juba API päringute abil.&lt;br /&gt;
&lt;br /&gt;
=== Kood ===&lt;br /&gt;
&lt;br /&gt;
Lähtekoodi saab [http://api.sqroot.eu/challengo-2012-04-29-v2.0.tar.gz siit]. Kohtmasinasse paigaldamiseks tuleb alla laadida [http://kohanaframework.org Kohana] framework ning paigaldada application/bootstrap.php failis märgitud moodulid. Andmebaasi schema on database kaustas. Kood on testitud ainult Linux platvormil LAMP stack-iga.&lt;br /&gt;
&lt;br /&gt;
== Klientrakendus ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 5. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Klientrakendus on Windows Phone 7 klient Challengo teenusele, mis kasutab projekti esimeses osas koostatud XML andmestruktuuri.&lt;br /&gt;
&lt;br /&gt;
XML-i väljastab Challengo API, mis vajab veel kirjutamist. Challengo on realiseeritud PHP-s.&lt;br /&gt;
&lt;br /&gt;
=== Feature set ===&lt;br /&gt;
&lt;br /&gt;
* Autentimine&lt;br /&gt;
** Login&lt;br /&gt;
** Logout&lt;br /&gt;
* Nimekiri aktiivsetest väljakutsetest ja nende staatustest&lt;br /&gt;
** Nimekiri väljakutse alamülesannetest ja nende staatustest&lt;br /&gt;
* Väljakutse märkimine lõpetatuks&lt;br /&gt;
** Alamülesande märkimine lõpetatuks&lt;br /&gt;
* Uue väljakutse valimine nimekirjast&lt;br /&gt;
** Väljakutse detailide ja alamülesannete vaatamine&lt;br /&gt;
* Väljakutse &amp;quot;hülgamine&amp;quot; (&#039;&#039;abandon&#039;&#039;)&lt;br /&gt;
* Kasutaja statistika näitamine&lt;br /&gt;
** Praegune punktiseis&lt;br /&gt;
** Lõpetatud väljakutsed&lt;br /&gt;
*** Lõpetatud alamülesanded&lt;br /&gt;
** Teenitud märgid&lt;br /&gt;
&lt;br /&gt;
= Meeskonna Liikmed =&lt;br /&gt;
&lt;br /&gt;
* Ando Roots &#039;&#039;anroots@itcollege.ee&#039;&#039;&lt;br /&gt;
* Mikk Pärast &#039;&#039;mparast@itcollege.ee&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Liitumine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for t in tudengid:&lt;br /&gt;
  if !t.laisk &amp;amp;&amp;amp; t.oskab_progreda:&lt;br /&gt;
    kutsu_meeskonda(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ mail -s &amp;quot;Harold&amp;quot; anroots@itcollege.ee&amp;lt;/pre&amp;gt;&lt;br /&gt;
Eeldan varasemaid teadmisi ning usaldusväärsust. Soovin, et asi ei lõppeks jälle nii, et projektijuht on kaitsmiseelsel õhtul üleval ja lõpetab üksinda projekti.&lt;br /&gt;
Ole nii kena ja anna huvist märku enne &#039;&#039;&#039;26. veebruari&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Lisad =&lt;br /&gt;
&lt;br /&gt;
[http://jaa.ee Kes on Harold?]&lt;br /&gt;
&lt;br /&gt;
== Challengo ==&lt;br /&gt;
&lt;br /&gt;
Challengo.me on Garage48 Tallinn 2011 raames alustatud veebiteenus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A social network of themed challenges, comes with a Karma profile and level-system.&lt;br /&gt;
Revenues from ads on the mobile version.&lt;br /&gt;
Team members: Ando Roots, Kristo Vaher, Valeria Gasik, Jelena Savinen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube v=&amp;quot;pPfHJD5F7sc&amp;quot; /&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=pPfHJD5F7sc Jelena tutvustab Challengo teenust]&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=47578</id>
		<title>Meeskond &quot;Harold&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=47578"/>
		<updated>2012-04-29T23:21:44Z</updated>

		<summary type="html">&lt;p&gt;Anroots: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
{| style=&amp;quot;width:100%;height: 40px; background-color:#dff0d8;border: 1px solid ##468847;color:#468847;padding:10px;font-size:16px;font-weight:bold-webkit-border-radius: 8px;-moz-border-radius: 8px;border-radius: 8px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
| Praeguses faasis tegeleb tiim veebiteenuse kaitsmisega.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Tegemist on IT Kolledži aine raames eksamieeldust taotleva projektimeeskonna töö dokumentatsiooniga.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 30em; padding-left: 2em; float: right; font-size: 95%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Meeskond &#039;&#039;&amp;quot;Harold&amp;quot;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Aine:&#039;&#039;&#039;&lt;br /&gt;
| [[:Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhend:&#039;&#039;&#039;&lt;br /&gt;
| [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2012 Juhend]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Tüüp:&#039;&#039;&#039;&lt;br /&gt;
| Projekt&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Anroots]]&amp;lt;br /&amp;gt;[[User:Mparast]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhendajad:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Mposka]]&amp;lt;br /&amp;gt;[[User:Kraspel]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Semester:&#039;&#039;&#039;&lt;br /&gt;
| 2011/2012 kevad&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Lingid&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|API Demo&lt;br /&gt;
|[http://api.sqroot.eu http://api.sqroot.eu]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Projekt =&lt;br /&gt;
&lt;br /&gt;
Projekti esimesed kaks osa keskenduvad veebiteenuse &amp;quot;Challengo&amp;quot; taasloomisele. Projekti esimene osa valmistab ette peamis(t)e päringu(te) XML vastuse struktuuri, projekti teine osa (veebiteenuse loomine) ehitab vastava API.&lt;br /&gt;
&lt;br /&gt;
== Korraldus ==&lt;br /&gt;
&lt;br /&gt;
Projektiga seonduv dokumentatsioon (erandiks on käesolev wiki leht), kasutajale nähtavad tekstid ning lähtekood on kirjutatud inglise keeles. Võimalusel on kood kirjutatud hilisema I18n toe võimaldamiseks.&lt;br /&gt;
&lt;br /&gt;
Koodi haldab GitHub repositoorium, juurdepääsu saamiseks tuleb projektijuhile saata oma GitHub kasutajanimi (või &#039;&#039;pull request&#039;&#039;). Tegemist vajavaid töid näeb GitHub lehel &#039;&#039;Issues&#039;&#039; vahekaardilt ning asjakohane dokumentatsioon (API) on GitHub wiki alamjaotises.&lt;br /&gt;
&lt;br /&gt;
Lähtekood on põhjalikult kommenteeritud, muud, eraldiseisvat dokumentatsiooni koodi kohta on minimaalselt.&lt;br /&gt;
&lt;br /&gt;
== XML Andmefailid ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 3. märts 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
XML andmefail kirjeldab veebiteenuse &amp;quot;[http://garage48.org/blogger/projects-on-garage48-tallinn-2011 Challengo]&amp;quot; andmeid. Andmed asuvad MYSQL andmebaasis, mille struktuur on kirjeldatud ERD mudeliga [[File:Harold_Challengo_MYSQL_ERD.png|200px|thumb|MYSQL ERD mudel]]. XML formaadis andmeid väljastab serveris asuv PHP API. Järgnevalt toodud XML näited ei pruugi projekti esimese osa nõudmiste tõttu olla vastavuses teise osana valmiva veebiteenuse tegeliku väljundiga.&lt;br /&gt;
&lt;br /&gt;
Faile saab vaadata ka võrgust: http://enos.itcollege.ee/~anroots/challengo/xml/. Soovitatav on seda teha just XSLT stiilifaili jaoks (http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml).&lt;br /&gt;
&lt;br /&gt;
=== XML [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml link]]===&lt;br /&gt;
&lt;br /&gt;
Järgnevalt on toodud lõik kasutaja praeguste väljakutsete päringust. Kasutajal on parajasti kaks aktiivset väljakutset, igal väljakutsel on veidi meta-infot, mingi hulk ülesandeid (tasks) ning igal ülesandel on üks või mitu autasu (rewards).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;Response.xsl&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!-- List of user&#039;s current challenges --&amp;gt;&lt;br /&gt;
&amp;lt;challenges&amp;gt;&lt;br /&gt;
  &amp;lt;!-- First challenge, started by the user --&amp;gt;&lt;br /&gt;
  &amp;lt;challenge id=&amp;quot;4&amp;quot; tasks=&amp;quot;6&amp;quot; progress=&amp;quot;17%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;The Improgrupp Jaa!&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Inspired by a true story, the Improgrupp Jaa! contains tasks that challenge ones spontaniety and social courage.&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;duration&amp;gt;1209600&amp;lt;/duration&amp;gt;&lt;br /&gt;
    &amp;lt;points_required&amp;gt;18&amp;lt;/points_required&amp;gt;&lt;br /&gt;
    &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;!-- Each challenge has a number of tasks that have to be completed.--&amp;gt;&lt;br /&gt;
    &amp;lt;!-- No challenge can be completed before earned points from tasks (rewards) exceed the points_required field --&amp;gt;&lt;br /&gt;
    &amp;lt;tasks max_points=&amp;quot;26&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;19&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Make a present to a homeless person&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;If you can read this, you&#039;re probably among the luckier ones. Do something for the ones who can&#039;t.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;!-- Each task yields rewards on completion. Rewards are &amp;quot;power&amp;quot; points of different categories.--&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;20&amp;quot; completed=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment a stranger&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Make a sincere compliment to someone you don&#039;t know. We could do with more praise where it&#039;s due.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;21&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Do volunteer work&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Offer yourself as a volunteer to an event or a cause.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;22&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Perform to a security camera&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Do a little dance to a security camera. It shouldn&#039;t be illegal...probably. Don&#039;t get in trouble!&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;23&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment someone for a job well done&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;When was the last time you thanked the janitor?&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;24&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Take a day off&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;This is mostly for work-a-holics: rest for a while.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
    &amp;lt;/tasks&amp;gt;&lt;br /&gt;
  &amp;lt;/challenge&amp;gt;&lt;br /&gt;
&amp;lt;/challenges&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT (stiilifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsl link]] ===&lt;br /&gt;
&lt;br /&gt;
Toodud stiilifail muudab ülaltoodud XML vastuse inimesele kergemini loetavaks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html class=&amp;quot;no-js&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;Ando Roots&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Challengo Response&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.css&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.responsive.css&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Challengo API response&amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
            The following is a list of challenges reported by the XML API.&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;!-- Go over each challenge --&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;challenges/challenge&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h2&amp;gt;&lt;br /&gt;
              &lt;br /&gt;
              &amp;lt;!-- Challenge badge image and title --&amp;gt;&lt;br /&gt;
              &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;&lt;br /&gt;
                  http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/img&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
              &amp;lt;!-- Challenge progress, if applicable --&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:if test=&amp;quot;@progress&amp;quot;&amp;gt;&lt;br /&gt;
                (&amp;lt;span&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@progress&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/span&amp;gt;)&lt;br /&gt;
              &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
            &amp;lt;/h2&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;p class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- Table for some challenge meta-info --&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered span4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Points required to complete:&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;points_required&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Time left (hours):&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;round(duration div 1800)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;!-- List all challenge tasks --&amp;gt;&lt;br /&gt;
            &amp;lt;h3 style=&amp;quot;margin-top:140px&amp;quot;&amp;gt;Tasks (&amp;lt;xsl:value-of select=&amp;quot;@tasks&amp;quot;/&amp;gt;)&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered table-striped table-condensed&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;thead&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;ID&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Title&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Badge&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Rewards&amp;lt;/th&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/thead&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;tasks/task&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;tr&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Color the row gray if task is completed --&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;@completed&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:attribute name=&amp;quot;class&amp;quot;&amp;gt;&lt;br /&gt;
                        help-block&lt;br /&gt;
                      &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                      &amp;lt;/img&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:for-each select=&amp;quot;rewards/reward&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;li&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=1&amp;quot;&amp;gt;&lt;br /&gt;
                              Compassion&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=2&amp;quot;&amp;gt;&lt;br /&gt;
                              Strength&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=3&amp;quot;&amp;gt;&lt;br /&gt;
                              Intelligence&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;span&amp;gt;&lt;br /&gt;
                              &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                            &amp;lt;/span&amp;gt;&lt;br /&gt;
                          &amp;lt;/li&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;!-- End of challenge task table --&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;!-- End of challenge --&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD (skeemifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsd link]] ===&lt;br /&gt;
&lt;br /&gt;
Skeemifail kirjeldab päringu vastuse XML struktuuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;challenges&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;challenge&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;duration&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;points_required&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;tasks&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;task&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rewards&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;reward&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:extension base=&amp;quot;xs:unsignedByte&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:attribute name=&amp;quot;power_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;completed&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;max_points&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;tasks&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;progress&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Veebiteenus ==&lt;br /&gt;
&#039;&#039;Tähtaeg 14. aprill 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:challengo_req2.png|300px|thumb|Näidis HTTP API päringust]]&lt;br /&gt;
&lt;br /&gt;
Veebiteenusena realiseeriti API, mis võimaldab klientide registreerimist, haldamist ning Challengo teenuse põhifunktsionaalsuse pakkumist HTTP päringute kaudu. API loomisel kasutati RESTful arhitektuuri. Täpsem dokumentatsioon asub API lehel: [http://api.sqroot.eu &amp;quot;API dokumentatsioon&amp;quot;] (tegemist on ajutise aadressiga, mis võetakse maha aine lõppemisel).&lt;br /&gt;
&lt;br /&gt;
Veebiteenusel ei ole eraldi kasutajaliidest. Testimiseks on kaks varianti:&lt;br /&gt;
&lt;br /&gt;
# Luua ise vastav kasutajaliides ehk klientrakendus&lt;br /&gt;
# Kasutada mõnd abitööriista HTTP päringute koostamiseks. Soovitus: [https://chrome.google.com/webstore/detail/aejoelaoggembcahagimdiliamlcdmfm &amp;quot;Chrome plugin&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
Autentimisandmed rakendusele saab luua dokumentatsiooni lehel oleva vormi kaudu (andmed saadetakse e-mailile). Kasutajakonto saab luua juba API päringute abil.&lt;br /&gt;
&lt;br /&gt;
=== Kood ===&lt;br /&gt;
&lt;br /&gt;
Lähtekoodi saab [http://api.sqroot.eu/challengo-2012-04-29-v2.0.tar.gz siit]. Kohtmasinasse paigaldamiseks tuleb alla laadida [http://kohanaframework.org Kohana] framework ning paigaldada application/bootstrap.php failis märgitud moodulid. Andmebaasi schema on database kaustas.&lt;br /&gt;
&lt;br /&gt;
== Klientrakendus ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 5. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Klientrakendus on Windows Phone 7 klient Challengo teenusele, mis kasutab projekti esimeses osas koostatud XML andmestruktuuri.&lt;br /&gt;
&lt;br /&gt;
XML-i väljastab Challengo API, mis vajab veel kirjutamist. Challengo on realiseeritud PHP-s.&lt;br /&gt;
&lt;br /&gt;
=== Feature set ===&lt;br /&gt;
&lt;br /&gt;
* Autentimine&lt;br /&gt;
** Login&lt;br /&gt;
** Logout&lt;br /&gt;
* Nimekiri aktiivsetest väljakutsetest ja nende staatustest&lt;br /&gt;
** Nimekiri väljakutse alamülesannetest ja nende staatustest&lt;br /&gt;
* Väljakutse märkimine lõpetatuks&lt;br /&gt;
** Alamülesande märkimine lõpetatuks&lt;br /&gt;
* Uue väljakutse valimine nimekirjast&lt;br /&gt;
** Väljakutse detailide ja alamülesannete vaatamine&lt;br /&gt;
* Väljakutse &amp;quot;hülgamine&amp;quot; (&#039;&#039;abandon&#039;&#039;)&lt;br /&gt;
* Kasutaja statistika näitamine&lt;br /&gt;
** Praegune punktiseis&lt;br /&gt;
** Lõpetatud väljakutsed&lt;br /&gt;
*** Lõpetatud alamülesanded&lt;br /&gt;
** Teenitud märgid&lt;br /&gt;
&lt;br /&gt;
= Meeskonna Liikmed =&lt;br /&gt;
&lt;br /&gt;
* Ando Roots &#039;&#039;anroots@itcollege.ee&#039;&#039;&lt;br /&gt;
* Mikk Pärast &#039;&#039;mparast@itcollege.ee&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Liitumine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for t in tudengid:&lt;br /&gt;
  if !t.laisk &amp;amp;&amp;amp; t.oskab_progreda:&lt;br /&gt;
    kutsu_meeskonda(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ mail -s &amp;quot;Harold&amp;quot; anroots@itcollege.ee&amp;lt;/pre&amp;gt;&lt;br /&gt;
Eeldan varasemaid teadmisi ning usaldusväärsust. Soovin, et asi ei lõppeks jälle nii, et projektijuht on kaitsmiseelsel õhtul üleval ja lõpetab üksinda projekti.&lt;br /&gt;
Ole nii kena ja anna huvist märku enne &#039;&#039;&#039;26. veebruari&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Lisad =&lt;br /&gt;
&lt;br /&gt;
[http://jaa.ee Kes on Harold?]&lt;br /&gt;
&lt;br /&gt;
== Challengo ==&lt;br /&gt;
&lt;br /&gt;
Challengo.me on Garage48 Tallinn 2011 raames alustatud veebiteenus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A social network of themed challenges, comes with a Karma profile and level-system.&lt;br /&gt;
Revenues from ads on the mobile version.&lt;br /&gt;
Team members: Ando Roots, Kristo Vaher, Valeria Gasik, Jelena Savinen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube v=&amp;quot;pPfHJD5F7sc&amp;quot; /&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=pPfHJD5F7sc Jelena tutvustab Challengo teenust]&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=47577</id>
		<title>Meeskond &quot;Harold&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=47577"/>
		<updated>2012-04-29T23:12:39Z</updated>

		<summary type="html">&lt;p&gt;Anroots: /* Veebiteenus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
{| style=&amp;quot;width:100%;height: 40px; background-color:#dff0d8;border: 1px solid ##468847;color:#468847;padding:10px;font-size:16px;font-weight:bold-webkit-border-radius: 8px;-moz-border-radius: 8px;border-radius: 8px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
| Praeguses faasis tegeleb tiim veebiteenuse kaitsmisega.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Tegemist on IT Kolledži aine raames eksamieeldust taotleva projektimeeskonna töö dokumentatsiooniga.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 30em; padding-left: 2em; float: right; font-size: 95%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Meeskond &#039;&#039;&amp;quot;Harold&amp;quot;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Aine:&#039;&#039;&#039;&lt;br /&gt;
| [[:Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhend:&#039;&#039;&#039;&lt;br /&gt;
| [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2012 Juhend]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Tüüp:&#039;&#039;&#039;&lt;br /&gt;
| Projekt&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Anroots]]&amp;lt;br /&amp;gt;[[User:Mparast]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhendajad:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Mposka]]&amp;lt;br /&amp;gt;[[User:Kraspel]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Semester:&#039;&#039;&#039;&lt;br /&gt;
| 2011/2012 kevad&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Kood (Git)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Challengo:&#039;&#039;&#039;&lt;br /&gt;
| [http://trac.sqroot.eu/projects/challengo/ SQroot Tracker]&lt;br /&gt;
|-&lt;br /&gt;
|API Demo&lt;br /&gt;
|[https://challengo.sqroot.eu/wp7 https://challengo.sqroot.eu/wp7]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Projekt =&lt;br /&gt;
&lt;br /&gt;
Projekti esimesed kaks osa keskenduvad veebiteenuse &amp;quot;Challengo&amp;quot; taasloomisele. Projekti esimene osa valmistab ette peamis(t)e päringu(te) XML vastuse struktuuri, projekti teine osa (veebiteenuse loomine) ehitab vastava API.&lt;br /&gt;
&lt;br /&gt;
== Korraldus ==&lt;br /&gt;
&lt;br /&gt;
Projektiga seonduv dokumentatsioon (erandiks on käesolev wiki leht), kasutajale nähtavad tekstid ning lähtekood on kirjutatud inglise keeles. Võimalusel on kood kirjutatud hilisema I18n toe võimaldamiseks.&lt;br /&gt;
&lt;br /&gt;
Koodi haldab GitHub repositoorium, juurdepääsu saamiseks tuleb projektijuhile saata oma GitHub kasutajanimi (või &#039;&#039;pull request&#039;&#039;). Tegemist vajavaid töid näeb GitHub lehel &#039;&#039;Issues&#039;&#039; vahekaardilt ning asjakohane dokumentatsioon (API) on GitHub wiki alamjaotises.&lt;br /&gt;
&lt;br /&gt;
Lähtekood on põhjalikult kommenteeritud, muud, eraldiseisvat dokumentatsiooni koodi kohta on minimaalselt.&lt;br /&gt;
&lt;br /&gt;
== XML Andmefailid ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 3. märts 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
XML andmefail kirjeldab veebiteenuse &amp;quot;[http://garage48.org/blogger/projects-on-garage48-tallinn-2011 Challengo]&amp;quot; andmeid. Andmed asuvad MYSQL andmebaasis, mille struktuur on kirjeldatud ERD mudeliga [[File:Harold_Challengo_MYSQL_ERD.png|200px|thumb|MYSQL ERD mudel]]. XML formaadis andmeid väljastab serveris asuv PHP API. Järgnevalt toodud XML näited ei pruugi projekti esimese osa nõudmiste tõttu olla vastavuses teise osana valmiva veebiteenuse tegeliku väljundiga.&lt;br /&gt;
&lt;br /&gt;
Faile saab vaadata ka võrgust: http://enos.itcollege.ee/~anroots/challengo/xml/. Soovitatav on seda teha just XSLT stiilifaili jaoks (http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml).&lt;br /&gt;
&lt;br /&gt;
=== XML [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml link]]===&lt;br /&gt;
&lt;br /&gt;
Järgnevalt on toodud lõik kasutaja praeguste väljakutsete päringust. Kasutajal on parajasti kaks aktiivset väljakutset, igal väljakutsel on veidi meta-infot, mingi hulk ülesandeid (tasks) ning igal ülesandel on üks või mitu autasu (rewards).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;Response.xsl&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!-- List of user&#039;s current challenges --&amp;gt;&lt;br /&gt;
&amp;lt;challenges&amp;gt;&lt;br /&gt;
  &amp;lt;!-- First challenge, started by the user --&amp;gt;&lt;br /&gt;
  &amp;lt;challenge id=&amp;quot;4&amp;quot; tasks=&amp;quot;6&amp;quot; progress=&amp;quot;17%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;The Improgrupp Jaa!&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Inspired by a true story, the Improgrupp Jaa! contains tasks that challenge ones spontaniety and social courage.&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;duration&amp;gt;1209600&amp;lt;/duration&amp;gt;&lt;br /&gt;
    &amp;lt;points_required&amp;gt;18&amp;lt;/points_required&amp;gt;&lt;br /&gt;
    &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;!-- Each challenge has a number of tasks that have to be completed.--&amp;gt;&lt;br /&gt;
    &amp;lt;!-- No challenge can be completed before earned points from tasks (rewards) exceed the points_required field --&amp;gt;&lt;br /&gt;
    &amp;lt;tasks max_points=&amp;quot;26&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;19&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Make a present to a homeless person&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;If you can read this, you&#039;re probably among the luckier ones. Do something for the ones who can&#039;t.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;!-- Each task yields rewards on completion. Rewards are &amp;quot;power&amp;quot; points of different categories.--&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;20&amp;quot; completed=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment a stranger&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Make a sincere compliment to someone you don&#039;t know. We could do with more praise where it&#039;s due.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;21&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Do volunteer work&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Offer yourself as a volunteer to an event or a cause.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;22&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Perform to a security camera&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Do a little dance to a security camera. It shouldn&#039;t be illegal...probably. Don&#039;t get in trouble!&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;23&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment someone for a job well done&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;When was the last time you thanked the janitor?&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;24&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Take a day off&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;This is mostly for work-a-holics: rest for a while.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
    &amp;lt;/tasks&amp;gt;&lt;br /&gt;
  &amp;lt;/challenge&amp;gt;&lt;br /&gt;
&amp;lt;/challenges&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT (stiilifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsl link]] ===&lt;br /&gt;
&lt;br /&gt;
Toodud stiilifail muudab ülaltoodud XML vastuse inimesele kergemini loetavaks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html class=&amp;quot;no-js&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;Ando Roots&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Challengo Response&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.css&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.responsive.css&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Challengo API response&amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
            The following is a list of challenges reported by the XML API.&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;!-- Go over each challenge --&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;challenges/challenge&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h2&amp;gt;&lt;br /&gt;
              &lt;br /&gt;
              &amp;lt;!-- Challenge badge image and title --&amp;gt;&lt;br /&gt;
              &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;&lt;br /&gt;
                  http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/img&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
              &amp;lt;!-- Challenge progress, if applicable --&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:if test=&amp;quot;@progress&amp;quot;&amp;gt;&lt;br /&gt;
                (&amp;lt;span&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@progress&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/span&amp;gt;)&lt;br /&gt;
              &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
            &amp;lt;/h2&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;p class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- Table for some challenge meta-info --&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered span4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Points required to complete:&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;points_required&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Time left (hours):&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;round(duration div 1800)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;!-- List all challenge tasks --&amp;gt;&lt;br /&gt;
            &amp;lt;h3 style=&amp;quot;margin-top:140px&amp;quot;&amp;gt;Tasks (&amp;lt;xsl:value-of select=&amp;quot;@tasks&amp;quot;/&amp;gt;)&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered table-striped table-condensed&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;thead&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;ID&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Title&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Badge&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Rewards&amp;lt;/th&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/thead&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;tasks/task&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;tr&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Color the row gray if task is completed --&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;@completed&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:attribute name=&amp;quot;class&amp;quot;&amp;gt;&lt;br /&gt;
                        help-block&lt;br /&gt;
                      &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                      &amp;lt;/img&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:for-each select=&amp;quot;rewards/reward&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;li&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=1&amp;quot;&amp;gt;&lt;br /&gt;
                              Compassion&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=2&amp;quot;&amp;gt;&lt;br /&gt;
                              Strength&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=3&amp;quot;&amp;gt;&lt;br /&gt;
                              Intelligence&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;span&amp;gt;&lt;br /&gt;
                              &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                            &amp;lt;/span&amp;gt;&lt;br /&gt;
                          &amp;lt;/li&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;!-- End of challenge task table --&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;!-- End of challenge --&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD (skeemifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsd link]] ===&lt;br /&gt;
&lt;br /&gt;
Skeemifail kirjeldab päringu vastuse XML struktuuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;challenges&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;challenge&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;duration&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;points_required&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;tasks&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;task&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rewards&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;reward&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:extension base=&amp;quot;xs:unsignedByte&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:attribute name=&amp;quot;power_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;completed&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;max_points&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;tasks&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;progress&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Veebiteenus ==&lt;br /&gt;
&#039;&#039;Tähtaeg 14. aprill 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:challengo_req2.png|300px|thumb|Näidis HTTP API päringust]]&lt;br /&gt;
&lt;br /&gt;
Veebiteenusena realiseeriti API, mis võimaldab klientide registreerimist, haldamist ning Challengo teenuse põhifunktsionaalsuse pakkumist HTTP päringute kaudu. API loomisel kasutati RESTful arhitektuuri. Täpsem dokumentatsioon asub API lehel: [http://api.sqroot.eu &amp;quot;API dokumentatsioon&amp;quot;] (tegemist on ajutise aadressiga, mis võetakse maha aine lõppemisel).&lt;br /&gt;
&lt;br /&gt;
Veebiteenusel ei ole eraldi kasutajaliidest. Testimiseks on kaks varianti:&lt;br /&gt;
&lt;br /&gt;
# Luua ise vastav kasutajaliides ehk klientrakendus&lt;br /&gt;
# Kasutada mõnd abitööriista HTTP päringute koostamiseks. Soovitus: [https://chrome.google.com/webstore/detail/aejoelaoggembcahagimdiliamlcdmfm &amp;quot;Chrome plugin&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
Autentimisandmed rakendusele saab luua dokumentatsiooni lehel oleva vormi kaudu (andmed saadetakse e-mailile). Kasutajakonto saab luua juba API päringute abil.&lt;br /&gt;
&lt;br /&gt;
== Klientrakendus ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 5. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Klientrakendus on Windows Phone 7 klient Challengo teenusele, mis kasutab projekti esimeses osas koostatud XML andmestruktuuri.&lt;br /&gt;
&lt;br /&gt;
XML-i väljastab Challengo API, mis vajab veel kirjutamist. Challengo on realiseeritud PHP-s.&lt;br /&gt;
&lt;br /&gt;
=== Feature set ===&lt;br /&gt;
&lt;br /&gt;
* Autentimine&lt;br /&gt;
** Login&lt;br /&gt;
** Logout&lt;br /&gt;
* Nimekiri aktiivsetest väljakutsetest ja nende staatustest&lt;br /&gt;
** Nimekiri väljakutse alamülesannetest ja nende staatustest&lt;br /&gt;
* Väljakutse märkimine lõpetatuks&lt;br /&gt;
** Alamülesande märkimine lõpetatuks&lt;br /&gt;
* Uue väljakutse valimine nimekirjast&lt;br /&gt;
** Väljakutse detailide ja alamülesannete vaatamine&lt;br /&gt;
* Väljakutse &amp;quot;hülgamine&amp;quot; (&#039;&#039;abandon&#039;&#039;)&lt;br /&gt;
* Kasutaja statistika näitamine&lt;br /&gt;
** Praegune punktiseis&lt;br /&gt;
** Lõpetatud väljakutsed&lt;br /&gt;
*** Lõpetatud alamülesanded&lt;br /&gt;
** Teenitud märgid&lt;br /&gt;
&lt;br /&gt;
= Meeskonna Liikmed =&lt;br /&gt;
&lt;br /&gt;
* Ando Roots &#039;&#039;anroots@itcollege.ee&#039;&#039;&lt;br /&gt;
* Mikk Pärast &#039;&#039;mparast@itcollege.ee&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Liitumine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for t in tudengid:&lt;br /&gt;
  if !t.laisk &amp;amp;&amp;amp; t.oskab_progreda:&lt;br /&gt;
    kutsu_meeskonda(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ mail -s &amp;quot;Harold&amp;quot; anroots@itcollege.ee&amp;lt;/pre&amp;gt;&lt;br /&gt;
Eeldan varasemaid teadmisi ning usaldusväärsust. Soovin, et asi ei lõppeks jälle nii, et projektijuht on kaitsmiseelsel õhtul üleval ja lõpetab üksinda projekti.&lt;br /&gt;
Ole nii kena ja anna huvist märku enne &#039;&#039;&#039;26. veebruari&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Lisad =&lt;br /&gt;
&lt;br /&gt;
[http://jaa.ee Kes on Harold?]&lt;br /&gt;
&lt;br /&gt;
== Challengo ==&lt;br /&gt;
&lt;br /&gt;
Challengo.me on Garage48 Tallinn 2011 raames alustatud veebiteenus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A social network of themed challenges, comes with a Karma profile and level-system.&lt;br /&gt;
Revenues from ads on the mobile version.&lt;br /&gt;
Team members: Ando Roots, Kristo Vaher, Valeria Gasik, Jelena Savinen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube v=&amp;quot;pPfHJD5F7sc&amp;quot; /&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=pPfHJD5F7sc Jelena tutvustab Challengo teenust]&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=47576</id>
		<title>Meeskond &quot;Harold&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=47576"/>
		<updated>2012-04-29T23:12:28Z</updated>

		<summary type="html">&lt;p&gt;Anroots: /* Veebiteenus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
{| style=&amp;quot;width:100%;height: 40px; background-color:#dff0d8;border: 1px solid ##468847;color:#468847;padding:10px;font-size:16px;font-weight:bold-webkit-border-radius: 8px;-moz-border-radius: 8px;border-radius: 8px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
| Praeguses faasis tegeleb tiim veebiteenuse kaitsmisega.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Tegemist on IT Kolledži aine raames eksamieeldust taotleva projektimeeskonna töö dokumentatsiooniga.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 30em; padding-left: 2em; float: right; font-size: 95%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Meeskond &#039;&#039;&amp;quot;Harold&amp;quot;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Aine:&#039;&#039;&#039;&lt;br /&gt;
| [[:Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhend:&#039;&#039;&#039;&lt;br /&gt;
| [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2012 Juhend]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Tüüp:&#039;&#039;&#039;&lt;br /&gt;
| Projekt&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Anroots]]&amp;lt;br /&amp;gt;[[User:Mparast]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhendajad:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Mposka]]&amp;lt;br /&amp;gt;[[User:Kraspel]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Semester:&#039;&#039;&#039;&lt;br /&gt;
| 2011/2012 kevad&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Kood (Git)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Challengo:&#039;&#039;&#039;&lt;br /&gt;
| [http://trac.sqroot.eu/projects/challengo/ SQroot Tracker]&lt;br /&gt;
|-&lt;br /&gt;
|API Demo&lt;br /&gt;
|[https://challengo.sqroot.eu/wp7 https://challengo.sqroot.eu/wp7]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Projekt =&lt;br /&gt;
&lt;br /&gt;
Projekti esimesed kaks osa keskenduvad veebiteenuse &amp;quot;Challengo&amp;quot; taasloomisele. Projekti esimene osa valmistab ette peamis(t)e päringu(te) XML vastuse struktuuri, projekti teine osa (veebiteenuse loomine) ehitab vastava API.&lt;br /&gt;
&lt;br /&gt;
== Korraldus ==&lt;br /&gt;
&lt;br /&gt;
Projektiga seonduv dokumentatsioon (erandiks on käesolev wiki leht), kasutajale nähtavad tekstid ning lähtekood on kirjutatud inglise keeles. Võimalusel on kood kirjutatud hilisema I18n toe võimaldamiseks.&lt;br /&gt;
&lt;br /&gt;
Koodi haldab GitHub repositoorium, juurdepääsu saamiseks tuleb projektijuhile saata oma GitHub kasutajanimi (või &#039;&#039;pull request&#039;&#039;). Tegemist vajavaid töid näeb GitHub lehel &#039;&#039;Issues&#039;&#039; vahekaardilt ning asjakohane dokumentatsioon (API) on GitHub wiki alamjaotises.&lt;br /&gt;
&lt;br /&gt;
Lähtekood on põhjalikult kommenteeritud, muud, eraldiseisvat dokumentatsiooni koodi kohta on minimaalselt.&lt;br /&gt;
&lt;br /&gt;
== XML Andmefailid ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 3. märts 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
XML andmefail kirjeldab veebiteenuse &amp;quot;[http://garage48.org/blogger/projects-on-garage48-tallinn-2011 Challengo]&amp;quot; andmeid. Andmed asuvad MYSQL andmebaasis, mille struktuur on kirjeldatud ERD mudeliga [[File:Harold_Challengo_MYSQL_ERD.png|200px|thumb|MYSQL ERD mudel]]. XML formaadis andmeid väljastab serveris asuv PHP API. Järgnevalt toodud XML näited ei pruugi projekti esimese osa nõudmiste tõttu olla vastavuses teise osana valmiva veebiteenuse tegeliku väljundiga.&lt;br /&gt;
&lt;br /&gt;
Faile saab vaadata ka võrgust: http://enos.itcollege.ee/~anroots/challengo/xml/. Soovitatav on seda teha just XSLT stiilifaili jaoks (http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml).&lt;br /&gt;
&lt;br /&gt;
=== XML [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml link]]===&lt;br /&gt;
&lt;br /&gt;
Järgnevalt on toodud lõik kasutaja praeguste väljakutsete päringust. Kasutajal on parajasti kaks aktiivset väljakutset, igal väljakutsel on veidi meta-infot, mingi hulk ülesandeid (tasks) ning igal ülesandel on üks või mitu autasu (rewards).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;Response.xsl&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!-- List of user&#039;s current challenges --&amp;gt;&lt;br /&gt;
&amp;lt;challenges&amp;gt;&lt;br /&gt;
  &amp;lt;!-- First challenge, started by the user --&amp;gt;&lt;br /&gt;
  &amp;lt;challenge id=&amp;quot;4&amp;quot; tasks=&amp;quot;6&amp;quot; progress=&amp;quot;17%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;The Improgrupp Jaa!&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Inspired by a true story, the Improgrupp Jaa! contains tasks that challenge ones spontaniety and social courage.&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;duration&amp;gt;1209600&amp;lt;/duration&amp;gt;&lt;br /&gt;
    &amp;lt;points_required&amp;gt;18&amp;lt;/points_required&amp;gt;&lt;br /&gt;
    &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;!-- Each challenge has a number of tasks that have to be completed.--&amp;gt;&lt;br /&gt;
    &amp;lt;!-- No challenge can be completed before earned points from tasks (rewards) exceed the points_required field --&amp;gt;&lt;br /&gt;
    &amp;lt;tasks max_points=&amp;quot;26&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;19&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Make a present to a homeless person&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;If you can read this, you&#039;re probably among the luckier ones. Do something for the ones who can&#039;t.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;!-- Each task yields rewards on completion. Rewards are &amp;quot;power&amp;quot; points of different categories.--&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;20&amp;quot; completed=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment a stranger&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Make a sincere compliment to someone you don&#039;t know. We could do with more praise where it&#039;s due.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;21&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Do volunteer work&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Offer yourself as a volunteer to an event or a cause.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;22&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Perform to a security camera&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Do a little dance to a security camera. It shouldn&#039;t be illegal...probably. Don&#039;t get in trouble!&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;23&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment someone for a job well done&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;When was the last time you thanked the janitor?&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;24&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Take a day off&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;This is mostly for work-a-holics: rest for a while.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
    &amp;lt;/tasks&amp;gt;&lt;br /&gt;
  &amp;lt;/challenge&amp;gt;&lt;br /&gt;
&amp;lt;/challenges&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT (stiilifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsl link]] ===&lt;br /&gt;
&lt;br /&gt;
Toodud stiilifail muudab ülaltoodud XML vastuse inimesele kergemini loetavaks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html class=&amp;quot;no-js&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;Ando Roots&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Challengo Response&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.css&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.responsive.css&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Challengo API response&amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
            The following is a list of challenges reported by the XML API.&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;!-- Go over each challenge --&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;challenges/challenge&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h2&amp;gt;&lt;br /&gt;
              &lt;br /&gt;
              &amp;lt;!-- Challenge badge image and title --&amp;gt;&lt;br /&gt;
              &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;&lt;br /&gt;
                  http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/img&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
              &amp;lt;!-- Challenge progress, if applicable --&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:if test=&amp;quot;@progress&amp;quot;&amp;gt;&lt;br /&gt;
                (&amp;lt;span&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@progress&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/span&amp;gt;)&lt;br /&gt;
              &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
            &amp;lt;/h2&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;p class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- Table for some challenge meta-info --&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered span4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Points required to complete:&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;points_required&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Time left (hours):&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;round(duration div 1800)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;!-- List all challenge tasks --&amp;gt;&lt;br /&gt;
            &amp;lt;h3 style=&amp;quot;margin-top:140px&amp;quot;&amp;gt;Tasks (&amp;lt;xsl:value-of select=&amp;quot;@tasks&amp;quot;/&amp;gt;)&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered table-striped table-condensed&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;thead&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;ID&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Title&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Badge&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Rewards&amp;lt;/th&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/thead&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;tasks/task&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;tr&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Color the row gray if task is completed --&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;@completed&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:attribute name=&amp;quot;class&amp;quot;&amp;gt;&lt;br /&gt;
                        help-block&lt;br /&gt;
                      &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                      &amp;lt;/img&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:for-each select=&amp;quot;rewards/reward&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;li&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=1&amp;quot;&amp;gt;&lt;br /&gt;
                              Compassion&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=2&amp;quot;&amp;gt;&lt;br /&gt;
                              Strength&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=3&amp;quot;&amp;gt;&lt;br /&gt;
                              Intelligence&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;span&amp;gt;&lt;br /&gt;
                              &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                            &amp;lt;/span&amp;gt;&lt;br /&gt;
                          &amp;lt;/li&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;!-- End of challenge task table --&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;!-- End of challenge --&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD (skeemifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsd link]] ===&lt;br /&gt;
&lt;br /&gt;
Skeemifail kirjeldab päringu vastuse XML struktuuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;challenges&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;challenge&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;duration&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;points_required&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;tasks&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;task&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rewards&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;reward&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:extension base=&amp;quot;xs:unsignedByte&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:attribute name=&amp;quot;power_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;completed&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;max_points&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;tasks&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;progress&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Veebiteenus ==&lt;br /&gt;
&#039;&#039;Tähtaeg 14. aprill 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Veebiteenusena realiseeriti API, mis võimaldab klientide registreerimist, haldamist ning Challengo teenuse põhifunktsionaalsuse pakkumist HTTP päringute kaudu. API loomisel kasutati RESTful arhitektuuri. Täpsem dokumentatsioon asub API lehel: [http://api.sqroot.eu &amp;quot;API dokumentatsioon&amp;quot;] (tegemist on ajutise aadressiga, mis võetakse maha aine lõppemisel).&lt;br /&gt;
&lt;br /&gt;
Veebiteenusel ei ole eraldi kasutajaliidest. Testimiseks on kaks varianti:&lt;br /&gt;
&lt;br /&gt;
# Luua ise vastav kasutajaliides ehk klientrakendus&lt;br /&gt;
# Kasutada mõnd abitööriista HTTP päringute koostamiseks. Soovitus: [https://chrome.google.com/webstore/detail/aejoelaoggembcahagimdiliamlcdmfm &amp;quot;Chrome plugin&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
Autentimisandmed rakendusele saab luua dokumentatsiooni lehel oleva vormi kaudu (andmed saadetakse e-mailile). Kasutajakonto saab luua juba API päringute abil.&lt;br /&gt;
&lt;br /&gt;
[[File:challengo_req2.png|300px|thumb|Näidis HTTP API päringust]]&lt;br /&gt;
&lt;br /&gt;
== Klientrakendus ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 5. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Klientrakendus on Windows Phone 7 klient Challengo teenusele, mis kasutab projekti esimeses osas koostatud XML andmestruktuuri.&lt;br /&gt;
&lt;br /&gt;
XML-i väljastab Challengo API, mis vajab veel kirjutamist. Challengo on realiseeritud PHP-s.&lt;br /&gt;
&lt;br /&gt;
=== Feature set ===&lt;br /&gt;
&lt;br /&gt;
* Autentimine&lt;br /&gt;
** Login&lt;br /&gt;
** Logout&lt;br /&gt;
* Nimekiri aktiivsetest väljakutsetest ja nende staatustest&lt;br /&gt;
** Nimekiri väljakutse alamülesannetest ja nende staatustest&lt;br /&gt;
* Väljakutse märkimine lõpetatuks&lt;br /&gt;
** Alamülesande märkimine lõpetatuks&lt;br /&gt;
* Uue väljakutse valimine nimekirjast&lt;br /&gt;
** Väljakutse detailide ja alamülesannete vaatamine&lt;br /&gt;
* Väljakutse &amp;quot;hülgamine&amp;quot; (&#039;&#039;abandon&#039;&#039;)&lt;br /&gt;
* Kasutaja statistika näitamine&lt;br /&gt;
** Praegune punktiseis&lt;br /&gt;
** Lõpetatud väljakutsed&lt;br /&gt;
*** Lõpetatud alamülesanded&lt;br /&gt;
** Teenitud märgid&lt;br /&gt;
&lt;br /&gt;
= Meeskonna Liikmed =&lt;br /&gt;
&lt;br /&gt;
* Ando Roots &#039;&#039;anroots@itcollege.ee&#039;&#039;&lt;br /&gt;
* Mikk Pärast &#039;&#039;mparast@itcollege.ee&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Liitumine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for t in tudengid:&lt;br /&gt;
  if !t.laisk &amp;amp;&amp;amp; t.oskab_progreda:&lt;br /&gt;
    kutsu_meeskonda(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ mail -s &amp;quot;Harold&amp;quot; anroots@itcollege.ee&amp;lt;/pre&amp;gt;&lt;br /&gt;
Eeldan varasemaid teadmisi ning usaldusväärsust. Soovin, et asi ei lõppeks jälle nii, et projektijuht on kaitsmiseelsel õhtul üleval ja lõpetab üksinda projekti.&lt;br /&gt;
Ole nii kena ja anna huvist märku enne &#039;&#039;&#039;26. veebruari&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Lisad =&lt;br /&gt;
&lt;br /&gt;
[http://jaa.ee Kes on Harold?]&lt;br /&gt;
&lt;br /&gt;
== Challengo ==&lt;br /&gt;
&lt;br /&gt;
Challengo.me on Garage48 Tallinn 2011 raames alustatud veebiteenus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A social network of themed challenges, comes with a Karma profile and level-system.&lt;br /&gt;
Revenues from ads on the mobile version.&lt;br /&gt;
Team members: Ando Roots, Kristo Vaher, Valeria Gasik, Jelena Savinen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube v=&amp;quot;pPfHJD5F7sc&amp;quot; /&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=pPfHJD5F7sc Jelena tutvustab Challengo teenust]&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=47575</id>
		<title>Meeskond &quot;Harold&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=47575"/>
		<updated>2012-04-29T23:11:43Z</updated>

		<summary type="html">&lt;p&gt;Anroots: /* Veebiteenus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
{| style=&amp;quot;width:100%;height: 40px; background-color:#dff0d8;border: 1px solid ##468847;color:#468847;padding:10px;font-size:16px;font-weight:bold-webkit-border-radius: 8px;-moz-border-radius: 8px;border-radius: 8px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
| Praeguses faasis tegeleb tiim veebiteenuse kaitsmisega.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Tegemist on IT Kolledži aine raames eksamieeldust taotleva projektimeeskonna töö dokumentatsiooniga.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 30em; padding-left: 2em; float: right; font-size: 95%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Meeskond &#039;&#039;&amp;quot;Harold&amp;quot;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Aine:&#039;&#039;&#039;&lt;br /&gt;
| [[:Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhend:&#039;&#039;&#039;&lt;br /&gt;
| [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2012 Juhend]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Tüüp:&#039;&#039;&#039;&lt;br /&gt;
| Projekt&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Anroots]]&amp;lt;br /&amp;gt;[[User:Mparast]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhendajad:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Mposka]]&amp;lt;br /&amp;gt;[[User:Kraspel]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Semester:&#039;&#039;&#039;&lt;br /&gt;
| 2011/2012 kevad&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Kood (Git)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Challengo:&#039;&#039;&#039;&lt;br /&gt;
| [http://trac.sqroot.eu/projects/challengo/ SQroot Tracker]&lt;br /&gt;
|-&lt;br /&gt;
|API Demo&lt;br /&gt;
|[https://challengo.sqroot.eu/wp7 https://challengo.sqroot.eu/wp7]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Projekt =&lt;br /&gt;
&lt;br /&gt;
Projekti esimesed kaks osa keskenduvad veebiteenuse &amp;quot;Challengo&amp;quot; taasloomisele. Projekti esimene osa valmistab ette peamis(t)e päringu(te) XML vastuse struktuuri, projekti teine osa (veebiteenuse loomine) ehitab vastava API.&lt;br /&gt;
&lt;br /&gt;
== Korraldus ==&lt;br /&gt;
&lt;br /&gt;
Projektiga seonduv dokumentatsioon (erandiks on käesolev wiki leht), kasutajale nähtavad tekstid ning lähtekood on kirjutatud inglise keeles. Võimalusel on kood kirjutatud hilisema I18n toe võimaldamiseks.&lt;br /&gt;
&lt;br /&gt;
Koodi haldab GitHub repositoorium, juurdepääsu saamiseks tuleb projektijuhile saata oma GitHub kasutajanimi (või &#039;&#039;pull request&#039;&#039;). Tegemist vajavaid töid näeb GitHub lehel &#039;&#039;Issues&#039;&#039; vahekaardilt ning asjakohane dokumentatsioon (API) on GitHub wiki alamjaotises.&lt;br /&gt;
&lt;br /&gt;
Lähtekood on põhjalikult kommenteeritud, muud, eraldiseisvat dokumentatsiooni koodi kohta on minimaalselt.&lt;br /&gt;
&lt;br /&gt;
== XML Andmefailid ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 3. märts 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
XML andmefail kirjeldab veebiteenuse &amp;quot;[http://garage48.org/blogger/projects-on-garage48-tallinn-2011 Challengo]&amp;quot; andmeid. Andmed asuvad MYSQL andmebaasis, mille struktuur on kirjeldatud ERD mudeliga [[File:Harold_Challengo_MYSQL_ERD.png|200px|thumb|MYSQL ERD mudel]]. XML formaadis andmeid väljastab serveris asuv PHP API. Järgnevalt toodud XML näited ei pruugi projekti esimese osa nõudmiste tõttu olla vastavuses teise osana valmiva veebiteenuse tegeliku väljundiga.&lt;br /&gt;
&lt;br /&gt;
Faile saab vaadata ka võrgust: http://enos.itcollege.ee/~anroots/challengo/xml/. Soovitatav on seda teha just XSLT stiilifaili jaoks (http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml).&lt;br /&gt;
&lt;br /&gt;
=== XML [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml link]]===&lt;br /&gt;
&lt;br /&gt;
Järgnevalt on toodud lõik kasutaja praeguste väljakutsete päringust. Kasutajal on parajasti kaks aktiivset väljakutset, igal väljakutsel on veidi meta-infot, mingi hulk ülesandeid (tasks) ning igal ülesandel on üks või mitu autasu (rewards).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;Response.xsl&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!-- List of user&#039;s current challenges --&amp;gt;&lt;br /&gt;
&amp;lt;challenges&amp;gt;&lt;br /&gt;
  &amp;lt;!-- First challenge, started by the user --&amp;gt;&lt;br /&gt;
  &amp;lt;challenge id=&amp;quot;4&amp;quot; tasks=&amp;quot;6&amp;quot; progress=&amp;quot;17%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;The Improgrupp Jaa!&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Inspired by a true story, the Improgrupp Jaa! contains tasks that challenge ones spontaniety and social courage.&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;duration&amp;gt;1209600&amp;lt;/duration&amp;gt;&lt;br /&gt;
    &amp;lt;points_required&amp;gt;18&amp;lt;/points_required&amp;gt;&lt;br /&gt;
    &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;!-- Each challenge has a number of tasks that have to be completed.--&amp;gt;&lt;br /&gt;
    &amp;lt;!-- No challenge can be completed before earned points from tasks (rewards) exceed the points_required field --&amp;gt;&lt;br /&gt;
    &amp;lt;tasks max_points=&amp;quot;26&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;19&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Make a present to a homeless person&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;If you can read this, you&#039;re probably among the luckier ones. Do something for the ones who can&#039;t.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;!-- Each task yields rewards on completion. Rewards are &amp;quot;power&amp;quot; points of different categories.--&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;20&amp;quot; completed=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment a stranger&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Make a sincere compliment to someone you don&#039;t know. We could do with more praise where it&#039;s due.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;21&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Do volunteer work&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Offer yourself as a volunteer to an event or a cause.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;22&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Perform to a security camera&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Do a little dance to a security camera. It shouldn&#039;t be illegal...probably. Don&#039;t get in trouble!&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;23&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment someone for a job well done&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;When was the last time you thanked the janitor?&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;24&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Take a day off&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;This is mostly for work-a-holics: rest for a while.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
    &amp;lt;/tasks&amp;gt;&lt;br /&gt;
  &amp;lt;/challenge&amp;gt;&lt;br /&gt;
&amp;lt;/challenges&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT (stiilifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsl link]] ===&lt;br /&gt;
&lt;br /&gt;
Toodud stiilifail muudab ülaltoodud XML vastuse inimesele kergemini loetavaks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html class=&amp;quot;no-js&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;Ando Roots&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Challengo Response&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.css&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.responsive.css&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Challengo API response&amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
            The following is a list of challenges reported by the XML API.&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;!-- Go over each challenge --&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;challenges/challenge&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h2&amp;gt;&lt;br /&gt;
              &lt;br /&gt;
              &amp;lt;!-- Challenge badge image and title --&amp;gt;&lt;br /&gt;
              &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;&lt;br /&gt;
                  http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/img&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
              &amp;lt;!-- Challenge progress, if applicable --&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:if test=&amp;quot;@progress&amp;quot;&amp;gt;&lt;br /&gt;
                (&amp;lt;span&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@progress&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/span&amp;gt;)&lt;br /&gt;
              &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
            &amp;lt;/h2&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;p class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- Table for some challenge meta-info --&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered span4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Points required to complete:&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;points_required&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Time left (hours):&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;round(duration div 1800)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;!-- List all challenge tasks --&amp;gt;&lt;br /&gt;
            &amp;lt;h3 style=&amp;quot;margin-top:140px&amp;quot;&amp;gt;Tasks (&amp;lt;xsl:value-of select=&amp;quot;@tasks&amp;quot;/&amp;gt;)&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered table-striped table-condensed&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;thead&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;ID&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Title&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Badge&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Rewards&amp;lt;/th&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/thead&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;tasks/task&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;tr&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Color the row gray if task is completed --&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;@completed&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:attribute name=&amp;quot;class&amp;quot;&amp;gt;&lt;br /&gt;
                        help-block&lt;br /&gt;
                      &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                      &amp;lt;/img&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:for-each select=&amp;quot;rewards/reward&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;li&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=1&amp;quot;&amp;gt;&lt;br /&gt;
                              Compassion&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=2&amp;quot;&amp;gt;&lt;br /&gt;
                              Strength&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=3&amp;quot;&amp;gt;&lt;br /&gt;
                              Intelligence&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;span&amp;gt;&lt;br /&gt;
                              &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                            &amp;lt;/span&amp;gt;&lt;br /&gt;
                          &amp;lt;/li&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;!-- End of challenge task table --&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;!-- End of challenge --&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD (skeemifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsd link]] ===&lt;br /&gt;
&lt;br /&gt;
Skeemifail kirjeldab päringu vastuse XML struktuuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;challenges&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;challenge&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;duration&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;points_required&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;tasks&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;task&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rewards&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;reward&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:extension base=&amp;quot;xs:unsignedByte&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:attribute name=&amp;quot;power_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;completed&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;max_points&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;tasks&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;progress&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Veebiteenus ==&lt;br /&gt;
&#039;&#039;Tähtaeg 14. aprill 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Veebiteenusena realiseeriti API, mis võimaldab klientide registreerimist, haldamist ning Challengo teenuse põhifunktsionaalsuse pakkumist HTTP päringute kaudu. API loomisel kasutati RESTful arhitektuuri. Täpsem dokumentatsioon asub API lehel: [http://api.sqroot.eu &amp;quot;API dokumentatsioon&amp;quot;] (tegemist on ajutise aadressiga, mis võetakse maha aine lõppemisel).&lt;br /&gt;
&lt;br /&gt;
Veebiteenusel ei ole eraldi kasutajaliidest. Testimiseks on kaks varianti:&lt;br /&gt;
&lt;br /&gt;
# Luua ise vastav kasutajaliides ehk klientrakendus&lt;br /&gt;
# Kasutada mõnd abitööriista HTTP päringute koostamiseks. Soovitus: [https://chrome.google.com/webstore/detail/aejoelaoggembcahagimdiliamlcdmfm &amp;quot;Chrome plugin&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
Autentimisandmed rakendusele saab luua dokumentatsiooni lehel oleva vormi kaudu (andmed saadetakse e-mailile). Kasutajakonto saab luua juba API päringute abil.&lt;br /&gt;
&lt;br /&gt;
[[File:challengo_req2.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
== Klientrakendus ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 5. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Klientrakendus on Windows Phone 7 klient Challengo teenusele, mis kasutab projekti esimeses osas koostatud XML andmestruktuuri.&lt;br /&gt;
&lt;br /&gt;
XML-i väljastab Challengo API, mis vajab veel kirjutamist. Challengo on realiseeritud PHP-s.&lt;br /&gt;
&lt;br /&gt;
=== Feature set ===&lt;br /&gt;
&lt;br /&gt;
* Autentimine&lt;br /&gt;
** Login&lt;br /&gt;
** Logout&lt;br /&gt;
* Nimekiri aktiivsetest väljakutsetest ja nende staatustest&lt;br /&gt;
** Nimekiri väljakutse alamülesannetest ja nende staatustest&lt;br /&gt;
* Väljakutse märkimine lõpetatuks&lt;br /&gt;
** Alamülesande märkimine lõpetatuks&lt;br /&gt;
* Uue väljakutse valimine nimekirjast&lt;br /&gt;
** Väljakutse detailide ja alamülesannete vaatamine&lt;br /&gt;
* Väljakutse &amp;quot;hülgamine&amp;quot; (&#039;&#039;abandon&#039;&#039;)&lt;br /&gt;
* Kasutaja statistika näitamine&lt;br /&gt;
** Praegune punktiseis&lt;br /&gt;
** Lõpetatud väljakutsed&lt;br /&gt;
*** Lõpetatud alamülesanded&lt;br /&gt;
** Teenitud märgid&lt;br /&gt;
&lt;br /&gt;
= Meeskonna Liikmed =&lt;br /&gt;
&lt;br /&gt;
* Ando Roots &#039;&#039;anroots@itcollege.ee&#039;&#039;&lt;br /&gt;
* Mikk Pärast &#039;&#039;mparast@itcollege.ee&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Liitumine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for t in tudengid:&lt;br /&gt;
  if !t.laisk &amp;amp;&amp;amp; t.oskab_progreda:&lt;br /&gt;
    kutsu_meeskonda(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ mail -s &amp;quot;Harold&amp;quot; anroots@itcollege.ee&amp;lt;/pre&amp;gt;&lt;br /&gt;
Eeldan varasemaid teadmisi ning usaldusväärsust. Soovin, et asi ei lõppeks jälle nii, et projektijuht on kaitsmiseelsel õhtul üleval ja lõpetab üksinda projekti.&lt;br /&gt;
Ole nii kena ja anna huvist märku enne &#039;&#039;&#039;26. veebruari&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Lisad =&lt;br /&gt;
&lt;br /&gt;
[http://jaa.ee Kes on Harold?]&lt;br /&gt;
&lt;br /&gt;
== Challengo ==&lt;br /&gt;
&lt;br /&gt;
Challengo.me on Garage48 Tallinn 2011 raames alustatud veebiteenus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A social network of themed challenges, comes with a Karma profile and level-system.&lt;br /&gt;
Revenues from ads on the mobile version.&lt;br /&gt;
Team members: Ando Roots, Kristo Vaher, Valeria Gasik, Jelena Savinen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube v=&amp;quot;pPfHJD5F7sc&amp;quot; /&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=pPfHJD5F7sc Jelena tutvustab Challengo teenust]&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=File:Challengo_req2.png&amp;diff=47574</id>
		<title>File:Challengo req2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=File:Challengo_req2.png&amp;diff=47574"/>
		<updated>2012-04-29T23:10:57Z</updated>

		<summary type="html">&lt;p&gt;Anroots: Challenge API request example&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Challenge API request example&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=47573</id>
		<title>Meeskond &quot;Harold&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=47573"/>
		<updated>2012-04-29T23:09:59Z</updated>

		<summary type="html">&lt;p&gt;Anroots: /* Veebiteenus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
{| style=&amp;quot;width:100%;height: 40px; background-color:#dff0d8;border: 1px solid ##468847;color:#468847;padding:10px;font-size:16px;font-weight:bold-webkit-border-radius: 8px;-moz-border-radius: 8px;border-radius: 8px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
| Praeguses faasis tegeleb tiim veebiteenuse kaitsmisega.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Tegemist on IT Kolledži aine raames eksamieeldust taotleva projektimeeskonna töö dokumentatsiooniga.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 30em; padding-left: 2em; float: right; font-size: 95%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Meeskond &#039;&#039;&amp;quot;Harold&amp;quot;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Aine:&#039;&#039;&#039;&lt;br /&gt;
| [[:Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhend:&#039;&#039;&#039;&lt;br /&gt;
| [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2012 Juhend]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Tüüp:&#039;&#039;&#039;&lt;br /&gt;
| Projekt&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Anroots]]&amp;lt;br /&amp;gt;[[User:Mparast]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhendajad:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Mposka]]&amp;lt;br /&amp;gt;[[User:Kraspel]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Semester:&#039;&#039;&#039;&lt;br /&gt;
| 2011/2012 kevad&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Kood (Git)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Challengo:&#039;&#039;&#039;&lt;br /&gt;
| [http://trac.sqroot.eu/projects/challengo/ SQroot Tracker]&lt;br /&gt;
|-&lt;br /&gt;
|API Demo&lt;br /&gt;
|[https://challengo.sqroot.eu/wp7 https://challengo.sqroot.eu/wp7]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Projekt =&lt;br /&gt;
&lt;br /&gt;
Projekti esimesed kaks osa keskenduvad veebiteenuse &amp;quot;Challengo&amp;quot; taasloomisele. Projekti esimene osa valmistab ette peamis(t)e päringu(te) XML vastuse struktuuri, projekti teine osa (veebiteenuse loomine) ehitab vastava API.&lt;br /&gt;
&lt;br /&gt;
== Korraldus ==&lt;br /&gt;
&lt;br /&gt;
Projektiga seonduv dokumentatsioon (erandiks on käesolev wiki leht), kasutajale nähtavad tekstid ning lähtekood on kirjutatud inglise keeles. Võimalusel on kood kirjutatud hilisema I18n toe võimaldamiseks.&lt;br /&gt;
&lt;br /&gt;
Koodi haldab GitHub repositoorium, juurdepääsu saamiseks tuleb projektijuhile saata oma GitHub kasutajanimi (või &#039;&#039;pull request&#039;&#039;). Tegemist vajavaid töid näeb GitHub lehel &#039;&#039;Issues&#039;&#039; vahekaardilt ning asjakohane dokumentatsioon (API) on GitHub wiki alamjaotises.&lt;br /&gt;
&lt;br /&gt;
Lähtekood on põhjalikult kommenteeritud, muud, eraldiseisvat dokumentatsiooni koodi kohta on minimaalselt.&lt;br /&gt;
&lt;br /&gt;
== XML Andmefailid ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 3. märts 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
XML andmefail kirjeldab veebiteenuse &amp;quot;[http://garage48.org/blogger/projects-on-garage48-tallinn-2011 Challengo]&amp;quot; andmeid. Andmed asuvad MYSQL andmebaasis, mille struktuur on kirjeldatud ERD mudeliga [[File:Harold_Challengo_MYSQL_ERD.png|200px|thumb|MYSQL ERD mudel]]. XML formaadis andmeid väljastab serveris asuv PHP API. Järgnevalt toodud XML näited ei pruugi projekti esimese osa nõudmiste tõttu olla vastavuses teise osana valmiva veebiteenuse tegeliku väljundiga.&lt;br /&gt;
&lt;br /&gt;
Faile saab vaadata ka võrgust: http://enos.itcollege.ee/~anroots/challengo/xml/. Soovitatav on seda teha just XSLT stiilifaili jaoks (http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml).&lt;br /&gt;
&lt;br /&gt;
=== XML [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml link]]===&lt;br /&gt;
&lt;br /&gt;
Järgnevalt on toodud lõik kasutaja praeguste väljakutsete päringust. Kasutajal on parajasti kaks aktiivset väljakutset, igal väljakutsel on veidi meta-infot, mingi hulk ülesandeid (tasks) ning igal ülesandel on üks või mitu autasu (rewards).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;Response.xsl&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!-- List of user&#039;s current challenges --&amp;gt;&lt;br /&gt;
&amp;lt;challenges&amp;gt;&lt;br /&gt;
  &amp;lt;!-- First challenge, started by the user --&amp;gt;&lt;br /&gt;
  &amp;lt;challenge id=&amp;quot;4&amp;quot; tasks=&amp;quot;6&amp;quot; progress=&amp;quot;17%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;The Improgrupp Jaa!&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Inspired by a true story, the Improgrupp Jaa! contains tasks that challenge ones spontaniety and social courage.&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;duration&amp;gt;1209600&amp;lt;/duration&amp;gt;&lt;br /&gt;
    &amp;lt;points_required&amp;gt;18&amp;lt;/points_required&amp;gt;&lt;br /&gt;
    &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;!-- Each challenge has a number of tasks that have to be completed.--&amp;gt;&lt;br /&gt;
    &amp;lt;!-- No challenge can be completed before earned points from tasks (rewards) exceed the points_required field --&amp;gt;&lt;br /&gt;
    &amp;lt;tasks max_points=&amp;quot;26&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;19&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Make a present to a homeless person&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;If you can read this, you&#039;re probably among the luckier ones. Do something for the ones who can&#039;t.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;!-- Each task yields rewards on completion. Rewards are &amp;quot;power&amp;quot; points of different categories.--&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;20&amp;quot; completed=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment a stranger&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Make a sincere compliment to someone you don&#039;t know. We could do with more praise where it&#039;s due.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;21&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Do volunteer work&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Offer yourself as a volunteer to an event or a cause.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;22&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Perform to a security camera&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Do a little dance to a security camera. It shouldn&#039;t be illegal...probably. Don&#039;t get in trouble!&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;23&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment someone for a job well done&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;When was the last time you thanked the janitor?&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;24&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Take a day off&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;This is mostly for work-a-holics: rest for a while.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
    &amp;lt;/tasks&amp;gt;&lt;br /&gt;
  &amp;lt;/challenge&amp;gt;&lt;br /&gt;
&amp;lt;/challenges&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT (stiilifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsl link]] ===&lt;br /&gt;
&lt;br /&gt;
Toodud stiilifail muudab ülaltoodud XML vastuse inimesele kergemini loetavaks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html class=&amp;quot;no-js&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;Ando Roots&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Challengo Response&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.css&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.responsive.css&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Challengo API response&amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
            The following is a list of challenges reported by the XML API.&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;!-- Go over each challenge --&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;challenges/challenge&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h2&amp;gt;&lt;br /&gt;
              &lt;br /&gt;
              &amp;lt;!-- Challenge badge image and title --&amp;gt;&lt;br /&gt;
              &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;&lt;br /&gt;
                  http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/img&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
              &amp;lt;!-- Challenge progress, if applicable --&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:if test=&amp;quot;@progress&amp;quot;&amp;gt;&lt;br /&gt;
                (&amp;lt;span&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@progress&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/span&amp;gt;)&lt;br /&gt;
              &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
            &amp;lt;/h2&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;p class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- Table for some challenge meta-info --&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered span4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Points required to complete:&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;points_required&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Time left (hours):&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;round(duration div 1800)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;!-- List all challenge tasks --&amp;gt;&lt;br /&gt;
            &amp;lt;h3 style=&amp;quot;margin-top:140px&amp;quot;&amp;gt;Tasks (&amp;lt;xsl:value-of select=&amp;quot;@tasks&amp;quot;/&amp;gt;)&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered table-striped table-condensed&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;thead&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;ID&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Title&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Badge&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Rewards&amp;lt;/th&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/thead&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;tasks/task&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;tr&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Color the row gray if task is completed --&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;@completed&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:attribute name=&amp;quot;class&amp;quot;&amp;gt;&lt;br /&gt;
                        help-block&lt;br /&gt;
                      &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                      &amp;lt;/img&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:for-each select=&amp;quot;rewards/reward&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;li&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=1&amp;quot;&amp;gt;&lt;br /&gt;
                              Compassion&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=2&amp;quot;&amp;gt;&lt;br /&gt;
                              Strength&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=3&amp;quot;&amp;gt;&lt;br /&gt;
                              Intelligence&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;span&amp;gt;&lt;br /&gt;
                              &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                            &amp;lt;/span&amp;gt;&lt;br /&gt;
                          &amp;lt;/li&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;!-- End of challenge task table --&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;!-- End of challenge --&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD (skeemifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsd link]] ===&lt;br /&gt;
&lt;br /&gt;
Skeemifail kirjeldab päringu vastuse XML struktuuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;challenges&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;challenge&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;duration&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;points_required&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;tasks&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;task&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rewards&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;reward&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:extension base=&amp;quot;xs:unsignedByte&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:attribute name=&amp;quot;power_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;completed&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;max_points&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;tasks&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;progress&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Veebiteenus ==&lt;br /&gt;
&#039;&#039;Tähtaeg 14. aprill 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Veebiteenusena realiseeriti API, mis võimaldab klientide registreerimist, haldamist ning Challengo teenuse põhifunktsionaalsuse pakkumist HTTP päringute kaudu. API loomisel kasutati RESTful arhitektuuri. Täpsem dokumentatsioon asub API lehel: [http://api.sqroot.eu &amp;quot;API dokumentatsioon&amp;quot;] (tegemist on ajutise aadressiga, mis võetakse maha aine lõppemisel).&lt;br /&gt;
&lt;br /&gt;
Veebiteenusel ei ole eraldi kasutajaliidest. Testimiseks on kaks varianti:&lt;br /&gt;
&lt;br /&gt;
# Luua ise vastav kasutajaliides ehk klientrakendus&lt;br /&gt;
# Kasutada mõnd abitööriista HTTP päringute koostamiseks. Soovitus: [https://chrome.google.com/webstore/detail/aejoelaoggembcahagimdiliamlcdmfm &amp;quot;Chrome plugin&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
Autentimisandmed rakendusele saab luua dokumentatsiooni lehel oleva vormi kaudu (andmed saadetakse e-mailile). Kasutajakonto saab luua juba API päringute abil.&lt;br /&gt;
&lt;br /&gt;
== Klientrakendus ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 5. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Klientrakendus on Windows Phone 7 klient Challengo teenusele, mis kasutab projekti esimeses osas koostatud XML andmestruktuuri.&lt;br /&gt;
&lt;br /&gt;
XML-i väljastab Challengo API, mis vajab veel kirjutamist. Challengo on realiseeritud PHP-s.&lt;br /&gt;
&lt;br /&gt;
=== Feature set ===&lt;br /&gt;
&lt;br /&gt;
* Autentimine&lt;br /&gt;
** Login&lt;br /&gt;
** Logout&lt;br /&gt;
* Nimekiri aktiivsetest väljakutsetest ja nende staatustest&lt;br /&gt;
** Nimekiri väljakutse alamülesannetest ja nende staatustest&lt;br /&gt;
* Väljakutse märkimine lõpetatuks&lt;br /&gt;
** Alamülesande märkimine lõpetatuks&lt;br /&gt;
* Uue väljakutse valimine nimekirjast&lt;br /&gt;
** Väljakutse detailide ja alamülesannete vaatamine&lt;br /&gt;
* Väljakutse &amp;quot;hülgamine&amp;quot; (&#039;&#039;abandon&#039;&#039;)&lt;br /&gt;
* Kasutaja statistika näitamine&lt;br /&gt;
** Praegune punktiseis&lt;br /&gt;
** Lõpetatud väljakutsed&lt;br /&gt;
*** Lõpetatud alamülesanded&lt;br /&gt;
** Teenitud märgid&lt;br /&gt;
&lt;br /&gt;
= Meeskonna Liikmed =&lt;br /&gt;
&lt;br /&gt;
* Ando Roots &#039;&#039;anroots@itcollege.ee&#039;&#039;&lt;br /&gt;
* Mikk Pärast &#039;&#039;mparast@itcollege.ee&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Liitumine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for t in tudengid:&lt;br /&gt;
  if !t.laisk &amp;amp;&amp;amp; t.oskab_progreda:&lt;br /&gt;
    kutsu_meeskonda(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ mail -s &amp;quot;Harold&amp;quot; anroots@itcollege.ee&amp;lt;/pre&amp;gt;&lt;br /&gt;
Eeldan varasemaid teadmisi ning usaldusväärsust. Soovin, et asi ei lõppeks jälle nii, et projektijuht on kaitsmiseelsel õhtul üleval ja lõpetab üksinda projekti.&lt;br /&gt;
Ole nii kena ja anna huvist märku enne &#039;&#039;&#039;26. veebruari&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Lisad =&lt;br /&gt;
&lt;br /&gt;
[http://jaa.ee Kes on Harold?]&lt;br /&gt;
&lt;br /&gt;
== Challengo ==&lt;br /&gt;
&lt;br /&gt;
Challengo.me on Garage48 Tallinn 2011 raames alustatud veebiteenus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A social network of themed challenges, comes with a Karma profile and level-system.&lt;br /&gt;
Revenues from ads on the mobile version.&lt;br /&gt;
Team members: Ando Roots, Kristo Vaher, Valeria Gasik, Jelena Savinen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube v=&amp;quot;pPfHJD5F7sc&amp;quot; /&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=pPfHJD5F7sc Jelena tutvustab Challengo teenust]&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=47572</id>
		<title>Meeskond &quot;Harold&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=47572"/>
		<updated>2012-04-29T23:07:30Z</updated>

		<summary type="html">&lt;p&gt;Anroots: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
{| style=&amp;quot;width:100%;height: 40px; background-color:#dff0d8;border: 1px solid ##468847;color:#468847;padding:10px;font-size:16px;font-weight:bold-webkit-border-radius: 8px;-moz-border-radius: 8px;border-radius: 8px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
| Praeguses faasis tegeleb tiim veebiteenuse kaitsmisega.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Tegemist on IT Kolledži aine raames eksamieeldust taotleva projektimeeskonna töö dokumentatsiooniga.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 30em; padding-left: 2em; float: right; font-size: 95%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Meeskond &#039;&#039;&amp;quot;Harold&amp;quot;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Aine:&#039;&#039;&#039;&lt;br /&gt;
| [[:Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhend:&#039;&#039;&#039;&lt;br /&gt;
| [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2012 Juhend]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Tüüp:&#039;&#039;&#039;&lt;br /&gt;
| Projekt&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Anroots]]&amp;lt;br /&amp;gt;[[User:Mparast]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhendajad:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Mposka]]&amp;lt;br /&amp;gt;[[User:Kraspel]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Semester:&#039;&#039;&#039;&lt;br /&gt;
| 2011/2012 kevad&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Kood (Git)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Challengo:&#039;&#039;&#039;&lt;br /&gt;
| [http://trac.sqroot.eu/projects/challengo/ SQroot Tracker]&lt;br /&gt;
|-&lt;br /&gt;
|API Demo&lt;br /&gt;
|[https://challengo.sqroot.eu/wp7 https://challengo.sqroot.eu/wp7]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Projekt =&lt;br /&gt;
&lt;br /&gt;
Projekti esimesed kaks osa keskenduvad veebiteenuse &amp;quot;Challengo&amp;quot; taasloomisele. Projekti esimene osa valmistab ette peamis(t)e päringu(te) XML vastuse struktuuri, projekti teine osa (veebiteenuse loomine) ehitab vastava API.&lt;br /&gt;
&lt;br /&gt;
== Korraldus ==&lt;br /&gt;
&lt;br /&gt;
Projektiga seonduv dokumentatsioon (erandiks on käesolev wiki leht), kasutajale nähtavad tekstid ning lähtekood on kirjutatud inglise keeles. Võimalusel on kood kirjutatud hilisema I18n toe võimaldamiseks.&lt;br /&gt;
&lt;br /&gt;
Koodi haldab GitHub repositoorium, juurdepääsu saamiseks tuleb projektijuhile saata oma GitHub kasutajanimi (või &#039;&#039;pull request&#039;&#039;). Tegemist vajavaid töid näeb GitHub lehel &#039;&#039;Issues&#039;&#039; vahekaardilt ning asjakohane dokumentatsioon (API) on GitHub wiki alamjaotises.&lt;br /&gt;
&lt;br /&gt;
Lähtekood on põhjalikult kommenteeritud, muud, eraldiseisvat dokumentatsiooni koodi kohta on minimaalselt.&lt;br /&gt;
&lt;br /&gt;
== XML Andmefailid ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 3. märts 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
XML andmefail kirjeldab veebiteenuse &amp;quot;[http://garage48.org/blogger/projects-on-garage48-tallinn-2011 Challengo]&amp;quot; andmeid. Andmed asuvad MYSQL andmebaasis, mille struktuur on kirjeldatud ERD mudeliga [[File:Harold_Challengo_MYSQL_ERD.png|200px|thumb|MYSQL ERD mudel]]. XML formaadis andmeid väljastab serveris asuv PHP API. Järgnevalt toodud XML näited ei pruugi projekti esimese osa nõudmiste tõttu olla vastavuses teise osana valmiva veebiteenuse tegeliku väljundiga.&lt;br /&gt;
&lt;br /&gt;
Faile saab vaadata ka võrgust: http://enos.itcollege.ee/~anroots/challengo/xml/. Soovitatav on seda teha just XSLT stiilifaili jaoks (http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml).&lt;br /&gt;
&lt;br /&gt;
=== XML [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml link]]===&lt;br /&gt;
&lt;br /&gt;
Järgnevalt on toodud lõik kasutaja praeguste väljakutsete päringust. Kasutajal on parajasti kaks aktiivset väljakutset, igal väljakutsel on veidi meta-infot, mingi hulk ülesandeid (tasks) ning igal ülesandel on üks või mitu autasu (rewards).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;Response.xsl&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!-- List of user&#039;s current challenges --&amp;gt;&lt;br /&gt;
&amp;lt;challenges&amp;gt;&lt;br /&gt;
  &amp;lt;!-- First challenge, started by the user --&amp;gt;&lt;br /&gt;
  &amp;lt;challenge id=&amp;quot;4&amp;quot; tasks=&amp;quot;6&amp;quot; progress=&amp;quot;17%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;The Improgrupp Jaa!&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Inspired by a true story, the Improgrupp Jaa! contains tasks that challenge ones spontaniety and social courage.&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;duration&amp;gt;1209600&amp;lt;/duration&amp;gt;&lt;br /&gt;
    &amp;lt;points_required&amp;gt;18&amp;lt;/points_required&amp;gt;&lt;br /&gt;
    &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;!-- Each challenge has a number of tasks that have to be completed.--&amp;gt;&lt;br /&gt;
    &amp;lt;!-- No challenge can be completed before earned points from tasks (rewards) exceed the points_required field --&amp;gt;&lt;br /&gt;
    &amp;lt;tasks max_points=&amp;quot;26&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;19&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Make a present to a homeless person&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;If you can read this, you&#039;re probably among the luckier ones. Do something for the ones who can&#039;t.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;!-- Each task yields rewards on completion. Rewards are &amp;quot;power&amp;quot; points of different categories.--&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;20&amp;quot; completed=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment a stranger&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Make a sincere compliment to someone you don&#039;t know. We could do with more praise where it&#039;s due.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;21&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Do volunteer work&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Offer yourself as a volunteer to an event or a cause.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;22&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Perform to a security camera&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Do a little dance to a security camera. It shouldn&#039;t be illegal...probably. Don&#039;t get in trouble!&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;23&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment someone for a job well done&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;When was the last time you thanked the janitor?&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;24&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Take a day off&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;This is mostly for work-a-holics: rest for a while.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
    &amp;lt;/tasks&amp;gt;&lt;br /&gt;
  &amp;lt;/challenge&amp;gt;&lt;br /&gt;
&amp;lt;/challenges&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT (stiilifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsl link]] ===&lt;br /&gt;
&lt;br /&gt;
Toodud stiilifail muudab ülaltoodud XML vastuse inimesele kergemini loetavaks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html class=&amp;quot;no-js&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;Ando Roots&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Challengo Response&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.css&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.responsive.css&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Challengo API response&amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
            The following is a list of challenges reported by the XML API.&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;!-- Go over each challenge --&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;challenges/challenge&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h2&amp;gt;&lt;br /&gt;
              &lt;br /&gt;
              &amp;lt;!-- Challenge badge image and title --&amp;gt;&lt;br /&gt;
              &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;&lt;br /&gt;
                  http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/img&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
              &amp;lt;!-- Challenge progress, if applicable --&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:if test=&amp;quot;@progress&amp;quot;&amp;gt;&lt;br /&gt;
                (&amp;lt;span&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@progress&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/span&amp;gt;)&lt;br /&gt;
              &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
            &amp;lt;/h2&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;p class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- Table for some challenge meta-info --&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered span4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Points required to complete:&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;points_required&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Time left (hours):&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;round(duration div 1800)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;!-- List all challenge tasks --&amp;gt;&lt;br /&gt;
            &amp;lt;h3 style=&amp;quot;margin-top:140px&amp;quot;&amp;gt;Tasks (&amp;lt;xsl:value-of select=&amp;quot;@tasks&amp;quot;/&amp;gt;)&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered table-striped table-condensed&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;thead&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;ID&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Title&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Badge&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Rewards&amp;lt;/th&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/thead&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;tasks/task&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;tr&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Color the row gray if task is completed --&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;@completed&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:attribute name=&amp;quot;class&amp;quot;&amp;gt;&lt;br /&gt;
                        help-block&lt;br /&gt;
                      &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                      &amp;lt;/img&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:for-each select=&amp;quot;rewards/reward&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;li&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=1&amp;quot;&amp;gt;&lt;br /&gt;
                              Compassion&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=2&amp;quot;&amp;gt;&lt;br /&gt;
                              Strength&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=3&amp;quot;&amp;gt;&lt;br /&gt;
                              Intelligence&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;span&amp;gt;&lt;br /&gt;
                              &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                            &amp;lt;/span&amp;gt;&lt;br /&gt;
                          &amp;lt;/li&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;!-- End of challenge task table --&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;!-- End of challenge --&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD (skeemifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsd link]] ===&lt;br /&gt;
&lt;br /&gt;
Skeemifail kirjeldab päringu vastuse XML struktuuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;challenges&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;challenge&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;duration&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;points_required&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;tasks&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;task&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rewards&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;reward&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:extension base=&amp;quot;xs:unsignedByte&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:attribute name=&amp;quot;power_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;completed&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;max_points&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;tasks&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;progress&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Veebiteenus ==&lt;br /&gt;
&#039;&#039;Tähtaeg 14. aprill 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Veebiteenuseks on PHP rakendus, mis hakkab WP7 rakendusele andmeid pakkuma ja neid vastu võtma.&lt;br /&gt;
&lt;br /&gt;
=== API ===&lt;br /&gt;
&lt;br /&gt;
Veebiteenusena realiseeriti API, mis võimaldab klientide registreerimist, haldamist ning Challengo teenuse põhifunktsionaalsuse pakkumist HTTP päringute kaudu. API loomisel kasutati RESTful arhitektuuri. Täpsem dokumentatsioon asub API lehel: [http://api.sqroot.eu] (tegemist on ajutise aadressiga, mis võetakse maha aine lõppemisel).&lt;br /&gt;
&lt;br /&gt;
Veebiteenusel ei ole eraldi kasutajaliidest. Testimiseks on kaks varianti:&lt;br /&gt;
&lt;br /&gt;
1. Luua ise vastav kasutajaliides ehk klientrakendus&lt;br /&gt;
2. Kasutada mõnd abitööriista HTTP päringute koostamiseks. Soovitus: [[&amp;quot;Chrome plugin&amp;quot;:https://chrome.google.com/webstore/detail/aejoelaoggembcahagimdiliamlcdmfm]]&lt;br /&gt;
&lt;br /&gt;
== Klientrakendus ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 5. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Klientrakendus on Windows Phone 7 klient Challengo teenusele, mis kasutab projekti esimeses osas koostatud XML andmestruktuuri.&lt;br /&gt;
&lt;br /&gt;
XML-i väljastab Challengo API, mis vajab veel kirjutamist. Challengo on realiseeritud PHP-s.&lt;br /&gt;
&lt;br /&gt;
=== Feature set ===&lt;br /&gt;
&lt;br /&gt;
* Autentimine&lt;br /&gt;
** Login&lt;br /&gt;
** Logout&lt;br /&gt;
* Nimekiri aktiivsetest väljakutsetest ja nende staatustest&lt;br /&gt;
** Nimekiri väljakutse alamülesannetest ja nende staatustest&lt;br /&gt;
* Väljakutse märkimine lõpetatuks&lt;br /&gt;
** Alamülesande märkimine lõpetatuks&lt;br /&gt;
* Uue väljakutse valimine nimekirjast&lt;br /&gt;
** Väljakutse detailide ja alamülesannete vaatamine&lt;br /&gt;
* Väljakutse &amp;quot;hülgamine&amp;quot; (&#039;&#039;abandon&#039;&#039;)&lt;br /&gt;
* Kasutaja statistika näitamine&lt;br /&gt;
** Praegune punktiseis&lt;br /&gt;
** Lõpetatud väljakutsed&lt;br /&gt;
*** Lõpetatud alamülesanded&lt;br /&gt;
** Teenitud märgid&lt;br /&gt;
&lt;br /&gt;
= Meeskonna Liikmed =&lt;br /&gt;
&lt;br /&gt;
* Ando Roots &#039;&#039;anroots@itcollege.ee&#039;&#039;&lt;br /&gt;
* Mikk Pärast &#039;&#039;mparast@itcollege.ee&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Liitumine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for t in tudengid:&lt;br /&gt;
  if !t.laisk &amp;amp;&amp;amp; t.oskab_progreda:&lt;br /&gt;
    kutsu_meeskonda(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ mail -s &amp;quot;Harold&amp;quot; anroots@itcollege.ee&amp;lt;/pre&amp;gt;&lt;br /&gt;
Eeldan varasemaid teadmisi ning usaldusväärsust. Soovin, et asi ei lõppeks jälle nii, et projektijuht on kaitsmiseelsel õhtul üleval ja lõpetab üksinda projekti.&lt;br /&gt;
Ole nii kena ja anna huvist märku enne &#039;&#039;&#039;26. veebruari&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Lisad =&lt;br /&gt;
&lt;br /&gt;
[http://jaa.ee Kes on Harold?]&lt;br /&gt;
&lt;br /&gt;
== Challengo ==&lt;br /&gt;
&lt;br /&gt;
Challengo.me on Garage48 Tallinn 2011 raames alustatud veebiteenus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A social network of themed challenges, comes with a Karma profile and level-system.&lt;br /&gt;
Revenues from ads on the mobile version.&lt;br /&gt;
Team members: Ando Roots, Kristo Vaher, Valeria Gasik, Jelena Savinen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube v=&amp;quot;pPfHJD5F7sc&amp;quot; /&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=pPfHJD5F7sc Jelena tutvustab Challengo teenust]&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=46613</id>
		<title>Meeskond &quot;Harold&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=46613"/>
		<updated>2012-03-18T06:35:40Z</updated>

		<summary type="html">&lt;p&gt;Anroots: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
{| style=&amp;quot;width:100%;height: 40px; background-color:#dff0d8;border: 1px solid ##468847;color:#468847;padding:10px;font-size:16px;font-weight:bold-webkit-border-radius: 8px;-moz-border-radius: 8px;border-radius: 8px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
| Praeguses faasis tegeleb tiim veebiteenuse arendamisega.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Tegemist on IT Kolledži aine raames eksamieeldust taotleva projektimeeskonna töö dokumentatsiooniga.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 30em; padding-left: 2em; float: right; font-size: 95%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Meeskond &#039;&#039;&amp;quot;Harold&amp;quot;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Aine:&#039;&#039;&#039;&lt;br /&gt;
| [[:Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhend:&#039;&#039;&#039;&lt;br /&gt;
| [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2012 Juhend]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Tüüp:&#039;&#039;&#039;&lt;br /&gt;
| Projekt&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Anroots]]&amp;lt;br /&amp;gt;[[User:Mparast]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhendajad:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Mposka]]&amp;lt;br /&amp;gt;[[User:Kraspel]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Semester:&#039;&#039;&#039;&lt;br /&gt;
| 2011/2012 kevad&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Kood (Git)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Challengo:&#039;&#039;&#039;&lt;br /&gt;
| [http://trac.sqroot.eu/projects/challengo/ SQroot Tracker]&lt;br /&gt;
|-&lt;br /&gt;
|API Demo&lt;br /&gt;
|[https://challengo.sqroot.eu/wp7 https://challengo.sqroot.eu/wp7]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Projekt =&lt;br /&gt;
&lt;br /&gt;
Projekti kõik kolm osa keskenduvad veebiteenuse &amp;quot;Challengo&amp;quot; taasloomisele. Projekti esimene osa valmistab ette peamis(t)e päringu(te) XML vastuse struktuuri, projekti teine osa (veebiteenuse loomine) ehitab vastava API ning kolmanda osa raames (klientrakendus) realiseeritakse Windows Phone 7 rakendus.&lt;br /&gt;
&lt;br /&gt;
== Korraldus ==&lt;br /&gt;
&lt;br /&gt;
Projektiga seonduv dokumentatsioon (erandiks on käesolev wiki leht), kasutajale nähtavad tekstid ning lähtekood on kirjutatud inglise keeles. Võimalusel on kood kirjutatud hilisema I18n toe võimaldamiseks.&lt;br /&gt;
&lt;br /&gt;
Koodi haldab GitHub repositoorium, juurdepääsu saamiseks tuleb projektijuhile saata oma GitHub kasutajanimi (või &#039;&#039;pull request&#039;&#039;). Tegemist vajavaid töid näeb GitHub lehel &#039;&#039;Issues&#039;&#039; vahekaardilt ning asjakohane dokumentatsioon (API) on GitHub wiki alamjaotises.&lt;br /&gt;
&lt;br /&gt;
Lähtekood on põhjalikult kommenteeritud, muud, eraldiseisvat dokumentatsiooni koodi kohta pole.&lt;br /&gt;
&lt;br /&gt;
== XML Andmefailid ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 3. märts 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
XML andmefail kirjeldab veebiteenuse &amp;quot;[http://garage48.org/blogger/projects-on-garage48-tallinn-2011 Challengo]&amp;quot; andmeid. Andmed asuvad MYSQL andmebaasis, mille struktuur on kirjeldatud ERD mudeliga [[File:Harold_Challengo_MYSQL_ERD.png|200px|thumb|MYSQL ERD mudel]]. XML formaadis andmeid väljastab serveris asuv PHP API. Järgnevalt toodud XML näited ei pruugi projekti esimese osa nõudmiste tõttu olla vastavuses teise osana valmiva veebiteenuse tegeliku väljundiga.&lt;br /&gt;
&lt;br /&gt;
Faile saab vaadata ka võrgust: http://enos.itcollege.ee/~anroots/challengo/xml/. Soovitatav on seda teha just XSLT stiilifaili jaoks (http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml).&lt;br /&gt;
&lt;br /&gt;
=== XML [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml link]]===&lt;br /&gt;
&lt;br /&gt;
Järgnevalt on toodud lõik kasutaja praeguste väljakutsete päringust. Kasutajal on parajasti kaks aktiivset väljakutset, igal väljakutsel on veidi meta-infot, mingi hulk ülesandeid (tasks) ning igal ülesandel on üks või mitu autasu (rewards).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;Response.xsl&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!-- List of user&#039;s current challenges --&amp;gt;&lt;br /&gt;
&amp;lt;challenges&amp;gt;&lt;br /&gt;
  &amp;lt;!-- First challenge, started by the user --&amp;gt;&lt;br /&gt;
  &amp;lt;challenge id=&amp;quot;4&amp;quot; tasks=&amp;quot;6&amp;quot; progress=&amp;quot;17%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;The Improgrupp Jaa!&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Inspired by a true story, the Improgrupp Jaa! contains tasks that challenge ones spontaniety and social courage.&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;duration&amp;gt;1209600&amp;lt;/duration&amp;gt;&lt;br /&gt;
    &amp;lt;points_required&amp;gt;18&amp;lt;/points_required&amp;gt;&lt;br /&gt;
    &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;!-- Each challenge has a number of tasks that have to be completed.--&amp;gt;&lt;br /&gt;
    &amp;lt;!-- No challenge can be completed before earned points from tasks (rewards) exceed the points_required field --&amp;gt;&lt;br /&gt;
    &amp;lt;tasks max_points=&amp;quot;26&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;19&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Make a present to a homeless person&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;If you can read this, you&#039;re probably among the luckier ones. Do something for the ones who can&#039;t.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;!-- Each task yields rewards on completion. Rewards are &amp;quot;power&amp;quot; points of different categories.--&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;20&amp;quot; completed=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment a stranger&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Make a sincere compliment to someone you don&#039;t know. We could do with more praise where it&#039;s due.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;21&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Do volunteer work&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Offer yourself as a volunteer to an event or a cause.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;22&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Perform to a security camera&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Do a little dance to a security camera. It shouldn&#039;t be illegal...probably. Don&#039;t get in trouble!&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;23&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment someone for a job well done&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;When was the last time you thanked the janitor?&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;24&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Take a day off&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;This is mostly for work-a-holics: rest for a while.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
    &amp;lt;/tasks&amp;gt;&lt;br /&gt;
  &amp;lt;/challenge&amp;gt;&lt;br /&gt;
&amp;lt;/challenges&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT (stiilifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsl link]] ===&lt;br /&gt;
&lt;br /&gt;
Toodud stiilifail muudab ülaltoodud XML vastuse inimesele kergemini loetavaks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html class=&amp;quot;no-js&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;Ando Roots&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Challengo Response&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.css&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.responsive.css&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Challengo API response&amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
            The following is a list of challenges reported by the XML API.&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;!-- Go over each challenge --&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;challenges/challenge&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h2&amp;gt;&lt;br /&gt;
              &lt;br /&gt;
              &amp;lt;!-- Challenge badge image and title --&amp;gt;&lt;br /&gt;
              &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;&lt;br /&gt;
                  http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/img&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
              &amp;lt;!-- Challenge progress, if applicable --&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:if test=&amp;quot;@progress&amp;quot;&amp;gt;&lt;br /&gt;
                (&amp;lt;span&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@progress&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/span&amp;gt;)&lt;br /&gt;
              &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
            &amp;lt;/h2&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;p class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- Table for some challenge meta-info --&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered span4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Points required to complete:&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;points_required&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Time left (hours):&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;round(duration div 1800)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;!-- List all challenge tasks --&amp;gt;&lt;br /&gt;
            &amp;lt;h3 style=&amp;quot;margin-top:140px&amp;quot;&amp;gt;Tasks (&amp;lt;xsl:value-of select=&amp;quot;@tasks&amp;quot;/&amp;gt;)&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered table-striped table-condensed&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;thead&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;ID&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Title&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Badge&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Rewards&amp;lt;/th&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/thead&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;tasks/task&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;tr&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Color the row gray if task is completed --&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;@completed&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:attribute name=&amp;quot;class&amp;quot;&amp;gt;&lt;br /&gt;
                        help-block&lt;br /&gt;
                      &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                      &amp;lt;/img&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:for-each select=&amp;quot;rewards/reward&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;li&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=1&amp;quot;&amp;gt;&lt;br /&gt;
                              Compassion&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=2&amp;quot;&amp;gt;&lt;br /&gt;
                              Strength&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=3&amp;quot;&amp;gt;&lt;br /&gt;
                              Intelligence&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;span&amp;gt;&lt;br /&gt;
                              &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                            &amp;lt;/span&amp;gt;&lt;br /&gt;
                          &amp;lt;/li&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;!-- End of challenge task table --&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;!-- End of challenge --&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD (skeemifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsd link]] ===&lt;br /&gt;
&lt;br /&gt;
Skeemifail kirjeldab päringu vastuse XML struktuuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;challenges&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;challenge&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;duration&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;points_required&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;tasks&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;task&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rewards&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;reward&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:extension base=&amp;quot;xs:unsignedByte&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:attribute name=&amp;quot;power_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;completed&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;max_points&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;tasks&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;progress&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Veebiteenus ==&lt;br /&gt;
&#039;&#039;Tähtaeg 14. aprill 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Veebiteenuseks on PHP rakendus, mis hakkab WP7 rakendusele andmeid pakkuma ja neid vastu võtma.&lt;br /&gt;
&lt;br /&gt;
=== Demo ===&lt;br /&gt;
&lt;br /&gt;
Demokeskkond asub SQroot serveris: [https://challengo.sqroot.eu https://challengo.sqroot.eu]. Sisselogimisandmed on &#039;demo&#039; ja &#039;admin&#039;.&lt;br /&gt;
API testkeskkond on [https://challengo.sqroot.eu/wp7 https://challengo.sqroot.eu/wp7], API võtmeks võib valida 123.&lt;br /&gt;
&lt;br /&gt;
== Klientrakendus ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 5. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Klientrakendus on Windows Phone 7 klient Challengo teenusele, mis kasutab projekti esimeses osas koostatud XML andmestruktuuri.&lt;br /&gt;
&lt;br /&gt;
XML-i väljastab Challengo API, mis vajab veel kirjutamist. Challengo on realiseeritud PHP-s.&lt;br /&gt;
&lt;br /&gt;
=== Feature set ===&lt;br /&gt;
&lt;br /&gt;
* Autentimine&lt;br /&gt;
** Login&lt;br /&gt;
** Logout&lt;br /&gt;
* Nimekiri aktiivsetest väljakutsetest ja nende staatustest&lt;br /&gt;
** Nimekiri väljakutse alamülesannetest ja nende staatustest&lt;br /&gt;
* Väljakutse märkimine lõpetatuks&lt;br /&gt;
** Alamülesande märkimine lõpetatuks&lt;br /&gt;
* Uue väljakutse valimine nimekirjast&lt;br /&gt;
** Väljakutse detailide ja alamülesannete vaatamine&lt;br /&gt;
* Väljakutse &amp;quot;hülgamine&amp;quot; (&#039;&#039;abandon&#039;&#039;)&lt;br /&gt;
* Kasutaja statistika näitamine&lt;br /&gt;
** Praegune punktiseis&lt;br /&gt;
** Lõpetatud väljakutsed&lt;br /&gt;
*** Lõpetatud alamülesanded&lt;br /&gt;
** Teenitud märgid&lt;br /&gt;
&lt;br /&gt;
= Meeskonna Liikmed =&lt;br /&gt;
&lt;br /&gt;
* Ando Roots &#039;&#039;anroots@itcollege.ee&#039;&#039;&lt;br /&gt;
* Mikk Pärast &#039;&#039;mparast@itcollege.ee&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Liitumine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for t in tudengid:&lt;br /&gt;
  if !t.laisk &amp;amp;&amp;amp; t.oskab_progreda:&lt;br /&gt;
    kutsu_meeskonda(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ mail -s &amp;quot;Harold&amp;quot; anroots@itcollege.ee&amp;lt;/pre&amp;gt;&lt;br /&gt;
Eeldan varasemaid teadmisi ning usaldusväärsust. Soovin, et asi ei lõppeks jälle nii, et projektijuht on kaitsmiseelsel õhtul üleval ja lõpetab üksinda projekti.&lt;br /&gt;
Ole nii kena ja anna huvist märku enne &#039;&#039;&#039;26. veebruari&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Lisad =&lt;br /&gt;
&lt;br /&gt;
[http://jaa.ee Kes on Harold?]&lt;br /&gt;
&lt;br /&gt;
== Challengo ==&lt;br /&gt;
&lt;br /&gt;
Challengo.me on Garage48 Tallinn 2011 raames alustatud veebiteenus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A social network of themed challenges, comes with a Karma profile and level-system.&lt;br /&gt;
Revenues from ads on the mobile version.&lt;br /&gt;
Team members: Ando Roots, Kristo Vaher, Valeria Gasik, Jelena Savinen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube v=&amp;quot;pPfHJD5F7sc&amp;quot; /&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=pPfHJD5F7sc Jelena tutvustab Challengo teenust]&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=46612</id>
		<title>Meeskond &quot;Harold&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=46612"/>
		<updated>2012-03-18T06:32:39Z</updated>

		<summary type="html">&lt;p&gt;Anroots: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
{| style=&amp;quot;width:100%;height: 40px; background-color:#dff0d8;border: 1px solid ##468847;color:#468847;padding:10px;font-size:16px;font-weight:bold-webkit-border-radius: 8px;-moz-border-radius: 8px;border-radius: 8px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
| Praeguses faasis tegeleb tiim veebiteenuse arendamisega.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Tegemist on IT Kolledži aine raames eksamieeldust taotleva projektimeeskonna töö dokumentatsiooniga.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 30em; padding-left: 2em; float: right; font-size: 95%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Meeskond &#039;&#039;&amp;quot;Harold&amp;quot;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Aine:&#039;&#039;&#039;&lt;br /&gt;
| [[:Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhend:&#039;&#039;&#039;&lt;br /&gt;
| [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2012 Juhend]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Tüüp:&#039;&#039;&#039;&lt;br /&gt;
| Projekt&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Anroots]]&amp;lt;br /&amp;gt;[[User:Mparast]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhendajad:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Mposka]]&amp;lt;br /&amp;gt;[[User:Kraspel]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Semester:&#039;&#039;&#039;&lt;br /&gt;
| 2011/2012 kevad&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Kood (Git)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Challengo:&#039;&#039;&#039;&lt;br /&gt;
| [http://trac.sqroot.eu/projects/challengo/ SQroot Tracker]&lt;br /&gt;
|-&lt;br /&gt;
|Demo&lt;br /&gt;
|[https://challengo.sqroot.eu/public]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Projekt =&lt;br /&gt;
&lt;br /&gt;
Projekti kõik kolm osa keskenduvad veebiteenuse &amp;quot;Challengo&amp;quot; taasloomisele. Projekti esimene osa valmistab ette peamis(t)e päringu(te) XML vastuse struktuuri, projekti teine osa (veebiteenuse loomine) ehitab vastava API ning kolmanda osa raames (klientrakendus) realiseeritakse Windows Phone 7 rakendus.&lt;br /&gt;
&lt;br /&gt;
== Korraldus ==&lt;br /&gt;
&lt;br /&gt;
Projektiga seonduv dokumentatsioon (erandiks on käesolev wiki leht), kasutajale nähtavad tekstid ning lähtekood on kirjutatud inglise keeles. Võimalusel on kood kirjutatud hilisema I18n toe võimaldamiseks.&lt;br /&gt;
&lt;br /&gt;
Koodi haldab GitHub repositoorium, juurdepääsu saamiseks tuleb projektijuhile saata oma GitHub kasutajanimi (või &#039;&#039;pull request&#039;&#039;). Tegemist vajavaid töid näeb GitHub lehel &#039;&#039;Issues&#039;&#039; vahekaardilt ning asjakohane dokumentatsioon (API) on GitHub wiki alamjaotises.&lt;br /&gt;
&lt;br /&gt;
Lähtekood on põhjalikult kommenteeritud, muud, eraldiseisvat dokumentatsiooni koodi kohta pole.&lt;br /&gt;
&lt;br /&gt;
== XML Andmefailid ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 3. märts 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
XML andmefail kirjeldab veebiteenuse &amp;quot;[http://garage48.org/blogger/projects-on-garage48-tallinn-2011 Challengo]&amp;quot; andmeid. Andmed asuvad MYSQL andmebaasis, mille struktuur on kirjeldatud ERD mudeliga [[File:Harold_Challengo_MYSQL_ERD.png|200px|thumb|MYSQL ERD mudel]]. XML formaadis andmeid väljastab serveris asuv PHP API. Järgnevalt toodud XML näited ei pruugi projekti esimese osa nõudmiste tõttu olla vastavuses teise osana valmiva veebiteenuse tegeliku väljundiga.&lt;br /&gt;
&lt;br /&gt;
Faile saab vaadata ka võrgust: http://enos.itcollege.ee/~anroots/challengo/xml/. Soovitatav on seda teha just XSLT stiilifaili jaoks (http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml).&lt;br /&gt;
&lt;br /&gt;
=== XML [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml link]]===&lt;br /&gt;
&lt;br /&gt;
Järgnevalt on toodud lõik kasutaja praeguste väljakutsete päringust. Kasutajal on parajasti kaks aktiivset väljakutset, igal väljakutsel on veidi meta-infot, mingi hulk ülesandeid (tasks) ning igal ülesandel on üks või mitu autasu (rewards).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;Response.xsl&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!-- List of user&#039;s current challenges --&amp;gt;&lt;br /&gt;
&amp;lt;challenges&amp;gt;&lt;br /&gt;
  &amp;lt;!-- First challenge, started by the user --&amp;gt;&lt;br /&gt;
  &amp;lt;challenge id=&amp;quot;4&amp;quot; tasks=&amp;quot;6&amp;quot; progress=&amp;quot;17%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;The Improgrupp Jaa!&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Inspired by a true story, the Improgrupp Jaa! contains tasks that challenge ones spontaniety and social courage.&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;duration&amp;gt;1209600&amp;lt;/duration&amp;gt;&lt;br /&gt;
    &amp;lt;points_required&amp;gt;18&amp;lt;/points_required&amp;gt;&lt;br /&gt;
    &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;!-- Each challenge has a number of tasks that have to be completed.--&amp;gt;&lt;br /&gt;
    &amp;lt;!-- No challenge can be completed before earned points from tasks (rewards) exceed the points_required field --&amp;gt;&lt;br /&gt;
    &amp;lt;tasks max_points=&amp;quot;26&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;19&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Make a present to a homeless person&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;If you can read this, you&#039;re probably among the luckier ones. Do something for the ones who can&#039;t.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;!-- Each task yields rewards on completion. Rewards are &amp;quot;power&amp;quot; points of different categories.--&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;20&amp;quot; completed=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment a stranger&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Make a sincere compliment to someone you don&#039;t know. We could do with more praise where it&#039;s due.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;21&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Do volunteer work&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Offer yourself as a volunteer to an event or a cause.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;22&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Perform to a security camera&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Do a little dance to a security camera. It shouldn&#039;t be illegal...probably. Don&#039;t get in trouble!&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;23&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment someone for a job well done&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;When was the last time you thanked the janitor?&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;24&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Take a day off&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;This is mostly for work-a-holics: rest for a while.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
    &amp;lt;/tasks&amp;gt;&lt;br /&gt;
  &amp;lt;/challenge&amp;gt;&lt;br /&gt;
&amp;lt;/challenges&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT (stiilifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsl link]] ===&lt;br /&gt;
&lt;br /&gt;
Toodud stiilifail muudab ülaltoodud XML vastuse inimesele kergemini loetavaks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html class=&amp;quot;no-js&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;Ando Roots&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Challengo Response&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.css&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.responsive.css&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Challengo API response&amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
            The following is a list of challenges reported by the XML API.&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;!-- Go over each challenge --&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;challenges/challenge&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h2&amp;gt;&lt;br /&gt;
              &lt;br /&gt;
              &amp;lt;!-- Challenge badge image and title --&amp;gt;&lt;br /&gt;
              &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;&lt;br /&gt;
                  http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/img&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
              &amp;lt;!-- Challenge progress, if applicable --&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:if test=&amp;quot;@progress&amp;quot;&amp;gt;&lt;br /&gt;
                (&amp;lt;span&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@progress&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/span&amp;gt;)&lt;br /&gt;
              &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
            &amp;lt;/h2&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;p class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- Table for some challenge meta-info --&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered span4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Points required to complete:&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;points_required&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Time left (hours):&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;round(duration div 1800)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;!-- List all challenge tasks --&amp;gt;&lt;br /&gt;
            &amp;lt;h3 style=&amp;quot;margin-top:140px&amp;quot;&amp;gt;Tasks (&amp;lt;xsl:value-of select=&amp;quot;@tasks&amp;quot;/&amp;gt;)&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered table-striped table-condensed&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;thead&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;ID&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Title&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Badge&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Rewards&amp;lt;/th&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/thead&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;tasks/task&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;tr&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Color the row gray if task is completed --&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;@completed&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:attribute name=&amp;quot;class&amp;quot;&amp;gt;&lt;br /&gt;
                        help-block&lt;br /&gt;
                      &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                      &amp;lt;/img&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:for-each select=&amp;quot;rewards/reward&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;li&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=1&amp;quot;&amp;gt;&lt;br /&gt;
                              Compassion&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=2&amp;quot;&amp;gt;&lt;br /&gt;
                              Strength&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=3&amp;quot;&amp;gt;&lt;br /&gt;
                              Intelligence&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;span&amp;gt;&lt;br /&gt;
                              &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                            &amp;lt;/span&amp;gt;&lt;br /&gt;
                          &amp;lt;/li&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;!-- End of challenge task table --&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;!-- End of challenge --&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD (skeemifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsd link]] ===&lt;br /&gt;
&lt;br /&gt;
Skeemifail kirjeldab päringu vastuse XML struktuuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;challenges&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;challenge&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;duration&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;points_required&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;tasks&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;task&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rewards&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;reward&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:extension base=&amp;quot;xs:unsignedByte&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:attribute name=&amp;quot;power_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;completed&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;max_points&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;tasks&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;progress&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Veebiteenus ==&lt;br /&gt;
&#039;&#039;Tähtaeg 14. aprill 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Veebiteenuseks on PHP rakendus, mis hakkab WP7 rakendusele andmeid pakkuma ja neid vastu võtma.&lt;br /&gt;
&lt;br /&gt;
== Klientrakendus ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 5. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Klientrakendus on Windows Phone 7 klient Challengo teenusele, mis kasutab projekti esimeses osas koostatud XML andmestruktuuri.&lt;br /&gt;
&lt;br /&gt;
XML-i väljastab Challengo API, mis vajab veel kirjutamist. Challengo on realiseeritud PHP-s.&lt;br /&gt;
&lt;br /&gt;
=== Feature set ===&lt;br /&gt;
&lt;br /&gt;
* Autentimine&lt;br /&gt;
** Login&lt;br /&gt;
** Logout&lt;br /&gt;
* Nimekiri aktiivsetest väljakutsetest ja nende staatustest&lt;br /&gt;
** Nimekiri väljakutse alamülesannetest ja nende staatustest&lt;br /&gt;
* Väljakutse märkimine lõpetatuks&lt;br /&gt;
** Alamülesande märkimine lõpetatuks&lt;br /&gt;
* Uue väljakutse valimine nimekirjast&lt;br /&gt;
** Väljakutse detailide ja alamülesannete vaatamine&lt;br /&gt;
* Väljakutse &amp;quot;hülgamine&amp;quot; (&#039;&#039;abandon&#039;&#039;)&lt;br /&gt;
* Kasutaja statistika näitamine&lt;br /&gt;
** Praegune punktiseis&lt;br /&gt;
** Lõpetatud väljakutsed&lt;br /&gt;
*** Lõpetatud alamülesanded&lt;br /&gt;
** Teenitud märgid&lt;br /&gt;
&lt;br /&gt;
= Meeskonna Liikmed =&lt;br /&gt;
&lt;br /&gt;
* Ando Roots &#039;&#039;anroots@itcollege.ee&#039;&#039;&lt;br /&gt;
* Mikk Pärast &#039;&#039;mparast@itcollege.ee&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Liitumine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for t in tudengid:&lt;br /&gt;
  if !t.laisk &amp;amp;&amp;amp; t.oskab_progreda:&lt;br /&gt;
    kutsu_meeskonda(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ mail -s &amp;quot;Harold&amp;quot; anroots@itcollege.ee&amp;lt;/pre&amp;gt;&lt;br /&gt;
Eeldan varasemaid teadmisi ning usaldusväärsust. Soovin, et asi ei lõppeks jälle nii, et projektijuht on kaitsmiseelsel õhtul üleval ja lõpetab üksinda projekti.&lt;br /&gt;
Ole nii kena ja anna huvist märku enne &#039;&#039;&#039;26. veebruari&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Lisad =&lt;br /&gt;
&lt;br /&gt;
[http://jaa.ee Kes on Harold?]&lt;br /&gt;
&lt;br /&gt;
== Challengo ==&lt;br /&gt;
&lt;br /&gt;
Challengo.me on Garage48 Tallinn 2011 raames alustatud veebiteenus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A social network of themed challenges, comes with a Karma profile and level-system.&lt;br /&gt;
Revenues from ads on the mobile version.&lt;br /&gt;
Team members: Ando Roots, Kristo Vaher, Valeria Gasik, Jelena Savinen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube v=&amp;quot;pPfHJD5F7sc&amp;quot; /&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=pPfHJD5F7sc Jelena tutvustab Challengo teenust]&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Talk:-.-&amp;diff=46611</id>
		<title>Talk:-.-</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Talk:-.-&amp;diff=46611"/>
		<updated>2012-03-18T03:55:40Z</updated>

		<summary type="html">&lt;p&gt;Anroots: /* Meeskond &amp;quot;Harold&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Retsensioonid =&lt;br /&gt;
&lt;br /&gt;
== Meeskond [[LLL]] ==&lt;br /&gt;
Esmasel peale vaatamisel tekkib tungiv soov küsida, miks alkoholid jaotatakse tootjamaade põhiselt, see ei ole küll viga, aga veidi imelik jaotus, kui just ei tehta statistilisi koondaruandeid, või on see kellegi personaalne soov neid nii jagada.&lt;br /&gt;
&lt;br /&gt;
Esimesel läbilugemisel ilmnes ka kaks &#039;hooletus viga&#039;: &lt;br /&gt;
&lt;br /&gt;
Millest üheks oli see, et ühe elemendi sees defineeriti ühte ja sama asja mitu korda. Nimelt kui vaadata Eesti alkohole on viinad defineeritud ühtselt sama elemendi alla, siis miks õlud on kahe eraldi elemendina. Kas poleks &#039;lihtsam ja ilusam&#039; kirjutada nad kokku üheks elemendiks? Võibolla oli asi tingitud pidevatest muutustest tingitud hooletust kontrollimisest või lihtsalt hooletusest või ka aja nappusest, mis tingitud aja valesti jaotamisest töö tegemiseks.&lt;br /&gt;
&lt;br /&gt;
Teiseks on see, et järjekord alates migist hetkest muutub vastupidiseks (kangus ja hind vahetavad kohad ära). Funktsionaalselt ei juhtu sellega seoses midagi, aga siis tuleb hoolikamalt lugeda, et mitte valesti aru saada asjadest.&lt;br /&gt;
&lt;br /&gt;
Struktuuri osas teeks jaotuse alkoholi tüübi all kanguse järgi, mille alla kuuluvad teatud margid (alkoholi nimetused nt: Saku kuld, Saku originaal jne) ja nendel oleks mingi teatud kogused (liiter, 0.5liitrit, 1pint jt) ning vastavalt selle alkoholi kogusele määratakse hind, millel on ühik.&lt;br /&gt;
&lt;br /&gt;
XSL&#039;idest esimene on tehtud hea ja ülevaatlik arvestades struktuuri suurust ja ehitust ja lihtsust, kuid teine XSL on esimese kärbitud varjant, mille asemel oleks võinud juurde tuua muutuja, mida ei kuvata juba esimese XSL&#039;iga, milleks oleks antud juhul näiteks tootjariik.&lt;br /&gt;
&lt;br /&gt;
== [[Meeskond &amp;quot;Harold&amp;quot;]] ==&lt;br /&gt;
Boonuspunktid koodi esituses syntax highlight kasutamise eest. XML teemat oleks võinud natuke tutvustada, praegu jääb selgusetuks, miks otsustati kirjeldada just alkohole, mida antud XML autorite arvates võimaldab ja milline oleks võimalik areng tulevikus.&lt;br /&gt;
&lt;br /&gt;
XML-s hakkas esimesena silma juurelement: tooted, mitte alkoholid. See on positiivne, sest selline semantika on üldisem (tarkvaraarendusest: mida üldisem, seda parem) ja võimaldab kirjeldada samas XML-s ka näiteks maiustusi. Samas on natuke veider lugeda näiteks järgnevat struktuuri:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tooted&amp;gt;&lt;br /&gt;
&amp;lt;alkoholid tootjariik=&amp;quot;Eesti&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/alkoholid&amp;gt;&lt;br /&gt;
&amp;lt;alkoholid tootjariik=&amp;quot;Taani&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/alkoholid&amp;gt;&lt;br /&gt;
&amp;lt;/tooted&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ehk oleks saanud selle kuidagi paremini disainida, näiteks nii:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tooted&amp;gt;&lt;br /&gt;
&amp;lt;alkoholid&amp;gt;&lt;br /&gt;
&amp;lt;viskid&amp;gt;&lt;br /&gt;
&amp;lt;viski tootjamaa=&amp;quot;Taani&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/viski&amp;gt;&lt;br /&gt;
&amp;lt;/viskid&amp;gt;&lt;br /&gt;
&amp;lt;/alkoholid&amp;gt;&lt;br /&gt;
&amp;lt;/tooted&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Põhjenduseks, et tooted all oleks intuatiivne see, iga element esindab erinevat gruppi tooteid.&lt;br /&gt;
&lt;br /&gt;
Mõeldes sellele, et alkoholide info tuleb tõenäoliselt andmebaasist ja XML-i tarbib mingisugune klientrakendus, oleks ressurssidel (ressursiks loen ühte andmebaasirida mingist tabelist X) vaja ID attribuute, et klientrakendus selle abil järgnevaid päringuid teha saaks. Näiteks, osta viski &amp;quot;Grant&#039;s&amp;quot; järgneva päringuga&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GET http://example.com/api/buy/product/4 HTTP/1.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Meeldib see, et &amp;quot;kangus&amp;quot; ja &amp;quot;hind&amp;quot; elementidel on attribuutiks ühik.&lt;br /&gt;
&lt;br /&gt;
XML-s oleks võinud kohe viidata ka skeemifailile ning mõlemad retsensendi mugavuseks kuhugile hostida. Sorteerimise ja if-lausete kasutamine XSLT-s annab boonuspunkte autorite tehnilisele kompetentsile. Veidi allapoole kerides jäi silma&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;quot;Ülesandeks on leida terviselehele tehniline lahendus, mis oleks kaasaegne ning pilkupüüdev&amp;quot;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seda arvesse võttes ei teeks ka XSLT-s natukene CSS-i paha.&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Talk:-.-&amp;diff=46610</id>
		<title>Talk:-.-</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Talk:-.-&amp;diff=46610"/>
		<updated>2012-03-18T03:52:39Z</updated>

		<summary type="html">&lt;p&gt;Anroots: /* Meeskond &amp;quot;Harold&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Retsensioonid =&lt;br /&gt;
&lt;br /&gt;
== Meeskond [[LLL]] ==&lt;br /&gt;
Esmasel peale vaatamisel tekkib tungiv soov küsida, miks alkoholid jaotatakse tootjamaade põhiselt, see ei ole küll viga, aga veidi imelik jaotus, kui just ei tehta statistilisi koondaruandeid, või on see kellegi personaalne soov neid nii jagada.&lt;br /&gt;
&lt;br /&gt;
Esimesel läbilugemisel ilmnes ka kaks &#039;hooletus viga&#039;: &lt;br /&gt;
&lt;br /&gt;
Millest üheks oli see, et ühe elemendi sees defineeriti ühte ja sama asja mitu korda. Nimelt kui vaadata Eesti alkohole on viinad defineeritud ühtselt sama elemendi alla, siis miks õlud on kahe eraldi elemendina. Kas poleks &#039;lihtsam ja ilusam&#039; kirjutada nad kokku üheks elemendiks? Võibolla oli asi tingitud pidevatest muutustest tingitud hooletust kontrollimisest või lihtsalt hooletusest või ka aja nappusest, mis tingitud aja valesti jaotamisest töö tegemiseks.&lt;br /&gt;
&lt;br /&gt;
Teiseks on see, et järjekord alates migist hetkest muutub vastupidiseks (kangus ja hind vahetavad kohad ära). Funktsionaalselt ei juhtu sellega seoses midagi, aga siis tuleb hoolikamalt lugeda, et mitte valesti aru saada asjadest.&lt;br /&gt;
&lt;br /&gt;
Struktuuri osas teeks jaotuse alkoholi tüübi all kanguse järgi, mille alla kuuluvad teatud margid (alkoholi nimetused nt: Saku kuld, Saku originaal jne) ja nendel oleks mingi teatud kogused (liiter, 0.5liitrit, 1pint jt) ning vastavalt selle alkoholi kogusele määratakse hind, millel on ühik.&lt;br /&gt;
&lt;br /&gt;
XSL&#039;idest esimene on tehtud hea ja ülevaatlik arvestades struktuuri suurust ja ehitust ja lihtsust, kuid teine XSL on esimese kärbitud varjant, mille asemel oleks võinud juurde tuua muutuja, mida ei kuvata juba esimese XSL&#039;iga, milleks oleks antud juhul näiteks tootjariik.&lt;br /&gt;
&lt;br /&gt;
== [[Meeskond &amp;quot;Harold&amp;quot;]] ==&lt;br /&gt;
Boonuspunktid koodi esituses syntax highlight kasutamise eest. XML teemat oleks võinud natuke tutvustada, praegu jääb selgusetuks, miks otsustati kirjeldada just alkohole, mida antud XML autorite arvates võimaldab ja milline oleks võimalik areng tulevikus.&lt;br /&gt;
&lt;br /&gt;
XML-s hakkas esimesena silma juurelement: tooted, mitte alkoholid. See on positiivne, sest selline semantika on üldisem (tarkvaraarendusest: mida üldisem, seda parem) ja võimaldab kirjeldada samas XML-s ka näiteks maiustusi. Samas on natuke veider lugeda näiteks järgnevat struktuuri:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tooted&amp;gt;&lt;br /&gt;
&amp;lt;alkoholid tootjariik=&amp;quot;Eesti&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/alkoholid&amp;gt;&lt;br /&gt;
&amp;lt;alkoholid tootjariik=&amp;quot;Taani&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/alkoholid&amp;gt;&lt;br /&gt;
&amp;lt;/tooted&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ehk oleks saanud selle kuidagi paremini disainida, näiteks nii:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tooted&amp;gt;&lt;br /&gt;
&amp;lt;alkoholid&amp;gt;&lt;br /&gt;
&amp;lt;viskid&amp;gt;&lt;br /&gt;
&amp;lt;viski tootjamaa=&amp;quot;Taani&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/viski&amp;gt;&lt;br /&gt;
&amp;lt;/viskid&amp;gt;&lt;br /&gt;
&amp;lt;/alkoholid&amp;gt;&lt;br /&gt;
&amp;lt;/tooted&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Põhjenduseks, et tooted all oleks intuatiivne see, iga element esindab erinevat gruppi tooteid.&lt;br /&gt;
&lt;br /&gt;
Mõeldes sellele, et alkoholide info tuleb tõenäoliselt andmebaasist ja XML-i tarbib mingisugune klientrakendus, oleks ressurssidel (ressursiks loen ühte andmebaasirida mingist tabelist X) vaja ID attribuute, et klientrakendus selle abil järgnevaid päringuid teha saaks. Näiteks, osta viski &amp;quot;Grant&#039;s&amp;quot; järgneva päringuga&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GET http://example.com/api/buy/product/4 HTTP/1.1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Meeldib see, et &amp;quot;kangus&amp;quot; ja &amp;quot;hind&amp;quot; elementidel on attribuutiks ühik.&lt;br /&gt;
&lt;br /&gt;
XML-s oleks võinud kohe viidata ka skeemifailile ning mõlemad retsensendi mugavuseks kuhugile hostida. Sorteerimise ja if-lausete kasutamine XSLT-s annab boonuspunkte autorite tehnilisele kompetentsile. Veidi allapoole kerides jäi silma &amp;quot;Ülesandeks on leida terviselehele tehniline lahendus, mis oleks kaasaegne ning pilkupüüdev&amp;quot; - seda arvesse võttes ei teeks ka XSLT-s natukene CSS-i paha.&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Talk:-.-&amp;diff=46609</id>
		<title>Talk:-.-</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Talk:-.-&amp;diff=46609"/>
		<updated>2012-03-18T03:51:15Z</updated>

		<summary type="html">&lt;p&gt;Anroots: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Retsensioonid =&lt;br /&gt;
&lt;br /&gt;
== Meeskond [[LLL]] ==&lt;br /&gt;
Esmasel peale vaatamisel tekkib tungiv soov küsida, miks alkoholid jaotatakse tootjamaade põhiselt, see ei ole küll viga, aga veidi imelik jaotus, kui just ei tehta statistilisi koondaruandeid, või on see kellegi personaalne soov neid nii jagada.&lt;br /&gt;
&lt;br /&gt;
Esimesel läbilugemisel ilmnes ka kaks &#039;hooletus viga&#039;: &lt;br /&gt;
&lt;br /&gt;
Millest üheks oli see, et ühe elemendi sees defineeriti ühte ja sama asja mitu korda. Nimelt kui vaadata Eesti alkohole on viinad defineeritud ühtselt sama elemendi alla, siis miks õlud on kahe eraldi elemendina. Kas poleks &#039;lihtsam ja ilusam&#039; kirjutada nad kokku üheks elemendiks? Võibolla oli asi tingitud pidevatest muutustest tingitud hooletust kontrollimisest või lihtsalt hooletusest või ka aja nappusest, mis tingitud aja valesti jaotamisest töö tegemiseks.&lt;br /&gt;
&lt;br /&gt;
Teiseks on see, et järjekord alates migist hetkest muutub vastupidiseks (kangus ja hind vahetavad kohad ära). Funktsionaalselt ei juhtu sellega seoses midagi, aga siis tuleb hoolikamalt lugeda, et mitte valesti aru saada asjadest.&lt;br /&gt;
&lt;br /&gt;
Struktuuri osas teeks jaotuse alkoholi tüübi all kanguse järgi, mille alla kuuluvad teatud margid (alkoholi nimetused nt: Saku kuld, Saku originaal jne) ja nendel oleks mingi teatud kogused (liiter, 0.5liitrit, 1pint jt) ning vastavalt selle alkoholi kogusele määratakse hind, millel on ühik.&lt;br /&gt;
&lt;br /&gt;
XSL&#039;idest esimene on tehtud hea ja ülevaatlik arvestades struktuuri suurust ja ehitust ja lihtsust, kuid teine XSL on esimese kärbitud varjant, mille asemel oleks võinud juurde tuua muutuja, mida ei kuvata juba esimese XSL&#039;iga, milleks oleks antud juhul näiteks tootjariik.&lt;br /&gt;
&lt;br /&gt;
== [[Meeskond &amp;quot;Harold&amp;quot;]] ==&lt;br /&gt;
Boonuspunktid koodi esituses syntax highlight kasutamise eest. XML teemat oleks võinud natuke tutvustada, praegu jääb selgusetuks, miks otsustati kirjeldada just alkohole, mida antud XML autorite arvates võimaldab ja milline oleks võimalik areng tulevikus.&lt;br /&gt;
&lt;br /&gt;
XML-s hakkas esimesena silma juurelement: tooted, mitte alkoholid. See on positiivne, sest selline semantika on üldisem (tarkvaraarendusest: mida üldisem, seda parem) ja võimaldab kirjeldada samas XML-s ka näiteks maiustusi. Samas on natuke veider lugeda näiteks järgnevat struktuuri:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tooted&amp;gt;&lt;br /&gt;
&amp;lt;alkoholid tootjariik=&amp;quot;Eesti&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/alkoholid&amp;gt;&lt;br /&gt;
&amp;lt;alkoholid tootjariik=&amp;quot;Taani&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/alkoholid&amp;gt;&lt;br /&gt;
&amp;lt;/tooted&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ehk oleks saanud selle kuidagi paremini disainida, näiteks nii:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tooted&amp;gt;&lt;br /&gt;
&amp;lt;alkoholid&amp;gt;&lt;br /&gt;
&amp;lt;viskid&amp;gt;&lt;br /&gt;
&amp;lt;viski tootjamaa=&amp;quot;Taani&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/viski&amp;gt;&lt;br /&gt;
&amp;lt;/viskid&amp;gt;&lt;br /&gt;
&amp;lt;/alkoholid&amp;gt;&lt;br /&gt;
&amp;lt;/tooted&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Põhjenduseks, et tooted all oleks intuatiivne see, iga element esindab erinevat gruppi tooteid.&lt;br /&gt;
&lt;br /&gt;
Mõeldes sellele, et alkoholide info tuleb tõenäoliselt andmebaasist ja XML-i tarbib mingisugune klientrakendus, oleks ressurssidel (ressursiks loen ühte andmebaasirida mingist tabelist X) vaja ID attribuute, et klientrakendus selle abil järgnevaid päringuid teha saaks. Näiteks, osta viski &amp;quot;Grant&#039;s&amp;quot; järgneva päringuga&lt;br /&gt;
&lt;br /&gt;
GET http://example.com/api/buy/product/4 HTTP/1.1&lt;br /&gt;
&lt;br /&gt;
Meeldib see, et &amp;quot;kangus&amp;quot; ja &amp;quot;hind&amp;quot; elementidel on attribuutiks ühik.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
XML-s oleks võinud kohe viidata ka skeemifailile ning mõlemad retsensendi mugavuseks kuhugile hostida. Sorteerimise ja if-lausete kasutamine XSLT-s annab boonuspunkte autorite tehnilisele kompetentsile. Veidi allapoole kerides jäi silma &amp;quot;Ülesandeks on leida terviselehele tehniline lahendus, mis oleks kaasaegne ning pilkupüüdev&amp;quot; - seda arvesse võttes ei teeks ka XSLT-s natukene CSS-i paha.&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Talk:Meeskond_%22.NOT%22&amp;diff=46582</id>
		<title>Talk:Meeskond &quot;.NOT&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Talk:Meeskond_%22.NOT%22&amp;diff=46582"/>
		<updated>2012-03-17T13:03:58Z</updated>

		<summary type="html">&lt;p&gt;Anroots: /* Retsensioon (Meeskond &amp;quot;Harold&amp;quot;) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Retsensioon ([[Meeskond &amp;quot;Harold&amp;quot;]]) ==&lt;br /&gt;
&lt;br /&gt;
Üldiselt eeskujulik sooritus, on näha, et meeskond tunneb XML ja XSL failide struktuuri ja oskab neid koostada nii praktikas kui disainis (mõelda, kuidas XML struktuurselt üles ehitada).&lt;br /&gt;
&lt;br /&gt;
=== Vormilisest küljest ===&lt;br /&gt;
&lt;br /&gt;
XML-i oli wikist ebamugav lugeda. Palun kasutage &amp;amp;lt;pre&amp;gt; tag asemel &amp;amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;. XML failile oleks kohe juurde võinud lisada viite transformatsioonile (&amp;amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;stiil.xsl&amp;quot;?&amp;gt;), samuti oleks võinud XML + XSL failid kuhugile hostida, et retsensent ei peaks seda ise tegema. P.S! &amp;lt; märke, mis transformatsiooni autorile probleeme tekitas, saab sisestada &amp;amp;lt;source&amp;gt; tagide vahele või kodeeritult.&lt;br /&gt;
&lt;br /&gt;
=== XML ===&lt;br /&gt;
&lt;br /&gt;
XML tutvustust oleks tekstiliselt tahtnud pikemalt lugeda: miks valiti just see teema (aktuaalne?), mida toodud XML struktuur võimaldab. Struktuuriliselt on XML üles ehitatud küllaltki hästi - võimalik on lisada 0 ... n sõidukit ning kirjeldada nende omadusi, elementidel on id kiireks otsimiseks.&lt;br /&gt;
&lt;br /&gt;
Omaduste kirjeldamist oleks muidugi üldisemalt saanud teha - ma oleksin ise tõenäoliselt kohelnud enamus asju (sh mootor, kere) auto komponentidena, millel on komponendi ID. See võimaldaks vaadelda autot kui mingit pakki erinevatest komponentidest ning näiteks e-poes (või mõnes muus infosüsteemis) kõik komponendid klikatavaks teha. Ehk siis, inimene näeb nimekirja autodest (auto kirjeldus on hunnik meta-andmeid nagu XML-s toodud mark, tootmisaasta, hind) ning klikates lahti mõne auto, näeb nimekirja komponentidest, mis on omakorda klikatavad, et nende infot vaadata. Varustuselemendid siis samamoodi - ka neid võib vaadelda komponentidena (või miks mitte, pakettidena).&lt;br /&gt;
&lt;br /&gt;
=== Transformatsioon ===&lt;br /&gt;
&lt;br /&gt;
Transformatsioonid on hästi tehtud, HTMLs kuvatakse kogu vajalik info kenasti nimekirjadena välja. Siiski, natuke CSS-i ei teeks paha loetavuse mõttes.&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Talk:Meeskond_%22.NOT%22&amp;diff=46581</id>
		<title>Talk:Meeskond &quot;.NOT&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Talk:Meeskond_%22.NOT%22&amp;diff=46581"/>
		<updated>2012-03-17T13:02:24Z</updated>

		<summary type="html">&lt;p&gt;Anroots: /* XML */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Retsensioon ([[Meeskond &amp;quot;Harold&amp;quot;]]) ==&lt;br /&gt;
&lt;br /&gt;
=== Vormilisest küljest ===&lt;br /&gt;
&lt;br /&gt;
XML-i oli wikist ebamugav lugeda. Palun kasutage &amp;amp;lt;pre&amp;gt; tag asemel &amp;amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;. XML failile oleks kohe juurde võinud lisada viite transformatsioonile (&amp;amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;stiil.xsl&amp;quot;?&amp;gt;), samuti oleks võinud XML + XSL failid kuhugile hostida, et retsensent ei peaks seda ise tegema. P.S! &amp;lt; märke, mis transformatsiooni autorile probleeme tekitas, saab sisestada &amp;amp;lt;source&amp;gt; tagide vahele või kodeeritult.&lt;br /&gt;
&lt;br /&gt;
=== XML ===&lt;br /&gt;
&lt;br /&gt;
XML tutvustust oleks tekstiliselt tahtnud pikemalt lugeda: miks valiti just see teema (aktuaalne?), mida toodud XML struktuur võimaldab. Struktuuriliselt on XML üles ehitatud küllaltki hästi - võimalik on lisada 0 ... n sõidukit ning kirjeldada nende omadusi, elementidel on id kiireks otsimiseks.&lt;br /&gt;
&lt;br /&gt;
Omaduste kirjeldamist oleks muidugi üldisemalt saanud teha - ma oleksin ise tõenäoliselt kohelnud enamus asju (sh mootor, kere) auto komponentidena, millel on komponendi ID. See võimaldaks vaadelda autot kui mingit pakki erinevatest komponentidest ning näiteks e-poes (või mõnes muus infosüsteemis) kõik komponendid klikatavaks teha. Ehk siis, inimene näeb nimekirja autodest (auto kirjeldus on hunnik meta-andmeid nagu XML-s toodud mark, tootmisaasta, hind) ning klikates lahti mõne auto, näeb nimekirja komponentidest, mis on omakorda klikatavad, et nende infot vaadata. Varustuselemendid siis samamoodi - ka neid võib vaadelda komponentidena (või miks mitte, pakettidena).&lt;br /&gt;
&lt;br /&gt;
=== Transformatsioon ===&lt;br /&gt;
&lt;br /&gt;
Transformatsioonid on hästi tehtud, HTMLs kuvatakse kogu vajalik info kenasti nimekirjadena välja. Siiski, natuke CSS-i ei teeks paha loetavuse mõttes.&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Talk:Meeskond_%22.NOT%22&amp;diff=46580</id>
		<title>Talk:Meeskond &quot;.NOT&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Talk:Meeskond_%22.NOT%22&amp;diff=46580"/>
		<updated>2012-03-17T13:00:45Z</updated>

		<summary type="html">&lt;p&gt;Anroots: /* Retsensioon (Meeskond &amp;quot;Harold&amp;quot;) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Retsensioon ([[Meeskond &amp;quot;Harold&amp;quot;]]) ==&lt;br /&gt;
&lt;br /&gt;
=== Vormilisest küljest ===&lt;br /&gt;
&lt;br /&gt;
XML-i oli wikist ebamugav lugeda. Palun kasutage &amp;amp;lt;pre&amp;gt; tag asemel &amp;amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;. XML failile oleks kohe juurde võinud lisada viite transformatsioonile (&amp;amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;stiil.xsl&amp;quot;?&amp;gt;), samuti oleks võinud XML + XSL failid kuhugile hostida, et retsensent ei peaks seda ise tegema. P.S! &amp;lt; märke, mis transformatsiooni autorile probleeme tekitas, saab sisestada &amp;amp;lt;source&amp;gt; tagide vahele või kodeeritult.&lt;br /&gt;
&lt;br /&gt;
=== XML ===&lt;br /&gt;
&lt;br /&gt;
XML tutvustust oleks tekstiliselt tahtnud pikemalt lugeda: miks valiti just see teema (aktuaalne?), mida toodud XML struktuur võimaldab. Struktuuriliselt on XML üles ehitatud küllaltki hästi - võimalik on lisada 0 ... n sõidukit ning kirjeldada nende omadusi. Omaduste kirjeldamist oleks muidugi üldisemalt saanud teha - ma oleksin ise tõenäoliselt kohelnud enamus asju (sh mootor, kere) auto komponentidena, millel on komponendi ID. See võimaldaks vaadelda autot kui mingit pakki erinevatest komponentidest ning näiteks e-poes (või mõnes muus infosüsteemis) kõik komponendid klikatavaks teha. Ehk siis, inimene näeb nimekirja autodest (auto kirjeldus on hunnik meta-andmeid nagu XML-s toodud mark, tootmisaasta, hind) ning klikates lahti mõne auto, näeb nimekirja komponentidest, mis on omakorda klikatavad, et nende infot vaadata. Varustuselemendid siis samamoodi - ka neid võib vaadelda komponentidena (või miks mitte, pakettidena).&lt;br /&gt;
&lt;br /&gt;
=== Transformatsioon ===&lt;br /&gt;
&lt;br /&gt;
Transformatsioonid on hästi tehtud, HTMLs kuvatakse kogu vajalik info kenasti nimekirjadena välja. Siiski, natuke CSS-i ei teeks paha loetavuse mõttes.&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Talk:Meeskond_%22.NOT%22&amp;diff=46579</id>
		<title>Talk:Meeskond &quot;.NOT&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Talk:Meeskond_%22.NOT%22&amp;diff=46579"/>
		<updated>2012-03-17T12:59:02Z</updated>

		<summary type="html">&lt;p&gt;Anroots: Created page with &amp;#039;== Retsensioon (Meeskond &amp;quot;Harold&amp;quot;) ==  Vormilisest küljest: XML-i oli wikist ebamugav lugeda. Palun kasutage &amp;amp;lt;pre&amp;gt; tag asemel &amp;amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;. XML failile oleks ko…&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Retsensioon ([[Meeskond &amp;quot;Harold&amp;quot;]]) ==&lt;br /&gt;
&lt;br /&gt;
Vormilisest küljest: XML-i oli wikist ebamugav lugeda. Palun kasutage &amp;amp;lt;pre&amp;gt; tag asemel &amp;amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;. XML failile oleks kohe juurde võinud lisada viite transformatsioonile (&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;stiil.xsl&amp;quot;?&amp;gt;), samuti oleks võinud XML + XSL failid kuhugile hostida, et retsensent ei peaks seda ise tegema. P.S! &amp;lt; märke, mis transformatsiooni autorile probleeme tekitas, saab sisestada &amp;amp;lt;source&amp;gt; tagide vahele või kodeeritult.&lt;br /&gt;
&lt;br /&gt;
XML tutvustust oleks tekstiliselt tahtnud pikemalt lugeda: miks valiti just see teema (aktuaalne?), mida toodud XML struktuur võimaldab. Struktuuriliselt on XML üles ehitatud küllaltki hästi - võimalik on lisada 0 ... n sõidukit ning kirjeldada nende omadusi. Omaduste kirjeldamist oleks muidugi üldisemalt saanud teha - ma oleksin ise tõenäoliselt kohelnud enamus asju (sh mootor, kere) auto komponentidena, millel on komponendi ID. See võimaldaks vaadelda autot kui mingit pakki erinevatest komponentidest ning näiteks e-poes (või mõnes muus infosüsteemis) kõik komponendid klikatavaks teha. Ehk siis, inimene näeb nimekirja autodest (auto kirjeldus on hunnik meta-andmeid nagu XML-s toodud mark, tootmisaasta, hind) ning klikates lahti mõne auto, näeb nimekirja komponentidest, mis on omakorda klikatavad, et nende infot vaadata. Varustuselemendid siis samamoodi - ka neid võib vaadelda komponentidena (või miks mitte, pakettidena).&lt;br /&gt;
&lt;br /&gt;
Transformatsioonid on hästi tehtud, HTMLs kuvatakse kogu vajalik info kenasti nimekirjadena välja. Siiski, natuke CSS-i ei teeks paha loetavuse mõttes.&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Talk:Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2012&amp;diff=46400</id>
		<title>Talk:Kodutöö aines &quot;Võrgurakendused II: hajussüsteemide ehitamine&quot; 2012</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Talk:Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2012&amp;diff=46400"/>
		<updated>2012-03-06T18:01:44Z</updated>

		<summary type="html">&lt;p&gt;Anroots: Created page with &amp;#039;&amp;lt;blockquote&amp;gt;Veebiteenuse nõuded on mitmetimõistetavad: termin &amp;quot;kasutaja&amp;quot; vajab täpsustamist - kas mõeldud on kasutajakontot teenuses (a la username=JohnDoe) või teenust kasu…&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;blockquote&amp;gt;Veebiteenuse nõuded on mitmetimõistetavad: termin &amp;quot;kasutaja&amp;quot; vajab täpsustamist - kas mõeldud on kasutajakontot teenuses (a la username=JohnDoe) või teenust kasutavat klientrakendust (mis tuvastab end API võtmega)? Samuti võiks täpsustada statistika nõuet. - [[User:Anroots]]&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=46385</id>
		<title>Meeskond &quot;Harold&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=46385"/>
		<updated>2012-03-04T01:00:51Z</updated>

		<summary type="html">&lt;p&gt;Anroots: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
{| style=&amp;quot;width:100%;height: 40px; background-color:#dff0d8;border: 1px solid ##468847;color:#468847;padding:10px;font-size:16px;font-weight:bold-webkit-border-radius: 8px;-moz-border-radius: 8px;border-radius: 8px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
| Praeguses faasis tegeleb tiim veebiteenuse arendamisega.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Tegemist on IT Kolledži aine raames eksamieeldust taotleva projektimeeskonna töö dokumentatsiooniga.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 30em; padding-left: 2em; float: right; font-size: 95%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Meeskond &#039;&#039;&amp;quot;Harold&amp;quot;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Aine:&#039;&#039;&#039;&lt;br /&gt;
| [[:Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhend:&#039;&#039;&#039;&lt;br /&gt;
| [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2012 Juhend]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Tüüp:&#039;&#039;&#039;&lt;br /&gt;
| Projekt&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Anroots]]&amp;lt;br /&amp;gt;[[User:Mparast]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhendajad:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Mposka]]&amp;lt;br /&amp;gt;[[User:Kraspel]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Semester:&#039;&#039;&#039;&lt;br /&gt;
| 2011/2012 kevad&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Kood (Git)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Challengo:&#039;&#039;&#039;&lt;br /&gt;
| [http://trac.sqroot.eu/projects/challengo/ SQroot Tracker]&lt;br /&gt;
|-&lt;br /&gt;
|API Doc&lt;br /&gt;
|[http://trac.sqroot.eu/projects/challengo/wiki/API_documentation SQroot Wiki]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Projekt =&lt;br /&gt;
&lt;br /&gt;
Projekti kõik kolm osa keskenduvad veebiteenuse &amp;quot;Challengo&amp;quot; taasloomisele. Projekti esimene osa valmistab ette peamis(t)e päringu(te) XML vastuse struktuuri, projekti teine osa (veebiteenuse loomine) ehitab vastava API ning kolmanda osa raames (klientrakendus) realiseeritakse Windows Phone 7 rakendus.&lt;br /&gt;
&lt;br /&gt;
== Korraldus ==&lt;br /&gt;
&lt;br /&gt;
Projektiga seonduv dokumentatsioon (erandiks on käesolev wiki leht), kasutajale nähtavad tekstid ning lähtekood on kirjutatud inglise keeles. Võimalusel on kood kirjutatud hilisema I18n toe võimaldamiseks.&lt;br /&gt;
&lt;br /&gt;
Koodi haldab GitHub repositoorium, juurdepääsu saamiseks tuleb projektijuhile saata oma GitHub kasutajanimi (või &#039;&#039;pull request&#039;&#039;). Tegemist vajavaid töid näeb GitHub lehel &#039;&#039;Issues&#039;&#039; vahekaardilt ning asjakohane dokumentatsioon (API) on GitHub wiki alamjaotises.&lt;br /&gt;
&lt;br /&gt;
Lähtekood on põhjalikult kommenteeritud, muud, eraldiseisvat dokumentatsiooni koodi kohta pole.&lt;br /&gt;
&lt;br /&gt;
== XML Andmefailid ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 3. märts 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
XML andmefail kirjeldab veebiteenuse &amp;quot;[http://garage48.org/blogger/projects-on-garage48-tallinn-2011 Challengo]&amp;quot; andmeid. Andmed asuvad MYSQL andmebaasis, mille struktuur on kirjeldatud ERD mudeliga [[File:Harold_Challengo_MYSQL_ERD.png|200px|thumb|MYSQL ERD mudel]]. XML formaadis andmeid väljastab serveris asuv PHP API. Järgnevalt toodud XML näited ei pruugi projekti esimese osa nõudmiste tõttu olla vastavuses teise osana valmiva veebiteenuse tegeliku väljundiga.&lt;br /&gt;
&lt;br /&gt;
Faile saab vaadata ka võrgust: http://enos.itcollege.ee/~anroots/challengo/xml/. Soovitatav on seda teha just XSLT stiilifaili jaoks (http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml).&lt;br /&gt;
&lt;br /&gt;
=== XML [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml link]]===&lt;br /&gt;
&lt;br /&gt;
Järgnevalt on toodud lõik kasutaja praeguste väljakutsete päringust. Kasutajal on parajasti kaks aktiivset väljakutset, igal väljakutsel on veidi meta-infot, mingi hulk ülesandeid (tasks) ning igal ülesandel on üks või mitu autasu (rewards).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;Response.xsl&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!-- List of user&#039;s current challenges --&amp;gt;&lt;br /&gt;
&amp;lt;challenges&amp;gt;&lt;br /&gt;
  &amp;lt;!-- First challenge, started by the user --&amp;gt;&lt;br /&gt;
  &amp;lt;challenge id=&amp;quot;4&amp;quot; tasks=&amp;quot;6&amp;quot; progress=&amp;quot;17%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;The Improgrupp Jaa!&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Inspired by a true story, the Improgrupp Jaa! contains tasks that challenge ones spontaniety and social courage.&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;duration&amp;gt;1209600&amp;lt;/duration&amp;gt;&lt;br /&gt;
    &amp;lt;points_required&amp;gt;18&amp;lt;/points_required&amp;gt;&lt;br /&gt;
    &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;!-- Each challenge has a number of tasks that have to be completed.--&amp;gt;&lt;br /&gt;
    &amp;lt;!-- No challenge can be completed before earned points from tasks (rewards) exceed the points_required field --&amp;gt;&lt;br /&gt;
    &amp;lt;tasks max_points=&amp;quot;26&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;19&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Make a present to a homeless person&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;If you can read this, you&#039;re probably among the luckier ones. Do something for the ones who can&#039;t.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;!-- Each task yields rewards on completion. Rewards are &amp;quot;power&amp;quot; points of different categories.--&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;20&amp;quot; completed=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment a stranger&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Make a sincere compliment to someone you don&#039;t know. We could do with more praise where it&#039;s due.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;21&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Do volunteer work&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Offer yourself as a volunteer to an event or a cause.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;22&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Perform to a security camera&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Do a little dance to a security camera. It shouldn&#039;t be illegal...probably. Don&#039;t get in trouble!&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;23&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment someone for a job well done&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;When was the last time you thanked the janitor?&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;24&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Take a day off&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;This is mostly for work-a-holics: rest for a while.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
    &amp;lt;/tasks&amp;gt;&lt;br /&gt;
  &amp;lt;/challenge&amp;gt;&lt;br /&gt;
&amp;lt;/challenges&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT (stiilifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsl link]] ===&lt;br /&gt;
&lt;br /&gt;
Toodud stiilifail muudab ülaltoodud XML vastuse inimesele kergemini loetavaks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html class=&amp;quot;no-js&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;Ando Roots&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Challengo Response&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.css&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.responsive.css&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Challengo API response&amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
            The following is a list of challenges reported by the XML API.&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;!-- Go over each challenge --&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;challenges/challenge&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h2&amp;gt;&lt;br /&gt;
              &lt;br /&gt;
              &amp;lt;!-- Challenge badge image and title --&amp;gt;&lt;br /&gt;
              &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;&lt;br /&gt;
                  http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/img&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
              &amp;lt;!-- Challenge progress, if applicable --&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:if test=&amp;quot;@progress&amp;quot;&amp;gt;&lt;br /&gt;
                (&amp;lt;span&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@progress&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/span&amp;gt;)&lt;br /&gt;
              &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
            &amp;lt;/h2&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;p class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- Table for some challenge meta-info --&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered span4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Points required to complete:&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;points_required&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Time left (hours):&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;round(duration div 1800)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;!-- List all challenge tasks --&amp;gt;&lt;br /&gt;
            &amp;lt;h3 style=&amp;quot;margin-top:140px&amp;quot;&amp;gt;Tasks (&amp;lt;xsl:value-of select=&amp;quot;@tasks&amp;quot;/&amp;gt;)&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered table-striped table-condensed&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;thead&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;ID&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Title&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Badge&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Rewards&amp;lt;/th&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/thead&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;tasks/task&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;tr&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Color the row gray if task is completed --&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;@completed&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:attribute name=&amp;quot;class&amp;quot;&amp;gt;&lt;br /&gt;
                        help-block&lt;br /&gt;
                      &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                      &amp;lt;/img&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:for-each select=&amp;quot;rewards/reward&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;li&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=1&amp;quot;&amp;gt;&lt;br /&gt;
                              Compassion&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=2&amp;quot;&amp;gt;&lt;br /&gt;
                              Strength&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=3&amp;quot;&amp;gt;&lt;br /&gt;
                              Intelligence&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;span&amp;gt;&lt;br /&gt;
                              &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                            &amp;lt;/span&amp;gt;&lt;br /&gt;
                          &amp;lt;/li&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;!-- End of challenge task table --&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;!-- End of challenge --&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD (skeemifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsd link]] ===&lt;br /&gt;
&lt;br /&gt;
Skeemifail kirjeldab päringu vastuse XML struktuuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;challenges&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;challenge&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;duration&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;points_required&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;tasks&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;task&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rewards&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;reward&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:extension base=&amp;quot;xs:unsignedByte&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:attribute name=&amp;quot;power_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;completed&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;max_points&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;tasks&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;progress&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Veebiteenus ==&lt;br /&gt;
&#039;&#039;Tähtaeg 14. aprill 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Veebiteenuseks on PHP rakendus, mis hakkab WP7 rakendusele andmeid pakkuma ja neid vastu võtma.&lt;br /&gt;
&lt;br /&gt;
== Klientrakendus ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 5. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Klientrakendus on Windows Phone 7 klient Challengo teenusele, mis kasutab projekti esimeses osas koostatud XML andmestruktuuri.&lt;br /&gt;
&lt;br /&gt;
XML-i väljastab Challengo API, mis vajab veel kirjutamist. Challengo on realiseeritud PHP-s.&lt;br /&gt;
&lt;br /&gt;
=== Feature set ===&lt;br /&gt;
&lt;br /&gt;
* Autentimine&lt;br /&gt;
** Login&lt;br /&gt;
** Logout&lt;br /&gt;
* Nimekiri aktiivsetest väljakutsetest ja nende staatustest&lt;br /&gt;
** Nimekiri väljakutse alamülesannetest ja nende staatustest&lt;br /&gt;
* Väljakutse märkimine lõpetatuks&lt;br /&gt;
** Alamülesande märkimine lõpetatuks&lt;br /&gt;
* Uue väljakutse valimine nimekirjast&lt;br /&gt;
** Väljakutse detailide ja alamülesannete vaatamine&lt;br /&gt;
* Väljakutse &amp;quot;hülgamine&amp;quot; (&#039;&#039;abandon&#039;&#039;)&lt;br /&gt;
* Kasutaja statistika näitamine&lt;br /&gt;
** Praegune punktiseis&lt;br /&gt;
** Lõpetatud väljakutsed&lt;br /&gt;
*** Lõpetatud alamülesanded&lt;br /&gt;
** Teenitud märgid&lt;br /&gt;
&lt;br /&gt;
= Meeskonna Liikmed =&lt;br /&gt;
&lt;br /&gt;
* Ando Roots &#039;&#039;anroots@itcollege.ee&#039;&#039;&lt;br /&gt;
* Mikk Pärast &#039;&#039;mparast@itcollege.ee&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Liitumine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for t in tudengid:&lt;br /&gt;
  if !t.laisk &amp;amp;&amp;amp; t.oskab_progreda:&lt;br /&gt;
    kutsu_meeskonda(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ mail -s &amp;quot;Harold&amp;quot; anroots@itcollege.ee&amp;lt;/pre&amp;gt;&lt;br /&gt;
Eeldan varasemaid teadmisi ning usaldusväärsust. Soovin, et asi ei lõppeks jälle nii, et projektijuht on kaitsmiseelsel õhtul üleval ja lõpetab üksinda projekti.&lt;br /&gt;
Ole nii kena ja anna huvist märku enne &#039;&#039;&#039;26. veebruari&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Lisad =&lt;br /&gt;
&lt;br /&gt;
[http://jaa.ee Kes on Harold?]&lt;br /&gt;
&lt;br /&gt;
== Challengo ==&lt;br /&gt;
&lt;br /&gt;
Challengo.me on Garage48 Tallinn 2011 raames alustatud veebiteenus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A social network of themed challenges, comes with a Karma profile and level-system.&lt;br /&gt;
Revenues from ads on the mobile version.&lt;br /&gt;
Team members: Ando Roots, Kristo Vaher, Valeria Gasik, Jelena Savinen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube v=&amp;quot;pPfHJD5F7sc&amp;quot; /&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=pPfHJD5F7sc Jelena tutvustab Challengo teenust]&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=46384</id>
		<title>Meeskond &quot;Harold&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=46384"/>
		<updated>2012-03-04T00:46:20Z</updated>

		<summary type="html">&lt;p&gt;Anroots: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
{| style=&amp;quot;width:100%;height: 40px; background-color:#dff0d8;border: 1px solid ##468847;color:#468847;padding:10px;font-size:16px;font-weight:bold-webkit-border-radius: 8px;-moz-border-radius: 8px;border-radius: 8px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
| Praeguses faasis tegeleb tiim veebiteenuse arendamisega.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Tegemist on IT Kolledži aine raames eksamieeldust taotleva projektimeeskonna töö dokumentatsiooniga.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 30em; padding-left: 2em; float: right; font-size: 95%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Meeskond &#039;&#039;&amp;quot;Harold&amp;quot;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Aine:&#039;&#039;&#039;&lt;br /&gt;
| [[:Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhend:&#039;&#039;&#039;&lt;br /&gt;
| [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2012 Juhend]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Tüüp:&#039;&#039;&#039;&lt;br /&gt;
| Projekt&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Anroots]]&amp;lt;br /&amp;gt;[[User:Mparast]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhendajad:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Mposka]]&amp;lt;br /&amp;gt;[[User:Kraspel]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Semester:&#039;&#039;&#039;&lt;br /&gt;
| 2011/2012 kevad&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Kood (Git)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Challengo:&#039;&#039;&#039;&lt;br /&gt;
| [http://trac.sqroot.eu/projects/challengo/ SQroot Tracker]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Projekt =&lt;br /&gt;
&lt;br /&gt;
Projekti kõik kolm osa keskenduvad veebiteenuse &amp;quot;Challengo&amp;quot; taasloomisele. Projekti esimene osa valmistab ette peamis(t)e päringu(te) XML vastuse struktuuri, projekti teine osa (veebiteenuse loomine) ehitab vastava API ning kolmanda osa raames (klientrakendus) realiseeritakse Windows Phone 7 rakendus.&lt;br /&gt;
&lt;br /&gt;
== Korraldus ==&lt;br /&gt;
&lt;br /&gt;
Projektiga seonduv dokumentatsioon (erandiks on käesolev wiki leht), kasutajale nähtavad tekstid ning lähtekood on kirjutatud inglise keeles. Võimalusel on kood kirjutatud hilisema I18n toe võimaldamiseks.&lt;br /&gt;
&lt;br /&gt;
Koodi haldab GitHub repositoorium, juurdepääsu saamiseks tuleb projektijuhile saata oma GitHub kasutajanimi (või &#039;&#039;pull request&#039;&#039;). Tegemist vajavaid töid näeb GitHub lehel &#039;&#039;Issues&#039;&#039; vahekaardilt ning asjakohane dokumentatsioon (API) on GitHub wiki alamjaotises.&lt;br /&gt;
&lt;br /&gt;
Lähtekood on põhjalikult kommenteeritud, muud, eraldiseisvat dokumentatsiooni koodi kohta pole.&lt;br /&gt;
&lt;br /&gt;
== XML Andmefailid ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 3. märts 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
XML andmefail kirjeldab veebiteenuse &amp;quot;[http://garage48.org/blogger/projects-on-garage48-tallinn-2011 Challengo]&amp;quot; andmeid. Andmed asuvad MYSQL andmebaasis, mille struktuur on kirjeldatud ERD mudeliga [[File:Harold_Challengo_MYSQL_ERD.png|200px|thumb|MYSQL ERD mudel]]. XML formaadis andmeid väljastab serveris asuv PHP API. Järgnevalt toodud XML näited ei pruugi projekti esimese osa nõudmiste tõttu olla vastavuses teise osana valmiva veebiteenuse tegeliku väljundiga.&lt;br /&gt;
&lt;br /&gt;
Faile saab vaadata ka võrgust: http://enos.itcollege.ee/~anroots/challengo/xml/. Soovitatav on seda teha just XSLT stiilifaili jaoks (http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml).&lt;br /&gt;
&lt;br /&gt;
=== XML [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml link]]===&lt;br /&gt;
&lt;br /&gt;
Järgnevalt on toodud lõik kasutaja praeguste väljakutsete päringust. Kasutajal on parajasti kaks aktiivset väljakutset, igal väljakutsel on veidi meta-infot, mingi hulk ülesandeid (tasks) ning igal ülesandel on üks või mitu autasu (rewards).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;Response.xsl&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!-- List of user&#039;s current challenges --&amp;gt;&lt;br /&gt;
&amp;lt;challenges&amp;gt;&lt;br /&gt;
  &amp;lt;!-- First challenge, started by the user --&amp;gt;&lt;br /&gt;
  &amp;lt;challenge id=&amp;quot;4&amp;quot; tasks=&amp;quot;6&amp;quot; progress=&amp;quot;17%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;The Improgrupp Jaa!&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Inspired by a true story, the Improgrupp Jaa! contains tasks that challenge ones spontaniety and social courage.&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;duration&amp;gt;1209600&amp;lt;/duration&amp;gt;&lt;br /&gt;
    &amp;lt;points_required&amp;gt;18&amp;lt;/points_required&amp;gt;&lt;br /&gt;
    &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;!-- Each challenge has a number of tasks that have to be completed.--&amp;gt;&lt;br /&gt;
    &amp;lt;!-- No challenge can be completed before earned points from tasks (rewards) exceed the points_required field --&amp;gt;&lt;br /&gt;
    &amp;lt;tasks max_points=&amp;quot;26&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;19&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Make a present to a homeless person&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;If you can read this, you&#039;re probably among the luckier ones. Do something for the ones who can&#039;t.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;!-- Each task yields rewards on completion. Rewards are &amp;quot;power&amp;quot; points of different categories.--&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;20&amp;quot; completed=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment a stranger&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Make a sincere compliment to someone you don&#039;t know. We could do with more praise where it&#039;s due.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;21&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Do volunteer work&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Offer yourself as a volunteer to an event or a cause.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;22&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Perform to a security camera&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Do a little dance to a security camera. It shouldn&#039;t be illegal...probably. Don&#039;t get in trouble!&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;23&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment someone for a job well done&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;When was the last time you thanked the janitor?&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;24&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Take a day off&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;This is mostly for work-a-holics: rest for a while.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
    &amp;lt;/tasks&amp;gt;&lt;br /&gt;
  &amp;lt;/challenge&amp;gt;&lt;br /&gt;
&amp;lt;/challenges&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT (stiilifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsl link]] ===&lt;br /&gt;
&lt;br /&gt;
Toodud stiilifail muudab ülaltoodud XML vastuse inimesele kergemini loetavaks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html class=&amp;quot;no-js&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;Ando Roots&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Challengo Response&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.css&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.responsive.css&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Challengo API response&amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
            The following is a list of challenges reported by the XML API.&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;!-- Go over each challenge --&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;challenges/challenge&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h2&amp;gt;&lt;br /&gt;
              &lt;br /&gt;
              &amp;lt;!-- Challenge badge image and title --&amp;gt;&lt;br /&gt;
              &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;&lt;br /&gt;
                  http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/img&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
              &amp;lt;!-- Challenge progress, if applicable --&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:if test=&amp;quot;@progress&amp;quot;&amp;gt;&lt;br /&gt;
                (&amp;lt;span&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@progress&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/span&amp;gt;)&lt;br /&gt;
              &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
            &amp;lt;/h2&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;p class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- Table for some challenge meta-info --&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered span4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Points required to complete:&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;points_required&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Time left (hours):&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;round(duration div 1800)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;!-- List all challenge tasks --&amp;gt;&lt;br /&gt;
            &amp;lt;h3 style=&amp;quot;margin-top:140px&amp;quot;&amp;gt;Tasks (&amp;lt;xsl:value-of select=&amp;quot;@tasks&amp;quot;/&amp;gt;)&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered table-striped table-condensed&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;thead&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;ID&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Title&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Badge&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Rewards&amp;lt;/th&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/thead&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;tasks/task&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;tr&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Color the row gray if task is completed --&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;@completed&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:attribute name=&amp;quot;class&amp;quot;&amp;gt;&lt;br /&gt;
                        help-block&lt;br /&gt;
                      &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                      &amp;lt;/img&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:for-each select=&amp;quot;rewards/reward&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;li&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=1&amp;quot;&amp;gt;&lt;br /&gt;
                              Compassion&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=2&amp;quot;&amp;gt;&lt;br /&gt;
                              Strength&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=3&amp;quot;&amp;gt;&lt;br /&gt;
                              Intelligence&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;span&amp;gt;&lt;br /&gt;
                              &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                            &amp;lt;/span&amp;gt;&lt;br /&gt;
                          &amp;lt;/li&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;!-- End of challenge task table --&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;!-- End of challenge --&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD (skeemifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsd link]] ===&lt;br /&gt;
&lt;br /&gt;
Skeemifail kirjeldab päringu vastuse XML struktuuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;challenges&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;challenge&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;duration&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;points_required&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;tasks&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;task&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rewards&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;reward&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:extension base=&amp;quot;xs:unsignedByte&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:attribute name=&amp;quot;power_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;completed&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;max_points&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;tasks&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;progress&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Veebiteenus ==&lt;br /&gt;
&#039;&#039;Tähtaeg 14. aprill 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Veebiteenuseks on PHP rakendus, mis hakkab WP7 rakendusele andmeid pakkuma ja neid vastu võtma.&lt;br /&gt;
&lt;br /&gt;
== Klientrakendus ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 5. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Klientrakendus on Windows Phone 7 klient Challengo teenusele, mis kasutab projekti esimeses osas koostatud XML andmestruktuuri.&lt;br /&gt;
&lt;br /&gt;
XML-i väljastab Challengo API, mis vajab veel kirjutamist. Challengo on realiseeritud PHP-s.&lt;br /&gt;
&lt;br /&gt;
=== Feature set ===&lt;br /&gt;
&lt;br /&gt;
* Autentimine&lt;br /&gt;
** Login&lt;br /&gt;
** Logout&lt;br /&gt;
* Nimekiri aktiivsetest väljakutsetest ja nende staatustest&lt;br /&gt;
** Nimekiri väljakutse alamülesannetest ja nende staatustest&lt;br /&gt;
* Väljakutse märkimine lõpetatuks&lt;br /&gt;
** Alamülesande märkimine lõpetatuks&lt;br /&gt;
* Uue väljakutse valimine nimekirjast&lt;br /&gt;
** Väljakutse detailide ja alamülesannete vaatamine&lt;br /&gt;
* Väljakutse &amp;quot;hülgamine&amp;quot; (&#039;&#039;abandon&#039;&#039;)&lt;br /&gt;
* Kasutaja statistika näitamine&lt;br /&gt;
** Praegune punktiseis&lt;br /&gt;
** Lõpetatud väljakutsed&lt;br /&gt;
*** Lõpetatud alamülesanded&lt;br /&gt;
** Teenitud märgid&lt;br /&gt;
&lt;br /&gt;
= Meeskonna Liikmed =&lt;br /&gt;
&lt;br /&gt;
* Ando Roots &#039;&#039;anroots@itcollege.ee&#039;&#039;&lt;br /&gt;
* Mikk Pärast &#039;&#039;mparast@itcollege.ee&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Liitumine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for t in tudengid:&lt;br /&gt;
  if !t.laisk &amp;amp;&amp;amp; t.oskab_progreda:&lt;br /&gt;
    kutsu_meeskonda(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ mail -s &amp;quot;Harold&amp;quot; anroots@itcollege.ee&amp;lt;/pre&amp;gt;&lt;br /&gt;
Eeldan varasemaid teadmisi ning usaldusväärsust. Soovin, et asi ei lõppeks jälle nii, et projektijuht on kaitsmiseelsel õhtul üleval ja lõpetab üksinda projekti.&lt;br /&gt;
Ole nii kena ja anna huvist märku enne &#039;&#039;&#039;26. veebruari&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Lisad =&lt;br /&gt;
&lt;br /&gt;
[http://jaa.ee Kes on Harold?]&lt;br /&gt;
&lt;br /&gt;
== Challengo ==&lt;br /&gt;
&lt;br /&gt;
Challengo.me on Garage48 Tallinn 2011 raames alustatud veebiteenus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A social network of themed challenges, comes with a Karma profile and level-system.&lt;br /&gt;
Revenues from ads on the mobile version.&lt;br /&gt;
Team members: Ando Roots, Kristo Vaher, Valeria Gasik, Jelena Savinen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube v=&amp;quot;pPfHJD5F7sc&amp;quot; /&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=pPfHJD5F7sc Jelena tutvustab Challengo teenust]&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=46383</id>
		<title>Meeskond &quot;Harold&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=46383"/>
		<updated>2012-03-04T00:42:46Z</updated>

		<summary type="html">&lt;p&gt;Anroots: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
{| style=&amp;quot;width:100%;height: 40px; background-color:#dff0d8;border: 1px solid ##468847;color:#468847;padding:10px;font-size:16px;font-weight:bold-webkit-border-radius: 8px;-moz-border-radius: 8px;border-radius: 8px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
| [http://jaa.ee Harold?]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 30em; padding-left: 2em; float: right; font-size: 95%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Meeskond &#039;&#039;&amp;quot;Harold&amp;quot;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Aine:&#039;&#039;&#039;&lt;br /&gt;
| [[:Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhend:&#039;&#039;&#039;&lt;br /&gt;
| [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2012 Juhend]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Tüüp:&#039;&#039;&#039;&lt;br /&gt;
| Projekt&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Anroots]]&amp;lt;br /&amp;gt;[[User:Mparast]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhendajad:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Mposka]]&amp;lt;br /&amp;gt;[[User:Kraspel]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Semester:&#039;&#039;&#039;&lt;br /&gt;
| 2011/2012 kevad&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Kood (Git)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Challengo:&#039;&#039;&#039;&lt;br /&gt;
| [http://trac.sqroot.eu/projects/challengo/ SQroot Tracker]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Projekt =&lt;br /&gt;
&lt;br /&gt;
Projekti kõik kolm osa keskenduvad veebiteenuse &amp;quot;Challengo&amp;quot; taasloomisele. Projekti esimene osa valmistab ette peamis(t)e päringu(te) XML vastuse struktuuri, projekti teine osa (veebiteenuse loomine) ehitab vastava API ning kolmanda osa raames (klientrakendus) realiseeritakse Windows Phone 7 rakendus.&lt;br /&gt;
&lt;br /&gt;
== Korraldus ==&lt;br /&gt;
&lt;br /&gt;
Projektiga seonduv dokumentatsioon (erandiks on käesolev wiki leht), kasutajale nähtavad tekstid ning lähtekood on kirjutatud inglise keeles. Võimalusel on kood kirjutatud hilisema I18n toe võimaldamiseks.&lt;br /&gt;
&lt;br /&gt;
Koodi haldab GitHub repositoorium, juurdepääsu saamiseks tuleb projektijuhile saata oma GitHub kasutajanimi (või &#039;&#039;pull request&#039;&#039;). Tegemist vajavaid töid näeb GitHub lehel &#039;&#039;Issues&#039;&#039; vahekaardilt ning asjakohane dokumentatsioon (API) on GitHub wiki alamjaotises.&lt;br /&gt;
&lt;br /&gt;
Lähtekood on põhjalikult kommenteeritud, muud, eraldiseisvat dokumentatsiooni koodi kohta pole.&lt;br /&gt;
&lt;br /&gt;
== XML Andmefailid ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 3. märts 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
XML andmefail kirjeldab veebiteenuse &amp;quot;[http://garage48.org/blogger/projects-on-garage48-tallinn-2011 Challengo]&amp;quot; andmeid. Andmed asuvad MYSQL andmebaasis, mille struktuur on kirjeldatud ERD mudeliga [[File:Harold_Challengo_MYSQL_ERD.png|200px|thumb|MYSQL ERD mudel]]. XML formaadis andmeid väljastab serveris asuv PHP API. Järgnevalt toodud XML näited ei pruugi projekti esimese osa nõudmiste tõttu olla vastavuses teise osana valmiva veebiteenuse tegeliku väljundiga.&lt;br /&gt;
&lt;br /&gt;
Faile saab vaadata ka võrgust: http://enos.itcollege.ee/~anroots/challengo/xml/. Soovitatav on seda teha just XSLT stiilifaili jaoks (http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml).&lt;br /&gt;
&lt;br /&gt;
=== XML [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml link]]===&lt;br /&gt;
&lt;br /&gt;
Järgnevalt on toodud lõik kasutaja praeguste väljakutsete päringust. Kasutajal on parajasti kaks aktiivset väljakutset, igal väljakutsel on veidi meta-infot, mingi hulk ülesandeid (tasks) ning igal ülesandel on üks või mitu autasu (rewards).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;Response.xsl&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!-- List of user&#039;s current challenges --&amp;gt;&lt;br /&gt;
&amp;lt;challenges&amp;gt;&lt;br /&gt;
  &amp;lt;!-- First challenge, started by the user --&amp;gt;&lt;br /&gt;
  &amp;lt;challenge id=&amp;quot;4&amp;quot; tasks=&amp;quot;6&amp;quot; progress=&amp;quot;17%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;The Improgrupp Jaa!&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Inspired by a true story, the Improgrupp Jaa! contains tasks that challenge ones spontaniety and social courage.&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;duration&amp;gt;1209600&amp;lt;/duration&amp;gt;&lt;br /&gt;
    &amp;lt;points_required&amp;gt;18&amp;lt;/points_required&amp;gt;&lt;br /&gt;
    &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;!-- Each challenge has a number of tasks that have to be completed.--&amp;gt;&lt;br /&gt;
    &amp;lt;!-- No challenge can be completed before earned points from tasks (rewards) exceed the points_required field --&amp;gt;&lt;br /&gt;
    &amp;lt;tasks max_points=&amp;quot;26&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;19&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Make a present to a homeless person&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;If you can read this, you&#039;re probably among the luckier ones. Do something for the ones who can&#039;t.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;!-- Each task yields rewards on completion. Rewards are &amp;quot;power&amp;quot; points of different categories.--&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;20&amp;quot; completed=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment a stranger&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Make a sincere compliment to someone you don&#039;t know. We could do with more praise where it&#039;s due.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;21&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Do volunteer work&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Offer yourself as a volunteer to an event or a cause.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;22&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Perform to a security camera&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Do a little dance to a security camera. It shouldn&#039;t be illegal...probably. Don&#039;t get in trouble!&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;23&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment someone for a job well done&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;When was the last time you thanked the janitor?&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;24&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Take a day off&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;This is mostly for work-a-holics: rest for a while.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
    &amp;lt;/tasks&amp;gt;&lt;br /&gt;
  &amp;lt;/challenge&amp;gt;&lt;br /&gt;
&amp;lt;/challenges&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT (stiilifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsl link]] ===&lt;br /&gt;
&lt;br /&gt;
Toodud stiilifail muudab ülaltoodud XML vastuse inimesele kergemini loetavaks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html class=&amp;quot;no-js&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;Ando Roots&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Challengo Response&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.css&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.responsive.css&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Challengo API response&amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
            The following is a list of challenges reported by the XML API.&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;!-- Go over each challenge --&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;challenges/challenge&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h2&amp;gt;&lt;br /&gt;
              &lt;br /&gt;
              &amp;lt;!-- Challenge badge image and title --&amp;gt;&lt;br /&gt;
              &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;&lt;br /&gt;
                  http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/img&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
              &amp;lt;!-- Challenge progress, if applicable --&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:if test=&amp;quot;@progress&amp;quot;&amp;gt;&lt;br /&gt;
                (&amp;lt;span&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@progress&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/span&amp;gt;)&lt;br /&gt;
              &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
            &amp;lt;/h2&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;p class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- Table for some challenge meta-info --&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered span4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Points required to complete:&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;points_required&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Time left (hours):&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;round(duration div 1800)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;!-- List all challenge tasks --&amp;gt;&lt;br /&gt;
            &amp;lt;h3 style=&amp;quot;margin-top:140px&amp;quot;&amp;gt;Tasks (&amp;lt;xsl:value-of select=&amp;quot;@tasks&amp;quot;/&amp;gt;)&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered table-striped table-condensed&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;thead&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;ID&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Title&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Badge&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Rewards&amp;lt;/th&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/thead&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;tasks/task&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;tr&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Color the row gray if task is completed --&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;@completed&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:attribute name=&amp;quot;class&amp;quot;&amp;gt;&lt;br /&gt;
                        help-block&lt;br /&gt;
                      &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                      &amp;lt;/img&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:for-each select=&amp;quot;rewards/reward&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;li&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=1&amp;quot;&amp;gt;&lt;br /&gt;
                              Compassion&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=2&amp;quot;&amp;gt;&lt;br /&gt;
                              Strength&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=3&amp;quot;&amp;gt;&lt;br /&gt;
                              Intelligence&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;span&amp;gt;&lt;br /&gt;
                              &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                            &amp;lt;/span&amp;gt;&lt;br /&gt;
                          &amp;lt;/li&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;!-- End of challenge task table --&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;!-- End of challenge --&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD (skeemifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsd link]] ===&lt;br /&gt;
&lt;br /&gt;
Skeemifail kirjeldab päringu vastuse XML struktuuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;challenges&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;challenge&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;duration&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;points_required&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;tasks&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;task&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rewards&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;reward&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:extension base=&amp;quot;xs:unsignedByte&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:attribute name=&amp;quot;power_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;completed&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;max_points&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;tasks&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;progress&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Veebiteenus ==&lt;br /&gt;
&#039;&#039;Tähtaeg 14. aprill 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Veebiteenuseks on PHP rakendus, mis hakkab WP7 rakendusele andmeid pakkuma ja neid vastu võtma.&lt;br /&gt;
&lt;br /&gt;
== Klientrakendus ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 5. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Klientrakendus on Windows Phone 7 klient Challengo teenusele, mis kasutab projekti esimeses osas koostatud XML andmestruktuuri.&lt;br /&gt;
&lt;br /&gt;
XML-i väljastab Challengo API, mis vajab veel kirjutamist. Challengo on realiseeritud PHP-s.&lt;br /&gt;
&lt;br /&gt;
=== Feature set ===&lt;br /&gt;
&lt;br /&gt;
* Autentimine&lt;br /&gt;
** Login&lt;br /&gt;
** Logout&lt;br /&gt;
* Nimekiri aktiivsetest väljakutsetest ja nende staatustest&lt;br /&gt;
** Nimekiri väljakutse alamülesannetest ja nende staatustest&lt;br /&gt;
* Väljakutse märkimine lõpetatuks&lt;br /&gt;
** Alamülesande märkimine lõpetatuks&lt;br /&gt;
* Uue väljakutse valimine nimekirjast&lt;br /&gt;
** Väljakutse detailide ja alamülesannete vaatamine&lt;br /&gt;
* Väljakutse &amp;quot;hülgamine&amp;quot; (&#039;&#039;abandon&#039;&#039;)&lt;br /&gt;
* Kasutaja statistika näitamine&lt;br /&gt;
** Praegune punktiseis&lt;br /&gt;
** Lõpetatud väljakutsed&lt;br /&gt;
*** Lõpetatud alamülesanded&lt;br /&gt;
** Teenitud märgid&lt;br /&gt;
&lt;br /&gt;
= Meeskonna Liikmed =&lt;br /&gt;
&lt;br /&gt;
* Ando Roots &#039;&#039;anroots@itcollege.ee&#039;&#039;&lt;br /&gt;
* Mikk Pärast &#039;&#039;mparast@itcollege.ee&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Liitumine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for t in tudengid:&lt;br /&gt;
  if !t.laisk &amp;amp;&amp;amp; t.oskab_progreda:&lt;br /&gt;
    kutsu_meeskonda(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ mail -s &amp;quot;Harold&amp;quot; anroots@itcollege.ee&amp;lt;/pre&amp;gt;&lt;br /&gt;
Eeldan varasemaid teadmisi ning usaldusväärsust. Soovin, et asi ei lõppeks jälle nii, et projektijuht on kaitsmiseelsel õhtul üleval ja lõpetab üksinda projekti.&lt;br /&gt;
Ole nii kena ja anna huvist märku enne &#039;&#039;&#039;26. veebruari&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Lisad =&lt;br /&gt;
&lt;br /&gt;
== Challengo ==&lt;br /&gt;
&lt;br /&gt;
Challengo.me on Garage48 Tallinn 2011 raames alustatud veebiteenus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A social network of themed challenges, comes with a Karma profile and level-system.&lt;br /&gt;
Revenues from ads on the mobile version.&lt;br /&gt;
Team members: Ando Roots, Kristo Vaher, Valeria Gasik, Jelena Savinen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube v=&amp;quot;pPfHJD5F7sc&amp;quot; /&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=pPfHJD5F7sc Jelena tutvustab Challengo teenust]&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=TTiim&amp;diff=46374</id>
		<title>TTiim</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=TTiim&amp;diff=46374"/>
		<updated>2012-03-03T21:53:15Z</updated>

		<summary type="html">&lt;p&gt;Anroots: /* XML Schema */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Tiimi liikmed==&lt;br /&gt;
* Eero Jämsä&lt;br /&gt;
* ...&lt;br /&gt;
* ...&lt;br /&gt;
Hakkasin natuke hilja asjaga tegelema. Et mitte niisama kuhugi tiimi trügida oma panust andmata, siis tegin hoopis oma tiimi.&lt;br /&gt;
Kes tahaks liituda, siis andke teada ejamsa@itcollege.ee&lt;br /&gt;
==XML==&lt;br /&gt;
XML failis hoitakse raamatukogus laenutatavate raamatute infot. &lt;br /&gt;
Siinkohal ei ole tähtis, kes laenutas ja millal tagasta(s/b), vaid milliseid raamatuid on võimalik laenutada.&lt;br /&gt;
===XML===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;library&amp;gt;	&lt;br /&gt;
	&amp;lt;categories&amp;gt;&lt;br /&gt;
		&amp;lt;category id=&amp;quot;1&amp;quot;&amp;gt;Arts and Architecture&amp;lt;/category&amp;gt;&lt;br /&gt;
		&amp;lt;category id=&amp;quot;2&amp;quot;&amp;gt;Law&amp;lt;/category&amp;gt;&lt;br /&gt;
		&amp;lt;category id=&amp;quot;3&amp;quot;&amp;gt;Language&amp;lt;/category&amp;gt;&lt;br /&gt;
		&amp;lt;category id=&amp;quot;4&amp;quot;&amp;gt;Fiction &amp;amp;amp; related items&amp;lt;/category&amp;gt;&lt;br /&gt;
		&amp;lt;category id=&amp;quot;5&amp;quot;&amp;gt;Computing &amp;amp;amp; information technology&amp;lt;/category&amp;gt;		&lt;br /&gt;
	&amp;lt;/categories&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;book_formats&amp;gt;&lt;br /&gt;
		&amp;lt;book_format id=&amp;quot;1&amp;quot;&amp;gt;Paperback&amp;lt;/book_format&amp;gt;&lt;br /&gt;
		&amp;lt;book_format id=&amp;quot;2&amp;quot;&amp;gt;E-book&amp;lt;/book_format&amp;gt;&lt;br /&gt;
	&amp;lt;/book_formats&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;books&amp;gt;&lt;br /&gt;
		&amp;lt;book id=&amp;quot;1&amp;quot; is_available=&amp;quot;false&amp;quot; book_format_id=&amp;quot;1&amp;quot; category_id=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;title&amp;gt;Chronicles of Narnia New edition&amp;lt;/title&amp;gt;&lt;br /&gt;
			&amp;lt;authors&amp;gt;&lt;br /&gt;
				&amp;lt;author&amp;gt;C. S. Lewis&amp;lt;/author&amp;gt;&lt;br /&gt;
			&amp;lt;/authors&amp;gt;&lt;br /&gt;
			&amp;lt;description&amp;gt;&amp;quot;The Narnia Chronicles&amp;quot;, first published in 1950, have been and remain some of the most enduringly popular books ever published. The best known, &amp;quot;The Lion, the Witch and the Wardrobe&amp;quot;, has been translated into 29 languages!&amp;lt;/description&amp;gt;&lt;br /&gt;
			&amp;lt;isbn10&amp;gt;0006753949&amp;lt;/isbn10&amp;gt;&lt;br /&gt;
		&amp;lt;/book&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		&amp;lt;book id=&amp;quot;1&amp;quot; is_available=&amp;quot;true&amp;quot; book_format_id=&amp;quot;1&amp;quot; category_id=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;title&amp;gt;Programming Perl 4th Revised edition&amp;lt;/title&amp;gt;&lt;br /&gt;
			&amp;lt;authors&amp;gt;&lt;br /&gt;
				&amp;lt;author&amp;gt;Tom Christiansen&amp;lt;/author&amp;gt;&lt;br /&gt;
				&amp;lt;author&amp;gt;brian d. foy&amp;lt;/author&amp;gt;&lt;br /&gt;
				&amp;lt;author&amp;gt;Larry Wall&amp;lt;/author&amp;gt;&lt;br /&gt;
				&amp;lt;author&amp;gt;Jon Orwant&amp;lt;/author&amp;gt;&lt;br /&gt;
			&amp;lt;/authors&amp;gt;&lt;br /&gt;
			&amp;lt;description&amp;gt;When it comes to learning Perl, programmers consider this book...&amp;lt;/description&amp;gt;&lt;br /&gt;
			&amp;lt;isbn10&amp;gt;0596004923&amp;lt;/isbn10&amp;gt;&lt;br /&gt;
		&amp;lt;/book&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		&amp;lt;book id=&amp;quot;1&amp;quot; is_available=&amp;quot;false&amp;quot; book_format_id=&amp;quot;1&amp;quot; category_id=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;title&amp;gt;Shadow Algorithms Data Miner&amp;lt;/title&amp;gt;&lt;br /&gt;
			&amp;lt;authors&amp;gt;&lt;br /&gt;
				&amp;lt;author&amp;gt;Andrew Woo&amp;lt;/author&amp;gt;&lt;br /&gt;
				&amp;lt;author&amp;gt;Pierre Poulin&amp;lt;/author&amp;gt;&lt;br /&gt;
			&amp;lt;/authors&amp;gt;&lt;br /&gt;
			&amp;lt;description&amp;gt;Digital shadow generation continues to be an important aspect of visualization and visual effects in film, games, simulations, and scientific applications.&amp;lt;/description&amp;gt;&lt;br /&gt;
			&amp;lt;isbn10&amp;gt;1439880239&amp;lt;/isbn10&amp;gt;&lt;br /&gt;
		&amp;lt;/book&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		&amp;lt;book id=&amp;quot;1&amp;quot; is_available=&amp;quot;true&amp;quot; book_format_id=&amp;quot;1&amp;quot; category_id=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;title&amp;gt;Teach Yourself Complete Estonian&amp;lt;/title&amp;gt;&lt;br /&gt;
			&amp;lt;authors&amp;gt;&lt;br /&gt;
				&amp;lt;author&amp;gt;Mare Kitsnik&amp;lt;/author&amp;gt;&lt;br /&gt;
				&amp;lt;author&amp;gt;Leelo Kingisepp&amp;lt;/author&amp;gt;&lt;br /&gt;
			&amp;lt;/authors&amp;gt;&lt;br /&gt;
			&amp;lt;description&amp;gt;The complete course for a fun and effective way to learn Estonian.&amp;lt;/description&amp;gt;&lt;br /&gt;
			&amp;lt;isbn10&amp;gt;1444106902&amp;lt;/isbn10&amp;gt;&lt;br /&gt;
		&amp;lt;/book&amp;gt;&lt;br /&gt;
	&amp;lt;/books&amp;gt;&lt;br /&gt;
&amp;lt;/library&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===XML Schema===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;library&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element name=&amp;quot;categories&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;category&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:extension base=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element name=&amp;quot;book_formats&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;book_format&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:extension base=&amp;quot;xs:string&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element name=&amp;quot;books&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;book&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;authors&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;author&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;isbn10&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;is_available&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;book_format_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;category_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===XSLT===&lt;br /&gt;
Allolev kood kuvab kõik raamatud, mis on seotud infotehnoloogiaga ja seetõttu ka it osakond tahaks kindlasti laenutada&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
    xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:output method=&amp;quot;html&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;@* | node()&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;html&amp;gt;&lt;br /&gt;
        &amp;lt;body&amp;gt;&lt;br /&gt;
          &amp;lt;h2&amp;gt;Raamatud IT osakonnale&amp;lt;/h2&amp;gt;&lt;br /&gt;
          &amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;tr bgcolor=&amp;quot;#9acd32&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;th&amp;gt;Pealkiri&amp;lt;/th&amp;gt;&lt;br /&gt;
              &amp;lt;th&amp;gt;Kirjeldus&amp;lt;/th&amp;gt;&lt;br /&gt;
              &amp;lt;th&amp;gt;Autorid&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:for-each select=&amp;quot;books/book&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:if test=&amp;quot;@category_id = 5&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;ul&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:for-each select=&amp;quot;authors/author&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;li&amp;gt;&lt;br /&gt;
                          &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                        &amp;lt;/li&amp;gt;&lt;br /&gt;
                      &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                    &amp;lt;/ul&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;/table&amp;gt;&lt;br /&gt;
        &amp;lt;/body&amp;gt;&lt;br /&gt;
      &amp;lt;/html&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22HM%22&amp;diff=46329</id>
		<title>Meeskond &quot;HM&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22HM%22&amp;diff=46329"/>
		<updated>2012-03-03T18:57:38Z</updated>

		<summary type="html">&lt;p&gt;Anroots: /* XML andmefail */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sources for xml: &lt;br /&gt;
 http://www.ourairports.com/data/ (public domain) &amp;lt;br&amp;gt;  &lt;br /&gt;
 http://www.geonames.org/ (Creative Commons Attribution 3.0) &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Meeskond ==&lt;br /&gt;
* Henry Mäeorg - XML, XSD, XSL&lt;br /&gt;
* Martin Laak - XML, XSD, XSL, Wiki&lt;br /&gt;
* Andre-Marcel Peri - XSL&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== XSD skeemifail ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;Maa&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;7&amp;quot; name=&amp;quot;kontinent&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;nimi&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;riik&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element name=&amp;quot;nimi&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;linn&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;nimi&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element minOccurs=&amp;quot;0&amp;quot; maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;lennujaam&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element name=&amp;quot;nimi&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;long&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:attribute name=&amp;quot;lat&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;raha&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;rahanimi&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;rahvaarv&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSL stiilifail 1===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot;&lt;br /&gt;
xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=UTF-8&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;Maa/kontinent&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot;/&amp;gt;&amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;riik&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h2&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot;/&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:for-each select=&amp;quot;linn&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h3&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot;/&amp;gt;&amp;lt;/h3&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:if test=&amp;quot;count(lennujaam) !=0&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;h4&amp;gt;Lennujaamad:&amp;lt;/h4&amp;gt;&lt;br /&gt;
              &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;lennujaam&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;li&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot;/&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/ul&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:if&amp;gt;             &lt;br /&gt;
            &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;      &lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSL stiilifail 2===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot;&lt;br /&gt;
xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=UTF-8&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;tr bgcolor=&amp;quot;#20B2AA&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Kontinent&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Rahvaarv&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Riigid&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Linnad&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Lennujaamad&amp;lt;/th&amp;gt;&lt;br /&gt;
          &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;Maa/kontinent&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;tr	bgcolor=&amp;quot;#E0FFFF&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
           &lt;br /&gt;
              &amp;lt;td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:value-of select=&amp;quot;@rahvaarv&amp;quot;/&amp;gt;&lt;br /&gt;
              &amp;lt;/td&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;riik&amp;quot;&amp;gt; &lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;linn&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;lennujaam&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;nimi&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/tr&amp;gt;&lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XML andmefail ===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;!-- Sources:&lt;br /&gt;
 http://www.ourairports.com/data/ (public domain) &lt;br /&gt;
 http://www.geonames.org/ (Creative Commons Attribution 3.0) &lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;Maa&amp;gt;&lt;br /&gt;
  &amp;lt;kontinent rahvaarv=&amp;quot;738199000&amp;quot; id=&amp;quot;EU&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;nimi&amp;gt;Euroopa&amp;lt;/nimi&amp;gt;&lt;br /&gt;
    &amp;lt;riik id=&amp;quot;DE&amp;quot; raha=&amp;quot;EUR&amp;quot; rahanimi=&amp;quot;Euro&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Germany&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;linn id=&amp;quot;Berlin&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Berlin&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;SXF&amp;quot; lat=&amp;quot;52.3800010681152&amp;quot; long=&amp;quot;13.522500038147&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Berlin-Schönefeld International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;TXL&amp;quot; lat=&amp;quot;52.559700012207&amp;quot; long=&amp;quot;13.2876996994019&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Berlin-Tegel International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
    &amp;lt;/riik&amp;gt;&lt;br /&gt;
    &amp;lt;riik id=&amp;quot;GB&amp;quot; raha=&amp;quot;GBP&amp;quot; rahanimi=&amp;quot;Pound&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;United Kingdom&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;linn id=&amp;quot;Belfast&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Belfast&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;BFS&amp;quot; lat=&amp;quot;54.6575012207031&amp;quot; long=&amp;quot;-6.21582984924316&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Belfast International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;BHD&amp;quot; lat=&amp;quot;54.6180992126465&amp;quot; long=&amp;quot;-5.87249994277954&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;George Best Belfast City Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
      &amp;lt;linn id=&amp;quot;London&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;London&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;LTN&amp;quot; lat=&amp;quot;51.874698638916&amp;quot; long=&amp;quot;-0.368333011865616&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;London Luton Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;LGW&amp;quot; lat=&amp;quot;51.1481018066406&amp;quot; long=&amp;quot;-0.190277993679047&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;London Gatwick Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;LCY&amp;quot; lat=&amp;quot;51.505298614502&amp;quot; long=&amp;quot;0.0552779994904995&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;London City Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;LHR&amp;quot; lat=&amp;quot;51.4706001282&amp;quot; long=&amp;quot;-0.461941003799&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;London Heathrow Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;STN&amp;quot; lat=&amp;quot;51.8849983215332&amp;quot; long=&amp;quot;0.234999999403954&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;London Stansted Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
    &amp;lt;/riik&amp;gt;&lt;br /&gt;
    &amp;lt;riik id=&amp;quot;ES&amp;quot; raha=&amp;quot;EUR&amp;quot; rahanimi=&amp;quot;Euro&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Spain&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;linn id=&amp;quot;Tenerife Island&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Tenerife Island&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;TFS&amp;quot; lat=&amp;quot;28.044500351&amp;quot; long=&amp;quot;-16.5725002289&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Tenerife South Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;TFN&amp;quot; lat=&amp;quot;28.4827003479&amp;quot; long=&amp;quot;-16.3414993286&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Tenerife Norte Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
    &amp;lt;/riik&amp;gt;&lt;br /&gt;
    &amp;lt;riik id=&amp;quot;FR&amp;quot; raha=&amp;quot;EUR&amp;quot; rahanimi=&amp;quot;Euro&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;France&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;linn id=&amp;quot;Paris&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Paris&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;CDG&amp;quot; lat=&amp;quot;49.0127983093&amp;quot; long=&amp;quot;2.54999995232&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Charles de Gaulle International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;ORY&amp;quot; lat=&amp;quot;48.7252998352&amp;quot; long=&amp;quot;2.35944008827&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Paris-Orly Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
    &amp;lt;/riik&amp;gt;&lt;br /&gt;
    &amp;lt;riik id=&amp;quot;IT&amp;quot; raha=&amp;quot;EUR&amp;quot; rahanimi=&amp;quot;Euro&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Italy&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;linn id=&amp;quot;Milan&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Milan&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;MXP&amp;quot; lat=&amp;quot;45.6305999756&amp;quot; long=&amp;quot;8.72811031342&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Malpensa International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;LIN&amp;quot; lat=&amp;quot;45.445098877&amp;quot; long=&amp;quot;9.27674007416&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Linate Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
    &amp;lt;/riik&amp;gt;&lt;br /&gt;
    &amp;lt;riik id=&amp;quot;TR&amp;quot; raha=&amp;quot;TRY&amp;quot; rahanimi=&amp;quot;Lira&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Turkey&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;linn id=&amp;quot;Istanbul&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Istanbul&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;IST&amp;quot; lat=&amp;quot;40.9768981934&amp;quot; long=&amp;quot;28.8145999908&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Atatürk International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
    &amp;lt;/riik&amp;gt;&lt;br /&gt;
    &amp;lt;riik id=&amp;quot;RU&amp;quot; raha=&amp;quot;RUB&amp;quot; rahanimi=&amp;quot;Ruble&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Russia&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;linn id=&amp;quot;Moscow&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Moscow&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;DME&amp;quot; lat=&amp;quot;55.4087982177734&amp;quot; long=&amp;quot;37.9062995910645&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Domodedovo International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;SVO&amp;quot; lat=&amp;quot;55.972599029541&amp;quot; long=&amp;quot;37.4146003723145&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Sheremetyevo International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;&amp;quot; lat=&amp;quot;55.8782997131348&amp;quot; long=&amp;quot;38.0616989135742&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Chkalovskiy Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
    &amp;lt;/riik&amp;gt;&lt;br /&gt;
  &amp;lt;/kontinent&amp;gt;&lt;br /&gt;
  &amp;lt;kontinent rahvaarv=&amp;quot;528720588&amp;quot; id=&amp;quot;NA&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;nimi&amp;gt;Põhja-Ameerika&amp;lt;/nimi&amp;gt;&lt;br /&gt;
    &amp;lt;riik id=&amp;quot;US&amp;quot; raha=&amp;quot;USD&amp;quot; rahanimi=&amp;quot;Dollar&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;United States&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;linn id=&amp;quot;Fort Worth&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Fort Worth&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;AFW&amp;quot; lat=&amp;quot;32.9875984192&amp;quot; long=&amp;quot;-97.3188018799&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Fort Worth Alliance Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;FTW&amp;quot; lat=&amp;quot;32.8198013306&amp;quot; long=&amp;quot;-97.3623962402&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Fort Worth Meacham International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
      &amp;lt;linn id=&amp;quot;Seattle&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Seattle&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;BFI&amp;quot; lat=&amp;quot;47.5299987792969&amp;quot; long=&amp;quot;-122.302001953125&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Boeing Field King County International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;SEA&amp;quot; lat=&amp;quot;47.4490013122559&amp;quot; long=&amp;quot;-122.30899810791&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Seattle Tacoma International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
      &amp;lt;linn id=&amp;quot;Columbus&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Columbus&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;&amp;quot; lat=&amp;quot;39.8138008117676&amp;quot; long=&amp;quot;-82.9278030395508&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Rickenbacker International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;CMH&amp;quot; lat=&amp;quot;39.9980010986328&amp;quot; long=&amp;quot;-82.8918991088867&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Port Columbus International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
      &amp;lt;linn id=&amp;quot;Charleston&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Charleston&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;CHS&amp;quot; lat=&amp;quot;32.89860153&amp;quot; long=&amp;quot;-80.04049683&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Charleston Air Force Base-International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;CRW&amp;quot; lat=&amp;quot;38.3731002807617&amp;quot; long=&amp;quot;-81.5932006835938&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Yeager Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
      &amp;lt;linn id=&amp;quot;Dayton&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Dayton&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;DAY&amp;quot; lat=&amp;quot;39.902400970459&amp;quot; long=&amp;quot;-84.2193984985352&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;James M Cox Dayton International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;&amp;quot; lat=&amp;quot;39.826099395752&amp;quot; long=&amp;quot;-84.0483016967773&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Wright Patterson Air Force Base&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
      &amp;lt;linn id=&amp;quot;Washington&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Washington&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;DCA&amp;quot; lat=&amp;quot;38.8521003723145&amp;quot; long=&amp;quot;-77.0376968383789&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Ronald Reagan Washington National Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;IAD&amp;quot; lat=&amp;quot;38.94449997&amp;quot; long=&amp;quot;-77.45580292&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Washington Dulles International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
      &amp;lt;linn id=&amp;quot;Spokane&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Spokane&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;GEG&amp;quot; lat=&amp;quot;47.6198997497559&amp;quot; long=&amp;quot;-117.533996582031&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Spokane International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;&amp;quot; lat=&amp;quot;47.6151008605957&amp;quot; long=&amp;quot;-117.65599822998&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Fairchild Air Force Base&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
      &amp;lt;linn id=&amp;quot;Houston&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Houston&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;HOU&amp;quot; lat=&amp;quot;29.64539909&amp;quot; long=&amp;quot;-95.27890015&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;William P Hobby Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;IAH&amp;quot; lat=&amp;quot;29.9843997955322&amp;quot; long=&amp;quot;-95.3414001464844&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;George Bush Intercontinental Houston Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
      &amp;lt;linn id=&amp;quot;New York&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;New York&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;JFK&amp;quot; lat=&amp;quot;40.63980103&amp;quot; long=&amp;quot;-73.77890015&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;John F Kennedy International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;LGA&amp;quot; lat=&amp;quot;40.77719879&amp;quot; long=&amp;quot;-73.87259674&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;La Guardia Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
      &amp;lt;linn id=&amp;quot;Tampa&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Tampa&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;&amp;quot; lat=&amp;quot;27.84930038&amp;quot; long=&amp;quot;-82.52120209&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Mac Dill Air Force Base&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;TPA&amp;quot; lat=&amp;quot;27.9755001068115&amp;quot; long=&amp;quot;-82.533203125&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Tampa International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
      &amp;lt;linn id=&amp;quot;Orlando&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Orlando&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;MCO&amp;quot; lat=&amp;quot;28.4293994903564&amp;quot; long=&amp;quot;-81.3089981079102&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Orlando International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;SFB&amp;quot; lat=&amp;quot;28.7775993347168&amp;quot; long=&amp;quot;-81.2375030517578&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Orlando Sanford International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
      &amp;lt;linn id=&amp;quot;Chicago&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Chicago&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;MDW&amp;quot; lat=&amp;quot;41.7859992980957&amp;quot; long=&amp;quot;-87.7524032592773&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Chicago Midway International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;ORD&amp;quot; lat=&amp;quot;41.97859955&amp;quot; long=&amp;quot;-87.90480042&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Chicago O&#039;Hare International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
      &amp;lt;linn id=&amp;quot;Oklahoma City&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Oklahoma City&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;OKC&amp;quot; lat=&amp;quot;35.3931007385254&amp;quot; long=&amp;quot;-97.600700378418&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Will Rogers World Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;&amp;quot; lat=&amp;quot;35.4146995544434&amp;quot; long=&amp;quot;-97.3865966796875&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Tinker Air Force Base&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
      &amp;lt;linn id=&amp;quot;Portland&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Portland&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;PDX&amp;quot; lat=&amp;quot;45.58869934&amp;quot; long=&amp;quot;-122.5979996&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Portland International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;PWM&amp;quot; lat=&amp;quot;43.64619827&amp;quot; long=&amp;quot;-70.30930328&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Portland International Jetport Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
      &amp;lt;linn id=&amp;quot;Rochester&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Rochester&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;ROC&amp;quot; lat=&amp;quot;43.1189002990723&amp;quot; long=&amp;quot;-77.6724014282227&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Greater Rochester International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;RST&amp;quot; lat=&amp;quot;43.9082984924316&amp;quot; long=&amp;quot;-92.5&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Rochester International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
      &amp;lt;linn id=&amp;quot;Springfield&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Springfield&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;SGF&amp;quot; lat=&amp;quot;37.24570084&amp;quot; long=&amp;quot;-93.38860321&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Springfield Branson National Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;SPI&amp;quot; lat=&amp;quot;39.84410095&amp;quot; long=&amp;quot;-89.67790222&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Abraham Lincoln Capital Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
      &amp;lt;linn id=&amp;quot;St Louis&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;St Louis&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;STL&amp;quot; lat=&amp;quot;38.7486991882324&amp;quot; long=&amp;quot;-90.370002746582&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Lambert St Louis International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;&amp;quot; lat=&amp;quot;38.6621017456055&amp;quot; long=&amp;quot;-90.6520004272461&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Spirit of St Louis Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
    &amp;lt;/riik&amp;gt;&lt;br /&gt;
    &amp;lt;riik id=&amp;quot;PR&amp;quot; raha=&amp;quot;USD&amp;quot; rahanimi=&amp;quot;Dollar&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Puerto Rico&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;linn id=&amp;quot;San Juan&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;San Juan&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;&amp;quot; lat=&amp;quot;18.4577999115&amp;quot; long=&amp;quot;-66.1211013794&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;San Juan Seaplane Base&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;SJU&amp;quot; lat=&amp;quot;18.4393997192383&amp;quot; long=&amp;quot;-66.0018005371094&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Luis Munoz Marin International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
    &amp;lt;/riik&amp;gt;&lt;br /&gt;
  &amp;lt;/kontinent&amp;gt;&lt;br /&gt;
  &amp;lt;kontinent rahvaarv=&amp;quot;4164252000&amp;quot; id=&amp;quot;AS&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;nimi&amp;gt;Aasia&amp;lt;/nimi&amp;gt;&lt;br /&gt;
    &amp;lt;riik id=&amp;quot;TR&amp;quot; raha=&amp;quot;TRY&amp;quot; rahanimi=&amp;quot;Lira&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Turkey&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;linn id=&amp;quot;Istanbul&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Istanbul&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;SAW&amp;quot; lat=&amp;quot;40.898601532&amp;quot; long=&amp;quot;29.3092002869&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Sabiha Gökçen International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
    &amp;lt;/riik&amp;gt;&lt;br /&gt;
    &amp;lt;riik id=&amp;quot;IR&amp;quot; raha=&amp;quot;IRR&amp;quot; rahanimi=&amp;quot;Rial&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Iran&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;linn id=&amp;quot;Tehran&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Tehran&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;IKA&amp;quot; lat=&amp;quot;35.4160995483398&amp;quot; long=&amp;quot;51.1521987915039&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Imam Khomeini International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;THR&amp;quot; lat=&amp;quot;35.6892013549805&amp;quot; long=&amp;quot;51.3134002685547&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Mehrabad International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
    &amp;lt;/riik&amp;gt;&lt;br /&gt;
    &amp;lt;riik id=&amp;quot;PK&amp;quot; raha=&amp;quot;PKR&amp;quot; rahanimi=&amp;quot;Rupee&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Pakistan&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;linn id=&amp;quot;Islamabad&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Islamabad&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;ISB&amp;quot; lat=&amp;quot;33.61669921875&amp;quot; long=&amp;quot;73.0991973876953&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Benazir Bhutto International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;&amp;quot; lat=&amp;quot;33.560714&amp;quot; long=&amp;quot;72.851614&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;(Under construction) New Islamabad International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
    &amp;lt;/riik&amp;gt;&lt;br /&gt;
    &amp;lt;riik id=&amp;quot;JP&amp;quot; raha=&amp;quot;JPY&amp;quot; rahanimi=&amp;quot;Yen&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Japan&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;linn id=&amp;quot;Tokyo&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Tokyo&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;NRT&amp;quot; lat=&amp;quot;35.7647018432617&amp;quot; long=&amp;quot;140.386001586914&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Narita International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;HND&amp;quot; lat=&amp;quot;35.5522994995117&amp;quot; long=&amp;quot;139.779998779297&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Tokyo International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
      &amp;lt;linn id=&amp;quot;Osaka&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Osaka&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;KIX&amp;quot; lat=&amp;quot;34.4272994995117&amp;quot; long=&amp;quot;135.244003295898&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Kansai International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;ITM&amp;quot; lat=&amp;quot;34.7854995727539&amp;quot; long=&amp;quot;135.438003540039&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Osaka International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
      &amp;lt;linn id=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;&amp;quot; lat=&amp;quot;34.7960434679&amp;quot; long=&amp;quot;138.18775177&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Mt. Fuji Shizuoka Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;DNA&amp;quot; lat=&amp;quot;26.3556003570557&amp;quot; long=&amp;quot;127.767997741699&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Kadena Air Base&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
    &amp;lt;/riik&amp;gt;&lt;br /&gt;
    &amp;lt;riik id=&amp;quot;KR&amp;quot; raha=&amp;quot;KRW&amp;quot; rahanimi=&amp;quot;Won&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;South Korea&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;linn id=&amp;quot;Seoul&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Seoul&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;ICN&amp;quot; lat=&amp;quot;37.4691009521484&amp;quot; long=&amp;quot;126.450996398926&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Incheon International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;GMP&amp;quot; lat=&amp;quot;37.5583000183&amp;quot; long=&amp;quot;126.791000366&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Gimpo International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
    &amp;lt;/riik&amp;gt;&lt;br /&gt;
    &amp;lt;riik id=&amp;quot;TH&amp;quot; raha=&amp;quot;THB&amp;quot; rahanimi=&amp;quot;Baht&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Thailand&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;linn id=&amp;quot;Bangkok&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Bangkok&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;DMK&amp;quot; lat=&amp;quot;13.9125995635986&amp;quot; long=&amp;quot;100.607002258301&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Don Mueang International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;BKK&amp;quot; lat=&amp;quot;13.6810998916626&amp;quot; long=&amp;quot;100.747001647949&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Suvarnabhumi Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
    &amp;lt;/riik&amp;gt;&lt;br /&gt;
    &amp;lt;riik id=&amp;quot;CN&amp;quot; raha=&amp;quot;CNY&amp;quot; rahanimi=&amp;quot;Yuan Renminbi&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;China&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;linn id=&amp;quot;Beijing&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Beijing&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;PEK&amp;quot; lat=&amp;quot;40.0801010131836&amp;quot; long=&amp;quot;116.584999084473&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Beijing Capital International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;NAY&amp;quot; lat=&amp;quot;39.7827987670898&amp;quot; long=&amp;quot;116.388000488281&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Beijing Nanyuan Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
      &amp;lt;linn id=&amp;quot;Shanghai&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;Shanghai&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;PVG&amp;quot; lat=&amp;quot;31.1434001922607&amp;quot; long=&amp;quot;121.805000305176&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Shanghai Pudong International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;SHA&amp;quot; lat=&amp;quot;31.1979007720947&amp;quot; long=&amp;quot;121.335998535156&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Shanghai Hongqiao International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
    &amp;lt;/riik&amp;gt;&lt;br /&gt;
  &amp;lt;/kontinent&amp;gt;&lt;br /&gt;
  &amp;lt;kontinent rahvaarv=&amp;quot;385742554&amp;quot; id=&amp;quot;SA&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;nimi&amp;gt;Lõuna Ameerika&amp;lt;/nimi&amp;gt;&lt;br /&gt;
    &amp;lt;riik id=&amp;quot;BR&amp;quot; raha=&amp;quot;BRL&amp;quot; rahanimi=&amp;quot;Real&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;Brazil&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;linn id=&amp;quot;São Paulo&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;São Paulo&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;GRU&amp;quot; lat=&amp;quot;-23.4355564117432&amp;quot; long=&amp;quot;-46.4730567932129&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Guarulhos - Governador André Franco Montoro International Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam id=&amp;quot;CGH&amp;quot; lat=&amp;quot;-23.6261100769043&amp;quot; long=&amp;quot;-46.6563873291016&amp;quot; &amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;Congonhas Airport&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
    &amp;lt;/riik&amp;gt;&lt;br /&gt;
  &amp;lt;/kontinent&amp;gt;&lt;br /&gt;
&amp;lt;/Maa&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sisemiseks kasutamiseks ===&lt;br /&gt;
Siia tulevad asjad mis ei kuulu presenteerimisele, aga võivad olla vajalikud&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== vana XML andmefail ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;Maa&amp;gt;&lt;br /&gt;
  &amp;lt;manner rahvaarv=&amp;quot;1 022 234 000&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;nimi&amp;gt;Aafrika&amp;lt;/nimi&amp;gt;     &lt;br /&gt;
    &amp;lt;riik&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;linn ajatsoon=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam long=&amp;quot;&amp;quot; lat=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
    &amp;lt;/riik&amp;gt;&lt;br /&gt;
  &amp;lt;/manner&amp;gt;&lt;br /&gt;
  &amp;lt;manner rahvaarv=&amp;quot;4 164 252 000&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;nimi&amp;gt;Aasia&amp;lt;/nimi&amp;gt;&lt;br /&gt;
    &amp;lt;riik&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;linn ajatsoon=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam long=&amp;quot;&amp;quot; lat=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
    &amp;lt;/riik&amp;gt;&lt;br /&gt;
  &amp;lt;/manner&amp;gt;&lt;br /&gt;
  &amp;lt;manner rahvaarv=&amp;quot;738 199 000&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;nimi&amp;gt;Euroopa&amp;lt;/nimi&amp;gt;&lt;br /&gt;
    &amp;lt;riik&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;linn ajatsoon=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam long=&amp;quot;&amp;quot; lat=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
    &amp;lt;/riik&amp;gt;&lt;br /&gt;
  &amp;lt;/manner&amp;gt;&lt;br /&gt;
  &amp;lt;manner rahvaarv=&amp;quot;528 720 588&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;nimi&amp;gt;Põhja-Ameerika&amp;lt;/nimi&amp;gt;&lt;br /&gt;
    &amp;lt;riik&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;linn ajatsoon=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam long=&amp;quot;&amp;quot; lat=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
    &amp;lt;/riik&amp;gt;&lt;br /&gt;
  &amp;lt;/manner&amp;gt;&lt;br /&gt;
  &amp;lt;manner rahvaarv=&amp;quot;385 742 554&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;nimi&amp;gt;Lõuna-Ameerika&amp;lt;/nimi&amp;gt;&lt;br /&gt;
    &amp;lt;riik&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;linn ajatsoon=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam long=&amp;quot;&amp;quot; lat=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
    &amp;lt;/riik&amp;gt;&lt;br /&gt;
  &amp;lt;/manner&amp;gt;&lt;br /&gt;
  &amp;lt;manner rahvaarv=&amp;quot;36 593 000&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;nimi&amp;gt;Okeaania&amp;lt;/nimi&amp;gt;&lt;br /&gt;
    &amp;lt;riik&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;linn ajatsoon=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam long=&amp;quot;&amp;quot; lat=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
    &amp;lt;/riik&amp;gt;&lt;br /&gt;
  &amp;lt;/manner&amp;gt;&lt;br /&gt;
  &amp;lt;manner rahvaarv=&amp;quot;1000-5000&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;nimi&amp;gt;Antarktika&amp;lt;/nimi&amp;gt;&lt;br /&gt;
    &amp;lt;riik&amp;gt;&lt;br /&gt;
      &amp;lt;nimi&amp;gt;&amp;lt;/nimi&amp;gt;&lt;br /&gt;
      &amp;lt;linn ajatsoon=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;nimi&amp;gt;&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;lennujaam long=&amp;quot;&amp;quot; lat=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;nimi&amp;gt;&amp;lt;/nimi&amp;gt;&lt;br /&gt;
        &amp;lt;/lennujaam&amp;gt;&lt;br /&gt;
      &amp;lt;/linn&amp;gt;&lt;br /&gt;
    &amp;lt;/riik&amp;gt;&lt;br /&gt;
  &amp;lt;/manner&amp;gt;&lt;br /&gt;
&amp;lt;/Maa&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Source code for xml generator ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$CONT_POPULATION=array(&lt;br /&gt;
	&amp;quot;EU&amp;quot;=&amp;gt;738199000,&lt;br /&gt;
	&amp;quot;AS&amp;quot;=&amp;gt;4164252000,&lt;br /&gt;
	&amp;quot;NA&amp;quot;=&amp;gt;528720588,&lt;br /&gt;
	&amp;quot;AF&amp;quot;=&amp;gt;1022234000,&lt;br /&gt;
	&amp;quot;AN&amp;quot;=&amp;gt;5000,&lt;br /&gt;
	&amp;quot;SA&amp;quot;=&amp;gt;385742554,&lt;br /&gt;
	&amp;quot;OC&amp;quot;=&amp;gt;36593000&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$CONT_NAME=array(&lt;br /&gt;
	&amp;quot;EU&amp;quot;=&amp;gt;&amp;quot;Euroopa&amp;quot;,&lt;br /&gt;
	&amp;quot;AS&amp;quot;=&amp;gt;&amp;quot;Aasia&amp;quot;,&lt;br /&gt;
	&amp;quot;NA&amp;quot;=&amp;gt;&amp;quot;Põhja-Ameerika&amp;quot;,&lt;br /&gt;
	&amp;quot;AF&amp;quot;=&amp;gt;&amp;quot;Aafrika&amp;quot;,&lt;br /&gt;
	&amp;quot;AN&amp;quot;=&amp;gt;&amp;quot;Antarktika&amp;quot;,&lt;br /&gt;
	&amp;quot;SA&amp;quot;=&amp;gt;&amp;quot;Lõuna Ameerika&amp;quot;,&lt;br /&gt;
	&amp;quot;OC&amp;quot;=&amp;gt;&amp;quot;Okeaania&amp;quot;&lt;br /&gt;
	);&lt;br /&gt;
&lt;br /&gt;
$CONT = array();&lt;br /&gt;
&lt;br /&gt;
$CC = explode(&amp;quot;\n&amp;quot;,str_replace(&amp;quot;\r&amp;quot;,&amp;quot;&amp;quot;,file_get_contents(&amp;quot;countryInfo.txt&amp;quot;)));&lt;br /&gt;
$CC_keys = array_shift($CC);&lt;br /&gt;
$CC_keys = explode(&amp;quot;\t&amp;quot;,$CC_keys);&lt;br /&gt;
&lt;br /&gt;
$CCA = ARRAY();&lt;br /&gt;
foreach($CC as $cline){&lt;br /&gt;
	if(trim($cline)==&amp;quot;&amp;quot;)continue;&lt;br /&gt;
	$c = explode(&amp;quot;\t&amp;quot;,$cline);&lt;br /&gt;
	$a = array();&lt;br /&gt;
	foreach($CC_keys as $num=&amp;gt;$key){&lt;br /&gt;
		$a[$key] = $c[$num];&lt;br /&gt;
	}&lt;br /&gt;
	//print_r($a);&lt;br /&gt;
	$CCA[$a[&#039;ISO&#039;]]=$a;&lt;br /&gt;
	$CONT[$a[&#039;Continent&#039;]]=true;&lt;br /&gt;
	//exit();&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$WORLD = array();&lt;br /&gt;
//$AIRP=array();&lt;br /&gt;
&lt;br /&gt;
$CIT=array();&lt;br /&gt;
&lt;br /&gt;
$f = fopen(&amp;quot;airports.csv&amp;quot;,&#039;r&#039;);&lt;br /&gt;
$num = &amp;quot;&amp;quot;;&lt;br /&gt;
while($a = fgetcsv ($f)){&lt;br /&gt;
	if($a[2]!=&amp;quot;large_airport&amp;quot;)continue;&lt;br /&gt;
	if($a[4]==&amp;quot;0&amp;quot;)continue;&lt;br /&gt;
	$continent = $a[7];&lt;br /&gt;
	$country = $a[8];&lt;br /&gt;
	$munip = $a[10];&lt;br /&gt;
	$airp_code = $a[13];&lt;br /&gt;
	if(!isset($CIT[$country.&amp;quot;/&amp;quot;.$munip]))$CIT[$country.&amp;quot;/&amp;quot;.$munip]=0;&lt;br /&gt;
	$CIT[$country.&amp;quot;/&amp;quot;.$munip]++;&lt;br /&gt;
	//$WORLD[$continent][&#039;children&#039;][$country][&#039;children&#039;][$munip][&#039;children&#039;][$airp_code]=$a;&lt;br /&gt;
	//if($a[2]==&amp;quot;large_airport&amp;quot;)$num++;&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$f = fopen(&amp;quot;airports.csv&amp;quot;,&#039;r&#039;);&lt;br /&gt;
$num = &amp;quot;&amp;quot;;&lt;br /&gt;
while($a = fgetcsv ($f)){&lt;br /&gt;
	if($a[2]!=&amp;quot;large_airport&amp;quot;)continue;&lt;br /&gt;
	if($a[4]==&amp;quot;0&amp;quot;)continue;&lt;br /&gt;
	$continent = $a[7];&lt;br /&gt;
	$country = $a[8];&lt;br /&gt;
	$munip = $a[10];&lt;br /&gt;
	$airp_code = $a[13];&lt;br /&gt;
	&lt;br /&gt;
	if($CIT[$country.&amp;quot;/&amp;quot;.$munip]&amp;lt;2)continue;&lt;br /&gt;
	&lt;br /&gt;
	if(!isset($WORLD[$continent])){&lt;br /&gt;
		$WORLD[$continent] = array(&#039;children&#039;=&amp;gt;array());&lt;br /&gt;
	}&lt;br /&gt;
	if(!isset($WORLD[$continent][&#039;children&#039;][$country])){&lt;br /&gt;
		$WORLD[$continent][&#039;children&#039;][$country] = array(&#039;children&#039;=&amp;gt;array());&lt;br /&gt;
	}&lt;br /&gt;
	if(!isset($WORLD[$continent][&#039;children&#039;][$country][&#039;children&#039;][$munip])){&lt;br /&gt;
		$WORLD[$continent][&#039;children&#039;][$country][&#039;children&#039;][$munip] = array(&#039;children&#039;=&amp;gt;array());&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	$a[&#039;id&#039;]=$airp_code;&lt;br /&gt;
	$a[&#039;lat&#039;]=$a[4];&lt;br /&gt;
	$a[&#039;long&#039;]=$a[5];&lt;br /&gt;
	$a[&#039;nimi&#039;]=$a[3];&lt;br /&gt;
	&lt;br /&gt;
	$WORLD[$continent][&#039;children&#039;][$country][&#039;children&#039;][$munip][&#039;children&#039;][$airp_code]=$a;&lt;br /&gt;
	&lt;br /&gt;
	$WORLD[$continent][&#039;id&#039;] = $continent;&lt;br /&gt;
	$WORLD[$continent][&#039;nimi&#039;] = $CONT_NAME[$continent];&lt;br /&gt;
	$WORLD[$continent][&#039;rahvaarv&#039;] = $CONT_POPULATION[$continent];&lt;br /&gt;
	$WORLD[$continent][&#039;children&#039;][$country][&#039;id&#039;] = $country;&lt;br /&gt;
	$WORLD[$continent][&#039;children&#039;][$country][&#039;nimi&#039;] = $CCA[$country][&#039;Country&#039;];&lt;br /&gt;
	$WORLD[$continent][&#039;children&#039;][$country][&#039;raha&#039;] = $CCA[$country][&#039;CurrencyCode&#039;];&lt;br /&gt;
	$WORLD[$continent][&#039;children&#039;][$country][&#039;rahanimi&#039;] = $CCA[$country][&#039;CurrencyName&#039;];	&lt;br /&gt;
	$WORLD[$continent][&#039;children&#039;][$country][&#039;children&#039;][$munip][&#039;id&#039;]=$munip;&lt;br /&gt;
	$WORLD[$continent][&#039;children&#039;][$country][&#039;children&#039;][$munip][&#039;nimi&#039;]=$munip;&lt;br /&gt;
	if($a[2]==&amp;quot;large_airport&amp;quot;)$num++;&lt;br /&gt;
}&lt;br /&gt;
//echo $num;&lt;br /&gt;
&lt;br /&gt;
echo &#039;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&#039;.&amp;quot;\n&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;!-- Sources:\n http://www.ourairports.com/data/ (public domain) \n http://www.geonames.org/ (Creative Commons Attribution 3.0) \n--&amp;gt;\n&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;Maa&amp;gt;\n&amp;quot;;&lt;br /&gt;
foreach($WORLD as $continent){&lt;br /&gt;
	$id = $continent[&#039;id&#039;];&lt;br /&gt;
	$nimi = $continent[&#039;nimi&#039;];&lt;br /&gt;
	$rahvaarv = $continent[&#039;rahvaarv&#039;];&lt;br /&gt;
	echo str_pad(&amp;quot;&amp;quot;,2);&lt;br /&gt;
	echo &amp;quot;&amp;lt;kontinent rahvaarv=\&amp;quot;$rahvaarv\&amp;quot; id=\&amp;quot;$id\&amp;quot;&amp;gt;\n&amp;quot;;&lt;br /&gt;
	echo str_pad(&amp;quot;&amp;quot;,4);&lt;br /&gt;
	echo &amp;quot;&amp;lt;nimi&amp;gt;$nimi&amp;lt;/nimi&amp;gt;\n&amp;quot;;&lt;br /&gt;
	foreach($continent[&#039;children&#039;] as $country){&lt;br /&gt;
		$id = $country[&#039;id&#039;];&lt;br /&gt;
		$nimi = $country[&#039;nimi&#039;];&lt;br /&gt;
		$raha = $country[&#039;raha&#039;];&lt;br /&gt;
		$rahanimi=$country[&#039;rahanimi&#039;];&lt;br /&gt;
		echo str_pad(&amp;quot;&amp;quot;,4);&lt;br /&gt;
		echo &amp;quot;&amp;lt;riik id=\&amp;quot;$id\&amp;quot; raha=\&amp;quot;$raha\&amp;quot; rahanimi=\&amp;quot;$rahanimi\&amp;quot;&amp;gt;\n&amp;quot;;&lt;br /&gt;
		echo str_pad(&amp;quot;&amp;quot;,6);&lt;br /&gt;
		echo &amp;quot;&amp;lt;nimi&amp;gt;$nimi&amp;lt;/nimi&amp;gt;\n&amp;quot;;&lt;br /&gt;
		foreach($country[&#039;children&#039;] as $city){&lt;br /&gt;
			$id = $city[&#039;id&#039;];&lt;br /&gt;
			$nimi = $city[&#039;nimi&#039;];&lt;br /&gt;
			echo str_pad(&amp;quot;&amp;quot;,6);&lt;br /&gt;
			echo &amp;quot;&amp;lt;linn id=\&amp;quot;$id\&amp;quot;&amp;gt;\n&amp;quot;;&lt;br /&gt;
			echo str_pad(&amp;quot;&amp;quot;,8);&lt;br /&gt;
			echo &amp;quot;&amp;lt;nimi&amp;gt;$nimi&amp;lt;/nimi&amp;gt;\n&amp;quot;;&lt;br /&gt;
			foreach($city[&#039;children&#039;] as $airport){&lt;br /&gt;
					$id = $airport[&#039;id&#039;];&lt;br /&gt;
					$nimi = $airport[&#039;nimi&#039;];&lt;br /&gt;
					$lat = $airport[&#039;lat&#039;];&lt;br /&gt;
					$long=$airport[&#039;long&#039;];&lt;br /&gt;
					echo str_pad(&amp;quot;&amp;quot;,8);&lt;br /&gt;
					echo &amp;quot;&amp;lt;lennujaam id=\&amp;quot;$id\&amp;quot; lat=\&amp;quot;$lat\&amp;quot; long=\&amp;quot;$long\&amp;quot; &amp;gt;\n&amp;quot;;&lt;br /&gt;
					echo str_pad(&amp;quot;&amp;quot;,10);&lt;br /&gt;
					echo &amp;quot;&amp;lt;nimi&amp;gt;$nimi&amp;lt;/nimi&amp;gt;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
					echo str_pad(&amp;quot;&amp;quot;,8);&lt;br /&gt;
					echo &amp;quot;&amp;lt;/lennujaam&amp;gt;\n&amp;quot;;&lt;br /&gt;
			}&lt;br /&gt;
			echo str_pad(&amp;quot;&amp;quot;,6);&lt;br /&gt;
			echo &amp;quot;&amp;lt;/linn&amp;gt;\n&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		echo str_pad(&amp;quot;&amp;quot;,4);&lt;br /&gt;
		echo &amp;quot;&amp;lt;/riik&amp;gt;\n&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	echo str_pad(&amp;quot;&amp;quot;,2);&lt;br /&gt;
	echo &amp;quot;&amp;lt;/kontinent&amp;gt;\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
echo &amp;quot;&amp;lt;/Maa&amp;gt;\n&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== countryInfo.txt (tab delim file) ====&lt;br /&gt;
Source http://download.geonames.org/export/dump/countryInfo.txt (Creative Commons Attribution 3.0)&lt;br /&gt;
&lt;br /&gt;
Enne töötlemist eemaldada kommenteeritud read (algavad #) välja arvatud viimane kommenteeritud rida (kus on veerunimed).&lt;br /&gt;
Sealt reast lihtsalt eemaldada # sümbol&lt;br /&gt;
&lt;br /&gt;
==== airporst.csv  ====&lt;br /&gt;
http://www.ourairports.com/data/airports.csv (public domain)&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=46327</id>
		<title>Meeskond &quot;Harold&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=46327"/>
		<updated>2012-03-03T18:56:45Z</updated>

		<summary type="html">&lt;p&gt;Anroots: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
{| style=&amp;quot;width:100%;height: 40px; background-color:#dff0d8;border: 1px solid ##468847;color:#468847;padding:10px;font-size:16px;font-weight:bold-webkit-border-radius: 8px;-moz-border-radius: 8px;border-radius: 8px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
| [http://jaa.ee Harold?]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 30em; padding-left: 2em; float: right; font-size: 95%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Meeskond &#039;&#039;&amp;quot;Harold&amp;quot;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Aine:&#039;&#039;&#039;&lt;br /&gt;
| [[:Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhend:&#039;&#039;&#039;&lt;br /&gt;
| [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2012 Juhend]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Tüüp:&#039;&#039;&#039;&lt;br /&gt;
| Projekt&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Anroots]]&amp;lt;br /&amp;gt;[[User:Mparast]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhendajad:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Mposka]]&amp;lt;br /&amp;gt;[[User:Kraspel]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Semester:&#039;&#039;&#039;&lt;br /&gt;
| 2011/2012 kevad&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Kood (GitHub)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Challengo:&#039;&#039;&#039;&lt;br /&gt;
| Semi-open source, contact the team&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Projekt =&lt;br /&gt;
&lt;br /&gt;
Projekti kõik kolm osa keskenduvad veebiteenuse &amp;quot;Challengo&amp;quot; taasloomisele. Projekti esimene osa valmistab ette peamis(t)e päringu(te) XML vastuse struktuuri, projekti teine osa (veebiteenuse loomine) ehitab vastava API ning kolmanda osa raames (klientrakendus) realiseeritakse Windows Phone 7 rakendus.&lt;br /&gt;
&lt;br /&gt;
== Korraldus ==&lt;br /&gt;
&lt;br /&gt;
Projektiga seonduv dokumentatsioon (erandiks on käesolev wiki leht), kasutajale nähtavad tekstid ning lähtekood on kirjutatud inglise keeles. Võimalusel on kood kirjutatud hilisema I18n toe võimaldamiseks.&lt;br /&gt;
&lt;br /&gt;
Koodi haldab GitHub repositoorium, juurdepääsu saamiseks tuleb projektijuhile saata oma GitHub kasutajanimi (või &#039;&#039;pull request&#039;&#039;). Tegemist vajavaid töid näeb GitHub lehel &#039;&#039;Issues&#039;&#039; vahekaardilt ning asjakohane dokumentatsioon (API) on GitHub wiki alamjaotises.&lt;br /&gt;
&lt;br /&gt;
Lähtekood on põhjalikult kommenteeritud, muud, eraldiseisvat dokumentatsiooni koodi kohta pole.&lt;br /&gt;
&lt;br /&gt;
== XML Andmefailid ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 3. märts 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
XML andmefail kirjeldab veebiteenuse &amp;quot;[http://garage48.org/blogger/projects-on-garage48-tallinn-2011 Challengo]&amp;quot; andmeid. Andmed asuvad MYSQL andmebaasis, mille struktuur on kirjeldatud ERD mudeliga [[File:Harold_Challengo_MYSQL_ERD.png|200px|thumb|MYSQL ERD mudel]]. XML formaadis andmeid väljastab serveris asuv PHP API. Järgnevalt toodud XML näited ei pruugi projekti esimese osa nõudmiste tõttu olla vastavuses teise osana valmiva veebiteenuse tegeliku väljundiga.&lt;br /&gt;
&lt;br /&gt;
Faile saab vaadata ka võrgust: http://enos.itcollege.ee/~anroots/challengo/xml/. Soovitatav on seda teha just XSLT stiilifaili jaoks (http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml).&lt;br /&gt;
&lt;br /&gt;
=== XML [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml link]]===&lt;br /&gt;
&lt;br /&gt;
Järgnevalt on toodud lõik kasutaja praeguste väljakutsete päringust. Kasutajal on parajasti kaks aktiivset väljakutset, igal väljakutsel on veidi meta-infot, mingi hulk ülesandeid (tasks) ning igal ülesandel on üks või mitu autasu (rewards).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;Response.xsl&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!-- List of user&#039;s current challenges --&amp;gt;&lt;br /&gt;
&amp;lt;challenges&amp;gt;&lt;br /&gt;
  &amp;lt;!-- First challenge, started by the user --&amp;gt;&lt;br /&gt;
  &amp;lt;challenge id=&amp;quot;4&amp;quot; tasks=&amp;quot;6&amp;quot; progress=&amp;quot;17%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;The Improgrupp Jaa!&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Inspired by a true story, the Improgrupp Jaa! contains tasks that challenge ones spontaniety and social courage.&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;duration&amp;gt;1209600&amp;lt;/duration&amp;gt;&lt;br /&gt;
    &amp;lt;points_required&amp;gt;18&amp;lt;/points_required&amp;gt;&lt;br /&gt;
    &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;!-- Each challenge has a number of tasks that have to be completed.--&amp;gt;&lt;br /&gt;
    &amp;lt;!-- No challenge can be completed before earned points from tasks (rewards) exceed the points_required field --&amp;gt;&lt;br /&gt;
    &amp;lt;tasks max_points=&amp;quot;26&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;19&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Make a present to a homeless person&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;If you can read this, you&#039;re probably among the luckier ones. Do something for the ones who can&#039;t.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;!-- Each task yields rewards on completion. Rewards are &amp;quot;power&amp;quot; points of different categories.--&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;20&amp;quot; completed=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment a stranger&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Make a sincere compliment to someone you don&#039;t know. We could do with more praise where it&#039;s due.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;21&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Do volunteer work&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Offer yourself as a volunteer to an event or a cause.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;22&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Perform to a security camera&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Do a little dance to a security camera. It shouldn&#039;t be illegal...probably. Don&#039;t get in trouble!&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;23&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment someone for a job well done&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;When was the last time you thanked the janitor?&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;24&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Take a day off&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;This is mostly for work-a-holics: rest for a while.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
    &amp;lt;/tasks&amp;gt;&lt;br /&gt;
  &amp;lt;/challenge&amp;gt;&lt;br /&gt;
&amp;lt;/challenges&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT (stiilifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsl link]] ===&lt;br /&gt;
&lt;br /&gt;
Toodud stiilifail muudab ülaltoodud XML vastuse inimesele kergemini loetavaks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html class=&amp;quot;no-js&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;Ando Roots&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Challengo Response&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.css&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.responsive.css&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Challengo API response&amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
            The following is a list of challenges reported by the XML API.&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;!-- Go over each challenge --&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;challenges/challenge&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h2&amp;gt;&lt;br /&gt;
              &lt;br /&gt;
              &amp;lt;!-- Challenge badge image and title --&amp;gt;&lt;br /&gt;
              &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;&lt;br /&gt;
                  http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/img&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
              &amp;lt;!-- Challenge progress, if applicable --&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:if test=&amp;quot;@progress&amp;quot;&amp;gt;&lt;br /&gt;
                (&amp;lt;span&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@progress&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/span&amp;gt;)&lt;br /&gt;
              &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
            &amp;lt;/h2&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;p class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- Table for some challenge meta-info --&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered span4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Points required to complete:&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;points_required&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Time left (hours):&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;round(duration div 1800)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;!-- List all challenge tasks --&amp;gt;&lt;br /&gt;
            &amp;lt;h3 style=&amp;quot;margin-top:140px&amp;quot;&amp;gt;Tasks (&amp;lt;xsl:value-of select=&amp;quot;@tasks&amp;quot;/&amp;gt;)&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered table-striped table-condensed&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;thead&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;ID&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Title&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Badge&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Rewards&amp;lt;/th&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/thead&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;tasks/task&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;tr&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Color the row gray if task is completed --&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;@completed&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:attribute name=&amp;quot;class&amp;quot;&amp;gt;&lt;br /&gt;
                        help-block&lt;br /&gt;
                      &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                      &amp;lt;/img&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:for-each select=&amp;quot;rewards/reward&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;li&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=1&amp;quot;&amp;gt;&lt;br /&gt;
                              Compassion&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=2&amp;quot;&amp;gt;&lt;br /&gt;
                              Strength&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=3&amp;quot;&amp;gt;&lt;br /&gt;
                              Intelligence&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;span&amp;gt;&lt;br /&gt;
                              &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                            &amp;lt;/span&amp;gt;&lt;br /&gt;
                          &amp;lt;/li&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;!-- End of challenge task table --&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;!-- End of challenge --&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD (skeemifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsd link]] ===&lt;br /&gt;
&lt;br /&gt;
Skeemifail kirjeldab päringu vastuse XML struktuuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;challenges&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;challenge&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;duration&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;points_required&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;tasks&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;task&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rewards&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;reward&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:extension base=&amp;quot;xs:unsignedByte&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:attribute name=&amp;quot;power_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;completed&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;max_points&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;tasks&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;progress&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Veebiteenus ==&lt;br /&gt;
&#039;&#039;Tähtaeg 14. aprill 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Veebiteenuseks on PHP rakendus, mis hakkab WP7 rakendusele andmeid pakkuma ja neid vastu võtma.&lt;br /&gt;
&lt;br /&gt;
== Klientrakendus ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 5. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Klientrakendus on Windows Phone 7 klient Challengo teenusele, mis kasutab projekti esimeses osas koostatud XML andmestruktuuri.&lt;br /&gt;
&lt;br /&gt;
XML-i väljastab Challengo API, mis vajab veel kirjutamist. Challengo on realiseeritud PHP-s.&lt;br /&gt;
&lt;br /&gt;
=== Feature set ===&lt;br /&gt;
&lt;br /&gt;
* Autentimine&lt;br /&gt;
** Login&lt;br /&gt;
** Logout&lt;br /&gt;
* Nimekiri aktiivsetest väljakutsetest ja nende staatustest&lt;br /&gt;
** Nimekiri väljakutse alamülesannetest ja nende staatustest&lt;br /&gt;
* Väljakutse märkimine lõpetatuks&lt;br /&gt;
** Alamülesande märkimine lõpetatuks&lt;br /&gt;
* Uue väljakutse valimine nimekirjast&lt;br /&gt;
** Väljakutse detailide ja alamülesannete vaatamine&lt;br /&gt;
* Väljakutse &amp;quot;hülgamine&amp;quot; (&#039;&#039;abandon&#039;&#039;)&lt;br /&gt;
* Kasutaja statistika näitamine&lt;br /&gt;
** Praegune punktiseis&lt;br /&gt;
** Lõpetatud väljakutsed&lt;br /&gt;
*** Lõpetatud alamülesanded&lt;br /&gt;
** Teenitud märgid&lt;br /&gt;
&lt;br /&gt;
= Meeskonna Liikmed =&lt;br /&gt;
&lt;br /&gt;
* Ando Roots &#039;&#039;anroots@itcollege.ee&#039;&#039;&lt;br /&gt;
* Mikk Pärast &#039;&#039;mparast@itcollege.ee&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Liitumine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for t in tudengid:&lt;br /&gt;
  if !t.laisk &amp;amp;&amp;amp; t.oskab_progreda:&lt;br /&gt;
    kutsu_meeskonda(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ mail -s &amp;quot;Harold&amp;quot; anroots@itcollege.ee&amp;lt;/pre&amp;gt;&lt;br /&gt;
Eeldan varasemaid teadmisi ning usaldusväärsust. Soovin, et asi ei lõppeks jälle nii, et projektijuht on kaitsmiseelsel õhtul üleval ja lõpetab üksinda projekti.&lt;br /&gt;
Ole nii kena ja anna huvist märku enne &#039;&#039;&#039;26. veebruari&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Lisad =&lt;br /&gt;
&lt;br /&gt;
== Challengo ==&lt;br /&gt;
&lt;br /&gt;
Challengo.me on Garage48 Tallinn 2011 raames alustatud veebiteenus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A social network of themed challenges, comes with a Karma profile and level-system.&lt;br /&gt;
Revenues from ads on the mobile version.&lt;br /&gt;
Team members: Ando Roots, Kristo Vaher, Valeria Gasik, Jelena Savinen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube v=&amp;quot;pPfHJD5F7sc&amp;quot; /&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=pPfHJD5F7sc Jelena tutvustab Challengo teenust]&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=46326</id>
		<title>Meeskond &quot;Harold&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=46326"/>
		<updated>2012-03-03T18:53:59Z</updated>

		<summary type="html">&lt;p&gt;Anroots: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
{| style=&amp;quot;width:100%;height: 40px; background-color:#dff0d8;border: 1px solid ##468847;color:#468847;padding:10px;font-size:16px;font-weight:bold-webkit-border-radius: 8px;-moz-border-radius: 8px;border-radius: 8px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
| [http://jaa.ee Harold?]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 30em; padding-left: 2em; float: right; font-size: 95%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Meeskond &#039;&#039;&amp;quot;Harold&amp;quot;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Aine:&#039;&#039;&#039;&lt;br /&gt;
| [[:Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhend:&#039;&#039;&#039;&lt;br /&gt;
| [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2012 Juhend]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Tüüp:&#039;&#039;&#039;&lt;br /&gt;
| Projekt&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Anroots]]&amp;lt;br /&amp;gt;[[User:Mparast]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhendajad:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Mposka]]&amp;lt;br /&amp;gt;[[User:Kraspel]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Semester:&#039;&#039;&#039;&lt;br /&gt;
| 2011/2012 kevad&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Kood (GitHub)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Challengo:&#039;&#039;&#039;&lt;br /&gt;
|https://github.com/anroots/Challengo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Projekt =&lt;br /&gt;
&lt;br /&gt;
Projekti kõik kolm osa keskenduvad veebiteenuse &amp;quot;Challengo&amp;quot; taasloomisele. Projekti esimene osa valmistab ette peamis(t)e päringu(te) XML vastuse struktuuri, projekti teine osa (veebiteenuse loomine) ehitab vastava API ning kolmanda osa raames (klientrakendus) realiseeritakse Windows Phone 7 rakendus.&lt;br /&gt;
&lt;br /&gt;
== Korraldus ==&lt;br /&gt;
&lt;br /&gt;
Projektiga seonduv dokumentatsioon (erandiks on käesolev wiki leht), kasutajale nähtavad tekstid ning lähtekood on kirjutatud inglise keeles. Võimalusel on kood kirjutatud hilisema I18n toe võimaldamiseks.&lt;br /&gt;
&lt;br /&gt;
Koodi haldab GitHub repositoorium, juurdepääsu saamiseks tuleb projektijuhile saata oma GitHub kasutajanimi (või &#039;&#039;pull request&#039;&#039;). Tegemist vajavaid töid näeb GitHub lehel &#039;&#039;Issues&#039;&#039; vahekaardilt ning asjakohane dokumentatsioon (API) on GitHub wiki alamjaotises.&lt;br /&gt;
&lt;br /&gt;
Lähtekood on põhjalikult kommenteeritud, muud, eraldiseisvat dokumentatsiooni koodi kohta pole.&lt;br /&gt;
&lt;br /&gt;
== XML Andmefailid ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 3. märts 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
XML andmefail kirjeldab veebiteenuse &amp;quot;[http://garage48.org/blogger/projects-on-garage48-tallinn-2011 Challengo]&amp;quot; andmeid. Andmed asuvad MYSQL andmebaasis, mille struktuur on kirjeldatud ERD mudeliga [[File:Harold_Challengo_MYSQL_ERD.png|200px|thumb|MYSQL ERD mudel]]. XML formaadis andmeid väljastab serveris asuv PHP API. Järgnevalt toodud XML näited ei pruugi projekti esimese osa nõudmiste tõttu olla vastavuses teise osana valmiva veebiteenuse tegeliku väljundiga.&lt;br /&gt;
&lt;br /&gt;
Faile saab vaadata ka võrgust: http://enos.itcollege.ee/~anroots/challengo/xml/. Soovitatav on seda teha just XSLT stiilifaili jaoks (http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml).&lt;br /&gt;
&lt;br /&gt;
=== XML [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml link]]===&lt;br /&gt;
&lt;br /&gt;
Järgnevalt on toodud lõik kasutaja praeguste väljakutsete päringust. Kasutajal on parajasti kaks aktiivset väljakutset, igal väljakutsel on veidi meta-infot, mingi hulk ülesandeid (tasks) ning igal ülesandel on üks või mitu autasu (rewards).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;Response.xsl&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!-- List of user&#039;s current challenges --&amp;gt;&lt;br /&gt;
&amp;lt;challenges&amp;gt;&lt;br /&gt;
  &amp;lt;!-- First challenge, started by the user --&amp;gt;&lt;br /&gt;
  &amp;lt;challenge id=&amp;quot;4&amp;quot; tasks=&amp;quot;6&amp;quot; progress=&amp;quot;17%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;The Improgrupp Jaa!&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Inspired by a true story, the Improgrupp Jaa! contains tasks that challenge ones spontaniety and social courage.&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;duration&amp;gt;1209600&amp;lt;/duration&amp;gt;&lt;br /&gt;
    &amp;lt;points_required&amp;gt;18&amp;lt;/points_required&amp;gt;&lt;br /&gt;
    &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;!-- Each challenge has a number of tasks that have to be completed.--&amp;gt;&lt;br /&gt;
    &amp;lt;!-- No challenge can be completed before earned points from tasks (rewards) exceed the points_required field --&amp;gt;&lt;br /&gt;
    &amp;lt;tasks max_points=&amp;quot;26&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;19&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Make a present to a homeless person&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;If you can read this, you&#039;re probably among the luckier ones. Do something for the ones who can&#039;t.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;!-- Each task yields rewards on completion. Rewards are &amp;quot;power&amp;quot; points of different categories.--&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;20&amp;quot; completed=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment a stranger&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Make a sincere compliment to someone you don&#039;t know. We could do with more praise where it&#039;s due.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;21&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Do volunteer work&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Offer yourself as a volunteer to an event or a cause.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;22&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Perform to a security camera&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Do a little dance to a security camera. It shouldn&#039;t be illegal...probably. Don&#039;t get in trouble!&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;23&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment someone for a job well done&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;When was the last time you thanked the janitor?&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;24&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Take a day off&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;This is mostly for work-a-holics: rest for a while.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
    &amp;lt;/tasks&amp;gt;&lt;br /&gt;
  &amp;lt;/challenge&amp;gt;&lt;br /&gt;
&amp;lt;/challenges&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT (stiilifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsl link]] ===&lt;br /&gt;
&lt;br /&gt;
Toodud stiilifail muudab ülaltoodud XML vastuse inimesele kergemini loetavaks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html class=&amp;quot;no-js&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;Ando Roots&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Challengo Response&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.css&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.responsive.css&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Challengo API response&amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
            The following is a list of challenges reported by the XML API.&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;!-- Go over each challenge --&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;challenges/challenge&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h2&amp;gt;&lt;br /&gt;
              &lt;br /&gt;
              &amp;lt;!-- Challenge badge image and title --&amp;gt;&lt;br /&gt;
              &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;&lt;br /&gt;
                  http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/img&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
              &amp;lt;!-- Challenge progress, if applicable --&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:if test=&amp;quot;@progress&amp;quot;&amp;gt;&lt;br /&gt;
                (&amp;lt;span&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@progress&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/span&amp;gt;)&lt;br /&gt;
              &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
            &amp;lt;/h2&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;p class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- Table for some challenge meta-info --&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered span4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Points required to complete:&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;points_required&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Time left (hours):&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;round(duration div 1800)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;!-- List all challenge tasks --&amp;gt;&lt;br /&gt;
            &amp;lt;h3 style=&amp;quot;margin-top:140px&amp;quot;&amp;gt;Tasks (&amp;lt;xsl:value-of select=&amp;quot;@tasks&amp;quot;/&amp;gt;)&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered table-striped table-condensed&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;thead&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;ID&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Title&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Badge&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Rewards&amp;lt;/th&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/thead&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;tasks/task&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;tr&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Color the row gray if task is completed --&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;@completed&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:attribute name=&amp;quot;class&amp;quot;&amp;gt;&lt;br /&gt;
                        help-block&lt;br /&gt;
                      &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                      &amp;lt;/img&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:for-each select=&amp;quot;rewards/reward&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;li&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=1&amp;quot;&amp;gt;&lt;br /&gt;
                              Compassion&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=2&amp;quot;&amp;gt;&lt;br /&gt;
                              Strength&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=3&amp;quot;&amp;gt;&lt;br /&gt;
                              Intelligence&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;span&amp;gt;&lt;br /&gt;
                              &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                            &amp;lt;/span&amp;gt;&lt;br /&gt;
                          &amp;lt;/li&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;!-- End of challenge task table --&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;!-- End of challenge --&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD (skeemifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsd link]] ===&lt;br /&gt;
&lt;br /&gt;
Skeemifail kirjeldab päringu vastuse XML struktuuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;challenges&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;challenge&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;duration&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;points_required&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;tasks&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;task&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rewards&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;reward&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:extension base=&amp;quot;xs:unsignedByte&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:attribute name=&amp;quot;power_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;completed&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;max_points&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;tasks&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;progress&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Veebiteenus ==&lt;br /&gt;
&#039;&#039;Tähtaeg 14. aprill 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Veebiteenuseks on PHP rakendus, mis hakkab WP7 rakendusele andmeid pakkuma ja neid vastu võtma.&lt;br /&gt;
&lt;br /&gt;
== Klientrakendus ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 5. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Klientrakendus on Windows Phone 7 klient Challengo teenusele, mis kasutab projekti esimeses osas koostatud XML andmestruktuuri.&lt;br /&gt;
&lt;br /&gt;
XML-i väljastab Challengo API, mis vajab veel kirjutamist. Challengo on realiseeritud PHP-s.&lt;br /&gt;
&lt;br /&gt;
=== Feature set ===&lt;br /&gt;
&lt;br /&gt;
* Autentimine&lt;br /&gt;
** Login&lt;br /&gt;
** Logout&lt;br /&gt;
* Nimekiri aktiivsetest väljakutsetest ja nende staatustest&lt;br /&gt;
** Nimekiri väljakutse alamülesannetest ja nende staatustest&lt;br /&gt;
* Väljakutse märkimine lõpetatuks&lt;br /&gt;
** Alamülesande märkimine lõpetatuks&lt;br /&gt;
* Uue väljakutse valimine nimekirjast&lt;br /&gt;
** Väljakutse detailide ja alamülesannete vaatamine&lt;br /&gt;
* Väljakutse &amp;quot;hülgamine&amp;quot; (&#039;&#039;abandon&#039;&#039;)&lt;br /&gt;
* Kasutaja statistika näitamine&lt;br /&gt;
** Praegune punktiseis&lt;br /&gt;
** Lõpetatud väljakutsed&lt;br /&gt;
*** Lõpetatud alamülesanded&lt;br /&gt;
** Teenitud märgid&lt;br /&gt;
&lt;br /&gt;
= Meeskonna Liikmed =&lt;br /&gt;
&lt;br /&gt;
* Ando Roots &#039;&#039;anroots@itcollege.ee&#039;&#039;&lt;br /&gt;
* Mikk Pärast &#039;&#039;mparast@itcollege.ee&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Liitumine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for t in tudengid:&lt;br /&gt;
  if !t.laisk &amp;amp;&amp;amp; t.oskab_progreda:&lt;br /&gt;
    kutsu_meeskonda(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ mail -s &amp;quot;Harold&amp;quot; anroots@itcollege.ee&amp;lt;/pre&amp;gt;&lt;br /&gt;
Eeldan varasemaid teadmisi ning usaldusväärsust. Soovin, et asi ei lõppeks jälle nii, et projektijuht on kaitsmiseelsel õhtul üleval ja lõpetab üksinda projekti.&lt;br /&gt;
Ole nii kena ja anna huvist märku enne &#039;&#039;&#039;26. veebruari&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Lisad =&lt;br /&gt;
&lt;br /&gt;
== Challengo ==&lt;br /&gt;
&lt;br /&gt;
Challengo.me on Garage48 Tallinn 2011 raames alustatud veebiteenus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A social network of themed challenges, comes with a Karma profile and level-system.&lt;br /&gt;
Revenues from ads on the mobile version.&lt;br /&gt;
Team members: Ando Roots, Kristo Vaher, Valeria Gasik, Jelena Savinen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube v=&amp;quot;pPfHJD5F7sc&amp;quot; /&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=pPfHJD5F7sc Jelena tutvustab Challengo teenust]&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=46318</id>
		<title>Meeskond &quot;Harold&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=46318"/>
		<updated>2012-03-03T18:30:39Z</updated>

		<summary type="html">&lt;p&gt;Anroots: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
{| style=&amp;quot;width:100%;height: 40px; background-color:#dff0d8;border: 1px solid ##468847;color:#468847;padding:10px;font-size:16px;font-weight:bold-webkit-border-radius: 8px;-moz-border-radius: 8px;border-radius: 8px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
| Harold?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 30em; padding-left: 2em; float: right; font-size: 95%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Meeskond &#039;&#039;&amp;quot;Harold&amp;quot;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Aine:&#039;&#039;&#039;&lt;br /&gt;
| [[:Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhend:&#039;&#039;&#039;&lt;br /&gt;
| [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2012 Juhend]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Tüüp:&#039;&#039;&#039;&lt;br /&gt;
| Projekt&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Anroots]]&amp;lt;br /&amp;gt;[[User:Mparast]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhendajad:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Mposka]]&amp;lt;br /&amp;gt;[[User:Kraspel]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Semester:&#039;&#039;&#039;&lt;br /&gt;
| 2011/2012 kevad&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Kood (GitHub)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Challengo:&#039;&#039;&#039;&lt;br /&gt;
|https://github.com/anroots/Challengo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Projekt =&lt;br /&gt;
&lt;br /&gt;
Projekti kõik kolm osa keskenduvad veebiteenuse &amp;quot;Challengo&amp;quot; taasloomisele. Projekti esimene osa valmistab ette peamis(t)e päringu(te) XML vastuse struktuuri, projekti teine osa (veebiteenuse loomine) ehitab vastava API ning kolmanda osa raames (klientrakendus) realiseeritakse Windows Phone 7 rakendus.&lt;br /&gt;
&lt;br /&gt;
== Korraldus ==&lt;br /&gt;
&lt;br /&gt;
Projektiga seonduv dokumentatsioon (erandiks on käesolev wiki leht), kasutajale nähtavad tekstid ning lähtekood on kirjutatud inglise keeles. Võimalusel on kood kirjutatud hilisema I18n toe võimaldamiseks.&lt;br /&gt;
&lt;br /&gt;
Koodi haldab GitHub repositoorium, juurdepääsu saamiseks tuleb projektijuhile saata oma GitHub kasutajanimi (või &#039;&#039;pull request&#039;&#039;). Tegemist vajavaid töid näeb GitHub lehel &#039;&#039;Issues&#039;&#039; vahekaardilt ning asjakohane dokumentatsioon (API) on GitHub wiki alamjaotises.&lt;br /&gt;
&lt;br /&gt;
Lähtekood on põhjalikult kommenteeritud, muud, eraldiseisvat dokumentatsiooni koodi kohta pole.&lt;br /&gt;
&lt;br /&gt;
== XML Andmefailid ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 3. märts 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
XML andmefail kirjeldab veebiteenuse &amp;quot;[http://garage48.org/blogger/projects-on-garage48-tallinn-2011 Challengo]&amp;quot; andmeid. Andmed asuvad MYSQL andmebaasis, mille struktuur on kirjeldatud ERD mudeliga [[File:Harold_Challengo_MYSQL_ERD.png|200px|thumb|MYSQL ERD mudel]]. XML formaadis andmeid väljastab serveris asuv PHP API. Järgnevalt toodud XML näited ei pruugi projekti esimese osa nõudmiste tõttu olla vastavuses teise osana valmiva veebiteenuse tegeliku väljundiga.&lt;br /&gt;
&lt;br /&gt;
Faile saab vaadata ka võrgust: http://enos.itcollege.ee/~anroots/challengo/xml/. Soovitatav on seda teha just XSLT stiilifaili jaoks (http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml).&lt;br /&gt;
&lt;br /&gt;
=== XML [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml link]]===&lt;br /&gt;
&lt;br /&gt;
Järgnevalt on toodud lõik kasutaja praeguste väljakutsete päringust. Kasutajal on parajasti kaks aktiivset väljakutset, igal väljakutsel on veidi meta-infot, mingi hulk ülesandeid (tasks) ning igal ülesandel on üks või mitu autasu (rewards).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;Response.xsl&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!-- List of user&#039;s current challenges --&amp;gt;&lt;br /&gt;
&amp;lt;challenges&amp;gt;&lt;br /&gt;
  &amp;lt;!-- First challenge, started by the user --&amp;gt;&lt;br /&gt;
  &amp;lt;challenge id=&amp;quot;4&amp;quot; tasks=&amp;quot;6&amp;quot; progress=&amp;quot;17%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;The Improgrupp Jaa!&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Inspired by a true story, the Improgrupp Jaa! contains tasks that challenge ones spontaniety and social courage.&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;duration&amp;gt;1209600&amp;lt;/duration&amp;gt;&lt;br /&gt;
    &amp;lt;points_required&amp;gt;18&amp;lt;/points_required&amp;gt;&lt;br /&gt;
    &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;!-- Each challenge has a number of tasks that have to be completed.--&amp;gt;&lt;br /&gt;
    &amp;lt;!-- No challenge can be completed before earned points from tasks (rewards) exceed the points_required field --&amp;gt;&lt;br /&gt;
    &amp;lt;tasks max_points=&amp;quot;26&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;19&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Make a present to a homeless person&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;If you can read this, you&#039;re probably among the luckier ones. Do something for the ones who can&#039;t.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;!-- Each task yields rewards on completion. Rewards are &amp;quot;power&amp;quot; points of different categories.--&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;20&amp;quot; completed=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment a stranger&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Make a sincere compliment to someone you don&#039;t know. We could do with more praise where it&#039;s due.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;21&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Do volunteer work&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Offer yourself as a volunteer to an event or a cause.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;22&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Perform to a security camera&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Do a little dance to a security camera. It shouldn&#039;t be illegal...probably. Don&#039;t get in trouble!&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;23&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment someone for a job well done&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;When was the last time you thanked the janitor?&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;24&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Take a day off&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;This is mostly for work-a-holics: rest for a while.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
    &amp;lt;/tasks&amp;gt;&lt;br /&gt;
  &amp;lt;/challenge&amp;gt;&lt;br /&gt;
&amp;lt;/challenges&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT (stiilifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsl link]] ===&lt;br /&gt;
&lt;br /&gt;
Toodud stiilifail muudab ülaltoodud XML vastuse inimesele kergemini loetavaks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html class=&amp;quot;no-js&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;Ando Roots&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Challengo Response&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.css&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.responsive.css&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Challengo API response&amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
            The following is a list of challenges reported by the XML API.&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;!-- Go over each challenge --&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;challenges/challenge&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h2&amp;gt;&lt;br /&gt;
              &lt;br /&gt;
              &amp;lt;!-- Challenge badge image and title --&amp;gt;&lt;br /&gt;
              &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;&lt;br /&gt;
                  http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/img&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
              &amp;lt;!-- Challenge progress, if applicable --&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:if test=&amp;quot;@progress&amp;quot;&amp;gt;&lt;br /&gt;
                (&amp;lt;span&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@progress&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/span&amp;gt;)&lt;br /&gt;
              &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
            &amp;lt;/h2&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;p class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- Table for some challenge meta-info --&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered span4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Points required to complete:&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;points_required&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Time left (hours):&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;round(duration div 1800)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;!-- List all challenge tasks --&amp;gt;&lt;br /&gt;
            &amp;lt;h3 style=&amp;quot;margin-top:140px&amp;quot;&amp;gt;Tasks (&amp;lt;xsl:value-of select=&amp;quot;@tasks&amp;quot;/&amp;gt;)&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered table-striped table-condensed&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;thead&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;ID&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Title&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Badge&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Rewards&amp;lt;/th&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/thead&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;tasks/task&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;tr&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Color the row gray if task is completed --&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;@completed&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:attribute name=&amp;quot;class&amp;quot;&amp;gt;&lt;br /&gt;
                        help-block&lt;br /&gt;
                      &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                      &amp;lt;/img&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:for-each select=&amp;quot;rewards/reward&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;li&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=1&amp;quot;&amp;gt;&lt;br /&gt;
                              Compassion&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=2&amp;quot;&amp;gt;&lt;br /&gt;
                              Strength&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=3&amp;quot;&amp;gt;&lt;br /&gt;
                              Intelligence&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;span&amp;gt;&lt;br /&gt;
                              &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                            &amp;lt;/span&amp;gt;&lt;br /&gt;
                          &amp;lt;/li&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;!-- End of challenge task table --&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;!-- End of challenge --&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD (skeemifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsd link]] ===&lt;br /&gt;
&lt;br /&gt;
Skeemifail kirjeldab päringu vastuse XML struktuuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;challenges&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;challenge&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;duration&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;points_required&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;tasks&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;task&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rewards&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;reward&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:extension base=&amp;quot;xs:unsignedByte&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:attribute name=&amp;quot;power_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;completed&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;max_points&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;tasks&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;progress&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Veebiteenus ==&lt;br /&gt;
&#039;&#039;Tähtaeg 14. aprill 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Veebiteenuseks on PHP rakendus, mis hakkab WP7 rakendusele andmeid pakkuma ja neid vastu võtma.&lt;br /&gt;
&lt;br /&gt;
== Klientrakendus ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 5. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Klientrakendus on Windows Phone 7 klient Challengo teenusele, mis kasutab projekti esimeses osas koostatud XML andmestruktuuri.&lt;br /&gt;
&lt;br /&gt;
XML-i väljastab Challengo API, mis vajab veel kirjutamist. Challengo on realiseeritud PHP-s.&lt;br /&gt;
&lt;br /&gt;
=== Feature set ===&lt;br /&gt;
&lt;br /&gt;
* Autentimine&lt;br /&gt;
** Login&lt;br /&gt;
** Logout&lt;br /&gt;
* Nimekiri aktiivsetest väljakutsetest ja nende staatustest&lt;br /&gt;
** Nimekiri väljakutse alamülesannetest ja nende staatustest&lt;br /&gt;
* Väljakutse märkimine lõpetatuks&lt;br /&gt;
** Alamülesande märkimine lõpetatuks&lt;br /&gt;
* Uue väljakutse valimine nimekirjast&lt;br /&gt;
** Väljakutse detailide ja alamülesannete vaatamine&lt;br /&gt;
* Väljakutse &amp;quot;hülgamine&amp;quot; (&#039;&#039;abandon&#039;&#039;)&lt;br /&gt;
* Kasutaja statistika näitamine&lt;br /&gt;
** Praegune punktiseis&lt;br /&gt;
** Lõpetatud väljakutsed&lt;br /&gt;
*** Lõpetatud alamülesanded&lt;br /&gt;
** Teenitud märgid&lt;br /&gt;
&lt;br /&gt;
= Meeskonna Liikmed =&lt;br /&gt;
&lt;br /&gt;
* Ando Roots &#039;&#039;anroots@itcollege.ee&#039;&#039;&lt;br /&gt;
* Mikk Pärast &#039;&#039;mparast@itcollege.ee&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Liitumine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for t in tudengid:&lt;br /&gt;
  if !t.laisk &amp;amp;&amp;amp; t.oskab_progreda:&lt;br /&gt;
    kutsu_meeskonda(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ mail -s &amp;quot;Harold&amp;quot; anroots@itcollege.ee&amp;lt;/pre&amp;gt;&lt;br /&gt;
Eeldan varasemaid teadmisi ning usaldusväärsust. Soovin, et asi ei lõppeks jälle nii, et projektijuht on kaitsmiseelsel õhtul üleval ja lõpetab üksinda projekti.&lt;br /&gt;
Ole nii kena ja anna huvist märku enne &#039;&#039;&#039;26. veebruari&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Lisad =&lt;br /&gt;
&lt;br /&gt;
== Challengo ==&lt;br /&gt;
&lt;br /&gt;
Challengo.me on Garage48 Tallinn 2011 raames alustatud veebiteenus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A social network of themed challenges, comes with a Karma profile and level-system.&lt;br /&gt;
Revenues from ads on the mobile version.&lt;br /&gt;
Team members: Ando Roots, Kristo Vaher, Valeria Gasik, Jelena Savinen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube v=&amp;quot;pPfHJD5F7sc&amp;quot; /&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=pPfHJD5F7sc Jelena tutvustab Challengo teenust]&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=46317</id>
		<title>Meeskond &quot;Harold&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Meeskond_%22Harold%22&amp;diff=46317"/>
		<updated>2012-03-03T18:30:12Z</updated>

		<summary type="html">&lt;p&gt;Anroots: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
{| style=&amp;quot;width:100%;height: 40px; background-color:#dff0d8;border: 1px solid ##468847;color:#B94A48;padding:10px;font-size:16px;font-weight:bold-webkit-border-radius: 8px;-moz-border-radius: 8px;border-radius: 8px;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
| Harold?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 30em; padding-left: 2em; float: right; font-size: 95%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background: #1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Meeskond &#039;&#039;&amp;quot;Harold&amp;quot;&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Aine:&#039;&#039;&#039;&lt;br /&gt;
| [[:Category:Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhend:&#039;&#039;&#039;&lt;br /&gt;
| [https://wiki.itcollege.ee/index.php/Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2012 Juhend]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Tüüp:&#039;&#039;&#039;&lt;br /&gt;
| Projekt&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Liikmed:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Anroots]]&amp;lt;br /&amp;gt;[[User:Mparast]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Juhendajad:&#039;&#039;&#039;&lt;br /&gt;
| [[User:Mposka]]&amp;lt;br /&amp;gt;[[User:Kraspel]]&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Semester:&#039;&#039;&#039;&lt;br /&gt;
| 2011/2012 kevad&lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#1A151A;color:#D5E8BD; text-align:center;&amp;quot; | &#039;&#039;&#039;Kood (GitHub)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|-style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Challengo:&#039;&#039;&#039;&lt;br /&gt;
|https://github.com/anroots/Challengo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Projekt =&lt;br /&gt;
&lt;br /&gt;
Projekti kõik kolm osa keskenduvad veebiteenuse &amp;quot;Challengo&amp;quot; taasloomisele. Projekti esimene osa valmistab ette peamis(t)e päringu(te) XML vastuse struktuuri, projekti teine osa (veebiteenuse loomine) ehitab vastava API ning kolmanda osa raames (klientrakendus) realiseeritakse Windows Phone 7 rakendus.&lt;br /&gt;
&lt;br /&gt;
== Korraldus ==&lt;br /&gt;
&lt;br /&gt;
Projektiga seonduv dokumentatsioon (erandiks on käesolev wiki leht), kasutajale nähtavad tekstid ning lähtekood on kirjutatud inglise keeles. Võimalusel on kood kirjutatud hilisema I18n toe võimaldamiseks.&lt;br /&gt;
&lt;br /&gt;
Koodi haldab GitHub repositoorium, juurdepääsu saamiseks tuleb projektijuhile saata oma GitHub kasutajanimi (või &#039;&#039;pull request&#039;&#039;). Tegemist vajavaid töid näeb GitHub lehel &#039;&#039;Issues&#039;&#039; vahekaardilt ning asjakohane dokumentatsioon (API) on GitHub wiki alamjaotises.&lt;br /&gt;
&lt;br /&gt;
Lähtekood on põhjalikult kommenteeritud, muud, eraldiseisvat dokumentatsiooni koodi kohta pole.&lt;br /&gt;
&lt;br /&gt;
== XML Andmefailid ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 3. märts 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
XML andmefail kirjeldab veebiteenuse &amp;quot;[http://garage48.org/blogger/projects-on-garage48-tallinn-2011 Challengo]&amp;quot; andmeid. Andmed asuvad MYSQL andmebaasis, mille struktuur on kirjeldatud ERD mudeliga [[File:Harold_Challengo_MYSQL_ERD.png|200px|thumb|MYSQL ERD mudel]]. XML formaadis andmeid väljastab serveris asuv PHP API. Järgnevalt toodud XML näited ei pruugi projekti esimese osa nõudmiste tõttu olla vastavuses teise osana valmiva veebiteenuse tegeliku väljundiga.&lt;br /&gt;
&lt;br /&gt;
Faile saab vaadata ka võrgust: http://enos.itcollege.ee/~anroots/challengo/xml/. Soovitatav on seda teha just XSLT stiilifaili jaoks (http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml).&lt;br /&gt;
&lt;br /&gt;
=== XML [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xml link]]===&lt;br /&gt;
&lt;br /&gt;
Järgnevalt on toodud lõik kasutaja praeguste väljakutsete päringust. Kasutajal on parajasti kaks aktiivset väljakutset, igal väljakutsel on veidi meta-infot, mingi hulk ülesandeid (tasks) ning igal ülesandel on üks või mitu autasu (rewards).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;?xml-stylesheet type=&amp;quot;text/xsl&amp;quot; href=&amp;quot;Response.xsl&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!-- List of user&#039;s current challenges --&amp;gt;&lt;br /&gt;
&amp;lt;challenges&amp;gt;&lt;br /&gt;
  &amp;lt;!-- First challenge, started by the user --&amp;gt;&lt;br /&gt;
  &amp;lt;challenge id=&amp;quot;4&amp;quot; tasks=&amp;quot;6&amp;quot; progress=&amp;quot;17%&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;The Improgrupp Jaa!&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;Inspired by a true story, the Improgrupp Jaa! contains tasks that challenge ones spontaniety and social courage.&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;duration&amp;gt;1209600&amp;lt;/duration&amp;gt;&lt;br /&gt;
    &amp;lt;points_required&amp;gt;18&amp;lt;/points_required&amp;gt;&lt;br /&gt;
    &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;!-- Each challenge has a number of tasks that have to be completed.--&amp;gt;&lt;br /&gt;
    &amp;lt;!-- No challenge can be completed before earned points from tasks (rewards) exceed the points_required field --&amp;gt;&lt;br /&gt;
    &amp;lt;tasks max_points=&amp;quot;26&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;19&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Make a present to a homeless person&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;If you can read this, you&#039;re probably among the luckier ones. Do something for the ones who can&#039;t.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;!-- Each task yields rewards on completion. Rewards are &amp;quot;power&amp;quot; points of different categories.--&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;20&amp;quot; completed=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment a stranger&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Make a sincere compliment to someone you don&#039;t know. We could do with more praise where it&#039;s due.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;21&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Do volunteer work&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Offer yourself as a volunteer to an event or a cause.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;22&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Perform to a security camera&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;Do a little dance to a security camera. It shouldn&#039;t be illegal...probably. Don&#039;t get in trouble!&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;2&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;23&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Compliment someone for a job well done&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;When was the last time you thanked the janitor?&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;1&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;3&amp;quot;&amp;gt;1&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
      &amp;lt;task id=&amp;quot;24&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Take a day off&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;description&amp;gt;This is mostly for work-a-holics: rest for a while.&amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;badge_id&amp;gt;4&amp;lt;/badge_id&amp;gt;&lt;br /&gt;
        &amp;lt;rewards&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;1&amp;quot;&amp;gt;2&amp;lt;/reward&amp;gt;&lt;br /&gt;
          &amp;lt;reward power_id=&amp;quot;2&amp;quot;&amp;gt;4&amp;lt;/reward&amp;gt;&lt;br /&gt;
        &amp;lt;/rewards&amp;gt;&lt;br /&gt;
      &amp;lt;/task&amp;gt;&lt;br /&gt;
    &amp;lt;/tasks&amp;gt;&lt;br /&gt;
  &amp;lt;/challenge&amp;gt;&lt;br /&gt;
&amp;lt;/challenges&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSLT (stiilifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsl link]] ===&lt;br /&gt;
&lt;br /&gt;
Toodud stiilifail muudab ülaltoodud XML vastuse inimesele kergemini loetavaks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;html class=&amp;quot;no-js&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;Ando Roots&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Challengo Response&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.css&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;http://i.jaa.ee/assets/bootstrap-2.0/css/bootstrap.min.responsive.css&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/head&amp;gt;&lt;br /&gt;
      &amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;div class=&amp;quot;container&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;h1&amp;gt;Challengo API response&amp;lt;/h1&amp;gt;&lt;br /&gt;
          &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
            The following is a list of challenges reported by the XML API.&lt;br /&gt;
          &amp;lt;/p&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
          &lt;br /&gt;
          &amp;lt;!-- Go over each challenge --&amp;gt;&lt;br /&gt;
          &amp;lt;xsl:for-each select=&amp;quot;challenges/challenge&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;h2&amp;gt;&lt;br /&gt;
              &lt;br /&gt;
              &amp;lt;!-- Challenge badge image and title --&amp;gt;&lt;br /&gt;
              &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;&lt;br /&gt;
                  http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
              &amp;lt;/img&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
              &amp;lt;!-- Challenge progress, if applicable --&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:if test=&amp;quot;@progress&amp;quot;&amp;gt;&lt;br /&gt;
                (&amp;lt;span&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:value-of select=&amp;quot;@progress&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;/span&amp;gt;)&lt;br /&gt;
              &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
            &amp;lt;/h2&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;p class=&amp;quot;well&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;!-- Table for some challenge meta-info --&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered span4&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Points required to complete:&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;points_required&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;&lt;br /&gt;
                    Time left (hours):&lt;br /&gt;
                  &amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;td&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;round(duration div 1800)&amp;quot;/&amp;gt;&lt;br /&gt;
                  &amp;lt;/td&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;div class=&amp;quot;clearfix&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;            &lt;br /&gt;
            &lt;br /&gt;
            &amp;lt;!-- List all challenge tasks --&amp;gt;&lt;br /&gt;
            &amp;lt;h3 style=&amp;quot;margin-top:140px&amp;quot;&amp;gt;Tasks (&amp;lt;xsl:value-of select=&amp;quot;@tasks&amp;quot;/&amp;gt;)&amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;table class=&amp;quot;table table-bordered table-striped table-condensed&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;thead&amp;gt;&lt;br /&gt;
                &amp;lt;tr&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;ID&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Title&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Badge&amp;lt;/th&amp;gt;&lt;br /&gt;
                  &amp;lt;th&amp;gt;Rewards&amp;lt;/th&amp;gt;&lt;br /&gt;
                &amp;lt;/tr&amp;gt;&lt;br /&gt;
              &amp;lt;/thead&amp;gt;&lt;br /&gt;
              &amp;lt;tbody&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;tasks/task&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;tr&amp;gt;&lt;br /&gt;
                    &amp;lt;!-- Color the row gray if task is completed --&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:if test=&amp;quot;@completed&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:attribute name=&amp;quot;class&amp;quot;&amp;gt;&lt;br /&gt;
                        help-block&lt;br /&gt;
                      &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                    &lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@id&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;p class=&amp;quot;help-block&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:value-of select=&amp;quot;description&amp;quot;/&amp;gt;&lt;br /&gt;
                      &amp;lt;/p&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;img alt=&amp;quot;Challenge badge&amp;quot; height=&amp;quot;48&amp;quot; width=&amp;quot;48&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;http://enos.itcollege.ee/~anroots/challengo/badges/&amp;lt;xsl:value-of select=&amp;quot;badge_id&amp;quot;/&amp;gt;.png&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                      &amp;lt;/img&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                    &amp;lt;td&amp;gt;&lt;br /&gt;
                      &amp;lt;ul&amp;gt;&lt;br /&gt;
                        &amp;lt;xsl:for-each select=&amp;quot;rewards/reward&amp;quot;&amp;gt;&lt;br /&gt;
                          &amp;lt;li&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=1&amp;quot;&amp;gt;&lt;br /&gt;
                              Compassion&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=2&amp;quot;&amp;gt;&lt;br /&gt;
                              Strength&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;xsl:if test=&amp;quot;(@power_id)=3&amp;quot;&amp;gt;&lt;br /&gt;
                              Intelligence&lt;br /&gt;
                            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
                            &amp;lt;span&amp;gt;&lt;br /&gt;
                              &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                            &amp;lt;/span&amp;gt;&lt;br /&gt;
                          &amp;lt;/li&amp;gt;&lt;br /&gt;
                        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
                      &amp;lt;/ul&amp;gt;&lt;br /&gt;
                    &amp;lt;/td&amp;gt;&lt;br /&gt;
                  &amp;lt;/tr&amp;gt;&lt;br /&gt;
                &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
              &amp;lt;/tbody&amp;gt;&lt;br /&gt;
            &amp;lt;/table&amp;gt;&lt;br /&gt;
            &amp;lt;!-- End of challenge task table --&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
          &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
          &amp;lt;!-- End of challenge --&amp;gt;&lt;br /&gt;
          &lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
      &amp;lt;/body&amp;gt;&lt;br /&gt;
    &amp;lt;/html&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XSD (skeemifail) [[http://enos.itcollege.ee/~anroots/challengo/xml/Response.xsd link]] ===&lt;br /&gt;
&lt;br /&gt;
Skeemifail kirjeldab päringu vastuse XML struktuuri.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;xs:schema attributeFormDefault=&amp;quot;unqualified&amp;quot; elementFormDefault=&amp;quot;qualified&amp;quot; xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xs:element name=&amp;quot;challenges&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
      &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
        &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;challenge&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
            &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;duration&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;points_required&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
              &amp;lt;xs:element name=&amp;quot;tasks&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;task&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;title&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;description&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;badge_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:element name=&amp;quot;rewards&amp;quot;&amp;gt;&lt;br /&gt;
                            &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                              &amp;lt;xs:sequence&amp;gt;&lt;br /&gt;
                                &amp;lt;xs:element maxOccurs=&amp;quot;unbounded&amp;quot; name=&amp;quot;reward&amp;quot;&amp;gt;&lt;br /&gt;
                                  &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:simpleContent&amp;gt;&lt;br /&gt;
                                      &amp;lt;xs:extension base=&amp;quot;xs:unsignedByte&amp;quot;&amp;gt;&lt;br /&gt;
                                        &amp;lt;xs:attribute name=&amp;quot;power_id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                      &amp;lt;/xs:extension&amp;gt;&lt;br /&gt;
                                    &amp;lt;/xs:simpleContent&amp;gt;&lt;br /&gt;
                                  &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                                &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                              &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                            &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                        &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:attribute name=&amp;quot;completed&amp;quot; type=&amp;quot;xs:boolean&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
                    &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
                  &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
                  &amp;lt;xs:attribute name=&amp;quot;max_points&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
              &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
            &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;tasks&amp;quot; type=&amp;quot;xs:unsignedByte&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xs:attribute name=&amp;quot;progress&amp;quot; type=&amp;quot;xs:string&amp;quot; use=&amp;quot;optional&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
        &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
      &amp;lt;/xs:sequence&amp;gt;&lt;br /&gt;
    &amp;lt;/xs:complexType&amp;gt;&lt;br /&gt;
  &amp;lt;/xs:element&amp;gt;&lt;br /&gt;
&amp;lt;/xs:schema&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Veebiteenus ==&lt;br /&gt;
&#039;&#039;Tähtaeg 14. aprill 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Veebiteenuseks on PHP rakendus, mis hakkab WP7 rakendusele andmeid pakkuma ja neid vastu võtma.&lt;br /&gt;
&lt;br /&gt;
== Klientrakendus ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tähtaeg 5. mai 2012&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Klientrakendus on Windows Phone 7 klient Challengo teenusele, mis kasutab projekti esimeses osas koostatud XML andmestruktuuri.&lt;br /&gt;
&lt;br /&gt;
XML-i väljastab Challengo API, mis vajab veel kirjutamist. Challengo on realiseeritud PHP-s.&lt;br /&gt;
&lt;br /&gt;
=== Feature set ===&lt;br /&gt;
&lt;br /&gt;
* Autentimine&lt;br /&gt;
** Login&lt;br /&gt;
** Logout&lt;br /&gt;
* Nimekiri aktiivsetest väljakutsetest ja nende staatustest&lt;br /&gt;
** Nimekiri väljakutse alamülesannetest ja nende staatustest&lt;br /&gt;
* Väljakutse märkimine lõpetatuks&lt;br /&gt;
** Alamülesande märkimine lõpetatuks&lt;br /&gt;
* Uue väljakutse valimine nimekirjast&lt;br /&gt;
** Väljakutse detailide ja alamülesannete vaatamine&lt;br /&gt;
* Väljakutse &amp;quot;hülgamine&amp;quot; (&#039;&#039;abandon&#039;&#039;)&lt;br /&gt;
* Kasutaja statistika näitamine&lt;br /&gt;
** Praegune punktiseis&lt;br /&gt;
** Lõpetatud väljakutsed&lt;br /&gt;
*** Lõpetatud alamülesanded&lt;br /&gt;
** Teenitud märgid&lt;br /&gt;
&lt;br /&gt;
= Meeskonna Liikmed =&lt;br /&gt;
&lt;br /&gt;
* Ando Roots &#039;&#039;anroots@itcollege.ee&#039;&#039;&lt;br /&gt;
* Mikk Pärast &#039;&#039;mparast@itcollege.ee&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Liitumine ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for t in tudengid:&lt;br /&gt;
  if !t.laisk &amp;amp;&amp;amp; t.oskab_progreda:&lt;br /&gt;
    kutsu_meeskonda(t)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ mail -s &amp;quot;Harold&amp;quot; anroots@itcollege.ee&amp;lt;/pre&amp;gt;&lt;br /&gt;
Eeldan varasemaid teadmisi ning usaldusväärsust. Soovin, et asi ei lõppeks jälle nii, et projektijuht on kaitsmiseelsel õhtul üleval ja lõpetab üksinda projekti.&lt;br /&gt;
Ole nii kena ja anna huvist märku enne &#039;&#039;&#039;26. veebruari&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
= Lisad =&lt;br /&gt;
&lt;br /&gt;
== Challengo ==&lt;br /&gt;
&lt;br /&gt;
Challengo.me on Garage48 Tallinn 2011 raames alustatud veebiteenus.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A social network of themed challenges, comes with a Karma profile and level-system.&lt;br /&gt;
Revenues from ads on the mobile version.&lt;br /&gt;
Team members: Ando Roots, Kristo Vaher, Valeria Gasik, Jelena Savinen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;youtube v=&amp;quot;pPfHJD5F7sc&amp;quot; /&amp;gt;&lt;br /&gt;
[http://www.youtube.com/watch?v=pPfHJD5F7sc Jelena tutvustab Challengo teenust]&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=ITKGrades.rb&amp;diff=46240</id>
		<title>ITKGrades.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=ITKGrades.rb&amp;diff=46240"/>
		<updated>2012-03-02T22:01:14Z</updated>

		<summary type="html">&lt;p&gt;Anroots: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tegemist on Ruby klassiga, mis tagastab [[http://ruby-doc.org/core-1.9.3/Hash.html Hash]]&#039;i üliõpilase hinnetega. Hinnete saamiseks logib skript mechanizer library abiga ÕISi ning otsib hinded hinnetelehe HTML-st välja.&lt;br /&gt;
&lt;br /&gt;
= Kasutus =&lt;br /&gt;
&lt;br /&gt;
[[File: Menu 012.png|Näide ühest võimalikust implementatsioonist]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
# ITKGrade usage example&lt;br /&gt;
#!/usr/bin/env ruby&lt;br /&gt;
&lt;br /&gt;
require &amp;quot;itk_grades&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Create instance and save login data&lt;br /&gt;
ITK = ITKGrades.new(&amp;quot;user&amp;quot;, &amp;quot;pass&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Fetch &amp;amp; scrape grades from ÕIS.&lt;br /&gt;
ITK.fetch&lt;br /&gt;
&lt;br /&gt;
#ITK.grades # Returns a hash of all grades&lt;br /&gt;
&lt;br /&gt;
# Print all grades&lt;br /&gt;
ITK.print&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Kood =&lt;br /&gt;
&lt;br /&gt;
Vaata koodi GitHub keskkonnas: https://gist.github.com/1944799&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/env ruby&lt;br /&gt;
&lt;br /&gt;
# Estonian IT College grade sheet scraper&lt;br /&gt;
# A dirty version for just getting the job done.&lt;br /&gt;
# Maybe prettify in the future.&lt;br /&gt;
#&lt;br /&gt;
# Version 1.1&lt;br /&gt;
# Author &amp;quot;Ando Roots&amp;quot; &amp;lt;anroots@itcollege.ee&amp;gt;&lt;br /&gt;
# Created 29.02.2012&lt;br /&gt;
# Licence Apache v2 http://www.apache.org/licenses/LICENSE-2.0.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
require &amp;quot;rubygems&amp;quot;&lt;br /&gt;
require &amp;quot;mechanize&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Scrapes student grades from ITK ÕIS&lt;br /&gt;
# and returns a hash in the format&lt;br /&gt;
# {&lt;br /&gt;
# 	subject_name =&amp;gt; {&lt;br /&gt;
#		grade_name =&amp;gt; grade&lt;br /&gt;
#	},&lt;br /&gt;
# }&lt;br /&gt;
#&lt;br /&gt;
# Example usage:&lt;br /&gt;
# &lt;br /&gt;
# ITK = ITKGrades.new(&amp;quot;MY_USERNAME&amp;quot;, &amp;quot;MY_PASSWORD&amp;quot;) # Instance and login&lt;br /&gt;
# ITK.fetch # Actually fetch and scrape the grades&lt;br /&gt;
# ITK.print # Print out the hash of my grades&lt;br /&gt;
#&lt;br /&gt;
class ITKGrades&lt;br /&gt;
&lt;br /&gt;
	@@login_url = &amp;quot;https://itcollege.ois.ee/et/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	@username&lt;br /&gt;
	@password&lt;br /&gt;
&lt;br /&gt;
	@grades&lt;br /&gt;
&lt;br /&gt;
	# Accessor for grades&lt;br /&gt;
	def grades&lt;br /&gt;
		@grades&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	# Save login data&lt;br /&gt;
	def initialize(username, password)&lt;br /&gt;
		@username = username&lt;br /&gt;
		@password = password&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	# Get HTML for the grades page&lt;br /&gt;
	def get_grades_page&lt;br /&gt;
&lt;br /&gt;
		agent = Mechanize.new&lt;br /&gt;
		page = agent.get(@@login_url)&lt;br /&gt;
&lt;br /&gt;
		login_form = page.form&lt;br /&gt;
&lt;br /&gt;
		login_form.username = @username&lt;br /&gt;
		login_form.pw = @password&lt;br /&gt;
&lt;br /&gt;
		page = agent.submit(login_form, login_form.button)&lt;br /&gt;
&lt;br /&gt;
		return agent.page.link_with(:text =&amp;gt; &#039;Minu hinded&#039;).click&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	# Scrape grades into grades hash from the grades page&lt;br /&gt;
	def scrape_grades(page)&lt;br /&gt;
		&lt;br /&gt;
		@grades = {}&lt;br /&gt;
		grade_rows = page.search(&#039;#mainWindow table.data tr&#039;)&lt;br /&gt;
		current_subject = nil;&lt;br /&gt;
		&lt;br /&gt;
		grade_rows.each do |row|&lt;br /&gt;
			if row.at_css(&#039;th&#039;) then&lt;br /&gt;
				current_subject = row.search(&#039;th&#039;).text &lt;br /&gt;
				@grades[current_subject] = {}&lt;br /&gt;
				next&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			paper = row.search(&#039;td:first&#039;).text.gsub(/[-\t]/, &#039;&#039;).strip&lt;br /&gt;
			grade = row.search(&#039;td:last&#039;).text.gsub(/[-\t]/, &#039;&#039;).strip&lt;br /&gt;
	&lt;br /&gt;
			if paper.empty? || grade.empty? then&lt;br /&gt;
				next&lt;br /&gt;
			end&lt;br /&gt;
	&lt;br /&gt;
			@grades[current_subject][paper] = grade&lt;br /&gt;
	&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	# Fetch grades. Call this first!&lt;br /&gt;
	def fetch&lt;br /&gt;
		scrape_grades(get_grades_page)&lt;br /&gt;
		return @grades&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	# Print fetched grades&lt;br /&gt;
	def print&lt;br /&gt;
&lt;br /&gt;
		if (@grades.length == 0)&lt;br /&gt;
			print &amp;quot;No grades&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		# Go over each grade&lt;br /&gt;
		@grades.each {|subj, grades| &lt;br /&gt;
	&lt;br /&gt;
			# Print out only subjects that have at least one grade&lt;br /&gt;
			if grades.length &amp;gt; 0 then&lt;br /&gt;
				puts &amp;quot;== &amp;quot; + subj + &amp;quot; ==\n&amp;quot; # Print subj name&lt;br /&gt;
	&lt;br /&gt;
				# For each grade in that subject...&lt;br /&gt;
				grades.each {|task,grade|&lt;br /&gt;
					puts &amp;quot;\t#{task}: #{grade}\n&amp;quot;&lt;br /&gt;
				}&lt;br /&gt;
			end&lt;br /&gt;
		}	&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Autor =&lt;br /&gt;
&lt;br /&gt;
Koodi kirjutas [[User:Anroots]] 2012 veebruaris, sest ta arvas, et uutest hinnetest oleks tore näiteks [https://pood.tele2.ee/et/services/545 SMS teavitusi] saada.&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=File:Menu_012.png&amp;diff=46239</id>
		<title>File:Menu 012.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=File:Menu_012.png&amp;diff=46239"/>
		<updated>2012-03-02T21:59:52Z</updated>

		<summary type="html">&lt;p&gt;Anroots: Näide ITKGrades.rb kasutusest&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Näide [[ITKGrades.rb]] kasutusest&lt;/div&gt;</summary>
		<author><name>Anroots</name></author>
	</entry>
</feed>