<?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"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Honzův pohled &#187; programování</title>
	<atom:link href="http://blog.stastnarodina.com/honza/category/programovani/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.stastnarodina.com/honza</link>
	<description></description>
	<lastBuildDate>Fri, 21 Aug 2009 11:54:14 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>cs</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Ztracená hodina</title>
		<link>http://blog.stastnarodina.com/honza/clanek/ztracena-hodina/</link>
		<comments>http://blog.stastnarodina.com/honza/clanek/ztracena-hodina/#comments</comments>
		<pubDate>Fri, 08 Feb 2008 04:08:00 +0000</pubDate>
		<dc:creator>honza</dc:creator>
				<category><![CDATA[programování]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[štve mě]]></category>

		<guid isPermaLink="false">http://blog.stastnarodina.com/honza/?p=16</guid>
		<description><![CDATA[
<p>Právě jsem ztrávil téměř hodinu přemítáním nad tím, jestli je
větší tupec PHP nebo já.</p>

<p>Měl jsem kód v tomto smyslu:</p>

<p>$a = array(<br />
1 =&gt;„one“,<br />
3 =&gt;„two“,<br />
[…]</p>

<!-- by Texy2! -->]]></description>
			<content:encoded><![CDATA[
<p>Právě jsem ztrávil téměř hodinu přemítáním nad tím, jestli je
větší tupec PHP nebo já.</p>

<p>Měl jsem kód v tomto smyslu:</p>

<pre class="php"><code><span class="php-var">$a</span> = <span
class="php-keyword2">array</span>(
                <span
class="php-num">1</span> =&gt;<span
class="php-quote">&quot;one&quot;</span>,
                <span
class="php-num">3</span> =&gt;<span
class="php-quote">&quot;two&quot;</span>,
                <span
class="php-num">5</span> =&gt; <span
class="php-quote">&quot;three&quot;</span>
          );
<span
class="php-keyword1">foreach</span>(<span class="php-var">$a</span> <span
class="php-keyword1">as</span> <span class="php-var">$key</span>=&gt;&amp;<span
class="php-var">$val</span>) {
        <span
class="php-keyword1">if</span>(<span class="php-var">$key</span> == <span
class="php-num">3</span>) {
                <span
class="php-keyword2">unset</span>(<span class="php-var">$a</span>[<span
class="php-var">$key</span>]);
        } <span
class="php-keyword1">else</span> {
                <span
class="php-var">$val</span> = <span
class="php-quote">'changed'</span>;
        }
        <span
class="php-keyword2">unset</span>(<span class="php-var">$key</span>, <span
class="php-var">$val</span>);

}
print_r(<span
class="php-var">$a</span>);</code></pre>

<p>Očekávaný výstup byl:</p>

<pre class="php"><code><span class="php-keyword2">Array</span>
(
    [<span
class="php-num">1</span>] =&gt; changed
    [<span
class="php-num">5</span>] =&gt; changed
)</code></pre>

<p>ale já pořád dostával:</p>

<pre class="php"><code><span class="php-keyword2">Array</span>
(
    [<span
class="php-num">1</span>] =&gt; changed
    [<span
class="php-num">5</span>] =&gt; three
)</code></pre>

<p>Když už jsem došel do stádia, kdy jsem byl přesvědčen, že větší
blbec je PHP, otevřel jsem bugzillu PHP a po chvíli neuspěšného hledání
stejné chyby jsem zakládal nový bug report.</p>

<p>Jeden z prvních údajů, které jsem ale musel vyplnit, bylo verze PHP.
Používám 5.2.0, což je mimo jiné aktuálně i verze v Debian stable, což
je náš hosting. Tato verze ale na výběr nebyla a byl jsem instruován
upgradovat na 5.2.5. Pokorně jsem poslechl a stáhl 5.2.5. K mé zlosti se
problém v této verzi už neobjevuje. Ani v changelogu jsem ale nenašel
žádný záznam, který by se této chyby týkal.</p>

<p>Vzhledem k tomu, že Debian asi jen tak upgradovat nebude, budu muset najít
nějaký způsob, jak to obejít.</p>

<!-- by Texy2! -->]]></content:encoded>
			<wfw:commentRss>http://blog.stastnarodina.com/honza/clanek/ztracena-hodina/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C++ round</title>
		<link>http://blog.stastnarodina.com/honza/clanek/c-round/</link>
		<comments>http://blog.stastnarodina.com/honza/clanek/c-round/#comments</comments>
		<pubDate>Sun, 20 Jan 2008 03:32:00 +0000</pubDate>
		<dc:creator>honza</dc:creator>
				<category><![CDATA[programování]]></category>

		<guid isPermaLink="false">http://blog.stastnarodina.com/honza/?p=12</guid>
		<description><![CDATA[
<p>27. 1. 2008 Aktualizováno: Někdo mě emailem upozornil (za což děkuji),
že moje řešení funguje pouze pro kladná čísla. Zde je řešení, které
nabízí on (mírně upravené, aby fungovalo po pouhém Cut&amp;Paste ):</p>

<p>#include &lt;cmath&gt; int function round(double num) {<br />
char sign = static_cast&lt;char&gt;(num/­fabs(num));<br />
return static_cast&lt;in­t&gt;(sign* (fabs(num)+ 0.5)); }</p>

<p>Původně jsem zde vlastně měl funkci, která také fungovala dobře jak
pro kladná, tak […]</p>
]]></description>
			<content:encoded><![CDATA[
<p><strong>27. 1. 2008 Aktualizováno:</strong> Někdo mě emailem upozornil
(za což děkuji), že moje řešení funguje pouze pro kladná čísla. Zde je
řešení, které nabízí on (mírně upravené, aby fungovalo po pouhém
Cut&amp;Paste <img
src="http://blog.stastnarodina.com/honza/wp-includes/images/smilies/icon_smile.gif"
alt=":-)" class="smiley" /> ):</p>

<pre><code>#include &lt;cmath&gt;
int function round(double num) {
  char sign = static_cast&lt;char&gt;(num/fabs(num));
  return static_cast&lt;int&gt;(sign* (fabs(num)+ 0.5));
}</code></pre>

<p>Původně jsem zde vlastně měl funkci, která také fungovala dobře jak
pro kladná, tak pro záporná čísla:</p>

<pre><code>#include &lt;cmath&gt;
int function round(double num) {
  return static_cast&lt;int&gt;(floor(num+0.5));
}</code></pre>

<p><span id="more-12"></span> Nedá mi to a musím o tom napsat. C++ je jazyk,
který moc v oblibě nemám a dost mě štve (hlavně teď, když musím
programovat závěrečný příklad do kurzu C++ a potřeboval bych dělat
úplně jiné věci).</p>

<p>Nejvíc mě asi štve, jak dlouho mi trvá, než najdu řešení nějaké
chyby. Už už jsem se teď chtěl znova naštvat, jak je to C++ pitomé, že
ani nemá zadefinovanou funkci round pro zaokrouhlení desetinného čísla na
celé (pěkně od pěti desetin nahoru, jinak dolu), když mi google poradil
parádní fintu. Stačí přičíst 0.5 a a vzít nejbližší nižší celé
číslo (čili floor, které v C++ existuje).</p>

<p>Céčková funkce potom vypadá takto triviálně:</p>

<pre><code>int round(double num) {
 return (int)(num+0.5);
}</code></pre>

<p>Jsem asi z řady těch hloupějších a <acronym
title="čti línějších">pohodlnějších</acronym> programátorů a vůbec by
mi nevadilo, kdyby taková funkce byla také zahrnuta v knihovně (nejlépe
i s možností nastavení přesnosti zaokrouhlování). Takové funkce podle
mě k modernímu jazyku patří.</p>

<p><a href="http://java.sun.com/javase/6/docs/api/java/lang/Math.html">Toto</a>
považuji jako mnohem lepší komfort pro programátora.</p>

<!-- by Texy2! -->]]></content:encoded>
			<wfw:commentRss>http://blog.stastnarodina.com/honza/clanek/c-round/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Vltava.cz ukládá hesla v plain textu</title>
		<link>http://blog.stastnarodina.com/honza/clanek/vltavacz-uklada-hesla-v-plain-textu/</link>
		<comments>http://blog.stastnarodina.com/honza/clanek/vltavacz-uklada-hesla-v-plain-textu/#comments</comments>
		<pubDate>Tue, 23 Oct 2007 10:20:00 +0000</pubDate>
		<dc:creator>honza</dc:creator>
				<category><![CDATA[programování]]></category>
		<category><![CDATA[Nezařazené]]></category>

		<guid isPermaLink="false">http://blog.stastnarodina.com/honza/?p=9</guid>
		<description><![CDATA[
<p>Internetový obchod <a href="http://www.vltava.cz">www.vltava.cz</a> ukládá
hesla svých uživatelů v nezašifrované podobě. (Zjistit to jde například
podle toho, že jsou ochotni vám zapomenuté heslo poslat emailem.)</p>

<p>Osobně nechápu, jak systém, velikosti <a
href="http://www.vltava.cz">www.vltava.cz</a> může obsahovat tak amatérskou
chybu a ještě ke všemu potencionální bezpečnostní díru.</p>
]]></description>
			<content:encoded><![CDATA[
<p><a
href="http://blog.stastnarodina.com/honza/wp-content/uploads/2008/03/vltava.jpg"><img
src="http://blog.stastnarodina.com/honza/wp-content/uploads/2008/03/vltava.thumbnail.jpg"
alt="Vltava hesla v plain-text" class="right" /></a> Internetový obchod <a
href="http://www.vltava.cz">www.vltava.cz</a> ukládá hesla svých uživatelů
v nezašifrované podobě. (Zjistit to jde například podle toho, že jsou
ochotni vám zapomenuté heslo poslat emailem.)</p>

<p>Osobně nechápu, jak systém, velikosti <a
href="http://www.vltava.cz">www.vltava.cz</a> může obsahovat tak amatérskou
chybu a ještě ke všemu potencionální bezpečnostní díru.</p>

<!-- by Texy2! -->]]></content:encoded>
			<wfw:commentRss>http://blog.stastnarodina.com/honza/clanek/vltavacz-uklada-hesla-v-plain-textu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tajuplné MySQL</title>
		<link>http://blog.stastnarodina.com/honza/clanek/tajuplne-mysql/</link>
		<comments>http://blog.stastnarodina.com/honza/clanek/tajuplne-mysql/#comments</comments>
		<pubDate>Mon, 24 Sep 2007 13:52:00 +0000</pubDate>
		<dc:creator>honza</dc:creator>
				<category><![CDATA[programování]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://blog.stastnarodina.com/honza/?p=3</guid>
		<description><![CDATA[
<p>English version of this post available here</p>

<p>MySQL někdy dokáže překvapit. Teď jsem například narazil na toto: Mám
tento SQL dotaz:</p>

<p>SELECT id, username, locked, c.<em>, (SELECT COUNT(</em>) FROM
web_login_users WHERE user=id AND (NOW()-last_action)&lt;600) AS login_count
FROM web_users LEFT JOIN web_user_infor­mation AS c ON (id=user)</p>

<p>Ten bez problému funguje a jako jeden ze sloupců se vrátí sloupec
login_count. Chtěl jsem vybrat pouze řádky, kde je login_count
větší […]</p>
]]></description>
			<content:encoded><![CDATA[
<p><em>English version of this post available <a
href="http://blog.stastnarodina.com/honza-en/2007/09/24/mysterious-mysql/">here</a></em></p>

<p>MySQL někdy dokáže překvapit. Teď jsem například narazil na toto: Mám
tento SQL dotaz:</p>

<pre class="sql"><code><span
class="sql-keyword1">SELECT</span> id, username, locked, c.*,
(<span
class="sql-keyword1">SELECT</span> <span
class="sql-keyword2">COUNT</span>(*)
<span
class="sql-keyword1">FROM</span> web_login_users
<span
class="sql-keyword1">WHERE</span> <span
class="sql-keyword1">user</span>=id <span class="sql-keyword1">AND</span> (<span
class="sql-keyword1">NOW</span>()-last_action)&lt;<span
class="sql-num">600</span>) <span
class="sql-keyword1">AS</span> login_count
<span
class="sql-keyword1">FROM</span> web_users
<span
class="sql-keyword2">LEFT</span> <span
class="sql-keyword1">JOIN</span> web_user_information <span
class="sql-keyword1">AS</span> c <span class="sql-keyword1">ON</span> (id=<span
class="sql-keyword1">user</span>)</code></pre>

<p>Ten bez problému funguje a jako jeden ze sloupců se vrátí sloupec
<strong>login_count</strong>. Chtěl jsem vybrat pouze řádky, kde je
login_count větší než jedna. Intuitivně jsem zkusil toto:</p>

<pre class="sql"><code><span
class="sql-keyword1">SELECT</span> id, username, locked, c.*,
(<span
class="sql-keyword1">SELECT</span> <span
class="sql-keyword2">COUNT</span>(*)
<span
class="sql-keyword1">FROM</span> web_login_users
<span
class="sql-keyword1">WHERE</span> <span
class="sql-keyword1">user</span>=id <span class="sql-keyword1">AND</span> (<span
class="sql-keyword1">NOW</span>()-last_action)&lt;<span
class="sql-num">600</span>) <span
class="sql-keyword1">as</span> login_count
<span
class="sql-keyword1">FROM</span> web_users
<span
class="sql-keyword2">LEFT</span> <span
class="sql-keyword1">JOIN</span> web_user_information <span
class="sql-keyword1">AS</span> c <span class="sql-keyword1">ON</span> (id=<span
class="sql-keyword1">user</span>)
<span
class="sql-keyword1">WHERE</span> login_count &gt; <span
class="sql-num">1</span></code></pre>

<p>To ale nefunguje. MySQL hlásí, že nezná sloupec login_count.</p>

<p>Zajímavé je, že toto funguje:</p>

<pre class="sql"><code><span
class="sql-keyword1">SELECT</span> id, username, locked, c.*,
(<span
class="sql-keyword1">SELECT</span> <span
class="sql-keyword2">COUNT</span>(*) <span
class="sql-keyword1">FROM</span> web_login_users
<span
class="sql-keyword1">WHERE</span> <span
class="sql-keyword1">user</span>=id <span class="sql-keyword1">AND</span> (<span
class="sql-keyword1">NOW</span>()-last_action)&lt;<span
class="sql-num">600</span>) <span
class="sql-keyword1">AS</span> login_count
<span
class="sql-keyword1">FROM</span> web_users
<span
class="sql-keyword2">LEFT</span> <span
class="sql-keyword1">JOIN</span> web_user_information <span
class="sql-keyword1">AS</span> c <span class="sql-keyword1">ON</span> (id=<span
class="sql-keyword1">user</span>)
<span class="sql-keyword1">ORDER</span> <span
class="sql-keyword1">BY</span> login_count</code></pre>
<strike>Bude se to muset zřejmě obejít přes JOIN.</strike>
<p>Po několika pokusech a konzultaci s kamarádem se vzdávám.</p>

<p>Pokus s JOIN</p>

<pre class="sql"><code><span
class="sql-keyword1">SELECT</span> id, username, locked, c.*,
<span
class="sql-keyword2">COUNT</span>(login_users.<span
class="sql-keyword1">user</span>) <span
class="sql-keyword1">AS</span> login_count
<span
class="sql-keyword1">FROM</span> web_users
<span
class="sql-keyword2">LEFT</span> <span
class="sql-keyword1">JOIN</span> web_user_information <span
class="sql-keyword1">AS</span> c <span class="sql-keyword1">ON</span> (id=<span
class="sql-keyword1">user</span>)
<span class="sql-keyword2">LEFT</span> <span
class="sql-keyword1">OUTER</span> <span
class="sql-keyword1">JOIN</span> web_login_users <span
class="sql-keyword1">AS</span> login_users
<span
class="sql-keyword1">ON</span> (<span class="sql-keyword1">user</span>=id <span
class="sql-keyword1">AND</span> (<span
class="sql-keyword1">NOW</span>()-last_action)&lt;<span
class="sql-num">600</span>)
<span
class="sql-keyword1">WHERE</span> login_count &gt; <span
class="sql-num">0</span></code></pre>

<p>končí stejnou hláškou jako předešlé (Unknown column ‚login_count‘
in ‚where clause‘).</p>

<p>Toto se mi sice nelíbí, ale alespoň to funguje:</p>

<pre class="sql"><code><span
class="sql-keyword1">SELECT</span> id, username, locked, c.*,
(<span
class="sql-keyword1">SELECT</span> <span
class="sql-keyword2">COUNT</span>(*) <span
class="sql-keyword1">FROM</span> web_login_users <span
class="sql-keyword1">WHERE</span>
<span
class="sql-keyword1">user</span>=id <span class="sql-keyword1">AND</span> (<span
class="sql-keyword1">NOW</span>()-last_action)&lt;<span
class="sql-num">600</span>) <span
class="sql-keyword1">AS</span> login_count
<span
class="sql-keyword1">FROM</span> web_users <span
class="sql-keyword2">LEFT</span> <span
class="sql-keyword1">JOIN</span> web_user_information <span
class="sql-keyword1">AS</span> c <span class="sql-keyword1">ON</span> (id=<span
class="sql-keyword1">user</span>)
<span class="sql-keyword1">WHERE</span> (<span
class="sql-keyword1">SELECT</span> <span
class="sql-keyword2">COUNT</span>(*) <span
class="sql-keyword1">FROM</span> web_login_users
<span
class="sql-keyword1">WHERE</span> <span
class="sql-keyword1">user</span>=id <span class="sql-keyword1">AND</span> (<span
class="sql-keyword1">NOW</span>()-last_action)&lt;<span
class="sql-num">600</span>) &gt; <span class="sql-num">0</span></code></pre>

<!-- by Texy2! -->]]></content:encoded>
			<wfw:commentRss>http://blog.stastnarodina.com/honza/clanek/tajuplne-mysql/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

