<?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=Arzirk</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=Arzirk"/>
	<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php/Special:Contributions/Arzirk"/>
	<updated>2026-05-07T18:09:08Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Team_Echo&amp;diff=120135</id>
		<title>Team Echo</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Team_Echo&amp;diff=120135"/>
		<updated>2017-04-16T18:54:26Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: Add pretty pictures&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Team Echo Võrgurakendused II =&lt;br /&gt;
&lt;br /&gt;
* Mihkel Vajak&lt;br /&gt;
* Janno Oolo&lt;br /&gt;
* Mari-Liis Oldja&lt;br /&gt;
* Arti Zirk&lt;br /&gt;
&lt;br /&gt;
=Projekt=&lt;br /&gt;
==Veebiteenuse analüüs==&lt;br /&gt;
=== Kirjeldus ===&lt;br /&gt;
Team Echo on kooli videosalvestuste mahamängimise veebirakendus. Selle abil konverteeritakse olemasolevad flash videod mp4 formaati, et seda oleks hea ja mugav meie veebirakenduses maha mängida. Selle boonuseks on sujuv ja probleemivaba salvestuste vaatamine, ning vanade salvestuste kätte saamine kui tulevikus echo360 tarkvara uueneb. Salvestused on kategoriseeritud kooli ja aine alusel. Salvestuste vaatamiseks pole vaja kasutajat, kuigi redigeerimiseks/lisamiseks on vaja.&lt;br /&gt;
&lt;br /&gt;
====Must have====&lt;br /&gt;
&lt;br /&gt;
* Video konverteerimine&lt;br /&gt;
* Kategoriseerimine EIK ainete alusel&lt;br /&gt;
* Video striimimine meie veebiliides&lt;br /&gt;
* Videode lisamine / eemaldamine&lt;br /&gt;
* Logi kirjete kogumine&lt;br /&gt;
* mp4 exportimine&lt;br /&gt;
&lt;br /&gt;
====Nice to have====&lt;br /&gt;
&lt;br /&gt;
* Timestamp ja nende avalik kommenteerimine salvestusele&lt;br /&gt;
* Konveteerimise progress&lt;br /&gt;
* Kategoriseerimine Kooli ja aine alusel&lt;br /&gt;
* Kooli kasutajaga sisselogimine&lt;br /&gt;
* Videote otsing aine/õppejõu alusel&lt;br /&gt;
* Saab vaadata playlist alusel&lt;br /&gt;
&lt;br /&gt;
====Joonised====&lt;br /&gt;
[[File:Echo360teenustejoonis.jpg|500px|]]&lt;br /&gt;
&lt;br /&gt;
[[File:Echo360erdversion1.png|1000px|]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=XML=&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; id=&amp;quot;mw-customtoggle-xmlThings&amp;quot; style=&amp;quot;float:left&amp;quot;&amp;gt;&lt;br /&gt;
=== Miks ei leia siit xml failist CDATA kirjeid? ===&lt;br /&gt;
Sest, CDATA ei anna midagi juurde xml masin lugemisele. Sama hästi võiks problemaatilised märgid asendada vajalike paomärkidega mis oleks ka palju turvalisem.&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;Echo-html.xslt&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;echo&amp;gt;&lt;br /&gt;
    &amp;lt;videos&amp;gt;&lt;br /&gt;
      &amp;lt;video id=&amp;quot;1&amp;quot; view-count=&amp;quot;69&amp;quot; author-id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Mihkli rännak&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;streams&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;primary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/webm&amp;quot;&amp;gt;https://u.wut.ee/ookutsu.webm&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/mp3&amp;quot;&amp;gt;https://media/id/audio.mp3&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/mp4&amp;quot;&amp;gt;https://media/id/video.mp4&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;secondary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/*&amp;quot;&amp;gt;https://media/id/audio2&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
        &amp;lt;/streams&amp;gt;&lt;br /&gt;
        &amp;lt;metadata&amp;gt;&lt;br /&gt;
          &amp;lt;description&amp;gt;&lt;br /&gt;
            Väga kurb&lt;br /&gt;
          &amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/metadata&amp;gt;&lt;br /&gt;
        &amp;lt;comments&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;1&amp;quot; post-timestamp=&amp;quot;1489683470&amp;quot;&amp;gt;&lt;br /&gt;
            Norm värk&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;/comments&amp;gt;&lt;br /&gt;
      &amp;lt;/video&amp;gt;&lt;br /&gt;
      &amp;lt;video id=&amp;quot;2&amp;quot; view-count=&amp;quot;69&amp;quot; author-id=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Lahe video&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;streams&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;primary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/webm&amp;quot;&amp;gt;https://u.wut.ee/youfuckedup.webm&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/mp3&amp;quot;&amp;gt;https://media/id/audio.mp3&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/mp4&amp;quot;&amp;gt;https://media/id/video.mp4&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;secondary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/*&amp;quot;&amp;gt;https://media/id/audio2&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
        &amp;lt;/streams&amp;gt;&lt;br /&gt;
        &amp;lt;metadata&amp;gt;&lt;br /&gt;
          &amp;lt;description&amp;gt;&lt;br /&gt;
            See on väga äge video on see&lt;br /&gt;
          &amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/metadata&amp;gt;&lt;br /&gt;
        &amp;lt;comments&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;1&amp;quot; post-timestamp=&amp;quot;1489683470&amp;quot;&amp;gt;&lt;br /&gt;
            Norm värk&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;2&amp;quot; post-timestamp=&amp;quot;1489683470&amp;quot;&amp;gt;&lt;br /&gt;
            Norm värk 2&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;/comments&amp;gt;&lt;br /&gt;
      &amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;video id=&amp;quot;3&amp;quot; view-count=&amp;quot;69&amp;quot; author-id=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Nalja kah&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;streams&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;primary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/webm&amp;quot;&amp;gt;https://u.wut.ee/perlvspython.webm&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/mp3&amp;quot;&amp;gt;https://media/id/audio.mp3&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/mp4&amp;quot;&amp;gt;https://media/id/video.mp4&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;secondary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/*&amp;quot;&amp;gt;https://media/id/audio2&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
        &amp;lt;/streams&amp;gt;&lt;br /&gt;
        &amp;lt;metadata&amp;gt;&lt;br /&gt;
          &amp;lt;description&amp;gt;&lt;br /&gt;
            Väga hea huumor&lt;br /&gt;
          &amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/metadata&amp;gt;&lt;br /&gt;
        &amp;lt;comments&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;1&amp;quot; post-timestamp=&amp;quot;1489683470&amp;quot;&amp;gt;&lt;br /&gt;
            Norm värk&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;/comments&amp;gt;&lt;br /&gt;
      &amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;video id=&amp;quot;4&amp;quot; view-count=&amp;quot;69&amp;quot; author-id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Arti areng&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;streams&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;primary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/webm&amp;quot;&amp;gt;https://u.wut.ee/sittmissitt.webm&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/mp3&amp;quot;&amp;gt;https://media/id/audio.mp3&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/mp4&amp;quot;&amp;gt;https://media/id/video.mp4&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;secondary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/*&amp;quot;&amp;gt;https://media/id/audio2&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
        &amp;lt;/streams&amp;gt;&lt;br /&gt;
        &amp;lt;metadata&amp;gt;&lt;br /&gt;
          &amp;lt;description&amp;gt;&lt;br /&gt;
            Väga kurb&lt;br /&gt;
          &amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/metadata&amp;gt;&lt;br /&gt;
        &amp;lt;comments&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;1&amp;quot; post-timestamp=&amp;quot;1489683470&amp;quot;&amp;gt;&lt;br /&gt;
            Imelik oli&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;/comments&amp;gt;&lt;br /&gt;
      &amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;video id=&amp;quot;4&amp;quot; view-count=&amp;quot;69&amp;quot; author-id=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Oldja laulud&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;streams&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;primary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/webm&amp;quot;&amp;gt;https://u.wut.ee/healtscare.webm&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/mp3&amp;quot;&amp;gt;https://media/id/audio.mp3&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/mp4&amp;quot;&amp;gt;https://media/id/video.mp4&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;secondary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/*&amp;quot;&amp;gt;https://media/id/audio2&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
        &amp;lt;/streams&amp;gt;&lt;br /&gt;
        &amp;lt;metadata&amp;gt;&lt;br /&gt;
          &amp;lt;description&amp;gt;&lt;br /&gt;
            Draama Queen&lt;br /&gt;
          &amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/metadata&amp;gt;&lt;br /&gt;
        &amp;lt;comments&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;1&amp;quot; post-timestamp=&amp;quot;1489683420&amp;quot;&amp;gt;&lt;br /&gt;
            Norm värk&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;/comments&amp;gt;&lt;br /&gt;
      &amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;video id=&amp;quot;4&amp;quot; view-count=&amp;quot;69&amp;quot; author-id=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Osa 13 ehk Oolo kadumine&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;streams&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;primary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/webm&amp;quot;&amp;gt;https://u.wut.ee/healtscare.webm&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/mp3&amp;quot;&amp;gt;https://media/id/audio.mp3&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/mp4&amp;quot;&amp;gt;https://media/id/video.mp4&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;secondary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/*&amp;quot;&amp;gt;https://media/id/audio2&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
        &amp;lt;/streams&amp;gt;&lt;br /&gt;
        &amp;lt;metadata&amp;gt;&lt;br /&gt;
          &amp;lt;description&amp;gt;&lt;br /&gt;
            Lihtsalt kadus ära&lt;br /&gt;
          &amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/metadata&amp;gt;&lt;br /&gt;
        &amp;lt;comments&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;1&amp;quot; post-timestamp=&amp;quot;1489683470&amp;quot;&amp;gt;&lt;br /&gt;
            Norm värk&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;/comments&amp;gt;&lt;br /&gt;
      &amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/videos&amp;gt;&lt;br /&gt;
    &amp;lt;users&amp;gt;&lt;br /&gt;
      &amp;lt;user id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;username&amp;gt;admin&amp;lt;/username&amp;gt;&lt;br /&gt;
        &amp;lt;full-name&amp;gt;Admin&amp;lt;/full-name&amp;gt;&lt;br /&gt;
      &amp;lt;/user&amp;gt;&lt;br /&gt;
      &amp;lt;user id=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;username&amp;gt;oolo&amp;lt;/username&amp;gt;&lt;br /&gt;
        &amp;lt;full-name&amp;gt;Oolo&amp;lt;/full-name&amp;gt;&lt;br /&gt;
      &amp;lt;/user&amp;gt;&lt;br /&gt;
      &amp;lt;user id=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;username&amp;gt;zirk&amp;lt;/username&amp;gt;&lt;br /&gt;
        &amp;lt;full-name&amp;gt;Hr. Zirk&amp;lt;/full-name&amp;gt;&lt;br /&gt;
      &amp;lt;/user&amp;gt;&lt;br /&gt;
    &amp;lt;/users&amp;gt;&lt;br /&gt;
    &amp;lt;lists&amp;gt;&lt;br /&gt;
      &amp;lt;list owner-id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;video id=&amp;quot;1&amp;quot; timestamp-added=&amp;quot;1489684373&amp;quot;&amp;gt;&amp;lt;/video&amp;gt;&lt;br /&gt;
        &amp;lt;video id=&amp;quot;3&amp;quot; timestamp-added=&amp;quot;1489684379&amp;quot;&amp;gt;&amp;lt;/video&amp;gt;&lt;br /&gt;
      &amp;lt;/list&amp;gt;&lt;br /&gt;
    &amp;lt;/lists&amp;gt;&lt;br /&gt;
  &amp;lt;/echo&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==XSLT XML==&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;&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;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;videos&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;echo/videos/video&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;video&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:variable name=&amp;quot;author-id&amp;quot; select=&amp;quot;@author-id&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:copy-of select=&amp;quot;streams/stream[@type=&#039;primary&#039;]&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;autor&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:copy-of select=&amp;quot;/echo/users/user[@id=$author-id]&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/autor&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;metadata/description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;comments&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:variable name=&amp;quot;comment-author-id&amp;quot; select=&amp;quot;@author-id&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;/text&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:copy-of select=&amp;quot;/echo/users/user[@id=$comment-author-id]/username&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:copy-of select=&amp;quot;/echo/users/user[@id=$comment-author-id]/full-name&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/comments&amp;gt;&lt;br /&gt;
          &amp;lt;/video&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/videos&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;
&lt;br /&gt;
==XSLT HTML==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&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;/&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;html&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Media Kogumik&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;https://d.arti.ee/media.css&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;echo/videos/video&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:variable name=&amp;quot;author-id&amp;quot; select=&amp;quot;@author-id&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;h3&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;h4&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;/echo/users/user[@id=$author-id]/full-name&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/h4&amp;gt;&lt;br /&gt;
            &amp;lt;video controls=&amp;quot;&amp;quot; loop=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;streams/stream[@type=&#039;primary&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;stream-url&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;source&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:attribute name=&amp;quot;type&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@mime-type&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                  &amp;lt;/source&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;/video&amp;gt;&lt;br /&gt;
            &amp;lt;p&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;metadata/description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/p&amp;gt;&lt;br /&gt;
            &amp;lt;div&amp;gt;&lt;br /&gt;
              &amp;lt;h4&amp;gt;Komentaarid:&amp;lt;/h4&amp;gt;&lt;br /&gt;
              &amp;lt;ol&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;li&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:variable name=&amp;quot;comment-author-id&amp;quot; select=&amp;quot;@author-id&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;div&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                    &amp;lt;div&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Autor:&amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;/echo/users/user[@id=$comment-author-id]/full-name&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&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;/ol&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;hr/&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&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;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Echoxmlxstlhtml.png|320px]]&lt;br /&gt;
&lt;br /&gt;
==XSD==&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;echo&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;videos&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;video&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;streams&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;stream&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;stream-url&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;mime-type&amp;quot; type=&amp;quot;xs:string&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:attribute name=&amp;quot;type&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:element name=&amp;quot;metadata&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;description&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;comments&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;comment&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;author-id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;post-timestamp&amp;quot; type=&amp;quot;xs:unsignedInt&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:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:attribute name=&amp;quot;view-count&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:attribute name=&amp;quot;author-id&amp;quot; type=&amp;quot;xs:unsignedInt&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:element name=&amp;quot;users&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;user&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;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:element name=&amp;quot;full-name&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:unsignedInt&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:element name=&amp;quot;lists&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;list&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;video&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:attribute name=&amp;quot;timestamp-added&amp;quot; type=&amp;quot;xs:unsignedInt&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;owner-id&amp;quot; type=&amp;quot;xs:unsignedInt&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;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=File:Echo360erdversion1.png&amp;diff=120134</id>
		<title>File:Echo360erdversion1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=File:Echo360erdversion1.png&amp;diff=120134"/>
		<updated>2017-04-16T18:51:36Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=File:Echo360teenustejoonis.jpg&amp;diff=120133</id>
		<title>File:Echo360teenustejoonis.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=File:Echo360teenustejoonis.jpg&amp;diff=120133"/>
		<updated>2017-04-16T18:50:13Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Team_Echo&amp;diff=120120</id>
		<title>Team Echo</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Team_Echo&amp;diff=120120"/>
		<updated>2017-04-16T15:12:23Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: auto hide xml&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Team Echo Võrgurakendused II =&lt;br /&gt;
&lt;br /&gt;
* Mihkel Vajak&lt;br /&gt;
* Janno Oolo&lt;br /&gt;
* Mari-Liis Oldja&lt;br /&gt;
* Arti Zirk&lt;br /&gt;
* Joosep Voolma&lt;br /&gt;
&lt;br /&gt;
=Projekt=&lt;br /&gt;
==Veebiteenuse analüüs==&lt;br /&gt;
=== Kirjeldus ===&lt;br /&gt;
&lt;br /&gt;
=XML=&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot; id=&amp;quot;mw-customtoggle-xmlThings&amp;quot; style=&amp;quot;float:left&amp;quot;&amp;gt;&lt;br /&gt;
=== Miks ei leia siit xml failist CDATA kirjeid? ===&lt;br /&gt;
Sest, CDATA ei anna midagi juurde xml masin lugemisele. Sama hästi võiks problemaatilised märgid asendada vajalike paomärkidega mis oleks ka palju turvalisem.&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;Echo-html.xslt&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;echo&amp;gt;&lt;br /&gt;
    &amp;lt;videos&amp;gt;&lt;br /&gt;
      &amp;lt;video id=&amp;quot;1&amp;quot; view-count=&amp;quot;69&amp;quot; author-id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Mihkli rännak&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;streams&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;primary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/webm&amp;quot;&amp;gt;https://u.wut.ee/ookutsu.webm&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/mp3&amp;quot;&amp;gt;https://media/id/audio.mp3&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/mp4&amp;quot;&amp;gt;https://media/id/video.mp4&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;secondary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/*&amp;quot;&amp;gt;https://media/id/audio2&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
        &amp;lt;/streams&amp;gt;&lt;br /&gt;
        &amp;lt;metadata&amp;gt;&lt;br /&gt;
          &amp;lt;description&amp;gt;&lt;br /&gt;
            Väga kurb&lt;br /&gt;
          &amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/metadata&amp;gt;&lt;br /&gt;
        &amp;lt;comments&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;1&amp;quot; post-timestamp=&amp;quot;1489683470&amp;quot;&amp;gt;&lt;br /&gt;
            Norm värk&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;/comments&amp;gt;&lt;br /&gt;
      &amp;lt;/video&amp;gt;&lt;br /&gt;
      &amp;lt;video id=&amp;quot;2&amp;quot; view-count=&amp;quot;69&amp;quot; author-id=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Lahe video&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;streams&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;primary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/webm&amp;quot;&amp;gt;https://u.wut.ee/youfuckedup.webm&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/mp3&amp;quot;&amp;gt;https://media/id/audio.mp3&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/mp4&amp;quot;&amp;gt;https://media/id/video.mp4&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;secondary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/*&amp;quot;&amp;gt;https://media/id/audio2&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
        &amp;lt;/streams&amp;gt;&lt;br /&gt;
        &amp;lt;metadata&amp;gt;&lt;br /&gt;
          &amp;lt;description&amp;gt;&lt;br /&gt;
            See on väga äge video on see&lt;br /&gt;
          &amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/metadata&amp;gt;&lt;br /&gt;
        &amp;lt;comments&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;1&amp;quot; post-timestamp=&amp;quot;1489683470&amp;quot;&amp;gt;&lt;br /&gt;
            Norm värk&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;2&amp;quot; post-timestamp=&amp;quot;1489683470&amp;quot;&amp;gt;&lt;br /&gt;
            Norm värk 2&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;/comments&amp;gt;&lt;br /&gt;
      &amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;video id=&amp;quot;3&amp;quot; view-count=&amp;quot;69&amp;quot; author-id=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Nalja kah&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;streams&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;primary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/webm&amp;quot;&amp;gt;https://u.wut.ee/perlvspython.webm&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/mp3&amp;quot;&amp;gt;https://media/id/audio.mp3&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/mp4&amp;quot;&amp;gt;https://media/id/video.mp4&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;secondary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/*&amp;quot;&amp;gt;https://media/id/audio2&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
        &amp;lt;/streams&amp;gt;&lt;br /&gt;
        &amp;lt;metadata&amp;gt;&lt;br /&gt;
          &amp;lt;description&amp;gt;&lt;br /&gt;
            Väga hea huumor&lt;br /&gt;
          &amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/metadata&amp;gt;&lt;br /&gt;
        &amp;lt;comments&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;1&amp;quot; post-timestamp=&amp;quot;1489683470&amp;quot;&amp;gt;&lt;br /&gt;
            Norm värk&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;/comments&amp;gt;&lt;br /&gt;
      &amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;video id=&amp;quot;4&amp;quot; view-count=&amp;quot;69&amp;quot; author-id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Arti areng&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;streams&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;primary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/webm&amp;quot;&amp;gt;https://u.wut.ee/sittmissitt.webm&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/mp3&amp;quot;&amp;gt;https://media/id/audio.mp3&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/mp4&amp;quot;&amp;gt;https://media/id/video.mp4&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;secondary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/*&amp;quot;&amp;gt;https://media/id/audio2&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
        &amp;lt;/streams&amp;gt;&lt;br /&gt;
        &amp;lt;metadata&amp;gt;&lt;br /&gt;
          &amp;lt;description&amp;gt;&lt;br /&gt;
            Väga kurb&lt;br /&gt;
          &amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/metadata&amp;gt;&lt;br /&gt;
        &amp;lt;comments&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;1&amp;quot; post-timestamp=&amp;quot;1489683470&amp;quot;&amp;gt;&lt;br /&gt;
            Imelik oli&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;/comments&amp;gt;&lt;br /&gt;
      &amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;video id=&amp;quot;4&amp;quot; view-count=&amp;quot;69&amp;quot; author-id=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Oldja laulud&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;streams&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;primary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/webm&amp;quot;&amp;gt;https://u.wut.ee/healtscare.webm&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/mp3&amp;quot;&amp;gt;https://media/id/audio.mp3&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/mp4&amp;quot;&amp;gt;https://media/id/video.mp4&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;secondary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/*&amp;quot;&amp;gt;https://media/id/audio2&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
        &amp;lt;/streams&amp;gt;&lt;br /&gt;
        &amp;lt;metadata&amp;gt;&lt;br /&gt;
          &amp;lt;description&amp;gt;&lt;br /&gt;
            Draama Queen&lt;br /&gt;
          &amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/metadata&amp;gt;&lt;br /&gt;
        &amp;lt;comments&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;1&amp;quot; post-timestamp=&amp;quot;1489683420&amp;quot;&amp;gt;&lt;br /&gt;
            Norm värk&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;/comments&amp;gt;&lt;br /&gt;
      &amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;video id=&amp;quot;4&amp;quot; view-count=&amp;quot;69&amp;quot; author-id=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Osa 13 ehk Oolo kadumine&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;streams&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;primary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/webm&amp;quot;&amp;gt;https://u.wut.ee/healtscare.webm&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/mp3&amp;quot;&amp;gt;https://media/id/audio.mp3&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/mp4&amp;quot;&amp;gt;https://media/id/video.mp4&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;secondary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/*&amp;quot;&amp;gt;https://media/id/audio2&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
        &amp;lt;/streams&amp;gt;&lt;br /&gt;
        &amp;lt;metadata&amp;gt;&lt;br /&gt;
          &amp;lt;description&amp;gt;&lt;br /&gt;
            Lihtsalt kadus ära&lt;br /&gt;
          &amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/metadata&amp;gt;&lt;br /&gt;
        &amp;lt;comments&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;1&amp;quot; post-timestamp=&amp;quot;1489683470&amp;quot;&amp;gt;&lt;br /&gt;
            Norm värk&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;/comments&amp;gt;&lt;br /&gt;
      &amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/videos&amp;gt;&lt;br /&gt;
    &amp;lt;users&amp;gt;&lt;br /&gt;
      &amp;lt;user id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;username&amp;gt;admin&amp;lt;/username&amp;gt;&lt;br /&gt;
        &amp;lt;full-name&amp;gt;Admin&amp;lt;/full-name&amp;gt;&lt;br /&gt;
      &amp;lt;/user&amp;gt;&lt;br /&gt;
      &amp;lt;user id=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;username&amp;gt;oolo&amp;lt;/username&amp;gt;&lt;br /&gt;
        &amp;lt;full-name&amp;gt;Oolo&amp;lt;/full-name&amp;gt;&lt;br /&gt;
      &amp;lt;/user&amp;gt;&lt;br /&gt;
      &amp;lt;user id=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;username&amp;gt;zirk&amp;lt;/username&amp;gt;&lt;br /&gt;
        &amp;lt;full-name&amp;gt;Hr. Zirk&amp;lt;/full-name&amp;gt;&lt;br /&gt;
      &amp;lt;/user&amp;gt;&lt;br /&gt;
    &amp;lt;/users&amp;gt;&lt;br /&gt;
    &amp;lt;lists&amp;gt;&lt;br /&gt;
      &amp;lt;list owner-id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;video id=&amp;quot;1&amp;quot; timestamp-added=&amp;quot;1489684373&amp;quot;&amp;gt;&amp;lt;/video&amp;gt;&lt;br /&gt;
        &amp;lt;video id=&amp;quot;3&amp;quot; timestamp-added=&amp;quot;1489684379&amp;quot;&amp;gt;&amp;lt;/video&amp;gt;&lt;br /&gt;
      &amp;lt;/list&amp;gt;&lt;br /&gt;
    &amp;lt;/lists&amp;gt;&lt;br /&gt;
  &amp;lt;/echo&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==XSLT XML==&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;&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;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;videos&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;echo/videos/video&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;video&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:variable name=&amp;quot;author-id&amp;quot; select=&amp;quot;@author-id&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:copy-of select=&amp;quot;streams/stream[@type=&#039;primary&#039;]&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;autor&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:copy-of select=&amp;quot;/echo/users/user[@id=$author-id]&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/autor&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;metadata/description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;comments&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:variable name=&amp;quot;comment-author-id&amp;quot; select=&amp;quot;@author-id&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;/text&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:copy-of select=&amp;quot;/echo/users/user[@id=$comment-author-id]/username&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:copy-of select=&amp;quot;/echo/users/user[@id=$comment-author-id]/full-name&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/comments&amp;gt;&lt;br /&gt;
          &amp;lt;/video&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/videos&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;
&lt;br /&gt;
==XSLT HTML==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&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;/&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;html&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Media Kogumik&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;https://d.arti.ee/media.css&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;echo/videos/video&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:variable name=&amp;quot;author-id&amp;quot; select=&amp;quot;@author-id&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;h3&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;h4&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;/echo/users/user[@id=$author-id]/full-name&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/h4&amp;gt;&lt;br /&gt;
            &amp;lt;video controls=&amp;quot;&amp;quot; loop=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;streams/stream[@type=&#039;primary&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;stream-url&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;source&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:attribute name=&amp;quot;type&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@mime-type&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                  &amp;lt;/source&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;/video&amp;gt;&lt;br /&gt;
            &amp;lt;p&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;metadata/description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/p&amp;gt;&lt;br /&gt;
            &amp;lt;div&amp;gt;&lt;br /&gt;
              &amp;lt;h4&amp;gt;Komentaarid:&amp;lt;/h4&amp;gt;&lt;br /&gt;
              &amp;lt;ol&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;li&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:variable name=&amp;quot;comment-author-id&amp;quot; select=&amp;quot;@author-id&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;div&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                    &amp;lt;div&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Autor:&amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;/echo/users/user[@id=$comment-author-id]/full-name&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&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;/ol&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;hr/&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&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;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Echoxmlxstlhtml.png|320px]]&lt;br /&gt;
&lt;br /&gt;
==XSD==&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;echo&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;videos&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;video&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;streams&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;stream&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;stream-url&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;mime-type&amp;quot; type=&amp;quot;xs:string&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:attribute name=&amp;quot;type&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:element name=&amp;quot;metadata&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;description&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;comments&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;comment&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;author-id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;post-timestamp&amp;quot; type=&amp;quot;xs:unsignedInt&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:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:attribute name=&amp;quot;view-count&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:attribute name=&amp;quot;author-id&amp;quot; type=&amp;quot;xs:unsignedInt&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:element name=&amp;quot;users&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;user&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;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:element name=&amp;quot;full-name&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:unsignedInt&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:element name=&amp;quot;lists&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;list&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;video&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:attribute name=&amp;quot;timestamp-added&amp;quot; type=&amp;quot;xs:unsignedInt&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;owner-id&amp;quot; type=&amp;quot;xs:unsignedInt&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;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Talk:Meeskond:_Redundant_Rappers&amp;diff=118782</id>
		<title>Talk:Meeskond: Redundant Rappers</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Talk:Meeskond:_Redundant_Rappers&amp;diff=118782"/>
		<updated>2017-03-19T14:52:06Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Retsensioon Team Echo poolt ==&lt;br /&gt;
&lt;br /&gt;
XML Andmefail ise on väga põhjalik ning tundub sisaldavat kõiki vajalikke välju muusika albumite ja artistide väljendamiseks.&lt;br /&gt;
Struktuuriliselt on andmed mõistlikult jaotataud kuigi CDATA ploki kasutamisega on mindud liiale sest väljad kus seda kasutatud on ei sisalda XML-i struktuuri rikkuvaid märke.&lt;br /&gt;
&lt;br /&gt;
=== Väikesed märkused ===&lt;br /&gt;
&lt;br /&gt;
* Žanrite nimede id atribuudid ja nimi ise võiks olla ühes elemendis mitte ganri elemendi sees eraldi name elemendina sest tegu on ainukese sisemise elemndiga&lt;br /&gt;
* Albumitel ja singlitel on ainus vahe lugude arvus, mõlemad võiksid olla lihtsalt records elemendi lapsed millele on lisatud atribuut tüüp kus sees on ära märgitud kas tegu on singli või albumiga&lt;br /&gt;
* Albumi date atribuut võiks järgida ISO 8601 standarit kuupäeva väljendamiseks https://xkcd.com/1179/ https://en.wikipedia.org/wiki/ISO_8601&lt;br /&gt;
* Albumid pole seotud neid välja andnud labelitega.&lt;br /&gt;
* Track elemendi atribuut võiks järgida mime standartit https://en.wikipedia.org/wiki/MIME faili vormingu märkimiseks&lt;br /&gt;
* Track duration atribuut võiks sisaldada loo pikkust sekundites kuna see teeb programmiliselt loo pikkuse lugemise lihtsamaks&lt;br /&gt;
&lt;br /&gt;
=== Märkused XSD kohta ===&lt;br /&gt;
&lt;br /&gt;
* XSD failis on id atribuutide type seatud liiga väikeseks nagu näiteks byte või short mis näiteks piirab žanrite arvu 255 peale &lt;br /&gt;
* XSD failis on startyear short ja endyear string tüüpi mis ei meiki sensi.&lt;br /&gt;
&lt;br /&gt;
=== XSTL ===&lt;br /&gt;
&lt;br /&gt;
XSTL transformatsioon XML lähte failist HTML faili ja teise XML faili kasutab päris palju erinevaid võimalusi päris hea lõpp tulemuse saamiseks jäädes samal ajal päris kergesti mõistetavaks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Üldiselt on kõik kriteeriumid täidetud ning töö hästi tehtud.&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Talk:Meeskond:_Redundant_Rappers&amp;diff=118781</id>
		<title>Talk:Meeskond: Redundant Rappers</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Talk:Meeskond:_Redundant_Rappers&amp;diff=118781"/>
		<updated>2017-03-19T14:50:23Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: /* Retsensioon Team Echo poolt */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Retsensioon Team Echo poolt ==&lt;br /&gt;
&lt;br /&gt;
XML Andmefail ise on väga põhjalik ning tundub sisaldavat kõiki vajalikke välju muusika albumite ja artistide väljendamiseks.&lt;br /&gt;
Struktuuriliselt on andmed mõistlikult jaotataud kuigi CDATA ploki kasutamisega on mindud liiale sest väljad kus seda kasutatud on ei sisalda XML-i struktuuri rikkuvaid märke.&lt;br /&gt;
&lt;br /&gt;
=== Väikesed märkused ===&lt;br /&gt;
&lt;br /&gt;
* Žanrite nimede id atribuudid ja nimi ise võiks olla ühes elemendis mitte ganri elemendi sees eraldi name elemendina sest tegu on ainukese sisemise elemndiga&lt;br /&gt;
* Albumitel ja singlitel on ainus vahe lugude arvus, mõlemad võiksid olla lihtsalt records elemendi lapsed millele on lisatud atribuut tüüp kus sees on ära märgitud kas tegu on singli või albumiga&lt;br /&gt;
* Albumi date atribuut võiks järgida ISO 8601 standarit kuupäeva väljendamiseks https://xkcd.com/1179/ https://en.wikipedia.org/wiki/ISO_8601&lt;br /&gt;
* Albumid pole seotud neid välja andnud labelitega.&lt;br /&gt;
* Track elemendi atribuut võiks järgida mime standartit https://en.wikipedia.org/wiki/MIME faili vormingu märkimiseks&lt;br /&gt;
* Track duration atribuut võiks sisaldada loo pikkust sekundites kuna see teeb programmiliselt loo pikkuse lugemise lihtsamaks&lt;br /&gt;
&lt;br /&gt;
=== Märkused XSD kohta ===&lt;br /&gt;
&lt;br /&gt;
* XSD failis on id atribuutide type seatud liiga väikeseks nagu näiteks byte või short mis näiteks piirab žanrite arvu 255 peale &lt;br /&gt;
* XSD failis on startyear short ja endyear string tüüpi mis ei meiki sensi.&lt;br /&gt;
&lt;br /&gt;
=== XSTL HTML ===&lt;br /&gt;
&lt;br /&gt;
XSTL transformatsioon XML lähte failist HTML faili kasutab päris palju erinevaid võimalusi päris hea lõpp tulemuse saamiseks jäädes samal ajal päris kergesti mõistetavaks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Üldiselt on kõik kriteeriumid täidetud ning töö hästi tehtud.&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Talk:Meeskond:_Redundant_Rappers&amp;diff=118780</id>
		<title>Talk:Meeskond: Redundant Rappers</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Talk:Meeskond:_Redundant_Rappers&amp;diff=118780"/>
		<updated>2017-03-19T14:48:20Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: Lisa retsensioon&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Retsensioon Team Echo poolt ==&lt;br /&gt;
&lt;br /&gt;
XML Andmefail ise on väga põhjalik ning tundub sisaldavat kõiki vajalikke välju muusika albumite ja artistide väljendamiseks.&lt;br /&gt;
Struktuuriliselt on andmed mõistlikult jaotataud kuigi CDATA ploki kasutamisega on mindud liiale sest väljad kus seda kasutatud on ei sisalda XML-i struktuuri rikkuvaid märke.&lt;br /&gt;
&lt;br /&gt;
=== Väikesed märkused ===&lt;br /&gt;
&lt;br /&gt;
* Žanrite nimede id atribuudid ja nimi ise võiks olla ühes elemendis mitte ganri elemendi sees eraldi name elemendina sest tegu on ainukese sisemise elemndiga&lt;br /&gt;
* Albumitel ja singlitel on ainus vahe lugude arvus, mõlemad võiksid olla lihtsalt records elemendi lapsed millele on lisatud atribuut tüüp kus sees on ära märgitud kas tegu on singli või albumiga&lt;br /&gt;
* Albumi date atribuut võiks järgida ISO 8601 standarit kuupäeva väljendamiseks https://xkcd.com/1179/ https://en.wikipedia.org/wiki/ISO_8601&lt;br /&gt;
* Albumid pole seotud neid välja andnud labelitega.&lt;br /&gt;
* Track elemendi atribuut võiks järgida mime standartit https://en.wikipedia.org/wiki/MIME faili vormingu märkimiseks&lt;br /&gt;
* Track duration atribuut võiks sisaldada loo pikkust sekundites kuna see teeb programmiliselt loo pikkuse lugemise lihtsamaks&lt;br /&gt;
&lt;br /&gt;
=== Märkused XSD kohta ===&lt;br /&gt;
&lt;br /&gt;
* XSD failis on id atribuutide type seatud liiga väikeseks nagu näiteks byte või short mis näiteks piirab žanrite arvu 255 peale &lt;br /&gt;
* XSD failis on startyear short ja endyear string tüüpi mis ei meiki sensi.&lt;br /&gt;
&lt;br /&gt;
=== XSTL HTML ===&lt;br /&gt;
&lt;br /&gt;
XSTL transformatsioon XML lähte failist HTML faili kasutab päris palju erinevaid võimalusi päris hea lõpp tulemuse saamiseks jäädes samal ajal päris kergesti mõistetavaks.&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Team_Echo&amp;diff=118774</id>
		<title>Team Echo</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Team_Echo&amp;diff=118774"/>
		<updated>2017-03-19T14:13:00Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: /* XSLT HTML */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Team Echo Võrgurakendused II =&lt;br /&gt;
&lt;br /&gt;
* Mihkel Vajak&lt;br /&gt;
* Janno Oolo&lt;br /&gt;
* Mari-Liis Oldja&lt;br /&gt;
* Arti Zirk&lt;br /&gt;
* Joosep Voolma&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==XML==&lt;br /&gt;
&lt;br /&gt;
=== Miks ei leia siit xml failist CDATA kirjeid? ===&lt;br /&gt;
Sest, CDATA ei anna midagi juurde xml masin lugemisele. Sama hästi võiks problemaatilised märgid asendada vajalike paomärkidega mis oleks ka palju turvalisem.&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;Echo-html.xslt&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;echo&amp;gt;&lt;br /&gt;
    &amp;lt;videos&amp;gt;&lt;br /&gt;
      &amp;lt;video id=&amp;quot;1&amp;quot; view-count=&amp;quot;69&amp;quot; author-id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Mihkli rännak&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;streams&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;primary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/webm&amp;quot;&amp;gt;https://u.wut.ee/ookutsu.webm&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/mp3&amp;quot;&amp;gt;https://media/id/audio.mp3&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/mp4&amp;quot;&amp;gt;https://media/id/video.mp4&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;secondary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/*&amp;quot;&amp;gt;https://media/id/audio2&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
        &amp;lt;/streams&amp;gt;&lt;br /&gt;
        &amp;lt;metadata&amp;gt;&lt;br /&gt;
          &amp;lt;description&amp;gt;&lt;br /&gt;
            Väga kurb&lt;br /&gt;
          &amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/metadata&amp;gt;&lt;br /&gt;
        &amp;lt;comments&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;1&amp;quot; post-timestamp=&amp;quot;1489683470&amp;quot;&amp;gt;&lt;br /&gt;
            Norm värk&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;/comments&amp;gt;&lt;br /&gt;
      &amp;lt;/video&amp;gt;&lt;br /&gt;
      &amp;lt;video id=&amp;quot;2&amp;quot; view-count=&amp;quot;69&amp;quot; author-id=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Lahe video&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;streams&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;primary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/webm&amp;quot;&amp;gt;https://u.wut.ee/youfuckedup.webm&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/mp3&amp;quot;&amp;gt;https://media/id/audio.mp3&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/mp4&amp;quot;&amp;gt;https://media/id/video.mp4&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;secondary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/*&amp;quot;&amp;gt;https://media/id/audio2&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
        &amp;lt;/streams&amp;gt;&lt;br /&gt;
        &amp;lt;metadata&amp;gt;&lt;br /&gt;
          &amp;lt;description&amp;gt;&lt;br /&gt;
            See on väga äge video on see&lt;br /&gt;
          &amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/metadata&amp;gt;&lt;br /&gt;
        &amp;lt;comments&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;1&amp;quot; post-timestamp=&amp;quot;1489683470&amp;quot;&amp;gt;&lt;br /&gt;
            Norm värk&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;2&amp;quot; post-timestamp=&amp;quot;1489683470&amp;quot;&amp;gt;&lt;br /&gt;
            Norm värk 2&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;/comments&amp;gt;&lt;br /&gt;
      &amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;video id=&amp;quot;3&amp;quot; view-count=&amp;quot;69&amp;quot; author-id=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Nalja kah&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;streams&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;primary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/webm&amp;quot;&amp;gt;https://u.wut.ee/perlvspython.webm&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/mp3&amp;quot;&amp;gt;https://media/id/audio.mp3&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/mp4&amp;quot;&amp;gt;https://media/id/video.mp4&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;secondary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/*&amp;quot;&amp;gt;https://media/id/audio2&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
        &amp;lt;/streams&amp;gt;&lt;br /&gt;
        &amp;lt;metadata&amp;gt;&lt;br /&gt;
          &amp;lt;description&amp;gt;&lt;br /&gt;
            Väga hea huumor&lt;br /&gt;
          &amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/metadata&amp;gt;&lt;br /&gt;
        &amp;lt;comments&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;1&amp;quot; post-timestamp=&amp;quot;1489683470&amp;quot;&amp;gt;&lt;br /&gt;
            Norm värk&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;/comments&amp;gt;&lt;br /&gt;
      &amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;video id=&amp;quot;4&amp;quot; view-count=&amp;quot;69&amp;quot; author-id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Arti areng&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;streams&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;primary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/webm&amp;quot;&amp;gt;https://u.wut.ee/sittmissitt.webm&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/mp3&amp;quot;&amp;gt;https://media/id/audio.mp3&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/mp4&amp;quot;&amp;gt;https://media/id/video.mp4&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;secondary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/*&amp;quot;&amp;gt;https://media/id/audio2&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
        &amp;lt;/streams&amp;gt;&lt;br /&gt;
        &amp;lt;metadata&amp;gt;&lt;br /&gt;
          &amp;lt;description&amp;gt;&lt;br /&gt;
            Väga kurb&lt;br /&gt;
          &amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/metadata&amp;gt;&lt;br /&gt;
        &amp;lt;comments&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;1&amp;quot; post-timestamp=&amp;quot;1489683470&amp;quot;&amp;gt;&lt;br /&gt;
            Imelik oli&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;/comments&amp;gt;&lt;br /&gt;
      &amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;video id=&amp;quot;4&amp;quot; view-count=&amp;quot;69&amp;quot; author-id=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Oldja laulud&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;streams&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;primary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/webm&amp;quot;&amp;gt;https://u.wut.ee/healtscare.webm&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/mp3&amp;quot;&amp;gt;https://media/id/audio.mp3&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/mp4&amp;quot;&amp;gt;https://media/id/video.mp4&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;secondary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/*&amp;quot;&amp;gt;https://media/id/audio2&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
        &amp;lt;/streams&amp;gt;&lt;br /&gt;
        &amp;lt;metadata&amp;gt;&lt;br /&gt;
          &amp;lt;description&amp;gt;&lt;br /&gt;
            Draama Queen&lt;br /&gt;
          &amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/metadata&amp;gt;&lt;br /&gt;
        &amp;lt;comments&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;1&amp;quot; post-timestamp=&amp;quot;1489683420&amp;quot;&amp;gt;&lt;br /&gt;
            Norm värk&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;/comments&amp;gt;&lt;br /&gt;
      &amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;video id=&amp;quot;4&amp;quot; view-count=&amp;quot;69&amp;quot; author-id=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Osa 13 ehk Oolo kadumine&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;streams&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;primary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/webm&amp;quot;&amp;gt;https://u.wut.ee/healtscare.webm&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/mp3&amp;quot;&amp;gt;https://media/id/audio.mp3&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/mp4&amp;quot;&amp;gt;https://media/id/video.mp4&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;secondary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/*&amp;quot;&amp;gt;https://media/id/audio2&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
        &amp;lt;/streams&amp;gt;&lt;br /&gt;
        &amp;lt;metadata&amp;gt;&lt;br /&gt;
          &amp;lt;description&amp;gt;&lt;br /&gt;
            Lihtsalt kadus ära&lt;br /&gt;
          &amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/metadata&amp;gt;&lt;br /&gt;
        &amp;lt;comments&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;1&amp;quot; post-timestamp=&amp;quot;1489683470&amp;quot;&amp;gt;&lt;br /&gt;
            Norm värk&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;/comments&amp;gt;&lt;br /&gt;
      &amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/videos&amp;gt;&lt;br /&gt;
    &amp;lt;users&amp;gt;&lt;br /&gt;
      &amp;lt;user id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;username&amp;gt;admin&amp;lt;/username&amp;gt;&lt;br /&gt;
        &amp;lt;full-name&amp;gt;Admin&amp;lt;/full-name&amp;gt;&lt;br /&gt;
      &amp;lt;/user&amp;gt;&lt;br /&gt;
      &amp;lt;user id=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;username&amp;gt;oolo&amp;lt;/username&amp;gt;&lt;br /&gt;
        &amp;lt;full-name&amp;gt;Oolo&amp;lt;/full-name&amp;gt;&lt;br /&gt;
      &amp;lt;/user&amp;gt;&lt;br /&gt;
      &amp;lt;user id=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;username&amp;gt;zirk&amp;lt;/username&amp;gt;&lt;br /&gt;
        &amp;lt;full-name&amp;gt;Hr. Zirk&amp;lt;/full-name&amp;gt;&lt;br /&gt;
      &amp;lt;/user&amp;gt;&lt;br /&gt;
    &amp;lt;/users&amp;gt;&lt;br /&gt;
    &amp;lt;lists&amp;gt;&lt;br /&gt;
      &amp;lt;list owner-id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;video id=&amp;quot;1&amp;quot; timestamp-added=&amp;quot;1489684373&amp;quot;&amp;gt;&amp;lt;/video&amp;gt;&lt;br /&gt;
        &amp;lt;video id=&amp;quot;3&amp;quot; timestamp-added=&amp;quot;1489684379&amp;quot;&amp;gt;&amp;lt;/video&amp;gt;&lt;br /&gt;
      &amp;lt;/list&amp;gt;&lt;br /&gt;
    &amp;lt;/lists&amp;gt;&lt;br /&gt;
  &amp;lt;/echo&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==XSLT XML==&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;&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;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;videos&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;echo/videos/video&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;video&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:variable name=&amp;quot;author-id&amp;quot; select=&amp;quot;@author-id&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:copy-of select=&amp;quot;streams/stream[@type=&#039;primary&#039;]&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;autor&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:copy-of select=&amp;quot;/echo/users/user[@id=$author-id]&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/autor&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;metadata/description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;comments&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:variable name=&amp;quot;comment-author-id&amp;quot; select=&amp;quot;@author-id&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;/text&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:copy-of select=&amp;quot;/echo/users/user[@id=$comment-author-id]/username&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:copy-of select=&amp;quot;/echo/users/user[@id=$comment-author-id]/full-name&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/comments&amp;gt;&lt;br /&gt;
          &amp;lt;/video&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/videos&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;
&lt;br /&gt;
==XSLT HTML==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&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;/&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;html&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Media Kogumik&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;https://d.arti.ee/media.css&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;echo/videos/video&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:variable name=&amp;quot;author-id&amp;quot; select=&amp;quot;@author-id&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;h3&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;h4&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;/echo/users/user[@id=$author-id]/full-name&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/h4&amp;gt;&lt;br /&gt;
            &amp;lt;video controls=&amp;quot;&amp;quot; loop=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;streams/stream[@type=&#039;primary&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;stream-url&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;source&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:attribute name=&amp;quot;type&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@mime-type&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                  &amp;lt;/source&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;/video&amp;gt;&lt;br /&gt;
            &amp;lt;p&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;metadata/description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/p&amp;gt;&lt;br /&gt;
            &amp;lt;div&amp;gt;&lt;br /&gt;
              &amp;lt;h4&amp;gt;Komentaarid:&amp;lt;/h4&amp;gt;&lt;br /&gt;
              &amp;lt;ol&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;li&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:variable name=&amp;quot;comment-author-id&amp;quot; select=&amp;quot;@author-id&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;div&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                    &amp;lt;div&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Autor:&amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;/echo/users/user[@id=$comment-author-id]/full-name&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&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;/ol&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;hr/&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&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;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Echoxmlxstlhtml.png|320px]]&lt;br /&gt;
&lt;br /&gt;
==XSD==&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;echo&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;videos&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;video&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;streams&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;stream&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;stream-url&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;mime-type&amp;quot; type=&amp;quot;xs:string&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:attribute name=&amp;quot;type&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:element name=&amp;quot;metadata&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;description&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;comments&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;comment&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;author-id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;post-timestamp&amp;quot; type=&amp;quot;xs:unsignedInt&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:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:attribute name=&amp;quot;view-count&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:attribute name=&amp;quot;author-id&amp;quot; type=&amp;quot;xs:unsignedInt&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:element name=&amp;quot;users&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;user&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;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:element name=&amp;quot;full-name&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:unsignedInt&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:element name=&amp;quot;lists&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;list&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;video&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:attribute name=&amp;quot;timestamp-added&amp;quot; type=&amp;quot;xs:unsignedInt&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;owner-id&amp;quot; type=&amp;quot;xs:unsignedInt&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;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=File:Echoxmlxstlhtml.png&amp;diff=118773</id>
		<title>File:Echoxmlxstlhtml.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=File:Echoxmlxstlhtml.png&amp;diff=118773"/>
		<updated>2017-03-19T14:11:36Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Team_Echo&amp;diff=118772</id>
		<title>Team Echo</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Team_Echo&amp;diff=118772"/>
		<updated>2017-03-19T14:08:33Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: /* XML */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Team Echo Võrgurakendused II =&lt;br /&gt;
&lt;br /&gt;
* Mihkel Vajak&lt;br /&gt;
* Janno Oolo&lt;br /&gt;
* Mari-Liis Oldja&lt;br /&gt;
* Arti Zirk&lt;br /&gt;
* Joosep Voolma&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==XML==&lt;br /&gt;
&lt;br /&gt;
=== Miks ei leia siit xml failist CDATA kirjeid? ===&lt;br /&gt;
Sest, CDATA ei anna midagi juurde xml masin lugemisele. Sama hästi võiks problemaatilised märgid asendada vajalike paomärkidega mis oleks ka palju turvalisem.&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;Echo-html.xslt&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;echo&amp;gt;&lt;br /&gt;
    &amp;lt;videos&amp;gt;&lt;br /&gt;
      &amp;lt;video id=&amp;quot;1&amp;quot; view-count=&amp;quot;69&amp;quot; author-id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Mihkli rännak&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;streams&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;primary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/webm&amp;quot;&amp;gt;https://u.wut.ee/ookutsu.webm&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/mp3&amp;quot;&amp;gt;https://media/id/audio.mp3&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/mp4&amp;quot;&amp;gt;https://media/id/video.mp4&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;secondary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/*&amp;quot;&amp;gt;https://media/id/audio2&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
        &amp;lt;/streams&amp;gt;&lt;br /&gt;
        &amp;lt;metadata&amp;gt;&lt;br /&gt;
          &amp;lt;description&amp;gt;&lt;br /&gt;
            Väga kurb&lt;br /&gt;
          &amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/metadata&amp;gt;&lt;br /&gt;
        &amp;lt;comments&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;1&amp;quot; post-timestamp=&amp;quot;1489683470&amp;quot;&amp;gt;&lt;br /&gt;
            Norm värk&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;/comments&amp;gt;&lt;br /&gt;
      &amp;lt;/video&amp;gt;&lt;br /&gt;
      &amp;lt;video id=&amp;quot;2&amp;quot; view-count=&amp;quot;69&amp;quot; author-id=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Lahe video&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;streams&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;primary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/webm&amp;quot;&amp;gt;https://u.wut.ee/youfuckedup.webm&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/mp3&amp;quot;&amp;gt;https://media/id/audio.mp3&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/mp4&amp;quot;&amp;gt;https://media/id/video.mp4&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;secondary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/*&amp;quot;&amp;gt;https://media/id/audio2&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
        &amp;lt;/streams&amp;gt;&lt;br /&gt;
        &amp;lt;metadata&amp;gt;&lt;br /&gt;
          &amp;lt;description&amp;gt;&lt;br /&gt;
            See on väga äge video on see&lt;br /&gt;
          &amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/metadata&amp;gt;&lt;br /&gt;
        &amp;lt;comments&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;1&amp;quot; post-timestamp=&amp;quot;1489683470&amp;quot;&amp;gt;&lt;br /&gt;
            Norm värk&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;2&amp;quot; post-timestamp=&amp;quot;1489683470&amp;quot;&amp;gt;&lt;br /&gt;
            Norm värk 2&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;/comments&amp;gt;&lt;br /&gt;
      &amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;video id=&amp;quot;3&amp;quot; view-count=&amp;quot;69&amp;quot; author-id=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Nalja kah&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;streams&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;primary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/webm&amp;quot;&amp;gt;https://u.wut.ee/perlvspython.webm&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/mp3&amp;quot;&amp;gt;https://media/id/audio.mp3&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/mp4&amp;quot;&amp;gt;https://media/id/video.mp4&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;secondary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/*&amp;quot;&amp;gt;https://media/id/audio2&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
        &amp;lt;/streams&amp;gt;&lt;br /&gt;
        &amp;lt;metadata&amp;gt;&lt;br /&gt;
          &amp;lt;description&amp;gt;&lt;br /&gt;
            Väga hea huumor&lt;br /&gt;
          &amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/metadata&amp;gt;&lt;br /&gt;
        &amp;lt;comments&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;1&amp;quot; post-timestamp=&amp;quot;1489683470&amp;quot;&amp;gt;&lt;br /&gt;
            Norm värk&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;/comments&amp;gt;&lt;br /&gt;
      &amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;video id=&amp;quot;4&amp;quot; view-count=&amp;quot;69&amp;quot; author-id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Arti areng&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;streams&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;primary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/webm&amp;quot;&amp;gt;https://u.wut.ee/sittmissitt.webm&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/mp3&amp;quot;&amp;gt;https://media/id/audio.mp3&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/mp4&amp;quot;&amp;gt;https://media/id/video.mp4&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;secondary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/*&amp;quot;&amp;gt;https://media/id/audio2&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
        &amp;lt;/streams&amp;gt;&lt;br /&gt;
        &amp;lt;metadata&amp;gt;&lt;br /&gt;
          &amp;lt;description&amp;gt;&lt;br /&gt;
            Väga kurb&lt;br /&gt;
          &amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/metadata&amp;gt;&lt;br /&gt;
        &amp;lt;comments&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;1&amp;quot; post-timestamp=&amp;quot;1489683470&amp;quot;&amp;gt;&lt;br /&gt;
            Imelik oli&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;/comments&amp;gt;&lt;br /&gt;
      &amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;video id=&amp;quot;4&amp;quot; view-count=&amp;quot;69&amp;quot; author-id=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Oldja laulud&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;streams&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;primary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/webm&amp;quot;&amp;gt;https://u.wut.ee/healtscare.webm&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/mp3&amp;quot;&amp;gt;https://media/id/audio.mp3&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/mp4&amp;quot;&amp;gt;https://media/id/video.mp4&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;secondary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/*&amp;quot;&amp;gt;https://media/id/audio2&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
        &amp;lt;/streams&amp;gt;&lt;br /&gt;
        &amp;lt;metadata&amp;gt;&lt;br /&gt;
          &amp;lt;description&amp;gt;&lt;br /&gt;
            Draama Queen&lt;br /&gt;
          &amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/metadata&amp;gt;&lt;br /&gt;
        &amp;lt;comments&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;1&amp;quot; post-timestamp=&amp;quot;1489683420&amp;quot;&amp;gt;&lt;br /&gt;
            Norm värk&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;/comments&amp;gt;&lt;br /&gt;
      &amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;video id=&amp;quot;4&amp;quot; view-count=&amp;quot;69&amp;quot; author-id=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Osa 13 ehk Oolo kadumine&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;streams&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;primary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/webm&amp;quot;&amp;gt;https://u.wut.ee/healtscare.webm&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/mp3&amp;quot;&amp;gt;https://media/id/audio.mp3&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/mp4&amp;quot;&amp;gt;https://media/id/video.mp4&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;secondary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/*&amp;quot;&amp;gt;https://media/id/audio2&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
        &amp;lt;/streams&amp;gt;&lt;br /&gt;
        &amp;lt;metadata&amp;gt;&lt;br /&gt;
          &amp;lt;description&amp;gt;&lt;br /&gt;
            Lihtsalt kadus ära&lt;br /&gt;
          &amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/metadata&amp;gt;&lt;br /&gt;
        &amp;lt;comments&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;1&amp;quot; post-timestamp=&amp;quot;1489683470&amp;quot;&amp;gt;&lt;br /&gt;
            Norm värk&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;/comments&amp;gt;&lt;br /&gt;
      &amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/videos&amp;gt;&lt;br /&gt;
    &amp;lt;users&amp;gt;&lt;br /&gt;
      &amp;lt;user id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;username&amp;gt;admin&amp;lt;/username&amp;gt;&lt;br /&gt;
        &amp;lt;full-name&amp;gt;Admin&amp;lt;/full-name&amp;gt;&lt;br /&gt;
      &amp;lt;/user&amp;gt;&lt;br /&gt;
      &amp;lt;user id=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;username&amp;gt;oolo&amp;lt;/username&amp;gt;&lt;br /&gt;
        &amp;lt;full-name&amp;gt;Oolo&amp;lt;/full-name&amp;gt;&lt;br /&gt;
      &amp;lt;/user&amp;gt;&lt;br /&gt;
      &amp;lt;user id=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;username&amp;gt;zirk&amp;lt;/username&amp;gt;&lt;br /&gt;
        &amp;lt;full-name&amp;gt;Hr. Zirk&amp;lt;/full-name&amp;gt;&lt;br /&gt;
      &amp;lt;/user&amp;gt;&lt;br /&gt;
    &amp;lt;/users&amp;gt;&lt;br /&gt;
    &amp;lt;lists&amp;gt;&lt;br /&gt;
      &amp;lt;list owner-id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;video id=&amp;quot;1&amp;quot; timestamp-added=&amp;quot;1489684373&amp;quot;&amp;gt;&amp;lt;/video&amp;gt;&lt;br /&gt;
        &amp;lt;video id=&amp;quot;3&amp;quot; timestamp-added=&amp;quot;1489684379&amp;quot;&amp;gt;&amp;lt;/video&amp;gt;&lt;br /&gt;
      &amp;lt;/list&amp;gt;&lt;br /&gt;
    &amp;lt;/lists&amp;gt;&lt;br /&gt;
  &amp;lt;/echo&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==XSLT XML==&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;&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;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;videos&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;echo/videos/video&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;video&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:variable name=&amp;quot;author-id&amp;quot; select=&amp;quot;@author-id&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:copy-of select=&amp;quot;streams/stream[@type=&#039;primary&#039;]&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;autor&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:copy-of select=&amp;quot;/echo/users/user[@id=$author-id]&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/autor&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;metadata/description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;comments&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:variable name=&amp;quot;comment-author-id&amp;quot; select=&amp;quot;@author-id&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;/text&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:copy-of select=&amp;quot;/echo/users/user[@id=$comment-author-id]/username&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:copy-of select=&amp;quot;/echo/users/user[@id=$comment-author-id]/full-name&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/comments&amp;gt;&lt;br /&gt;
          &amp;lt;/video&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/videos&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;
&lt;br /&gt;
==XSLT HTML==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&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;/&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;html&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Media Kogumik&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;https://d.arti.ee/media.css&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;echo/videos/video&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:variable name=&amp;quot;author-id&amp;quot; select=&amp;quot;@author-id&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;h3&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;h4&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;/echo/users/user[@id=$author-id]/full-name&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/h4&amp;gt;&lt;br /&gt;
            &amp;lt;video controls=&amp;quot;&amp;quot; loop=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;streams/stream[@type=&#039;primary&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;stream-url&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;source&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:attribute name=&amp;quot;type&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@mime-type&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                  &amp;lt;/source&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;/video&amp;gt;&lt;br /&gt;
            &amp;lt;p&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;metadata/description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/p&amp;gt;&lt;br /&gt;
            &amp;lt;div&amp;gt;&lt;br /&gt;
              &amp;lt;h4&amp;gt;Komentaarid:&amp;lt;/h4&amp;gt;&lt;br /&gt;
              &amp;lt;ol&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;li&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:variable name=&amp;quot;comment-author-id&amp;quot; select=&amp;quot;@author-id&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;div&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                    &amp;lt;div&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Autor:&amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;/echo/users/user[@id=$comment-author-id]/full-name&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&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;/ol&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;hr/&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&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;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==XSD==&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;echo&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;videos&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;video&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;streams&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;stream&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;stream-url&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;mime-type&amp;quot; type=&amp;quot;xs:string&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:attribute name=&amp;quot;type&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:element name=&amp;quot;metadata&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;description&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;comments&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;comment&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;author-id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;post-timestamp&amp;quot; type=&amp;quot;xs:unsignedInt&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:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:attribute name=&amp;quot;view-count&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:attribute name=&amp;quot;author-id&amp;quot; type=&amp;quot;xs:unsignedInt&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:element name=&amp;quot;users&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;user&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;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:element name=&amp;quot;full-name&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:unsignedInt&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:element name=&amp;quot;lists&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;list&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;video&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:attribute name=&amp;quot;timestamp-added&amp;quot; type=&amp;quot;xs:unsignedInt&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;owner-id&amp;quot; type=&amp;quot;xs:unsignedInt&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;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Team_Echo&amp;diff=118760</id>
		<title>Team Echo</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Team_Echo&amp;diff=118760"/>
		<updated>2017-03-19T13:41:39Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Team Echo Võrgurakendused II =&lt;br /&gt;
&lt;br /&gt;
* Mihkel Vajak&lt;br /&gt;
* Janno Oolo&lt;br /&gt;
* Mari-Liis Oldja&lt;br /&gt;
* Arti Zirk&lt;br /&gt;
* Joosep Voolma&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==XML==&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;Echo-html.xslt&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;echo&amp;gt;&lt;br /&gt;
    &amp;lt;videos&amp;gt;&lt;br /&gt;
      &amp;lt;video id=&amp;quot;1&amp;quot; view-count=&amp;quot;69&amp;quot; author-id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Mihkli rännak&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;streams&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;primary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/webm&amp;quot;&amp;gt;https://u.wut.ee/ookutsu.webm&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/mp3&amp;quot;&amp;gt;https://media/id/audio.mp3&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/mp4&amp;quot;&amp;gt;https://media/id/video.mp4&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;secondary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/*&amp;quot;&amp;gt;https://media/id/audio2&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
        &amp;lt;/streams&amp;gt;&lt;br /&gt;
        &amp;lt;metadata&amp;gt;&lt;br /&gt;
          &amp;lt;description&amp;gt;&lt;br /&gt;
            Väga kurb&lt;br /&gt;
          &amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/metadata&amp;gt;&lt;br /&gt;
        &amp;lt;comments&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;1&amp;quot; post-timestamp=&amp;quot;1489683470&amp;quot;&amp;gt;&lt;br /&gt;
            Norm värk&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;/comments&amp;gt;&lt;br /&gt;
      &amp;lt;/video&amp;gt;&lt;br /&gt;
      &amp;lt;video id=&amp;quot;2&amp;quot; view-count=&amp;quot;69&amp;quot; author-id=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Lahe video&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;streams&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;primary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/webm&amp;quot;&amp;gt;https://u.wut.ee/youfuckedup.webm&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/mp3&amp;quot;&amp;gt;https://media/id/audio.mp3&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/mp4&amp;quot;&amp;gt;https://media/id/video.mp4&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;secondary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/*&amp;quot;&amp;gt;https://media/id/audio2&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
        &amp;lt;/streams&amp;gt;&lt;br /&gt;
        &amp;lt;metadata&amp;gt;&lt;br /&gt;
          &amp;lt;description&amp;gt;&lt;br /&gt;
            See on väga äge video on see&lt;br /&gt;
          &amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/metadata&amp;gt;&lt;br /&gt;
        &amp;lt;comments&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;1&amp;quot; post-timestamp=&amp;quot;1489683470&amp;quot;&amp;gt;&lt;br /&gt;
            Norm värk&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;2&amp;quot; post-timestamp=&amp;quot;1489683470&amp;quot;&amp;gt;&lt;br /&gt;
            Norm värk 2&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;/comments&amp;gt;&lt;br /&gt;
      &amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;video id=&amp;quot;3&amp;quot; view-count=&amp;quot;69&amp;quot; author-id=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Nalja kah&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;streams&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;primary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/webm&amp;quot;&amp;gt;https://u.wut.ee/perlvspython.webm&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/mp3&amp;quot;&amp;gt;https://media/id/audio.mp3&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/mp4&amp;quot;&amp;gt;https://media/id/video.mp4&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;secondary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/*&amp;quot;&amp;gt;https://media/id/audio2&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
        &amp;lt;/streams&amp;gt;&lt;br /&gt;
        &amp;lt;metadata&amp;gt;&lt;br /&gt;
          &amp;lt;description&amp;gt;&lt;br /&gt;
            Väga hea huumor&lt;br /&gt;
          &amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/metadata&amp;gt;&lt;br /&gt;
        &amp;lt;comments&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;1&amp;quot; post-timestamp=&amp;quot;1489683470&amp;quot;&amp;gt;&lt;br /&gt;
            Norm värk&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;/comments&amp;gt;&lt;br /&gt;
      &amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;video id=&amp;quot;4&amp;quot; view-count=&amp;quot;69&amp;quot; author-id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Arti areng&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;streams&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;primary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/webm&amp;quot;&amp;gt;https://u.wut.ee/sittmissitt.webm&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/mp3&amp;quot;&amp;gt;https://media/id/audio.mp3&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/mp4&amp;quot;&amp;gt;https://media/id/video.mp4&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;secondary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/*&amp;quot;&amp;gt;https://media/id/audio2&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
        &amp;lt;/streams&amp;gt;&lt;br /&gt;
        &amp;lt;metadata&amp;gt;&lt;br /&gt;
          &amp;lt;description&amp;gt;&lt;br /&gt;
            Väga kurb&lt;br /&gt;
          &amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/metadata&amp;gt;&lt;br /&gt;
        &amp;lt;comments&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;1&amp;quot; post-timestamp=&amp;quot;1489683470&amp;quot;&amp;gt;&lt;br /&gt;
            Imelik oli&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;/comments&amp;gt;&lt;br /&gt;
      &amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;video id=&amp;quot;4&amp;quot; view-count=&amp;quot;69&amp;quot; author-id=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Oldja laulud&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;streams&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;primary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/webm&amp;quot;&amp;gt;https://u.wut.ee/healtscare.webm&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/mp3&amp;quot;&amp;gt;https://media/id/audio.mp3&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/mp4&amp;quot;&amp;gt;https://media/id/video.mp4&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;secondary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/*&amp;quot;&amp;gt;https://media/id/audio2&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
        &amp;lt;/streams&amp;gt;&lt;br /&gt;
        &amp;lt;metadata&amp;gt;&lt;br /&gt;
          &amp;lt;description&amp;gt;&lt;br /&gt;
            Draama Queen&lt;br /&gt;
          &amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/metadata&amp;gt;&lt;br /&gt;
        &amp;lt;comments&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;1&amp;quot; post-timestamp=&amp;quot;1489683420&amp;quot;&amp;gt;&lt;br /&gt;
            Norm värk&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;/comments&amp;gt;&lt;br /&gt;
      &amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;video id=&amp;quot;4&amp;quot; view-count=&amp;quot;69&amp;quot; author-id=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Osa 13 ehk Oolo kadumine&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;streams&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;primary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/webm&amp;quot;&amp;gt;https://u.wut.ee/healtscare.webm&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/mp3&amp;quot;&amp;gt;https://media/id/audio.mp3&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/mp4&amp;quot;&amp;gt;https://media/id/video.mp4&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;secondary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/*&amp;quot;&amp;gt;https://media/id/audio2&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
        &amp;lt;/streams&amp;gt;&lt;br /&gt;
        &amp;lt;metadata&amp;gt;&lt;br /&gt;
          &amp;lt;description&amp;gt;&lt;br /&gt;
            Lihtsalt kadus ära&lt;br /&gt;
          &amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/metadata&amp;gt;&lt;br /&gt;
        &amp;lt;comments&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;1&amp;quot; post-timestamp=&amp;quot;1489683470&amp;quot;&amp;gt;&lt;br /&gt;
            Norm värk&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;/comments&amp;gt;&lt;br /&gt;
      &amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/videos&amp;gt;&lt;br /&gt;
    &amp;lt;users&amp;gt;&lt;br /&gt;
      &amp;lt;user id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;username&amp;gt;admin&amp;lt;/username&amp;gt;&lt;br /&gt;
        &amp;lt;full-name&amp;gt;Admin&amp;lt;/full-name&amp;gt;&lt;br /&gt;
      &amp;lt;/user&amp;gt;&lt;br /&gt;
      &amp;lt;user id=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;username&amp;gt;oolo&amp;lt;/username&amp;gt;&lt;br /&gt;
        &amp;lt;full-name&amp;gt;Oolo&amp;lt;/full-name&amp;gt;&lt;br /&gt;
      &amp;lt;/user&amp;gt;&lt;br /&gt;
      &amp;lt;user id =&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;username&amp;gt;zirk&amp;lt;/username&amp;gt;&lt;br /&gt;
        &amp;lt;full-name&amp;gt;Hr. Zirk&amp;lt;/full-name&amp;gt;&lt;br /&gt;
      &amp;lt;/user&amp;gt;&lt;br /&gt;
    &amp;lt;/users&amp;gt;&lt;br /&gt;
    &amp;lt;lists&amp;gt;&lt;br /&gt;
      &amp;lt;list owner-id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;video id=&amp;quot;1&amp;quot; timestamp-added=&amp;quot;1489684373&amp;quot;&amp;gt;&amp;lt;/video&amp;gt;&lt;br /&gt;
        &amp;lt;video id=&amp;quot;3&amp;quot; timestamp-added=&amp;quot;1489684379&amp;quot;&amp;gt;&amp;lt;/video&amp;gt;&lt;br /&gt;
      &amp;lt;/list&amp;gt;&lt;br /&gt;
    &amp;lt;/lists&amp;gt;&lt;br /&gt;
  &amp;lt;/echo&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==XSLT XML==&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;&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;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;videos&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;echo/videos/video&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;video&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:variable name=&amp;quot;author-id&amp;quot; select=&amp;quot;@author-id&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:copy-of select=&amp;quot;streams/stream[@type=&#039;primary&#039;]&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;autor&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:copy-of select=&amp;quot;/echo/users/user[@id=$author-id]&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/autor&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;metadata/description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;comments&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:variable name=&amp;quot;comment-author-id&amp;quot; select=&amp;quot;@author-id&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;/text&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:copy-of select=&amp;quot;/echo/users/user[@id=$comment-author-id]/username&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:copy-of select=&amp;quot;/echo/users/user[@id=$comment-author-id]/full-name&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/comments&amp;gt;&lt;br /&gt;
          &amp;lt;/video&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/videos&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;
&lt;br /&gt;
==XSLT HTML==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&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;/&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;html&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Media Kogumik&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;https://d.arti.ee/media.css&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;echo/videos/video&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:variable name=&amp;quot;author-id&amp;quot; select=&amp;quot;@author-id&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;h3&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;h4&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;/echo/users/user[@id=$author-id]/full-name&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/h4&amp;gt;&lt;br /&gt;
            &amp;lt;video controls=&amp;quot;&amp;quot; loop=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;streams/stream[@type=&#039;primary&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;stream-url&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;source&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:attribute name=&amp;quot;type&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@mime-type&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                  &amp;lt;/source&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;/video&amp;gt;&lt;br /&gt;
            &amp;lt;p&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;metadata/description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/p&amp;gt;&lt;br /&gt;
            &amp;lt;div&amp;gt;&lt;br /&gt;
              &amp;lt;h4&amp;gt;Komentaarid:&amp;lt;/h4&amp;gt;&lt;br /&gt;
              &amp;lt;ol&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;li&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:variable name=&amp;quot;comment-author-id&amp;quot; select=&amp;quot;@author-id&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;div&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                    &amp;lt;div&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Autor:&amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;/echo/users/user[@id=$comment-author-id]/full-name&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&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;/ol&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;hr/&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&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;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==XSD==&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;echo&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;videos&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;video&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;streams&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;stream&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;stream-url&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;mime-type&amp;quot; type=&amp;quot;xs:string&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:attribute name=&amp;quot;type&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:element name=&amp;quot;metadata&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;description&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;comments&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;comment&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;author-id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;post-timestamp&amp;quot; type=&amp;quot;xs:unsignedInt&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:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:attribute name=&amp;quot;view-count&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:attribute name=&amp;quot;author-id&amp;quot; type=&amp;quot;xs:unsignedInt&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:element name=&amp;quot;users&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;user&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;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:element name=&amp;quot;full-name&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:unsignedInt&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:element name=&amp;quot;lists&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;list&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;video&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:attribute name=&amp;quot;timestamp-added&amp;quot; type=&amp;quot;xs:unsignedInt&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;owner-id&amp;quot; type=&amp;quot;xs:unsignedInt&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;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Team_Echo&amp;diff=118759</id>
		<title>Team Echo</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Team_Echo&amp;diff=118759"/>
		<updated>2017-03-19T13:28:28Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Team Echo Võrgurakendused II =&lt;br /&gt;
&lt;br /&gt;
* Mihkel Vajak&lt;br /&gt;
* Janno Oolo&lt;br /&gt;
* Mari-Liis Oldja&lt;br /&gt;
* Arti Zirk&lt;br /&gt;
* Joosep Voolma&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==XML==&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;Echo-html.xslt&amp;quot;?&amp;gt;&lt;br /&gt;
  &amp;lt;echo&amp;gt;&lt;br /&gt;
    &amp;lt;videos&amp;gt;&lt;br /&gt;
      &amp;lt;video id=&amp;quot;1&amp;quot; view-count=&amp;quot;69&amp;quot; author-id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Mihkli rännak&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;streams&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;primary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/webm&amp;quot;&amp;gt;https://u.wut.ee/ookutsu.webm&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/mp3&amp;quot;&amp;gt;https://media/id/audio.mp3&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/mp4&amp;quot;&amp;gt;https://media/id/video.mp4&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;secondary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/*&amp;quot;&amp;gt;https://media/id/audio2&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
        &amp;lt;/streams&amp;gt;&lt;br /&gt;
        &amp;lt;metadata&amp;gt;&lt;br /&gt;
          &amp;lt;description&amp;gt;&lt;br /&gt;
            Väga kurb&lt;br /&gt;
          &amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/metadata&amp;gt;&lt;br /&gt;
        &amp;lt;comments&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;1&amp;quot; post-timestamp=&amp;quot;1489683470&amp;quot;&amp;gt;&lt;br /&gt;
            Norm värk&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;/comments&amp;gt;&lt;br /&gt;
      &amp;lt;/video&amp;gt;&lt;br /&gt;
      &amp;lt;video id=&amp;quot;2&amp;quot; view-count=&amp;quot;69&amp;quot; author-id=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Lahe video&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;streams&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;primary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/webm&amp;quot;&amp;gt;https://u.wut.ee/youfuckedup.webm&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/mp3&amp;quot;&amp;gt;https://media/id/audio.mp3&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/mp4&amp;quot;&amp;gt;https://media/id/video.mp4&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;secondary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/*&amp;quot;&amp;gt;https://media/id/audio2&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
        &amp;lt;/streams&amp;gt;&lt;br /&gt;
        &amp;lt;metadata&amp;gt;&lt;br /&gt;
          &amp;lt;description&amp;gt;&lt;br /&gt;
            See on väga äge video on see&lt;br /&gt;
          &amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/metadata&amp;gt;&lt;br /&gt;
        &amp;lt;comments&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;1&amp;quot; post-timestamp=&amp;quot;1489683470&amp;quot;&amp;gt;&lt;br /&gt;
            Norm värk&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;2&amp;quot; post-timestamp=&amp;quot;1489683470&amp;quot;&amp;gt;&lt;br /&gt;
            Norm värk 2&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;/comments&amp;gt;&lt;br /&gt;
      &amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;video id=&amp;quot;3&amp;quot; view-count=&amp;quot;69&amp;quot; author-id=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Nalja kah&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;streams&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;primary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/webm&amp;quot;&amp;gt;https://u.wut.ee/perlvspython.webm&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/mp3&amp;quot;&amp;gt;https://media/id/audio.mp3&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/mp4&amp;quot;&amp;gt;https://media/id/video.mp4&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;secondary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/*&amp;quot;&amp;gt;https://media/id/audio2&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
        &amp;lt;/streams&amp;gt;&lt;br /&gt;
        &amp;lt;metadata&amp;gt;&lt;br /&gt;
          &amp;lt;description&amp;gt;&lt;br /&gt;
            Väga hea huumor&lt;br /&gt;
          &amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/metadata&amp;gt;&lt;br /&gt;
        &amp;lt;comments&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;1&amp;quot; post-timestamp=&amp;quot;1489683470&amp;quot;&amp;gt;&lt;br /&gt;
            Norm värk&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;/comments&amp;gt;&lt;br /&gt;
      &amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;video id=&amp;quot;4&amp;quot; view-count=&amp;quot;69&amp;quot; author-id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Arti areng&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;streams&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;primary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/webm&amp;quot;&amp;gt;https://u.wut.ee/sittmissitt.webm&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/mp3&amp;quot;&amp;gt;https://media/id/audio.mp3&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/mp4&amp;quot;&amp;gt;https://media/id/video.mp4&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;secondary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/*&amp;quot;&amp;gt;https://media/id/audio2&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
        &amp;lt;/streams&amp;gt;&lt;br /&gt;
        &amp;lt;metadata&amp;gt;&lt;br /&gt;
          &amp;lt;description&amp;gt;&lt;br /&gt;
            Väga kurb&lt;br /&gt;
          &amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/metadata&amp;gt;&lt;br /&gt;
        &amp;lt;comments&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;1&amp;quot; post-timestamp=&amp;quot;1489683470&amp;quot;&amp;gt;&lt;br /&gt;
            Imelik oli&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;/comments&amp;gt;&lt;br /&gt;
      &amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;video id=&amp;quot;4&amp;quot; view-count=&amp;quot;69&amp;quot; author-id=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Oldja laulud&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;streams&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;primary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/webm&amp;quot;&amp;gt;https://u.wut.ee/healtscare.webm&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/mp3&amp;quot;&amp;gt;https://media/id/audio.mp3&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/mp4&amp;quot;&amp;gt;https://media/id/video.mp4&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;secondary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/*&amp;quot;&amp;gt;https://media/id/audio2&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
        &amp;lt;/streams&amp;gt;&lt;br /&gt;
        &amp;lt;metadata&amp;gt;&lt;br /&gt;
          &amp;lt;description&amp;gt;&lt;br /&gt;
            Draama Queen&lt;br /&gt;
          &amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/metadata&amp;gt;&lt;br /&gt;
        &amp;lt;comments&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;1&amp;quot; post-timestamp=&amp;quot;1489683420&amp;quot;&amp;gt;&lt;br /&gt;
            Norm värk&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;/comments&amp;gt;&lt;br /&gt;
      &amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;video id=&amp;quot;4&amp;quot; view-count=&amp;quot;69&amp;quot; author-id=&amp;quot;5&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Osa 13 ehk Oolo kadumine&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;streams&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;primary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/webm&amp;quot;&amp;gt;https://u.wut.ee/healtscare.webm&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/mp3&amp;quot;&amp;gt;https://media/id/audio.mp3&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;video/mp4&amp;quot;&amp;gt;https://media/id/video.mp4&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
          &amp;lt;stream type=&amp;quot;secondary&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;stream-url mime-type=&amp;quot;audio/*&amp;quot;&amp;gt;https://media/id/audio2&amp;lt;/stream-url&amp;gt;&lt;br /&gt;
          &amp;lt;/stream&amp;gt;&lt;br /&gt;
        &amp;lt;/streams&amp;gt;&lt;br /&gt;
        &amp;lt;metadata&amp;gt;&lt;br /&gt;
          &amp;lt;description&amp;gt;&lt;br /&gt;
            Lihtsalt kadus ära&lt;br /&gt;
          &amp;lt;/description&amp;gt;&lt;br /&gt;
        &amp;lt;/metadata&amp;gt;&lt;br /&gt;
        &amp;lt;comments&amp;gt;&lt;br /&gt;
          &amp;lt;comment author-id=&amp;quot;1&amp;quot; post-timestamp=&amp;quot;1489683470&amp;quot;&amp;gt;&lt;br /&gt;
            Norm värk&lt;br /&gt;
          &amp;lt;/comment&amp;gt;&lt;br /&gt;
        &amp;lt;/comments&amp;gt;&lt;br /&gt;
      &amp;lt;/video&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/videos&amp;gt;&lt;br /&gt;
    &amp;lt;users&amp;gt;&lt;br /&gt;
      &amp;lt;user id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;username&amp;gt;admin&amp;lt;/username&amp;gt;&lt;br /&gt;
        &amp;lt;full-name&amp;gt;Admin&amp;lt;/full-name&amp;gt;&lt;br /&gt;
      &amp;lt;/user&amp;gt;&lt;br /&gt;
      &amp;lt;user id=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;username&amp;gt;oolo&amp;lt;/username&amp;gt;&lt;br /&gt;
        &amp;lt;full-name&amp;gt;Oolo&amp;lt;/full-name&amp;gt;&lt;br /&gt;
      &amp;lt;/user&amp;gt;&lt;br /&gt;
      &amp;lt;user id =&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;username&amp;gt;zirk&amp;lt;/username&amp;gt;&lt;br /&gt;
        &amp;lt;full-name&amp;gt;Hr. Zirk&amp;lt;/full-name&amp;gt;&lt;br /&gt;
      &amp;lt;/user&amp;gt;&lt;br /&gt;
    &amp;lt;/users&amp;gt;&lt;br /&gt;
    &amp;lt;lists&amp;gt;&lt;br /&gt;
      &amp;lt;list owner-id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;video id=&amp;quot;1&amp;quot; timestamp-added=&amp;quot;1489684373&amp;quot;&amp;gt;&amp;lt;/video&amp;gt;&lt;br /&gt;
        &amp;lt;video id=&amp;quot;3&amp;quot; timestamp-added=&amp;quot;1489684379&amp;quot;&amp;gt;&amp;lt;/video&amp;gt;&lt;br /&gt;
      &amp;lt;/list&amp;gt;&lt;br /&gt;
    &amp;lt;/lists&amp;gt;&lt;br /&gt;
  &amp;lt;/echo&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==XSLT XML==&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;&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;xml&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;videos&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;echo/videos/video&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;video&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:variable name=&amp;quot;author-id&amp;quot; select=&amp;quot;@author-id&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;title&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/title&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:copy-of select=&amp;quot;streams/stream[@type=&#039;primary&#039;]&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;autor&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:copy-of select=&amp;quot;/echo/users/user[@id=$author-id]&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/autor&amp;gt;&lt;br /&gt;
            &amp;lt;description&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;metadata/description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/description&amp;gt;&lt;br /&gt;
            &amp;lt;comments&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:variable name=&amp;quot;comment-author-id&amp;quot; select=&amp;quot;@author-id&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;comment&amp;gt;&lt;br /&gt;
                  &amp;lt;text&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;/text&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:copy-of select=&amp;quot;/echo/users/user[@id=$comment-author-id]/username&amp;quot; /&amp;gt;&lt;br /&gt;
                  &amp;lt;xsl:copy-of select=&amp;quot;/echo/users/user[@id=$comment-author-id]/full-name&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/comment&amp;gt;&lt;br /&gt;
              &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
            &amp;lt;/comments&amp;gt;&lt;br /&gt;
          &amp;lt;/video&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
      &amp;lt;/videos&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;
&lt;br /&gt;
==XSLT HTML==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&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;/&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;html&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Media Kogumik&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:for-each select=&amp;quot;echo/videos/video&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:variable name=&amp;quot;author-id&amp;quot; select=&amp;quot;@author-id&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;h3&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;title&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/h3&amp;gt;&lt;br /&gt;
            &amp;lt;h4&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;/echo/users/user[@id=$author-id]/full-name&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/h4&amp;gt;&lt;br /&gt;
            &amp;lt;video controls=&amp;quot;&amp;quot; loop=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:for-each select=&amp;quot;streams/stream[@type=&#039;primary&#039;]&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;stream-url&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;source&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:attribute name=&amp;quot;type&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;@mime-type&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:attribute name=&amp;quot;src&amp;quot;&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
                  &amp;lt;/source&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;/video&amp;gt;&lt;br /&gt;
            &amp;lt;p&amp;gt;&lt;br /&gt;
              &amp;lt;xsl:value-of select=&amp;quot;metadata/description&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/p&amp;gt;&lt;br /&gt;
            &amp;lt;div&amp;gt;&lt;br /&gt;
              &amp;lt;h4&amp;gt;Komentaarid:&amp;lt;/h4&amp;gt;&lt;br /&gt;
              &amp;lt;ol&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:for-each select=&amp;quot;comments/comment&amp;quot;&amp;gt;&lt;br /&gt;
                  &amp;lt;li&amp;gt;&lt;br /&gt;
                    &amp;lt;xsl:variable name=&amp;quot;comment-author-id&amp;quot; select=&amp;quot;@author-id&amp;quot;/&amp;gt;&lt;br /&gt;
                    &amp;lt;div&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;.&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&amp;gt;&lt;br /&gt;
                    &amp;lt;div&amp;gt;&lt;br /&gt;
                      &amp;lt;b&amp;gt;Autor:&amp;lt;/b&amp;gt;&lt;br /&gt;
                      &amp;lt;xsl:value-of select=&amp;quot;/echo/users/user[@id=$comment-author-id]/full-name&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;/div&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;/ol&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;/div&amp;gt;&lt;br /&gt;
          &amp;lt;hr/&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:for-each&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;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==XSD==&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;echo&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;videos&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;video&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;streams&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;stream&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;stream-url&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;mime-type&amp;quot; type=&amp;quot;xs:string&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:attribute name=&amp;quot;type&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:element name=&amp;quot;metadata&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;description&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;comments&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;comment&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;author-id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                                    &amp;lt;xs:attribute name=&amp;quot;post-timestamp&amp;quot; type=&amp;quot;xs:unsignedInt&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:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:attribute name=&amp;quot;view-count&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                    &amp;lt;xs:attribute name=&amp;quot;author-id&amp;quot; type=&amp;quot;xs:unsignedInt&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:element name=&amp;quot;users&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;user&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;username&amp;quot; type=&amp;quot;xs:string&amp;quot; /&amp;gt;&lt;br /&gt;
                      &amp;lt;xs:element name=&amp;quot;full-name&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:unsignedInt&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:element name=&amp;quot;lists&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;list&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;video&amp;quot;&amp;gt;&lt;br /&gt;
                        &amp;lt;xs:complexType&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:attribute name=&amp;quot;id&amp;quot; type=&amp;quot;xs:unsignedInt&amp;quot; use=&amp;quot;required&amp;quot; /&amp;gt;&lt;br /&gt;
                          &amp;lt;xs:attribute name=&amp;quot;timestamp-added&amp;quot; type=&amp;quot;xs:unsignedInt&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;owner-id&amp;quot; type=&amp;quot;xs:unsignedInt&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;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017&amp;diff=118606</id>
		<title>Kodutöö aines &quot;Võrgurakendused II: hajussüsteemide ehitamine&quot; 2017</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Kodut%C3%B6%C3%B6_aines_%22V%C3%B5rgurakendused_II:_hajuss%C3%BCsteemide_ehitamine%22_2017&amp;diff=118606"/>
		<updated>2017-03-16T16:15:52Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: /* Päevaõpe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Võrgurakendused II: hajussüsteemide ehitamine]]&lt;br /&gt;
__NOINDEX__&lt;br /&gt;
&lt;br /&gt;
=Kodutöö aines &amp;quot;Võrgurakendused II: hajussüsteemide ehitamine&amp;quot; 2017=&lt;br /&gt;
==Eesmärk==&lt;br /&gt;
Saada praktiline kogemus hajussüsteemide ehitamisest XML(SOAP) või Rest veebiteenusel ja sellele klientrakenduse loomise abil ning süvendada meeskonnatööoskust. &lt;br /&gt;
*SOAP veebiteenuse puhul eeldatakse WCF tehnoloogia kasutamist. Vanema põlvkonna ASP.NET veebiteenuse loomine ei ole lubatud, kuna seda ei toeta ka Microsoft enam tänasel päeval.&lt;br /&gt;
*REST teenuste loomisel tuleks kasutada ASP.NET Web API võimalusi.&lt;br /&gt;
&lt;br /&gt;
Kaugem eesmärk on loomulikult hinne :).&lt;br /&gt;
&lt;br /&gt;
==Reeglid==&lt;br /&gt;
&#039;&#039;&#039; Kodutöö koosneb kolmest eraldiseisvast ülesandest:&#039;&#039;&#039;&lt;br /&gt;
* Luua XML fail vabalt valitud andmete edastamiseks,selle faili skeemifail ning XSL fail(id) erinevate transformatsioonide tarvis (soovitavalt vähemalt andmete HTML ja XML kujul kuvamiseks)&lt;br /&gt;
* Luua veebiteenus, mis võimaldaks pakkuda teenust, eristada kasutajaid ning näidata teenuse kasutamise statistikat kasutajate ja tegevuste lõikes&lt;br /&gt;
* Luua klientrakendused (soovitavalt vähemalt kaks)endaloodud veebiteenusele&lt;br /&gt;
&lt;br /&gt;
Ühte projektimeeskonda kuulub 3..4 tudengit ning ühel teemal teostab projekti üks või mitu meeskonda. 1,2 ja viie liikmelised meeskonnad tuleks õppejõuga eraldi kooskõlastada.&lt;br /&gt;
&lt;br /&gt;
Töö käiku kajastatakse  http://wiki.itcollege.ee keskkonnas. Wikilehe täitmise eesmärke on kaks: nii on võimalik kirja panna kõik mõtted ja ideed (ning nendest jääb jälg) ning õppejõul on hiljem võimalik saada ülevaade iga projektimeeskonna liikme panusest.&lt;br /&gt;
&lt;br /&gt;
==Tähtajad==&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_2017#XML_andmefail NB! Täpsem info]&lt;br /&gt;
** XML fail, stiilifail ja skeemifail peavad olema valmis ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;20. märts 2017&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid XML-failide kohta peavad tehtud olema &#039;&#039;&#039;27. märts 2017&#039;&#039;&#039;.&lt;br /&gt;
** &#039;&#039;&#039;Meeskonnad on loonud omale enda wiki lehe, kuhu kirjeldavad meeskonna ja panevad nad üles oma tööd. Lisaks hakkavad kogunema ka sinna teiste gruppide poolt kirjutatavad retsensioonid. &amp;lt;ins&amp;gt;Meeskonnalehed lingitakse selle lehe lõppu Meeskonna pealkirja alla.&amp;lt;/ins&amp;gt;&#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_2017#Veebiteenus NB! Täpsem info]&lt;br /&gt;
** Veebiteenuse analüüs peab olema valmis, esitatud ja wikilehel kirjeldatud hiljemalt: &#039;&#039;&#039;17.aprill 2017&#039;&#039;&#039;&lt;br /&gt;
** Veebiteenus peab olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;29. mai 2017&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid veebiteenuste kohta peavad tehtud olema &#039;&#039;&#039;08. juuni 2017&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--** Veebiteenus tuleb esitleda!--&amp;gt;&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_2017#Klientrakendus NB! Täpsem info]&lt;br /&gt;
** Klientrakendused peavad olema valmis, esitatud ja ja wikilehel kirjeldatud hiljemalt &#039;&#039;&#039;29. mai 2017&#039;&#039;&#039;.&lt;br /&gt;
** Retsensioonid klientrakenduste kohta peavad tehtud olema &#039;&#039;&#039;08. juuni 2017&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--** Klientrakendused tuleb esitleda!--&amp;gt;&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 2011&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!--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hindamine==&lt;br /&gt;
===Üldised kriteeriumid===&lt;br /&gt;
&lt;br /&gt;
Teostatuks loetakse projekt juhul, kui lähteülesanne on realiseeritud, lahendus on töötav, kuid esineb suuremaid vigu ning piirsituatsioonidega ei ole arvestatud.&lt;br /&gt;
&lt;br /&gt;
Maksimumtulemuse saavutamiseks peab projekt olema teostatud tehniliselt veatult ning varustatud dokumentatsiooniga, milles sisaldub  arendusprotsessi kirjeldus (peab selguma ka iga rühmaliikme panus projekti teostamisel), kasutajajuhend ning lahenduse kirjeldus. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Maksimumtulemuse annab (vähemalt 4/6):&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Majanduslik mõtlemine (kas loodav teenus ja rakendused oleks kasutatav ka ärilistel eesmärkidel)&lt;br /&gt;
* Mobiilrakendused &lt;br /&gt;
* AngularJS klientrakendus&lt;br /&gt;
* Kogukondade kaasamine&lt;br /&gt;
* Kasutajamugavus&lt;br /&gt;
* Läbimõeldud töökorraldus&lt;br /&gt;
* Lisavõimaluste realiseerimine (vt näidisteemad)&lt;br /&gt;
&lt;br /&gt;
===XML andmefail===&lt;br /&gt;
Ülesande täitmiseks tuleb luua XML fail andmete edastamiseks, selle XML faili skeemifail ning minimaalselt kaks sobivat XSL transformatsiooni faili loodud XML failis olevate andmete transformeerimiseks HTML formaati ja XML faili formaadi muutmiseks. Transformatsioonid peavad sisaldama midagi enamat, kui ainult üks for-each klausel. Transformatsiooni käigus peaks kasutama vajadusel parameetreid ning kindlasti ka erinevaid tingimuste kontrolle.&lt;br /&gt;
&lt;br /&gt;
XML-il peab olema vähemalt 4 loogilist dimensiooni.&lt;br /&gt;
 &amp;lt;dim1&amp;gt;&lt;br /&gt;
   &amp;lt;dim2&amp;gt;&lt;br /&gt;
     &amp;lt;dim3&amp;gt;&lt;br /&gt;
       &amp;lt;dim4&amp;gt;&lt;br /&gt;
       &amp;lt;/dim4&amp;gt;&lt;br /&gt;
     &amp;lt;/dim3&amp;gt;&lt;br /&gt;
   &amp;lt;/dim2&amp;gt;&lt;br /&gt;
 &amp;lt;/dim1&amp;gt;&lt;br /&gt;
Lisaks tuleb kasutada 3-el dimensioonil attribuute, mis one enamat, kui lihtsalt ID.&lt;br /&gt;
&lt;br /&gt;
Käesoleva ülesande käigus peab looma meeskonna ning selle wiki lehekülje&lt;br /&gt;
&lt;br /&gt;
===Veebiteenus===&lt;br /&gt;
Loodav veebiteenus peab võimaldama:&lt;br /&gt;
* Teenuse pakkumist&lt;br /&gt;
* &#039;&#039;&#039;Teenuse kasutajate tuvastamist ning haldamist&#039;&#039;&#039;&lt;br /&gt;
* Teenuse kasutajate ja kasutusstatistika üle arve pidamist kasutajate lõikes&lt;br /&gt;
* Teenuse poole pöördumiste arvu piiramist ja piirangute haldamist.&lt;br /&gt;
&lt;br /&gt;
Loodav veebiteenus peab toetama mitme kasutaja võimalust.&lt;br /&gt;
&lt;br /&gt;
Loodav veebiteenus tuleb luua kasutades &#039;&#039;Windows Communication Foundation&#039;&#039; või ASP.NET MVC  Web API tehnoloogiat&lt;br /&gt;
&lt;br /&gt;
Andmebaasis peab olema vähemalt 9 olemit ehk andmebaas on eeldus,&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Soovitav on luua teenus (FE) ja teenuse seadistamiseks ning kasutajate haldamiseks mõeldud rakendus (BE).&lt;br /&gt;
&lt;br /&gt;
===Klientrakendus===&lt;br /&gt;
Klientrakendus mõnele olemasolevale veebiteenusele, võib olla teostatud veebirakendusena, Silverlight, WPF või vormirakendusena.&lt;br /&gt;
&lt;br /&gt;
Variant1: teha klientrakendus enda loodud veebiteenusele &lt;br /&gt;
&lt;br /&gt;
Variant2: teha klientrakendus mõnele levinud veebiteenusele.&lt;br /&gt;
Näiteks: &lt;br /&gt;
* http://www.bing.com/developer&lt;br /&gt;
* http://www.flickr.com/services/api/response.soap.html&lt;br /&gt;
* http://developer.ebay.com/developercenter/windows/&lt;br /&gt;
* http://apiwiki.twitter.com/Getting-Started&lt;br /&gt;
&lt;br /&gt;
===Retsensioonid===&lt;br /&gt;
Retsensioon on üliõpilase iseseisva teadustöö kriitilise analüüsi põhjal koostatud argumenteeritud hinnang. Retsensioonis tuleb hinnata töö vastavust esitatud tingimustele, programmikoodi loetavust ning kommenteeritust, dokumentatsiooni ja kirjeldada puudusi. Retsensioonide põhjal on meeskondadel õigus oma projekte parandada enne määratud esitamistähtaja kättejõudmist.&lt;br /&gt;
&lt;br /&gt;
Retsensioon peab sisaldama minimaalselt...&lt;br /&gt;
* XML - ...200 sõna.&lt;br /&gt;
* Veebiteenus - ...600 sõna.&lt;br /&gt;
* Klientrakendus - ...600 sõna.&lt;br /&gt;
&lt;br /&gt;
Mõnelauselisest arvamusest ei piisa, kuna tegemist on grupi loodavate arvustustega, mitte individuaalsete arvustustega.&lt;br /&gt;
&lt;br /&gt;
==Konsultatsioonid==&lt;br /&gt;
 Igal projektimeeskonnal on piiramatu õigus saada õppejõu käest konsultatsiooni ja juhendamist oma&lt;br /&gt;
 töö tegemiseks, kas harjutuste ajal või pärast harjutusi ja loenguid. Eriaegade suhtes saab sõlmida&lt;br /&gt;
 õppejõuga kokkuleppeid kontaktidel&lt;br /&gt;
 mait.poska [ät] itcollege.ee või (+372 53 469 734)&lt;br /&gt;
 (teksti originaalautor Priit Raspel)&lt;br /&gt;
&lt;br /&gt;
=Teemad 2017 kevad=&lt;br /&gt;
&#039;&#039;&#039; Kodutöö koosneb kolmest eraldiseisvast ülesandest:&#039;&#039;&#039;&lt;br /&gt;
* Luua XML fail vabalt valitud andmete edastamiseks,selle faili skeemifail ning XSL fail(id) erinevate transformatsioonide tarvis (soovitavalt vähemalt andmete HTML ja XML kujul kuvamiseks)&lt;br /&gt;
* Luua veebiteenus, mis võimaldaks pakkuda teenust, eristada kasutajaid ning näidata teenuse kasutamise statistikat kasutajate ja tegevuste lõikes&lt;br /&gt;
* Luua klientrakendus mõnele olemasolevale või endaloodud veebiteenusele&lt;br /&gt;
&lt;br /&gt;
NB! XML andmefail ja veebiteenus ei pea olema omavahel seotud.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Näidisteemad==&lt;br /&gt;
&lt;br /&gt;
===Nimede pakkumise teenus===&lt;br /&gt;
Mõte selles, et luua nimede baas, mille abil pakkuda rakenduse loojale sobiva algusega nimesid. Reaalne rakendus: &#039;&#039;autocompleter&#039;&#039; tarvis teenuse pakkumine&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua sobiva alguse järgi nimede pakkumise teenus:&lt;br /&gt;
* alates kahetähelisetest algustest pakkuda sobivad nimesid&lt;br /&gt;
* luua võimalus kasutajatel nimesid lisada&lt;br /&gt;
* luua võimalus administraatoril nimesid muuta/kustutada&lt;br /&gt;
* meeste ja naiste nimed peavad olema süsteemis eristatavad&lt;br /&gt;
* luua võimalus, mis võimaldab kuvada populaarseid nimesid&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* luua võimalus, et nimi lisatakse baasi alles siis, kui administraatori õigustega inimene on selleks vastava loa andnud&lt;br /&gt;
&lt;br /&gt;
===Külastusstatistika teenus===&lt;br /&gt;
Mõte selles, et pakkuda teenust, kus kasutajal on võimalik registreerida külastused ning küsida oma külastusstatistikat.&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua külastusstatistika teenus:&lt;br /&gt;
* kasutaja saab teenuses registreerida külastusi&lt;br /&gt;
* kasutaja saab küsida külastusstatistikat päevade/kuude/kogu perioodi lõikes&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
&lt;br /&gt;
Lisavõimalused:&lt;br /&gt;
* luua võimalus registreerida alamlehtede külastusstatistikat&lt;br /&gt;
* luua võimalus külastusstatistikale lisaparameetrite lisamiseks (ip aadress, sirviku versioon jne)&lt;br /&gt;
&lt;br /&gt;
===Telefoniraamatu teenus===&lt;br /&gt;
Mõte selles, et kasutaja saab teenuse abil salvestada kontakte ja nende seast otsida&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua telefoniraamatu teenus:&lt;br /&gt;
* kasutaja saab teenuses kontakte lisada ja kustutada&lt;br /&gt;
* kasutaja saab kontaktide nime/telefoninumbri jne abil otsida&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* kasutajaid on võimalik lisada gruppidesse&lt;br /&gt;
* kasutajal on võimalik lisada vajalike kontaktandmete liike&lt;br /&gt;
* kasutajatel on võimalik jagada omavahel kontakte ja kontaktide grupper&lt;br /&gt;
&lt;br /&gt;
===RSS voogude kogumise ja uudiste kuvamise teenus===&lt;br /&gt;
Mõte selles, et kasutaja saab teenuse abil salvestada talle huvipakkuvaid RSS vooge ja nendelt voogudelt uudiseid lugeda&lt;br /&gt;
&lt;br /&gt;
====Ülesanne====&lt;br /&gt;
Luua RSS voogude haldusteenus:&lt;br /&gt;
* kasutaja saab teenuses RSS vooge lisada ja kustudada&lt;br /&gt;
* kasutaja saab pärida talle huvipakkuvate voogude viimaseid uudiseid&lt;br /&gt;
* luua võimalus ühele kasutajale (või erinevatele kasutajagruppidele) maksimumpäringute hulga määramiseks&lt;br /&gt;
* kasutaja saab RSS vooge vaadata eraldi või grupeeritult&lt;br /&gt;
* vooge peab puhverdama, kuna voogude lugemine võtab enamasti üsna palju aega &lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
= Meeskonnad 2017=&lt;br /&gt;
==Päevaõpe==&lt;br /&gt;
&lt;br /&gt;
===Meeskond: QView===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Semjon Greef&lt;br /&gt;
* Martin Nigul&lt;br /&gt;
* Martin Nõukas&lt;br /&gt;
* Margus Muru&lt;br /&gt;
* Lisandra Noor&lt;br /&gt;
Meeskonna koduleht: [[Meeskond: QView]]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Redundant Rappers===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Taavi Kliss&lt;br /&gt;
*Kertu Nurmberg&lt;br /&gt;
*Anneli Asser&lt;br /&gt;
*Mart-Erki Nõumees&lt;br /&gt;
Meeskonna koduleht: [[Meeskond: Redundant Rappers]]&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Sense Of Direction===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Ilja Andrejev&lt;br /&gt;
*Aleksandr Babõkin&lt;br /&gt;
*Vladislav Lahtarin&lt;br /&gt;
*Vladislav Kovaltšuk&lt;br /&gt;
Meeskonna koduleht: [[Sense Of Direction]]&amp;lt;br&amp;gt;&lt;br /&gt;
XML/XSD/XSLT osa asub [https://wiki.itcollege.ee/index.php/Sense_Of_Direction#XML siin]&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/RK Meeskond: RK]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
*Raido Kivinurm&lt;br /&gt;
&lt;br /&gt;
Esimene osa: [https://wiki.itcollege.ee/index.php/RK#XML XML] / [https://wiki.itcollege.ee/index.php/RK#XSD XSD] / [https://wiki.itcollege.ee/index.php/RK#XSLT_HTML XSLT HTML] / [https://wiki.itcollege.ee/index.php/RK#XSLT_XML XSLT XML]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===[https://wiki.itcollege.ee/index.php/Team_Echo Meeskond: Echo]===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mihkel Vajak&lt;br /&gt;
* Janno Oolo&lt;br /&gt;
* Mari-Liis Oldja&lt;br /&gt;
* Arti Zirk&lt;br /&gt;
* Joosep Voolma&lt;br /&gt;
&lt;br /&gt;
==Kaugõpe==&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Team_Echo&amp;diff=118605</id>
		<title>Team Echo</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Team_Echo&amp;diff=118605"/>
		<updated>2017-03-16T16:14:15Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: Created page with &amp;quot;= Team Echo Võrgurakendused II =  * Mihkel Vajak * Janno Oolo * Mari-Liis Oldja * Arti Zirk * Joosep Voolma   == XML ==  TODO&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Team Echo Võrgurakendused II =&lt;br /&gt;
&lt;br /&gt;
* Mihkel Vajak&lt;br /&gt;
* Janno Oolo&lt;br /&gt;
* Mari-Liis Oldja&lt;br /&gt;
* Arti Zirk&lt;br /&gt;
* Joosep Voolma&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML ==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Pirate_Netflix&amp;diff=113579</id>
		<title>Pirate Netflix</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Pirate_Netflix&amp;diff=113579"/>
		<updated>2016-11-01T18:59:52Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programmeerimine CSharp keeles (2016)]]&lt;br /&gt;
= Analüüs =&lt;br /&gt;
== Millega on tegu? ==&lt;br /&gt;
Meie projektiks on Windowsi töölaua rakendus, mille abil saab kasutaja enda isiklikus arvutis vaadata filme ning seriaale mugavalt ja kiiresti. Meie rakendus sobib inimesele kellel normaalne interneti ühendus ning soovib kokku hoida kõvaketta ruumi. Filmid ja seriaalid mida kasutaja soovib vaadata asuvad meie serveris ja streamitakse sealt maha kasutades PirateNetflix rakendust. Kui filmi meie serveris ei eksisteeri, siis laetakse see enne peer-to-peer failijagamisteenust kasutades serverisse ning siis streamitakse kasutajale. Kasutajale kuvatakse rakenduse käivitades soovitatavad filmid, mis asuvad meie serveris, et kokku hoida aega mis kuluks filmi alla laadimisele. Kasutaja saab erinevate filtrite (filmi nimi, žanr, IMDb reiting, filmi ilmumise aasta) järgi filme otsida ning kuvada. Saab enne filmi käima panemist trailerit vaadata, et olla valikus kindel. Trailer mängitakse maha internetist youtube abil. PirateNetflix töötab ainult internetiühenduse olemasolul.&lt;br /&gt;
&lt;br /&gt;
== Meeskond ja rollid ==&lt;br /&gt;
* Mihkel Vajak - projektijuht. UI/UX disain.&lt;br /&gt;
* Arti Zirk - devops. Meie serveri ja andmebaaside kohandamine, serveri liidestus WPF rakendusega.&lt;br /&gt;
* Janno Oolo - Rakenduse sisene filmide player. Embedded Youtube player trailerite mängimiseks, installeri loomine.&lt;br /&gt;
* Joosep Voolmaa - YTS.ag REST API liidestus WPF rakendusega ja muu.&lt;br /&gt;
&lt;br /&gt;
== Funktsionaalsus ==&lt;br /&gt;
=== Must have ===&lt;br /&gt;
* Saadaval olevate filmide nimekirja (List&amp;lt;Movie&amp;gt;) kuvamine&amp;lt;br&amp;gt;Vaikimisi kuvatakse esilehel olevas filmide nimekirjas kõige uuemaid KaruMedia ja YTS.ag filme.&lt;br /&gt;
* Saadaval olevate filmide otsing&amp;lt;br&amp;gt;WPF rakenduses oleva TextBoxi ja selle kõrval oleva otsingu nupu vajutamisel kuvatakse otsingule vastavad filmid all olevas Listboxis. Filmide otsingu päring saadetakse samaaegselt välja kõigisse toetatud teenustesse, milleks antud juhul on KaruMedia ja YTS.ag leheküljed.&lt;br /&gt;
* Filmide sorteerimine žanri, aasta, IMDb hinnangu alusel&amp;lt;br&amp;gt;WPF rakenduses filmide nimekirja kõrval on nupud kuvatavate filmide sorteerimiseks.&lt;br /&gt;
* mp4 ja avi vormingus video striimimine media serverist (Windows Media Player)&amp;lt;br&amp;gt;KaruMediaService klassi poolt tagastatud Movie objekt sisaldab endas HTTP video faili URL-i, mida on võimalik voogedastuse abil taasesitada.&lt;br /&gt;
=== Nice to have ===  &lt;br /&gt;
* Kui film pole media serveris olemas, siis selle torrenti alla laadimine media serverissse&amp;lt;br&amp;gt;KaruMedia server on ka nii-öelda torrent seed box, mis võimaldab meil Yts.ag ja teistelt sarnastelt lehtedelt saadaolevad torrenteid alla laadida KaruMedia serveri.&lt;br /&gt;
* Suvalises vormingus video striimi mahamängimine (embedded vlc)&amp;lt;br&amp;gt;Enimlevinud videovormingutes filmide ja seriaalide jaoks on tänapäeval mp4 h.264 kodeering, mida Windows Media Player 12 (Windows 7 ja uuemad) oskab ilma probleemideta maha mängida. Probleemiks on aga *.mkv faili vorming, mida kasutatakse tavaliselt kõrgekvaliteedilise video konteinerina. Windows Media Player ei oska *.mkv vormingus videoid taasesitada, küll aga oskab seda teha VLC media player.&lt;br /&gt;
* Kasutaja poolt vaadatud filmide ja pooleliolevate filmide info salvestamine.&amp;lt;br&amp;gt;Kasutaja kogemuse vaatenurgas oleks väga hea kuvada filme, mida kasutaja on juba  kasutajaliideses  filmidest, mida kasutaja pole veel näinud.&lt;br /&gt;
* Vahemälu kasutajaliidese ja serveri päringute vahele, et kiirendada kasutajale info kuvamist.&amp;lt;br&amp;gt;Olenevalt kasutaja interneti kiirusest ja serveri koormusest võivad päringud võtta kasutaja jaoks liiga kaua aega.&lt;br /&gt;
* Seriaalide otsing ja nende vaatamine&amp;lt;br&amp;gt;KaruMedia server hoiustab endas peale filmide ka mingi koguse seriaale, oleks hea ka neid lasta otsida ning maha mängida kasutajal.&lt;br /&gt;
* Kogumike loomine ja muutmine filmidest ja/või seriaalidest&amp;lt;br&amp;gt;Ehk siis esitusloendite loomine.&lt;br /&gt;
* Kasutaja kohalike seadistuste ja andmete sünkroniseerimine erinevate PirateNetflix klientide vahel.&amp;lt;br&amp;gt;Vajab KaruMedia serveri tarkvara täiustamist üsna suures osas.&lt;br /&gt;
&lt;br /&gt;
== Võimalikud probleemid ==&lt;br /&gt;
* Video striimimine ja üldiselt playeri osa &amp;lt;br&amp;gt;Kuna see on üks tähtsamaid komponente, siis kõik probleemid, mis on sellega seotud, on kriitilised. Kuna meil on selle kohta hetkel olemas vaid visioon ja konkreetne tehnoloogiline lahendus puudub, võib see tekitada meile palju probleeme.&lt;br /&gt;
* Team Foundation Serveri kasutamine &amp;lt;br&amp;gt;Kuna see on meie kõigi jaoks esimene kogemus Team Foundationiga, siis on oodata sealt palju probleeme. Kõige suuremaks probleemiks siiani on olnud kui kaks inimest teevad sama klassi, siis tekivad merge probleemid, millest veel ei ole aru saanud.&lt;br /&gt;
* Ajaline puudus &amp;lt;br&amp;gt;Kuna projekt on meil mahukas ja meil kõigil on veel teised ained /töö, on tihti raske leida hetke, kus saaksime koos teha või arutada projektiga seonduvaid asjaolusid. On oht, et me ei jõua oma projektiga päris sinna kuhu me esialgsete plaanide kohaselt tahaksime jõuda.&lt;br /&gt;
* Lahkarvamused &amp;lt;br&amp;gt; Kuna me teeme projekti neljakesi ja kõik tahavad sellega tegeleda 100%-liselt, siis on tavaliselt ka meil neli visiooni, kuidas võiks see rakendus välja näha ja töötada. Peame leidma kompromisse ja tegema nii, nagu see oleks meie projektile parim.&lt;br /&gt;
* Ettenägematud probleemid &amp;lt;br&amp;gt; Iga projektiga peab varuma natuke  just in case aega, sest alati juhtub mingi selline probleem, millega ei ole arvestatud.&lt;br /&gt;
* Fundamentaalsed ja loogika vead &amp;lt;br&amp;gt; Igas projektis on oht, et tekivad valed arusaamad. Kui need valed arusaamad tekivad projekti algusfaasis ja tulevad välja alles lõppfaasis, võib tekkida suuri probleeme.&lt;br /&gt;
* Serveri maht&amp;lt;br&amp;gt;Antud hetkel on KaruMedia serveri ressursid üsna piiratud (põhiliselt andmeedastus kiirus) ning mitme samaaegse kasutaja puhul võib tekkida teenuses tõrkeid.&lt;br /&gt;
* Sõltuvus teistest teenustest (YTS, karumeedia jne) &amp;lt;br&amp;gt; Meie rakendus sõltub üpris palju teistele teenustele. Kui need teenused peaksid mingil põhjusel maas olema, siis ei tööta ka meie rakendus.&lt;br /&gt;
&lt;br /&gt;
== Tehnoloogia ==&lt;br /&gt;
Kasutatav tehnoloogia:&lt;br /&gt;
* C#&lt;br /&gt;
* Windows Presentation Foundation&lt;br /&gt;
* REST API kliendid&lt;br /&gt;
* Windows Media Player&lt;br /&gt;
* Team Foundation ja Git&lt;br /&gt;
&lt;br /&gt;
== Tehnoloogiline ülesehitus ==&lt;br /&gt;
* PirateNetflixSolution&lt;br /&gt;
** PirateNetflixServices&amp;lt;br&amp;gt;Suhtlus media ja yts serveritega üle REST api ja ka kohalik andmebaas, kui see vajalikuks osutub.&lt;br /&gt;
*** BO&lt;br /&gt;
**** Movie&amp;lt;br&amp;gt;Objekt, mis hoiab endas filmi infot&lt;br /&gt;
*** KaruMediaService&amp;lt;br&amp;gt;REST API abstraktsioon Karu Media serveri tarvis&lt;br /&gt;
*** YtsService&amp;lt;br&amp;gt;REST API abstraktsioon YTS lehe vahel&lt;br /&gt;
** PirateNetflixWPF&amp;lt;br&amp;gt;GUI Rakendus&lt;br /&gt;
** PirateNetflixTests&amp;lt;br&amp;gt;Erinevad Pirate Netflix testid&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Pirate_Netflix&amp;diff=113563</id>
		<title>Pirate Netflix</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Pirate_Netflix&amp;diff=113563"/>
		<updated>2016-11-01T18:09:54Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programmeerimine CSharp keeles (2016)]]&lt;br /&gt;
= Analüüs =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Millega on tegu? ==&lt;br /&gt;
Netflix&#039;i sarnane Windowsi töölaua rakendus, mis võimaldab tasuta rootsi veebipoest alla laetud filme ja seriaale enda arvutis kiiresti ja mugavalt vaadata. Kui film on meie serveris olemas, saab seda kohe vaatama hakata, vastasel juhul laetakse see enne peer-to-peer failijagamisteenust kasutades serverisse ning siis striimitakse kasutajale.&lt;br /&gt;
Kasutaja saab erinevate filtrite (filmi nimi, žanr, IMDb reiting, filmi ilmumise aasta) järgi filme otsida ning kuvada. Saab enne filmi käima panemist trailerit vaadata, et olla valikus kindel.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Meeskond ja rollid ==&lt;br /&gt;
* Mihkel Vajak - projektijuht. UI/UX disain.&lt;br /&gt;
* Arti Zirk - devops. Meie serveri ja andmebaaside kohandamine, serveri liidestus WPF rakendusega.&lt;br /&gt;
* Janno Oolo - Filmide mängimiseks player. Embedded Youtube player trailerite mängimiseks, installeri loomine.&lt;br /&gt;
* Joosep Voolmaa - YTS.ag REST API liidestus WPF rakendusega.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Funktsionaalsus ==&lt;br /&gt;
=== Must have ===&lt;br /&gt;
* Saadaval olevate filmide nimekirja kuvamine&lt;br /&gt;
* Saadaval olevate filmide otsing&lt;br /&gt;
* Filmide sorteerimine, žanri, aasta, IMDb hinnangu alusel&lt;br /&gt;
* mp4 ja avi vormingus video striimimine media serverist (Windows Media Player)&lt;br /&gt;
=== Nice to have ===  &lt;br /&gt;
* Kui film pole media serveris olemas siis selle torrenti alla laadimine media serveri&lt;br /&gt;
* Suvalises vormingus video striimi mahamängimine (embedded vlc)&lt;br /&gt;
* Kasutaja poolt vaadatud filmide ja pooleliolevate filmide info salvestamine.&lt;br /&gt;
* Vahemälu kasutajaliidese ja serveri päringute vahele, et kiirendada kasutajale info kuvamist&lt;br /&gt;
* Seriaalide otsing ja nende vaatamine&lt;br /&gt;
* Kogumike loomine ja muutmine filmidest ja/või seriaalidest&lt;br /&gt;
== Võimalikud probleemid ==&lt;br /&gt;
* Video striimimine ja üldiselt playeri osa&lt;br /&gt;
* Team Foundation Serveri kasutamine &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tehnoloogia ==&lt;br /&gt;
Kasutatav tehnoloogia:&lt;br /&gt;
* C#&lt;br /&gt;
* Windows Presentation Foundation&lt;br /&gt;
* REST API kliendid&lt;br /&gt;
* Windows Media Player&lt;br /&gt;
* Team Foundation ja Git&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tehnoloogiline ülesehitus ==&lt;br /&gt;
* PirateNetflixSolution&lt;br /&gt;
** PirateNetflixServices&amp;lt;br&amp;gt;Suhtlus media ja yts serveritega üle REST api ja ka kohalik andmebaas, kui selleni jõuame.&lt;br /&gt;
*** BO&lt;br /&gt;
**** Movie&amp;lt;br&amp;gt;Filmi olem, mis hoiab endas filmi infot&lt;br /&gt;
*** KaruMediaService&amp;lt;br&amp;gt;REST API abstraktsioon Karu Media serveri tarvis&lt;br /&gt;
*** YtsService&amp;lt;br&amp;gt;REST API abstraktsioon YTS lehe vahel&lt;br /&gt;
** PirateNetflixWPF&amp;lt;br&amp;gt;GUI Rakendus&lt;br /&gt;
** PirateNetflixTests&amp;lt;br&amp;gt;Erinevad Pirate Netflix testid&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Pirate_Netflix&amp;diff=113541</id>
		<title>Pirate Netflix</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Pirate_Netflix&amp;diff=113541"/>
		<updated>2016-11-01T17:15:57Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programmeerimine CSharp keeles (2016)]]&lt;br /&gt;
= Analüüs =&lt;br /&gt;
&lt;br /&gt;
== Millega on tegu? ==&lt;br /&gt;
Netflix&#039;i sarnane Windowsi töölaua rakendus, mis võimaldab tasuta rootsi veebipoest alla laetud filme ja seriaale enda arvutis kiiresti ja mugavalt vaadata. Kui film on meie serveris olemas, saab seda kohe vaatama hakata, vastasel juhul laetakse see enne serverisse ning siis striimitakse kasutajale.&lt;br /&gt;
&lt;br /&gt;
== Tehnoloogia ==&lt;br /&gt;
Kasutatav tehnoloogia:&lt;br /&gt;
* C#&lt;br /&gt;
* Windows Presentation Foundation&lt;br /&gt;
* REST API kliendid&lt;br /&gt;
* Windows Media Player&lt;br /&gt;
&lt;br /&gt;
== Meeskond ja rollid ==&lt;br /&gt;
* Mihkel Vajak - projektijuht. UI/UX disain.&lt;br /&gt;
* Arti Zirk - devops. Meie serveri ja andmebaaside kohandamine, serveri liidestus WPF rakendusega.&lt;br /&gt;
* Janno Oolo - embedded Youtube player trailerite mängimiseks, installeri loomine.&lt;br /&gt;
* Joosep Voolmaa - YTS.ag REST API liidestus WPF rakendusega.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Funktsionaalsus ==&lt;br /&gt;
=== Must have ===&lt;br /&gt;
=== Nice to have ===&lt;br /&gt;
=== MVP ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Võimalikud probleemid ==&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Pirate_Netflix&amp;diff=113540</id>
		<title>Pirate Netflix</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Pirate_Netflix&amp;diff=113540"/>
		<updated>2016-11-01T17:14:14Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programmeerimine CSharp keeles (2016)]]&lt;br /&gt;
= Analüüs =&lt;br /&gt;
&lt;br /&gt;
== Millega on tegu? ==&lt;br /&gt;
Netflix&#039;i sarnane programm, mis võimaldab tasuta rootsi veebipoest alla laetud filme ja seriaale enda arvutis kiiresti ja mugavalt vaadata. Kui film on meie serveris olemas, saab seda kohe vaatama hakata, vastasel juhul laetakse see enne serverisse ning siis striimitakse kasutajale.&lt;br /&gt;
&lt;br /&gt;
== Tehnoloogia ==&lt;br /&gt;
Kasutatav tehnoloogia:&lt;br /&gt;
* C#&lt;br /&gt;
* Windows Presentation Foundation&lt;br /&gt;
* REST API kliendid&lt;br /&gt;
* Windows Media Player&lt;br /&gt;
&lt;br /&gt;
== Meeskond ja rollid ==&lt;br /&gt;
* Mihkel Vajak - projektijuht. UI/UX disain.&lt;br /&gt;
* Arti Zirk - devops. Meie serveri ja andmebaaside kohandamine, serveri liidestus WPF rakendusega.&lt;br /&gt;
* Janno Oolo - embedded Youtube player trailerite mängimiseks, installeri loomine.&lt;br /&gt;
* Joosep Voolmaa - YTS.ag REST API liidestus WPF rakendusega.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Funktsionaalsus ==&lt;br /&gt;
=== Must have ===&lt;br /&gt;
=== Nice to have ===&lt;br /&gt;
=== MVP ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Võimalikud probleemid ==&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Pirate_Netflix&amp;diff=106001</id>
		<title>Pirate Netflix</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Pirate_Netflix&amp;diff=106001"/>
		<updated>2016-10-04T16:08:06Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: Created page with &amp;quot;Category:Programmeerimine CSharp keeles (2016) == Meeskond ja rollid == * Mihkel Vajak - projektijuht, UX disain * Arti Zirk - devops, server ja andmebaaside kohandamine,...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programmeerimine CSharp keeles (2016)]]&lt;br /&gt;
== Meeskond ja rollid ==&lt;br /&gt;
* Mihkel Vajak - projektijuht, UX disain&lt;br /&gt;
* Arti Zirk - devops, server ja andmebaaside kohandamine, liidestus c#&#039;ga&lt;br /&gt;
* Janno Oolo - youtube player trailerite mängimiseks, setup.exe installeri loomine, etc.&lt;br /&gt;
* Joosep Voolmaa - serveri liidestus c#&#039;ga&lt;br /&gt;
== Idee ==&lt;br /&gt;
Netflix sarnane programm mis võimaldab tasuta rootsi veebipoest alla laetud filme ja seriaale enda arvutis mugavalt ja lihtsalt vaadata.&lt;br /&gt;
&lt;br /&gt;
== Tehnoloogia ==&lt;br /&gt;
Kasutatav tehnoloogia:&lt;br /&gt;
* C#&lt;br /&gt;
* Windows Presentation Foundation&lt;br /&gt;
* REST API kliendid&lt;br /&gt;
* Windows Media Player&lt;br /&gt;
&lt;br /&gt;
== Analüüs ==&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
=== Funktsionaalsus ===&lt;br /&gt;
==== Must have ====&lt;br /&gt;
==== Nice to have ====&lt;br /&gt;
==== MVP ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Võimalikud probleemid ===&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Juhend:_Kodut%C3%B6%C3%B6_aines_%22Programmeerimine_CSharp_keeles%22_(2016)&amp;diff=105898</id>
		<title>Juhend: Kodutöö aines &quot;Programmeerimine CSharp keeles&quot; (2016)</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Juhend:_Kodut%C3%B6%C3%B6_aines_%22Programmeerimine_CSharp_keeles%22_(2016)&amp;diff=105898"/>
		<updated>2016-09-30T20:54:23Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: /* Päevaõpe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Kodutöö aines &amp;quot;Programmeerimine C# keeles&amp;quot;=&lt;br /&gt;
&lt;br /&gt;
==Eesmärk==&lt;br /&gt;
Saada praktiline arenduskogemus .NET keskkonnas ning arendada meeskonnatöö kogemust ja analüüsivõimet. Kasutada arendusprotsessis koodihoidlat.&lt;br /&gt;
&lt;br /&gt;
==Reeglid==&lt;br /&gt;
Ühte projektimeeskonda kuulub 3-5 tudengit(Soovituslik meeskonna suurus on 3-4). Ühel teemal võib teostada projekti üks või mitu meeskonda.Töö käiku kajastatakse https://wiki.itcollege.ee keskkonnas või soovi korral võib seda teha ka ajaveebis(blogis).&lt;br /&gt;
Ajaveebi pidamise eesmärke on kaks: nii on võimalik kirja panna kõik mõtted ja ideed (ning nendest jääb jälg ja dokumentatsioon) ning õppejõul on hiljem võimalik saada ülevaade iga projektimeeskonna liikme panusest. Ajaveebi loob ja ajaveebi haldab projektimeeskond vabalt valitud (avalikus) keskkonnas. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Projekti loomine ja arendamine &#039;&#039;&#039;&lt;br /&gt;
Projekt lisatakse versioonihaldusesse, kasutades selleks [Team Foundation Service&#039;it http://tfs.visualstudio.com/] ning õppejõule antakse ligipääs. Õppejõu live id: maitposka ät hotmail.com . Projekt peab olema alates algfaasist lisatud TFSi ning kogu tööprotsess toimub versioonihaldust kasutades&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tööde esitamine&#039;&#039;&#039; (prototüüb ja lõpptoode)&lt;br /&gt;
Töö esitamisel pakitakse see kokku ning lisatakse wiki leheküljele link lähtekoodile. Kui töö lähtekoodi ei soovita mingil põhjusel avalikustata, tuleb õppejõuga selle jaoks sõlmida eraldi kokkulepe. Lähtekood on vajalik, et tööd oleks võimalik hinnata nii õppejõul kui kaastudengitel selle kohta retsensiooni kirjutada.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Team Foundation Service kasutamine&#039;&#039;&#039; (tänasel päeval &#039;&#039; Visual Studio online&#039;&#039;)&lt;br /&gt;
[http://www.visualstudio.com/get-started/sign-up-for-visual-studio-online Step-by-Step juhend]&lt;br /&gt;
&lt;br /&gt;
NB! Versioonihalduse kohta jagab õppejõud materjale.&lt;br /&gt;
&lt;br /&gt;
==Tähtaegadest kinnipidamine==&lt;br /&gt;
Projekt jaguneb alamosadeks, millele on määratud tähtajad. Tähtaegade ületamisel võimalike punkte ei kaotata. Kui töö aga on esitatud tähtajaks, siis on võimalik selle eest teenida boonuspunkte (enamasti 0-10% võimalikust maksimumist boonust). Enne tähtaega esitatud töö ei tähenda automaatselt maksimumpunkte, kui see ei ole sooritatud korralikult.&lt;br /&gt;
&lt;br /&gt;
NB! Juhul kui analüüsi tähtajast on möödunud nädal, määrab õppejõud meeskonnale ise vabalt valitud ülesande, mis on võetud näidis teemade alt. Peale seda ei ole võimalik teemat enam muuta.&lt;br /&gt;
&lt;br /&gt;
==Hindamine==&lt;br /&gt;
Teostatuks loetakse projekt juhul, kui lähteülesanne on realiseeritud, lahendus on töötav, kuid esineb suuremaid vigu ning piirsituatsioonidega ei ole arvestatud.&lt;br /&gt;
Maksimumtulemuse saavutamiseks peab projekt olema teostatud tehniliselt veatult ning varustatud dokumentatsiooniga, milles sisaldub arendusprotsessi kirjeldus (peab selguma ka iga rühmaliikme panus projekti teostamisel), kasutajajuhend ning lahenduse kirjeldus. Tehnilisi ja vormistuslike puudujääke on võimalik korvata lisavõimaluste realiseerimisega.Üldjuhul tuleb loodud lahendust ka praktikumides või loengutes teistele tudengitele tutvustada (ca 10 min).&lt;br /&gt;
Nagu eelpool mainitud, koosneb projekt erinevatest osadest. Punktide arvu määramisel arvestatakse ka tähtajast kinni pidamist, mille toimimisloogika on kirjeldatud eespool.&lt;br /&gt;
&lt;br /&gt;
===Meeskonna kokkupanek ja idee===&lt;br /&gt;
&#039;&#039;&#039;15.10.2016&#039;&#039;&#039; (2p)&lt;br /&gt;
&lt;br /&gt;
Tekitatakse meeskonna wiki lehekülg. Meeskonnal peab olema nimi ning see koosneb  kolmest kuni viiest liikmest. Määratakse projektijuht. Juhul kui hakatakse blogi pidama kuskil mujal keskkonnas ilmub selle kohta link. Lühidalt peaks kirjeldama idee olemust nii, et selle üldine suund oleks arusaadav. Samuti peab olema märgitud tehnoloogia, milles hakatakse rakendust looma. Meeskond on loonud TFSi konto ning on saatnud õppejõule kutse.&lt;br /&gt;
&lt;br /&gt;
===Analüüs===&lt;br /&gt;
&#039;&#039;&#039;01.11.2016&#039;&#039;&#039; (4p)&lt;br /&gt;
Analüütilise osa eesmärgiks on arendada tudengite analüüsioskust, mida on vaja ka päris tarkvaraarenduse protsessi juures.&#039;&#039;&#039;NB! Miinimum sõnade arv 700&#039;&#039;&#039; Selle osa käigus peab valmima loodava rakenduse analüüs, mis sisaldab muu hulgas ka:&lt;br /&gt;
*Analüüs rakendusele. (Mida see endas sisaldab? Mis on selle eesmärk? Mida tavakasutaja sellega teha saaks? Milliste osade realiseerimine võib osutuda problemaatiliseks?) Kui on tööjaotus paigas, siis tuua ka see välja.&lt;br /&gt;
*Tuua välja nimekiri funktsionaalsusest, mida plaanitakse kindlasti teostada(&#039;&#039;Must have&#039;&#039;)&lt;br /&gt;
*Nimekiri funktsionaalsustest, mis võiks olla, aga mida ei pruugita ajapuuduse tõttu realiseerida.(&#039;&#039;Nice to have&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioon&#039;&#039;&#039; 08.11.2016 (3p)&lt;br /&gt;
&lt;br /&gt;
===Prototüüp + esitlemine===&lt;br /&gt;
&#039;&#039;&#039;20.11.2016 &#039;&#039;&#039;(10p)&lt;br /&gt;
&lt;br /&gt;
Valmib projekti esmane realisatsioon. Laias laastus on peafunktsionaalsused realiseeritud(Nimekiri funktsionaalsusest, mida plaanitakse teostada). Rakenduses on loodud erinevad vaated, mis võimaldavad ülevaate rakendusest saada.&lt;br /&gt;
&lt;br /&gt;
20. novembril esitatakse prototüüp, mida kaitstakse sellele järgneval nädalal. NB! Juhul kui prototüüpi ei kaitsa ja ei esitata, siis ei ole võimalik selle osa eest punkte saada.&lt;br /&gt;
&lt;br /&gt;
===Lõpptoode===&lt;br /&gt;
&#039;&#039;&#039;18.12.2016&#039;&#039;&#039;(30p)&lt;br /&gt;
Selleks faasiks peab projekt maksimumpuntkide saavutamiseks olema teostatud tehniliselt veatult ning varustatud dokumentatsiooniga, milles sisaldub arendusprotsessi kirjeldus (peab selguma ka iga rühmaliikme panus projekti teostamisel), kasutajajuhend ning lahenduse kirjeldus.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioon&#039;&#039;&#039; 08.01.2016(4p)&lt;br /&gt;
&lt;br /&gt;
===Esitlus/Kaitsmine=== &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Toimub loengutes/praktikumides või kokkulepitud ajal enne eksamit&#039;&#039;&#039; &#039;&#039;(3p) &#039;&#039;&lt;br /&gt;
Esitlusel kaitstakse projekti. Tutvustatakse tehnoloogiat, mida kasutati rakenduse realiseerimiseks.  Lühidalt räägitakse tööjaotusest ning probleemidest, mis tekkisid projekti realiseerimisel. Näidatakse lähtekoodi ja demonstreeritakse oma rakendust teistele tudengitele, kes võivad selle kohta küsimusi küsida. Kestvus ~20min.&lt;br /&gt;
&lt;br /&gt;
====Kaitsmise ajad====&lt;br /&gt;
&lt;br /&gt;
Siia alla ilmuvad detsembris kaitsmise ajad.&lt;br /&gt;
&lt;br /&gt;
Ideaalne esitlus, sisaldab endas ka powerpointi, kus on&lt;br /&gt;
*väljatoodud meeskonna nimi ja liikmed&lt;br /&gt;
*idee&lt;br /&gt;
*realiseerimine&lt;br /&gt;
*mis oli keerukas?&lt;br /&gt;
*mida uut õpiti?&lt;br /&gt;
*mõnede keerulisemate probleemide lahendamine&lt;br /&gt;
*meeskonnaliikmete panus&lt;br /&gt;
&lt;br /&gt;
Kaitsmise käigus vaadatakse üle ka kood.&lt;br /&gt;
&lt;br /&gt;
=Teemad 2016 sügis=&lt;br /&gt;
Kodutööna tuleb luua:&lt;br /&gt;
&lt;br /&gt;
==Nõuded rakendusele==&lt;br /&gt;
Loodav rakendus peab:&lt;br /&gt;
* Peab kasutama andmebaasi (erikokkuleppel ka XML formaadis andmeallikat)&lt;br /&gt;
**Andmebaasis peab olema vähemalt 6 andmebaasi tabelit&lt;br /&gt;
* Peab võimaldama tegevuste kohta registri pidamist (logi)&lt;br /&gt;
**Rakenduses tehtavad tegevused salvestatakse&lt;br /&gt;
* Kasutama kasutajaliidesena ühte järgmistest: Windows Presentation Foundation, Windows Phone , Windows Store App või ASP.Net&lt;br /&gt;
* Kood on kommenteeritud ning rakendus on varustatud dokumentatsiooniga&lt;br /&gt;
* Maksimumpunktide jaoks kasutatakse vastavalt valitud tehnoloogiale soovitatud arendusmustreid&lt;br /&gt;
* Kood on kirjutatud C# programmeerimiskeeles&lt;br /&gt;
**Kuna aine nimi on &amp;quot;Programmeerimine C# keeles&amp;quot; ei tohi esitada rakendust, mis on loodud Javas, PHPs vms keeles&lt;br /&gt;
* Rakendus on jaotatud kihtidesse&lt;br /&gt;
&#039;&#039;&#039;Loodav rakendus peab olema loodud objektorienteeritud lähenemist kasutades!&#039;&#039;&#039; Klassid, klassid, klassid&lt;br /&gt;
*Kood on kommenteeritud&lt;br /&gt;
&lt;br /&gt;
Lisapunkte annab:&lt;br /&gt;
* Silmailu&lt;br /&gt;
* Kood on kirjutatud häid praktikaid järgides ja on veatu(testimine, testimine, testimine)&lt;br /&gt;
* Orginaalsed ideed ja hea äriidee&lt;br /&gt;
&lt;br /&gt;
==Kodune raamatukogu==&lt;br /&gt;
Kodudes on tihti erinevaid raamatuid (filme, muud nänni) ja sõbrad tahavad neid vahel laenutada.&lt;br /&gt;
Loo rakendus, mis&lt;br /&gt;
* Võimaldaks sisestada kodused raamatud&lt;br /&gt;
* Võimaldaks luua laenutajate profiile&lt;br /&gt;
* Raamatuid välja laenutada (tähtajaliselt)&lt;br /&gt;
* Laseks koostada erinevaid aruandeid (kodusolevad raamatud, väljalaenutatud raamatud, tähtaja ületanud laenutused  jne)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lisavõimalused&lt;br /&gt;
* Kui laenutaja profiilis on e-mail, siis saada automaatselt e-kiri „kallis sõber see ja see, Sinu käes on minu raamat, kas tood tagasi ka?”&lt;br /&gt;
* Kuva hoiatused, kui laenutaja laenutuste ajalugu on vilets või kui mõni raamat on tagastamata.&lt;br /&gt;
* Lase lisada raamatutele pilt&lt;br /&gt;
* Loo lihtne veebiliides (et sõbrad saaksid veebist vaadata, mis raamatud kasutajal  kodus veel alles on)&lt;br /&gt;
Või&lt;br /&gt;
&lt;br /&gt;
==CRM==&lt;br /&gt;
Oma klientidest peab olema ülevaade.&lt;br /&gt;
Loo rakendus, mis võimaldab:&lt;br /&gt;
* Kliente ning nende kontaktisikuid sisestada, muuta ning kustutada&lt;br /&gt;
* Võimalda sisestada kliendikontakte&lt;br /&gt;
* Koostada hinnapakkumisi klientidele, kusjuures hinnapakkumine lisatakse süsteemi ka kui kliendikontakt ning saadetakse samast süsteemist kliendile.&lt;br /&gt;
* Kliendi andmete vaatamisel kuvatakse ka kliendikontaktid&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lisavõimalused&lt;br /&gt;
* Loo võimalus, kus kontaktisiku sünnipäeva saabumisel saadetakse automaatselt inimesele meil õnnesoovidega&lt;br /&gt;
* Õnnitlusmeilide template’sid võiks olla mitu&lt;br /&gt;
* Loo võimalus kliendi huvide (huvialade) kajastamiseks süsteemis&lt;br /&gt;
&lt;br /&gt;
==Mäng(Unit)==&lt;br /&gt;
Loodav mäng peab sisaldama:&lt;br /&gt;
* Erinevaid tasemeid&lt;br /&gt;
* Punktiarvestust&lt;br /&gt;
* XBox puldi tuge&lt;br /&gt;
* Klaviatuurilt juhtimise tuge&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Loodav mäng peab olema loodud objektorienteeritud lähenemist kasutades!&#039;&#039;&#039; Klassid, klassid, klassid&lt;br /&gt;
&lt;br /&gt;
Lisapunkte annab:&lt;br /&gt;
* Silmailu&lt;br /&gt;
* Kood on kirjutatud häid praktikaid järgides ja on veatu(testimine, testimine, testimine)&lt;br /&gt;
* Orginaalsed ideed ja hea &#039;&#039;story&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Meeskonnad 2016=&lt;br /&gt;
==Päevaõpe==&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Kuri Kohvikupidaja===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Egert Aia&lt;br /&gt;
Meeskonna koduleht: [[Kuri_Kohvikupidaja]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Pirate Netflix===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Arti Zirk&lt;br /&gt;
* Mihkel Vajak&lt;br /&gt;
* Janno Oolo&lt;br /&gt;
* Joosep Voolma&lt;br /&gt;
Meeskonna koduleht: [[Pirate_Netflix]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
==Kaugõpe==&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Autoparandaja===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Mihkel Viilveer&lt;br /&gt;
Meeskonna koduleht: [[Autoparandaja]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Paabel===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Rutt Lindström&lt;br /&gt;
* Esta Prangel&lt;br /&gt;
* Krista Rüütel&lt;br /&gt;
* Liina Abner&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Paabel]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
===Meeskond: Agraarbeib===&lt;br /&gt;
Liikmed:&lt;br /&gt;
* Marianne Trubetskoi&lt;br /&gt;
* Kaia Runthal&lt;br /&gt;
&lt;br /&gt;
Meeskonna koduleht: [[Agraarbeib]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Retsensioonid&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lõpptoode&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=I253_Presessional_Informatics&amp;diff=105153</id>
		<title>I253 Presessional Informatics</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=I253_Presessional_Informatics&amp;diff=105153"/>
		<updated>2016-08-31T15:28:07Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: /* First day: Introduction to Windows and personalisation of enos homepage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==General information==&lt;br /&gt;
&lt;br /&gt;
Oh no, I am not cyber warrior! No worries, just head over to [https://wiki.itcollege.ee/index.php/I253_Informatika_eelkursus Estonian translation] of the same course.&lt;br /&gt;
&lt;br /&gt;
ECTS : 2 &lt;br /&gt;
&lt;br /&gt;
Grading: Test + homework&lt;br /&gt;
&lt;br /&gt;
Lecturer: Lauri Võsandi with tutors Arti Zirk, Marvin Martinson, Kristjan Peterson, Taavi Teearu, Mohanad Aly&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Prerequisites and target audience==&lt;br /&gt;
&lt;br /&gt;
Course aims to prepare freshmen for lectures read during fall-semester and to familiarize themselves with IT college&#039;s infrastructure. Powerusers are probably able to learn everything on the fly. It is advised to fill your voluntary subject points from other subjects.&lt;br /&gt;
&lt;br /&gt;
==Course goals and content==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Topics aren&#039;t nescessarily in correct order, but to pass this course you should know following things:&lt;br /&gt;
&lt;br /&gt;
* ITC technical manuals, printing, e-mail forwarding and using enos web server.&lt;br /&gt;
* Basics of computer hardware, so you know which computer to purchase.&lt;br /&gt;
* Keyboard shortcuts [https://support.microsoft.com/en-us/kb/126449 for Windows users], [https://help.ubuntu.com/community/KeyboardShortcuts for Ubuntu users] - it&#039;s a bit embarrasing if you are using mouse like a savage instead of Alt + Tab.&lt;br /&gt;
* Managing files [https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/app_win_explorer.mspx?mfr=true in Windows], in Ubuntu. You know how to copy, move, delete files. Distinguish files from folders. Can switch on showing file extensions and hidden files.&lt;br /&gt;
* Using text editor [https://notepad-plus-plus.org/ Notepad++] in Windows, [https://wiki.gnome.org/Apps/Gedit Gedit] in Ubuntu. Use correct indentation, line breaks and charset (UTF-8).&lt;br /&gt;
* Using SSH to manage servers and other computers via command line (access, copy, relocate, delete, modify files) [http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html PuTTY] and for GUI access via SFTP [https://winscp.net WinSCP]&lt;br /&gt;
* Basics of  version control systems, can distinguish software from service e.g. [https://git-scm.com/ Git] vs [https://github.com/ GitHub]. Knows how to add files to version control system  (add-commit-push) and open ones code on GitHub.&lt;br /&gt;
* Basics of virtualization, can dual-boot between Windows and Ubuntu in a virtual machine and can manage doing the same to personal computer. Has heard of assigning resources to virtual machines, knows the difference between B, KiB, kB, B, MiB, MB, GiB, Gb. &lt;br /&gt;
* Can figure out what is connected to where inside the computer (PCI, USB, SATA).&lt;br /&gt;
* There will be additional bits and pieces here in the future...&lt;br /&gt;
&lt;br /&gt;
==Grading==&lt;br /&gt;
&lt;br /&gt;
In order to pass the course:&lt;br /&gt;
&lt;br /&gt;
* Set up a web page in enos web server&lt;br /&gt;
* Store your homepage files in Git repository at GitHub&lt;br /&gt;
* Set up GitHub authentication using SSH keys&lt;br /&gt;
* Complete a test online, time will be set to schedule, probably mid-october&lt;br /&gt;
* Edit a page on this wiki, for example by fixing a typo on this page&lt;br /&gt;
* Create a page on this wiki by creating a howto page accompanied with screenshots relevant for this course (VirtualBox, FileZilla, WinSCP, Cyberduck etc)&lt;br /&gt;
* To be continued...&lt;br /&gt;
&lt;br /&gt;
==Homework==&lt;br /&gt;
&lt;br /&gt;
* CodeAcademy [https://www.codecademy.com/learn/learn-the-command-line Linux command-line course]&lt;br /&gt;
* CodeAcademy [https://www.codecademy.com/learn/web HTML &amp;amp; CSS course]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Lectures==&lt;br /&gt;
&lt;br /&gt;
===First day: Introduction to Windows and personalisation of enos homepage===&lt;br /&gt;
In windows you can log in using user: &amp;quot;kylaline&amp;quot; and password:&amp;quot;kylaline&amp;quot;. Log in with ID-card using Chrome or Firefox and reset your password [http://itcollege.ois.ee SIS]. ID-card does not work with Microsoft Edge! Write down your IT College (ITC) username, which you can find from &amp;quot;My Data&amp;quot;. Log out of your guest account and try to log in using the username and password which you obtained from SIS. After that check whether you are able to log in to [http://wiki.itcollege.ee Wiki] as well as [https://outlook.colm/itcollege.ee e-mail server]. When logging into outlook, username is using format &amp;quot;username@itcollege.ee&amp;quot;. All necessary links can be found [http://www.itcollege.ee/ IT College homepage] top left corner.&lt;br /&gt;
&lt;br /&gt;
In Windows &#039;This PC&#039; should have four drives in it:&lt;br /&gt;
&lt;br /&gt;
* C: - Location of running Windows. SSD - not much space, but it&#039;s fast&lt;br /&gt;
* D: - This is regular HDD, lots of space but slower. Virtual machines should go there in the future.&lt;br /&gt;
* H: - This contains everything you have in enos.itcollege.ee server, also contains public_html folder that can be accessed from a web browser using address http://enos.itcollege.ee/~username/&lt;br /&gt;
* U: - This is public folder, using which you can share files with one-another. Only for public content - no pirates allowed.&lt;br /&gt;
&lt;br /&gt;
Create a file called index.html onto H: drive into public_html folder. Create content that introduces you - Who are you? Where are you from? Add a picture. Example can be found [http://enos.itcollege.ee/~arzirk/ here].&lt;br /&gt;
To create index.html get yourself a decent text editor. For example [https://notepad-plus-plus.org/download/v6.9.2.html Notepad++], choose portable version in .zip file, because you have no rights to install software to the system.&lt;br /&gt;
Microsoft word is for word processing. It IS NOT a text editor.&lt;br /&gt;
Notepad++ should be installed during next week.&lt;br /&gt;
Since you have no previous knowledge of HTML, don&#039;t worry, that&#039;s why you are here. You will have a course explaining everything regarding web application development in spring semester.&lt;br /&gt;
&lt;br /&gt;
For now, you can use following code to make yourself an introductive web page:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html5&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 charset=&amp;quot;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;p&amp;gt;Hey, I&#039;m Lauri from Tallinn, Estonia&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;!-- These two are from cloudfront server --&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;https://d1qb2nb5cznatu.cloudfront.net/users/18344-large?1405448591&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;//d1qb2nb5cznatu.cloudfront.net/users/18344-large?1405448591&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- These four are from enos server --&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;http://enos.itcollege.ee/~lvosandi/pics/lauri.jpeg&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;//enos.itcollege.ee/~lvosandi/pics/lauri.jpeg&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/~lvosandi/pics/lauri.jpeg&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;pics/lauri.jpeg&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Examples that definitely will NOT work --&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;/home/lvosandi/public_html/pics/lauri.jpeg&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;H:\public_html\pics\lauri.jpeg&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;img src=&amp;quot;pics\lauri.jpeg&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you have done all of the above, try to access files on enos server using FileZilla. FileZilla is preinstalled in Windows. You can also install it to your personal computer or use WinSCP.&lt;br /&gt;
&lt;br /&gt;
Connecting FileZilla:&lt;br /&gt;
* hostname: enos.itcollege.ee&lt;br /&gt;
* username: &amp;lt;your-SIS-username&amp;gt;&lt;br /&gt;
* password: &amp;lt;your-SIS-password&amp;gt;&lt;br /&gt;
* port: 22&lt;br /&gt;
&lt;br /&gt;
Make sure you can access your folder, try to upload/download files-&lt;br /&gt;
&lt;br /&gt;
===Day two: Introduction to Ubuntu and creating virtual machines===&lt;br /&gt;
&lt;br /&gt;
Boot your computer to Ubuntu, if computer is in Windows restart it and while in dualboot menu select Ubuntu (NOT advanced option). You should be able to log in with the same username and password as in SIS, Outlook and Windows environment. In case of emergency keep calm and use username: &amp;quot;student&amp;quot; and password: &amp;quot;student&amp;quot; In that case drive H: will not be attached and you have no access to your files in school server.&lt;br /&gt;
&lt;br /&gt;
In Ubuntu, your home folder will be at /home/username. There are no drives C:, D: or H:, because all those rescources will be attached to folders. Drive H: familiar from Windows will be accessable in folder /home/username/Dokumendid and drive U: will be at /home/username/Avalik and D: can be found at /shared .&lt;br /&gt;
&lt;br /&gt;
To open terminal use Ctrl + Alt + T&lt;br /&gt;
&lt;br /&gt;
Some commands cherry-picked from last years I600 course:&lt;br /&gt;
&lt;br /&gt;
* Use &amp;lt;code&amp;gt;lsb_release -a&amp;lt;/code&amp;gt; command to see what exact linux version are you running &lt;br /&gt;
* Use &amp;lt;code&amp;gt;uname -sr&amp;lt;/code&amp;gt; command to see what kernel version is your computer running&lt;br /&gt;
* Use &amp;lt;code&amp;gt;cat /proc/cpuinfo&amp;lt;/code&amp;gt; command to see everything there is to know about the processor your computer is running on. What&#039;s the model and how many cores does it have?&lt;br /&gt;
* Use &amp;lt;code&amp;gt;arch&amp;lt;/code&amp;gt; to see whether running configuration is 32- or 64 bit&lt;br /&gt;
* Use &amp;lt;code&amp;gt;cat /proc/meminfo&amp;lt;/code&amp;gt; command to see memory information. How much RAM does your computer have?&lt;br /&gt;
* Use &amp;lt;code&amp;gt;lspci -t -v -nn&amp;lt;/code&amp;gt; command to see which PCI and PCI Express devices are connected. Try to understand what is where.&lt;br /&gt;
* Use &amp;lt;code&amp;gt;lsusb&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;lsusb -t&amp;lt;/code&amp;gt; command to show all USB devices. Try to understand what is where.&lt;br /&gt;
* Use &amp;lt;code&amp;gt;lsblk&amp;lt;/code&amp;gt; command to show all drives, how much capacity does your computer&#039;s HDD/SSD have?&lt;br /&gt;
* Use &amp;lt;code&amp;gt;xrandr&amp;lt;/code&amp;gt; command to list all video output connectors. Which resolutions are available, which one is in use?&lt;br /&gt;
* Use &amp;lt;code&amp;gt;cat /proc/asound/cards&amp;lt;/code&amp;gt; command to list all audio devices.&lt;br /&gt;
* Use &amp;lt;code&amp;gt;dmidecode&amp;lt;/code&amp;gt; to get more information about your computer. For example which frequency is your RAM running on and which socket are they using? In case you need to shop for more RAM. The cheapest upgrade possible for a computer.&lt;br /&gt;
* Use &amp;lt;code&amp;gt;ifconfig -a&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ip addr list&amp;lt;/code&amp;gt; commands to list network adapter settings&lt;br /&gt;
* Use &amp;lt;code&amp;gt;htop&amp;lt;/code&amp;gt; command to list all processes&lt;br /&gt;
&lt;br /&gt;
Download Windows 10 ISO and install it to a virtual machine created with VirtualBox. Assign 8GB of RAM and 100 GB of HDD which is located under /shared. Otherwise SSD will be filled. Download Ubuntu MATE 16.04 ISO and install it to the same virtual machine. During installation choose &amp;quot;Install alongside Windows&amp;quot;. If no such option was presented, Windows in the virtual machine was not correctly shut down. If Ubuntu should freeze while booting try to assign more cores to the virtual machine, that model of the processor does not exist with a single core.&lt;br /&gt;
&lt;br /&gt;
===Day three: Hello world in different programming languages===&lt;br /&gt;
&lt;br /&gt;
Try to create &amp;quot;Hello, World!&amp;quot; in different programming languages using Ubuntu.&lt;br /&gt;
Try to add functionality to the program. Add asking name and let the program greet user using inserted name.&lt;br /&gt;
Why is running programs so different in different languages?&lt;br /&gt;
Name strenghts and weaknesses of used programming languages?&lt;br /&gt;
Restart your computer, boot into Windows and try to do the same in Visual Studio using C#.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Python====&lt;br /&gt;
Open &amp;lt;code&amp;gt;gedit&amp;lt;/code&amp;gt; text editor, and save the following content into file &amp;lt;code&amp;gt;hello.py&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
print &amp;quot;Tere maailm&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Open command line Ctrl + Alt + T and run file you just saved:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python hello.py&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Ruby====&lt;br /&gt;
&lt;br /&gt;
Create file  &amp;lt;code&amp;gt;hello.rb&amp;lt;/code&amp;gt;:&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;
puts &amp;quot;Hello, world!&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run the program on the command line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ruby hello.rb&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Bash====&lt;br /&gt;
Create file  &amp;lt;code&amp;gt;hello.sh&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
echo &amp;quot;Hello, world!&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run program on command line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
bash hello.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====C====&lt;br /&gt;
Create file  &amp;lt;code&amp;gt;hello.c&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
void main() {&lt;br /&gt;
    printf(&amp;quot;Hello, world!\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compile program on the command line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gcc hello.c -o hello&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run program in file hello:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./hello&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Java====&lt;br /&gt;
Create file &amp;lt;code&amp;gt;HelloWorld.java&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
class HelloWorld {&lt;br /&gt;
    public static void main(String[] args) {&lt;br /&gt;
        System.out.println(&amp;quot;Hello World!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compile on command line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
javac HelloWorld.java&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Run compiled Java bytecode in file &amp;lt;code&amp;gt;HelloWorld.class&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
java HelloWorld&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Python_3_on_Windows&amp;diff=102198</id>
		<title>Python 3 on Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Python_3_on_Windows&amp;diff=102198"/>
		<updated>2016-03-27T00:21:15Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: /* Running Python */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Getting a Python 3 installer for Windows =&lt;br /&gt;
Vanilla Python installer package is available from Python homepage under downloads&lt;br /&gt;
[https://www.python.org/downloads www.python.org/downloads]&lt;br /&gt;
&lt;br /&gt;
From there select the newest Python 3 version and download it.&lt;br /&gt;
&lt;br /&gt;
[[File:Python_3_download_page.png]]&lt;br /&gt;
&lt;br /&gt;
= Installing Python =&lt;br /&gt;
1. Double click on the installer&lt;br /&gt;
&lt;br /&gt;
2. Make sure to select &#039;&#039;&#039;Add Python to PATH&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3. Click Install Now&lt;br /&gt;
&lt;br /&gt;
[[File:Installing_Python_3_with_add_to_path_option.png]]&lt;br /&gt;
&lt;br /&gt;
== If you forgot to add Python to PATH ==&lt;br /&gt;
Rerun the installer, select &#039;&#039;&#039;Modify&#039;&#039;&#039; and then select &#039;&#039;&#039;Add Python to enviroment variables&#039;&#039;&#039;&lt;br /&gt;
[[File:Python_3_Modify_Setup.png]]&lt;br /&gt;
[[File:Python_3_Modify_Setup_Optional_Features.png]]&lt;br /&gt;
[[File:Python_3_Modify_Setup_Advanced_Options.png]]&lt;br /&gt;
[[File:Python_3_Modify_Setup_Success.png]]&lt;br /&gt;
&lt;br /&gt;
= Running Python =&lt;br /&gt;
You can run Python via Start &amp;gt; Python or Start &amp;gt; IDLE&lt;br /&gt;
&lt;br /&gt;
[[File:Python_3_IDLE.png]]&lt;br /&gt;
&lt;br /&gt;
But most of the time it is useful to run Python from the cmd by simply typing &amp;lt;code&amp;gt;python&amp;lt;/code&amp;gt; into it.&lt;br /&gt;
&amp;lt;code&amp;gt;pip&amp;lt;/code&amp;gt; and other commands can be ran the same way on the cmd.&lt;br /&gt;
&lt;br /&gt;
[[File:Python_on_cmd.png]]&lt;br /&gt;
&lt;br /&gt;
= Installing things with pip =&lt;br /&gt;
&amp;lt;code&amp;gt;pip&amp;lt;/code&amp;gt; is a Python package manager that enables easy installation&lt;br /&gt;
of different Python packages from the Python Package Index.&lt;br /&gt;
&lt;br /&gt;
Available packages can be browsed on the browser using [http://pypi.python.org/ pypi.python.org] or &lt;br /&gt;
a new [https://warehouse.python.org/ warehouse.python.org] web page.&lt;br /&gt;
&lt;br /&gt;
Packages can also be searched via &amp;lt;code&amp;gt;pip search &amp;quot;keywords&amp;quot;&amp;lt;/code&amp;gt; where &amp;quot;keywords&amp;quot; are the search words.&lt;br /&gt;
&lt;br /&gt;
Packages can be installed with &amp;lt;code&amp;gt;pip install &amp;quot;package&amp;quot;&amp;lt;/code&amp;gt; command where &amp;quot;package&amp;quot; is the package you want to install.&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=File:Python_on_cmd.png&amp;diff=102197</id>
		<title>File:Python on cmd.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=File:Python_on_cmd.png&amp;diff=102197"/>
		<updated>2016-03-27T00:20:29Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=File:Python_3_IDLE.png&amp;diff=102196</id>
		<title>File:Python 3 IDLE.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=File:Python_3_IDLE.png&amp;diff=102196"/>
		<updated>2016-03-27T00:09:45Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Python_3_on_Windows&amp;diff=102195</id>
		<title>Python 3 on Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Python_3_on_Windows&amp;diff=102195"/>
		<updated>2016-03-27T00:05:41Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: More pictures&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Getting a Python 3 installer for Windows =&lt;br /&gt;
Vanilla Python installer package is available from Python homepage under downloads&lt;br /&gt;
[https://www.python.org/downloads www.python.org/downloads]&lt;br /&gt;
&lt;br /&gt;
From there select the newest Python 3 version and download it.&lt;br /&gt;
&lt;br /&gt;
[[File:Python_3_download_page.png]]&lt;br /&gt;
&lt;br /&gt;
= Installing Python =&lt;br /&gt;
1. Double click on the installer&lt;br /&gt;
&lt;br /&gt;
2. Make sure to select &#039;&#039;&#039;Add Python to PATH&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3. Click Install Now&lt;br /&gt;
&lt;br /&gt;
[[File:Installing_Python_3_with_add_to_path_option.png]]&lt;br /&gt;
&lt;br /&gt;
== If you forgot to add Python to PATH ==&lt;br /&gt;
Rerun the installer, select &#039;&#039;&#039;Modify&#039;&#039;&#039; and then select &#039;&#039;&#039;Add Python to enviroment variables&#039;&#039;&#039;&lt;br /&gt;
[[File:Python_3_Modify_Setup.png]]&lt;br /&gt;
[[File:Python_3_Modify_Setup_Optional_Features.png]]&lt;br /&gt;
[[File:Python_3_Modify_Setup_Advanced_Options.png]]&lt;br /&gt;
[[File:Python_3_Modify_Setup_Success.png]]&lt;br /&gt;
&lt;br /&gt;
= Running Python =&lt;br /&gt;
You can run Python via Start &amp;gt; Python or Start &amp;gt; IDLE&lt;br /&gt;
But most of the time it is useful to run Python from the cmd by simply typing &amp;lt;code&amp;gt;python&amp;lt;/code&amp;gt; into it.&lt;br /&gt;
&amp;lt;code&amp;gt;pip&amp;lt;/code&amp;gt; and other commands can be ran the same way on the cmd.&lt;br /&gt;
&lt;br /&gt;
= Installing things with pip =&lt;br /&gt;
&amp;lt;code&amp;gt;pip&amp;lt;/code&amp;gt; is a Python package manager that enables easy installation&lt;br /&gt;
of different Python packages from the Python Package Index.&lt;br /&gt;
&lt;br /&gt;
Available packages can be browsed on the browser using [http://pypi.python.org/ pypi.python.org] or &lt;br /&gt;
a new [https://warehouse.python.org/ warehouse.python.org] web page.&lt;br /&gt;
&lt;br /&gt;
Packages can also be searched via &amp;lt;code&amp;gt;pip search &amp;quot;keywords&amp;quot;&amp;lt;/code&amp;gt; where &amp;quot;keywords&amp;quot; are the search words.&lt;br /&gt;
&lt;br /&gt;
Packages can be installed with &amp;lt;code&amp;gt;pip install &amp;quot;package&amp;quot;&amp;lt;/code&amp;gt; command where &amp;quot;package&amp;quot; is the package you want to install.&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=File:Python_3_Modify_Setup_Success.png&amp;diff=102194</id>
		<title>File:Python 3 Modify Setup Success.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=File:Python_3_Modify_Setup_Success.png&amp;diff=102194"/>
		<updated>2016-03-27T00:04:30Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=File:Python_3_Modify_Setup_Advanced_Options.png&amp;diff=102193</id>
		<title>File:Python 3 Modify Setup Advanced Options.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=File:Python_3_Modify_Setup_Advanced_Options.png&amp;diff=102193"/>
		<updated>2016-03-27T00:03:24Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=File:Python_3_Modify_Setup_Optional_Features.png&amp;diff=102192</id>
		<title>File:Python 3 Modify Setup Optional Features.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=File:Python_3_Modify_Setup_Optional_Features.png&amp;diff=102192"/>
		<updated>2016-03-27T00:01:42Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=File:Python_3_Modify_Setup.png&amp;diff=102191</id>
		<title>File:Python 3 Modify Setup.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=File:Python_3_Modify_Setup.png&amp;diff=102191"/>
		<updated>2016-03-27T00:00:17Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=File:Installing_Python_3_with_add_to_path_option.png&amp;diff=102190</id>
		<title>File:Installing Python 3 with add to path option.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=File:Installing_Python_3_with_add_to_path_option.png&amp;diff=102190"/>
		<updated>2016-03-26T23:55:30Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Python_3_on_Windows&amp;diff=102189</id>
		<title>Python 3 on Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Python_3_on_Windows&amp;diff=102189"/>
		<updated>2016-03-26T23:53:22Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: Added a image&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Getting a Python 3 installer for Windows =&lt;br /&gt;
Vanilla Python installer package is available from Python homepage under downloads&lt;br /&gt;
[https://www.python.org/downloads www.python.org/downloads]&lt;br /&gt;
&lt;br /&gt;
From there select the newest Python 3 version and download it.&lt;br /&gt;
&lt;br /&gt;
[[File:Python_3_download_page.png]]&lt;br /&gt;
&lt;br /&gt;
= Installing Python =&lt;br /&gt;
Make sure to select &#039;&#039;&#039;Add to PATH&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== If you forgot to add Python to PATH ==&lt;br /&gt;
Rerun the installer, select &#039;&#039;&#039;Modify&#039;&#039;&#039; and then select &#039;&#039;&#039;Add to PATH&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Running Python =&lt;br /&gt;
You can run Python via Start &amp;gt; Python or Start &amp;gt; IDLE&lt;br /&gt;
But most of the time it is useful to run Python from the cmd by simply typing &amp;lt;code&amp;gt;python&amp;lt;/code&amp;gt; into it.&lt;br /&gt;
&amp;lt;code&amp;gt;pip&amp;lt;/code&amp;gt; and other commands can be ran the same way on the cmd.&lt;br /&gt;
&lt;br /&gt;
= Installing things with pip =&lt;br /&gt;
&amp;lt;code&amp;gt;pip&amp;lt;/code&amp;gt; is a Python package manager that enables easy installation&lt;br /&gt;
of different Python packages from the Python Package Index.&lt;br /&gt;
&lt;br /&gt;
Available packages can be browsed on the browser using [http://pypi.python.org/ pypi.python.org] or &lt;br /&gt;
a new [https://warehouse.python.org/ warehouse.python.org] web page.&lt;br /&gt;
&lt;br /&gt;
Packages can also be searched via &amp;lt;code&amp;gt;pip search &amp;quot;keywords&amp;quot;&amp;lt;/code&amp;gt; where &amp;quot;keywords&amp;quot; are the search words.&lt;br /&gt;
&lt;br /&gt;
Packages can be installed with &amp;lt;code&amp;gt;pip install &amp;quot;package&amp;quot;&amp;lt;/code&amp;gt; command where &amp;quot;package&amp;quot; is the package you want to install.&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=File:Python_3_download_page.png&amp;diff=102188</id>
		<title>File:Python 3 download page.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=File:Python_3_download_page.png&amp;diff=102188"/>
		<updated>2016-03-26T23:52:30Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Python_3_on_Windows&amp;diff=102187</id>
		<title>Python 3 on Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Python_3_on_Windows&amp;diff=102187"/>
		<updated>2016-03-26T20:23:43Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: added instructions on how to run python&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Getting a Python 3 installer for Windows =&lt;br /&gt;
Vanilla Python installer package is available from Python homepage under downloads&lt;br /&gt;
[https://www.python.org/downloads www.python.org/downloads]&lt;br /&gt;
&lt;br /&gt;
From there select the newest Python 3&lt;br /&gt;
&lt;br /&gt;
= Installing Python =&lt;br /&gt;
Make sure to select &#039;&#039;&#039;Add to PATH&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== If you forgot to add Python to PATH ==&lt;br /&gt;
Rerun the installer, select &#039;&#039;&#039;Modify&#039;&#039;&#039; and then select &#039;&#039;&#039;Add to PATH&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Running Python =&lt;br /&gt;
You can run Python via Start &amp;gt; Python or Start &amp;gt; IDLE&lt;br /&gt;
But most of the time it is useful to run Python from the cmd by simply typing &amp;lt;code&amp;gt;python&amp;lt;/code&amp;gt; into it.&lt;br /&gt;
&amp;lt;code&amp;gt;pip&amp;lt;/code&amp;gt; and other commands can be ran the same way on the cmd.&lt;br /&gt;
&lt;br /&gt;
= Installing things with pip =&lt;br /&gt;
&amp;lt;code&amp;gt;pip&amp;lt;/code&amp;gt; is a Python package manager that enables easy installation&lt;br /&gt;
of different Python packages from the Python Package Index.&lt;br /&gt;
&lt;br /&gt;
Available packages can be browsed on the browser using [http://pypi.python.org/ pypi.python.org] or &lt;br /&gt;
a new [https://warehouse.python.org/ warehouse.python.org] web page.&lt;br /&gt;
&lt;br /&gt;
Packages can also be searched via &amp;lt;code&amp;gt;pip search &amp;quot;keywords&amp;quot;&amp;lt;/code&amp;gt; where &amp;quot;keywords&amp;quot; are the search words.&lt;br /&gt;
&lt;br /&gt;
Packages can be installed with &amp;lt;code&amp;gt;pip install &amp;quot;package&amp;quot;&amp;lt;/code&amp;gt; command where &amp;quot;package&amp;quot; is the package you want to install.&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Python_3_on_Windows&amp;diff=102186</id>
		<title>Python 3 on Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Python_3_on_Windows&amp;diff=102186"/>
		<updated>2016-03-26T20:20:58Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: the beginning&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Getting a Python 3 installer for Windows =&lt;br /&gt;
Vanilla Python installer package is available from Python homepage under downloads&lt;br /&gt;
[https://www.python.org/downloads www.python.org/downloads]&lt;br /&gt;
&lt;br /&gt;
From there select the newest Python 3&lt;br /&gt;
&lt;br /&gt;
= Installing Python =&lt;br /&gt;
Make sure to select &#039;&#039;&#039;Add to PATH&#039;&#039;&#039;&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
== If you forgot to add Python to PATH ==&lt;br /&gt;
Rerun the installer, select &#039;&#039;&#039;Modify&#039;&#039;&#039; and then select &#039;&#039;&#039;Add to PATH&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Installing things with pip =&lt;br /&gt;
&amp;lt;code&amp;gt;pip&amp;lt;/code&amp;gt; is a Python package manager that enables easy installation&lt;br /&gt;
of different Python packages from the Python Package Index.&lt;br /&gt;
&lt;br /&gt;
Available packages can be browsed on the browser using [http://pypi.python.org/ pypi.python.org] or &lt;br /&gt;
a new [https://warehouse.python.org/ warehouse.python.org] web page.&lt;br /&gt;
&lt;br /&gt;
Packages can also be searched via &amp;lt;code&amp;gt;pip search &amp;quot;keywords&amp;quot;&amp;lt;/code&amp;gt; where &amp;quot;keywords&amp;quot; are the search words.&lt;br /&gt;
&lt;br /&gt;
Packages can be installed with &amp;lt;code&amp;gt;pip install &amp;quot;package&amp;quot;&amp;lt;/code&amp;gt; command where &amp;quot;package&amp;quot; is the package you want to install.&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Arti_Zirk_-_Syncly_MusicSync&amp;diff=98803</id>
		<title>Arti Zirk - Syncly MusicSync</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Arti_Zirk_-_Syncly_MusicSync&amp;diff=98803"/>
		<updated>2015-12-09T20:47:11Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: /* Legaalne pool */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Esitlus =&lt;br /&gt;
Esitluse slaidid on siin: http://slides.com/artizirk/musicsync&lt;br /&gt;
&lt;br /&gt;
= Syncly MusicSync =&lt;br /&gt;
[https://github.com/Syncly Syncly MusicSync] on minu Java&amp;lt;ref&amp;gt;[https://itcollege.ois.ee/et/subject/view?subject_id=51&amp;amp;year=2015 I200]&amp;lt;/ref&amp;gt; kodu töö.&lt;br /&gt;
Tegu on üsnagi &amp;lt;abbr title=&amp;quot;Keep It Simple Stupid&amp;quot;&amp;gt;KISS&amp;lt;/abbr&amp;gt; teenusega mis võimaldab kasutajal sünkroniseerida YouTube keskonnas olevaid playliste helifailidena enda telefoni.&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
Õues ringi jalutades või rattaga sõites meeldib mulle kõrvaklapid pähe pannes muusikat kuulata. Tavaliselt on minu muusika allikaks YouTube üles laetud lood mis on mul playlisti lisatud ning mida ma siis aegaajalt ühe väikese scriptiga enda arvuti ja sealt edasi telefoni tõmban. [http://rg3.github.io/youtube-dl/ youtube-dl] on üks väike pythonis kirjutatud programm mis oskab seda väga hästi teha.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
youtube-dl -i -x --download-archive .archive.txt -f bestaudio &amp;quot;http://www.youtube.com/playlist?list=PLB5VrND_o3PgZNzNdohFDWE5BTFIPDImQ&amp;quot;&lt;br /&gt;
adb push -p * /sdcard/Music/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mu sõber Mark tegi selle automaatse sünkroniseerimis osa isegi ära enamvähem ning lükkas koodi githubi üles nightsnack&amp;lt;ref&amp;gt;[https://github.com/mikroskeem/nightsnack nightsnack]&amp;lt;/ref&amp;gt; nimega aga see ei lahenda ära lugude telefoni saamis probleemi.&lt;br /&gt;
&lt;br /&gt;
Sügisel algas Java progemis kursus mille raames otsutasin Javas kirjutatud Androidi rakenduse teha mis oskaks minu lugusi automaatselt telefoni tõmmata.&lt;br /&gt;
&lt;br /&gt;
== Planeering ==&lt;br /&gt;
Kõigepealt alustasin Androidi platvormi dokumentatsiooni lugemisega ja üritasin enamvähem paika panna mida ma androidi rakenduses kuvada tahaksin ning tegin endale enamvähem selgeks kuidas Androidi poolt ära teostada.&lt;br /&gt;
&lt;br /&gt;
Selle lõpptulemuseks on midagi sellist&lt;br /&gt;
&lt;br /&gt;
[[File:MusicSync_home.png|320px]][[File:MusicSync_settings.png|320px]]&lt;br /&gt;
&lt;br /&gt;
Edasi panin paika punktid mida mul oleks vaja et backend server teeks:&lt;br /&gt;
* Playlistide kuvamine / lisamine / eemaldamine&lt;br /&gt;
* Playlistides olevate lugude kuvamine&lt;br /&gt;
* Teadete genereerimine playlisti lugude lisamise/eemaldamise korral&lt;br /&gt;
&lt;br /&gt;
== Tehnoloogiate valik ==&lt;br /&gt;
Backend serveri kirjutamiseks tuli teha valik kuidas ma täpselt selle ära lahendan kasutades mis asju.&lt;br /&gt;
&lt;br /&gt;
Playlistide ja seal olevate lugude salvestamiseks otsustasin kasutada [https://www.mongodb.org/ MongoDB] andmebaasi mis on üks NoSQL andmebaas JSON sarnaste dokumentide salvestamiseks. Valisin MongoDB just selle pärast, et olen seda varasemalt kasutanud, arenduse käigus andmestruktuuri muutmine on üli kerge ning kuna SQL pole mulle eriti kunagi meeldinud.&lt;br /&gt;
&lt;br /&gt;
YouTubest lugude allalaadimiseks hetkel ainuke laialt toetatud varjant on kasutada youtube-dl pythoni programmi. On olemas ka erinevaid veebilehti mis oskavad YouTubest alla laadida helifaile aga ka need suuretõenäosusega kasutavad midagi sarnast tagaplaanil. Kuna youtube-dl on kirjutatud Pythonis siis on selle kasutamine Pythoni scriptides kergem ja annab rohkem võimalusi selle käitumise muutmiseks kui mõne muu lahenduse kasutamine.&lt;br /&gt;
&lt;br /&gt;
Kuna mu arti.ee serverist pole eriti palju kettapinda, et sinna ka muusika ära mahutada siis otsustasin kasutada [https://aws.amazon.com/s3/ Amazon S3] pilveservereid kuhu Youtubest allalaetud muusika paigutada ning sealt neid vajadusel telefoni tõmmata.&lt;br /&gt;
&lt;br /&gt;
Genereeritud teadete edastamiseks sobib mulle väga hästi [https://github.com/wandenberg/nginx-push-stream-module nginx-push-stream-module] mis võimaldab kergesti genereerida Server Sent Events striimi mida on võimalik töödelda väga kergelt kõigi programeerimis keeltega ja veebilehitsejatel on sse tarbimise jaoks sisseehitatud tugi javascriptis.&lt;br /&gt;
&lt;br /&gt;
HTTP API ehitamiseks, mille kaudu teha päringuid serveri pihta, otsustasin teha kasutades Pythoni teeki nimega [http://falconframework.org/ Falcon]. Falcon on minimaalne Pythoni &amp;lt;abbr title=&amp;quot;Web Server Gateway Interface&amp;quot;&amp;gt;WSGI&amp;lt;/abbr&amp;gt; liidest täitev teek HTTP [https://en.wikipedia.org/wiki/Representational_state_transfer RESTful] api&#039;de tegemiseks. Siin on näide sellst kui ilus lõpptulemus jääb kasutades Falconit https://gist.github.com/artizirk/ae9cf28d1f45ef0aa965&lt;br /&gt;
&lt;br /&gt;
== Backendi implementeerimine ==&lt;br /&gt;
Alustasin Youtube playlisti videote lisamise ja eemaldamise eventide genereerimisega. Selleks otsustasin ära kasutada youtube-dl sisse ehitatud funktsionaalsust mis annab mulle tagasi nimekirja lugudest mis on playlistis&lt;br /&gt;
&lt;br /&gt;
Hetkel siis on mul üks &amp;lt;code&amp;gt;playlist-sync.py&amp;lt;/code&amp;gt; fail kus on while True loop mis iga andmebaasi lisatud playlisti kohta käivitab &amp;lt;code&amp;gt;get_song_updates&amp;lt;/code&amp;gt; meetodi. &amp;lt;code&amp;gt;get_song_updates&amp;lt;/code&amp;gt; meetod omakorda tõmbab alla, kasutades youtube-dl teeki, ette antud youtube playlisti html lehe ning ekstraktib sealt kõigi lugude id&#039;d ning ka lugude nimed. Peale seda kui mul on käes list loo id-ga, küsin ma andmebaasist kas need lood on juba lisatud, kui pole, lisan selle ning genereerin evendi. Selleks et teada saada kas mõni lugu on kustutatud playlistis käin ma kõik andmebaasi lisatud antud playlisti lood läbi ning testin kas nad on eelnevalt alla tõmmatud lugude listis, kui pole siis genereerin evendi et lugu on kustutatud youtube playlistist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;youtube-downloader.py&amp;lt;/code&amp;gt; skript kuulab eelnevalt genereeritud evente ning lugude lisamise korral tõmbab nad alla youtube-dl teegi abil ja laeb nad Amazon S3&#039;e üles kasutades boto3 teeki.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;api.py&amp;lt;/code&amp;gt; hoolitseb HTTP API eest. &lt;br /&gt;
Hetkel implementeerib http api neli endpointi kuhu pihta on võimalik päringuid teha&lt;br /&gt;
* &amp;lt;code&amp;gt;/playlists/&amp;lt;/code&amp;gt; - kollektsioon playlistidest&lt;br /&gt;
* &amp;lt;code&amp;gt;/playlists/{playlist_id}&amp;lt;/code&amp;gt; - üks kindel playlist&lt;br /&gt;
* &amp;lt;code&amp;gt;/playlists/{playlist_id}/songs/&amp;lt;/code&amp;gt; - kollektsioon lugudest ühes playlistis&lt;br /&gt;
* &amp;lt;code&amp;gt;/playlists/{playlist_id}/songs/{song_id}&amp;lt;/code&amp;gt; - üks kindel lugu&lt;br /&gt;
Iga see url on implementeeritud erineva klasssi poolt mis omakorda pärinevad &amp;lt;code&amp;gt;BaseResponse&amp;lt;/code&amp;gt; klassist ning kõik nad tagastavad andmeid json vormingus&lt;br /&gt;
&lt;br /&gt;
paar näidet hetkel implementeeritud api kohta&lt;br /&gt;
&amp;lt;pre&amp;gt;% # Küsime serveri lisatud playlistid&lt;br /&gt;
% http GET http://localhost:8000/playlists&lt;br /&gt;
HTTP/1.0 200 OK&lt;br /&gt;
Date: Tue, 08 Dec 2015 13:16:33 GMT&lt;br /&gt;
Server: WSGIServer/0.2 CPython/3.5.0&lt;br /&gt;
content-length: 202&lt;br /&gt;
content-type: application/json; charset=utf-8&lt;br /&gt;
&lt;br /&gt;
[&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;_id&amp;quot;: &amp;quot;PLGE39Wpa-qf1xjp4gmJ_1PBzH7a_-GdOe&amp;quot;,&lt;br /&gt;
        &amp;quot;title&amp;quot;: &amp;quot;Nice Music [WIP]&amp;quot;,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;YoutubePlaylist&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;_id&amp;quot;: &amp;quot;PLB5VrND_o3PgZNzNdohFDWE5BTFIPDImQ&amp;quot;,&lt;br /&gt;
        &amp;quot;title&amp;quot;: &amp;quot;Music I like&amp;quot;,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;YoutubePlaylist&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;% # Küsime mis lood on ühes playlistis&lt;br /&gt;
% http GET http://localhost:8000/playlists/PLB5VrND_o3PgZNzNdohFDWE5BTFIPDImQ/songs&lt;br /&gt;
HTTP/1.0 200 OK&lt;br /&gt;
Date: Tue, 08 Dec 2015 13:17:01 GMT&lt;br /&gt;
Server: WSGIServer/0.2 CPython/3.5.0&lt;br /&gt;
content-length: 546&lt;br /&gt;
content-type: application/json; charset=utf-8&lt;br /&gt;
&lt;br /&gt;
[&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;_id&amp;quot;: &amp;quot;qFDP9egTwfM&amp;quot;,&lt;br /&gt;
        &amp;quot;deleted&amp;quot;: false,&lt;br /&gt;
        &amp;quot;playlist&amp;quot;: &amp;quot;PLB5VrND_o3PgZNzNdohFDWE5BTFIPDImQ&amp;quot;,&lt;br /&gt;
        &amp;quot;title&amp;quot;: &amp;quot;Netsky - Rio (Official Video) ft. Digital Farm Animals&amp;quot;,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;Youtube&amp;quot;,&lt;br /&gt;
        &amp;quot;url&amp;quot;: &amp;quot;http://s3.storage.ms.wut.ee/qFDP9egTwfM&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;_id&amp;quot;: &amp;quot;FGBhQbmPwH8&amp;quot;,&lt;br /&gt;
        &amp;quot;deleted&amp;quot;: false,&lt;br /&gt;
        &amp;quot;playlist&amp;quot;: &amp;quot;PLB5VrND_o3PgZNzNdohFDWE5BTFIPDImQ&amp;quot;,&lt;br /&gt;
        &amp;quot;title&amp;quot;: &amp;quot;Daft Punk - One More Time&amp;quot;,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;Youtube&amp;quot;,&lt;br /&gt;
        &amp;quot;url&amp;quot;: &amp;quot;http://s3.storage.ms.wut.ee/FGBhQbmPwH8&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kokkuvõttes on ülesehitus midagi sellist:&lt;br /&gt;
&lt;br /&gt;
[[File:MusicSync_chart.png|500px]]&lt;br /&gt;
&lt;br /&gt;
== Androidi klient ==&lt;br /&gt;
Nüüd kus backend osa on valmis on mul võimalik Androidi rakendus ka ära lõpetada.&lt;br /&gt;
Kui kunagi peaksin selle valmis saama siis viskan siia ka kirjelduse selle kohta ja uuendan esitlust.&lt;br /&gt;
&lt;br /&gt;
== Raha ==&lt;br /&gt;
Kuna serverid maksavad, peale minu on veel inimesi kes on näidanud huvi selle teenuse kasutamise vastu ja ma ise enda taskust ka kõike kinni ei taha maksta siis otsustasin selle tasuliseks teenuseks teha teistele.&lt;br /&gt;
&lt;br /&gt;
Hetkel on plaan küsida selle teenuse eest 1€ kuus mis tähendab, et mul oleks vaja vähemalt 10 inimest kes püsivalt maksaks et ma oma Amazon S3 ja DigitalOceanis oleva serveri tasudega nulli saaks. &lt;br /&gt;
&lt;br /&gt;
Amazon S3 maksab hetkel 0.03€/GB ja 0.1€ eest saab seal hoida ~3GB jagu andmeid, failide tõmbamine maksab 0.09€/GB nii et kogu muusikakogu 3GB alla laadimine maksab 0.27€ mis omakorda tähendab et DigitalOceani serveri maksmiseks jääb 0.63€. DigitalOceani server maksab mulle hetkel 6€/kuus mis siis lõpuks teebki, et vähemalt 10 pidevalt maksvat kasutajat vaja et asi nulli tuleks rahaliselt. Iga järgmine kasutaja hakkab sisse tooma mulle umbes 0.6€ kuus.&lt;br /&gt;
&lt;br /&gt;
See kõik on muidugi eeldusel, et kasutajad keskmiselt väga palju muusikat üles ei lae.&lt;br /&gt;
&lt;br /&gt;
== Legaalne pool ==&lt;br /&gt;
Youtube Terms of Service ei luba tegelikuses nende lehelt videosi alla laadida ning neid vaadata/kuulata mujal kui youtube enda lehel ja youtube rakenduses.&lt;br /&gt;
https://www.youtube.com/terms lehel olev tekst teeb selle üsna selgeks nii, et üsna riskantne värk oleks mul seda musicsync asja suureks ajada. Paar kümmend inimest peaks okei olema ja mitte väga palju tähelepanu äratama.&lt;br /&gt;
&lt;br /&gt;
= Viited =&lt;br /&gt;
{{Reflist}}&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Arti_Zirk_-_Syncly_MusicSync&amp;diff=98802</id>
		<title>Arti Zirk - Syncly MusicSync</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Arti_Zirk_-_Syncly_MusicSync&amp;diff=98802"/>
		<updated>2015-12-09T20:42:29Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: /* Androidi klient */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Esitlus =&lt;br /&gt;
Esitluse slaidid on siin: http://slides.com/artizirk/musicsync&lt;br /&gt;
&lt;br /&gt;
= Syncly MusicSync =&lt;br /&gt;
[https://github.com/Syncly Syncly MusicSync] on minu Java&amp;lt;ref&amp;gt;[https://itcollege.ois.ee/et/subject/view?subject_id=51&amp;amp;year=2015 I200]&amp;lt;/ref&amp;gt; kodu töö.&lt;br /&gt;
Tegu on üsnagi &amp;lt;abbr title=&amp;quot;Keep It Simple Stupid&amp;quot;&amp;gt;KISS&amp;lt;/abbr&amp;gt; teenusega mis võimaldab kasutajal sünkroniseerida YouTube keskonnas olevaid playliste helifailidena enda telefoni.&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
Õues ringi jalutades või rattaga sõites meeldib mulle kõrvaklapid pähe pannes muusikat kuulata. Tavaliselt on minu muusika allikaks YouTube üles laetud lood mis on mul playlisti lisatud ning mida ma siis aegaajalt ühe väikese scriptiga enda arvuti ja sealt edasi telefoni tõmban. [http://rg3.github.io/youtube-dl/ youtube-dl] on üks väike pythonis kirjutatud programm mis oskab seda väga hästi teha.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
youtube-dl -i -x --download-archive .archive.txt -f bestaudio &amp;quot;http://www.youtube.com/playlist?list=PLB5VrND_o3PgZNzNdohFDWE5BTFIPDImQ&amp;quot;&lt;br /&gt;
adb push -p * /sdcard/Music/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mu sõber Mark tegi selle automaatse sünkroniseerimis osa isegi ära enamvähem ning lükkas koodi githubi üles nightsnack&amp;lt;ref&amp;gt;[https://github.com/mikroskeem/nightsnack nightsnack]&amp;lt;/ref&amp;gt; nimega aga see ei lahenda ära lugude telefoni saamis probleemi.&lt;br /&gt;
&lt;br /&gt;
Sügisel algas Java progemis kursus mille raames otsutasin Javas kirjutatud Androidi rakenduse teha mis oskaks minu lugusi automaatselt telefoni tõmmata.&lt;br /&gt;
&lt;br /&gt;
== Planeering ==&lt;br /&gt;
Kõigepealt alustasin Androidi platvormi dokumentatsiooni lugemisega ja üritasin enamvähem paika panna mida ma androidi rakenduses kuvada tahaksin ning tegin endale enamvähem selgeks kuidas Androidi poolt ära teostada.&lt;br /&gt;
&lt;br /&gt;
Selle lõpptulemuseks on midagi sellist&lt;br /&gt;
&lt;br /&gt;
[[File:MusicSync_home.png|320px]][[File:MusicSync_settings.png|320px]]&lt;br /&gt;
&lt;br /&gt;
Edasi panin paika punktid mida mul oleks vaja et backend server teeks:&lt;br /&gt;
* Playlistide kuvamine / lisamine / eemaldamine&lt;br /&gt;
* Playlistides olevate lugude kuvamine&lt;br /&gt;
* Teadete genereerimine playlisti lugude lisamise/eemaldamise korral&lt;br /&gt;
&lt;br /&gt;
== Tehnoloogiate valik ==&lt;br /&gt;
Backend serveri kirjutamiseks tuli teha valik kuidas ma täpselt selle ära lahendan kasutades mis asju.&lt;br /&gt;
&lt;br /&gt;
Playlistide ja seal olevate lugude salvestamiseks otsustasin kasutada [https://www.mongodb.org/ MongoDB] andmebaasi mis on üks NoSQL andmebaas JSON sarnaste dokumentide salvestamiseks. Valisin MongoDB just selle pärast, et olen seda varasemalt kasutanud, arenduse käigus andmestruktuuri muutmine on üli kerge ning kuna SQL pole mulle eriti kunagi meeldinud.&lt;br /&gt;
&lt;br /&gt;
YouTubest lugude allalaadimiseks hetkel ainuke laialt toetatud varjant on kasutada youtube-dl pythoni programmi. On olemas ka erinevaid veebilehti mis oskavad YouTubest alla laadida helifaile aga ka need suuretõenäosusega kasutavad midagi sarnast tagaplaanil. Kuna youtube-dl on kirjutatud Pythonis siis on selle kasutamine Pythoni scriptides kergem ja annab rohkem võimalusi selle käitumise muutmiseks kui mõne muu lahenduse kasutamine.&lt;br /&gt;
&lt;br /&gt;
Kuna mu arti.ee serverist pole eriti palju kettapinda, et sinna ka muusika ära mahutada siis otsustasin kasutada [https://aws.amazon.com/s3/ Amazon S3] pilveservereid kuhu Youtubest allalaetud muusika paigutada ning sealt neid vajadusel telefoni tõmmata.&lt;br /&gt;
&lt;br /&gt;
Genereeritud teadete edastamiseks sobib mulle väga hästi [https://github.com/wandenberg/nginx-push-stream-module nginx-push-stream-module] mis võimaldab kergesti genereerida Server Sent Events striimi mida on võimalik töödelda väga kergelt kõigi programeerimis keeltega ja veebilehitsejatel on sse tarbimise jaoks sisseehitatud tugi javascriptis.&lt;br /&gt;
&lt;br /&gt;
HTTP API ehitamiseks, mille kaudu teha päringuid serveri pihta, otsustasin teha kasutades Pythoni teeki nimega [http://falconframework.org/ Falcon]. Falcon on minimaalne Pythoni &amp;lt;abbr title=&amp;quot;Web Server Gateway Interface&amp;quot;&amp;gt;WSGI&amp;lt;/abbr&amp;gt; liidest täitev teek HTTP [https://en.wikipedia.org/wiki/Representational_state_transfer RESTful] api&#039;de tegemiseks. Siin on näide sellst kui ilus lõpptulemus jääb kasutades Falconit https://gist.github.com/artizirk/ae9cf28d1f45ef0aa965&lt;br /&gt;
&lt;br /&gt;
== Backendi implementeerimine ==&lt;br /&gt;
Alustasin Youtube playlisti videote lisamise ja eemaldamise eventide genereerimisega. Selleks otsustasin ära kasutada youtube-dl sisse ehitatud funktsionaalsust mis annab mulle tagasi nimekirja lugudest mis on playlistis&lt;br /&gt;
&lt;br /&gt;
Hetkel siis on mul üks &amp;lt;code&amp;gt;playlist-sync.py&amp;lt;/code&amp;gt; fail kus on while True loop mis iga andmebaasi lisatud playlisti kohta käivitab &amp;lt;code&amp;gt;get_song_updates&amp;lt;/code&amp;gt; meetodi. &amp;lt;code&amp;gt;get_song_updates&amp;lt;/code&amp;gt; meetod omakorda tõmbab alla, kasutades youtube-dl teeki, ette antud youtube playlisti html lehe ning ekstraktib sealt kõigi lugude id&#039;d ning ka lugude nimed. Peale seda kui mul on käes list loo id-ga, küsin ma andmebaasist kas need lood on juba lisatud, kui pole, lisan selle ning genereerin evendi. Selleks et teada saada kas mõni lugu on kustutatud playlistis käin ma kõik andmebaasi lisatud antud playlisti lood läbi ning testin kas nad on eelnevalt alla tõmmatud lugude listis, kui pole siis genereerin evendi et lugu on kustutatud youtube playlistist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;youtube-downloader.py&amp;lt;/code&amp;gt; skript kuulab eelnevalt genereeritud evente ning lugude lisamise korral tõmbab nad alla youtube-dl teegi abil ja laeb nad Amazon S3&#039;e üles kasutades boto3 teeki.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;api.py&amp;lt;/code&amp;gt; hoolitseb HTTP API eest. &lt;br /&gt;
Hetkel implementeerib http api neli endpointi kuhu pihta on võimalik päringuid teha&lt;br /&gt;
* &amp;lt;code&amp;gt;/playlists/&amp;lt;/code&amp;gt; - kollektsioon playlistidest&lt;br /&gt;
* &amp;lt;code&amp;gt;/playlists/{playlist_id}&amp;lt;/code&amp;gt; - üks kindel playlist&lt;br /&gt;
* &amp;lt;code&amp;gt;/playlists/{playlist_id}/songs/&amp;lt;/code&amp;gt; - kollektsioon lugudest ühes playlistis&lt;br /&gt;
* &amp;lt;code&amp;gt;/playlists/{playlist_id}/songs/{song_id}&amp;lt;/code&amp;gt; - üks kindel lugu&lt;br /&gt;
Iga see url on implementeeritud erineva klasssi poolt mis omakorda pärinevad &amp;lt;code&amp;gt;BaseResponse&amp;lt;/code&amp;gt; klassist ning kõik nad tagastavad andmeid json vormingus&lt;br /&gt;
&lt;br /&gt;
paar näidet hetkel implementeeritud api kohta&lt;br /&gt;
&amp;lt;pre&amp;gt;% # Küsime serveri lisatud playlistid&lt;br /&gt;
% http GET http://localhost:8000/playlists&lt;br /&gt;
HTTP/1.0 200 OK&lt;br /&gt;
Date: Tue, 08 Dec 2015 13:16:33 GMT&lt;br /&gt;
Server: WSGIServer/0.2 CPython/3.5.0&lt;br /&gt;
content-length: 202&lt;br /&gt;
content-type: application/json; charset=utf-8&lt;br /&gt;
&lt;br /&gt;
[&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;_id&amp;quot;: &amp;quot;PLGE39Wpa-qf1xjp4gmJ_1PBzH7a_-GdOe&amp;quot;,&lt;br /&gt;
        &amp;quot;title&amp;quot;: &amp;quot;Nice Music [WIP]&amp;quot;,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;YoutubePlaylist&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;_id&amp;quot;: &amp;quot;PLB5VrND_o3PgZNzNdohFDWE5BTFIPDImQ&amp;quot;,&lt;br /&gt;
        &amp;quot;title&amp;quot;: &amp;quot;Music I like&amp;quot;,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;YoutubePlaylist&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;% # Küsime mis lood on ühes playlistis&lt;br /&gt;
% http GET http://localhost:8000/playlists/PLB5VrND_o3PgZNzNdohFDWE5BTFIPDImQ/songs&lt;br /&gt;
HTTP/1.0 200 OK&lt;br /&gt;
Date: Tue, 08 Dec 2015 13:17:01 GMT&lt;br /&gt;
Server: WSGIServer/0.2 CPython/3.5.0&lt;br /&gt;
content-length: 546&lt;br /&gt;
content-type: application/json; charset=utf-8&lt;br /&gt;
&lt;br /&gt;
[&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;_id&amp;quot;: &amp;quot;qFDP9egTwfM&amp;quot;,&lt;br /&gt;
        &amp;quot;deleted&amp;quot;: false,&lt;br /&gt;
        &amp;quot;playlist&amp;quot;: &amp;quot;PLB5VrND_o3PgZNzNdohFDWE5BTFIPDImQ&amp;quot;,&lt;br /&gt;
        &amp;quot;title&amp;quot;: &amp;quot;Netsky - Rio (Official Video) ft. Digital Farm Animals&amp;quot;,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;Youtube&amp;quot;,&lt;br /&gt;
        &amp;quot;url&amp;quot;: &amp;quot;http://s3.storage.ms.wut.ee/qFDP9egTwfM&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;_id&amp;quot;: &amp;quot;FGBhQbmPwH8&amp;quot;,&lt;br /&gt;
        &amp;quot;deleted&amp;quot;: false,&lt;br /&gt;
        &amp;quot;playlist&amp;quot;: &amp;quot;PLB5VrND_o3PgZNzNdohFDWE5BTFIPDImQ&amp;quot;,&lt;br /&gt;
        &amp;quot;title&amp;quot;: &amp;quot;Daft Punk - One More Time&amp;quot;,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;Youtube&amp;quot;,&lt;br /&gt;
        &amp;quot;url&amp;quot;: &amp;quot;http://s3.storage.ms.wut.ee/FGBhQbmPwH8&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kokkuvõttes on ülesehitus midagi sellist:&lt;br /&gt;
&lt;br /&gt;
[[File:MusicSync_chart.png|500px]]&lt;br /&gt;
&lt;br /&gt;
== Androidi klient ==&lt;br /&gt;
Nüüd kus backend osa on valmis on mul võimalik Androidi rakendus ka ära lõpetada.&lt;br /&gt;
Kui kunagi peaksin selle valmis saama siis viskan siia ka kirjelduse selle kohta ja uuendan esitlust.&lt;br /&gt;
&lt;br /&gt;
== Raha ==&lt;br /&gt;
Kuna serverid maksavad, peale minu on veel inimesi kes on näidanud huvi selle teenuse kasutamise vastu ja ma ise enda taskust ka kõike kinni ei taha maksta siis otsustasin selle tasuliseks teenuseks teha teistele.&lt;br /&gt;
&lt;br /&gt;
Hetkel on plaan küsida selle teenuse eest 1€ kuus mis tähendab, et mul oleks vaja vähemalt 10 inimest kes püsivalt maksaks et ma oma Amazon S3 ja DigitalOceanis oleva serveri tasudega nulli saaks. &lt;br /&gt;
&lt;br /&gt;
Amazon S3 maksab hetkel 0.03€/GB ja 0.1€ eest saab seal hoida ~3GB jagu andmeid, failide tõmbamine maksab 0.09€/GB nii et kogu muusikakogu 3GB alla laadimine maksab 0.27€ mis omakorda tähendab et DigitalOceani serveri maksmiseks jääb 0.63€. DigitalOceani server maksab mulle hetkel 6€/kuus mis siis lõpuks teebki, et vähemalt 10 pidevalt maksvat kasutajat vaja et asi nulli tuleks rahaliselt. Iga järgmine kasutaja hakkab sisse tooma mulle umbes 0.6€ kuus.&lt;br /&gt;
&lt;br /&gt;
See kõik on muidugi eeldusel, et kasutajad keskmiselt väga palju muusikat üles ei lae.&lt;br /&gt;
&lt;br /&gt;
== Legaalne pool ==&lt;br /&gt;
Youtube EULA ei luba tegelikuses nende lehelt videosi alla laadida ning neid vaadata/kuulata mujal kui youtube enda lehel ja youtube rakenduses.&lt;br /&gt;
&lt;br /&gt;
= Viited =&lt;br /&gt;
{{Reflist}}&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Arti_Zirk_-_Syncly_MusicSync&amp;diff=98784</id>
		<title>Arti Zirk - Syncly MusicSync</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Arti_Zirk_-_Syncly_MusicSync&amp;diff=98784"/>
		<updated>2015-12-08T14:35:21Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: legaalne pool&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Esitlus =&lt;br /&gt;
Esitluse slaidid on siin: http://slides.com/artizirk/musicsync&lt;br /&gt;
&lt;br /&gt;
= Syncly MusicSync =&lt;br /&gt;
[https://github.com/Syncly Syncly MusicSync] on minu Java&amp;lt;ref&amp;gt;[https://itcollege.ois.ee/et/subject/view?subject_id=51&amp;amp;year=2015 I200]&amp;lt;/ref&amp;gt; kodu töö.&lt;br /&gt;
Tegu on üsnagi &amp;lt;abbr title=&amp;quot;Keep It Simple Stupid&amp;quot;&amp;gt;KISS&amp;lt;/abbr&amp;gt; teenusega mis võimaldab kasutajal sünkroniseerida YouTube keskonnas olevaid playliste helifailidena enda telefoni.&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
Õues ringi jalutades või rattaga sõites meeldib mulle kõrvaklapid pähe pannes muusikat kuulata. Tavaliselt on minu muusika allikaks YouTube üles laetud lood mis on mul playlisti lisatud ning mida ma siis aegaajalt ühe väikese scriptiga enda arvuti ja sealt edasi telefoni tõmban. [http://rg3.github.io/youtube-dl/ youtube-dl] on üks väike pythonis kirjutatud programm mis oskab seda väga hästi teha.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
youtube-dl -i -x --download-archive .archive.txt -f bestaudio &amp;quot;http://www.youtube.com/playlist?list=PLB5VrND_o3PgZNzNdohFDWE5BTFIPDImQ&amp;quot;&lt;br /&gt;
adb push -p * /sdcard/Music/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mu sõber Mark tegi selle automaatse sünkroniseerimis osa isegi ära enamvähem ning lükkas koodi githubi üles nightsnack&amp;lt;ref&amp;gt;[https://github.com/mikroskeem/nightsnack nightsnack]&amp;lt;/ref&amp;gt; nimega aga see ei lahenda ära lugude telefoni saamis probleemi.&lt;br /&gt;
&lt;br /&gt;
Sügisel algas Java progemis kursus mille raames otsutasin Javas kirjutatud Androidi rakenduse teha mis oskaks minu lugusi automaatselt telefoni tõmmata.&lt;br /&gt;
&lt;br /&gt;
== Planeering ==&lt;br /&gt;
Kõigepealt alustasin Androidi platvormi dokumentatsiooni lugemisega ja üritasin enamvähem paika panna mida ma androidi rakenduses kuvada tahaksin ning tegin endale enamvähem selgeks kuidas Androidi poolt ära teostada.&lt;br /&gt;
&lt;br /&gt;
Selle lõpptulemuseks on midagi sellist&lt;br /&gt;
&lt;br /&gt;
[[File:MusicSync_home.png|320px]][[File:MusicSync_settings.png|320px]]&lt;br /&gt;
&lt;br /&gt;
Edasi panin paika punktid mida mul oleks vaja et backend server teeks:&lt;br /&gt;
* Playlistide kuvamine / lisamine / eemaldamine&lt;br /&gt;
* Playlistides olevate lugude kuvamine&lt;br /&gt;
* Teadete genereerimine playlisti lugude lisamise/eemaldamise korral&lt;br /&gt;
&lt;br /&gt;
== Tehnoloogiate valik ==&lt;br /&gt;
Backend serveri kirjutamiseks tuli teha valik kuidas ma täpselt selle ära lahendan kasutades mis asju.&lt;br /&gt;
&lt;br /&gt;
Playlistide ja seal olevate lugude salvestamiseks otsustasin kasutada [https://www.mongodb.org/ MongoDB] andmebaasi mis on üks NoSQL andmebaas JSON sarnaste dokumentide salvestamiseks. Valisin MongoDB just selle pärast, et olen seda varasemalt kasutanud, arenduse käigus andmestruktuuri muutmine on üli kerge ning kuna SQL pole mulle eriti kunagi meeldinud.&lt;br /&gt;
&lt;br /&gt;
YouTubest lugude allalaadimiseks hetkel ainuke laialt toetatud varjant on kasutada youtube-dl pythoni programmi. On olemas ka erinevaid veebilehti mis oskavad YouTubest alla laadida helifaile aga ka need suuretõenäosusega kasutavad midagi sarnast tagaplaanil. Kuna youtube-dl on kirjutatud Pythonis siis on selle kasutamine Pythoni scriptides kergem ja annab rohkem võimalusi selle käitumise muutmiseks kui mõne muu lahenduse kasutamine.&lt;br /&gt;
&lt;br /&gt;
Kuna mu arti.ee serverist pole eriti palju kettapinda, et sinna ka muusika ära mahutada siis otsustasin kasutada [https://aws.amazon.com/s3/ Amazon S3] pilveservereid kuhu Youtubest allalaetud muusika paigutada ning sealt neid vajadusel telefoni tõmmata.&lt;br /&gt;
&lt;br /&gt;
Genereeritud teadete edastamiseks sobib mulle väga hästi [https://github.com/wandenberg/nginx-push-stream-module nginx-push-stream-module] mis võimaldab kergesti genereerida Server Sent Events striimi mida on võimalik töödelda väga kergelt kõigi programeerimis keeltega ja veebilehitsejatel on sse tarbimise jaoks sisseehitatud tugi javascriptis.&lt;br /&gt;
&lt;br /&gt;
HTTP API ehitamiseks, mille kaudu teha päringuid serveri pihta, otsustasin teha kasutades Pythoni teeki nimega [http://falconframework.org/ Falcon]. Falcon on minimaalne Pythoni &amp;lt;abbr title=&amp;quot;Web Server Gateway Interface&amp;quot;&amp;gt;WSGI&amp;lt;/abbr&amp;gt; liidest täitev teek HTTP [https://en.wikipedia.org/wiki/Representational_state_transfer RESTful] api&#039;de tegemiseks. Siin on näide sellst kui ilus lõpptulemus jääb kasutades Falconit https://gist.github.com/artizirk/ae9cf28d1f45ef0aa965&lt;br /&gt;
&lt;br /&gt;
== Backendi implementeerimine ==&lt;br /&gt;
Alustasin Youtube playlisti videote lisamise ja eemaldamise eventide genereerimisega. Selleks otsustasin ära kasutada youtube-dl sisse ehitatud funktsionaalsust mis annab mulle tagasi nimekirja lugudest mis on playlistis&lt;br /&gt;
&lt;br /&gt;
Hetkel siis on mul üks &amp;lt;code&amp;gt;playlist-sync.py&amp;lt;/code&amp;gt; fail kus on while True loop mis iga andmebaasi lisatud playlisti kohta käivitab &amp;lt;code&amp;gt;get_song_updates&amp;lt;/code&amp;gt; meetodi. &amp;lt;code&amp;gt;get_song_updates&amp;lt;/code&amp;gt; meetod omakorda tõmbab alla, kasutades youtube-dl teeki, ette antud youtube playlisti html lehe ning ekstraktib sealt kõigi lugude id&#039;d ning ka lugude nimed. Peale seda kui mul on käes list loo id-ga, küsin ma andmebaasist kas need lood on juba lisatud, kui pole, lisan selle ning genereerin evendi. Selleks et teada saada kas mõni lugu on kustutatud playlistis käin ma kõik andmebaasi lisatud antud playlisti lood läbi ning testin kas nad on eelnevalt alla tõmmatud lugude listis, kui pole siis genereerin evendi et lugu on kustutatud youtube playlistist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;youtube-downloader.py&amp;lt;/code&amp;gt; skript kuulab eelnevalt genereeritud evente ning lugude lisamise korral tõmbab nad alla youtube-dl teegi abil ja laeb nad Amazon S3&#039;e üles kasutades boto3 teeki.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;api.py&amp;lt;/code&amp;gt; hoolitseb HTTP API eest. &lt;br /&gt;
Hetkel implementeerib http api neli endpointi kuhu pihta on võimalik päringuid teha&lt;br /&gt;
* &amp;lt;code&amp;gt;/playlists/&amp;lt;/code&amp;gt; - kollektsioon playlistidest&lt;br /&gt;
* &amp;lt;code&amp;gt;/playlists/{playlist_id}&amp;lt;/code&amp;gt; - üks kindel playlist&lt;br /&gt;
* &amp;lt;code&amp;gt;/playlists/{playlist_id}/songs/&amp;lt;/code&amp;gt; - kollektsioon lugudest ühes playlistis&lt;br /&gt;
* &amp;lt;code&amp;gt;/playlists/{playlist_id}/songs/{song_id}&amp;lt;/code&amp;gt; - üks kindel lugu&lt;br /&gt;
Iga see url on implementeeritud erineva klasssi poolt mis omakorda pärinevad &amp;lt;code&amp;gt;BaseResponse&amp;lt;/code&amp;gt; klassist ning kõik nad tagastavad andmeid json vormingus&lt;br /&gt;
&lt;br /&gt;
paar näidet hetkel implementeeritud api kohta&lt;br /&gt;
&amp;lt;pre&amp;gt;% # Küsime serveri lisatud playlistid&lt;br /&gt;
% http GET http://localhost:8000/playlists&lt;br /&gt;
HTTP/1.0 200 OK&lt;br /&gt;
Date: Tue, 08 Dec 2015 13:16:33 GMT&lt;br /&gt;
Server: WSGIServer/0.2 CPython/3.5.0&lt;br /&gt;
content-length: 202&lt;br /&gt;
content-type: application/json; charset=utf-8&lt;br /&gt;
&lt;br /&gt;
[&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;_id&amp;quot;: &amp;quot;PLGE39Wpa-qf1xjp4gmJ_1PBzH7a_-GdOe&amp;quot;,&lt;br /&gt;
        &amp;quot;title&amp;quot;: &amp;quot;Nice Music [WIP]&amp;quot;,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;YoutubePlaylist&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;_id&amp;quot;: &amp;quot;PLB5VrND_o3PgZNzNdohFDWE5BTFIPDImQ&amp;quot;,&lt;br /&gt;
        &amp;quot;title&amp;quot;: &amp;quot;Music I like&amp;quot;,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;YoutubePlaylist&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;% # Küsime mis lood on ühes playlistis&lt;br /&gt;
% http GET http://localhost:8000/playlists/PLB5VrND_o3PgZNzNdohFDWE5BTFIPDImQ/songs&lt;br /&gt;
HTTP/1.0 200 OK&lt;br /&gt;
Date: Tue, 08 Dec 2015 13:17:01 GMT&lt;br /&gt;
Server: WSGIServer/0.2 CPython/3.5.0&lt;br /&gt;
content-length: 546&lt;br /&gt;
content-type: application/json; charset=utf-8&lt;br /&gt;
&lt;br /&gt;
[&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;_id&amp;quot;: &amp;quot;qFDP9egTwfM&amp;quot;,&lt;br /&gt;
        &amp;quot;deleted&amp;quot;: false,&lt;br /&gt;
        &amp;quot;playlist&amp;quot;: &amp;quot;PLB5VrND_o3PgZNzNdohFDWE5BTFIPDImQ&amp;quot;,&lt;br /&gt;
        &amp;quot;title&amp;quot;: &amp;quot;Netsky - Rio (Official Video) ft. Digital Farm Animals&amp;quot;,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;Youtube&amp;quot;,&lt;br /&gt;
        &amp;quot;url&amp;quot;: &amp;quot;http://s3.storage.ms.wut.ee/qFDP9egTwfM&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;_id&amp;quot;: &amp;quot;FGBhQbmPwH8&amp;quot;,&lt;br /&gt;
        &amp;quot;deleted&amp;quot;: false,&lt;br /&gt;
        &amp;quot;playlist&amp;quot;: &amp;quot;PLB5VrND_o3PgZNzNdohFDWE5BTFIPDImQ&amp;quot;,&lt;br /&gt;
        &amp;quot;title&amp;quot;: &amp;quot;Daft Punk - One More Time&amp;quot;,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;Youtube&amp;quot;,&lt;br /&gt;
        &amp;quot;url&amp;quot;: &amp;quot;http://s3.storage.ms.wut.ee/FGBhQbmPwH8&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kokkuvõttes on ülesehitus midagi sellist:&lt;br /&gt;
&lt;br /&gt;
[[File:MusicSync_chart.png|500px]]&lt;br /&gt;
&lt;br /&gt;
== Androidi klient ==&lt;br /&gt;
Nüüd kus backend osa on valmis on mul võimalik Androidi rakendus ka ära lõpetada.&lt;br /&gt;
TODO Androidi rakenduse kirjeldus...&lt;br /&gt;
&lt;br /&gt;
== Raha ==&lt;br /&gt;
Kuna serverid maksavad, peale minu on veel inimesi kes on näidanud huvi selle teenuse kasutamise vastu ja ma ise enda taskust ka kõike kinni ei taha maksta siis otsustasin selle tasuliseks teenuseks teha teistele.&lt;br /&gt;
&lt;br /&gt;
Hetkel on plaan küsida selle teenuse eest 1€ kuus mis tähendab, et mul oleks vaja vähemalt 10 inimest kes püsivalt maksaks et ma oma Amazon S3 ja DigitalOceanis oleva serveri tasudega nulli saaks. &lt;br /&gt;
&lt;br /&gt;
Amazon S3 maksab hetkel 0.03€/GB ja 0.1€ eest saab seal hoida ~3GB jagu andmeid, failide tõmbamine maksab 0.09€/GB nii et kogu muusikakogu 3GB alla laadimine maksab 0.27€ mis omakorda tähendab et DigitalOceani serveri maksmiseks jääb 0.63€. DigitalOceani server maksab mulle hetkel 6€/kuus mis siis lõpuks teebki, et vähemalt 10 pidevalt maksvat kasutajat vaja et asi nulli tuleks rahaliselt. Iga järgmine kasutaja hakkab sisse tooma mulle umbes 0.6€ kuus.&lt;br /&gt;
&lt;br /&gt;
See kõik on muidugi eeldusel, et kasutajad keskmiselt väga palju muusikat üles ei lae.&lt;br /&gt;
&lt;br /&gt;
== Legaalne pool ==&lt;br /&gt;
Youtube EULA ei luba tegelikuses nende lehelt videosi alla laadida ning neid vaadata/kuulata mujal kui youtube enda lehel ja youtube rakenduses.&lt;br /&gt;
&lt;br /&gt;
= Viited =&lt;br /&gt;
{{Reflist}}&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Arti_Zirk_-_Syncly_MusicSync&amp;diff=98783</id>
		<title>Arti Zirk - Syncly MusicSync</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Arti_Zirk_-_Syncly_MusicSync&amp;diff=98783"/>
		<updated>2015-12-08T13:42:39Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: /* Backendi implementeerimine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Esitlus =&lt;br /&gt;
Esitluse slaidid on siin: http://slides.com/artizirk/musicsync&lt;br /&gt;
&lt;br /&gt;
= Syncly MusicSync =&lt;br /&gt;
[https://github.com/Syncly Syncly MusicSync] on minu Java&amp;lt;ref&amp;gt;[https://itcollege.ois.ee/et/subject/view?subject_id=51&amp;amp;year=2015 I200]&amp;lt;/ref&amp;gt; kodu töö.&lt;br /&gt;
Tegu on üsnagi &amp;lt;abbr title=&amp;quot;Keep It Simple Stupid&amp;quot;&amp;gt;KISS&amp;lt;/abbr&amp;gt; teenusega mis võimaldab kasutajal sünkroniseerida YouTube keskonnas olevaid playliste helifailidena enda telefoni.&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
Õues ringi jalutades või rattaga sõites meeldib mulle kõrvaklapid pähe pannes muusikat kuulata. Tavaliselt on minu muusika allikaks YouTube üles laetud lood mis on mul playlisti lisatud ning mida ma siis aegaajalt ühe väikese scriptiga enda arvuti ja sealt edasi telefoni tõmban. [http://rg3.github.io/youtube-dl/ youtube-dl] on üks väike pythonis kirjutatud programm mis oskab seda väga hästi teha.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
youtube-dl -i -x --download-archive .archive.txt -f bestaudio &amp;quot;http://www.youtube.com/playlist?list=PLB5VrND_o3PgZNzNdohFDWE5BTFIPDImQ&amp;quot;&lt;br /&gt;
adb push -p * /sdcard/Music/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mu sõber Mark tegi selle automaatse sünkroniseerimis osa isegi ära enamvähem ning lükkas koodi githubi üles nightsnack&amp;lt;ref&amp;gt;[https://github.com/mikroskeem/nightsnack nightsnack]&amp;lt;/ref&amp;gt; nimega aga see ei lahenda ära lugude telefoni saamis probleemi.&lt;br /&gt;
&lt;br /&gt;
Sügisel algas Java progemis kursus mille raames otsutasin Javas kirjutatud Androidi rakenduse teha mis oskaks minu lugusi automaatselt telefoni tõmmata.&lt;br /&gt;
&lt;br /&gt;
== Planeering ==&lt;br /&gt;
Kõigepealt alustasin Androidi platvormi dokumentatsiooni lugemisega ja üritasin enamvähem paika panna mida ma androidi rakenduses kuvada tahaksin ning tegin endale enamvähem selgeks kuidas Androidi poolt ära teostada.&lt;br /&gt;
&lt;br /&gt;
Selle lõpptulemuseks on midagi sellist&lt;br /&gt;
&lt;br /&gt;
[[File:MusicSync_home.png|320px]][[File:MusicSync_settings.png|320px]]&lt;br /&gt;
&lt;br /&gt;
Edasi panin paika punktid mida mul oleks vaja et backend server teeks:&lt;br /&gt;
* Playlistide kuvamine / lisamine / eemaldamine&lt;br /&gt;
* Playlistides olevate lugude kuvamine&lt;br /&gt;
* Teadete genereerimine playlisti lugude lisamise/eemaldamise korral&lt;br /&gt;
&lt;br /&gt;
== Tehnoloogiate valik ==&lt;br /&gt;
Backend serveri kirjutamiseks tuli teha valik kuidas ma täpselt selle ära lahendan kasutades mis asju.&lt;br /&gt;
&lt;br /&gt;
Playlistide ja seal olevate lugude salvestamiseks otsustasin kasutada [https://www.mongodb.org/ MongoDB] andmebaasi mis on üks NoSQL andmebaas JSON sarnaste dokumentide salvestamiseks. Valisin MongoDB just selle pärast, et olen seda varasemalt kasutanud, arenduse käigus andmestruktuuri muutmine on üli kerge ning kuna SQL pole mulle eriti kunagi meeldinud.&lt;br /&gt;
&lt;br /&gt;
YouTubest lugude allalaadimiseks hetkel ainuke laialt toetatud varjant on kasutada youtube-dl pythoni programmi. On olemas ka erinevaid veebilehti mis oskavad YouTubest alla laadida helifaile aga ka need suuretõenäosusega kasutavad midagi sarnast tagaplaanil. Kuna youtube-dl on kirjutatud Pythonis siis on selle kasutamine Pythoni scriptides kergem ja annab rohkem võimalusi selle käitumise muutmiseks kui mõne muu lahenduse kasutamine.&lt;br /&gt;
&lt;br /&gt;
Kuna mu arti.ee serverist pole eriti palju kettapinda, et sinna ka muusika ära mahutada siis otsustasin kasutada [https://aws.amazon.com/s3/ Amazon S3] pilveservereid kuhu Youtubest allalaetud muusika paigutada ning sealt neid vajadusel telefoni tõmmata.&lt;br /&gt;
&lt;br /&gt;
Genereeritud teadete edastamiseks sobib mulle väga hästi [https://github.com/wandenberg/nginx-push-stream-module nginx-push-stream-module] mis võimaldab kergesti genereerida Server Sent Events striimi mida on võimalik töödelda väga kergelt kõigi programeerimis keeltega ja veebilehitsejatel on sse tarbimise jaoks sisseehitatud tugi javascriptis.&lt;br /&gt;
&lt;br /&gt;
HTTP API ehitamiseks, mille kaudu teha päringuid serveri pihta, otsustasin teha kasutades Pythoni teeki nimega [http://falconframework.org/ Falcon]. Falcon on minimaalne Pythoni &amp;lt;abbr title=&amp;quot;Web Server Gateway Interface&amp;quot;&amp;gt;WSGI&amp;lt;/abbr&amp;gt; liidest täitev teek HTTP [https://en.wikipedia.org/wiki/Representational_state_transfer RESTful] api&#039;de tegemiseks. Siin on näide sellst kui ilus lõpptulemus jääb kasutades Falconit https://gist.github.com/artizirk/ae9cf28d1f45ef0aa965&lt;br /&gt;
&lt;br /&gt;
== Backendi implementeerimine ==&lt;br /&gt;
Alustasin Youtube playlisti videote lisamise ja eemaldamise eventide genereerimisega. Selleks otsustasin ära kasutada youtube-dl sisse ehitatud funktsionaalsust mis annab mulle tagasi nimekirja lugudest mis on playlistis&lt;br /&gt;
&lt;br /&gt;
Hetkel siis on mul üks &amp;lt;code&amp;gt;playlist-sync.py&amp;lt;/code&amp;gt; fail kus on while True loop mis iga andmebaasi lisatud playlisti kohta käivitab &amp;lt;code&amp;gt;get_song_updates&amp;lt;/code&amp;gt; meetodi. &amp;lt;code&amp;gt;get_song_updates&amp;lt;/code&amp;gt; meetod omakorda tõmbab alla, kasutades youtube-dl teeki, ette antud youtube playlisti html lehe ning ekstraktib sealt kõigi lugude id&#039;d ning ka lugude nimed. Peale seda kui mul on käes list loo id-ga, küsin ma andmebaasist kas need lood on juba lisatud, kui pole, lisan selle ning genereerin evendi. Selleks et teada saada kas mõni lugu on kustutatud playlistis käin ma kõik andmebaasi lisatud antud playlisti lood läbi ning testin kas nad on eelnevalt alla tõmmatud lugude listis, kui pole siis genereerin evendi et lugu on kustutatud youtube playlistist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;youtube-downloader.py&amp;lt;/code&amp;gt; skript kuulab eelnevalt genereeritud evente ning lugude lisamise korral tõmbab nad alla youtube-dl teegi abil ja laeb nad Amazon S3&#039;e üles kasutades boto3 teeki.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;api.py&amp;lt;/code&amp;gt; hoolitseb HTTP API eest. &lt;br /&gt;
Hetkel implementeerib http api neli endpointi kuhu pihta on võimalik päringuid teha&lt;br /&gt;
* &amp;lt;code&amp;gt;/playlists/&amp;lt;/code&amp;gt; - kollektsioon playlistidest&lt;br /&gt;
* &amp;lt;code&amp;gt;/playlists/{playlist_id}&amp;lt;/code&amp;gt; - üks kindel playlist&lt;br /&gt;
* &amp;lt;code&amp;gt;/playlists/{playlist_id}/songs/&amp;lt;/code&amp;gt; - kollektsioon lugudest ühes playlistis&lt;br /&gt;
* &amp;lt;code&amp;gt;/playlists/{playlist_id}/songs/{song_id}&amp;lt;/code&amp;gt; - üks kindel lugu&lt;br /&gt;
Iga see url on implementeeritud erineva klasssi poolt mis omakorda pärinevad &amp;lt;code&amp;gt;BaseResponse&amp;lt;/code&amp;gt; klassist ning kõik nad tagastavad andmeid json vormingus&lt;br /&gt;
&lt;br /&gt;
paar näidet hetkel implementeeritud api kohta&lt;br /&gt;
&amp;lt;pre&amp;gt;% # Küsime serveri lisatud playlistid&lt;br /&gt;
% http GET http://localhost:8000/playlists&lt;br /&gt;
HTTP/1.0 200 OK&lt;br /&gt;
Date: Tue, 08 Dec 2015 13:16:33 GMT&lt;br /&gt;
Server: WSGIServer/0.2 CPython/3.5.0&lt;br /&gt;
content-length: 202&lt;br /&gt;
content-type: application/json; charset=utf-8&lt;br /&gt;
&lt;br /&gt;
[&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;_id&amp;quot;: &amp;quot;PLGE39Wpa-qf1xjp4gmJ_1PBzH7a_-GdOe&amp;quot;,&lt;br /&gt;
        &amp;quot;title&amp;quot;: &amp;quot;Nice Music [WIP]&amp;quot;,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;YoutubePlaylist&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;_id&amp;quot;: &amp;quot;PLB5VrND_o3PgZNzNdohFDWE5BTFIPDImQ&amp;quot;,&lt;br /&gt;
        &amp;quot;title&amp;quot;: &amp;quot;Music I like&amp;quot;,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;YoutubePlaylist&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;% # Küsime mis lood on ühes playlistis&lt;br /&gt;
% http GET http://localhost:8000/playlists/PLB5VrND_o3PgZNzNdohFDWE5BTFIPDImQ/songs&lt;br /&gt;
HTTP/1.0 200 OK&lt;br /&gt;
Date: Tue, 08 Dec 2015 13:17:01 GMT&lt;br /&gt;
Server: WSGIServer/0.2 CPython/3.5.0&lt;br /&gt;
content-length: 546&lt;br /&gt;
content-type: application/json; charset=utf-8&lt;br /&gt;
&lt;br /&gt;
[&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;_id&amp;quot;: &amp;quot;qFDP9egTwfM&amp;quot;,&lt;br /&gt;
        &amp;quot;deleted&amp;quot;: false,&lt;br /&gt;
        &amp;quot;playlist&amp;quot;: &amp;quot;PLB5VrND_o3PgZNzNdohFDWE5BTFIPDImQ&amp;quot;,&lt;br /&gt;
        &amp;quot;title&amp;quot;: &amp;quot;Netsky - Rio (Official Video) ft. Digital Farm Animals&amp;quot;,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;Youtube&amp;quot;,&lt;br /&gt;
        &amp;quot;url&amp;quot;: &amp;quot;http://s3.storage.ms.wut.ee/qFDP9egTwfM&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;_id&amp;quot;: &amp;quot;FGBhQbmPwH8&amp;quot;,&lt;br /&gt;
        &amp;quot;deleted&amp;quot;: false,&lt;br /&gt;
        &amp;quot;playlist&amp;quot;: &amp;quot;PLB5VrND_o3PgZNzNdohFDWE5BTFIPDImQ&amp;quot;,&lt;br /&gt;
        &amp;quot;title&amp;quot;: &amp;quot;Daft Punk - One More Time&amp;quot;,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;Youtube&amp;quot;,&lt;br /&gt;
        &amp;quot;url&amp;quot;: &amp;quot;http://s3.storage.ms.wut.ee/FGBhQbmPwH8&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kokkuvõttes on ülesehitus midagi sellist:&lt;br /&gt;
&lt;br /&gt;
[[File:MusicSync_chart.png|500px]]&lt;br /&gt;
&lt;br /&gt;
== Androidi klient ==&lt;br /&gt;
Nüüd kus backend osa on valmis on mul võimalik Androidi rakendus ka ära lõpetada.&lt;br /&gt;
&lt;br /&gt;
= Viited =&lt;br /&gt;
{{Reflist}}&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=File:MusicSync_chart.png&amp;diff=98782</id>
		<title>File:MusicSync chart.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=File:MusicSync_chart.png&amp;diff=98782"/>
		<updated>2015-12-08T13:40:32Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Arti_Zirk_-_Syncly_MusicSync&amp;diff=98781</id>
		<title>Arti Zirk - Syncly MusicSync</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Arti_Zirk_-_Syncly_MusicSync&amp;diff=98781"/>
		<updated>2015-12-08T13:39:10Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Esitlus =&lt;br /&gt;
Esitluse slaidid on siin: http://slides.com/artizirk/musicsync&lt;br /&gt;
&lt;br /&gt;
= Syncly MusicSync =&lt;br /&gt;
[https://github.com/Syncly Syncly MusicSync] on minu Java&amp;lt;ref&amp;gt;[https://itcollege.ois.ee/et/subject/view?subject_id=51&amp;amp;year=2015 I200]&amp;lt;/ref&amp;gt; kodu töö.&lt;br /&gt;
Tegu on üsnagi &amp;lt;abbr title=&amp;quot;Keep It Simple Stupid&amp;quot;&amp;gt;KISS&amp;lt;/abbr&amp;gt; teenusega mis võimaldab kasutajal sünkroniseerida YouTube keskonnas olevaid playliste helifailidena enda telefoni.&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
Õues ringi jalutades või rattaga sõites meeldib mulle kõrvaklapid pähe pannes muusikat kuulata. Tavaliselt on minu muusika allikaks YouTube üles laetud lood mis on mul playlisti lisatud ning mida ma siis aegaajalt ühe väikese scriptiga enda arvuti ja sealt edasi telefoni tõmban. [http://rg3.github.io/youtube-dl/ youtube-dl] on üks väike pythonis kirjutatud programm mis oskab seda väga hästi teha.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
youtube-dl -i -x --download-archive .archive.txt -f bestaudio &amp;quot;http://www.youtube.com/playlist?list=PLB5VrND_o3PgZNzNdohFDWE5BTFIPDImQ&amp;quot;&lt;br /&gt;
adb push -p * /sdcard/Music/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mu sõber Mark tegi selle automaatse sünkroniseerimis osa isegi ära enamvähem ning lükkas koodi githubi üles nightsnack&amp;lt;ref&amp;gt;[https://github.com/mikroskeem/nightsnack nightsnack]&amp;lt;/ref&amp;gt; nimega aga see ei lahenda ära lugude telefoni saamis probleemi.&lt;br /&gt;
&lt;br /&gt;
Sügisel algas Java progemis kursus mille raames otsutasin Javas kirjutatud Androidi rakenduse teha mis oskaks minu lugusi automaatselt telefoni tõmmata.&lt;br /&gt;
&lt;br /&gt;
== Planeering ==&lt;br /&gt;
Kõigepealt alustasin Androidi platvormi dokumentatsiooni lugemisega ja üritasin enamvähem paika panna mida ma androidi rakenduses kuvada tahaksin ning tegin endale enamvähem selgeks kuidas Androidi poolt ära teostada.&lt;br /&gt;
&lt;br /&gt;
Selle lõpptulemuseks on midagi sellist&lt;br /&gt;
&lt;br /&gt;
[[File:MusicSync_home.png|320px]][[File:MusicSync_settings.png|320px]]&lt;br /&gt;
&lt;br /&gt;
Edasi panin paika punktid mida mul oleks vaja et backend server teeks:&lt;br /&gt;
* Playlistide kuvamine / lisamine / eemaldamine&lt;br /&gt;
* Playlistides olevate lugude kuvamine&lt;br /&gt;
* Teadete genereerimine playlisti lugude lisamise/eemaldamise korral&lt;br /&gt;
&lt;br /&gt;
== Tehnoloogiate valik ==&lt;br /&gt;
Backend serveri kirjutamiseks tuli teha valik kuidas ma täpselt selle ära lahendan kasutades mis asju.&lt;br /&gt;
&lt;br /&gt;
Playlistide ja seal olevate lugude salvestamiseks otsustasin kasutada [https://www.mongodb.org/ MongoDB] andmebaasi mis on üks NoSQL andmebaas JSON sarnaste dokumentide salvestamiseks. Valisin MongoDB just selle pärast, et olen seda varasemalt kasutanud, arenduse käigus andmestruktuuri muutmine on üli kerge ning kuna SQL pole mulle eriti kunagi meeldinud.&lt;br /&gt;
&lt;br /&gt;
YouTubest lugude allalaadimiseks hetkel ainuke laialt toetatud varjant on kasutada youtube-dl pythoni programmi. On olemas ka erinevaid veebilehti mis oskavad YouTubest alla laadida helifaile aga ka need suuretõenäosusega kasutavad midagi sarnast tagaplaanil. Kuna youtube-dl on kirjutatud Pythonis siis on selle kasutamine Pythoni scriptides kergem ja annab rohkem võimalusi selle käitumise muutmiseks kui mõne muu lahenduse kasutamine.&lt;br /&gt;
&lt;br /&gt;
Kuna mu arti.ee serverist pole eriti palju kettapinda, et sinna ka muusika ära mahutada siis otsustasin kasutada [https://aws.amazon.com/s3/ Amazon S3] pilveservereid kuhu Youtubest allalaetud muusika paigutada ning sealt neid vajadusel telefoni tõmmata.&lt;br /&gt;
&lt;br /&gt;
Genereeritud teadete edastamiseks sobib mulle väga hästi [https://github.com/wandenberg/nginx-push-stream-module nginx-push-stream-module] mis võimaldab kergesti genereerida Server Sent Events striimi mida on võimalik töödelda väga kergelt kõigi programeerimis keeltega ja veebilehitsejatel on sse tarbimise jaoks sisseehitatud tugi javascriptis.&lt;br /&gt;
&lt;br /&gt;
HTTP API ehitamiseks, mille kaudu teha päringuid serveri pihta, otsustasin teha kasutades Pythoni teeki nimega [http://falconframework.org/ Falcon]. Falcon on minimaalne Pythoni &amp;lt;abbr title=&amp;quot;Web Server Gateway Interface&amp;quot;&amp;gt;WSGI&amp;lt;/abbr&amp;gt; liidest täitev teek HTTP [https://en.wikipedia.org/wiki/Representational_state_transfer RESTful] api&#039;de tegemiseks. Siin on näide sellst kui ilus lõpptulemus jääb kasutades Falconit https://gist.github.com/artizirk/ae9cf28d1f45ef0aa965&lt;br /&gt;
&lt;br /&gt;
== Backendi implementeerimine ==&lt;br /&gt;
Alustasin Youtube playlisti videote lisamise ja eemaldamise eventide genereerimisega. Selleks otsustasin ära kasutada youtube-dl sisse ehitatud funktsionaalsust mis annab mulle tagasi nimekirja lugudest mis on playlistis&lt;br /&gt;
&lt;br /&gt;
Hetkel siis on mul üks &amp;lt;code&amp;gt;playlist-sync.py&amp;lt;/code&amp;gt; fail kus on while True loop mis iga andmebaasi lisatud playlisti kohta käivitab &amp;lt;code&amp;gt;get_song_updates&amp;lt;/code&amp;gt; meetodi. &amp;lt;code&amp;gt;get_song_updates&amp;lt;/code&amp;gt; meetod omakorda tõmbab alla, kasutades youtube-dl teeki, ette antud youtube playlisti html lehe ning ekstraktib sealt kõigi lugude id&#039;d ning ka lugude nimed. Peale seda kui mul on käes list loo id-ga, küsin ma andmebaasist kas need lood on juba lisatud, kui pole, lisan selle ning genereerin evendi. Selleks et teada saada kas mõni lugu on kustutatud playlistis käin ma kõik andmebaasi lisatud antud playlisti lood läbi ning testin kas nad on eelnevalt alla tõmmatud lugude listis, kui pole siis genereerin evendi et lugu on kustutatud youtube playlistist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;youtube-downloader.py&amp;lt;/code&amp;gt; skript kuulab eelnevalt genereeritud evente ning lugude lisamise korral tõmbab nad alla youtube-dl teegi abil ja laeb nad Amazon S3&#039;e üles kasutades boto3 teeki.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;api.py&amp;lt;/code&amp;gt; hoolitseb HTTP API eest. &lt;br /&gt;
Hetkel implementeerib http api neli endpointi kuhu pihta on võimalik päringuid teha&lt;br /&gt;
* &amp;lt;code&amp;gt;/playlists/&amp;lt;/code&amp;gt; - kollektsioon playlistidest&lt;br /&gt;
* &amp;lt;code&amp;gt;/playlists/{playlist_id}&amp;lt;/code&amp;gt; - üks kindel playlist&lt;br /&gt;
* &amp;lt;code&amp;gt;/playlists/{playlist_id}/songs/&amp;lt;/code&amp;gt; - kollektsioon lugudest ühes playlistis&lt;br /&gt;
* &amp;lt;code&amp;gt;/playlists/{playlist_id}/songs/{song_id}&amp;lt;/code&amp;gt; - üks kindel lugu&lt;br /&gt;
Iga see url on implementeeritud erineva klasssi poolt mis omakorda pärinevad &amp;lt;code&amp;gt;BaseResponse&amp;lt;/code&amp;gt; klassist ning kõik nad tagastavad andmeid json vormingus&lt;br /&gt;
&lt;br /&gt;
paar näidet hetkel implementeeritud api kohta&lt;br /&gt;
&amp;lt;pre&amp;gt;% # Küsime serveri lisatud playlistid&lt;br /&gt;
% http GET http://localhost:8000/playlists&lt;br /&gt;
HTTP/1.0 200 OK&lt;br /&gt;
Date: Tue, 08 Dec 2015 13:16:33 GMT&lt;br /&gt;
Server: WSGIServer/0.2 CPython/3.5.0&lt;br /&gt;
content-length: 202&lt;br /&gt;
content-type: application/json; charset=utf-8&lt;br /&gt;
&lt;br /&gt;
[&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;_id&amp;quot;: &amp;quot;PLGE39Wpa-qf1xjp4gmJ_1PBzH7a_-GdOe&amp;quot;,&lt;br /&gt;
        &amp;quot;title&amp;quot;: &amp;quot;Nice Music [WIP]&amp;quot;,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;YoutubePlaylist&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;_id&amp;quot;: &amp;quot;PLB5VrND_o3PgZNzNdohFDWE5BTFIPDImQ&amp;quot;,&lt;br /&gt;
        &amp;quot;title&amp;quot;: &amp;quot;Music I like&amp;quot;,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;YoutubePlaylist&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;% # Küsime mis lood on ühes playlistis&lt;br /&gt;
% http GET http://localhost:8000/playlists/PLB5VrND_o3PgZNzNdohFDWE5BTFIPDImQ/songs&lt;br /&gt;
HTTP/1.0 200 OK&lt;br /&gt;
Date: Tue, 08 Dec 2015 13:17:01 GMT&lt;br /&gt;
Server: WSGIServer/0.2 CPython/3.5.0&lt;br /&gt;
content-length: 546&lt;br /&gt;
content-type: application/json; charset=utf-8&lt;br /&gt;
&lt;br /&gt;
[&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;_id&amp;quot;: &amp;quot;qFDP9egTwfM&amp;quot;,&lt;br /&gt;
        &amp;quot;deleted&amp;quot;: false,&lt;br /&gt;
        &amp;quot;playlist&amp;quot;: &amp;quot;PLB5VrND_o3PgZNzNdohFDWE5BTFIPDImQ&amp;quot;,&lt;br /&gt;
        &amp;quot;title&amp;quot;: &amp;quot;Netsky - Rio (Official Video) ft. Digital Farm Animals&amp;quot;,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;Youtube&amp;quot;,&lt;br /&gt;
        &amp;quot;url&amp;quot;: &amp;quot;http://s3.storage.ms.wut.ee/qFDP9egTwfM&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;_id&amp;quot;: &amp;quot;FGBhQbmPwH8&amp;quot;,&lt;br /&gt;
        &amp;quot;deleted&amp;quot;: false,&lt;br /&gt;
        &amp;quot;playlist&amp;quot;: &amp;quot;PLB5VrND_o3PgZNzNdohFDWE5BTFIPDImQ&amp;quot;,&lt;br /&gt;
        &amp;quot;title&amp;quot;: &amp;quot;Daft Punk - One More Time&amp;quot;,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;Youtube&amp;quot;,&lt;br /&gt;
        &amp;quot;url&amp;quot;: &amp;quot;http://s3.storage.ms.wut.ee/FGBhQbmPwH8&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Androidi klient ==&lt;br /&gt;
Nüüd kus backend osa on valmis on mul võimalik Androidi rakendus ka ära lõpetada.&lt;br /&gt;
&lt;br /&gt;
= Viited =&lt;br /&gt;
{{Reflist}}&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Arti_Zirk_-_Syncly_MusicSync&amp;diff=98779</id>
		<title>Arti Zirk - Syncly MusicSync</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Arti_Zirk_-_Syncly_MusicSync&amp;diff=98779"/>
		<updated>2015-12-08T13:33:38Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: /* Backendi implementeerimine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Esitlus =&lt;br /&gt;
Esitluse slaidid on siin: http://slides.com/artizirk/musicsync&lt;br /&gt;
&lt;br /&gt;
= Syncly MusicSync =&lt;br /&gt;
[https://github.com/Syncly Syncly MusicSync] on minu Java&amp;lt;ref&amp;gt;[https://itcollege.ois.ee/et/subject/view?subject_id=51&amp;amp;year=2015 I200]&amp;lt;/ref&amp;gt; kodu töö.&lt;br /&gt;
Tegu on üsnagi &amp;lt;abbr title=&amp;quot;Keep It Simple Stupid&amp;quot;&amp;gt;KISS&amp;lt;/abbr&amp;gt; teenusega mis võimaldab kasutajal sünkroniseerida YouTube keskonnas olevaid playliste helifailidena enda telefoni.&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
Õues ringi jalutades või rattaga sõites meeldib mulle kõrvaklapid pähe pannes muusikat kuulata. Tavaliselt on minu muusika allikaks YouTube üles laetud lood mis on mul playlisti lisatud ning mida ma siis aegaajalt ühe väikese scriptiga enda arvuti ja sealt edasi telefoni tõmban. [http://rg3.github.io/youtube-dl/ youtube-dl] on üks väike pythonis kirjutatud programm mis oskab seda väga hästi teha.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
youtube-dl -i -x --download-archive .archive.txt -f bestaudio &amp;quot;http://www.youtube.com/playlist?list=PLB5VrND_o3PgZNzNdohFDWE5BTFIPDImQ&amp;quot;&lt;br /&gt;
adb push -p * /sdcard/Music/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mu sõber Mark tegi selle automaatse sünkroniseerimis osa isegi ära enamvähem ning lükkas koodi githubi üles nightsnack&amp;lt;ref&amp;gt;[https://github.com/mikroskeem/nightsnack nightsnack]&amp;lt;/ref&amp;gt; nimega aga see ei lahenda ära lugude telefoni saamis probleemi.&lt;br /&gt;
&lt;br /&gt;
Sügisel algas Java progemis kursus mille raames otsutasin Javas kirjutatud Androidi rakenduse teha mis oskaks minu lugusi automaatselt telefoni tõmmata.&lt;br /&gt;
&lt;br /&gt;
== Planeering ==&lt;br /&gt;
Kõigepealt alustasin Androidi platvormi dokumentatsiooni lugemisega ja üritasin enamvähem paika panna mida ma androidi rakenduses kuvada tahaksin ning tegin endale enamvähem selgeks kuidas Androidi poolt ära teostada.&lt;br /&gt;
&lt;br /&gt;
Selle lõpptulemuseks on midagi sellist&lt;br /&gt;
&lt;br /&gt;
[[File:MusicSync_home.png|320px]][[File:MusicSync_settings.png|320px]]&lt;br /&gt;
&lt;br /&gt;
Edasi panin paika punktid mida mul oleks vaja et backend server teeks:&lt;br /&gt;
* Playlistide kuvamine / lisamine / eemaldamine&lt;br /&gt;
* Playlistides olevate lugude kuvamine&lt;br /&gt;
* Teadete genereerimine playlisti lugude lisamise/eemaldamise korral&lt;br /&gt;
&lt;br /&gt;
== Tehnoloogiate valik ==&lt;br /&gt;
Backend serveri kirjutamiseks tuli teha valik kuidas ma täpselt selle ära lahendan kasutades mis asju.&lt;br /&gt;
&lt;br /&gt;
Playlistide ja seal olevate lugude salvestamiseks otsustasin kasutada [https://www.mongodb.org/ MongoDB] andmebaasi mis on üks NoSQL andmebaas JSON sarnaste dokumentide salvestamiseks. Valisin MongoDB just selle pärast, et olen seda varasemalt kasutanud, arenduse käigus andmestruktuuri muutmine on üli kerge ning kuna SQL pole mulle eriti kunagi meeldinud.&lt;br /&gt;
&lt;br /&gt;
YouTubest lugude allalaadimiseks hetkel ainuke laialt toetatud varjant on kasutada youtube-dl pythoni programmi. On olemas ka erinevaid veebilehti mis oskavad YouTubest alla laadida helifaile aga ka need suuretõenäosusega kasutavad midagi sarnast tagaplaanil. Kuna youtube-dl on kirjutatud Pythonis siis on selle kasutamine Pythoni scriptides kergem ja annab rohkem võimalusi selle käitumise muutmiseks kui mõne muu lahenduse kasutamine.&lt;br /&gt;
&lt;br /&gt;
Kuna mu arti.ee serverist pole eriti palju kettapinda, et sinna ka muusika ära mahutada siis otsustasin kasutada [https://aws.amazon.com/s3/ Amazon S3] pilveservereid kuhu Youtubest allalaetud muusika paigutada ning sealt neid vajadusel telefoni tõmmata.&lt;br /&gt;
&lt;br /&gt;
Genereeritud teadete edastamiseks sobib mulle väga hästi [https://github.com/wandenberg/nginx-push-stream-module nginx-push-stream-module] mis võimaldab kergesti genereerida Server Sent Events striimi mida on võimalik töödelda väga kergelt kõigi programeerimis keeltega ja veebilehitsejatel on sse tarbimise jaoks sisseehitatud tugi javascriptis.&lt;br /&gt;
&lt;br /&gt;
HTTP API ehitamiseks, mille kaudu teha päringuid serveri pihta, otsustasin teha kasutades Pythoni teeki nimega [http://falconframework.org/ Falcon]. Falcon on minimaalne Pythoni &amp;lt;abbr title=&amp;quot;Web Server Gateway Interface&amp;quot;&amp;gt;WSGI&amp;lt;/abbr&amp;gt; liidest täitev teek HTTP [https://en.wikipedia.org/wiki/Representational_state_transfer RESTful] api&#039;de tegemiseks. Siin on näide sellst kui ilus lõpptulemus jääb kasutades Falconit https://gist.github.com/artizirk/ae9cf28d1f45ef0aa965&lt;br /&gt;
&lt;br /&gt;
== Backendi implementeerimine ==&lt;br /&gt;
Alustasin Youtube playlisti videote lisamise ja eemaldamise eventide genereerimisega. Selleks otsustasin ära kasutada youtube-dl sisse ehitatud funktsionaalsust mis annab mulle tagasi nimekirja lugudest mis on playlistis&lt;br /&gt;
&lt;br /&gt;
Hetkel siis on mul üks &amp;lt;code&amp;gt;playlist-sync.py&amp;lt;/code&amp;gt; fail kus on while True loop mis iga andmebaasi lisatud playlisti kohta käivitab &amp;lt;code&amp;gt;get_song_updates&amp;lt;/code&amp;gt; meetodi. &amp;lt;code&amp;gt;get_song_updates&amp;lt;/code&amp;gt; meetod omakorda tõmbab alla, kasutades youtube-dl teeki, ette antud youtube playlisti html lehe ning ekstraktib sealt kõigi lugude id&#039;d ning ka lugude nimed. Peale seda kui mul on käes list loo id-ga, küsin ma andmebaasist kas need lood on juba lisatud, kui pole, lisan selle ning genereerin evendi. Selleks et teada saada kas mõni lugu on kustutatud playlistis käin ma kõik andmebaasi lisatud antud playlisti lood läbi ning testin kas nad on eelnevalt alla tõmmatud lugude listis, kui pole siis genereerin evendi et lugu on kustutatud youtube playlistist.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;youtube-downloader.py&amp;lt;/code&amp;gt; skript kuulab eelnevalt genereeritud evente ning lugude lisamise korral tõmbab nad alla youtube-dl teegi abil ja laeb nad Amazon S3&#039;e üles kasutades boto3 teeki.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;api.py&amp;lt;/code&amp;gt; hoolitseb HTTP API eest. &lt;br /&gt;
Hetkel implementeerib http api neli endpointi kuhu pihta on võimalik päringuid teha&lt;br /&gt;
* &amp;lt;code&amp;gt;/playlists/&amp;lt;/code&amp;gt; - kollektsioon playlistidest&lt;br /&gt;
* &amp;lt;code&amp;gt;/playlists/{playlist_id}&amp;lt;/code&amp;gt; - üks kindel playlist&lt;br /&gt;
* &amp;lt;code&amp;gt;/playlists/{playlist_id}/songs/&amp;lt;/code&amp;gt; - kollektsioon lugudest ühes playlistis&lt;br /&gt;
* &amp;lt;code&amp;gt;/playlists/{playlist_id}/songs/{song_id}&amp;lt;/code&amp;gt; - üks kindel lugu&lt;br /&gt;
Iga see url on implementeeritud erineva klasssi poolt mis omakorda pärinevad &amp;lt;code&amp;gt;BaseResponse&amp;lt;/code&amp;gt; klassist ning kõik nad tagastavad andmeid json vormingus&lt;br /&gt;
&lt;br /&gt;
paar näidet hetkel implementeeritud api kohta&lt;br /&gt;
&amp;lt;pre&amp;gt;% # Küsime serveri lisatud playlistid&lt;br /&gt;
% http GET http://localhost:8000/playlists&lt;br /&gt;
HTTP/1.0 200 OK&lt;br /&gt;
Date: Tue, 08 Dec 2015 13:16:33 GMT&lt;br /&gt;
Server: WSGIServer/0.2 CPython/3.5.0&lt;br /&gt;
content-length: 202&lt;br /&gt;
content-type: application/json; charset=utf-8&lt;br /&gt;
&lt;br /&gt;
[&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;_id&amp;quot;: &amp;quot;PLGE39Wpa-qf1xjp4gmJ_1PBzH7a_-GdOe&amp;quot;,&lt;br /&gt;
        &amp;quot;title&amp;quot;: &amp;quot;Nice Music [WIP]&amp;quot;,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;YoutubePlaylist&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;_id&amp;quot;: &amp;quot;PLB5VrND_o3PgZNzNdohFDWE5BTFIPDImQ&amp;quot;,&lt;br /&gt;
        &amp;quot;title&amp;quot;: &amp;quot;Music I like&amp;quot;,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;YoutubePlaylist&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;% # Küsime mis lood on ühes playlistis&lt;br /&gt;
% http GET http://localhost:8000/playlists/PLB5VrND_o3PgZNzNdohFDWE5BTFIPDImQ/songs&lt;br /&gt;
HTTP/1.0 200 OK&lt;br /&gt;
Date: Tue, 08 Dec 2015 13:17:01 GMT&lt;br /&gt;
Server: WSGIServer/0.2 CPython/3.5.0&lt;br /&gt;
content-length: 546&lt;br /&gt;
content-type: application/json; charset=utf-8&lt;br /&gt;
&lt;br /&gt;
[&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;_id&amp;quot;: &amp;quot;qFDP9egTwfM&amp;quot;,&lt;br /&gt;
        &amp;quot;deleted&amp;quot;: false,&lt;br /&gt;
        &amp;quot;playlist&amp;quot;: &amp;quot;PLB5VrND_o3PgZNzNdohFDWE5BTFIPDImQ&amp;quot;,&lt;br /&gt;
        &amp;quot;title&amp;quot;: &amp;quot;Netsky - Rio (Official Video) ft. Digital Farm Animals&amp;quot;,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;Youtube&amp;quot;,&lt;br /&gt;
        &amp;quot;url&amp;quot;: &amp;quot;http://s3.storage.ms.wut.ee/qFDP9egTwfM&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;_id&amp;quot;: &amp;quot;FGBhQbmPwH8&amp;quot;,&lt;br /&gt;
        &amp;quot;deleted&amp;quot;: false,&lt;br /&gt;
        &amp;quot;playlist&amp;quot;: &amp;quot;PLB5VrND_o3PgZNzNdohFDWE5BTFIPDImQ&amp;quot;,&lt;br /&gt;
        &amp;quot;title&amp;quot;: &amp;quot;Daft Punk - One More Time&amp;quot;,&lt;br /&gt;
        &amp;quot;type&amp;quot;: &amp;quot;Youtube&amp;quot;,&lt;br /&gt;
        &amp;quot;url&amp;quot;: &amp;quot;http://s3.storage.ms.wut.ee/FGBhQbmPwH8&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Viited =&lt;br /&gt;
{{Reflist}}&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Arti_Zirk_-_Syncly_MusicSync&amp;diff=98759</id>
		<title>Arti Zirk - Syncly MusicSync</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Arti_Zirk_-_Syncly_MusicSync&amp;diff=98759"/>
		<updated>2015-12-08T12:26:02Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: Veel teksti&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Esitlus =&lt;br /&gt;
Esitluse slaidid on siin: http://slides.com/artizirk/musicsync&lt;br /&gt;
&lt;br /&gt;
= Syncly MusicSync =&lt;br /&gt;
[https://github.com/Syncly Syncly MusicSync] on minu Java&amp;lt;ref&amp;gt;[https://itcollege.ois.ee/et/subject/view?subject_id=51&amp;amp;year=2015 I200]&amp;lt;/ref&amp;gt; kodu töö.&lt;br /&gt;
Tegu on üsnagi &amp;lt;abbr title=&amp;quot;Keep It Simple Stupid&amp;quot;&amp;gt;KISS&amp;lt;/abbr&amp;gt; teenusega mis võimaldab kasutajal sünkroniseerida YouTube keskonnas olevaid playliste helifailidena enda telefoni.&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
Õues ringi jalutades või rattaga sõites meeldib mulle kõrvaklapid pähe pannes muusikat kuulata. Tavaliselt on minu muusika allikaks YouTube üles laetud lood mis on mul playlisti lisatud ning mida ma siis aegaajalt ühe väikese scriptiga enda arvuti ja sealt edasi telefoni tõmban. [http://rg3.github.io/youtube-dl/ youtube-dl] on üks väike pythonis kirjutatud programm mis oskab seda väga hästi teha.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
youtube-dl -i -x --download-archive .archive.txt -f bestaudio &amp;quot;http://www.youtube.com/playlist?list=PLB5VrND_o3PgZNzNdohFDWE5BTFIPDImQ&amp;quot;&lt;br /&gt;
adb push -p * /sdcard/Music/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mu sõber Mark tegi selle automaatse sünkroniseerimis osa isegi ära enamvähem ning lükkas koodi githubi üles nightsnack&amp;lt;ref&amp;gt;[https://github.com/mikroskeem/nightsnack nightsnack]&amp;lt;/ref&amp;gt; nimega aga see ei lahenda ära lugude telefoni saamis probleemi.&lt;br /&gt;
&lt;br /&gt;
Sügisel algas Java progemis kursus mille raames otsutasin Javas kirjutatud Androidi rakenduse teha mis oskaks minu lugusi automaatselt telefoni tõmmata.&lt;br /&gt;
&lt;br /&gt;
== Planeering ==&lt;br /&gt;
Kõigepealt alustasin Androidi platvormi dokumentatsiooni lugemisega ja üritasin enamvähem paika panna mida ma androidi rakenduses kuvada tahaksin ning tegin endale enamvähem selgeks kuidas Androidi poolt ära teostada.&lt;br /&gt;
&lt;br /&gt;
Selle lõpptulemuseks on midagi sellist&lt;br /&gt;
&lt;br /&gt;
[[File:MusicSync_home.png|320px]][[File:MusicSync_settings.png|320px]]&lt;br /&gt;
&lt;br /&gt;
Edasi panin paika punktid mida mul oleks vaja et backend server teeks:&lt;br /&gt;
* Playlistide kuvamine / lisamine / eemaldamine&lt;br /&gt;
* Playlistides olevate lugude kuvamine&lt;br /&gt;
* Teadete genereerimine playlisti lugude lisamise/eemaldamise korral&lt;br /&gt;
&lt;br /&gt;
== Tehnoloogiate valik ==&lt;br /&gt;
Backend serveri kirjutamiseks tuli teha valik kuidas ma täpselt selle ära lahendan kasutades mis asju.&lt;br /&gt;
&lt;br /&gt;
Playlistide ja seal olevate lugude salvestamiseks otsustasin kasutada [https://www.mongodb.org/ MongoDB] andmebaasi mis on üks NoSQL andmebaas JSON sarnaste dokumentide salvestamiseks. Valisin MongoDB just selle pärast, et olen seda varasemalt kasutanud, arenduse käigus andmestruktuuri muutmine on üli kerge ning kuna SQL pole mulle eriti kunagi meeldinud.&lt;br /&gt;
&lt;br /&gt;
YouTubest lugude allalaadimiseks hetkel ainuke laialt toetatud varjant on kasutada youtube-dl pythoni programmi. On olemas ka erinevaid veebilehti mis oskavad YouTubest alla laadida helifaile aga ka need suuretõenäosusega kasutavad midagi sarnast tagaplaanil. Kuna youtube-dl on kirjutatud Pythonis siis on selle kasutamine Pythoni scriptides kergem ja annab rohkem võimalusi selle käitumise muutmiseks kui mõne muu lahenduse kasutamine.&lt;br /&gt;
&lt;br /&gt;
Kuna mu arti.ee serverist pole eriti palju kettapinda, et sinna ka muusika ära mahutada siis otsustasin kasutada [https://aws.amazon.com/s3/ Amazon S3] pilveservereid kuhu Youtubest allalaetud muusika paigutada ning sealt neid vajadusel telefoni tõmmata.&lt;br /&gt;
&lt;br /&gt;
Genereeritud teadete edastamiseks sobib mulle väga hästi [https://github.com/wandenberg/nginx-push-stream-module nginx-push-stream-module] mis võimaldab kergesti genereerida Server Sent Events striimi mida on võimalik töödelda väga kergelt kõigi programeerimis keeltega ja veebilehitsejatel on sse tarbimise jaoks sisseehitatud tugi javascriptis.&lt;br /&gt;
&lt;br /&gt;
HTTP API ehitamiseks, mille kaudu teha päringuid serveri pihta, otsustasin teha kasutades Pythoni teeki nimega [http://falconframework.org/ Falcon]. Falcon on minimaalne Pythoni &amp;lt;abbr title=&amp;quot;Web Server Gateway Interface&amp;quot;&amp;gt;WSGI&amp;lt;/abbr&amp;gt; liidest täitev teek HTTP [https://en.wikipedia.org/wiki/Representational_state_transfer RESTful] api&#039;de tegemiseks. Siin on näide sellst kui ilus lõpptulemus jääb kasutades Falconit https://gist.github.com/artizirk/ae9cf28d1f45ef0aa965&lt;br /&gt;
&lt;br /&gt;
== Backendi implementeerimine ==&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
= Viited =&lt;br /&gt;
{{Reflist}}&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=File:MusicSync_home.png&amp;diff=98758</id>
		<title>File:MusicSync home.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=File:MusicSync_home.png&amp;diff=98758"/>
		<updated>2015-12-08T11:31:19Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=File:MusicSync_settings.png&amp;diff=98757</id>
		<title>File:MusicSync settings.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=File:MusicSync_settings.png&amp;diff=98757"/>
		<updated>2015-12-08T11:30:45Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=IT_eetilised,_sotsiaalsed_ja_professionaalsed_aspektid&amp;diff=98756</id>
		<title>IT eetilised, sotsiaalsed ja professionaalsed aspektid</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=IT_eetilised,_sotsiaalsed_ja_professionaalsed_aspektid&amp;diff=98756"/>
		<updated>2015-12-08T11:18:09Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: /* sügis 2015 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;See sektsioon on mõeldud neile, kes tahavad enda  [http://akadeemia.kakupesa.net/ITSPEA ITSPEA] kirjatööd wiki kujul esitada.&lt;br /&gt;
&lt;br /&gt;
== sügis 2012 ==&lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/Olavi_Koplik_-_Internet_kui_kultuurin%C3%A4htus Olavi Koplik]&lt;br /&gt;
&lt;br /&gt;
== sügis 2013 ==&lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/Magnus_Kokk_-_L%C3%BChike_%C3%BClevaade_GNU/Linux_t%C3%B6%C3%B6lauakeskkondadest Magnus Kokk - Lühike ülevaade GNU/Linux töölauakeskkondadest]&lt;br /&gt;
&lt;br /&gt;
== sügis 2015 ==&lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/Arti_Zirk_-_Mina_ja_Linux Arti Zirk - Mina ja Linux]&lt;br /&gt;
* [https://wiki.itcollege.ee/index.php/Arti_Zirk_-_Syncly_MusicSync Arti Zirk - Syncly MusicSync]&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Arti_Zirk_-_Syncly_MusicSync&amp;diff=98755</id>
		<title>Arti Zirk - Syncly MusicSync</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Arti_Zirk_-_Syncly_MusicSync&amp;diff=98755"/>
		<updated>2015-12-08T11:16:21Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: idee algus&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Esitlus =&lt;br /&gt;
Esitluse slaidid on siin: http://slides.com/artizirk/musicsync&lt;br /&gt;
&lt;br /&gt;
= Syncly MusicSync =&lt;br /&gt;
[https://github.com/Syncly Syncly MusicSync] on minu Java&amp;lt;ref&amp;gt;[https://itcollege.ois.ee/et/subject/view?subject_id=51&amp;amp;year=2015 I200]&amp;lt;/ref&amp;gt; kodu töö.&lt;br /&gt;
Tegu on üsnagi &amp;lt;abbr title=&amp;quot;Keep It Simple Stupid&amp;quot;&amp;gt;KISS&amp;lt;/abbr&amp;gt; teenusega mis võimaldab kasutajal sünkroniseerida YouTube keskonnas olevaid playliste helifailidena enda telefoni.&lt;br /&gt;
&lt;br /&gt;
== Idee ==&lt;br /&gt;
Õues ringi jalutades või rattaga sõites meeldib mulle kõrvaklapid pähe pannes muusikat kuulata. Tavaliselt on minu muusika allikaks YouTube üles laetud lood mis on mul playlisti lisatud ning mida ma siis aegaajalt ühe väikese scriptiga enda arvuti ja sealt edasi telefoni tõmban. [http://rg3.github.io/youtube-dl/ youtube-dl] on üks väike pythonis kirjutatud programm mis oskab seda väga hästi teha.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
youtube-dl -i -x --download-archive .archive.txt -f bestaudio &amp;quot;http://www.youtube.com/playlist?list=PLB5VrND_o3PgZNzNdohFDWE5BTFIPDImQ&amp;quot;&lt;br /&gt;
adb push -p * /sdcard/Music/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mu sõber Mark tegi selle automaatse sünkroniseerimis osa isegi ära enamvähem ning lükkas koodi githubi üles nightsnack&amp;lt;ref&amp;gt;[https://github.com/mikroskeem/nightsnack nightsnack]&amp;lt;/ref&amp;gt; nimega aga see ei lahenda ära lugude telefoni saamis probleemi.&lt;br /&gt;
&lt;br /&gt;
Sügisel algas Java progemis kursus mille raames otsutasin Javas kirjutatud Androidi rakenduse teha mis oskaks minu lugusi automaatselt telefoni tõmmata.&lt;br /&gt;
&lt;br /&gt;
= Viited =&lt;br /&gt;
{{Reflist}}&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Arti_Zirk_-_Syncly_MusicSync&amp;diff=98753</id>
		<title>Arti Zirk - Syncly MusicSync</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Arti_Zirk_-_Syncly_MusicSync&amp;diff=98753"/>
		<updated>2015-12-08T10:57:52Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: First edit&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Esitlus =&lt;br /&gt;
Esitluse slaidid on siin: http://slides.com/artizirk/musicsync&lt;br /&gt;
&lt;br /&gt;
= Syncly MusicSync =&lt;br /&gt;
[https://github.com/Syncly Syncly MusicSync] on minu Java&amp;lt;ref&amp;gt;[https://itcollege.ois.ee/et/subject/view?subject_id=51&amp;amp;year=2015 I200]&amp;lt;/ref&amp;gt; kodu töö.&lt;br /&gt;
Tegu on üsnagi &amp;lt;abbr title=&amp;quot;Keep It Simple Stupid&amp;quot;&amp;gt;KISS&amp;lt;/abbr&amp;gt; teenusega mis võimaldab kasutajal sünkroniseerida YouTube keskonnas olevaid playliste helifailidena enda telefoni.&lt;br /&gt;
&lt;br /&gt;
= Viited =&lt;br /&gt;
{{Reflist}}&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Arti_Zirk_-_Mina_ja_Linux&amp;diff=96550</id>
		<title>Arti Zirk - Mina ja Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Arti_Zirk_-_Mina_ja_Linux&amp;diff=96550"/>
		<updated>2015-11-05T14:12:10Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: /* Lõpuks ometi internet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Esitlus =&lt;br /&gt;
Esitluse slaidid asuvad siin [http://slides.com/artizirk/mina-ja-linux http://slides.com/artizirk/mina-ja-linux]&lt;br /&gt;
&lt;br /&gt;
= Linuxi ajalugu =&lt;br /&gt;
Linux nagu paljud teavad on 90ndate alguses Linus Trovaldsi poolt kirjutadud UNIXi laadne operatsioonisüsteemi tuum. &amp;lt;ref&amp;gt;[https://groups.google.com/forum/#!msg/comp.os.minix/dlNtH7RRrGA/SwRavCzVE7gJ comp.os.minix]&amp;lt;/ref&amp;gt;&lt;br /&gt;
Üsna koheselt peale Linuxi avalikustamist tekkis inimesi kes oma vabast ajast aitasid seda edasi arendada. Edasi tekkisid juba ka esimesed distrod nagu näiteks Slackware, Debian ja natuke hiljem ka juba firma poolt rahastatud Red Hat Linux mis pakendasid Linuxi koos lisa tarkvarga kokku ilusaks kasutaja sõbralikumaks pakiks.&lt;br /&gt;
&lt;br /&gt;
Enne aastatuhande vahetust jäi Linux Microsofti silmaringi tänu tema avatud lähtekoodile ja kiirele arengule mis hakkas konkurentsi pakkuma Microsofti toodetega. 1998 aastal lekkisid Halloweeni Dokumendid kirjeldavad kuidas FUD ei toimi eriti hästi vabatarkvara vastu &amp;lt;ref&amp;gt;[http://www.nytimes.com/library/tech/98/11/biztech/articles/03memo.html Internal Memo Shows Microsoft Executives&#039; Concern Over Free Software]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:AM03-2007.jpg|thumb|100px|Arvutimaailm 3/07]]&lt;br /&gt;
&lt;br /&gt;
Sellest hoolimata areneb linux täie hooga edasi ja 2004 aastal ilmub interneti avarustesse distro, mis on meile kõigile tänapäevani väga tuttav, nimega Ubuntu.&amp;lt;ref&amp;gt;[https://lists.ubuntu.com/archives/ubuntu-announce/2004-October/000003.html Ubuntu 4.10 avalikustamine]&amp;lt;/ref&amp;gt; Ubuntu on siiani üks kõige kasutajasõbralikumaid Linuxi distroid.&lt;br /&gt;
&lt;br /&gt;
= Sissejuhatus =&lt;br /&gt;
&lt;br /&gt;
Lugu sai alguse 2008 aasta kevadel. Istusin kooli raamatukogus vahetunni ajal ja lugesin seal olevaid ajakirju. Silma jäi seal üks 2007 aasta Arvutimaailma ajakiri, täpsemalt siis number 3/07 kus tollel hetkel tuvustati iga kuu mõnda operatsioooni. Antud ajakirjas siis räägiti Linuxist nimega Mandriva Linux.&amp;lt;ref&amp;gt;[http://www.am.ee/node/31 AM 3/07]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Esimene kokkupuude =&lt;br /&gt;
[[File:Mandriva2008-spring1.jpg|thumb|Mandriva Linux 2008 Spring - peale booti]]&lt;br /&gt;
Lugesin selle artikli seal Arvuti Maailmas paar korda läbi ning otsustasin ära proovid, et mis loom see siis on. Kohalikus Avalikus Interneti Punktis&amp;lt;ref&amp;gt;[http://raamatukogu.v-maarja.ee/index.php/aip Väike-Maarja Avalik Internetipunkt (AIP)]&amp;lt;/ref&amp;gt; sai siis iso usb pulga peale tõmmatud ning peale kooli kodus paar CD toorikut tuksi keeratud enne kui mu lauaarvuti kodus seda bootida lõpuks otsustas.&lt;br /&gt;
&lt;br /&gt;
Ja väga lahe oli, sest peale paari minutit ootamist oli täiesti töötav töölaud ees, kõik riistvara töötas, isegi see Zoltrix analog TV kaart&amp;lt;ref&amp;gt;[http://www.zoltrix.com/products/video/8MMZXGENIE.htm Zoltrix Genie TV]&amp;lt;/ref&amp;gt; mu arvutis töötas koheselt mis Windowsi all oli ilge pea valu, et tööle saada. Aga kuna ma ühtegi oma Windowsi mängu seal käima ei saanud ja failisüsteem nägi väga kahtlane välja (mis mõttes Program Files kausta pole, kus siis kõik programmid installidut on?). Installerit ma käima ei pannud kuigi niisama näppimis eesmärgil sai seda plaati veel hea mitu korda käima pandud ning kui ma seal midagi tuksi keerasin siis peale restarti oli kõik jälle uuesti korras.&lt;br /&gt;
&lt;br /&gt;
Panin selle sama Mandriva Linuxi hiljuti ka virtualmasinas käima ja [https://youtu.be/PBsBQfK5WsE tegin väikese video sellest]&lt;br /&gt;
&lt;br /&gt;
= Format C: =&lt;br /&gt;
Esialgu sai lihtsalt erinevaid Linuxi distroid CD plaadi pealt käima lastud ning neid siis LiveCD vormis tarbitud. Aga mingi hetk see tüütas ära, sest iga kord kui arvuti välja lülitasid kadusid kõik su seadistused ja peale käivitumist pidi siis jälle TV programmi ja teisi asju seadistama hakkama. Kuna Windows XP oli mul seal arvutis ka üsna ussitama hakkanud siis otsustasin üks nädalavahetus enda arvuti kõvaketta sisu CD plaatide peale kirjutada ning lihtsalt puhta Mandriva Linuxi peale panna.&lt;br /&gt;
&lt;br /&gt;
[[File:Visual-basic-raamat.jpg|200px|thumb| Väike-Maarja Õppekeskuse õpilase lõputööna valminud Visual Basic progemis raamat mille Arvuti õpetaja mulle andis]]&lt;br /&gt;
&lt;br /&gt;
Kahjuks aga Mandriva sinna HDD peale väga pikalt ei jäänud, paar päeva hiljem sai see juba Windowsiga uuesti asendatud sest igasugune tarkvara installimine tahtis interneti (mida mul kodus siis veel ei olnud), kogu see linuxi süsteem oli üldse väga kahtlane ja mufigi aru ei saanud ning windowsi peal sai vähemalt mänge mängida.&lt;br /&gt;
&lt;br /&gt;
= Progemis pisik =&lt;br /&gt;
&lt;br /&gt;
Järgmine aastajagu midagi eriti huvitavat ei juhtunudki, üsna tavaline reinstall tsükkel, installin mõne Linuxi distro peale, enamasti windowsi kõrvale,&lt;br /&gt;
näpin teda natuke, keeran midagi peeti või siis lihtsalt ei kasuta eriti kuna ilma interneti ühenduseta on linuxi all ilgelt jama tarkvara installida ja kolin windowsi peale tagasi täiega. Sammuti sai samal ajal 8. klassis arvuti tundides Exceli ja Wordi asemel programmeerimist õpitud. Täpsemalt siis Visual Basic 6.0. Ma ei mäletagi miks ma seda õppima hakkasin aga väga lahe oli neid ülessandeid teha. Päris lõpus sai isegi üks MS Paint kloon valmis kirjutatud igasuguste kellade ja viledega mille üle ma väga uhke olin.&lt;br /&gt;
&lt;br /&gt;
= Esimene server =&lt;br /&gt;
&lt;br /&gt;
8. klassi lõpu poole 2010 aasta alguses avastasin, et Ubuntu Server on üks selline distro mida on võimalik täiesti edukalt ühe vana Pentium 2 kasti peale panna ning siis veel CD plaadi pealt lisa serveri tarkvara installida nagu näiteks apache, mysql, php ja dhcp server, mis omakorda viis selleni, et pidin ära õppima mis asjad ip aadressid on ja kuidas arvuteid omavahel võrku ühendada ning kuidas putty abil enda ubuntu serverile ligi pääseda kui ip aadressid kõik paigas olid. PHP progemist ma väga teha ei jõudnud, sest probleemidele ja küsimustele vastuseid sain otsida tavaliselt alles järgmine päev peale kooli avalikust interneti punktist.&lt;br /&gt;
&lt;br /&gt;
= Lõpuks ometi internet =&lt;br /&gt;
[[File:Speedtest-esimese-neti-kiirus.png|thumb|Vägevad kiirused]]&lt;br /&gt;
&lt;br /&gt;
[[File:Arvtotekst.png|thumb|Screenshot pythoni koodi väljundist 2011 aasta veebruarist]]&lt;br /&gt;
&lt;br /&gt;
2010 aasta suvel sain endale uue telefoni, LG GT540. Peal jooksis tal Android 1.6 Donut. Sellel telefonil oli sisseehitatud 3G, mis küll mulle koju ei levinud aga 2G levi oli täiesti olemas ning üsna varsti leidsin ma ka ühe rakenduse nimega [http://pdanet.co/ PdaNet] mis võimaldas telefoni interneti arvutiga jagada. Ja see oli vägev tunne kui ma oma kodus arvutis sain browseri akna kirjutada http://www.google.com ja see laadis peale mõningat ootamis ära. Kiirused tänu ainult 2G levialas elamisele muidugi midagi erilist ei olnud. Mõni KB alla ja mõni KB üles.&lt;br /&gt;
&lt;br /&gt;
Nüüd tänu interneti olemasolule sain ma ka läbi windowsi arvuti netti jagada enda ubuntu serveri kastile ning sinna lõpuks installida tarkvara. Midagi väga palju ma installida ei saanud sest isegi väiksemate programmide alla laadimine võttis üüratult kaua aega ja pealegi andme mahtu mu telefoni sim kaardil ka väga palju ei olnud.&lt;br /&gt;
&lt;br /&gt;
Kuna enam ei pidanud ma interneti kasutamiseks AIP&#039;is istuma vaid sain seda kodus teha siis hakkasin üsna aktiivseks [http://www.digi.ee/foorum Digi] ajakirja foorumi kasutajaks ning tuttavaks mõningate inimestega kes olid sammuti arvutitest ning progemisest huvitatud. &lt;br /&gt;
&lt;br /&gt;
Nüüd siis internetis rohkem aega veetes avastasin enda jaoks programmeerimis keele Python, ning üsna kiirelt sain aru, Ubuntu all on palju mugavam koodi kirjutada kui windowsi all, vähemalt Pythoniga jamades tundus nii.&lt;br /&gt;
&lt;br /&gt;
= Lõpuks ometi korralik internet ja kodu.no-ip.org =&lt;br /&gt;
&lt;br /&gt;
2011 aasta suve alguses olid vanemad lõpuks ometi nõus maksma korraliku interneti ühenduse eest, või noh, nii korraliku kui meile sina metsade vahele levist, ehk siis pms ainult mobiilne internet ja seegi esialgu ainult 2G kiirustega, väikeste trikkitega sain ka 3G kätte.&lt;br /&gt;
&lt;br /&gt;
[[File:Kodu-server-mpd-web.PNG|thumb|Server kodu MPD veebiliides]]&lt;br /&gt;
[[File:IMG20110606 004.jpg|300px]][[File:Speedtest-kiirem-nett.png|Tele2 3G nett, 10kb/s ja 200kb/s kiirustel on ikka jõhker vahe vahel]]&lt;br /&gt;
&lt;br /&gt;
Igatahes, see kiiruse kasv välismaailmaga võimaldas nüüd juba palju lahedamaid asju enda serveri otsas jooksutada, nagu näiteks MPD Muusika server mida on võimalik juhtida LIRC infrapuna vastuvõtja või siis üle võrgu telefonist läbi veebi liidese&lt;br /&gt;
&lt;br /&gt;
Serveriks ise oli üks vana Compaq Deskpro Pentium 2 prose, kahe PATA ketta ja 128MB ramiga, mis pidas edukalt vastu kuni 2013 aastani&lt;br /&gt;
&lt;br /&gt;
[[File:Server-kodu.jpg|400px|Just enne tolmupuhastust]]&lt;br /&gt;
&lt;br /&gt;
Kuna Tele2 mobiilne internet ei ole Tele2 poolt tülemüüriga kinni pandud ja kasutajale jagatakse modemist avalik ip aadress kätte siis jooksis mul selle arvuti otsas ka esimene avalik veebileht koos domeeniga kodu.no-ip.org.&lt;br /&gt;
&lt;br /&gt;
= The awsomness of linux =&lt;br /&gt;
&lt;br /&gt;
Umbes 2012 jõudis kätte see aeg kus ma enam windowsi peaaegu üldse käima ei pannud. Polnud enam vajadust, kõik mis mul vaja oli töötas linuxi all, ta ei hangunud sedasi nagu windows ja mingit viiruste muret ka ei ole.&lt;br /&gt;
&lt;br /&gt;
Et siis Linuxiga saab kõike tehaja üldiselt kergemini kui windowsiga.&lt;br /&gt;
&lt;br /&gt;
tahad printeri pordi ühendatud lcd peal midagi kuvada, pole probleemi&lt;br /&gt;
&lt;br /&gt;
[[File:Lcd-tux.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
TV pulgida arvutist mängivat lugu vahetada, ühenda IR vastuvõtja helikaardi külge, confi lirc soft ja olemas&lt;br /&gt;
&lt;br /&gt;
[[File:Ir-vastuvõtja.png]] [[File:Ir-vasruvõtja-ja-pult.jpg|320px]]&lt;br /&gt;
&lt;br /&gt;
Hunnikus kõvakettaid arvuti sisse laduda ja nendest siis mingeid kahtlaseid raid leveleid teha, saab ikka&lt;br /&gt;
&lt;br /&gt;
[[File:Server-karu-ver2.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
Koolis antiikse läpaka peal mänge mängida, kui julged siis miks mitte&lt;br /&gt;
&lt;br /&gt;
[[File:Compaq-armada-e500.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
Targale kortermajale tarkvara kirjutamine, põhjaks tuleb ikka mingi linux.&lt;br /&gt;
&lt;br /&gt;
[[File:IMG 20120503 213418.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
DIY portable WiFi raadio. Ruuteril on USB pesa, muidugi esimese asjana tuleb sinna USB kõlarid järgi panna &lt;br /&gt;
&lt;br /&gt;
[[File:Diy-portable-wifi-radio.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Linuxiga saab põhimõtteliselt kõike teha&lt;br /&gt;
&lt;br /&gt;
[[File:Tux-on-a-robot.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
= Viited =&lt;br /&gt;
{{Reflist}}&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Arti_Zirk_-_Mina_ja_Linux&amp;diff=96547</id>
		<title>Arti Zirk - Mina ja Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Arti_Zirk_-_Mina_ja_Linux&amp;diff=96547"/>
		<updated>2015-11-05T14:10:18Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: /* The awsomness of linux */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Esitlus =&lt;br /&gt;
Esitluse slaidid asuvad siin [http://slides.com/artizirk/mina-ja-linux http://slides.com/artizirk/mina-ja-linux]&lt;br /&gt;
&lt;br /&gt;
= Linuxi ajalugu =&lt;br /&gt;
Linux nagu paljud teavad on 90ndate alguses Linus Trovaldsi poolt kirjutadud UNIXi laadne operatsioonisüsteemi tuum. &amp;lt;ref&amp;gt;[https://groups.google.com/forum/#!msg/comp.os.minix/dlNtH7RRrGA/SwRavCzVE7gJ comp.os.minix]&amp;lt;/ref&amp;gt;&lt;br /&gt;
Üsna koheselt peale Linuxi avalikustamist tekkis inimesi kes oma vabast ajast aitasid seda edasi arendada. Edasi tekkisid juba ka esimesed distrod nagu näiteks Slackware, Debian ja natuke hiljem ka juba firma poolt rahastatud Red Hat Linux mis pakendasid Linuxi koos lisa tarkvarga kokku ilusaks kasutaja sõbralikumaks pakiks.&lt;br /&gt;
&lt;br /&gt;
Enne aastatuhande vahetust jäi Linux Microsofti silmaringi tänu tema avatud lähtekoodile ja kiirele arengule mis hakkas konkurentsi pakkuma Microsofti toodetega. 1998 aastal lekkisid Halloweeni Dokumendid kirjeldavad kuidas FUD ei toimi eriti hästi vabatarkvara vastu &amp;lt;ref&amp;gt;[http://www.nytimes.com/library/tech/98/11/biztech/articles/03memo.html Internal Memo Shows Microsoft Executives&#039; Concern Over Free Software]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:AM03-2007.jpg|thumb|100px|Arvutimaailm 3/07]]&lt;br /&gt;
&lt;br /&gt;
Sellest hoolimata areneb linux täie hooga edasi ja 2004 aastal ilmub interneti avarustesse distro, mis on meile kõigile tänapäevani väga tuttav, nimega Ubuntu.&amp;lt;ref&amp;gt;[https://lists.ubuntu.com/archives/ubuntu-announce/2004-October/000003.html Ubuntu 4.10 avalikustamine]&amp;lt;/ref&amp;gt; Ubuntu on siiani üks kõige kasutajasõbralikumaid Linuxi distroid.&lt;br /&gt;
&lt;br /&gt;
= Sissejuhatus =&lt;br /&gt;
&lt;br /&gt;
Lugu sai alguse 2008 aasta kevadel. Istusin kooli raamatukogus vahetunni ajal ja lugesin seal olevaid ajakirju. Silma jäi seal üks 2007 aasta Arvutimaailma ajakiri, täpsemalt siis number 3/07 kus tollel hetkel tuvustati iga kuu mõnda operatsioooni. Antud ajakirjas siis räägiti Linuxist nimega Mandriva Linux.&amp;lt;ref&amp;gt;[http://www.am.ee/node/31 AM 3/07]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Esimene kokkupuude =&lt;br /&gt;
[[File:Mandriva2008-spring1.jpg|thumb|Mandriva Linux 2008 Spring - peale booti]]&lt;br /&gt;
Lugesin selle artikli seal Arvuti Maailmas paar korda läbi ning otsustasin ära proovid, et mis loom see siis on. Kohalikus Avalikus Interneti Punktis&amp;lt;ref&amp;gt;[http://raamatukogu.v-maarja.ee/index.php/aip Väike-Maarja Avalik Internetipunkt (AIP)]&amp;lt;/ref&amp;gt; sai siis iso usb pulga peale tõmmatud ning peale kooli kodus paar CD toorikut tuksi keeratud enne kui mu lauaarvuti kodus seda bootida lõpuks otsustas.&lt;br /&gt;
&lt;br /&gt;
Ja väga lahe oli, sest peale paari minutit ootamist oli täiesti töötav töölaud ees, kõik riistvara töötas, isegi see Zoltrix analog TV kaart&amp;lt;ref&amp;gt;[http://www.zoltrix.com/products/video/8MMZXGENIE.htm Zoltrix Genie TV]&amp;lt;/ref&amp;gt; mu arvutis töötas koheselt mis Windowsi all oli ilge pea valu, et tööle saada. Aga kuna ma ühtegi oma Windowsi mängu seal käima ei saanud ja failisüsteem nägi väga kahtlane välja (mis mõttes Program Files kausta pole, kus siis kõik programmid installidut on?). Installerit ma käima ei pannud kuigi niisama näppimis eesmärgil sai seda plaati veel hea mitu korda käima pandud ning kui ma seal midagi tuksi keerasin siis peale restarti oli kõik jälle uuesti korras.&lt;br /&gt;
&lt;br /&gt;
Panin selle sama Mandriva Linuxi hiljuti ka virtualmasinas käima ja [https://youtu.be/PBsBQfK5WsE tegin väikese video sellest]&lt;br /&gt;
&lt;br /&gt;
= Format C: =&lt;br /&gt;
Esialgu sai lihtsalt erinevaid Linuxi distroid CD plaadi pealt käima lastud ning neid siis LiveCD vormis tarbitud. Aga mingi hetk see tüütas ära, sest iga kord kui arvuti välja lülitasid kadusid kõik su seadistused ja peale käivitumist pidi siis jälle TV programmi ja teisi asju seadistama hakkama. Kuna Windows XP oli mul seal arvutis ka üsna ussitama hakkanud siis otsustasin üks nädalavahetus enda arvuti kõvaketta sisu CD plaatide peale kirjutada ning lihtsalt puhta Mandriva Linuxi peale panna.&lt;br /&gt;
&lt;br /&gt;
[[File:Visual-basic-raamat.jpg|200px|thumb| Väike-Maarja Õppekeskuse õpilase lõputööna valminud Visual Basic progemis raamat mille Arvuti õpetaja mulle andis]]&lt;br /&gt;
&lt;br /&gt;
Kahjuks aga Mandriva sinna HDD peale väga pikalt ei jäänud, paar päeva hiljem sai see juba Windowsiga uuesti asendatud sest igasugune tarkvara installimine tahtis interneti (mida mul kodus siis veel ei olnud), kogu see linuxi süsteem oli üldse väga kahtlane ja mufigi aru ei saanud ning windowsi peal sai vähemalt mänge mängida.&lt;br /&gt;
&lt;br /&gt;
= Progemis pisik =&lt;br /&gt;
&lt;br /&gt;
Järgmine aastajagu midagi eriti huvitavat ei juhtunudki, üsna tavaline reinstall tsükkel, installin mõne Linuxi distro peale, enamasti windowsi kõrvale,&lt;br /&gt;
näpin teda natuke, keeran midagi peeti või siis lihtsalt ei kasuta eriti kuna ilma interneti ühenduseta on linuxi all ilgelt jama tarkvara installida ja kolin windowsi peale tagasi täiega. Sammuti sai samal ajal 8. klassis arvuti tundides Exceli ja Wordi asemel programmeerimist õpitud. Täpsemalt siis Visual Basic 6.0. Ma ei mäletagi miks ma seda õppima hakkasin aga väga lahe oli neid ülessandeid teha. Päris lõpus sai isegi üks MS Paint kloon valmis kirjutatud igasuguste kellade ja viledega mille üle ma väga uhke olin.&lt;br /&gt;
&lt;br /&gt;
= Esimene server =&lt;br /&gt;
&lt;br /&gt;
8. klassi lõpu poole 2010 aasta alguses avastasin, et Ubuntu Server on üks selline distro mida on võimalik täiesti edukalt ühe vana Pentium 2 kasti peale panna ning siis veel CD plaadi pealt lisa serveri tarkvara installida nagu näiteks apache, mysql, php ja dhcp server, mis omakorda viis selleni, et pidin ära õppima mis asjad ip aadressid on ja kuidas arvuteid omavahel võrku ühendada ning kuidas putty abil enda ubuntu serverile ligi pääseda kui ip aadressid kõik paigas olid. PHP progemist ma väga teha ei jõudnud, sest probleemidele ja küsimustele vastuseid sain otsida tavaliselt alles järgmine päev peale kooli avalikust interneti punktist.&lt;br /&gt;
&lt;br /&gt;
= Lõpuks ometi internet =&lt;br /&gt;
[[File:Speedtest-esimese-neti-kiirus.png|thumb|Vägevad kiirused]]&lt;br /&gt;
&lt;br /&gt;
[[File:Arvtotekst.png|thumb|Screenshot pythoni koodi väljundist 2011 aasta veebruarist]]&lt;br /&gt;
&lt;br /&gt;
2010 aasta suvel sain endale uue telefoni, LG GT540. Peal jooksis tal Android 1.6 Donut. Sellel telefonil oli sisseehitatud 3G, mis küll mulle koju ei levinud aga 2G levi oli täiesti olemas ning üsna varsti leitsin ma ka ühe rakenduse nimega [http://pdanet.co/ PdaNet] mis võimaldas telefoni interneti arvutiga jagada. Ja see oli vägev tunne kui ma oma kodus arvutis sain browseri akna kirjutada http://www.google.com ja see laadis peale mõningat ootamis ära. Kiirused tänu ainult 2G levialas elamisele muidugi midagi erilist ei olnud. Mõni KB alla ja mõni KB üles.&lt;br /&gt;
&lt;br /&gt;
Nüüd tänu interneti olemasolule sain ma ka läbi windowsi arvuti netti jagada enda ubuntu serveri kastile ning sinna lõpuks installida tarkvara. Midagi väga palju ma installida ei saanud sest isegi väiksemate programmide alla laadimine võttis üüratult kaua aega ja pealegi andme mahtu mu telefoni sim kaardil ka väga palju ei olnud.&lt;br /&gt;
&lt;br /&gt;
Kuna enam ei pidanud ma interneti kasutamiseks AIP&#039;is istuma vaid sain seda kodus teha siis hakkasin üsna aktiivseks [http://www.digi.ee/foorum Digi] ajakirja foorumi kasutajaks ning tuttavaks mõningate inimestega kes olid sammuti arvutitest ning progemisest huvitatud. &lt;br /&gt;
&lt;br /&gt;
Nüüd siis internetis rohkem aega veetes avastasin enda jaoks programmeerimis keele Python, ning üsna kiirelt sain aru, Ubuntu all on palju mugavam koodi kirjutada kui windowsi all, vähemalt Pythoniga jamades tundus nii.&lt;br /&gt;
&lt;br /&gt;
= Lõpuks ometi korralik internet ja kodu.no-ip.org =&lt;br /&gt;
&lt;br /&gt;
2011 aasta suve alguses olid vanemad lõpuks ometi nõus maksma korraliku interneti ühenduse eest, või noh, nii korraliku kui meile sina metsade vahele levist, ehk siis pms ainult mobiilne internet ja seegi esialgu ainult 2G kiirustega, väikeste trikkitega sain ka 3G kätte.&lt;br /&gt;
&lt;br /&gt;
[[File:Kodu-server-mpd-web.PNG|thumb|Server kodu MPD veebiliides]]&lt;br /&gt;
[[File:IMG20110606 004.jpg|300px]][[File:Speedtest-kiirem-nett.png|Tele2 3G nett, 10kb/s ja 200kb/s kiirustel on ikka jõhker vahe vahel]]&lt;br /&gt;
&lt;br /&gt;
Igatahes, see kiiruse kasv välismaailmaga võimaldas nüüd juba palju lahedamaid asju enda serveri otsas jooksutada, nagu näiteks MPD Muusika server mida on võimalik juhtida LIRC infrapuna vastuvõtja või siis üle võrgu telefonist läbi veebi liidese&lt;br /&gt;
&lt;br /&gt;
Serveriks ise oli üks vana Compaq Deskpro Pentium 2 prose, kahe PATA ketta ja 128MB ramiga, mis pidas edukalt vastu kuni 2013 aastani&lt;br /&gt;
&lt;br /&gt;
[[File:Server-kodu.jpg|400px|Just enne tolmupuhastust]]&lt;br /&gt;
&lt;br /&gt;
Kuna Tele2 mobiilne internet ei ole Tele2 poolt tülemüüriga kinni pandud ja kasutajale jagatakse modemist avalik ip aadress kätte siis jooksis mul selle arvuti otsas ka esimene avalik veebileht koos domeeniga kodu.no-ip.org.&lt;br /&gt;
&lt;br /&gt;
= The awsomness of linux =&lt;br /&gt;
&lt;br /&gt;
Umbes 2012 jõudis kätte see aeg kus ma enam windowsi peaaegu üldse käima ei pannud. Polnud enam vajadust, kõik mis mul vaja oli töötas linuxi all, ta ei hangunud sedasi nagu windows ja mingit viiruste muret ka ei ole.&lt;br /&gt;
&lt;br /&gt;
Et siis Linuxiga saab kõike tehaja üldiselt kergemini kui windowsiga.&lt;br /&gt;
&lt;br /&gt;
tahad printeri pordi ühendatud lcd peal midagi kuvada, pole probleemi&lt;br /&gt;
&lt;br /&gt;
[[File:Lcd-tux.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
TV pulgida arvutist mängivat lugu vahetada, ühenda IR vastuvõtja helikaardi külge, confi lirc soft ja olemas&lt;br /&gt;
&lt;br /&gt;
[[File:Ir-vastuvõtja.png]] [[File:Ir-vasruvõtja-ja-pult.jpg|320px]]&lt;br /&gt;
&lt;br /&gt;
Hunnikus kõvakettaid arvuti sisse laduda ja nendest siis mingeid kahtlaseid raid leveleid teha, saab ikka&lt;br /&gt;
&lt;br /&gt;
[[File:Server-karu-ver2.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
Koolis antiikse läpaka peal mänge mängida, kui julged siis miks mitte&lt;br /&gt;
&lt;br /&gt;
[[File:Compaq-armada-e500.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
Targale kortermajale tarkvara kirjutamine, põhjaks tuleb ikka mingi linux.&lt;br /&gt;
&lt;br /&gt;
[[File:IMG 20120503 213418.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
DIY portable WiFi raadio. Ruuteril on USB pesa, muidugi esimese asjana tuleb sinna USB kõlarid järgi panna &lt;br /&gt;
&lt;br /&gt;
[[File:Diy-portable-wifi-radio.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Linuxiga saab põhimõtteliselt kõike teha&lt;br /&gt;
&lt;br /&gt;
[[File:Tux-on-a-robot.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
= Viited =&lt;br /&gt;
{{Reflist}}&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Arti_Zirk_-_Mina_ja_Linux&amp;diff=96546</id>
		<title>Arti Zirk - Mina ja Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Arti_Zirk_-_Mina_ja_Linux&amp;diff=96546"/>
		<updated>2015-11-05T14:07:58Z</updated>

		<summary type="html">&lt;p&gt;Arzirk: /* Lõppuks ometi korralik internet ja kodu.no-ip.org */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Esitlus =&lt;br /&gt;
Esitluse slaidid asuvad siin [http://slides.com/artizirk/mina-ja-linux http://slides.com/artizirk/mina-ja-linux]&lt;br /&gt;
&lt;br /&gt;
= Linuxi ajalugu =&lt;br /&gt;
Linux nagu paljud teavad on 90ndate alguses Linus Trovaldsi poolt kirjutadud UNIXi laadne operatsioonisüsteemi tuum. &amp;lt;ref&amp;gt;[https://groups.google.com/forum/#!msg/comp.os.minix/dlNtH7RRrGA/SwRavCzVE7gJ comp.os.minix]&amp;lt;/ref&amp;gt;&lt;br /&gt;
Üsna koheselt peale Linuxi avalikustamist tekkis inimesi kes oma vabast ajast aitasid seda edasi arendada. Edasi tekkisid juba ka esimesed distrod nagu näiteks Slackware, Debian ja natuke hiljem ka juba firma poolt rahastatud Red Hat Linux mis pakendasid Linuxi koos lisa tarkvarga kokku ilusaks kasutaja sõbralikumaks pakiks.&lt;br /&gt;
&lt;br /&gt;
Enne aastatuhande vahetust jäi Linux Microsofti silmaringi tänu tema avatud lähtekoodile ja kiirele arengule mis hakkas konkurentsi pakkuma Microsofti toodetega. 1998 aastal lekkisid Halloweeni Dokumendid kirjeldavad kuidas FUD ei toimi eriti hästi vabatarkvara vastu &amp;lt;ref&amp;gt;[http://www.nytimes.com/library/tech/98/11/biztech/articles/03memo.html Internal Memo Shows Microsoft Executives&#039; Concern Over Free Software]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:AM03-2007.jpg|thumb|100px|Arvutimaailm 3/07]]&lt;br /&gt;
&lt;br /&gt;
Sellest hoolimata areneb linux täie hooga edasi ja 2004 aastal ilmub interneti avarustesse distro, mis on meile kõigile tänapäevani väga tuttav, nimega Ubuntu.&amp;lt;ref&amp;gt;[https://lists.ubuntu.com/archives/ubuntu-announce/2004-October/000003.html Ubuntu 4.10 avalikustamine]&amp;lt;/ref&amp;gt; Ubuntu on siiani üks kõige kasutajasõbralikumaid Linuxi distroid.&lt;br /&gt;
&lt;br /&gt;
= Sissejuhatus =&lt;br /&gt;
&lt;br /&gt;
Lugu sai alguse 2008 aasta kevadel. Istusin kooli raamatukogus vahetunni ajal ja lugesin seal olevaid ajakirju. Silma jäi seal üks 2007 aasta Arvutimaailma ajakiri, täpsemalt siis number 3/07 kus tollel hetkel tuvustati iga kuu mõnda operatsioooni. Antud ajakirjas siis räägiti Linuxist nimega Mandriva Linux.&amp;lt;ref&amp;gt;[http://www.am.ee/node/31 AM 3/07]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Esimene kokkupuude =&lt;br /&gt;
[[File:Mandriva2008-spring1.jpg|thumb|Mandriva Linux 2008 Spring - peale booti]]&lt;br /&gt;
Lugesin selle artikli seal Arvuti Maailmas paar korda läbi ning otsustasin ära proovid, et mis loom see siis on. Kohalikus Avalikus Interneti Punktis&amp;lt;ref&amp;gt;[http://raamatukogu.v-maarja.ee/index.php/aip Väike-Maarja Avalik Internetipunkt (AIP)]&amp;lt;/ref&amp;gt; sai siis iso usb pulga peale tõmmatud ning peale kooli kodus paar CD toorikut tuksi keeratud enne kui mu lauaarvuti kodus seda bootida lõpuks otsustas.&lt;br /&gt;
&lt;br /&gt;
Ja väga lahe oli, sest peale paari minutit ootamist oli täiesti töötav töölaud ees, kõik riistvara töötas, isegi see Zoltrix analog TV kaart&amp;lt;ref&amp;gt;[http://www.zoltrix.com/products/video/8MMZXGENIE.htm Zoltrix Genie TV]&amp;lt;/ref&amp;gt; mu arvutis töötas koheselt mis Windowsi all oli ilge pea valu, et tööle saada. Aga kuna ma ühtegi oma Windowsi mängu seal käima ei saanud ja failisüsteem nägi väga kahtlane välja (mis mõttes Program Files kausta pole, kus siis kõik programmid installidut on?). Installerit ma käima ei pannud kuigi niisama näppimis eesmärgil sai seda plaati veel hea mitu korda käima pandud ning kui ma seal midagi tuksi keerasin siis peale restarti oli kõik jälle uuesti korras.&lt;br /&gt;
&lt;br /&gt;
Panin selle sama Mandriva Linuxi hiljuti ka virtualmasinas käima ja [https://youtu.be/PBsBQfK5WsE tegin väikese video sellest]&lt;br /&gt;
&lt;br /&gt;
= Format C: =&lt;br /&gt;
Esialgu sai lihtsalt erinevaid Linuxi distroid CD plaadi pealt käima lastud ning neid siis LiveCD vormis tarbitud. Aga mingi hetk see tüütas ära, sest iga kord kui arvuti välja lülitasid kadusid kõik su seadistused ja peale käivitumist pidi siis jälle TV programmi ja teisi asju seadistama hakkama. Kuna Windows XP oli mul seal arvutis ka üsna ussitama hakkanud siis otsustasin üks nädalavahetus enda arvuti kõvaketta sisu CD plaatide peale kirjutada ning lihtsalt puhta Mandriva Linuxi peale panna.&lt;br /&gt;
&lt;br /&gt;
[[File:Visual-basic-raamat.jpg|200px|thumb| Väike-Maarja Õppekeskuse õpilase lõputööna valminud Visual Basic progemis raamat mille Arvuti õpetaja mulle andis]]&lt;br /&gt;
&lt;br /&gt;
Kahjuks aga Mandriva sinna HDD peale väga pikalt ei jäänud, paar päeva hiljem sai see juba Windowsiga uuesti asendatud sest igasugune tarkvara installimine tahtis interneti (mida mul kodus siis veel ei olnud), kogu see linuxi süsteem oli üldse väga kahtlane ja mufigi aru ei saanud ning windowsi peal sai vähemalt mänge mängida.&lt;br /&gt;
&lt;br /&gt;
= Progemis pisik =&lt;br /&gt;
&lt;br /&gt;
Järgmine aastajagu midagi eriti huvitavat ei juhtunudki, üsna tavaline reinstall tsükkel, installin mõne Linuxi distro peale, enamasti windowsi kõrvale,&lt;br /&gt;
näpin teda natuke, keeran midagi peeti või siis lihtsalt ei kasuta eriti kuna ilma interneti ühenduseta on linuxi all ilgelt jama tarkvara installida ja kolin windowsi peale tagasi täiega. Sammuti sai samal ajal 8. klassis arvuti tundides Exceli ja Wordi asemel programmeerimist õpitud. Täpsemalt siis Visual Basic 6.0. Ma ei mäletagi miks ma seda õppima hakkasin aga väga lahe oli neid ülessandeid teha. Päris lõpus sai isegi üks MS Paint kloon valmis kirjutatud igasuguste kellade ja viledega mille üle ma väga uhke olin.&lt;br /&gt;
&lt;br /&gt;
= Esimene server =&lt;br /&gt;
&lt;br /&gt;
8. klassi lõpu poole 2010 aasta alguses avastasin, et Ubuntu Server on üks selline distro mida on võimalik täiesti edukalt ühe vana Pentium 2 kasti peale panna ning siis veel CD plaadi pealt lisa serveri tarkvara installida nagu näiteks apache, mysql, php ja dhcp server, mis omakorda viis selleni, et pidin ära õppima mis asjad ip aadressid on ja kuidas arvuteid omavahel võrku ühendada ning kuidas putty abil enda ubuntu serverile ligi pääseda kui ip aadressid kõik paigas olid. PHP progemist ma väga teha ei jõudnud, sest probleemidele ja küsimustele vastuseid sain otsida tavaliselt alles järgmine päev peale kooli avalikust interneti punktist.&lt;br /&gt;
&lt;br /&gt;
= Lõpuks ometi internet =&lt;br /&gt;
[[File:Speedtest-esimese-neti-kiirus.png|thumb|Vägevad kiirused]]&lt;br /&gt;
&lt;br /&gt;
[[File:Arvtotekst.png|thumb|Screenshot pythoni koodi väljundist 2011 aasta veebruarist]]&lt;br /&gt;
&lt;br /&gt;
2010 aasta suvel sain endale uue telefoni, LG GT540. Peal jooksis tal Android 1.6 Donut. Sellel telefonil oli sisseehitatud 3G, mis küll mulle koju ei levinud aga 2G levi oli täiesti olemas ning üsna varsti leitsin ma ka ühe rakenduse nimega [http://pdanet.co/ PdaNet] mis võimaldas telefoni interneti arvutiga jagada. Ja see oli vägev tunne kui ma oma kodus arvutis sain browseri akna kirjutada http://www.google.com ja see laadis peale mõningat ootamis ära. Kiirused tänu ainult 2G levialas elamisele muidugi midagi erilist ei olnud. Mõni KB alla ja mõni KB üles.&lt;br /&gt;
&lt;br /&gt;
Nüüd tänu interneti olemasolule sain ma ka läbi windowsi arvuti netti jagada enda ubuntu serveri kastile ning sinna lõpuks installida tarkvara. Midagi väga palju ma installida ei saanud sest isegi väiksemate programmide alla laadimine võttis üüratult kaua aega ja pealegi andme mahtu mu telefoni sim kaardil ka väga palju ei olnud.&lt;br /&gt;
&lt;br /&gt;
Kuna enam ei pidanud ma interneti kasutamiseks AIP&#039;is istuma vaid sain seda kodus teha siis hakkasin üsna aktiivseks [http://www.digi.ee/foorum Digi] ajakirja foorumi kasutajaks ning tuttavaks mõningate inimestega kes olid sammuti arvutitest ning progemisest huvitatud. &lt;br /&gt;
&lt;br /&gt;
Nüüd siis internetis rohkem aega veetes avastasin enda jaoks programmeerimis keele Python, ning üsna kiirelt sain aru, Ubuntu all on palju mugavam koodi kirjutada kui windowsi all, vähemalt Pythoniga jamades tundus nii.&lt;br /&gt;
&lt;br /&gt;
= Lõpuks ometi korralik internet ja kodu.no-ip.org =&lt;br /&gt;
&lt;br /&gt;
2011 aasta suve alguses olid vanemad lõpuks ometi nõus maksma korraliku interneti ühenduse eest, või noh, nii korraliku kui meile sina metsade vahele levist, ehk siis pms ainult mobiilne internet ja seegi esialgu ainult 2G kiirustega, väikeste trikkitega sain ka 3G kätte.&lt;br /&gt;
&lt;br /&gt;
[[File:Kodu-server-mpd-web.PNG|thumb|Server kodu MPD veebiliides]]&lt;br /&gt;
[[File:IMG20110606 004.jpg|300px]][[File:Speedtest-kiirem-nett.png|Tele2 3G nett, 10kb/s ja 200kb/s kiirustel on ikka jõhker vahe vahel]]&lt;br /&gt;
&lt;br /&gt;
Igatahes, see kiiruse kasv välismaailmaga võimaldas nüüd juba palju lahedamaid asju enda serveri otsas jooksutada, nagu näiteks MPD Muusika server mida on võimalik juhtida LIRC infrapuna vastuvõtja või siis üle võrgu telefonist läbi veebi liidese&lt;br /&gt;
&lt;br /&gt;
Serveriks ise oli üks vana Compaq Deskpro Pentium 2 prose, kahe PATA ketta ja 128MB ramiga, mis pidas edukalt vastu kuni 2013 aastani&lt;br /&gt;
&lt;br /&gt;
[[File:Server-kodu.jpg|400px|Just enne tolmupuhastust]]&lt;br /&gt;
&lt;br /&gt;
Kuna Tele2 mobiilne internet ei ole Tele2 poolt tülemüüriga kinni pandud ja kasutajale jagatakse modemist avalik ip aadress kätte siis jooksis mul selle arvuti otsas ka esimene avalik veebileht koos domeeniga kodu.no-ip.org.&lt;br /&gt;
&lt;br /&gt;
= The awsomness of linux =&lt;br /&gt;
&lt;br /&gt;
Umbes 2012 jõudis kätte see aeg kus ma enam windowsi peaaegu üldse käima ei pannud. Polnud enam vajadust, kõik mis mul vaja oli töötas linuxi all, ta ei hangunud sedasi nagu windows ja mingit viiruste muret ka ei ole.&lt;br /&gt;
&lt;br /&gt;
Et siis Linuxiga saab kõike tehaja üldiselt kergemini kui windowsiga.&lt;br /&gt;
&lt;br /&gt;
tahad printeri pordi ühendatud lcd peal midagi kuvada, pole probleemi&lt;br /&gt;
&lt;br /&gt;
[[File:Lcd-tux.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
TV pulgida arvutist mängivat lugu vahetada, ühenda IR vastuvõtja helikaardi külge, confi lirc soft ja olemas&lt;br /&gt;
&lt;br /&gt;
[[File:Ir-vastuvõtja.png]] [[File:Ir-vasruvõtja-ja-pult.jpg|320px]]&lt;br /&gt;
&lt;br /&gt;
Hunnikus kõvakettaid arvuti sisse laduda ja nendest siis mingeid kahtlaseid raid leveleid teha, saab ikka&lt;br /&gt;
&lt;br /&gt;
[[File:Server-karu-ver2.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
Koolis antiikse läpaka peal mänge mängida, kui julged siis miks mitte&lt;br /&gt;
&lt;br /&gt;
[[File:Compaq-armada-e500.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
Targale kortermajale tarkvara kirjutamine, põhjaks tuleb ikka mingi linux.&lt;br /&gt;
&lt;br /&gt;
[[File:IMG 20120503 213418.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
DIY portable WiFi raadio. Ruuteril on USB peas, muidugi esimese asjana tuleb sinna USB kõlarid järgi panna &lt;br /&gt;
&lt;br /&gt;
[[File:Diy-portable-wifi-radio.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Linuxiga saab põhimõtteliselt kõike teha&lt;br /&gt;
&lt;br /&gt;
[[File:Tux-on-a-robot.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
= Viited =&lt;br /&gt;
{{Reflist}}&lt;/div&gt;</summary>
		<author><name>Arzirk</name></author>
	</entry>
</feed>