<?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>Jan Janoušek &#187; Webdesign a programování</title>
	<atom:link href="http://blog.janjanousek.cz/category/webdesign-a-programovani/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.janjanousek.cz</link>
	<description>Píše Jan Janoušek, aka Hanz ...</description>
	<lastBuildDate>Thu, 01 Oct 2009 17:44:18 +0000</lastBuildDate>
	<language>cs</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Google Wave (také pro iPhone)</title>
		<link>http://blog.janjanousek.cz/2009/07/29/google-wave-take-pro-iphone/</link>
		<comments>http://blog.janjanousek.cz/2009/07/29/google-wave-take-pro-iphone/#comments</comments>
		<pubDate>Wed, 29 Jul 2009 15:43:59 +0000</pubDate>
		<dc:creator>Jan Janoušek</dc:creator>
				<category><![CDATA[Bláboly]]></category>
		<category><![CDATA[Novinky]]></category>
		<category><![CDATA[Tipy]]></category>
		<category><![CDATA[Webdesign a programování]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[wave]]></category>

		<guid isPermaLink="false">http://blog.janjanousek.cz/?p=68</guid>
		<description><![CDATA[Před pár dny jsem od Google dostal pozvánku do Google Wave dev preview. Prozatím to sice vypadá pěkně a celkem to i funguje, ale k verzi, která by se dala skutečně používat a nejen si s ní hrát to má ještě daleko. Popravdě, po prvních 5 minutách práce mi naskočila hláška, že došlo k chybě a je potřeba [...]]]></description>
			<content:encoded><![CDATA[<p>Před pár dny jsem od Google dostal pozvánku do <em>Google Wave dev preview</em>.</p>
<p>Prozatím to sice vypadá pěkně a celkem to i funguje, ale k verzi, která by se dala skutečně používat a nejen si s ní hrát to má ještě daleko. Popravdě, po prvních 5 minutách práce mi naskočila hláška, že došlo k chybě a je potřeba stránku znovu načíst. Stejně tak nefunguje ještě spousta ovládacích prvků, které tam již nyní jsou a aktuálně jsou spíše jen dekorací, protože nejsou dokončeny.</p>
<p>Na jednom ze screenshotů můžete vidět rozevřenou nabídku „Debug“, kde jestli jsem to správně pochopil, jsou mimo jiného velmi primitivně připravené některé ovládací prvky, aby je bylo možné použít, ale ve výsledné verzi budou určitě součástí GUI celé aplikace. Nyní mluvím hlavně o položce „Extensions“ (rozšíření), které se aktuálně spouštějí tím způsobem, že musíte vědět URL tohoto rozšíření a ručně ji zadat. Stejně tak i parametry pro toto rozšíření.</p>
<p>Zatím jsem zkoušel vytvořit jen pár základních rozšíření a musím říct, že to celkem funguje.</p>
<p>Dalším velkým nedostatkem celého Wave je nyní zřejmě rychlost.  Na to, aby se Wave vyrovnal klasickým IM klientům, bude dle mého názoru potřeba, aby běžel o hodně svižněji, jinak Google nepřinutí uživatele aby klasické IM opustili a přešli na Google Wave.</p>
<p>Na <a title="Google Wave on I/O" href="http://www.youtube.com/watch?v=v_UyVmITiYQ" target="_self">videu</a>, z představení Google Wave, jste mohli vidět věci, jako je tažení obrázku z plochy přímo do prohlížeče. Toto aktuálně funguje, ale pokud vím, tak pouze v Google Chrome. Testoval jsem to i v Firefoxu 3.5, ale tam to nefungovalo a poslední podporovaný prohlížeč je Safari, ale ten jsem netestoval.</p>
<p>Další zajímavou věcí na videu byl možnost „posunu v čase“. Tažením postníky je možné postupně vykreslovat konverzaci, podle toho, jak byl text přidáván. Toto sice funguje, ale je to zaprvé velmi pomalé a posuvník se občas seká.</p>
<p>Poslední můj postřeh z Google Wave, který bych ještě uvedl je nepřehlednost konverzace. I když Google tvrdí, že by Wave mohl nahradit email a IM klienty právě kvůli přehlednosti (příspěvky se strukturují), ovšem problém je v tom, že můžete teoreticky editovat cokoliv, kdykoliv a druhá strana se to nemusí dozvědět. Pokud diskusi sledujete, tak problém není, protože vás Wave na všechno upozorní, ovšem pokud si okno minimalizujete a mezitím vám do jednoho wave napíše 5 lidí a to ještě způsobem, že někdo reaguje na první příspěvek, někdo na poslední, další zase upraví svůj původní, nebo dokonce váš (toto lze), tak se v tom už nevyznáte. Můžete sice použít tu zmiňovanou časovou osu, ale jak jsem psal je to pomalé a osobně se mi to ne moc dobře používá. Možná jsem si jen ještě nezvykl, ale muset pokaždé projíždět celou konverzaci pomocí té osy, ještě když nevím, jestli je vůbec proč (nevím, zda tam něco nového je), se mi zdá naprosto nepraktické.</p>
<p>A nyní jedna věc, týkající se Google Wave, o které pokud vím ještě nikdo nepsal. Jde o klienta pro <strong>Google Wave pro iPhone</strong>.</p>
<p>Google nejspíše nehodlá dělat nativní aplikace pro iPhone a zůstává pouze u webových. Stejně tak je tomu i u Google Wave klienta pro iPhone. Pokud vás zajímá, jak vypadá, projděte si obrázky v galerii níže. Podle toho, jak jsem jej zatím testoval to vypadá, že je ještě méně stabilní a ještě více pomalejší, než Wave pro prohlížeče.  I když to vypadá, že vývojáři jej ještě neuveřejnili ani pro testování. Dá se na něj sice dostat, ale nejdříve se vám zobrazí informace o tom, že prohlížeč není podporován a vcelku nenápadný odkaz s možností ignorovat tuto skutečnost.</p>
<p>Více již v galerii.</p>

<a href='http://blog.janjanousek.cz/2009/07/29/google-wave-take-pro-iphone/img_0559/' title='IMG_0559'><img width="150" height="150" src="http://blog.janjanousek.cz/wp-content/IMG_0559-150x150.png" class="attachment-thumbnail" alt="IMG_0559" title="IMG_0559" /></a>
<a href='http://blog.janjanousek.cz/2009/07/29/google-wave-take-pro-iphone/img_0560/' title='IMG_0560'><img width="150" height="150" src="http://blog.janjanousek.cz/wp-content/IMG_0560-150x150.png" class="attachment-thumbnail" alt="IMG_0560" title="IMG_0560" /></a>
<a href='http://blog.janjanousek.cz/2009/07/29/google-wave-take-pro-iphone/img_0561/' title='IMG_0561'><img width="150" height="150" src="http://blog.janjanousek.cz/wp-content/IMG_0561-150x150.png" class="attachment-thumbnail" alt="IMG_0561" title="IMG_0561" /></a>
<a href='http://blog.janjanousek.cz/2009/07/29/google-wave-take-pro-iphone/img_0562/' title='IMG_0562'><img width="150" height="150" src="http://blog.janjanousek.cz/wp-content/IMG_0562-150x150.png" class="attachment-thumbnail" alt="IMG_0562" title="IMG_0562" /></a>
<a href='http://blog.janjanousek.cz/2009/07/29/google-wave-take-pro-iphone/img_0564/' title='IMG_0564'><img width="150" height="150" src="http://blog.janjanousek.cz/wp-content/IMG_0564-150x150.png" class="attachment-thumbnail" alt="IMG_0564" title="IMG_0564" /></a>
<a href='http://blog.janjanousek.cz/2009/07/29/google-wave-take-pro-iphone/img_0565/' title='IMG_0565'><img width="150" height="150" src="http://blog.janjanousek.cz/wp-content/IMG_0565-150x150.png" class="attachment-thumbnail" alt="IMG_0565" title="IMG_0565" /></a>
<a href='http://blog.janjanousek.cz/2009/07/29/google-wave-take-pro-iphone/img_0566/' title='IMG_0566'><img width="150" height="150" src="http://blog.janjanousek.cz/wp-content/IMG_0566-150x150.png" class="attachment-thumbnail" alt="IMG_0566" title="IMG_0566" /></a>
<a href='http://blog.janjanousek.cz/2009/07/29/google-wave-take-pro-iphone/img_0563/' title='IMG_0563'><img width="150" height="150" src="http://blog.janjanousek.cz/wp-content/IMG_0563-150x150.png" class="attachment-thumbnail" alt="IMG_0563" title="IMG_0563" /></a>
<a href='http://blog.janjanousek.cz/2009/07/29/google-wave-take-pro-iphone/wave1/' title='wave1'><img width="150" height="150" src="http://blog.janjanousek.cz/wp-content/wave1-150x150.jpg" class="attachment-thumbnail" alt="wave1" title="wave1" /></a>
<a href='http://blog.janjanousek.cz/2009/07/29/google-wave-take-pro-iphone/wave2/' title='wave2'><img width="150" height="150" src="http://blog.janjanousek.cz/wp-content/wave2-150x150.jpg" class="attachment-thumbnail" alt="wave2" title="wave2" /></a>
<a href='http://blog.janjanousek.cz/2009/07/29/google-wave-take-pro-iphone/wave3/' title='wave3'><img width="150" height="150" src="http://blog.janjanousek.cz/wp-content/wave3-150x150.jpg" class="attachment-thumbnail" alt="wave3" title="wave3" /></a>
<a href='http://blog.janjanousek.cz/2009/07/29/google-wave-take-pro-iphone/wave4/' title='wave4'><img width="150" height="150" src="http://blog.janjanousek.cz/wp-content/wave4-150x150.jpg" class="attachment-thumbnail" alt="wave4" title="wave4" /></a>
<a href='http://blog.janjanousek.cz/2009/07/29/google-wave-take-pro-iphone/wave/' title='wave'><img width="150" height="150" src="http://blog.janjanousek.cz/wp-content/wave-150x150.jpg" class="attachment-thumbnail" alt="wave" title="wave" /></a>

]]></content:encoded>
			<wfw:commentRss>http://blog.janjanousek.cz/2009/07/29/google-wave-take-pro-iphone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flash &#8211; nahrávání fontů za běhu</title>
		<link>http://blog.janjanousek.cz/2009/01/27/flash-nahravani-fontu-za-behu/</link>
		<comments>http://blog.janjanousek.cz/2009/01/27/flash-nahravani-fontu-za-behu/#comments</comments>
		<pubDate>Tue, 27 Jan 2009 22:28:50 +0000</pubDate>
		<dc:creator>Jan Janoušek</dc:creator>
				<category><![CDATA[Nezařazené]]></category>
		<category><![CDATA[Tipy]]></category>
		<category><![CDATA[Webdesign a programování]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[fonty]]></category>

		<guid isPermaLink="false">http://blog.janjanousek.cz/?p=56</guid>
		<description><![CDATA[Pokud se o Flash zajímáte, věřím tomu, že jste již někdy potřebovali v aplikaci používat větší množství fontů a to zrovna podle toho, který font si uživatel zvolil (nejčastější případ je textový editor ve flashi). Já tento problém řešil už několikrát a bohužel se mi pořád nedařilo nalézt řešení. Prošel jsem hodně zahraničním webů (české= [...]]]></description>
			<content:encoded><![CDATA[<p>Pokud se o Flash zajímáte, věřím tomu, že jste již někdy potřebovali v aplikaci používat větší množství fontů a to zrovna podle toho, který font si uživatel zvolil (nejčastější případ je textový editor ve flashi). Já tento problém řešil už několikrát a bohužel se mi pořád nedařilo nalézt řešení. Prošel jsem hodně zahraničním webů (české= téměř neexistují) s návody jak na to, ale nikdy mi to nefungovalo a bohužel na daných webech chyběla ukázka v podobě zdrojových *.fla souborů.</p>
<p>Až dnes se mi podařilo konečně objevit řešení a proto bych se o něj rád podělil. Krokem číslo jedna je tedy <a title="Flash - sdílení fontů za běhu" href="http://blog.janjanousek.cz/wp-content/fontsharing.zip" target="_self">stáhnout si ukázkové soubory</a>. Připravil jsem v nich funkční ukázku, podle níž byste měli být schopni použít tuto techniku i bez dalšího návodu. Ale přesto, se ještě rozepíšu.</p>
<p>Nejprve, ale proč vůbec používat načítání fontů za běhu? Odpověď je vcelku jednoduchá a to, protože pokud do SWF souboru přibalíte font, tak jeho velikost s každým takovým fontem naroste cca o 150kb, což je při použití 10 fontů 1,5MB, což je vážně hodně! A navíc je zbytečné načítat tolik dat, když je uživatel potom nepoužije.</p>
<p>Druhou věcí je omezení, které tato technika sebou nese. Největším je asi, že nelze použít font dříve, než je načten. Na první pohled to vypadá logicky, ale při vývoji se na to často zapomíná (pokud tedy vytvoříte textové pole, přiřadíte mu font a až poté tento font načtete, text se nezobrazí).<br />
Druhým omezením, které stojí za zmínku, je že pokud chcete používat více řezů daného fontu (tučné, nebo kurzíva), pak musíte přibalit každý z těchto řezů a to včetně kombinací. Tedy Například Verdanu, tučnou Verdanu, Verdanu v kurzívě a také tučnou Verdanu v kurzívě. Jinak by se opět text nezobrazil.</p>
<p>A nyní již k samotnému postupu:</p>
<ol>
<li>Vytvořte prázdný soubor s názvem &#8222;verdana.fla&#8220;</li>
<li>Pomocí nástroje &#8222;Text&#8220; napište do tohoto souboru jakýkoliv text, nastavte jej jako dynamický, přiřaďte font Verdana a přibalte znaky, které budete potřebovat (přes tlačítko &#8222;embed&#8220; v panelu &#8222;Properties&#8220;).</li>
<li>Vytvořte z tohoto textového pole MovieClip s libovolným názvem</li>
<li>Do tohoto MovieClipu vložte tento ActionScript 2.0 kód: <em>_parent._parent.onFontLoad(&#8222;Verdana&#8220;);</em></li>
<li>V knihovně označte daný MovieClip a přes pravé tlačítko myši si v kontextovém okně zvolte &#8222;Linkage&#8230;&#8220;</li>
<li>Do pole &#8222;Identifier&#8220; napište &#8222;font_mc&#8220; (takto jej budeme identifikovat)</li>
<li>Zaškrtněte políčka &#8222;Export for runtime sharing&#8220; a &#8222;Export in first frame&#8220;</li>
<li>Do pole URL zadejte URL tohoto vyexportovaného souboru. V našem případě &#8222;verdana.swf&#8220;</li>
<li>Potvrďte a vyexportujte SWF soubor</li>
<li>Vytvořte nový soubor verdanaLoader.fla ve stejném adresáři</li>
<li>Zkopírujte z knihovny patřící souboru &#8222;verdana.fla&#8220; námi vytvořený MovieClip do knihovny pro soubor &#8222;verdanaLoader.fla&#8220;</li>
<li>Přetáhněte tento zkopírovaný MovieClip do plochy (toto je důležité, nestačí jej mít jen v knihovně)</li>
<li>Opět si otevřete dialogové okno &#8222;Linkage..&#8220; (viz. bod 5.), ale tentokrát pro ten zkopírovaný MovieClip</li>
<li>Do pole &#8222;Identifier&#8220; zadejte opět &#8222;font_mc&#8220; (stejný jako v bodě 6.)</li>
<li>Zaškrtněte pole &#8222;Import for runtime sharnig&#8220;</li>
<li>Do pole &#8222;URL&#8220; zadejte &#8222;verdana.swf&#8220;. Tedy název SWF souboru s fontem.</li>
<li>Vyexportujte soubor &#8222;verdanaLoader.swf&#8220;. Tímto máme to nejdůležitější za sebou.</li>
<li>Nyní si stačí vytvořit třetí soubor, do kterého budete načítat soubor &#8222;verdanaLoader.swf&#8220;. V tomto novém souboru budete mít dostupnou událost &#8222;onFontLoad&#8220;, kterou jsme si vytvořili v bodě 4. Jakmile, tedy bude zavolána, víme, že je font připraven k použití a můžeme jej aplikovat na nějaké textové pole (příklad je v souboru main.swf, respektive main.fla).</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://blog.janjanousek.cz/2009/01/27/flash-nahravani-fontu-za-behu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Heroku &#8211; Ruby on Rails pro všechny</title>
		<link>http://blog.janjanousek.cz/2008/02/10/heroku-ruby-on-rails-pro-sechny/</link>
		<comments>http://blog.janjanousek.cz/2008/02/10/heroku-ruby-on-rails-pro-sechny/#comments</comments>
		<pubDate>Sun, 10 Feb 2008 18:34:11 +0000</pubDate>
		<dc:creator>Jan Janoušek</dc:creator>
				<category><![CDATA[Novinky]]></category>
		<category><![CDATA[Tipy]]></category>
		<category><![CDATA[Webdesign a programování]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://blog.janjanousek.cz/2008/02/10/heroku-ruby-on-rails-pro-sechny/</guid>
		<description><![CDATA[Hlavním problémem rozvoje Ruby on Rails u nás je, že není moc hostingů, které by jeho podporu nabízely a když už jsou tak nejsou rozhodně tak levné jako hostingy s PHP. Pokud byste, ale rádi s Ruby on Rails začali, nezoufejte. Je tu pro vás Heroku.  Heroku je Ruby on Rails hosting, který je sám [...]]]></description>
			<content:encoded><![CDATA[<p>Hlavním problémem rozvoje Ruby on Rails u nás je, že není moc hostingů, které by jeho podporu nabízely a když už jsou tak nejsou rozhodně tak levné jako hostingy s PHP.</p>
<p>Pokud byste, ale rádi s Ruby on Rails začali, nezoufejte. Je tu pro vás <a title="Heroku.com - Ruby on Rails hosting" href="http://heroku.com/" target="_blank">Heroku</a>.  Heroku je Ruby on Rails hosting, který je sám poháněn Ruby on Rails. Jeho hlavní výhodou je, že je zdarma. Heroku, ale není jen hosting. Zároveň obsahuje online vývojové prostředí, které ovšem pokud nechcete, nemusíte používat, protože je možno provést jak import, tak i export souborů.</p>
<p>Další výhodou je, že můžete vytvořit neomezený počet projektů (tedy aspoň nikde není napsáno nic o žádném omezení).</p>
<p>Co se mi velmi líbí je, že si můžete vybrat, zda bude váš projekt veřejný, či soukromý (myšleno ve smyslu přístupu na web). A poslední věc, kterou bych chtěl vyzdvihnout a která mě velmi zaujala je, že můžete bez problémů doinstalovat jakýkoliv plugin, či gem.</p>
<p>Heroku sice stále běží v betaverzi a je potřeba mít pozvánku, nebo se zaregistrovat a počkat, než vám pozvánka přijde, ale myslím, že to stojí za to.</p>
<p>PS: Pokud se vám nechce čekat, než vás pozvou, tak mi tu zanechte komentář a já vám pošlu pozvánku.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.janjanousek.cz/2008/02/10/heroku-ruby-on-rails-pro-sechny/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>JavaScript Inline Text Editor</title>
		<link>http://blog.janjanousek.cz/2007/12/29/javascript-inline-text-editor/</link>
		<comments>http://blog.janjanousek.cz/2007/12/29/javascript-inline-text-editor/#comments</comments>
		<pubDate>Sat, 29 Dec 2007 13:47:55 +0000</pubDate>
		<dc:creator>Jan Janoušek</dc:creator>
				<category><![CDATA[Webdesign a programování]]></category>
		<category><![CDATA[editor]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://blog.janjanousek.cz/2007/12/29/javascript-inline-text-editor/</guid>
		<description><![CDATA[Tak a mám tu pro vás další JavaScriptové &#8222;udělátko&#8220;. Tentokrát jde o velice jednoduchý editor textu (nebo spíš HTML kódu stránky). Nechce se mi to moc popisovat a tak raději uvedu příklad. Jeho funkčnost jsem testoval na IE7, IE 6, Opeře, FF2 a také Safari (vše pod Windows). Kód je velice jednoduchý. Šlo mi o [...]]]></description>
			<content:encoded><![CDATA[<p>Tak a mám tu pro vás další JavaScriptové &#8222;udělátko&#8220;. Tentokrát jde o velice jednoduchý editor textu (nebo spíš HTML kódu stránky). Nechce se mi to moc popisovat a tak raději uvedu <a href="http://blog.janjanousek.cz/2007/12/29/javascript-inline-text-editor/ukazka-javascript-inline-text-editoru/" rel="attachment wp-att-38" title="Ukázka JavaScript Inline Text Editoru">příklad</a>. Jeho funkčnost jsem testoval na IE7, IE 6, Opeře, FF2 a také Safari (vše pod Windows). Kód je velice jednoduchý. Šlo mi o to vytvořit co nejjednodušší script, který by šel dále rozšiřovat dle potřeby. Script můžete jako vždy používat a měnit dle vlastního uvážení (copyright v hlavičce musí zůstat), ale jen pro nekomerční účely.</p>
<p>Jak používat tuto &#8222;knihovnu&#8220;?</p>
<p>Nejdříve si stáhněte <a href="http://blog.janjanousek.cz/wp-content/jsinlineeditor.js" title="JavaScript Inline Text Editor">JavaScript Inline Text Editor</a>. A poté jej vložte do příslušné stránky pomocí:</p>
<pre class="HTML">&lt;script type="text/javascript" src="jsinlineeditor.js"&gt;&lt;/script&gt;</pre>
<p>Dále je potřeba vytvořit konstruktor:</p>
<pre class="JS">var mujEditor = new Edit();</pre>
<p>Teď máte editor připraven k použití a stačí jej jen aplikovat na jednotlivé prvky stránky:</p>
<pre class="JS">mujEditor.add( ELEMENT );</pre>
<p>Nebo častější možnost s předvolbama:</p>
<pre class="JS">mujEditor.add( ELEMENT, {typ:TYP, output:FUNKCE });</pre>
<p>A nakonec příklad:</p>
<pre class="JS">var inlineEditor = new Edit();
inlineEditor.add( document.getElementById('idPrvku'), {typ:'textarea', output:function(r){ alert(r); } });</pre>
<p>Teď bych měl vysvětlit, jaké jsou jednotlivé předvolby. Takže první důležitá věc je, že předvolby jsou zcela volitelné, takže je použít můžete, ale nemusíte. První předvolba &#8222;typ&#8220; určuje, jestli se bude obsah zvoleného elementu editovat v jednořádkovém, nebo víceřádkovém editoru. Může mít hodnoty &#8222;textarea&#8220;, nebo &#8222;input&#8220; (tato hodnota je výchozí a není třeba jí uvádět). Druhá předvolba je &#8222;output&#8220;. Slouží k tomu, abychom mohli změněný text také zpracovat (například odeslat změnu pomocí <a href="http://blog.janjanousek.cz/2007/11/04/ajax/" title="AJAXová knihovna">AJAX</a>u). Hodnota musí být vždy funkce.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.janjanousek.cz/2007/12/29/javascript-inline-text-editor/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>AJAX</title>
		<link>http://blog.janjanousek.cz/2007/11/04/ajax/</link>
		<comments>http://blog.janjanousek.cz/2007/11/04/ajax/#comments</comments>
		<pubDate>Sun, 04 Nov 2007 19:17:44 +0000</pubDate>
		<dc:creator>Jan Janoušek</dc:creator>
				<category><![CDATA[Webdesign a programování]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://blog.janjanousek.cz/2007/11/04/ajax/</guid>
		<description><![CDATA[V dnešní době je velmi populární mít nějakou tu část stránky poháněnou AJAX-em. Pro tento účel existuje spousta frameworků a knihoven. Tyto frameworky mají, ale jednu nevýhodu. Většinou obsahují zbytečnosti, které nevyužijete a zcela zbytečně se načítají (pochybuji, že už někdo někdy využil na jedné stránce všechny možnosti daných frameworků). Sice jsem moc nehledal, ale [...]]]></description>
			<content:encoded><![CDATA[<p>V dnešní době je velmi populární mít nějakou tu část stránky poháněnou AJAX-em. Pro tento účel existuje spousta frameworků a knihoven. Tyto frameworky mají, ale jednu nevýhodu. Většinou obsahují zbytečnosti, které nevyužijete a zcela zbytečně se načítají (pochybuji, že už někdo někdy využil na jedné stránce všechny možnosti daných frameworků).</p>
<p>Sice jsem moc nehledal, ale zjistil jsem, že není moc knihoven, které by uměly jen to jedno a to AJAX a proto jsem si pro své potřeby napsal jednoduchou knihovnu, pro práci s AJAX-em. A protože nevidím důvod, proč se o ní nepodělit, tak jí také bez problému uveřejním, <a href="http://blog.janjanousek.cz/wp-content/ajax.js" title="AJAX" target="_blank">ke stažení</a> (1,14kB). Jedinou podmínku, kterou kladu pro její používání je, že nesmíte odstranit komentáře v ní obsažené.</p>
<p>Použití je velmi jednoduché. Knihovnu je nejprve třeba vložit do stránky pomocí:</p>
<pre class="HTML">&lt;script type="text/javascript" src="AJAX.js"&gt;&lt;/script&gt;</pre>
<p>A dále jen stačí zavolat příslušnou funkci s danými parametry:</p>
<pre class="JS">var myAJAX = new Ajax('volanaAdresa', {data:'promenna=hodnota&amp;promenna2=hodnota2', metoda:'POST', vratit:'TEXT'});</pre>
<p>Přičemž jediný povinný parametr je volaná adresa. Výchozí hodnoty projsou:</p>
<ul>
<li>data = &#8222;&#8220;</li>
<li>metoda = &#8222;POST&#8220;</li>
<li> vratit = &#8222;TEXT&#8220;</li>
</ul>
<p>Metoda může být &#8222;POST&#8220;, nebo &#8222;GET&#8220; a vratit &#8222;TEXT&#8220;, nebo &#8222;XML&#8220;.</p>
<p>Pokud bude budete pomocí AJAX-u data i načíta, je potřeba k nim přistupovat pomocí funkce onComplete, která se automaticky volá po dokončení scriptu.Vypadalo by to následovně:</p>
<pre class="JS">var myAJAX = new Ajax('volanaAdresa', {data:'promenna=hodnota'});
myAJAX.onComplete = function(vraceno){
   alert(vraceno);
}</pre>
<p>Kromě funkce onComplete je k dispozici funkce onError, která se zavolá při chybě a také funkce onProgress, která se volá během načítání.</p>
<p>Nakonec uvedu kompletní příklad:</p>
<pre class="HTML">&lt;script type="text/javascript" src="AJAX.js"&gt;&lt;/script &gt;</pre>
<pre class="JS">var aj = new Ajax('test.php', {data:'a=2&amp;b=4&amp;operace=scitani', metoda:'GET'});
aj.oProgress = function(){ alert('AJAX pracuje'); }
aj.onComplete = function(soucet){ alert(soucet); }
aj.onError = function(chyba){ alert(chyba); }</pre>
<p>A &#8222;test.php&#8220; by mohl vypadat třeba:</p>
<pre class="PHP">&lt;?php
if($_GET['operace'] == 'scitani'){
   echo $_GET['a']+$_GET['b'];
}
?&gt;</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.janjanousek.cz/2007/11/04/ajax/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jsDOM</title>
		<link>http://blog.janjanousek.cz/2007/08/29/jsdom/</link>
		<comments>http://blog.janjanousek.cz/2007/08/29/jsdom/#comments</comments>
		<pubDate>Wed, 29 Aug 2007 19:42:42 +0000</pubDate>
		<dc:creator>Jan Janoušek</dc:creator>
				<category><![CDATA[Webdesign a programování]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jsDOM]]></category>

		<guid isPermaLink="false">http://blog.janjanousek.cz/?p=28</guid>
		<description><![CDATA[Dnes jsem původně pro svou potřebu naprogramoval velmi jednoduchou funkci, kerá velmi usnadňuje vytváření DOM pomocí JavaScriptu. Nazval jsem jí jednoduše jsDOM. Můžete se podívat na malou ukázku, či si ho stáhnout. Použití je velmi jednoduché. Například takto může vypadat script, který vytvoří jednoduchou tabulku: document.body.appendChild( TAG.table({}, TAG.tr({}, TAG.th('ID'), TAG.th('Jméno'), TAG.th('Příjmení') ), TAG.tr({}, TAG.td('1'), TAG.td('Jan'), [...]]]></description>
			<content:encoded><![CDATA[<p>Dnes jsem původně pro svou potřebu naprogramoval velmi jednoduchou funkci, kerá velmi usnadňuje vytváření DOM pomocí JavaScriptu. Nazval jsem jí jednoduše jsDOM. Můžete se podívat na malou <a href="http://janousek.honza.sweb.cz/uloziste/jsDOM.html">ukázku</a>, či si ho <a href="http://janousek.honza.sweb.cz/uloziste/jsDOM.js">stáhnout</a>.<br />
Použití je velmi jednoduché. Například takto může vypadat script, který vytvoří jednoduchou tabulku:</p>
<pre class="JS"> document.body.appendChild(
 TAG.table({},
 TAG.tr({},
 TAG.th('ID'),
 TAG.th('Jméno'),
 TAG.th('Příjmení')
 ),
 TAG.tr({},
 TAG.td('1'),
 TAG.td('Jan'),
 TAG.td('Janoušek')
 ),
 TAG.tr({},
 TAG.td('2'),
 TAG.td('Michal'),
 TAG.td('Nogol')
 )
 )
 );</pre>
<pre></pre>
<p>Jak vidíte, použití je úplně jednoduché. Zápis je vždy &#8222;TAG.<em>název tagu</em>({<em>parametry</em>}, <em>další tagy</em>)&#8220;</p>
<p>Takže například &#8222;TAG.a({href:&#8217;http://www.google.com&#8217;, onclick:function(){alert(&#8216;Vstupujete na stránku Google.com !&#8217;);}})&#8220;</p>
<p>Nakonec stačí DOM aplikovat pomocí metody <em>appendChild</em>.</p>
<p>V čem je tento způsob vytváření DOM výhodný?</p>
<ol>
<li>Události se na rozdíl od použití innerHTML mohou odkazovat do objektů, kde vznikly (pomocí <em>call()</em>) &#8211; což je důvod, proč jsem tuto funkci vytvořil.</li>
<li>Je to rychlejší, než psát pořád dokola <em>document.createElement()</em>, <em>document.appendChild()</em> a přiřazovat attributy</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://blog.janjanousek.cz/2007/08/29/jsdom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>První zkušenosti s Ruby on Rails hostingem</title>
		<link>http://blog.janjanousek.cz/2007/08/27/prvni-zkusenosti-s-ruby-on-rails-hostingem/</link>
		<comments>http://blog.janjanousek.cz/2007/08/27/prvni-zkusenosti-s-ruby-on-rails-hostingem/#comments</comments>
		<pubDate>Mon, 27 Aug 2007 22:11:18 +0000</pubDate>
		<dc:creator>Jan Janoušek</dc:creator>
				<category><![CDATA[Bláboly]]></category>
		<category><![CDATA[Webdesign a programování]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://blog.janjanousek.cz/?p=27</guid>
		<description><![CDATA[Tak dneska jsem se konečně odhodlal vyzkoušet si svůj první hosting s Ruby on Rails. &#8222;Rozhodl&#8220; jsem se pro railshosting.cz, protože jako jediný co znám nabízí Ruby on Rails hosting na zkoušku zdarma (na 2 měsíce). Během pár hodin po registraci jsem obdržel email se všemi potřebnými informacemi pro zprovoznění. Do této chvíle to bylo [...]]]></description>
			<content:encoded><![CDATA[<p>Tak dneska jsem se konečně odhodlal vyzkoušet si svůj první hosting s Ruby on Rails. &#8222;Rozhodl&#8220; jsem se pro <a href="http://www.railshosting.cz/" rel="nofolow">railshosting.cz</a>, protože jako jediný co znám nabízí Ruby on Rails hosting na zkoušku zdarma (na 2 měsíce).<br />
Během pár hodin po registraci jsem obdržel email se všemi potřebnými informacemi pro zprovoznění.<br />
Do této chvíle to bylo všechno &#8222;vpoho&#8220;. Ale to mi nevydrželo dlouho. Teď přišla ta pro mě náročnější část (hlavně psychicky). Nejdřív to byla instalace Subversion a nahrání souborů do SVN na web (podle Screencastu na railshosting.cz). Poté následovala instalace <a href="http://www.capify.org/" rel="nofolow">Capistrana</a>. Není na tom sice nic těžkého. Stačí v RubyGem Package Manageru zadat:</p>
<pre> gem install -y capistrano</pre>
<p>A je to. Jenže mi nikdo už neřekl (a já si nepřečetl), že mi Capistrano nebude fungovat na Ruby 1.8.6. Takže dalším krokem byla instalace Ruby 1.8.5. a následná reinstalace Capistrana.</p>
<p>Už jsem si říkal, že to bude všechno &#8222;OK&#8220; a nejhorší mám za sebou, ale ne. Capistrano je totiž nově ve verzi 2.0. A v této verzi jsou bohužel velké změny. Screencasty za railshosting.cz byly rázem k ničemu. A navíc soubor pro zprovoznění projektu, který jsem od nich obdržel emailem byl pro Capistrano verze 1.X a né 2.0.</p>
<p>Řešení, ke kterému jsem po pár hodinách hledání na webu a komunikací s <strong>výbornou</strong> podporou railshosting.cz, došel je následující:</p>
<p>Aplikování Capistrana na aktuální projekt se nedělá pomocí:</p>
<pre> cap --apply-to ./</pre>
<p>Jak je vidět v Sceencastu, ale pomocí:</p>
<pre> capify .</pre>
<p>Obsah souboru <em>deploy.rb</em>, který obdržíte emailem je potřeba změnit na:</p>
<pre> set :application, "NÁZEV_APLIKACE"
 set :repository, "SVN_SERVER"
 set :scm_username, "svn"
 set :scm_password, "HESLO_K_SVN"

 role :web, "SERVER"
 role :app, "SERVER"
 role :db, "SERVER", :primary =&gt; true

 set :deploy_to, "/home/deployer/app/"
 set :user, "deployer"
 ssh_options[:port] = 5028

 task :after_update_code, :roles =&gt; [:app, :db] do
 # link database configuration
 run "ln -nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml"
 end

 desc "Stop the webserver on the old release and start the server for the new release"
 namespace :deploy do
 task :restart, :roles =&gt; :app do
 run "/usr/local/etc/rc.d/mongrel_cluster.sh restart"
 end
 end</pre>
<p>Kde slova psaná velkými písmeny jsou hodnoty z původního <em>deploy.rb</em>.</p>
<p>Poté stačí v konzoli zadat:</p>
<pre> cap deploy:migrations</pre>
<p>Zbylý postup je totožný s Sceencasty, až na příkazy pro Capistrano. Seznam příkazů vyvoláte zadáním &#8222;cap -T&#8220;.</p>
<p>Věřte, nebo ne, ale tohle mi zabralo většinu dnešního dne. Chtěl bych ještě tímhle poděkovat technické podpoře <a href="http://www.railshosting.cz/" rel="nofolow">railshosting.cz</a>, za ochotu pomoct a to i když nejsem (zatím) platící zákazník.</p>
<p>Jo a pokud vás zajímá, jakou aplikaci jsem se snažil celý den &#8222;rozchodit&#8220;, pak věřte, že jde o takovou malou &#8222;online kancelář&#8220;, kterou si programuju ve volném čase pro zábavu. Odkaz vám sem nedám, ale věřím, že když budete chtít tak to najdete (když se tak stane, tak uživatelské jméno i heslo je &#8222;demo&#8220;).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.janjanousek.cz/2007/08/27/prvni-zkusenosti-s-ruby-on-rails-hostingem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jak na oncheck u checkboxu v IE?</title>
		<link>http://blog.janjanousek.cz/2007/08/23/jak-na-oncheck-u-checkboxu-v-ie/</link>
		<comments>http://blog.janjanousek.cz/2007/08/23/jak-na-oncheck-u-checkboxu-v-ie/#comments</comments>
		<pubDate>Thu, 23 Aug 2007 11:57:40 +0000</pubDate>
		<dc:creator>Jan Janoušek</dc:creator>
				<category><![CDATA[Webdesign a programování]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://blog.janjanousek.cz/?p=26</guid>
		<description><![CDATA[Pokud jste někdy programovali nějakou JavaScriptovou aplikaci, tak jste jistě narazili na problém s checkboxem v IE. Jde o to, že událost oncheck se nevolá při změně stavu, ale až při kliknutí na jiný prvek stránky, což je chyba. Správně by se měla zavolat už při té změně stavu. Ukázka kódu, který bude v IE [...]]]></description>
			<content:encoded><![CDATA[<p>Pokud jste někdy programovali nějakou JavaScriptovou aplikaci, tak jste jistě narazili na problém s checkboxem v IE. Jde o to, že událost oncheck se nevolá při změně stavu, ale až při kliknutí na jiný prvek stránky, což je chyba. Správně by se měla zavolat už při té změně stavu.</p>
<p> Ukázka kódu, který bude v IE fungovat chybně, ale v ostatních prohlížečích správně:</p>
<pre> &lt;script type="text/javascript"&gt; function zmenaStavu(){ alert('Změna stavu!'); } &lt;/script&gt; &lt;input type="checkbox" onchange="zmenaStavu();" /&gt;</pre>
<p> Jak to, ale zařídit, aby se choval IE korektně?<br /> Stačí tato úprava:</p>
<pre> &lt;script type="text/javascript"&gt; function zmenaStavu(){ alert('Změna stavu!'); } &lt;/script&gt; &lt;input type="checkbox" onchange="zmenaStavu();" onclick="this.blur(); this.focus()" /&gt;</pre>
<p> Jde jen o to, že nejdříve zařídíme, aby checkbox stratil focus (<i>this.blur();</i>), čímž jsme dosáhli toho, že se provede událost onchange. A následně jsme vrátili focus zpátky (<i>this.focus();</i>). Vracení focus není sice nutné, ale pokud někdo využívá pro navigaci ve formuláři klávesy tab, tak by nemohl přejít na další pole formuláře.</p>
<p> Jak to udělat, abyste nemuseli psát tento script u všech checkboxů ručně?<br /> Stačí vložit na začátek stránky:</p>
<pre> &lt;script type="text/javascript"&gt; function addEvent(el, ev, fun){ if(el.addEventListener){ el.addEventListener(ev, fun, false); }else{ el.attachEvent('on'+ev, fun); } }

 function repareCheckboxs(){ var a = document.getElementsByTagName('input'); for(var i=0; i&lt;a.length; i++){ var b = a[i].getAttribute('type'); if(b &amp;&amp; b == 'checkbox'){ addEvent(a[i], 'click', function(){this.blur(); this.focus();}); } } }

 addEvent(window, 'load', repareCheckboxs); &lt;/script&gt;</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.janjanousek.cz/2007/08/23/jak-na-oncheck-u-checkboxu-v-ie/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

