<?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>WebExo.cz</title>
	<atom:link href="http://webexo.cz/feed/" rel="self" type="application/rss+xml" />
	<link>http://webexo.cz</link>
	<description>echo &#34;Milujeme PHP&#34;;</description>
	<lastBuildDate>Sat, 03 Jul 2010 11:06:14 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Jak jsem přešel na linux.</title>
		<link>http://webexo.cz/50-jak-jsem-presel-na-linux/</link>
		<comments>http://webexo.cz/50-jak-jsem-presel-na-linux/#comments</comments>
		<pubDate>Sat, 03 Jul 2010 11:06:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Tak různě...]]></category>

		<guid isPermaLink="false">http://webexo.cz/?p=50</guid>
		<description><![CDATA[Už dlouho sem se odhodlával k přechodu z Windows 7 (měl jsem je jako OEM k noťasu v nějaké Home verzi) na Linux. Před dvěma roky jsem na Linuxu pracoval a celkem se mi to líbilo, ale pak jsem zase přešel zpátky na Windows. Nyní už jedu zase týden na Ubuntu a jsem spokojený.  Když [...]]]></description>
			<content:encoded><![CDATA[<p>Už dlouho sem se odhodlával k přechodu z Windows 7 (měl jsem je jako OEM k noťasu v nějaké Home verzi) na Linux. Před dvěma roky jsem na Linuxu pracoval a celkem se mi to líbilo, ale pak jsem zase přešel zpátky na Windows. Nyní už jedu zase týden na Ubuntu a jsem spokojený.  Když se mi začali najednou nesmyslně Windows bortit a říkal jsem si, že je asi čas na formátování disku, tak jsem si vzpomněl, že bych mohl při té příležitosti přičuchnout k tučňákovi.</p>
<p>Přechod byl hodně impulzivní. V podstatě jsem si řekl TEĎ, všechno zálohoval na externí disk a zformátoval disky. Instalace proběhla velice hladce a rychle. Velice příjemně mě překvapilo, že nebyl problém s žádným HW a hodně rychle jsem našel alternativy k mým oblíbeným programům. Nádherná je komunikace, kterou má ubuntu přímo v sobě. (emaily, IM&#8230;) Dalším šokem bylo, že má multimediální klávesnice funguje i na linuxu. Jen jsem zmáčkl ze zvyku stop a ono to fakt zastavilo přehrávač <img src='http://webexo.cz/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Zatím sem měl jen drobný problém s FTP, ale naučil jsem se mount přes curlftpfs a funguje to hezky. Ještě musím přijít na to, jak zařídit, aby se při odpojení externího monitoru nastavil ntb jako primární monitor&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://webexo.cz/50-jak-jsem-presel-na-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fulltext vyhledávání podle relevance</title>
		<link>http://webexo.cz/47-fulltext-vyhledavani-podle-relevance/</link>
		<comments>http://webexo.cz/47-fulltext-vyhledavani-podle-relevance/#comments</comments>
		<pubDate>Mon, 21 Jun 2010 09:23:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Databáze]]></category>
		<category><![CDATA[PHP obecně]]></category>

		<guid isPermaLink="false">http://webexo.cz/?p=47</guid>
		<description><![CDATA[Před nějakou dobou jsem potřeboval vytvořit efektivní fulltextové vyhledávání ve velké DB. Sice se informace dají najít, ale zkusím to trošku shrnout.
Představte si, že máte tabulku `tabulka` v MySQL DB.
ID &#124; NAZEV &#124; POPISEK &#124; KATEGORIE
Tato tabulka má statisíce záznamů. Nenapadlo mě nic lepšího než využít fulltextu přímo na úrovni DB. MySQL umožňuje si vytvořit [...]]]></description>
			<content:encoded><![CDATA[<p>Před nějakou dobou jsem potřeboval vytvořit efektivní fulltextové vyhledávání ve velké DB. Sice se informace dají najít, ale zkusím to trošku shrnout.</p>
<p>Představte si, že máte tabulku `tabulka` v MySQL DB.</p>
<p>ID | NAZEV | POPISEK | KATEGORIE</p>
<p>Tato tabulka má statisíce záznamů. Nenapadlo mě nic lepšího než využít fulltextu přímo na úrovni DB. MySQL umožňuje si vytvořit fulltext indexy a podle nich hledat.</p>
<pre class="brush: php;">
CREATE FULLTEXT INDEX ON tabulka(nazev, popisek, kategorie) KEY INDEX fulltext;
CREATE FULLTEXT INDEX ON tabulka(nazev) KEY INDEX fulltext_n;
CREATE FULLTEXT INDEX ON tabulka(popisek) KEY INDEX fulltext_p;
CREATE FULLTEXT INDEX ON tabulka(kategorie) KEY INDEX fulltext_k;
</pre>
<p><span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; line-height: 18px; font-size: 12px; white-space: pre;"><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; line-height: 19px; white-space: normal; font-size: 13px;">Možná se někomu zdá divné, že jich je třeba vytvořit tolik, ale je to logické. První index pracuje se všemi třemi sloupci a bude nám dávat všechny výsledky. Další 3 indexy budou sloužit k vylazení relevance.</span></span></p>
<p><span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; line-height: 18px; font-size: 12px; white-space: pre;"><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; line-height: 19px; white-space: normal; font-size: 13px;"> Nyní chceme z DB vybrat všechny výsledky, které obsahují slovo &#8216;pauza&#8217; a zároveň řadit podle relevance.</span></span></p>
<pre class="brush: php;">
SELECT * FROM tabulka WHERE MATCH(nazev, popisek, kategorie) AGAINST('pauza je dlouhá');
</pre>
<p>Toto by bylo výborné, ale&#8230; Nefunguje pro části slov. Klíčové slovo musí mít více než 4 znaky a neberou se v potaz slova, která jsou ve více než 50% záznamů. Navíc se používají stopwords, která se dají nastavit i česká, ale toto mě až tak netrápilo. Nejhorší byla absence hledání podle částí slov. Toto umí boolean mode. Pokud bychom dali MATCH AGAINST do selectu, tak bychom viděli desetinné číslo od 0 do 1, které vyjadřuje relevanci.</p>
<pre class="brush: php;">
SELECT * FROM tabulka WHERE MATCH(nazev, popisek, kategorie) AGAINST('*pauza* *je* *dlouhá*' IN BOOLEAN MODE);
</pre>
<p>Stopwords se sice stále využívají a stále platí minimální počet znaků (dá se přenastavit v ini souboru mysql) &#8211; proto by se &#8222;je&#8220; mělo filtrovat už v php, ale pro názornost jsem to tam uvedl. Nicméně už se dají používat asterisky pro části slov. Existuje více takových klíčových znaků. Kompletní výpis <a href="http://dev.mysql.com/doc/refman/5.1/en/fulltext-boolean.html" target="_blank">zde</a>.</p>
<p>Problémem je, že releavance už je vyjádřena jen jako 1 nebo 0, proto si musíme trochu pomoci.</p>
<pre class="brush: php;">
SELECT * FROM tabulka
WHERE MATCH(nazev, popisek, kategorie) AGAINST('*pauza* *je* *dlouhá*' IN BOOLEAN MODE)
ORDER BY 10 * MATCH(nazev) AGAINST('*pauza* *je* *dlouhá*' IN BOOLEAN MODE)
       + 5 * MATCH(kategorie) AGAINST('*pauza* *je* *dlouhá*' IN BOOLEAN MODE)
       + 1 * MATCH(popisek) AGAINST('*pauza* *je* *dlouhá*' IN BOOLEAN MODE)
;
</pre>
<p>Nyní vidíme, že pokud je v názvu část těchto slov dostanou 10*, pokud v kategorii tak 5*, pokud v popisku tak 1*. Bylo by odeální v ORDER BY používat MATCH AGAINST bez BOOLEAN MODE, ale potřeboval jsem vyhledávání v částech slov, proto se toto zdá jako nejlepší řešení.</p>
]]></content:encoded>
			<wfw:commentRss>http://webexo.cz/47-fulltext-vyhledavani-podle-relevance/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Odesílání emailu</title>
		<link>http://webexo.cz/40-odesilani-emailu/</link>
		<comments>http://webexo.cz/40-odesilani-emailu/#comments</comments>
		<pubDate>Fri, 11 Jun 2010 22:04:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Frameworky]]></category>

		<guid isPermaLink="false">http://localhost/?p=40</guid>
		<description><![CDATA[Seriál k Zend Frameworku začnu velice jednoduchým příkladem. Je to velice hezké zapouzdření odesílání emailu přes PHPMailer a příp. i přes SMTP.

require_once ''Zend/Mail.php';
$mail = new Zend_Mail(&#34;UTF-8&#34;); //zajistí správné kódování českých znaků
$mail-&#62;setBodyText('Mail jako plaintext'); //dobré pro některé exotické emailové klienty a pro rychlé náhledy
$mail-&#62;setBodyHtml('Mail jako HTML.');
$mail-&#62;setFrom('odesilatel@odesilatel.com', 'Jméno Odesílatele');
$mail-&#62;addTo('prijemce@prijemce.com', 'Jméno příjemce');
$mail-&#62;setSubject('Předmět');
$mail-&#62;send(); //odešle email




$mail = new Zend_Mail();


$mail-&#62;setBodyText(&#8216;This is [...]]]></description>
			<content:encoded><![CDATA[<p>Seriál k Zend Frameworku začnu velice jednoduchým příkladem. Je to velice hezké zapouzdření odesílání emailu přes PHPMailer a příp. i přes SMTP.</p>
<pre class="brush: php;">
require_once ''Zend/Mail.php';
$mail = new Zend_Mail(&quot;UTF-8&quot;); //zajistí správné kódování českých znaků
$mail-&gt;setBodyText('Mail jako plaintext'); //dobré pro některé exotické emailové klienty a pro rychlé náhledy
$mail-&gt;setBodyHtml('Mail jako HTML.');
$mail-&gt;setFrom('odesilatel@odesilatel.com', 'Jméno Odesílatele');
$mail-&gt;addTo('prijemce@prijemce.com', 'Jméno příjemce');
$mail-&gt;setSubject('Předmět');
$mail-&gt;send(); //odešle email
</pre>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;">
<ol>
<li style="font-family: 'Courier New',Courier,monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New',Courier,monospace; font-weight: normal;"><span style="color: #0000ff;">$mail</span> = <span style="color: #000000; font-weight: bold;">new</span> Zend_Mail<span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span>;</div>
</li>
<li style="font-family: 'Courier New',Courier,monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New',Courier,monospace; font-weight: normal;"><span style="color: #0000ff;">$mail</span>-&gt;<span style="color: #006600;">setBodyText</span><span style="color: #66cc66;">(</span><span style="color: #ff0000;">&#8216;This is the text of  the mail.&#8217;</span><span style="color: #66cc66;">)</span>;</div>
</li>
<li style="font-family: 'Courier New',Courier,monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New',Courier,monospace; font-weight: normal;"><span style="color: #0000ff;">$mail</span>-&gt;<span style="color: #006600;">setFrom</span><span style="color: #66cc66;">(</span><span style="color: #ff0000;">&#8217;somebody@example.com&#8217;</span>, <span style="color: #ff0000;">&#8216;Some Sender&#8217;</span><span style="color: #66cc66;">)</span>;</div>
</li>
<li style="font-family: 'Courier New',Courier,monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New',Courier,monospace; font-weight: normal;"><span style="color: #0000ff;">$mail</span>-&gt;<span style="color: #006600;">addTo</span><span style="color: #66cc66;">(</span><span style="color: #ff0000;">&#8217;somebody_else@example.com&#8217;</span>, <span style="color: #ff0000;">&#8216;Some Recipient&#8217;</span><span style="color: #66cc66;">)</span>;</div>
</li>
<li style="font-family: 'Courier New',Courier,monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New',Courier,monospace; font-weight: normal;"><span style="color: #0000ff;">$mail</span>-&gt;<span style="color: #006600;">setSubject</span><span style="color: #66cc66;">(</span><span style="color: #ff0000;">&#8216;TestSubject&#8217;</span><span style="color: #66cc66;">)</span>;</div>
</li>
<li style="font-family: 'Courier New',Courier,monospace; color: black; font-weight: normal; font-style: normal;">
<div style="font-family: 'Courier New',Courier,monospace; font-weight: normal;"><span style="color: #0000ff;">$mail</span>-&gt;<span style="color: #006600;">send</span><span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span></div>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://webexo.cz/40-odesilani-emailu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Velké XML soubory &#8211; rychle a hezky</title>
		<link>http://webexo.cz/15-velke-xml-soubory-rychle-a-hezky/</link>
		<comments>http://webexo.cz/15-velke-xml-soubory-rychle-a-hezky/#comments</comments>
		<pubDate>Sat, 05 Jun 2010 23:08:42 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP obecně]]></category>

		<guid isPermaLink="false">http://localhost/?p=15</guid>
		<description><![CDATA[V tomto stručném návodu se vám pokusím ukázat, jak se dají opravdu velké XML soubory parsovat i na průměrně výkonných strojích. Před několika týdny jsem se sám dostal do situace, kdy jsem potřeboval zpracovat obrovské XML (80 MB) na standartním hostingu s časovým limitem 120s a paměťovým limitem 128 MB. Po chvilkovém zápolení a hledání jsem nalezl řešení.]]></description>
			<content:encoded><![CDATA[<p>Svůj cyklus návodů začnu elegantním řešením načítáním velkých XML souborů.</p>
<p>Před několika týdny jsem se dostal do situace, kdy jsem potřeboval velice rychle zpracovat obrovské XML (80 MB) na standartním hostingu s časovým limitem 120s a paměťovým limitem 128 MB. Po chvilkovém zápolení a hledání jsem nalezl řešení.</p>
<pre class="brush: php;">
$reader = new XMLReader();
$reader-&gt;open('obrovske.xml');

while ($reader-&gt;read()) {
  switch ($reader-&gt;nodeType) {
    case (XMLREADER::ELEMENT):
    if ($reader-&gt;localName == &quot;jmeno_elementu_ktery_chceme&quot;) {
      $node = $reader-&gt;expand();
      $dom = new DomDocument();
      $n = $dom-&gt;importNode($node,true);
      $dom-&gt;appendChild($n);
      $v = simplexml_import_dom($n);
    }
    break;
  }
}
</pre>
<p>Jak je vidět z této ukázky, tak myšlenkově postupuji takto. XMLReader je velmi rychlý i pro velké soubory &#8211; nepotřebuje si nejdřív soubor rozparsovat,  ale jde postupně. Takže si taháme jen ty nejmenší elementy, které potřebujeme a ty &#8222;nacpeme&#8220; do DomDocument a poté do simplexml. (je samozřejmě možné úplně vynechat simplexml a rovnou tahat data z DomDocument, ale mně se líbí více tento způsob &#8211; je také velice rychlý a přitom nabízí opravdu snadnou práci s daty). Dále už s tím pracujeme jako s objektem simplexml, který se hezky rozparsuje celý, ale protože je malinký, tak je to fofr.</p>
<p>Snad se vám bude mé řešení líbit a možná i někomu pomůže.</p>
]]></content:encoded>
			<wfw:commentRss>http://webexo.cz/15-velke-xml-soubory-rychle-a-hezky/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Začínáme</title>
		<link>http://webexo.cz/11-zaciname/</link>
		<comments>http://webexo.cz/11-zaciname/#comments</comments>
		<pubDate>Sat, 05 Jun 2010 17:43:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Tak různě...]]></category>

		<guid isPermaLink="false">http://localhost/?p=11</guid>
		<description><![CDATA[Po dlouhé době si můžu říct, že nejsem v časové tísni. Nic nemusí být do zítra hotové. Dokonce jsem se zase začal aktivně koukat po poptávkách,
Splním si své plány z minulého roku. Chtěl jsem si udělat web, kde si budu budovat nějaký svůj brand, zapisovat si své programátorské objevy, tak abych je vždy našel a [...]]]></description>
			<content:encoded><![CDATA[<p>Po dlouhé době si můžu říct, že nejsem v časové tísni. Nic nemusí být do zítra hotové. Dokonce jsem se zase začal aktivně koukat po poptávkách,</p>
<p>Splním si své plány z minulého roku. Chtěl jsem si udělat web, kde si budu budovat nějaký svůj brand, zapisovat si své programátorské objevy, tak abych je vždy našel a aby i třeba pomohly ostatním lidem. Věřím v IT komunitu, která by si měla pomáhat a do jisté míry spolupracovat.</p>
<p>Díky za pozornost <img src='http://webexo.cz/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://webexo.cz/11-zaciname/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

