<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>blog.matajon.net</title>
	<atom:link href="http://blog.matajon.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.matajon.net</link>
	<description>Matajon's piece of internet</description>
	<pubDate>Mon, 11 Aug 2008 13:57:40 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
	<language>en</language>
			<item>
		<title>Dal&#353;&#237; h&#225;danka, tentokr&#225;t webov&#225;</title>
		<link>http://blog.matajon.net/webdesign/dalsi-hadanka-tentokrat-webova/</link>
		<comments>http://blog.matajon.net/webdesign/dalsi-hadanka-tentokrat-webova/#comments</comments>
		<pubDate>Mon, 11 Aug 2008 13:49:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Webdesign]]></category>

		<category><![CDATA[adjacent sibling combinator]]></category>

		<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://blog.matajon.net/webdesign/dal-hdanka-tentokrt-webov/</guid>
		<description><![CDATA[Mějme neznámý počet prvků &#60;div class=&#8221;prvek&#8221;&#62;nejakyText&#60;/div&#62; za sebou. Jak mezi každými dvěma prvky udělat horizontální čáru na jejich oddělení? A ne, žádná další čára nad prvním nebo pod posledním prvkem být nemůže 

 Podle mě nejelegantnější řešení spočívá v použití &#8220;kombinátoru vedlejšího sourozence&#8221; nebo lépe anglicky &#8220;adjacent sibling combinator&#8221; definovaného v CSS 2.1 a dobře [...]]]></description>
			<content:encoded><![CDATA[<p>Mějme neznámý počet prvků <strong>&lt;div class=&#8221;prvek&#8221;&gt;nejakyText&lt;/div&gt;</strong> za sebou. Jak mezi každými dvěma prvky udělat horizontální čáru na jejich oddělení? A ne, žádná další čára nad prvním nebo pod posledním prvkem být nemůže <img src='http://blog.matajon.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
<span id="more-16"></span><br />
 Podle mě nejelegantnější řešení spočívá v použití &#8220;kombinátoru vedlejšího sourozence&#8221; nebo lépe anglicky &#8220;<strong>adjacent sibling combinator</strong>&#8221; definovaného v <strong>CSS 2.1</strong> a dobře podporovaného v IE7+, FF2+, Opera 9.5+, Safari 3+ a také třeba v Konqueroru. Jak je již z názvu patrné, tak určuje vztah mezi dvěma selektory, a to takový, že jsou to sourozenci a následují těsně po sobě. Kdybychom chtěli aby sourozenci mohli následovat nepřímo, můžeme použít jiný kombinátor (CSS 3), a to &#8220;tildu&#8221; <strong>~</strong> (general sibling combinator). A řešení hádanky? </p>
<pre>div.prvek + div.prvek
{
	border-width: 1px 0 0 0;
	border-color: black;
	border-style: solid;
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.matajon.net/webdesign/dalsi-hadanka-tentokrat-webova/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Hádanka</title>
		<link>http://blog.matajon.net/vista/hadanka/</link>
		<comments>http://blog.matajon.net/vista/hadanka/#comments</comments>
		<pubDate>Wed, 23 Jul 2008 09:53:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Windows Vista]]></category>

		<category><![CDATA[Taskmanager]]></category>

		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.matajon.net/bez-kategorie/hadanka/</guid>
		<description><![CDATA[Jak ve Windows jednoduše sestřelit Správce úloh když neodpovídá?
Odpověď (pro zobrazení označte text)
pomocí konzolového taskkill.exe 
]]></description>
			<content:encoded><![CDATA[<p>Jak ve Windows jednoduše sestřelit Správce úloh když neodpovídá?</p>
<p><strong>Odpověď (pro zobrazení označte text)</strong><br />
<font color="#ffffff">pomocí konzolového taskkill.exe </font></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.matajon.net/vista/hadanka/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Windows Powershell - n&#225;hodn&#233; řazen&#237; kolekce</title>
		<link>http://blog.matajon.net/powershell/windows-powershell-nahodne-razeni-kolekce/</link>
		<comments>http://blog.matajon.net/powershell/windows-powershell-nahodne-razeni-kolekce/#comments</comments>
		<pubDate>Wed, 02 Jul 2008 14:16:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Powershell]]></category>

		<category><![CDATA[random]]></category>

		<category><![CDATA[sort]]></category>

		<guid isPermaLink="false">http://blog.matajon.net/powershell/windows-powershell-nhodn-razen-kolekce/</guid>
		<description><![CDATA[Včera jsem kvůli jedné věci (vypsání tří náhodných řádků ze souboru) zkoumal, jak se dá v powershellu co nejsnadněji a nejrychleji seřadit kolekce (v mém případě řádků získaných cmdletem Get-Content (aliasy cat, gc a type).

Řešení je velice jednoduché a elegantní s použitím cmdletu Sort-Object, kterému se jako parametr pro řazení předá náhodné číslo (pro každý [...]]]></description>
			<content:encoded><![CDATA[<p>Včera jsem kvůli jedné věci (vypsání tří náhodných řádků ze souboru) zkoumal, jak se dá v powershellu co nejsnadněji a nejrychleji seřadit kolekce (v mém případě řádků získaných cmdletem <strong>Get-Content</strong> (aliasy cat, gc a type).</p>
<p><span id="more-14"></span></p>
<p>Řešení je velice jednoduché a elegantní s použitím cmdletu <strong>Sort-Object</strong>, kterému se jako parametr pro řazení předá náhodné číslo (pro každý prvek v pipeline nové). Asi takhle -</p>
<pre>[1] » $rand = New-Object System.Random
[2] » 1..15 | Sort-Object -Property {$rand.Next()}
3
1
10
6
7
5
9
2
13
4
14
8
15
12
11</pre>
<p>Případně zkráceně (aliasy + vynechání default parametru + využití defaultního <strong>using System</strong>)</p>
<pre>[3] » $rand = new Random
[4] » 1..15 | sort {$rand.Next()}
9
4
7
8
2
14
11
12
3
13
10
5
1
15
6</pre>
<p>A dokonce jsem ve své instalaci objevil cmdlet Get-Random (s aliasem random), nejsem si jistý, jestli jsem ho získal v <a href="http://www.codeplex.com/PowerShellCX">Powershell Community Extensions</a> nebo je nový v Powershell 2.0 CTP. Nicméně nám umožňuje minulý kód ještě zkrátit.</p>
<pre>[7] » 1..5 | sort {Get-Random}
4
2
3
1
5</pre>
<p>Takže můj původní záměr se dá realizovat takto (dvě ukázky, aby byla vidět opravdu náhodnost) -</p>
<pre>[8] » (cat ./bla.txt | sort {Get-Random})[0..2]
-- Dump completed on 2008-05-01 21:34:21
-- Host: localhost    Database: bttechnik
-- Dumping data for table `contact`
[9] » (cat ./bla.txt | sort {random})[0..2]
CREATE TABLE `pages` (
-- Table structure for table `cars`
INSERT INTO `images` VALUES (1,'TestovaciObrazek.jpg',1,1),(3,'Obrazek.jpg',1,0);</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.matajon.net/powershell/windows-powershell-nahodne-razeni-kolekce/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Windows Vista x64 SP1 - probl&#233;m s NETIO.SYS</title>
		<link>http://blog.matajon.net/vista/windows-vista-x64-sp1-problm-s-netiosys/</link>
		<comments>http://blog.matajon.net/vista/windows-vista-x64-sp1-problm-s-netiosys/#comments</comments>
		<pubDate>Sat, 19 Apr 2008 14:53:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Windows Vista]]></category>

		<category><![CDATA[BSOD]]></category>

		<category><![CDATA[NETIO.SYS]]></category>

		<category><![CDATA[SP1]]></category>

		<guid isPermaLink="false">http://blog.matajon.net/vista/windows-vista-x64-sp1-problm-s-netiosys/</guid>
		<description><![CDATA[Po nainstalování SP1 pro Visty z Windows Update se na mém PC stala taková neveselá věc, kdy hned po spuštění (případně v krátkém intervalu po něm) následovala BSOD a to i v nouzovém režimu. Chybová hláška říkala něco o ovladači NETIO.SYS. Díkybohu řešení bylo jednoduché, nabootovat do nouzového režimu bez práce v síti nebo do [...]]]></description>
			<content:encoded><![CDATA[<p>Po nainstalování SP1 pro Visty z Windows Update se na mém PC stala taková neveselá věc, kdy hned po spuštění (případně v krátkém intervalu po něm) následovala BSOD a to i v nouzovém režimu. Chybová hláška říkala něco o ovladači <strong>NETIO.SYS</strong>. Díkybohu řešení bylo jednoduché, nabootovat do nouzového režimu bez práce v síti nebo do nouzového režimu s příkazovou řádkou a resetovat TCP/IP, a to příkazem -</p>
<pre>netsh int ip reset</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.matajon.net/vista/windows-vista-x64-sp1-problm-s-netiosys/feed/</wfw:commentRss>
		</item>
		<item>
		<title>MySQL - poddotazy v UPDATE/DELETE</title>
		<link>http://blog.matajon.net/programovani/mysql-poddotazy-v-update-delete/</link>
		<comments>http://blog.matajon.net/programovani/mysql-poddotazy-v-update-delete/#comments</comments>
		<pubDate>Sun, 23 Mar 2008 12:24:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Programování]]></category>

		<category><![CDATA[SQL]]></category>

		<category><![CDATA[delete]]></category>

		<category><![CDATA[MySQL]]></category>

		<category><![CDATA[poddotaz]]></category>

		<category><![CDATA[update]]></category>

		<guid isPermaLink="false">http://blog.matajon.net/programovani/mysql-poddotazy-v-updatedelete/</guid>
		<description><![CDATA[Občas se stává, že potřebujete při mazání nebo upravování záznamu v podmínce (WHERE) příkazu určit hodnotu podle dotazu na tu samou tabulku. Například pokud chci smazat z tabulky všechny články u kterých se titulek v tabulce vyskytuje u více záznamů.

Mějme tedy tabulku -

CREATE TABLE ukazka1 &#40;
    Id INT NOT NULL AUTO_INCREMENT, 
 [...]]]></description>
			<content:encoded><![CDATA[<p>Občas se stává, že potřebujete při mazání nebo upravování záznamu v podmínce (WHERE) příkazu určit hodnotu podle dotazu na tu samou tabulku. Například pokud chci smazat z tabulky všechny články u kterých se titulek v tabulce vyskytuje u více záznamů.</p>
<p><span id="more-12"></span></p>
<p>Mějme tedy tabulku -</p>

<div class="wp_syntax"><div class="code"><pre class="sql"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TABLE</span> ukazka1 <span style="color: #66cc66;">&#40;</span>
    Id INT <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #993333; font-weight: bold;">AUTO_INCREMENT</span>, 
    Title VARCHAR<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">30</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span>, 
    Content TEXT, 
    Published TIMESTAMP <span style="color: #993333; font-weight: bold;">DEFAULT</span> NOW<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>, 
    <span style="color: #993333; font-weight: bold;">PRIMARY</span> <span style="color: #993333; font-weight: bold;">KEY</span><span style="color: #66cc66;">&#40;</span>Id<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>A v ní data -</p>

<div class="wp_syntax"><div class="code"><pre class="sql"><span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> ukazka1 <span style="color: #66cc66;">&#40;</span>Title, Content<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Titulek 1&quot;</span>, <span style="color: #ff0000;">&quot;Lorem ipsum&quot;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> ukazka1 <span style="color: #66cc66;">&#40;</span>Title, Content<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Titulek 2&quot;</span>, <span style="color: #ff0000;">&quot;Teeext&quot;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> ukazka1 <span style="color: #66cc66;">&#40;</span>Title, Content<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Foo&quot;</span>, <span style="color: #ff0000;">&quot;Bar&quot;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> ukazka1 <span style="color: #66cc66;">&#40;</span>Title, Content<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Foo&quot;</span>, <span style="color: #ff0000;">&quot;Bar2&quot;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> ukazka1 <span style="color: #66cc66;">&#40;</span>Title, Content<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Titulek 3&quot;</span>, <span style="color: #ff0000;">&quot;CHRO&quot;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> ukazka1 <span style="color: #66cc66;">&#40;</span>Title, Content<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Titulek 1&quot;</span>, <span style="color: #ff0000;">&quot;Opakuje se&quot;</span><span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>Takže ve výsledku tabulka vypadá asi takto -</p>
<pre>mysql> SELECT * FROM ukazka1;
+----+-----------+----------------------------+---------------------+
| Id | Title     | Content                    | Published           |
+----+-----------+----------------------------+---------------------+
|  1 | Titulek 1 | Lorem ipsum                | 2008-03-23 13:38:19 |
|  2 | Titulek 2 | Teeext                     | 2008-03-23 13:38:19 |
|  3 | Foo       | Bar                        | 2008-03-23 13:38:19 |
|  4 | Foo       | Bar2                       | 2008-03-23 13:38:19 |
|  5 | Titulek 3 | CHRO                       | 2008-03-23 13:38:19 |
|  6 | Titulek 1 | Opakuje se                 | 2008-03-23 13:38:20 |
+----+-----------+----------------------------+---------------------+
6 rows in set (0.00 sec)
</pre>
<p>Tak, a teď jak vymazat záznamy s více než jedním výskytem titulku?<br />Najdeme je jednoduše příkazem</p>
<pre>
mysql> SELECT Title FROM ukazka1 GROUP BY Title HAVING COUNT(Title) > 1;
+-----------+
| Title     |
+-----------+
| Foo       |
| Titulek 1 |
+-----------+
2 rows in set (0.00 sec)
</pre>
<p>Takže čistě logicky by dotaz na smazání takovýchto dotazů měl vypadat tak -</p>

<div class="wp_syntax"><div class="code"><pre class="sql"><span style="color: #993333; font-weight: bold;">DELETE</span> <span style="color: #993333; font-weight: bold;">FROM</span> ukazka1 
<span style="color: #993333; font-weight: bold;">WHERE</span> Title <span style="color: #993333; font-weight: bold;">IN</span> <span style="color: #66cc66;">&#40;</span>
    <span style="color: #993333; font-weight: bold;">SELECT</span> Title 
    <span style="color: #993333; font-weight: bold;">FROM</span> ukazka1 
    <span style="color: #993333; font-weight: bold;">GROUP</span> <span style="color: #993333; font-weight: bold;">BY</span> Title 
    <span style="color: #993333; font-weight: bold;">HAVING</span> COUNT<span style="color: #66cc66;">&#40;</span>Title<span style="color: #66cc66;">&#41;</span> &gt; <span style="color: #cc66cc;">1</span>
<span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>Ovšem po spuštění dotazu zjistíme, že takhle to asi nepujde. MySQL nám to oznámí milou chybou &#8220;<strong>ERROR 1093 (HY000): You can&#8217;t specify target table &#8216;ukazka1&#8242; for update in FROM clause</strong>&#8220;. Takže nám je jasné, že MySQL nedokáže v poddotazu vybírat data z tabulky ze které chceme mazat nebo ji měnit. Takže jak na to?</p>
<p>Jednoduše, nebudeme vybírat data z té samé tabulky ale z odvozené tabulky (derived table) s poddotazem, konkrétně nějak tak -</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="sql"><span style="color: #993333; font-weight: bold;">DELETE</span> <span style="color: #993333; font-weight: bold;">FROM</span> ukazka1 
<span style="color: #993333; font-weight: bold;">WHERE</span> Title <span style="color: #993333; font-weight: bold;">IN</span> <span style="color: #66cc66;">&#40;</span>
    <span style="color: #993333; font-weight: bold;">SELECT</span> Title 
    <span style="color: #993333; font-weight: bold;">FROM</span> <span style="color: #66cc66;">&#40;</span>
        <span style="color: #993333; font-weight: bold;">SELECT</span> Title 
        <span style="color: #993333; font-weight: bold;">FROM</span> ukazka1 
        <span style="color: #993333; font-weight: bold;">GROUP</span> <span style="color: #993333; font-weight: bold;">BY</span> Title 
        <span style="color: #993333; font-weight: bold;">HAVING</span> COUNT<span style="color: #66cc66;">&#40;</span>Title<span style="color: #66cc66;">&#41;</span> &gt; <span style="color: #cc66cc;">1</span>
    <span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> duplicitniZaznamy
<span style="color: #66cc66;">&#41;</span>;</pre></td></tr></table></div>

<p>A tento dotaz už bez problému projde a splní požadovaný úkol -</p>
<pre>mysql> DELETE FROM ukazka1 WHERE Title IN (SELECT Title FROM
(SELECT Title FROM ukazka1 GROUP BY Title HAVING COUNT(Title) > 1)
AS duplicitniZaznamy);
Query OK, 4 rows affected (0.04 sec)

mysql> SELECT * FROM ukazka1;
+----+-----------+---------+---------------------+
| Id | Title     | Content | Published           |
+----+-----------+---------+---------------------+
|  2 | Titulek 2 | Teeext  | 2008-03-23 13:38:19 |
|  5 | Titulek 3 | CHRO    | 2008-03-23 13:38:19 |
+----+-----------+---------+---------------------+
2 rows in set (0.00 sec)</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.matajon.net/programovani/mysql-poddotazy-v-update-delete/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Register globals a jejich bezpečnostn&#237; rizika</title>
		<link>http://blog.matajon.net/programovani/register-globals-a-jejich-bezpecnostni-rizika/</link>
		<comments>http://blog.matajon.net/programovani/register-globals-a-jejich-bezpecnostni-rizika/#comments</comments>
		<pubDate>Fri, 21 Mar 2008 18:11:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Programování]]></category>

		<category><![CDATA[bezpečnost]]></category>

		<category><![CDATA[register globals]]></category>

		<guid isPermaLink="false">http://blog.matajon.net/bez-kategorie/register-globals-a-jejich-bezpecnostn-rizika/</guid>
		<description><![CDATA[Vzhledem k důležitosti tohoto článku jsem se ho rozhodl exhumovat ze starého blogu a znovu vydat  

Protože se poměrně často v PHP projektech setkávám s chybami, respektive bugy, způsobené nastavením na webovém serveru register_globals = on, tak bych tento &#8220;článek&#8221; rád věnoval této problematice.
Co to jsou register globals ?
Register globals je nastavení na webovém [...]]]></description>
			<content:encoded><![CDATA[<p>Vzhledem k důležitosti tohoto článku jsem se ho rozhodl exhumovat ze starého blogu a znovu vydat <img src='http://blog.matajon.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><span id="more-11"></span></p>
<p>Protože se poměrně často v PHP projektech setkávám s chybami, respektive bugy, způsobené nastavením na webovém serveru <u>register_globals = on</u>, tak bych tento &#8220;článek&#8221; rád věnoval této problematice.</p>
<p><strong>Co to jsou register globals ?</strong></p>
<p>Register globals je nastavení na webovém serveru, které způsobuje že jsou prvky v poli globálních proměnných (často $_GET, $_POST, $_SESSION &#8230;) přístupné také pod proměnnou s názvem stejným jako prvek v globální proměnné.</p>
<p>Příklad by to měl vysvětlit:</p>
<p>Představte si, že volám stránku s parametry index.php?bla=test</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="php"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #808080; font-style: italic;">//register globals = on</span>
<span style="color: #000066;">echo</span> <span style="color: #0000ff;">$_GET</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'bla'</span><span style="color: #66cc66;">&#93;</span>; <span style="color: #808080; font-style: italic;">//vypíše &quot;test&quot;</span>
<span style="color: #000066;">echo</span> <span style="color: #0000ff;">$bla</span>; <span style="color: #808080; font-style: italic;">//vypíše &quot;test&quot;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">//register globals = off</span>
<span style="color: #000066;">echo</span> <span style="color: #0000ff;">$_GET</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'bla'</span><span style="color: #66cc66;">&#93;</span>; <span style="color: #808080; font-style: italic;">//vypíše &quot;test&quot;</span>
<span style="color: #000066;">echo</span> <span style="color: #0000ff;">$bla</span>; <span style="color: #808080; font-style: italic;">//nevypíše nic, protože proměnná $bla je prázdná</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p><strong>Jaký problém spočívá v register globals ?</strong> </p>
<p>Můžete si říct, že v příkladu nahoře to vypadá pěkně a výsledkem je zjednodušení kódu, ovšem opak je pravdou. Ukáži vám to na pár příkladech:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code"><pre class="php"><span style="color: #000000; font-weight: bold;">&lt;?php</span>/
/ověření autorizace fiktivního uživatele
<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$uzivatel</span> == <span style="color: #ff0000;">&quot;admin&quot;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #0000ff;">$authorized</span> = <span style="color: #000000; font-weight: bold;">true</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">//kontrola jestli se promenna $authorized == TRUE</span>
<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$authorized</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
    udelejNeco<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
    udelejDalsiVecJenomProAutorizovane<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>Dobře, to je sice hezké, ale co se stane, když zavolám aplikaci s parametrem <strong>stranka.php?authorized=true</strong> a budu mit zaple register globals ? Proměnná $authorized bude nastavena na true bez ohledu na to jestli je dotyčný admin nebo ne!</p>
<p>Další příklad:</p>
<p>Nejdříve si potřebujeme objasnit, jak PHP zachází se řetězci &#8230;.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="php"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #0000ff;">$string</span> = <span style="color: #ff0000;">&quot;test&quot;</span>;
<span style="color: #000066;">echo</span> <span style="color: #0000ff;">$string</span><span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#93;</span>; <span style="color: #808080; font-style: italic;">//vypíše první znak v proměnné $string ... tedy &quot;t&quot;</span>
<span style="color: #000066;">echo</span> <span style="color: #0000ff;">$string</span><span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #66cc66;">&#93;</span>; <span style="color: #808080; font-style: italic;">//vypíše třetí znak v proměnné $string ... tedy &quot;s&quot;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">//a co se stane když použijeme nečíselný index ? </span>
<span style="color: #808080; font-style: italic;">//PHP jej vyhodnotí jako index 0 !</span>
<span style="color: #000066;">echo</span> <span style="color: #0000ff;">$string</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'backora'</span><span style="color: #66cc66;">&#93;</span>; <span style="color: #808080; font-style: italic;">//vypíše první znak v proměnné $string ... tedy &quot;t&quot;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>Jasné ?</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="php"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #0000ff;">$auth</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'nick'</span><span style="color: #66cc66;">&#93;</span> = <span style="color: #ff0000;">&quot;nick&quot;</span>;
<span style="color: #0000ff;">$auth</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'password'</span><span style="color: #66cc66;">&#93;</span> = <span style="color: #ff0000;">&quot;heslo&quot;</span>;
<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$_GET</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'pass'</span><span style="color: #66cc66;">&#93;</span> == <span style="color: #0000ff;">$auth</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'password'</span><span style="color: #66cc66;">&#93;</span> &amp;&amp; <span style="color: #0000ff;">$_GET</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'nick'</span><span style="color: #66cc66;">&#93;</span> == <span style="color: #0000ff;">$auth</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'nick'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
    udelejNecoJakoAdmin<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>Tento příklad vypadá bezpečně, ale ve skutečnosti bezpečný není.</p>
<p>Představte si, že zavolám tuto stránku <strong>page2.php?auth=backora</strong> &#8230;. co myslíte že se stane ?</p>
<p>PHP nastaví proměnnou $auth jako řetězec &#8220;backora&#8221;, poté nastaví první písmeno proměnné $auth na &#8220;n&#8221; (první písmeno řetězce &#8220;nick&#8221;), na dalším řádku nastaví první písmeno proměnné $auth na &#8220;h&#8221; (první písmeno řetězce &#8220;heslo&#8221;) &#8230; a nakonec ověří jestli se první znak v $auth (nyní je $auth rovno &#8220;hackora&#8221; rovná $_GET['pass'] a poté jestli se rovná $_GET['nick']. Jestliže ověření vrátí true, proběhne kód v chráněné části.</p>
<p>Takže nám stačí zavolat stránku jako <strong>page2.php?auth=backora&amp;nick=h&amp;pass=h</strong> a máme povolení admina !</p>
<p><strong>Jak tyto problémy vyřešit ?</strong> </p>
<p>Odpovědi jsou dvě a obě stejně jednoduché <img src='http://blog.matajon.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<ol>
<li>Nastavit register_globals == off (na většitě hostingů nemožné)
<li>Inicializovat proměnné</li>
</ol>
<p>To znamená nastavovat proměnným defaultní hodnoty &#8230; ukážu vám jak by se daly opravit předchozí příklady</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code"><pre class="php"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #0000ff;">$authorized</span> = <span style="color: #000000; font-weight: bold;">false</span>;
&nbsp;
<span style="color: #808080; font-style: italic;">//ověření autorizace fiktivního uživatele</span>
<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$uzivatel</span> == <span style="color: #ff0000;">&quot;admin&quot;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #0000ff;">$authorized</span> = <span style="color: #000000; font-weight: bold;">true</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">//kontrola jestli se promenna $authorized == TRUE</span>
<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$authorized</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
    udelejNeco<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
    udelejDalsiVecJenomProAutorizovane<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="php"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #0000ff;">$auth</span> = <span style="color: #000066;">array</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #0000ff;">$auth</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'nick'</span><span style="color: #66cc66;">&#93;</span> = <span style="color: #ff0000;">&quot;nick&quot;</span>;
<span style="color: #0000ff;">$auth</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'password'</span><span style="color: #66cc66;">&#93;</span> = <span style="color: #ff0000;">&quot;heslo&quot;</span>;
<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$_GET</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'pass'</span><span style="color: #66cc66;">&#93;</span> == <span style="color: #0000ff;">$auth</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'password'</span><span style="color: #66cc66;">&#93;</span> &amp;&amp; <span style="color: #0000ff;">$_GET</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'nick'</span><span style="color: #66cc66;">&#93;</span> == <span style="color: #0000ff;">$auth</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'nick'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
    udelejNecoJakoAdmin<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p><strong>Nechce se mi hledat neinicializované proměnné, jde to usnadnit ?</strong></p>
<p>Ovšem že jde, nastavte si stroj PHP tak, aby zobrazoval i <strong>E_NOTICE</strong> chyby (malé bezvýznamné chyby, jako například použití neinicializované proměnné). Ale pozor, při zapnutní E_NOTICE dochází i k ověřování jestli existuje polek prve, kdyz se k nemu pokusíte přistoupit, což je v některých případech mírně otravné. </p>
<p>Ale doporučuji si zobrazení E_NOTICE pro vývoj aplikace zapnout a až bude aplikace hotová, tak vypnout.</p>
<p>Zobrazování E_NOTICE zapnete :</p>

<div class="wp_syntax"><div class="code"><pre class="php"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000066;">error_reporting</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">E_ALL</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://blog.matajon.net/programovani/register-globals-a-jejich-bezpecnostni-rizika/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Rozežran&#233; &#34;Nečinn&#233; procesy syst&#233;mu&#34; ?</title>
		<link>http://blog.matajon.net/bez-kategorie/rozezrane-necinne-procesy-systemu/</link>
		<comments>http://blog.matajon.net/bez-kategorie/rozezrane-necinne-procesy-systemu/#comments</comments>
		<pubDate>Sun, 02 Dec 2007 13:43:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Bez kategorie]]></category>

		<category><![CDATA[Taskmanager]]></category>

		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.matajon.net/bez-kategorie/rozezran-necinn-procesy-systmu/</guid>
		<description><![CDATA[Často se na diskusních fórech můžete setkat s dotazem typu &#8220;Dobrý den, nečinné procesy systému mi zabírají 99% CPU. Ukazuje to správce úloh.&#8221; Ale jak to ve skutečnosti je?
Odpověď nabízí samotný popis položky &#8220;Nečinné procesy systému&#8221; v taskmanageru, a to :

Takže tímto žádám, aby si všichni kdo se hodlají položit podobný dotaz přestali panikařit, přečetli [...]]]></description>
			<content:encoded><![CDATA[<p>Často se na diskusních fórech můžete setkat s dotazem typu &#8220;<em>Dobrý den, nečinné procesy systému mi zabírají 99% CPU. Ukazuje to správce úloh.</em>&#8221; Ale jak to ve skutečnosti je?</p>
<p>Odpověď nabízí samotný popis položky &#8220;Nečinné procesy systému&#8221; v taskmanageru, a to :</p>
<p><a href="http://blog.matajon.net/wp-content/uploads/2007/12/procesy.png"><img src="http://blog.matajon.net/wp-content/uploads/2007/12/procesy-thumb.png" style="border-width: 0px" alt="procesy" border="0" height="159" width="244" /></a></p>
<p>Takže tímto žádám, aby si všichni kdo se hodlají položit podobný dotaz přestali panikařit, přečetli si popis položky a ještě jednou si pomalu a nahlas přečetli <strong>&#8220;Procento doby nečinnosti procesoru&#8221;</strong> <img src='http://blog.matajon.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.matajon.net/bez-kategorie/rozezrane-necinne-procesy-systemu/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Čteme data z ID3v1 tagů v PHP</title>
		<link>http://blog.matajon.net/programovani/cteme-data-z-id3v1-tagu-v-php/</link>
		<comments>http://blog.matajon.net/programovani/cteme-data-z-id3v1-tagu-v-php/#comments</comments>
		<pubDate>Sat, 01 Dec 2007 16:35:32 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Programování]]></category>

		<category><![CDATA[ID3]]></category>

		<guid isPermaLink="false">http://blog.matajon.net/programovani/cteme-data-z-id3v1-tagu-v-php/</guid>
		<description><![CDATA[Pokud jste už někdy dělali vlastní stránku na upload, kam jste si mohli nahrát soubor a poté se zobrazoval v seznamu souborů i s několika informacemi o něm a byl snadno dostupný ke stažení, určitě byste ocenili možnost přidat k těmto informacím i data z ID3 tagů. Konkrétně z ID3v1 tagů, díky jejich jednoduché struktuře. [...]]]></description>
			<content:encoded><![CDATA[<p>Pokud jste už někdy dělali vlastní stránku na upload, kam jste si mohli nahrát soubor a poté se zobrazoval v seznamu souborů i s několika informacemi o něm a byl snadno dostupný ke stažení, určitě byste ocenili možnost přidat k těmto informacím i data z ID3 tagů. Konkrétně z ID3v1 tagů, díky jejich jednoduché struktuře. Protože je v2 nepoměrně složitější, tak bych v tomto případě doporučil nějakou specializovanou třídu.</p>
<p><span id="more-6"></span></p>
<p>Nejprve je potřeba si ujasnit strukturu ID3v1 tagu v souboru. Ten tvoří posledních 128 bytů v souboru, a to následujícím způsobem :</p>
<ul>
<li>3 znaky - string &#8220;TAG&#8221; pokud se jedna o ID3v1 tag</li>
<li>30 znaků - název písničky</li>
<li>30 znaků - umělec</li>
<li>30 znaků - název alba</li>
<li>4 znaky - rok vydání</li>
<li>30 znaků - komentář</li>
<li>1 byt - žánr</li>
</ul>
<p>Možná bude výstižnější tento obrázek z <a href="http://www.id3.org/ID3v1">http://www.id3.org/</a><br />
<a href="http://blog.matajon.net/wp-content/uploads/2007/12/id3v1_blocks.gif" title="ID3v1"><img src="http://blog.matajon.net/wp-content/uploads/2007/12/id3v1_blocks.gif" alt="ID3v1" /></a></p>
<p>Pro čtení souboru použijeme funkci <strong>fread()</strong>, která za nás obstará převod z binárních hodnot na textové, takže nebudeme muset data <em>unpackovat.</em></p>
<p>Implementace vypadá nějak takto :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
</pre></td><td class="code"><pre class="php"><span style="color: #000000; font-weight: bold;">function</span> GetId3Tags<span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$filename</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
  <span style="color: #808080; font-style: italic;">//otevreni souboru pro cteni</span>
  <span style="color: #0000ff;">$file</span> = <span style="color: #000066;">fopen</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$filename</span>, <span style="color: #ff0000;">&quot;r&quot;</span><span style="color: #66cc66;">&#41;</span>;  
&nbsp;
  <span style="color: #808080; font-style: italic;">//kontrola jestli dany soubor existuje</span>
  <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$file</span> === <span style="color: #000000; font-weight: bold;">FALSE</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#123;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">false</span>;
  <span style="color: #66cc66;">&#125;</span>
&nbsp;
  <span style="color: #808080; font-style: italic;">//nastaveni ukazatele na pozici 128 bytu pred koncem souboru</span>
  <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #000066;">fseek</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$file</span>, <span style="color: #cc66cc;">-128</span>, SEEK_END<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#123;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">false</span>;
  <span style="color: #66cc66;">&#125;</span>
&nbsp;
  <span style="color: #808080; font-style: italic;">//nacteni poslednich 128 bytu souboru (ID3v1 tag)</span>
  <span style="color: #0000ff;">$tagdata</span> = <span style="color: #000066;">fread</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$file</span>, <span style="color: #cc66cc;">128</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
  <span style="color: #808080; font-style: italic;">//kontrola jestli prvni tri pismena techto dat odpovidaji ID3 tagu</span>
  <span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span><span style="color: #000066;">substr</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$tagdata</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span> != <span style="color: #ff0000;">&quot;TAG&quot;</span><span style="color: #66cc66;">&#41;</span>
  <span style="color: #66cc66;">&#123;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">false</span>;
  <span style="color: #66cc66;">&#125;</span>
&nbsp;
  <span style="color: #0000ff;">$id3tag</span> = <span style="color: #000066;">array</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
  <span style="color: #808080; font-style: italic;">//cteni id3tagu</span>
  <span style="color: #0000ff;">$id3tag</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'title'</span><span style="color: #66cc66;">&#93;</span> = <span style="color: #000066;">substr</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$tagdata</span>, <span style="color: #cc66cc;">3</span>, <span style="color: #cc66cc;">30</span><span style="color: #66cc66;">&#41;</span>;
  <span style="color: #0000ff;">$id3tag</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'artist'</span><span style="color: #66cc66;">&#93;</span> = <span style="color: #000066;">substr</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$tagdata</span>, <span style="color: #cc66cc;">33</span>, <span style="color: #cc66cc;">30</span><span style="color: #66cc66;">&#41;</span>;
  <span style="color: #0000ff;">$id3tag</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'album'</span><span style="color: #66cc66;">&#93;</span> = <span style="color: #000066;">substr</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$tagdata</span>, <span style="color: #cc66cc;">63</span>, <span style="color: #cc66cc;">30</span><span style="color: #66cc66;">&#41;</span>;
  <span style="color: #0000ff;">$id3tag</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'year'</span><span style="color: #66cc66;">&#93;</span> = <span style="color: #000066;">substr</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$tagdata</span>, <span style="color: #cc66cc;">93</span>, <span style="color: #cc66cc;">4</span><span style="color: #66cc66;">&#41;</span>;
  <span style="color: #0000ff;">$id3tag</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'comment'</span><span style="color: #66cc66;">&#93;</span> = <span style="color: #000066;">substr</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$tagdata</span>, <span style="color: #cc66cc;">97</span>, <span style="color: #cc66cc;">30</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
  <span style="color: #808080; font-style: italic;">//prevod zanru na slovo</span>
  <span style="color: #0000ff;">$genreNo</span> = <span style="color: #000066;">hexdec</span><span style="color: #66cc66;">&#40;</span><span style="color: #000066;">bin2hex</span><span style="color: #66cc66;">&#40;</span><span style="color: #000066;">substr</span><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$tagdata</span>, <span style="color: #cc66cc;">127</span>, <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
  <span style="color: #0000ff;">$id3tag</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'genre'</span><span style="color: #66cc66;">&#93;</span> = <span style="color: #0000ff;">$GLOBALS</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'genres'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#91;</span><span style="color: #0000ff;">$genreNo</span><span style="color: #66cc66;">&#93;</span>;
&nbsp;
  <span style="color: #b1b100;">return</span> <span style="color: #0000ff;">$id3tag</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
?&amp;gt;</pre></td></tr></table></div>

<p>Doufám, že kód mluví sám za sebe, jenom bych rád dovysvětlil pár důležitých věcí. Jako poslední byte načteme sice číslo žánru, ale v textové podobě, ne binární. Proto jej převedeme do šestnáctkové soustavy, odkud ho poté převedeme do standardní desítkové soustavy. A poté podle tohoto čísla a pole žánrů, kde každému číslu odpovídá jeden žánr určíme textovou reprezentaci tohoto žánru.</p>
<p>Pole žánrů (v příkladu <strong>$genres</strong>) je následující:</p>
<pre style="overflow: scroll; height: 200px">
$genres = array(
		0   =&gt; 'Blues',
		1   =&gt; 'Classic Rock',
		2   =&gt; 'Country',
		3   =&gt; 'Dance',
		4   =&gt; 'Disco',
		5   =&gt; 'Funk',
		6   =&gt; 'Grunge',
		7   =&gt; 'Hip-Hop',
		8   =&gt; 'Jazz',
		9   =&gt; 'Metal',
		10  =&gt; 'New Age',
		11  =&gt; 'Oldies',
		12  =&gt; 'Other',
		13  =&gt; 'Pop',
		14  =&gt; 'R&amp;B',
		15  =&gt; 'Rap',
		16  =&gt; 'Reggae',
		17  =&gt; 'Rock',
		18  =&gt; 'Techno',
		19  =&gt; 'Industrial',
		20  =&gt; 'Alternative',
		21  =&gt; 'Ska',
		22  =&gt; 'Death Metal',
		23  =&gt; 'Pranks',
		24  =&gt; 'Soundtrack',
		25  =&gt; 'Euro-Techno',
		26  =&gt; 'Ambient',
		27  =&gt; 'Trip-Hop',
		28  =&gt; 'Vocal',
		29  =&gt; 'Jazz+Funk',
		30  =&gt; 'Fusion',
		31  =&gt; 'Trance',
		32  =&gt; 'Classical',
		33  =&gt; 'Instrumental',
		34  =&gt; 'Acid',
		35  =&gt; 'House',
		36  =&gt; 'Game',
		37  =&gt; 'Sound Clip',
		38  =&gt; 'Gospel',
		39  =&gt; 'Noise',
		40  =&gt; 'Alternative Rock',
		41  =&gt; 'Bass',
		42  =&gt; 'Soul',
		43  =&gt; 'Punk',
		44  =&gt; 'Space',
		45  =&gt; 'Meditative',
		46  =&gt; 'Instrumental Pop',
		47  =&gt; 'Instrumental Rock',
		48  =&gt; 'Ethnic',
		49  =&gt; 'Gothic',
		50  =&gt; 'Darkwave',
		51  =&gt; 'Techno-Industrial',
		52  =&gt; 'Electronic',
		53  =&gt; 'Pop-Folk',
		54  =&gt; 'Eurodance',
		55  =&gt; 'Dream',
		56  =&gt; 'Southern Rock',
		57  =&gt; 'Comedy',
		58  =&gt; 'Cult',
		59  =&gt; 'Gangsta',
		60  =&gt; 'Top 40',
		61  =&gt; 'Christian Rap',
		62  =&gt; 'Pop/Funk',
		63  =&gt; 'Jungle',
		64  =&gt; 'Native US',
		65  =&gt; 'Cabaret',
		66  =&gt; 'New Wave',
		67  =&gt; 'Psychadelic',
		68  =&gt; 'Rave',
		69  =&gt; 'Showtunes',
		70  =&gt; 'Trailer',
		71  =&gt; 'Lo-Fi',
		72  =&gt; 'Tribal',
		73  =&gt; 'Acid Punk',
		74  =&gt; 'Acid Jazz',
		75  =&gt; 'Polka',
		76  =&gt; 'Retro',
		77  =&gt; 'Musical',
		78  =&gt; 'Rock &amp; Roll',
		79  =&gt; 'Hard Rock',
		80  =&gt; 'Folk',
		81  =&gt; 'Folk-Rock',
		82  =&gt; 'National Folk',
		83  =&gt; 'Swing',
		84  =&gt; 'Fast Fusion',
		85  =&gt; 'Bebob',
		86  =&gt; 'Latin',
		87  =&gt; 'Revival',
		88  =&gt; 'Celtic',
		89  =&gt; 'Bluegrass',
		90  =&gt; 'Avantgarde',
		91  =&gt; 'Gothic Rock',
		92  =&gt; 'Progressive Rock',
		93  =&gt; 'Psychedelic Rock',
		94  =&gt; 'Symphonic Rock',
		95  =&gt; 'Slow Rock',
		96  =&gt; 'Big Band',
		97  =&gt; 'Chorus',
		98  =&gt; 'Easy Listening',
		99  =&gt; 'Acoustic',
		100 =&gt; 'Humour',
		101 =&gt; 'Speech',
		102 =&gt; 'Chanson',
		103 =&gt; 'Opera',
		104 =&gt; 'Chamber Music',
		105 =&gt; 'Sonata',
		106 =&gt; 'Symphony',
		107 =&gt; 'Booty Bass',
		108 =&gt; 'Primus',
		109 =&gt; 'Porn Groove',
		110 =&gt; 'Satire',
		111 =&gt; 'Slow Jam',
		112 =&gt; 'Club',
		113 =&gt; 'Tango',
		114 =&gt; 'Samba',
		115 =&gt; 'Folklore',
		116 =&gt; 'Ballad',
		117 =&gt; 'Power Ballad',
		118 =&gt; 'Rhytmic Soul',
		119 =&gt; 'Freestyle',
		120 =&gt; 'Duet',
		121 =&gt; 'Punk Rock',
		122 =&gt; 'Drum Solo',
		123 =&gt; 'Acapella',
		124 =&gt; 'Euro-House',
		125 =&gt; 'Dance Hall',
		126 =&gt; 'Goa',
		127 =&gt; 'Drum &amp; Bass',
		128 =&gt; 'Club-House',
		129 =&gt; 'Hardcore',
		130 =&gt; 'Terror',
		131 =&gt; 'Indie',
		132 =&gt; 'BritPop',
		133 =&gt; 'Negerpunk',
		134 =&gt; 'Polsk Punk',
		135 =&gt; 'Beat',
		136 =&gt; 'Christian Gangsta Rap',
		137 =&gt; 'Heavy Metal',
		138 =&gt; 'Black Metal',
		139 =&gt; 'Crossover',
		140 =&gt; 'Contemporary Christian',
		141 =&gt; 'Christian Rock',
		142 =&gt; 'Merengue',
		143 =&gt; 'Salsa',
		144 =&gt; 'Trash Metal',
		145 =&gt; 'Anime',
		146 =&gt; 'Jpop',
		147 =&gt; 'Synthpop');

?&gt;</pre>
<p>Jenom si dejte pozor, kdybyste chtěli získávat ID3v1.1 data, protože ty jsou trochu jinak strukturovaná. A to tak, že pole <strong>comment</strong> je zkráceno z o dva znaky, po něm následuje nula (0) a následující byt je pořadí skladby na albu. Poté už je žánr, jako v ID3v1.</p>
<p>Ještě příklad použití na konec:</p>

<div class="wp_syntax"><div class="code"><pre class="php"><span style="color: #0000ff;">$data</span> = GetId3Tags<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;01_Porcupine Tree - Blackest Eyes.mp3&quot;</span><span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>a obsah $data bude</p>
<pre>Array
(
	[title] =&gt; Blackest Eyes
	[artist] =&gt; Porcupine Tree
 	[album] =&gt; XM
	[year] =&gt; 2003
	[comment] =&gt;
	[genre] =&gt; Progressive Rock
)</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.matajon.net/programovani/cteme-data-z-id3v1-tagu-v-php/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Možnosti integrovaného firewallu ve Vistě</title>
		<link>http://blog.matajon.net/vista/moznosti-integrovaneho-firewallu-ve-viste/</link>
		<comments>http://blog.matajon.net/vista/moznosti-integrovaneho-firewallu-ve-viste/#comments</comments>
		<pubDate>Mon, 26 Nov 2007 14:27:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Windows Vista]]></category>

		<category><![CDATA[Firewall]]></category>

		<category><![CDATA[Microsoft]]></category>

		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.matajon.net/vista/moznosti-integrovanho-firewallu-ve-viste/</guid>
		<description><![CDATA[Windows XP obsahují od SP2 integrovaný firewall, ale o jeho užitečnosti a bezpečnosti by se dalo reálně pochybovat. Narozdíl od toho je ve Vistě standardně přítomná o hodně vylepšená verze integrovaného firewallu, nejenom že dokáže nově filtrovat i odchozí spojení (jaká to ale novinka :) ), ale už v základu máte například podporu IPSEC, NAP nebo pomalu ale jistě nastupujícího IPv6.]]></description>
			<content:encoded><![CDATA[<p>Windows XP obsahují od SP2 integrovaný firewall, ale o jeho užitečnosti a bezpečnosti by se dalo reálně pochybovat. Narozdíl od toho je ve Vistě standardně přítomná o hodně vylepšená verze integrovaného firewallu, nejenom že dokáže nově filtrovat i odchozí spojení (jaká to ale novinka <img src='http://blog.matajon.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ), ale už v základu máte například podporu IPSec, NAP nebo pomalu ale jistě nastupujícího IPv6.<br />
<span id="more-5"></span></p>
<p>Na úvod si je třeba uvědomit, jak jsou rozdělena síťová připojení ve Vistě. Každé připojení může mít přiřazen jeden z profilů - &#8220;Profil domény&#8221;, &#8220;Privátní profil&#8221; nebo &#8220;Veřejný profil&#8221;. Profil domény je automaticky nastaven, pokud se v dané síti vyskytuje doménový server a počítač se na něj přihlašuje -&gt; je tedy součástí domény. Přiřazení privátního a veřejného profilu už je pak čistě ve vaší režii, ale mělo by platit, že privátní sítě jsou ty, kterým explicitně důvěřujete (například domácí síť za HW firewallem) a veřejné pak ty nedůvěryhodné (například hotspot v kavárně nebo na letišti, kde jste většinou připojen přímo k internetu a nemůžete se spolehnout na nějaké další zabezpečení).</p>
<p>Pro každý z těchto profilů je nyní možné nakonfigurovat počítač zvlášť, takže můžete mít notebook nastavený tak, že ve veřejných sítích se budou nepovolená příchozí spojení automaticky blokovat, ale na druhou stranu pokud příjdete domů a připojíte si do své domácí důvěryhodné sítě, tak se firewall vypne úplně, protože této síti důvěřujete a máte kvalitní HW firewall.</p>
<p>Nenechte se zmást nastavením firewallu v ovládacích panelech, protože tam je pouze základní verze administračního rozhraní. Pro pokročilá nastavení buď v poli hledat v nabídce Start zadejte &#8220;Brána firewall&#8221; a vyberte &#8220;Brána firewall systému Windows s vyspělým zabezpečením&#8221; nebo přímo spustte MMC snapin &#8220;wf.msc&#8221;. Po spuštění byste měli vidět okno podobné tomuto:</p>
<p><a href="http://blog.matajon.net/wp-content/uploads/MonostiintegrovanhofirewalluveVist_CE59/mainwindow.png"><img src="http://blog.matajon.net/wp-content/uploads/MonostiintegrovanhofirewalluveVist_CE59/mainwindow_thumb.png" style="border: 0px none " alt="mainwindow" border="0" height="182" width="244" /></a></p>
<p>Pod položkou &#8220;Vlastnosti brány firewall&#8221; máte už možnost nastavit firewall pro jednotlivé profily, stejně tak nastavit IPSec. Pro každý profil (každý v samostatné záložce) máte několik položek, které můžete nastavit. První je &#8220;Stav brány firewall&#8221;, kde nastavíte, jestli má pro tento profil firewall vůbec běžet, či nikoliv. Dále nabídky &#8220;Příchozí připojení&#8221; a &#8220;Odchozí připojení&#8221; určují chování firewallu, pokud se uskutečňuje připojení, pro které není definované žádné pravidlo (viz dále). V položce &#8220;Nastavení&#8221; můžete dále nastavit, jestli má být uživateli zobrazeno upozornění, že byla zablokovaná nějaká komunikace, nebo nastavit jenosměrové odpovědi a dále jestli se budou aplikovat nastavení ze skupinovych politik (Group Policy). Pod položkou &#8220;Protokolování&#8221; se překvapivě nastavuje logování akcí firewallu.</p>
<p>Pro rozšíření IPSec můžete v příslušné záložce nastavit způsoby autentifikace nebo výměny klíčů, ale to není zase tak podstatné. Kdo už někdy používal IPSec, vyzná se v nastaveních sám <img src='http://blog.matajon.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://blog.matajon.net/wp-content/uploads/MonostiintegrovanhofirewalluveVist_CE59/properties.png"><img src="http://blog.matajon.net/wp-content/uploads/MonostiintegrovanhofirewalluveVist_CE59/properties_thumb.png" style="border: 0px none " alt="properties" border="0" height="244" width="225" /></a></p>
<p>Když nyní ukončíte tento dialog, tak pod položkami &#8220;Příchozí pravidla&#8221; a &#8220;Odchozí pravidla&#8221; můžete zobrazit či upravovat již existující pravidla pro komunikaci. Přidávání pravidel je vcelku jednoduché a tak ani nebudu dělat ukázku, v praxi stačí nastavit program, protokol+porty a profil, kterému toto pravidlo přirazujete. Je zde více nastavení, ale ty při přidávání objevíte sami, když je budete potřebovat.</p>
<p>Zajímavější možnosti ovšem nabízí &#8220;Pravidla zabezpečení připojení&#8221;, kde můžete nastavovat například výjimky ověřování pro určitě počítače, povolit připojení pouze počítačům například v doméně, nebo dokonce díky NAP povolovat připojení pouze počítačům s dobrým &#8220;zdravotním stavem&#8221; (tzn. nainstalované aktualizace atd.). Stejně tak zde můžete nastavit propojení mezi dvěma počítači na základě autentifikace, či tunelování připojení. Zkusíme si nyní přidat výjimku v ověřování pro jiný počítač v naší soukromé sítí.</p>
<p>Přidáme nové pravidlo zabezpečení připojení, jako typ pravidla vybereme &#8220;Výjimka z ověření&#8221; a po potvrzení zadáme IP adresu vybraného počítače (nebo rozsah adres, případně také typ skupinu počítačů, jako třeba DHCP servery). V dalším kroku vybereme profily, ve kterém chceme pravidlo aplikovat, v našem případě jenom Privátní. A nakonec jenom zadáme název nového pravidla a potvrdíme.</p>
<p><a href="http://blog.matajon.net/wp-content/uploads/MonostiintegrovanhofirewalluveVist_CE59/exclude.png"><img src="http://blog.matajon.net/wp-content/uploads/MonostiintegrovanhofirewalluveVist_CE59/exclude_thumb.png" style="border: 0px none " alt="exclude" border="0" height="244" width="232" /></a></p>
<p>Pod poslední položkou &#8220;Sledování&#8221; je možné sledovat aktuální stav firewallu, například zjistit aktuálně aktivovaný profil.</p>
<p>Nový integrovaný firewall je možné stejně jako v XP spravovat přes příkazovou řádku, a to díky utilitě netsh.exe, dodávané standardně s operačním systémem. Pro možnosti, které vám tato metoda poskytuje spusťte v příkazové řádce &#8220;netsh&#8221;, nebo přesněji &#8220;netsh advfirewall&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.matajon.net/vista/moznosti-integrovaneho-firewallu-ve-viste/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Návrat do budoucnosti</title>
		<link>http://blog.matajon.net/bez-kategorie/navrat-do-budoucnosti/</link>
		<comments>http://blog.matajon.net/bez-kategorie/navrat-do-budoucnosti/#comments</comments>
		<pubDate>Sun, 25 Nov 2007 19:12:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Bez kategorie]]></category>

		<guid isPermaLink="false">http://blog.matajon.net/bez-kategorie/navrat-do-budoucnosti/</guid>
		<description><![CDATA[Tak jo, začínám odznova &#8230; sice stará doména, ale nový systém a snad i nové články. Prozatím tu bude sloužit standardní wordpress, časem určitě s vlastní šablonou a pár dalšími vlastními funkcemi.
Aneb, řekněte CMS Faethonu 2.0 Blog Edition pá pá 
]]></description>
			<content:encoded><![CDATA[<p>Tak jo, začínám odznova &#8230; sice stará doména, ale nový systém a snad i nové články. Prozatím tu bude sloužit standardní wordpress, časem určitě s vlastní šablonou a pár dalšími vlastními funkcemi.</p>
<p>Aneb, řekněte CMS Faethonu 2.0 Blog Edition pá pá <img src='http://blog.matajon.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.matajon.net/bez-kategorie/navrat-do-budoucnosti/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
