<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="et">
	<id>http://www.lambda.ee/w/index.php?action=history&amp;feed=atom&amp;title=ITV0110_3._t%C3%B6%C3%B6_2015%3A_Serverirakendus%3A_cgi_pythonis</id>
	<title>ITV0110 3. töö 2015: Serverirakendus: cgi pythonis - Redigeerimiste ajalugu</title>
	<link rel="self" type="application/atom+xml" href="http://www.lambda.ee/w/index.php?action=history&amp;feed=atom&amp;title=ITV0110_3._t%C3%B6%C3%B6_2015%3A_Serverirakendus%3A_cgi_pythonis"/>
	<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=ITV0110_3._t%C3%B6%C3%B6_2015:_Serverirakendus:_cgi_pythonis&amp;action=history"/>
	<updated>2026-11-11T07:21:45Z</updated>
	<subtitle>Selle lehekülje redigeerimiste ajalugu</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>http://www.lambda.ee/w/index.php?title=ITV0110_3._t%C3%B6%C3%B6_2015:_Serverirakendus:_cgi_pythonis&amp;diff=12834&amp;oldid=prev</id>
		<title>Tammet: /* NB! */</title>
		<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=ITV0110_3._t%C3%B6%C3%B6_2015:_Serverirakendus:_cgi_pythonis&amp;diff=12834&amp;oldid=prev"/>
		<updated>2015-11-07T07:37:03Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;NB!&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;et&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←Vanem redaktsioon&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Redaktsioon: 7. november 2015, kell 09:37&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l4&quot;&gt;4. rida:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;4. rida:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;NB!&amp;lt;/font&amp;gt; ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;NB!&amp;lt;/font&amp;gt; ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Kui sul on probleeme serveris pythoni programmide käimasaamisega, siis loe siit lõpust peatükki &quot;Põhiprobleemid&quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* Uuri siit lehelt altpoolt Rogeri chati-näiteprogrammi: see annab ideid praksi kahe-mängija variandi tegemiseks ja demob jquery kasutamist ajaxi päringute tegemiseks.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* &lt;/ins&gt;Kui sul on probleeme serveris pythoni programmide käimasaamisega, siis loe siit lõpust peatükki &quot;Põhiprobleemid&quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Mis tuleb teha ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Mis tuleb teha ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key lambdadb:diff:1.41:old-12833:rev-12834:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Tammet</name></author>
	</entry>
	<entry>
		<id>http://www.lambda.ee/w/index.php?title=ITV0110_3._t%C3%B6%C3%B6_2015:_Serverirakendus:_cgi_pythonis&amp;diff=12833&amp;oldid=prev</id>
		<title>Tammet – 7. november 2015, kell 07:35</title>
		<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=ITV0110_3._t%C3%B6%C3%B6_2015:_Serverirakendus:_cgi_pythonis&amp;diff=12833&amp;oldid=prev"/>
		<updated>2015-11-07T07:35:35Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;et&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←Vanem redaktsioon&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Redaktsioon: 7. november 2015, kell 09:35&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l290&quot;&gt;290. rida:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;290. rida:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Loe seotud tehnoloogiatest: [http://en.wikipedia.org/wiki/Ajax_%28programming%29 wikipedia ajax], [http://en.wikipedia.org/wiki/XMLHttpRequest wikipedia xmlhttprequest], [http://en.wikipedia.org/wiki/JSON wikipedia json]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Loe seotud tehnoloogiatest: [http://en.wikipedia.org/wiki/Ajax_%28programming%29 wikipedia ajax], [http://en.wikipedia.org/wiki/XMLHttpRequest wikipedia xmlhttprequest], [http://en.wikipedia.org/wiki/JSON wikipedia json]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[xmlhttprequest ja jsonile rakendatud eval näited]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[xmlhttprequest ja jsonile rakendatud eval näited]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;=== Näide: rogeri chatiprogramm ===&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Vaata [[Pilt:Python_simple_chat.zip|Rogeri chati-näidet]] mis on hea algusnäide kahe mängija vahelise laevade pommitamise ehitamiseks ja jquery teegi kasutuse uurimiseks. Rogeri näide kasutab ajaxi päringute tegemiseks jquery-t.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Põhiprobleemid =&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Põhiprobleemid =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Tammet</name></author>
	</entry>
	<entry>
		<id>http://www.lambda.ee/w/index.php?title=ITV0110_3._t%C3%B6%C3%B6_2015:_Serverirakendus:_cgi_pythonis&amp;diff=12773&amp;oldid=prev</id>
		<title>Tammet: /* Kasulikud Pythoni näitejupid cgi jaoks */</title>
		<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=ITV0110_3._t%C3%B6%C3%B6_2015:_Serverirakendus:_cgi_pythonis&amp;diff=12773&amp;oldid=prev"/>
		<updated>2015-10-15T09:11:30Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Kasulikud Pythoni näitejupid cgi jaoks&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;et&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←Vanem redaktsioon&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Redaktsioon: 15. oktoober 2015, kell 11:11&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l139&quot;&gt;139. rida:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;139. rida:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Kasulikud Pythoni näitejupid cgi jaoks ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Kasulikud Pythoni näitejupid cgi jaoks ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Alustustuseks tutvu [[Cgi_examples cgi näidetega]].&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Alustustuseks tutvu [[Cgi_examples&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|&lt;/ins&gt;cgi näidetega]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Siis &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;vaata kindlasti&amp;lt;/font&amp;gt; [[Kasulikke pythoni näitejuppe cgi jaoks]]. Nendes näidetes toodud konstruktsioonidest ja funktsioonidest peaks kolmanda praksi jaoks piisama.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Siis &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;vaata kindlasti&amp;lt;/font&amp;gt; [[Kasulikke pythoni näitejuppe cgi jaoks]]. Nendes näidetes toodud konstruktsioonidest ja funktsioonidest peaks kolmanda praksi jaoks piisama.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Tammet</name></author>
	</entry>
	<entry>
		<id>http://www.lambda.ee/w/index.php?title=ITV0110_3._t%C3%B6%C3%B6_2015:_Serverirakendus:_cgi_pythonis&amp;diff=12772&amp;oldid=prev</id>
		<title>Tammet: /* Kasulikud Pythoni näitejupid cgi jaoks */</title>
		<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=ITV0110_3._t%C3%B6%C3%B6_2015:_Serverirakendus:_cgi_pythonis&amp;diff=12772&amp;oldid=prev"/>
		<updated>2015-10-15T09:11:17Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Kasulikud Pythoni näitejupid cgi jaoks&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;et&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←Vanem redaktsioon&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Redaktsioon: 15. oktoober 2015, kell 11:11&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l139&quot;&gt;139. rida:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;139. rida:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Kasulikud Pythoni näitejupid cgi jaoks ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Kasulikud Pythoni näitejupid cgi jaoks ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;font color=&quot;red&quot;&amp;gt;Vaata kindlasti&amp;lt;/font&amp;gt; &lt;/del&gt;[[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Kasulikke pythoni näitejuppe &lt;/del&gt;cgi &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;jaoks&lt;/del&gt;]]&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;. Nendes näidetes toodud konstruktsioonidest ja funktsioonidest peaks kolmanda praksi jaoks piisama&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Alustustuseks tutvu &lt;/ins&gt;[[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Cgi_examples &lt;/ins&gt;cgi &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;näidetega&lt;/ins&gt;]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Siis &amp;lt;font color=&quot;red&quot;&amp;gt;vaata kindlasti&amp;lt;/font&amp;gt; [[Kasulikke pythoni näitejuppe cgi jaoks]]. Nendes näidetes toodud konstruktsioonidest ja funktsioonidest peaks kolmanda praksi jaoks piisama.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Python + CGI ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Python + CGI ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Tammet</name></author>
	</entry>
	<entry>
		<id>http://www.lambda.ee/w/index.php?title=ITV0110_3._t%C3%B6%C3%B6_2015:_Serverirakendus:_cgi_pythonis&amp;diff=12763&amp;oldid=prev</id>
		<title>Tammet: /* Mis tuleb teha */</title>
		<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=ITV0110_3._t%C3%B6%C3%B6_2015:_Serverirakendus:_cgi_pythonis&amp;diff=12763&amp;oldid=prev"/>
		<updated>2015-10-15T08:34:42Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Mis tuleb teha&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;et&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←Vanem redaktsioon&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Redaktsioon: 15. oktoober 2015, kell 10:34&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l14&quot;&gt;14. rida:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;14. rida:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Teise inimese vastu, kus samuti tuleks iga mängu tulemused serverisse salvestada.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Teise inimese vastu, kus samuti tuleks iga mängu tulemused serverisse salvestada.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Pane tähele, et selles praktikumis on kõigi ülesannete realiseerimiseks vajalik koodihulk küllalt väike, samas nõuab tõsist pingutust välja mõelda, kuidas kõiki asju täpselt teha ja esitada ja kuidas nad omavahel kokku käivad.  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Pane tähele, et selles praktikumis on kõigi ülesannete realiseerimiseks vajalik koodihulk küllalt väike, samas nõuab tõsist pingutust välja mõelda, kuidas kõiki asju täpselt teha ja esitada ja kuidas nad omavahel kokku käivad&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;. Esimene, kohustuslik pool on palju lihtsam, kui teine, mittekohustuslik pool&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Hakka teise inimese vastu mängu tegema alles peale seda, kui üksi masina vastu mängimine on valmis.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Hakka teise inimese vastu mängu tegema alles peale seda, kui üksi masina vastu mängimine on valmis.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Tammet</name></author>
	</entry>
	<entry>
		<id>http://www.lambda.ee/w/index.php?title=ITV0110_3._t%C3%B6%C3%B6_2015:_Serverirakendus:_cgi_pythonis&amp;diff=12762&amp;oldid=prev</id>
		<title>Tammet – 15. oktoober 2015, kell 08:33</title>
		<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=ITV0110_3._t%C3%B6%C3%B6_2015:_Serverirakendus:_cgi_pythonis&amp;diff=12762&amp;oldid=prev"/>
		<updated>2015-10-15T08:33:44Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;et&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←Vanem redaktsioon&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Redaktsioon: 15. oktoober 2015, kell 10:33&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l93&quot;&gt;93. rida:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;93. rida:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Dijktra serverisse ligipääsu, failide laadimise ja linuxi käsureaga hakkamasaamise kohta loe pikemalt &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;..&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Dijktra serverisse ligipääsu, failide laadimise ja linuxi käsureaga hakkamasaamise kohta loe pikemalt &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Dijkstra server|dijkstra serveri kasutamise õpetust]]&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Oma programmid pane kataloogi &amp;lt;b&amp;gt;public_html/cgi-bin/prax3&amp;lt;/b&amp;gt; . Kõigepealt pead selle kataloogi tegema ja talle grupile ligipääsuõiguse andma, analoogiliselt teise praktikumiga.  Mujale pandud programme Apache käima ei pane.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Oma programmid pane kataloogi &amp;lt;b&amp;gt;public_html/cgi-bin/prax3&amp;lt;/b&amp;gt; . Kõigepealt pead selle kataloogi tegema ja talle grupile ligipääsuõiguse andma, analoogiliselt teise praktikumiga.  Mujale pandud programme Apache käima ei pane.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l308&quot;&gt;308. rida:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;308. rida:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;b&amp;gt;a) Debugimiseks on vaja serverisse sisse logida ja käsurealt programm käima panna.&amp;lt;/b&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;b&amp;gt;a) Debugimiseks on vaja serverisse sisse logida ja käsurealt programm käima panna.&amp;lt;/b&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Sisse logimiseks loe &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;...  &lt;/del&gt;Dijkstra serveri &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;kasutusõpetust&lt;/del&gt;. Käimapanekuks:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Sisse logimiseks loe &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[&lt;/ins&gt;Dijkstra &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;server|dijkstra &lt;/ins&gt;serveri &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;kasutamise õpetust]]&lt;/ins&gt;. Käimapanekuks:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;    cd public_html/cgi-bin&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;    cd public_html/cgi-bin&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Tammet</name></author>
	</entry>
	<entry>
		<id>http://www.lambda.ee/w/index.php?title=ITV0110_3._t%C3%B6%C3%B6_2015:_Serverirakendus:_cgi_pythonis&amp;diff=12761&amp;oldid=prev</id>
		<title>Tammet: /* Eelmiste aastate versioonid */</title>
		<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=ITV0110_3._t%C3%B6%C3%B6_2015:_Serverirakendus:_cgi_pythonis&amp;diff=12761&amp;oldid=prev"/>
		<updated>2015-10-15T08:32:10Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Eelmiste aastate versioonid&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;et&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←Vanem redaktsioon&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Redaktsioon: 15. oktoober 2015, kell 10:32&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l437&quot;&gt;437. rida:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;437. rida:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Eelmiste aastate versioonid =&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= Eelmiste aastate versioonid =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Eelmiste aastate versiooni, mis on mitmes osas sarnased, kuid &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;mitmes osas &lt;/del&gt;erinevad: [[ITV0110 3. töö: Serverirakendus: cgi pythonis|2013 aasta]]  [[ITV0110 3. töö 2012: Lihtne serverirakendus: vormid ja cgi| 2012 aasta]] &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ja&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Eelmiste aastate versiooni, mis on mitmes osas sarnased, kuid &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;siiski veidi &lt;/ins&gt;erinevad: &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[ITV0110 3. töö 2014: Serverirakendus: cgi pythonis|2014 aasta]], &lt;/ins&gt;[[ITV0110 3. töö: Serverirakendus: cgi pythonis|2013 aasta]]&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, &lt;/ins&gt; [[ITV0110 3. töö 2012: Lihtne serverirakendus: vormid ja cgi| 2012 aasta]]&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;,&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[ITV0110 3. töö: Lihtne serverirakendus: vormid ja cgi| 2011 aasta]].&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[ITV0110 3. töö: Lihtne serverirakendus: vormid ja cgi| 2011 aasta]].  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;!--&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;!--&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[mikromemo]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[mikromemo]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Tammet</name></author>
	</entry>
	<entry>
		<id>http://www.lambda.ee/w/index.php?title=ITV0110_3._t%C3%B6%C3%B6_2015:_Serverirakendus:_cgi_pythonis&amp;diff=12760&amp;oldid=prev</id>
		<title>Tammet: Uus lehekülg: &#039;Python   == &lt;font color=&quot;red&quot;&gt;NB!&lt;/font&gt; ==  Kui sul on probleeme serveris pythoni programmide käimasaamisega, siis loe siit lõpust peatükki &quot;Põ...&#039;</title>
		<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=ITV0110_3._t%C3%B6%C3%B6_2015:_Serverirakendus:_cgi_pythonis&amp;diff=12760&amp;oldid=prev"/>
		<updated>2015-10-15T08:28:49Z</updated>

		<summary type="html">&lt;p&gt;Uus lehekülg: &amp;#039;&lt;a href=&quot;/wiki/Fail:Python_logo.jpg&quot; title=&quot;Fail:Python logo.jpg&quot;&gt;left|Python&lt;/a&gt;   == &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;NB!&amp;lt;/font&amp;gt; ==  Kui sul on probleeme serveris pythoni programmide käimasaamisega, siis loe siit lõpust peatükki &amp;quot;Põ...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Uus lehekülg&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Pilt:Python_logo.jpg|left|Python]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;NB!&amp;lt;/font&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
Kui sul on probleeme serveris pythoni programmide käimasaamisega, siis loe siit lõpust peatükki &amp;quot;Põhiprobleemid&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Mis tuleb teha ==&lt;br /&gt;
&lt;br /&gt;
Sinu ülesandeks on ehitada veebisüsteem, mille kaudu saab teises praksis realiseeritud &amp;lt;b&amp;gt;laevade pommitamist üle võrgu mängida&amp;lt;/b&amp;gt;, ehk siis teise praktikumi teema edasiarendus veebirakendusena.&lt;br /&gt;
&lt;br /&gt;
Mängida peab saama kahel viisil, kusjuures esimene variant on kõigile kohustuslik ja annab 6 punkti, teine ei ole kohustuslik ja annab lisaks 6 punkti.&lt;br /&gt;
* Üksi, kuid sedakorda tuleb mängu tulemus - punktid ja mänguaeg - iga kord salvestada serverisse ning serverisse kogunev tulemuste tabel tuleb kasutajale otsitaval/sorditaval viisil välja kuvada.&lt;br /&gt;
* Teise inimese vastu, kus samuti tuleks iga mängu tulemused serverisse salvestada.&lt;br /&gt;
&lt;br /&gt;
Pane tähele, et selles praktikumis on kõigi ülesannete realiseerimiseks vajalik koodihulk küllalt väike, samas nõuab tõsist pingutust välja mõelda, kuidas kõiki asju täpselt teha ja esitada ja kuidas nad omavahel kokku käivad. &lt;br /&gt;
&lt;br /&gt;
Hakka teise inimese vastu mängu tegema alles peale seda, kui üksi masina vastu mängimine on valmis.&lt;br /&gt;
&lt;br /&gt;
== Kuidas serverisse tulemusi salvestada ja sealt kuvada ==&lt;br /&gt;
&lt;br /&gt;
Serverisse andmete salvestamiseks kirjuta nad faili.&lt;br /&gt;
&lt;br /&gt;
Kõigi mängude korral on vaja faili salvestada ka inimese nimi, kes mängis, samuti - kui on vastane - siis vastase nimi. Seega on mängu alustades vaja vormilt sisestada oma nimi, mis siis serveris mängufaili kirjutatakse ja mis mängu ajal ära ei muutu. Nime võib kasutaja valida vabalt, paroole, autentimist jne jne ei ole vaja teha (kuid ei ole ka otse keelatud, peaasi, et sa ei ehitaks seda enne, kui kõik muu valmis).&lt;br /&gt;
&lt;br /&gt;
Mängude kuvamiseks peab sinu pommitamise põhilehel olema link &amp;quot;kõik mängud&amp;quot;, kuhu vajutades lähed mängude vaatamise lehele.&lt;br /&gt;
&lt;br /&gt;
Mängude kuvamine on vaja teha nii, et saad sisestada (või boksist valida), kelle mänge ja mis vastasega tahad vaadata (üksi või konkreetse inimese vastu), ja siis kuvatakse ainult need. Ei ole keelatud lisaks ka kõigi mängude kuvamine ja muud täiendused.&lt;br /&gt;
&lt;br /&gt;
Mängude kuvamisel võiksid olla sellised tulbad:&lt;br /&gt;
&lt;br /&gt;
* mängu alustamise kuupäev/aeg &lt;br /&gt;
* mängija 1 nimi&lt;br /&gt;
* mängija 2 nimi: arvutiga mängides jäta see ära&lt;br /&gt;
* mängija 1 punktid: kui palju laevu puruks pommitati&lt;br /&gt;
* mängija 2 punktid: kui palju laevu puruks pommitati&lt;br /&gt;
* mänguaeg sekundites&lt;br /&gt;
&lt;br /&gt;
Mängude sorteerimine on vaja teha nii, et saad tulba pealkirjale vajutada, ning server sorteerib tulemused selle tulba järgi.&lt;br /&gt;
&lt;br /&gt;
Kogu filtreerimine ja sorteerimine tuleb teha serveris, mitte brauseris.&lt;br /&gt;
&lt;br /&gt;
Selles osas on soovitav kasutada harilikku cgi protokolli, mitte ajaxit: samas ei ole ajax siin ka otseselt keelatud.&lt;br /&gt;
&lt;br /&gt;
Laua genereerimise võid teha brauseris, nagu teises praktikumis, aga võid teha ka serveris. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mismoodi käib teise inimese vastu mängimine ==&lt;br /&gt;
&lt;br /&gt;
Teise mängija vastu mängimiseks on vaja teha järgmisi asju:&lt;br /&gt;
* Pead saama kuulutada välja, et soovid mängida (ehk, serveris kuulutuste faili tegema ja sinna inforea lisama). &lt;br /&gt;
* Pead saama vaadata, kes soovivad mängida ja valida neid mängu.&lt;br /&gt;
* Kui annad mängukorra üle, siis server peab sinu tegevuse (et kuhu pommitasid) serverisse mängufaili talletama. Vastane ei tee seni midagi.&lt;br /&gt;
* Vastase brauser käib siis kogu aeg serverist ise uurimas, et kas on juba tema mängukord.&lt;br /&gt;
* Kui jah, siis algab tema oma mängukorraga ja kogu tsükkel käivitub uuesti.&lt;br /&gt;
&lt;br /&gt;
Teise mängija vastu mängimise tehnoloogia peab baseeruma ajaxil ehk serveriga andmevahetusel otse javascriptist (vt selle praksi lehe lõpuosa).&lt;br /&gt;
&lt;br /&gt;
Üksikuid pommitamisi ei ole tingimata vaja serveris salvestada ja teisele mängijale kuvada: piisab pommitamise lõpptulemusest enne mängukorra üleandmist. Samas ei ole keelatud ka iga ükskiku pommitamise salvestamine. Vali ise, kumba varianti eelistad kasutada.&lt;br /&gt;
&lt;br /&gt;
== Praktikumi arvestamine ja hindamine ==&lt;br /&gt;
&lt;br /&gt;
Praktikum annab maksimaalselt 12 punkti.&lt;br /&gt;
&lt;br /&gt;
Esimene osa (üksi mängides mängude salvestamine serverisse ja seni mängitud mängude tulemuste kuvamine)&lt;br /&gt;
on kohustuslik osa praktikumist ja nende korralik realiseerimine annab 6 punkti. Praktikumi&lt;br /&gt;
ei arvestata, kui selles osas on suuremad puudujäägid. &lt;br /&gt;
&lt;br /&gt;
Omavahelise mängu realiseerimine (teine osa praksist) annab lisaks kuni 6 punkti ja ei ole kohustuslik.&lt;br /&gt;
&lt;br /&gt;
Pane tähele, et selles praktikumis on kõigi ülesannete realiseerimiseks vajalik koodihulk väike, samas nõuab tõsist pingutust välja mõelda, kuidas kõiki asju täpselt teha ja esitada ja kuidas nad omavahel kokku käivad. &lt;br /&gt;
&lt;br /&gt;
== Tehnoloogilised nõuded ==&lt;br /&gt;
&lt;br /&gt;
* Kõik serverirakendused tuleb realiseerida [http://www.python.org/ Pythonis].&lt;br /&gt;
* Rakendus peab olema võrgus vabalt brauseriga ligipääsetav prax3 kataloogis, mitte lihtsalt töötama näiteks sinu laptopis.&lt;br /&gt;
* Serverarvutina tuleb kasutada dijkstrat, rakenduse failid tuleb kopeerida kataloogidesse public_html/prax3 ja public_html/cgi-bin/prax3&lt;br /&gt;
* Serveris tuleb infot hoida ühes või mitmes mängutulemuste failis.&lt;br /&gt;
* Kasutada tuleb nimelt lihtsaid inimloetavaid faile, andmebaasimootoreid kasutada ei tohi (andmebaasimootorite jaoks on neljas praks).&lt;br /&gt;
* Loodud veebilehed peavad sisaldama html-i, css-i ja javascripti (pluss pilte), javat ja flashi jne kasutada ei tohi.&lt;br /&gt;
* Teise mängija vastu mängimine peab kasutama ajaxit ehk andmevahetust serveriga otse javascriptist. Üksi mängimine ei pea kasutama ajaxit, kuid keelatud see ei ole.&lt;br /&gt;
&lt;br /&gt;
Turvaküsimustega ei pea selles praksis tegelema! Seega on täiesti ok, kui mängija &lt;br /&gt;
saab ise anda cgi-le parameetrid näiteks võõra mängu kohta ja sellega teiste&lt;br /&gt;
mängu ära rikkuda, pettusi teha jne. Turvaküsimused oleks selle praksi jaoks&lt;br /&gt;
lihtsalt liiga töö- ja tähelepanumahukad.&lt;br /&gt;
&lt;br /&gt;
Miks skriptikeel (siin praksis Python) ja mitte C või Java? Eeskätt seepärast, et C ja Java jaoks juba on eraldi kursused, kus neid kasutatakse. Teiseks seepärast, et skriptikeeltes on väiksemaid/lihtsamaid veebirakendusi veidi mugavam kirjutada, kui kompileeritud keeltes.&lt;br /&gt;
&lt;br /&gt;
Miks just Python? Vaata [http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html Tiobe] progekeelte populaarsuse indeksit: kõige populaarsemad nn skriptikeeled on (peale Javascripti) PHP ja Python. Kummagi jaoks on meil üks praktikum. PHP ja Python on üksteisest ka väga erinevad (Perl ja PHP on hoopis sarnasemad), seega on nad sobivad näited skriptikeelte spektri eri otstest.&lt;br /&gt;
&lt;br /&gt;
== Dijkstra server ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dijktra serverisse ligipääsu, failide laadimise ja linuxi käsureaga hakkamasaamise kohta loe pikemalt ...&lt;br /&gt;
&lt;br /&gt;
Oma programmid pane kataloogi &amp;lt;b&amp;gt;public_html/cgi-bin/prax3&amp;lt;/b&amp;gt; . Kõigepealt pead selle kataloogi tegema ja talle grupile ligipääsuõiguse andma, analoogiliselt teise praktikumiga.  Mujale pandud programme Apache käima ei pane.&lt;br /&gt;
&lt;br /&gt;
Kui töös taaskasutatakse teise praktikumi koodi, siis tee sellest uus koopia &amp;lt;b&amp;gt;public_html/prax3&amp;lt;/b&amp;gt; alla. Teise praktikumi töö peab ka alles jääma.&lt;br /&gt;
&lt;br /&gt;
Samuti on sul vaja veidi tutvuda linuxi käsurea elementaarkäskudega (kopeerimine, kustutamine, õiguste muutmine jne) nagu teises praksis soovitatud.&lt;br /&gt;
&lt;br /&gt;
== Soovitused programmeerimiseks ==&lt;br /&gt;
&lt;br /&gt;
Kõigepeal tutvu [[pythoni cgi-d dijkstra serveris: kiire sissejuhatus |  cgi programmide kirjutamise esmaste põhimõtetega loengumaterjalidest]] ja sisuliseks arusaamiseks loe cgi loengu materjalide alt teisi materjale lisaks.&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
Kui sa ei ole varem Pythonis cgi-sid programmeerinud, tutvu kõigepealt Pythoni keele ja&lt;br /&gt;
cgi teegiga: &lt;br /&gt;
&lt;br /&gt;
* loe [http://docs.python.org/tutorial/ Pythoni tutoriali] algust (keerulised andmestruktuurid, moodulite ja klasside värgi võid esialgu lugemata jätta)&lt;br /&gt;
* võib-olla parima pythonis cgi programmeerimise kiirtutoriali [http://www.tutorialspoint.com/python/python_cgi_programming.htm leiad siit]&lt;br /&gt;
* see [http://www.cs.virginia.edu/~lab2q/lesson_1/ pythoni cgi tutorial] annab ka pythoni keele jaoks ok sissejuhatuse&lt;br /&gt;
*lLisadetailide jaoks vaata [http://docs.python.org/library/cgi.html cgi teegi õpetust].&lt;br /&gt;
&lt;br /&gt;
Hea mõte on paralleelselt teha lahti Pythoni interpretaator ja katsetada kõrvale asju&lt;br /&gt;
otse Pythoni käsureal. Kui su masinas Pythonit pole, siis installeeri!&lt;br /&gt;
&lt;br /&gt;
Paljud kasulikud asjad on kirjas Pythoni&lt;br /&gt;
[http://docs.python.org/library/index.html#library-index teegi dokumentatsioonis].&lt;br /&gt;
Konkreetsete küsimuste korral aitab tihti googeldamine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;NB!&amp;lt;/b&amp;gt; Pythonil on väga palju teeke ja mitmeid mittetriviaalseid keelekonstruktsioone.&lt;br /&gt;
Sul ei lähe rõhuvat enamust nendest vaja, praktikumiks piisab väga esmastest asjadest (listid,&lt;br /&gt;
stringid, numbrid) ning teekidest ei lähe samuti muud vaja, kui failide lugemine/kirjutamine,&lt;br /&gt;
stringioperatsioonid ja cgi. Ära kuluta kohe aega kõigi Pythoni teekide ja detailide uurimisele,&lt;br /&gt;
pigem alusta peale esmast tutvust koodi kirjutamist.&lt;br /&gt;
&lt;br /&gt;
Arvesta, et dijkstra serveris on installeeritud Python 2.7.3, seega väldi Python 3 spetsiifiliste&lt;br /&gt;
asjade kasutamist (vt [http://docs.python.org/py3k/whatsnew/3.0.html erinevusi 2 ja 3 sarja vahel]), &lt;br /&gt;
muidu võib tekkida komplikatsioone programmide viimisel dijkstrasse. Kui sa midagi eriti keerulist&lt;br /&gt;
ei tee, siis ei tohiks 3 sarja programmide ja 2 sarja interpretaatoriga siiski suuremaid probleeme tekkida.&lt;br /&gt;
&lt;br /&gt;
Kirjuta mõni väike näiteprogramm ja katseta serveris, kuhu lõpuks süsteemi üles&lt;br /&gt;
paned (kas siis dijkstra või oma isiklik lemmikserver).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Kasulikud Pythoni näitejupid cgi jaoks ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Vaata kindlasti&amp;lt;/font&amp;gt; [[Kasulikke pythoni näitejuppe cgi jaoks]]. Nendes näidetes toodud konstruktsioonidest ja funktsioonidest peaks kolmanda praksi jaoks piisama.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Python + CGI ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vormidelt saadetud data kasutamiseks on Pythonis tore imporditav moodul nimega cgi, mille funktsioonid aitavad vormiinfot söödavamal kujul sisse võtta. &lt;br /&gt;
&lt;br /&gt;
Looge fail test2.py:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 import cgi&lt;br /&gt;
 &lt;br /&gt;
 print &amp;quot;Content-type: text/html&amp;quot;&lt;br /&gt;
 print&lt;br /&gt;
 &lt;br /&gt;
 print &amp;quot;&amp;amp;lt;html&amp;amp;gt;&amp;amp;lt;head&amp;amp;gt;&amp;amp;lt;title&amp;amp;gt;test2.py&amp;amp;lt;/title&amp;amp;gt;&amp;amp;lt;/head&amp;amp;gt;&amp;amp;lt;body&amp;amp;gt;&amp;amp;lt;h1&amp;amp;gt;Hello, World!&amp;amp;lt;/h1&amp;amp;gt;&amp;amp;lt;p&amp;amp;gt;Lisaparameeter oli &amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 formdata = cgi.FieldStorage()&lt;br /&gt;
 if formdata.has_key(&amp;quot;lisaparameeter&amp;quot;):&lt;br /&gt;
   print formdata[&amp;#039;lisaparameeter&amp;#039;].value&lt;br /&gt;
 else:&lt;br /&gt;
   print &amp;quot;puudu&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 print &amp;quot;.&amp;amp;lt;/p&amp;amp;gt;&amp;amp;lt;/body&amp;amp;gt;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
Vaadake faili brauseris:&amp;lt;br&amp;gt;&lt;br /&gt;
http://dijkstra.cs.ttu.ee/~t0XXX/cgi-bin/test2.py&lt;br /&gt;
&lt;br /&gt;
Parandage faili õigused omaette kirudes, et seda unustati teile teisel korral öelda ja vaadake uuesti.&lt;br /&gt;
&lt;br /&gt;
http://dijkstra.cs.ttu.ee/~t0XXX/cgi-bin/test2.py&lt;br /&gt;
http://dijkstra.cs.ttu.ee/~t0XXX/cgi-bin/test2.py?lisaparameeter=olemas&lt;br /&gt;
&lt;br /&gt;
Tasub vaadata ka  [[Kasulikke pythoni näitejuppe cgi jaoks]].&lt;br /&gt;
&lt;br /&gt;
=== Arendamine oma või arvutiklassi arvutitel ===&lt;br /&gt;
&lt;br /&gt;
Kuna sinu süsteem peab lõpuks töötama avalikul veebiserveril, kuid arendust teed&lt;br /&gt;
oma või arvutiklassi arvutitel, siis kuidas oleks mõistlik tööd korralda?&lt;br /&gt;
&lt;br /&gt;
Peamised variandid on sellised:&lt;br /&gt;
&lt;br /&gt;
* Kirjutad kõik otse serveris, kasutades sisselogimiseks Putty-t (windows) või  ssh-d (linux) ja serveris kasutad redaktoriks näiteks vi-d. Aitab, kui teed lahti mitu akent. Kõige universaalsem viis, aga suhteliselt ebamugav, samuti nõuab vi õppimist, mis võtab aega. Võimalik alternatiiv vi-le serveris on nano.&lt;br /&gt;
&lt;br /&gt;
* Kirjutad faile oma masinas redaktoriga, mis lubab üle võrgu faile avada ja sulgeda, windowsis näiteks [http://winscp.net/eng/docs/ui_editor winscp] abil. Katsetamiseks ja testimiseks hoiad lahti sisse logitud aknaid nagu eelmises variandis. See on &amp;lt;b&amp;gt;suhteliselt mugav viis&amp;lt;/b&amp;gt; kui sa ei taha järgmisena kirjeldatud meetodeid - mis veidi pikemas perspektiivis on paremad - kasutada.&lt;br /&gt;
&lt;br /&gt;
* Arendad süsteemi võimalikult lõpuni windowsis valmis ja siis kannad üle serverisse ja teed vajalikke muutusi. Selleks installeeri oma arvutis [http://www.python.org/download/windows/ python windowsile], arvutiklassides peaks see juba olemas olema. Väga abiks oleks seejuures ka veebiserveri installeerimine, näiteks&lt;br /&gt;
** [http://www.editrocket.com/articles/python_apache_windows.html apache saab panna käima windowsile]. &lt;br /&gt;
** Microsofti oma veebiserveri saab panna pythoni cgi-sid käivitama, vt [http://support.microsoft.com/kb/276494 siit] &lt;br /&gt;
** Mh on ka Pythoni teekide hulgas veebiserver olemas ja kasutatav:  vaata [http://docs.python.org/library/simplehttpserver.html#module-SimpleHTTPServer SimpleHTTPServer] ja [http://docs.python.org/library/cgihttpserver.html cgihttpserver].&lt;br /&gt;
&lt;br /&gt;
* Kui sul on oma arvutis windows ja põhiliselt kasutad seda, siis kõige soovitavam ja pikemas perspektiivis mõistlikum viis on installeerida windowsile lisaks [http://www.ubuntu.com/download/desktop ubuntu linux]&lt;br /&gt;
&lt;br /&gt;
* Ja loomulikult on võimalik kasutada oma masinas mõnda standalone unixt: linuxit, mõnda bsd-d, mac os X vms kas ainsa süsteemina või dual bootina. Kui kirjutad palju ja tihti koodi linuxi serverite jaoks, siis on see tõenäoliselt kõige mõistlikum variant.&lt;br /&gt;
&lt;br /&gt;
=== Tegelik koodikirjutamine ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Kõige olulisem soovitus&amp;lt;/b&amp;gt;: alusta ülesande esimesest osast - oma mängu tulemuse salvestamine serverisse - ja tee seejärel&lt;br /&gt;
valmis salvestatud faili lihtne kuvamine brauseris.&lt;br /&gt;
&lt;br /&gt;
Kui see korralikult käib, &lt;br /&gt;
siis täienda esialgset funktsionaalsust vastavalt nõuetele ülal.&lt;br /&gt;
&lt;br /&gt;
Ära hakka korraga palju funktsionaalsust programmeerima: tee üks väike osa juurde, katseta&lt;br /&gt;
läbi ja paranda, ning alles seejärel lisa järgmine tükk funktsionaalsust jne.&lt;br /&gt;
&lt;br /&gt;
Ehk, selles järjekorras:&lt;br /&gt;
* väike katseprogramm a la hello world (võid ta kopeerida ülal viidatud koodinäidetest)&lt;br /&gt;
* oma mängu tulemuse salvestamine serveris olevasse faili&lt;br /&gt;
* tulemusfaili kuvamine&lt;br /&gt;
* salvestamise/kuvamise integreerimine mängu põhilehega&lt;br /&gt;
* vastase vastu mängimine&lt;br /&gt;
* mängufailide kuvamise täiendamine vastasega variandi jaoks&lt;br /&gt;
&lt;br /&gt;
Süsteemis on hulk funktsionaalsust, mis nõuaks justkui hulga erinevate cgi-de tegemist. &lt;br /&gt;
Üks variant süsteemi ehitada ongi teha mitu cgi-d, teine - üldiselt parem - variant on aga teha üks (või paar)&lt;br /&gt;
cgi-d, mis saavad vormidelt ette hidden väljale pandud operatsiooninime &lt;br /&gt;
(a la myprog.cgi?op=storetofile&amp;amp;name=John ...) ja siis kutsuvad välja operatsiooninimele&lt;br /&gt;
vastavat funktsiooni sellessamas cgi-s.&lt;br /&gt;
&lt;br /&gt;
=== HTML tekst programmis või eraldi failides ===&lt;br /&gt;
&lt;br /&gt;
Kuna sinu programm peab kokku panema ja lõpuks välja trükkima hulga html teksti, tekib küsimus, et kuidas seda paremini teha. Üldiselt on siin järgmised erinevad viisid või põhimõtted:&lt;br /&gt;
* Kõige lihtsam ja väga väikeste programmide korral kõige mugavam on panna html teksti jupid otse programmi muutujate väärtusteks umbes nii (näide on väga lihtsustatud, praktikas oleks juppe ja muutujaid rohkem):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
myresult=2&lt;br /&gt;
yourresult=1&lt;br /&gt;
header=&amp;quot;&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&amp;quot;&lt;br /&gt;
html1=&amp;quot;minu tulemus on &amp;quot;&lt;br /&gt;
html2=&amp;quot; ja sinu tulemus on &amp;quot;&lt;br /&gt;
footer=&amp;quot;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&amp;quot;&lt;br /&gt;
res=header+html1+str(myresult)+html2+str(yourresult)+footer&lt;br /&gt;
print res&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Kui htmli on rohkem ja programm veidi keerulisem, siis on vastupidi, praktilisem mitte panna kõiki htmli juppe programmi sisse, vaid lugeda html tekst eraldi failist ja siis asendada hulga lõike/juppe hetkel vajalikuks. Asendamiseks mõtle lihtsalt välja endale meeldivad marker-tekstijupid, mida htmlis mujal ei esine, ja tee stringiasendusi. Näiteks, kui su html on failis kpktemplate.html ja oled sinna pannud markerid {myresult} ja {yourresult} siis näeks kasutus välja umbes nii:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
myresult=2&lt;br /&gt;
yourresult=1&lt;br /&gt;
f=open(&amp;#039;kpktemplate.html&amp;#039;,&amp;#039;r&amp;#039;)&lt;br /&gt;
template=f.read()&lt;br /&gt;
f.close()&lt;br /&gt;
template=template.replace(&amp;quot;{myresult}&amp;quot;,str(myresult))&lt;br /&gt;
template=template.replace(&amp;quot;{yourresult}&amp;quot;,str(yourresult))&lt;br /&gt;
print template&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Sellise lihtsa stringiasenduse asemel võib kasutada pythonisse sisse ehitatud eraldi templatefunktsioone või ka keerulisemaid ja vägevamaid väliseid templateteeke (mako jms), mis teevad suurtes kogustes asendamisi efektiivsemalt ja mugavamalt ja lubavad template sisse programmijuppe kirjutada. Meie väikese praksiülesande jaoks oleks need vägevamad templatesüsteemid aga pigem overkill, st saadud lisamugavused asenduste tegemiseks tõenäoliselt ei kaaluks üles ajakulu/pingutust nende süsteemide uurimisele.&lt;br /&gt;
&lt;br /&gt;
=== Andmete esitamine ja kasutamine serveris ===&lt;br /&gt;
&lt;br /&gt;
Info salvestamise failid on soovitav luua õigustega, kus kõik võivad faili lugeda ja kirjutada. See on turvalisuse mõttes halb, aga arendamise/debugimise mõttes hea. Siis saad ligi ise ja saavad ligi sinu programmid. Käsurealt saad teha nii:&lt;br /&gt;
&lt;br /&gt;
     chmod a+rw myfile.txt&lt;br /&gt;
&lt;br /&gt;
Täiesti võimalik on olukord, kus Apache poolt käivitatav cgi programm ei ole nõus sinu kataloogis uusi faile tegema: siis tuleks kas muuta oma kataloogi õigusi kõigile loetavaks/kirjutatavaks või teha failid&lt;br /&gt;
mõnda kataloogi, kus apachel on õigused (ntx /tmp, kuid siis tuleks nende nimele panna ntx sufiksiks sinu matriklinumber, et teistega segi ei läheks).&lt;br /&gt;
&lt;br /&gt;
Failile kirje lisamiseks võid kirjutada uue kirje lihtsalt faili lõppu uueks reaks. Vanu&lt;br /&gt;
kirjeid pole kunagi vaja muuta!&lt;br /&gt;
&lt;br /&gt;
Igale kirjele võib panna lisaväljana (ntx esimeseks) kaasa kirje loomise aeg.&lt;br /&gt;
&lt;br /&gt;
Faili lugemisel on üldiselt hea mõte kasutada &lt;br /&gt;
[http://docs.python.org/tutorial/inputoutput.html#reading-and-writing-files f.readline()]&lt;br /&gt;
funktsiooni, võid soovi korral kasutada ka &lt;br /&gt;
[http://docs.python.org/library/csv.html csv] teeki, mille abil faili tabeliks lahti hakkimine&lt;br /&gt;
nõuab veidi vähem koodikirjutamist (aga mitte tingimata palju vähem sinu aega).&lt;br /&gt;
&lt;br /&gt;
Aja määramisel on sul kõige praktilisem kasutada time.time() funktsiooni (otsi see&lt;br /&gt;
[http://docs.python.org/library/time.html mahukast ajateegist] välja: see annab lihtsalt&lt;br /&gt;
aja ühe numbrina, sekundites peale aastat 1970 vms. Selle numbri saad siis lihtsalt faili&lt;br /&gt;
kirjutada, kui tahad aega salvestada. Lugemisel on seda samuti lihtne võrrelda (ja liita/lahutada) hetkeajaga. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;NB!&amp;lt;/b&amp;gt; Ära hakka jändama keerukate aasta/minuti/ajatsooni jne jne meetoditega: need&lt;br /&gt;
on keerulised, nende uurimine võtab hulga aega ja praksis neid vaja ei lähe (mis ei tähenda,&lt;br /&gt;
et huvi korral ei võiks neid uurida :).&lt;br /&gt;
&lt;br /&gt;
Stringi muutmine numbriks on lihtne (int(&amp;quot;12&amp;quot;) või float(&amp;quot;12&amp;quot;)) ning samamoodi on lihtne&lt;br /&gt;
numbri muutmine stringiks (string(12) või string(12.5)).&lt;br /&gt;
&lt;br /&gt;
=== Vastane: tema leidmine, tema käigu ootamine jms ===&lt;br /&gt;
&lt;br /&gt;
Selle osa lahendamiseks tuleks - tehnoloogia mõttes - kasutada ajaxit ehk andmete saatmist serverile ja sealt lugemist otse javascriptist.&lt;br /&gt;
&lt;br /&gt;
Seletused, ideed ja soovitused lisanduvad selle osa kohta loengute ja praktikumide käigus.&lt;br /&gt;
&lt;br /&gt;
* Loe seotud tehnoloogiatest: [http://en.wikipedia.org/wiki/Ajax_%28programming%29 wikipedia ajax], [http://en.wikipedia.org/wiki/XMLHttpRequest wikipedia xmlhttprequest], [http://en.wikipedia.org/wiki/JSON wikipedia json]&lt;br /&gt;
* [[xmlhttprequest ja jsonile rakendatud eval näited]]&lt;br /&gt;
&lt;br /&gt;
= Põhiprobleemid =&lt;br /&gt;
&lt;br /&gt;
Esimese asjana pane serveris käima väike katseprogramm, näiteks copy-paste see jupp kataloogi public_html/cgi-bin nime all test.py:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 print &amp;quot;Content-type: text/html&amp;quot;&lt;br /&gt;
 print&lt;br /&gt;
 print &amp;quot;tere!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Logi serverisse sisse, pane ta prooviks käsurealt käima ja siis vaata brauserist ka, urlilt http://dijkstra.cs.ttu.ee/~Eesnimi.Perenimi/cgi-bin/test.py&lt;br /&gt;
&lt;br /&gt;
Kui see ei õnnestu, on sul tõenäoliselt juhtunud mõni - või mitu - järgmistest vigadest:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;a) Debugimiseks on vaja serverisse sisse logida ja käsurealt programm käima panna.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sisse logimiseks loe ...  Dijkstra serveri kasutusõpetust. Käimapanekuks:&lt;br /&gt;
&lt;br /&gt;
   cd public_html/cgi-bin&lt;br /&gt;
   ./test.py&lt;br /&gt;
&lt;br /&gt;
Kas läks käima?&lt;br /&gt;
Kas trükkis content-type: text/html ja tühja rea&lt;br /&gt;
selle järel?&lt;br /&gt;
&lt;br /&gt;
Esimese asjana logi serverisse ja pane programm käsurealt käima!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;b) Kui EI lähe üldse käima, st saate vea&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   -bash: ./test.py: Permission denied&lt;br /&gt;
&lt;br /&gt;
siis tuleb õigused panna proge jaoks õigeks:&lt;br /&gt;
&lt;br /&gt;
   chmod a+x test.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;c) Annab sellise vea:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    -bash: ./test.py: /usr/bin/python^M: bad interpreter:&lt;br /&gt;
     No   such file or directory&lt;br /&gt;
&lt;br /&gt;
Siis on sul rea lõpus lisaks line-feed sümbolile ka carriage-return. Korista ta niimoodi ära:&lt;br /&gt;
 &lt;br /&gt;
1. Ava scite menüüs View -&amp;gt; End of line&lt;br /&gt;
või Notepad++ menüüs View -&amp;gt; Show symbol -&amp;gt; show end of line&lt;br /&gt;
&lt;br /&gt;
2. Vaata, kas esimese rea lõpus on ainult LF (õige) või CR/LF (vale).&lt;br /&gt;
&lt;br /&gt;
Viimasel juhul: &lt;br /&gt;
&lt;br /&gt;
Scite jaoks:&lt;br /&gt;
&lt;br /&gt;
 1) Options -&amp;gt; Line end characters -&amp;gt; LF&lt;br /&gt;
 2) Options -&amp;gt; Convert line end characters&lt;br /&gt;
 3) OK? Kui jah, keera View -&amp;gt; end of line maha&lt;br /&gt;
&lt;br /&gt;
Notepad++ jaoks:&lt;br /&gt;
 &lt;br /&gt;
 1) Edit -&amp;gt; EOL conversion -&amp;gt; Unix/osX format&lt;br /&gt;
 2) OK? Kui jah, keera View -&amp;gt; Show symbol -&amp;gt; show end of line maha&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;b&amp;gt;d) Annab mõne muu vea, millest paistab, et python käima ei läinud.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sul võib olla rea alguses mingi veider sümbol, mida redaktor välja ei näita.&lt;br /&gt;
&lt;br /&gt;
Kontrolli serveri poolelt vaadates, st olles serveris progega samas kataloogis, ütle&lt;br /&gt;
&lt;br /&gt;
  less test.py&lt;br /&gt;
&lt;br /&gt;
ja vaata, kas esimene rida paistab ok või on seal midagi veidrat. Kui on midagi veidrat, kustuta oma redaktoris esimene rida üldse maha või tee nullist pisi-katsefail ja lae uuesti üles. Siis vaata uuesti less-ga.&lt;br /&gt;
  &lt;br /&gt;
less-ga vaatamisest saad välja, kui vajutad tähte q (nagu quit)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;e) Annab vea, mille teksti sees on &amp;quot;SyntaxError: invalid syntax&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Siis ongi sinu koodis süntaksiviga. Sama veateade ütleb mh, kus viga on (mitmendal real) ja näitab lühidalt kahtlast kohta koodis, umbes nii:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   File &amp;quot;./try.py&amp;quot;, line 4&lt;br /&gt;
      if 1==2&lt;br /&gt;
          ^&lt;br /&gt;
   SyntaxError: invalid syntax&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Süntaksiveaga programm kuvab veebist vaadates &amp;quot;Internal server error&amp;quot; (sest ta ei trüki &amp;quot;content-type: ...&amp;quot; rida)&lt;br /&gt;
&lt;br /&gt;
Paranda süntaksiviga ära ja katseta käsurealt uuesti!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;f) Annab sellise vea&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   File &amp;quot;./test3.py&amp;quot;, line 4&lt;br /&gt;
   SyntaxError: Non-ASCII character &amp;#039;\xfc&amp;#039; in file ./test3.py &lt;br /&gt;
   on line 4, but no encoding declared; see  &lt;br /&gt;
   http://www.python.org   &lt;br /&gt;
   /peps/pep-0263.html for details&lt;br /&gt;
  &lt;br /&gt;
Pythonile tuleb öelda täpitähtede kodeering:&lt;br /&gt;
  &lt;br /&gt;
Pane algusse nii:&lt;br /&gt;
  &lt;br /&gt;
   #!/usr/bin/python&lt;br /&gt;
   # -*- coding: iso-8859-1 -*-&lt;br /&gt;
&lt;br /&gt;
 või&lt;br /&gt;
 &lt;br /&gt;
   #!/usr/bin/python&lt;br /&gt;
   # -*- coding: utf-8 -*- &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;g) Käsurealt läheb OK käima, Content-type: text/html on olemas, järgmine rida on tühi, aga brauseris kuvatakse programmi source!&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sel juhul oled pannud programmi otse public_html või public_html/prax3/ alla vms, aga peaks olema public_html/cgi-bin või public_html/cgi-bin/prax3/ all. Tõsta ta õigesse kataloogi!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;h) Käsurealt läheb OK käima,aga brauseris kuvatakse &amp;quot;Internal server error&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kui varasemad võimalikud probleemid on lahendatud (panid käsurealt käima?) siis võiboll ei trüki programm kohe esimese reana &amp;quot;content-type: text/html&amp;quot; (ilma jutumärkideta) või ei trüki selle järele tühja rida.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;i) Käsurealt läks käima, aga brauserist näen viga tekstiga &amp;quot;Forbidden ..&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Umbes nii:&lt;br /&gt;
&lt;br /&gt;
   Forbidden:&lt;br /&gt;
   You don&amp;#039;t have permission to access /~Eesnimi.Perenimi/cgi-bin/test.py on this server.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sel juhul ei ole sa - tõenäoliselt - oma programmi pannud kataloogi public_html/cgi-bin/ või on ta seal teise nimega: st, teda lihtsalt ei leita selle urli pealt. Teine variant, et sa ei ole teinud&lt;br /&gt;
&lt;br /&gt;
   chmod a+x test.py&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
== Kaugõppe näited ja memo ==&lt;br /&gt;
&lt;br /&gt;
[[prax3 lisamemo]]&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Eelmiste aastate versioonid =&lt;br /&gt;
&lt;br /&gt;
Eelmiste aastate versiooni, mis on mitmes osas sarnased, kuid mitmes osas erinevad: [[ITV0110 3. töö: Serverirakendus: cgi pythonis|2013 aasta]]  [[ITV0110 3. töö 2012: Lihtne serverirakendus: vormid ja cgi| 2012 aasta]] ja&lt;br /&gt;
[[ITV0110 3. töö: Lihtne serverirakendus: vormid ja cgi| 2011 aasta]].&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[[mikromemo]]&lt;br /&gt;
[[mikromemo3]]&lt;br /&gt;
[[mikromemo4]]&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tammet</name></author>
	</entry>
</feed>