<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>admin's blog</title>
  <link rel="alternate" type="text/html" href="http://dev20.info/blog/1"/>
  <link rel="self" type="application/atom+xml" href="http://dev20.info/blog/1/atom/feed"/>
  <id>http://dev20.info/blog/1/atom/feed</id>
  <updated>2007-03-27T19:25:10-07:00</updated>
  <entry>
    <title>Do you want to program web apps with CherryPy?</title>
    <link rel="alternate" type="text/html" href="http://dev20.info/do-you-want-program-web-apps-cherrypy" />
    <id>http://dev20.info/do-you-want-program-web-apps-cherrypy</id>
    <published>2007-05-22T03:22:50-07:00</published>
    <updated>2007-05-22T03:43:56-07:00</updated>
    <author>
      <name>admin</name>
    </author>
    <category term="CherryPy" />
    <category term="Kniha" />
    <category term="Packt" />
    <category term="Programování" />
    <category term="Python" />
    <category term="web" />
    <summary type="html"><![CDATA[<!--paging_filter--><p>I had a chance to read a book named <a href="http://www.packtpub.com/CherryPy/book" rel="CONTEXTLINKS_NEW_WINDOW">CherryPy Essentials</a> <a href="http://www.packtpub.com/CherryPy/book" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a> with sub-title &bdquo;Rapid Python Web Application Developments - Design, develop, test, and deploy your Python web applications easily&ldquo;, author Sylvain Hellegouarch. The book has been issued in March 2007 by the <a href="http://www.packtpub.com/" rel="CONTEXTLINKS_NEW_WINDOW">Packt Publishing</a> <a href="http://www.packtpub.com/" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a> in their &bdquo;From Technologies to Solutions&ldquo; edition.</p>
<br class="clear" />

    ]]></summary>
    <content type="html"><![CDATA[<!--paging_filter--><p>I had a chance to read a book named <span class="contextlinks contextlinks-external"><span class="contextlinks-text"><a href="http://www.packtpub.com/CherryPy/book" rel="CONTEXTLINKS_NEW_WINDOW">CherryPy Essentials</a></span> <a href="http://www.packtpub.com/CherryPy/book" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a></span> with sub-title &bdquo;Rapid Python Web Application Developments - Design, develop, test, and deploy your Python web applications easily&ldquo;, author Sylvain Hellegouarch. The book has been issued in March 2007 by the <span class="contextlinks contextlinks-external"><span class="contextlinks-text"><a href="http://www.packtpub.com/" rel="CONTEXTLINKS_NEW_WINDOW">Packt Publishing</a></span> <a href="http://www.packtpub.com/" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a></span> in their &bdquo;From Technologies to Solutions&ldquo; edition.</p>
<p>I have to say I was enjoying that book. I was looking forward to a book in English, after all that sad experience with Czech books, translated from English originals, full of objective or stylistic mistakes (Computer Press is the worst example for such terrible behaviour).</p>
<p>As you maybe know, I don&#8217;t like e-books. I love to take the book with me everywhere I am - into the train, on my vacations, in the bed (mainly in the bed; I enjoy the book in the bed more than in another place). When I was looking for a framework and a language for development a short time ago, Python and its add-on libraries was as one of the most mentioned candidates. So when I could read a new book about Python library CherryPy, I didn&#8217;t hesitate.</p>
<p>The CherryPy Essentials book has been edited by Packt Publishing. Packt is a relatively new publisher; the first book was published in 2004. The Packt Publishing focuses mainly on books for developers, open-source software and modern programming techniques and tools.</p>
<p>The book I&#8217;m writing about begins with two (fortunately short) chapters with obligatory things such as &bdquo;What is the CherryPy, where it comes from, how I can install it, what I find inside...&ldquo; The third chapter, CherryPy Overview, starts immediately with an example - listing of the source code of a simple CherryPy application, Notes. The author illustrates the basic work with the CherryPy on this example: Where put the files, how to start testing HTTP server, how to configure it, what is the principle of Object Publisher Engine; he talks about the CherryPy modules and tools and shortly describes the exceptions and errors engine. There is too much information, concentrated in a small area. I have to accord that I was really confused after reading this chapter and wanted to start reading something else, more interesting, at that moment, such as the Yellow Pages.</p>
<p>My confusion was fortified in the Chapter Four. That chapter begins with information about the HTTP implementation in the CherryPy - and my confusion reached its maximum at the moment I saw <em>a server binding at the TCP/IP port 100100</em>. In the next paragraph even &bdquo;binding at the port 100100 and IP address 1102.168.0.12&ldquo; appeared. I thought I surely omitted some important information about the special number format in the CherryPy, so I read through the previous chapters again but found nothing. I read on, confused, and finally I found an example where &bdquo;encoding ISO-88510-15&ldquo; was used. Hooray, it got across to me! Some bad goblin replaced all occurrences of the character &bdquo;9&ldquo; with the string &bdquo;10&ldquo;. So the mystical address &bdquo;1102.168...&ldquo; is the old, well known IP 192.168... and the port 100100 is nothing special but the ordinary port 9090. Maybe some innovative nine-based number system, who knows...</p>
<p>There is some more information about the CherryPy Toolbox in the rest of the chapter (no nines, fortunately). The author describes the tools contained in the CherryPy which a developer can use, with description of arguments and demonstration on examples. The chapter ends with a description of serving the static files (CSS etc.) and using the WSGI with the CherryPy.</p>
<p>The fifth chapter starts with a design of a practical example - Photoblog app. This example is a common part of the rest of the book. The author illustrates all the parts of application development on this example. There are entities used in the Photoblog described first, such as their roles, attributes and relations. The chapter continues with information about DBMS, describing the basic principles of RDBMS, ODBMS and XMLDBMS database engines with special attention paid to ORM. The author describes three ORM tools for Python - SQLObject, SQLAlchemy and Dejavu - and shows the basic operations with the database in each of that three tools. He compares these tools and demonstrates creating of the ORM for the Photoblog at the end.</p>
<p>The chapter number six has the title &bdquo;Web Services&ldquo; and contains, how else, the description of the REST model and protocol. The REST is the standard protocol for data accessing over internet via well known HTTP methods. This chapter focuses on the implementation of the REST in the CherryPy and mentions the implementation of the publication protocol ATOM too. It is a very interesting and useful overview for the programmers using other systems or languages too.</p>
<p>The seventh chapter shows the issues the data presentation is about in the CherryPy: (X)HTML, CSS, the Kid template engine and the JS library Mochikit. The Photoblog example puts all these together in the Chapter Seven.</p>
<p>Only four letters &bdquo;AJAX&ldquo; contains the title of the eighth chapter. This chapter puts one&#8217;s mind to the AJAX very deeply on its twenty six pages. In the chapter there are for example: XHR description, GET and POST requirements via XHR demonstration or authentization schemes Basic and Digest. The chapter continues with the demonstration of the login dialog implementation in the CherryPy, followed by the JSON format description. The AJAX theme ends with a concatenation of the previous chapters&#8217; information to a one big thing - the AJAX-based, RESTified dialog for the new album creation in the CherryPy with the Mochikit.</p>
<p>The author shows the application testing in the Chapter Nine. He shows the usage of the tools like unittest, doctest or webtest, as so as the load testing or the functional testing with the Selenium tool.</p>
<p>And finally - in the last chapter named &bdquo;Deployment&ldquo; one can find some information about application deployment, such as possibilities of CherryPy application installation on the web server with the Apache+mod_rewrite or with the Lightppd+mod_proxy as well as the Apache and mod_python combination. This chapter contains also information about SSL and configuration methods.</p>
<p><strong>So - the verdict!</strong></p>
<p>At the first place I have to say I haven’t started writing my applications in the CherryPy. But now I know very well what I&#8217;ll take if I must deal with some CherryPy app. Nevertheless the book was very useful for me, really. The first part of the book (about 90 pages) is something like &bdquo;reference and quickstart&ldquo;, very closely focused on the CherryPy. The information here is provided very consistently and its briefness may lead to less comprehensibility. But the rest of the book (about 160 pages) is very interesting and useful not only for the<br />
CherryPy or the Python programmers, but for everyone interested in the modern web application development across the different languages.</p>
<p>The book is oscillating between a common description of web apps techniques and a (relatively short) description of implementation these techniques in the CherryPy. But on the other side this way makes the book interesting for developers not strictly interested in the CherryPy too. It&#8217;s always interesting to look outside of the box and take inspiration from the methods or the tools from the other worlds, isn&#8217;t it? The dark side of the book is that shameful mistake in the Chapter Four - this mistake is very misleading and, unfortunately, occurs in a heavy part of the book. Some things are neither positive nor negative. E.g. information about mod_python for the Apache server: The beginner evaluates positively that there is only few information, but all he needs for start the mod_python with Apache. But if you are an advanced user, you will probably look for some additional information, such as &bdquo;what to do if some error occurs&ldquo; or &bdquo;why I have to do this, what does it mean and what happens if I&#8217;ll try ...?&ldquo;</p>
<p>I primarily write in PHP, but the chapters 5, 6 and 9 strongly hold my interest and inspirate me. The chapters 7, 8 and 10 are interesting for me too, so don&#8217;t worry about this book.</p>
<p>If I have to assign the stars to the CherryPy Essentials book, <strong>it should  be rated by seven stars out of ten.</strong></p>
<p>The book costs is 35.99 US dollars (27 US dollars for book in PDF format). If you <span class="contextlinks contextlinks-external"><span class="contextlinks-text"><a href="http://www.packtpub.com/CherryPy/book" rel="CONTEXTLINKS_NEW_WINDOW">order the book directly from the Packt Publishing e-shop</a></span> <a href="http://www.packtpub.com/CherryPy/book" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a></span>, you have the shipping free of charge to the Czech Republic (as well as anywhere in the EU). You&#8217;ll get a handbook which shows the application development with CherryPy and provides an interesting roundup about the modern techniques used in the web development to you. I can unambiguously recommend this book to everyone developing the web apps in Python, but not only to them. This book will be interesting for people not using Python too to discover how the things work in another language.</p>
<p><em>Thanks to Packt Publishing for providing this book.</em></p>
<br class="clear" />

    ]]></content>
  </entry>
  <entry>
    <title>Chcete programovat webové aplikace s CherryPy?</title>
    <link rel="alternate" type="text/html" href="http://dev20.info/chcete-programovat-webov-aplikace-s-cherrypy-0" />
    <id>http://dev20.info/chcete-programovat-webov-aplikace-s-cherrypy-0</id>
    <published>2007-05-22T03:22:16-07:00</published>
    <updated>2007-05-22T03:22:16-07:00</updated>
    <author>
      <name>admin</name>
    </author>
    <category term="CherryPy" />
    <category term="Kniha" />
    <category term="Packt" />
    <category term="Programování" />
    <category term="Python" />
    <category term="web" />
    <summary type="html"><![CDATA[<!--paging_filter--><p>Dostala se mi do ruky kniha s názvem <a href="http://www.packtpub.com/CherryPy/book" rel="CONTEXTLINKS_NEW_WINDOW">CherryPy Essentials</a> <a href="http://www.packtpub.com/CherryPy/book" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a> s podtitulem &bdquo;Rapid Python Web Application Development - jak snadno navrhnout, vyvinout, otestovat a spustit vlastní webovou aplikaci v jazyce Python&ldquo;, jejímž autorem je Sylvain Hellegouarch. Knihu vydalo nakladatelství <a href="http://www.packtpub.com/" rel="CONTEXTLINKS_NEW_WINDOW">Packt Publishing</a> <a href="http://www.packtpub.com/" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a> v edici From Technologies to Solutions v březnu 2007.</p>
<br class="clear" />

    ]]></summary>
    <content type="html"><![CDATA[<!--paging_filter--><p>Dostala se mi do ruky kniha s názvem <span class="contextlinks contextlinks-external"><span class="contextlinks-text"><a href="http://www.packtpub.com/CherryPy/book" rel="CONTEXTLINKS_NEW_WINDOW">CherryPy Essentials</a></span> <a href="http://www.packtpub.com/CherryPy/book" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a></span> s podtitulem &bdquo;Rapid Python Web Application Development - jak snadno navrhnout, vyvinout, otestovat a spustit vlastní webovou aplikaci v jazyce Python&ldquo;, jejímž autorem je Sylvain Hellegouarch. Knihu vydalo nakladatelství <span class="contextlinks contextlinks-external"><span class="contextlinks-text"><a href="http://www.packtpub.com/" rel="CONTEXTLINKS_NEW_WINDOW">Packt Publishing</a></span> <a href="http://www.packtpub.com/" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a></span> v edici From Technologies to Solutions v březnu 2007.</p>
<p>Musím říct, že jsem se na ni těšil - po smutných zkušenostech s knihami z českých nakladatelství, které jsou přeložené z anglicky psaných originálů a jsou plné věcných či stylistických chyb (Computer Press je <span class="contextlinks contextlinks-external"><span class="contextlinks-text"><a href="http://zapisnik.maly.cz/500417-tcl-tk-podrobny-pruvodce-programatora.php" rel="CONTEXTLINKS_NEW_WINDOW">nejzářnější příklad</a></span> <a href="http://zapisnik.maly.cz/500417-tcl-tk-podrobny-pruvodce-programatora.php" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a></span>) jsem se těšil na knihu v anglicky psaném originále.</p>
<p>Jak je o mně známo, nemám moc rád knihy v elektronické podobě. Rád si sebou beru knihy tam, kde zrovna jsem - do vlaku, na dovolenou, do postele (tam především; nikde se mi nečte tak dobře jako v posteli). Když jsem před časem hledal framework a jazyk, po kterých bych sáhnul, byl Python a jeho různé nadstavby jedním z vašich častých favoritů. Proto když se mi dostalo možnosti přečíst si novou knihu o pythonské knihovně CherryPy, neváhal jsem...</p>
<p>Knihu CherryPy Essentials má na svědomí nakladatelství <span class="contextlinks contextlinks-external"><span class="contextlinks-text"><a href="http://www.packtpub.com/" rel="CONTEXTLINKS_NEW_WINDOW">Packt Publishing</a></span> <a href="http://www.packtpub.com/" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a></span>. Je to relativně nové nakladatelství, první knihu vydalo v roce 2004. Zaměřuje se na publikování knih určených vývojářům, tématicky orientovaných především na open-source software a moderní programátorské techniky a nástroje.</p>
<p>Kniha začíná dvěma (naštěstí jen krátkými) kapitolami s povinnou omáčkou na téma &bdquo;Co to je CherryPy, kde se vzalo, k čemu je, jak to nainstaluju, co tam najdu...&ldquo; Následuje třetí kapitola, Přehled CherryPy. Ta začíná rovnou příkladem - výpisem zdrojového kódu jednoduché CherryPy aplikace - &bdquo;poznámkového bloku&ldquo;. Na něm autor ukazuje základy práce s CherryPy: Kam s jakým souborem, jak spustit testovací HTTP server, jak nastavit konfiguraci, jak funguje Object Publisher Engine, bleskově probírá CherryPy moduly a nástroje a popisuje v hrubých rysech fungování výjimek a chyb. Přiznám se, po téhle kapitole jsem měl v hlavě guláš a tisíc chutí začít se zaobírat něčím jiným, logičtějším, třeba čtením telefonního seznamu.</p>
<p>Kapitola čtyři zmatek ještě trošku prohloubila. Začíná informací o implementaci HTTP v CherryPy - a tady můj zmatek dostoupil vrcholu ve chvíli, kdy jsem viděl, že autor binduje server na portu 100100. A o odstavec dál vytváří dokonce &bdquo;server na portu 100100 a IP adrese 1102.168.0.12&ldquo;. Říkal jsem si, že mi asi něco uniklo, že jsem asi přehlédl informaci o speciálním zápisu čísel v CherryPy, znovu jsem pečlivě pročetl úvod - ne, zjevně ne. Zmatený jsem četl dál, až jsem narazil na příklad, v němž autor použil &bdquo;kódování ISO-88510-15&ldquo;. A secvaklo mi to! V knize řádil šotek a nahradil znak &bdquo;9&ldquo; znaky &bdquo;10&ldquo;. Takže mystická adresa &bdquo;1102.168...&ldquo; je stará známá 192.168 a port 100100 je obyčejný port 9090. Možná zvláštní devítková soustava, kdo ví...</p>
<p>Ve zbytku kapitoly autor probírá CherryPy Toolbox - nástroje, které má vývojář v CherryPy k dispozici. U každého popisuje argumenty a na příkladu demonstruje použití daného nástroje. Na konci kapitoly je popsána obsluha statických souborů (CSS apod.) a použití WSGI s CherryPy. </p>
<p>Pátá kapitola začíná návrhem praktického příkladu - fotoblogu, který se od téhle chvíle táhne zbytkem knihy a na němž jsou demonstrovány jednotlivé části vývoje aplikace tak, jak naznačuje podtitulek knihy. Nejprve jsou popsány entity ve fotoblogu použité, jejich role, atributy a relace mezi nimi. Kapitola pokračuje informacemi o databázích. Popisuje základní principy databáze relační, objektové a XML databáze a pakl se věnuje &bdquo;objektově-relačnímu mapování&ldquo; (ORM). Popisuje tři ORM nástroje pro Python - SQLObject, SQLAlchemy a Dejavu - a ukazuje základní operace s databází ve všech třech zmíněných nástrojích. Následně porovnává vlastnosti těchto tří knihoven a demonstruje vytvoření ORM pro fotoblog.</p>
<p>Šestá kapitola nese název &bdquo;Web Services&ldquo; a skrývá se pod ním, jak jinak, popis REST modelu, tedy modelu pro standardizovaný přístup k datům na internetu pomocí standardizovaných HTTP metod. Autor samosebou popisuje i způsob implemetnace REST v CherryPy a stručně se zmiňuje i o implementaci publikačního protokolu ATOM. Rovněž velmi zajímavé a užitečné shrnutí i pro programátory, co pracují s jinými sytstémy a jazyky.</p>
<p>Sedmá kapitola se věnuje věcem okolo prezentace dat - letmo popisuje (x)HTML, CSS, šablonovací nástroj Kid a JS knihovnu Mochikit. Stručně nastiňuje jejich vlastnosti a popisuje implementaci na příkladu fotoblogu.</p>
<p>Kapitola osmá nese stručný název Ajax. Na šestadvaceti stranách se věnuje celkem zevrubně AJAXu. Popisuje XHR, na výpisech zdrojového kódu ukazuje GET a POST požadavek přes XHR a velmi podrobně probírá autentizační schémata (Basic a Digest). K autentizaci se vztahuje i ukázka implementace AJAXového přihlašovacího dialogu v CherryPy. Následuje popis datového formátu JSON a kapitola končí spojením informací z několika předchozích kapitol - vytvořením dialogu pro založení nového alba ve fotoblogu, který používá AJAX, REST i Mochikit spolu s CherryPy.</p>
<p>V kapitole deváté autor názorně ukazuje testování aplikace pomocí nástrojů unittest, doctest, webtest, měření výkonu, zátěžové testy a konečně funkční testy nástrojem Selenium.</p>
<p>Poslední, desátá, kapitola je nazvána Deployment. Nejprve stručně popisuje konfigurační metody, použitelné s CherryPy. Zbytek kapitoly je věnován nejčastějším možnostem instalace CherryPy aplikace na webovém serveru - od Apache s mod_rewrite přes Lighttpd s mod_proxy až k Apache mod_python a WSGI. Kapitola se rovněž zmiňuje o práci se SSL. </p>
<p>A resumé?</p>
<p>Nejprve to subjektivní: V CherryPy jsem psát nezačal. Ale vím kam sáhnu, až se budu muset nějakou aplikací v CherryPy zabývat. Přesto byla kniha užitečná i pro mne. Sice prvních 90 stránek (kapitoly 1-4) tvoří cosi jako &bdquo;referenční příručka smíchaná s Quickstart&ldquo;. Informace jsou zde podány velmi hutně a stručnost je leckdy na úkor srozumitelnosti. Zbytek knihy (160 stránek), tedy kapitoly 5-10, jsou velmi zajímavé a užitečné nejen pro programátory, co se zajímají o CherryPy či Python obecně. Věnují se totiž záležitostem, které jsou společné vývoji webových aplikací bez ohledu na použitý jazyk.</p>
<p>Škoda té tiskové chyby ve čtvrté kapitole, která je, nutno přiznat, velmi matoucí a navíc se vyskytuje právě v informačně hutné části. Kniha osciluje mezi obecným popisem technik, používaných při vývoji webových aplikací, a popisem jejich implementace v CherryPy. Což ji na druhou stranu zároveň činí zajímavou i pro vývojáře, co se nevěnují přímo CherryPy. Je vždy zajímavé podívat se &bdquo;jak to dělají jinde&ldquo; a inspirovat se postupy či nástroji z jiných oblastí. Některé věci nelze posoudit ani jako kladné, ani jako záporné. Například informace o mod_python pro Apache: Začátečník ocení, že jej kniha nezahltí spoustou informací a ukáže mu jednoduchý způsob, jak mod_python rozchodit. Zkušenějšímu čtenáři však bude u popisu UDĚLEJTE TOTO chybět vysvětlení proč zrovna takto a co to znamená.  </p>
<p>Mně osobně, coby člověka primárně píšícího v PHP, nejvíc zaujaly a inspirovaly kapitoly o ORM (5), REST (6) a testování aplikací (9). Kapitoly 7, 8 a 10 jsem si přečetl se zájmem</p>
<p>Kdybych měl knihu ohodnotit hvězdičkami, tak CherryPy Essentials dostanou solidních sedm z deseti.</p>
<p>Kniha stojí $35.99 (v podobě PDF souboru 27 US$). Pokud <span class="contextlinks contextlinks-external"><span class="contextlinks-text"><a href="http://www.packtpub.com/CherryPy/book" rel="CONTEXTLINKS_NEW_WINDOW">knihu objednáte přímo u vydavatele</a></span> <a href="http://www.packtpub.com/CherryPy/book" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a></span>, nebude vás poštovné do ČR stát nic (stejně tak po EU či do USA). Za tuto cenu dostanete příručku, která vás provede tvorbou webových aplikací v jazyce Python s knihovnou CherryPy, a získáte přehled o moderních technikách, které se používají při vývoji webových aplikací. Jednoznačně bych ji doporučil všem, co vyvíjejí webové aplikace v Pythonu. Doporučil bych ji i lidem, co Python nepoužívají a chtějí se podívat, jak některé úlohy řeší jiné jazyky. </p>
<p><em>Děkuji nakladatelství Packt Publishing za laskavé poskytnutí této knihy.</em></p>
<br class="clear" />

    ]]></content>
  </entry>
  <entry>
    <title>Chcete programovat webové aplikace s CherryPy?</title>
    <link rel="alternate" type="text/html" href="http://dev20.info/chcete-programovat-webov-aplikace-s-cherrypy" />
    <id>http://dev20.info/chcete-programovat-webov-aplikace-s-cherrypy</id>
    <published>2007-05-20T12:57:12-07:00</published>
    <updated>2007-05-20T12:58:34-07:00</updated>
    <author>
      <name>admin</name>
    </author>
    <category term="CherryPy" />
    <category term="Kniha" />
    <category term="Packt" />
    <category term="Programování" />
    <category term="Python" />
    <category term="web" />
    <summary type="html"><![CDATA[<!--paging_filter--><p>Dostala se mi do ruky kniha s názvem <a href="http://www.packtpub.com/CherryPy/book" rel="CONTEXTLINKS_NEW_WINDOW">CherryPy Essentials</a> <a href="http://www.packtpub.com/CherryPy/book" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a> s podtitulem &bdquo;Rapid Python Web Application Development - jak snadno navrhnout, vyvinout, otestovat a spustit vlastní webovou aplikaci v jazyce Python&ldquo;, jejímž autorem je Sylvain Hellegouarch. Knihu vydalo nakladatelství <a href="http://www.packtpub.com/" rel="CONTEXTLINKS_NEW_WINDOW">Packt Publishing</a> <a href="http://www.packtpub.com/" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a> v edici From Technologies to Solutions v březnu 2007.</p>
<br class="clear" />

    ]]></summary>
    <content type="html"><![CDATA[<!--paging_filter--><p>Dostala se mi do ruky kniha s názvem <span class="contextlinks contextlinks-external"><span class="contextlinks-text"><a href="http://www.packtpub.com/CherryPy/book" rel="CONTEXTLINKS_NEW_WINDOW">CherryPy Essentials</a></span> <a href="http://www.packtpub.com/CherryPy/book" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a></span> s podtitulem &bdquo;Rapid Python Web Application Development - jak snadno navrhnout, vyvinout, otestovat a spustit vlastní webovou aplikaci v jazyce Python&ldquo;, jejímž autorem je Sylvain Hellegouarch. Knihu vydalo nakladatelství <span class="contextlinks contextlinks-external"><span class="contextlinks-text"><a href="http://www.packtpub.com/" rel="CONTEXTLINKS_NEW_WINDOW">Packt Publishing</a></span> <a href="http://www.packtpub.com/" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a></span> v edici From Technologies to Solutions v březnu 2007.</p>
<p>Musím říct, že jsem se na ni těšil - po smutných zkušenostech s knihami z českých nakladatelství, které jsou přeložené z anglicky psaných originálů a jsou plné věcných či stylistických chyb (Computer Press je <span class="contextlinks contextlinks-external"><span class="contextlinks-text"><a href="http://zapisnik.maly.cz/500417-tcl-tk-podrobny-pruvodce-programatora.php" rel="CONTEXTLINKS_NEW_WINDOW">nejzářnější příklad</a></span> <a href="http://zapisnik.maly.cz/500417-tcl-tk-podrobny-pruvodce-programatora.php" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a></span>) jsem se těšil na knihu v anglicky psaném originále.</p>
<p>Jak je o mně známo, nemám moc rád knihy v elektronické podobě. Rád si sebou beru knihy tam, kde zrovna jsem - do vlaku, na dovolenou, do postele (tam především; nikde se mi nečte tak dobře jako v posteli). Když jsem před časem hledal framework a jazyk, po kterých bych sáhnul, byl Python a jeho různé nadstavby jedním z vašich častých favoritů. Proto když se mi dostalo možnosti přečíst si novou knihu o pythonské knihovně CherryPy, neváhal jsem...</p>
<p>Knihu CherryPy Essentials má na svědomí nakladatelství <span class="contextlinks contextlinks-external"><span class="contextlinks-text"><a href="http://www.packtpub.com/" rel="CONTEXTLINKS_NEW_WINDOW">Packt Publishing</a></span> <a href="http://www.packtpub.com/" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a></span>. Je to relativně nové nakladatelství, první knihu vydalo v roce 2004. Zaměřuje se na publikování knih určených vývojářům, tématicky orientovaných především na open-source software a moderní programátorské techniky a nástroje.</p>
<p>Kniha začíná dvěma (naštěstí jen krátkými) kapitolami s povinnou omáčkou na téma &bdquo;Co to je CherryPy, kde se vzalo, k čemu je, jak to nainstaluju, co tam najdu...&ldquo; Následuje třetí kapitola, Přehled CherryPy. Ta začíná rovnou příkladem - výpisem zdrojového kódu jednoduché CherryPy aplikace - &bdquo;poznámkového bloku&ldquo;. Na něm autor ukazuje základy práce s CherryPy: Kam s jakým souborem, jak spustit testovací HTTP server, jak nastavit konfiguraci, jak funguje Object Publisher Engine, bleskově probírá CherryPy moduly a nástroje a popisuje v hrubých rysech fungování výjimek a chyb. Přiznám se, po téhle kapitole jsem měl v hlavě guláš a tisíc chutí začít se zaobírat něčím jiným, logičtějším, třeba čtením telefonního seznamu.</p>
<p>Kapitola čtyři zmatek ještě trošku prohloubila. Začíná informací o implementaci HTTP v CherryPy - a tady můj zmatek dostoupil vrcholu ve chvíli, kdy jsem viděl, že autor binduje server na portu 100100. A o odstavec dál vytváří dokonce &bdquo;server na portu 100100 a IP adrese 1102.168.0.12&ldquo;. Říkal jsem si, že mi asi něco uniklo, že jsem asi přehlédl informaci o speciálním zápisu čísel v CherryPy, znovu jsem pečlivě pročetl úvod - ne, zjevně ne. Zmatený jsem četl dál, až jsem narazil na příklad, v němž autor použil &bdquo;kódování ISO-88510-15&ldquo;. A secvaklo mi to! V knize řádil šotek a nahradil znak &bdquo;9&ldquo; znaky &bdquo;10&ldquo;. Takže mystická adresa &bdquo;1102.168...&ldquo; je stará známá 192.168 a port 100100 je obyčejný port 9090. Možná zvláštní devítková soustava, kdo ví...</p>
<p>Ve zbytku kapitoly autor probírá CherryPy Toolbox - nástroje, které má vývojář v CherryPy k dispozici. U každého popisuje argumenty a na příkladu demonstruje použití daného nástroje. Na konci kapitoly je popsána obsluha statických souborů (CSS apod.) a použití WSGI s CherryPy. </p>
<p>Pátá kapitola začíná návrhem praktického příkladu - fotoblogu, který se od téhle chvíle táhne zbytkem knihy a na němž jsou demonstrovány jednotlivé části vývoje aplikace tak, jak naznačuje podtitulek knihy. Nejprve jsou popsány entity ve fotoblogu použité, jejich role, atributy a relace mezi nimi. Kapitola pokračuje informacemi o databázích. Popisuje základní principy databáze relační, objektové a XML databáze a pakl se věnuje &bdquo;objektově-relačnímu mapování&ldquo; (ORM). Popisuje tři ORM nástroje pro Python - SQLObject, SQLAlchemy a Dejavu - a ukazuje základní operace s databází ve všech třech zmíněných nástrojích. Následně porovnává vlastnosti těchto tří knihoven a demonstruje vytvoření ORM pro fotoblog.</p>
<p>Šestá kapitola nese název &bdquo;Web Services&ldquo; a skrývá se pod ním, jak jinak, popis REST modelu, tedy modelu pro standardizovaný přístup k datům na internetu pomocí standardizovaných HTTP metod. Autor samosebou popisuje i způsob implemetnace REST v CherryPy a stručně se zmiňuje i o implementaci publikačního protokolu ATOM. Rovněž velmi zajímavé a užitečné shrnutí i pro programátory, co pracují s jinými sytstémy a jazyky.</p>
<p>Sedmá kapitola se věnuje věcem okolo prezentace dat - letmo popisuje (x)HTML, CSS, šablonovací nástroj Kid a JS knihovnu Mochikit. Stručně nastiňuje jejich vlastnosti a popisuje implementaci na příkladu fotoblogu.</p>
<p>Kapitola osmá nese stručný název Ajax. Na šestadvaceti stranách se věnuje celkem zevrubně AJAXu. Popisuje XHR, na výpisech zdrojového kódu ukazuje GET a POST požadavek přes XHR a velmi podrobně probírá autentizační schémata (Basic a Digest). K autentizaci se vztahuje i ukázka implementace AJAXového přihlašovacího dialogu v CherryPy. Následuje popis datového formátu JSON a kapitola končí spojením informací z několika předchozích kapitol - vytvořením dialogu pro založení nového alba ve fotoblogu, který používá AJAX, REST i Mochikit spolu s CherryPy.</p>
<p>V kapitole deváté autor názorně ukazuje testování aplikace pomocí nástrojů unittest, doctest, webtest, měření výkonu, zátěžové testy a konečně funkční testy nástrojem Selenium.</p>
<p>Poslední, desátá, kapitola je nazvána Deployment. Nejprve stručně popisuje konfigurační metody, použitelné s CherryPy. Zbytek kapitoly je věnován nejčastějším možnostem instalace CherryPy aplikace na webovém serveru - od Apache s mod_rewrite přes Lighttpd s mod_proxy až k Apache mod_python a WSGI. Kapitola se rovněž zmiňuje o práci se SSL. </p>
<p>A resumé?</p>
<p>Nejprve to subjektivní: V CherryPy jsem psát nezačal. Ale vím kam sáhnu, až se budu muset nějakou aplikací v CherryPy zabývat. Přesto byla kniha užitečná i pro mne. Sice prvních 90 stránek (kapitoly 1-4) tvoří cosi jako &bdquo;referenční příručka smíchaná s Quickstart&ldquo;. Informace jsou zde podány velmi hutně a stručnost je leckdy na úkor srozumitelnosti. Zbytek knihy (160 stránek), tedy kapitoly 5-10, jsou velmi zajímavé a užitečné nejen pro programátory, co se zajímají o CherryPy či Python obecně. Věnují se totiž záležitostem, které jsou společné vývoji webových aplikací bez ohledu na použitý jazyk.</p>
<p>Škoda té tiskové chyby ve čtvrté kapitole, která je, nutno přiznat, velmi matoucí a navíc se vyskytuje právě v informačně hutné části. Kniha osciluje mezi obecným popisem technik, používaných při vývoji webových aplikací, a popisem jejich implementace v CherryPy. Což ji na druhou stranu zároveň činí zajímavou i pro vývojáře, co se nevěnují přímo CherryPy. Je vždy zajímavé podívat se &bdquo;jak to dělají jinde&ldquo; a inspirovat se postupy či nástroji z jiných oblastí. Některé věci nelze posoudit ani jako kladné, ani jako záporné. Například informace o mod_python pro Apache: Začátečník ocení, že jej kniha nezahltí spoustou informací a ukáže mu jednoduchý způsob, jak mod_python rozchodit. Zkušenějšímu čtenáři však bude u popisu UDĚLEJTE TOTO chybět vysvětlení proč zrovna takto a co to znamená.  </p>
<p>Mně osobně, coby člověka primárně píšícího v PHP, nejvíc zaujaly a inspirovaly kapitoly o ORM (5), REST (6) a testování aplikací (9). Kapitoly 7, 8 a 10 jsem si přečetl se zájmem</p>
<p>Kdybych měl knihu ohodnotit hvězdičkami, tak CherryPy Essentials dostanou solidních sedm z deseti.</p>
<p>Kniha stojí $35.99 (v podobě PDF souboru 27 US$). Pokud <span class="contextlinks contextlinks-external"><span class="contextlinks-text"><a href="http://www.packtpub.com/CherryPy/book" rel="CONTEXTLINKS_NEW_WINDOW">knihu objednáte přímo u vydavatele</a></span> <a href="http://www.packtpub.com/CherryPy/book" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a></span>, nebude vás poštovné do ČR stát nic (stejně tak po EU či do USA). Za tuto cenu dostanete příručku, která vás provede tvorbou webových aplikací v jazyce Python s knihovnou CherryPy, a získáte přehled o moderních technikách, které se používají při vývoji webových aplikací. Jednoznačně bych ji doporučil všem, co vyvíjejí webové aplikace v Pythonu. Doporučil bych ji i lidem, co Python nepoužívají a chtějí se podívat, jak některé úlohy řeší jiné jazyky. </p>
<p><em>Děkuji nakladatelství Packt Publishing za laskavé poskytnutí této knihy.</em></p>
<br class="clear" />

    ]]></content>
  </entry>
  <entry>
    <title>Startupy a ulhaní lháři co o nich lžou</title>
    <link rel="alternate" type="text/html" href="http://dev20.info/startupy-ulhani-lhari-co-o-nich-lzou" />
    <id>http://dev20.info/startupy-ulhani-lhari-co-o-nich-lzou</id>
    <published>2007-04-23T02:27:05-07:00</published>
    <updated>2007-04-23T11:16:47-07:00</updated>
    <author>
      <name>admin</name>
    </author>
    <category term="Web 2.0" />
    <summary type="html"><![CDATA[<!--paging_filter--><p>Lžou snad bloggeři, když píší recenze na startupy? Ne, ne - jen trošičku natahují pravdu. Dobře, tak hodně. Sepsal jsem, inspirován článkem Paula Kedorskyho <a href="http://paul.kedrosky.com/archives/2007/04/17/top_ten_vc_lies.html" rel="CONTEXTLINKS_NEW_WINDOW">Top Ten VC Lies</a> <a href="http://paul.kedrosky.com/archives/2007/04/17/top_ten_vc_lies.html" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a>, následujících deset polopravd, ke kterým rádi saháme na <a href="http://mashable.com" rel="CONTEXTLINKS_NEW_WINDOW">Mashable</a> <a href="http://mashable.com" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a>, ať už kvůli stručnosti, nadsázce, nebo prostě jen proto, že jsme líní.</p>
<br class="clear" />

    ]]></summary>
    <content type="html"><![CDATA[<!--paging_filter--><p>Lžou snad bloggeři, když píší recenze na startupy? Ne, ne - jen trošičku natahují pravdu. Dobře, tak hodně. Sepsal jsem, inspirován článkem Paula Kedorskyho <span class="contextlinks contextlinks-external"><span class="contextlinks-text"><a href="http://paul.kedrosky.com/archives/2007/04/17/top_ten_vc_lies.html" rel="CONTEXTLINKS_NEW_WINDOW">Top Ten VC Lies</a></span> <a href="http://paul.kedrosky.com/archives/2007/04/17/top_ten_vc_lies.html" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a></span>, následujících deset polopravd, ke kterým rádi saháme na <span class="contextlinks contextlinks-external"><span class="contextlinks-text"><a href="http://mashable.com" rel="CONTEXTLINKS_NEW_WINDOW">Mashable</a></span> <a href="http://mashable.com" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a></span>, ať už kvůli stručnosti, nadsázce, nebo prostě jen proto, že jsme líní.</p>
<p>1. <strong>&bdquo;Je to X pro Y!!&ldquo;</strong> kde X zastupuje žhavou službu s rizikovým kapitálem 25 milionů dolarů a Y je něco, co nemá s X naprosto nic společného. Příkladně: <em>&bdquo;Sýr je YouTube pro potraviny&ldquo;.</em></p>
<p>2. <strong>&bdquo;Vstupuje na zaplněný trh&ldquo;</strong> Skutečnost: Jednadvacátá zasraná služba na sdílení oblíbených odkazů, co jsem tenhle týden viděl.</p>
<p>3. <strong>&bdquo;Je to odlehčená verze X&ldquo;</strong> Skutečnost: Tenhle web má méně funkcí než stránka About:Blank ve vašem prohlížeči.</p>
<p>4. <strong>&bdquo;Může to přilákat investora&ldquo;</strong> - oblíbený výraz na <span class="contextlinks contextlinks-external"><span class="contextlinks-text"><a href="http://mashable.com" rel="CONTEXTLINKS_NEW_WINDOW">Mashable</a></span> <a href="http://mashable.com" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a></span>. Skutečnost: Nemám ani šajna, jestli se tenhle startup někdy rozjede, ale pokud se to přihodí, tak jsem to říkal.</p>
<p>5. <strong>&bdquo;Je to raná alfa&ldquo;</strong> Skutečnost: Stránka je míň spolehlivá než MySpace, což je úkaz, který se vzpírá fyzikálním zákonům.</p>
<p>6. <strong>&bdquo;Je na tom potřeba zapracovat&ldquo;</strong> Skutečnost: Pokud by existoval výraz pro verzi před alfa verzí, pre-alfa verzí a velmi časnou pre-alfa verzí, tak by se hodil na tuhle věc.</p>
<p>7. <strong>&bdquo;Nepodařilo se mu přilákat investora&ldquo;</strong> Skutečnost: <em>Pwned</em></p>
<p>8. <strong>&bdquo;Komunitní web s XX miliony uživatelů&ldquo;</strong> XX je naprosto fiktivní číslo, které si zakladatelé vymysleli, a my ho vzali jako fakt.   </p>
<p>9. <strong>&bdquo;Je to nástupce XYZ!!!&ldquo;</strong> Zde je XYZ úžasně populární jedinečná služba a onoho nástupce spustil dneska jeho třináctiletý zakladatel na serveru, co stojí u něj v ložnici.</p>
<p>10 <strong>&ldquo;?&ldquo;</strong> Ach ano, otazník, konečná lež. Zveřejnit nepodložený drb od cizího chlápka jménem Dave, to je novinářsky špatně. Můžete se seknout. Ale dejte za to otazník a máte to sichrované na obě strany. Náměty: <em>Digg byl převzat Donaldem Trumpem?, Metacafe má hodnotu bilionu dolarů?, Anglická královna čte denně <span class="contextlinks contextlinks-external"><span class="contextlinks-text"><a href="http://mashable.com" rel="CONTEXTLINKS_NEW_WINDOW">Mashable</a></span> <a href="http://mashable.com" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a></span>?</em></p>
<p>(Originál: Pete Cashmore: <span class="contextlinks contextlinks-external"><span class="contextlinks-text"><a href="http://mashable.com/2007/04/21/web-startups-and-the-lying-liars-that-lie-about-them/" rel="CONTEXTLINKS_NEW_WINDOW">Web Startups and the Lying Liars that Lie About Them</a></span> <a href="http://mashable.com/2007/04/21/web-startups-and-the-lying-liars-that-lie-about-them/" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a></span> -  Překlad je publikován s laskavým svolením autora.)</p>
<br class="clear" />

    ]]></content>
  </entry>
  <entry>
    <title>uniqID - unique identifier generator</title>
    <link rel="alternate" type="text/html" href="http://dev20.info/uniqid-unique-identifier-generator" />
    <id>http://dev20.info/uniqid-unique-identifier-generator</id>
    <published>2007-04-22T08:16:12-07:00</published>
    <updated>2007-04-22T08:45:58-07:00</updated>
    <author>
      <name>Martin Malý</name>
    </author>
    <category term="Knihovny" />
    <category term="PHP" />
    <summary type="html"><![CDATA[<!--paging_filter--><p>You may need a simple generator of unique IDs, with some special features, due to the spreading of the spambots and &bdquo;session riding&ldquo; techniques nowadays. Here is such generator written in the PHP.</p>
<br class="clear" />

    ]]></summary>
    <content type="html"><![CDATA[<!--paging_filter--><p>You may need a simple generator of unique IDs, with some special features, due to the spreading of the spambots and &bdquo;session riding&ldquo; techniques nowadays. Here is such generator written in the PHP.</p>
<p>The principle of forms protection by using unique identifier (ID) is quite simple: There is unique string generated by server and inserted into form (the HIDDEN field). The server remembers informations about generated strings too. When user submits this form, the server can verify its validity, what means that this ID has been issued and hasn&#8217;t been used. </p>
<p>Almost the same principle can be used with the AJAX calls.</p>
<p>{H3}Generator requirements{/H3}</p>
<p>Here are the requirements I declared:<br />
{LI}1. Never generated two or more same IDs at once{/LI}<br />
{LI}2. The generated ID can be used only once{/LI}<br />
{LI}3. Once used ID won&#8217;t be generated again{/LI}<br />
{LI}4. The generated ID can be used only from the same IP address it was generated for{/LI}<br />
{LI}5. Validity of the generated ID is limited by time{/LI}<br />
{LI}6. Server never accept ID hasn&#8217;t been issued by itself.{/LI}</p>
<p>{H3}The solution{/H3}</p>
<p>Knihovna uniqID generuje identifikátory založené na aktuálním čase (časové razítko + mikrosekundy), tím splňuje požadavek 3. Ke splnění požadavku 1 je ke každému ID přidáno náhodné šestimístné číslo. Existuje tedy nenulová pravděpodobnost, že budou ve stejný časový okamžik vygenerovány dva identifikátory a bude jim přidáno stejné náhodné číslo, ale pravděpodobnost je natolik malá, že ji možno pro tyto účely zanedbat.</p>
<p>Po vygenerování identifikátoru si server vytvoří v pracovním adresáři soubor se stejným jménem. Při kontrole vydaného uniqID se kontroluje existence tohoto souboru (požadavek 6) a pokud existuje, je smazán (požadavek 2). Jako platný je uniqID vyhodnocen pouze tehdy, když se podařilo smazat soubor.</p>
<p>Požadavek ad 4 je zajištěn tím, že do výše zmíněného souboru si server při jeho generování poznamená část IP adresy klienta. Požadavek ad 4 tak není splněn zcela, na druhou stranu je tímto způsobem ošetřena většina případů, kdy je klient, např. s vytáčeným spojením, mezi vygenerováním a použitím uniqID odpojen a znovu připojen - počítá se s tím, že se změní jen část IP.</p>
<p>Požadavek ad 5 je řešen CRONem, který v pravidelných intervalech prochází seznam vydaných uniqID a maže ty, které jsou starší než určený čas.</p>
<p>Vygenerované identifikátory jsou před použitím ošetřeny pomocí jednoduchého zakódování, kdy je jednoduchý číselný řetězec, vzniklý při generování, upraven tím, že jsou jednotlivé číslice nahrazeny různými písmeny (jedna číslice může být zakódována několika různými písmeny) a jejich pořadí je změněno. Před kontrolou je řetězec opět dekódován. Konkrétní přiřazení znaků k číslicím, stejně jako konkrétní změny pořadí, je možno individuálně nastavit. Knihovna obsahuje nástroj pro generování náhodných šifrovacích informací. Tento nástroj je dostupný i online: <span class="contextlinks contextlinks-link"><span class="contextlinks-text"><a href="http://contrib.dev20.info/uniqid/uniqgen.php">uniqGEN</a></span></span>.</p>
<p>{H3}Using of the library{/H3}</p>
<p>Download file  <span class="contextlinks contextlinks-external"><span class="contextlinks-text"><a href="http://uniqid-php.googlecode.com/svn/trunk/uniq.php" rel="CONTEXTLINKS_NEW_WINDOW">uniq.php</a></span> <a href="http://uniqid-php.googlecode.com/svn/trunk/uniq.php" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a></span>. Edit it. Enter the proper path to the working directory at line <code>define('UNIQ_PATH','*******',1);</code>. You must allow to access to this directory.</p>
<p>Generate cipher informations by provided <span class="contextlinks contextlinks-link"><span class="contextlinks-text"><a href="http://contrib.dev20.info/uniqid/uniqgen.php">uniqGEN</a></span></span> tool (PHP script <span class="contextlinks contextlinks-external"><span class="contextlinks-text"><a href="http://uniqid-php.googlecode.com/svn/trunk/uniqgen.php" rel="CONTEXTLINKS_NEW_WINDOW">uniqgen.php</a></span> <a href="http://uniqid-php.googlecode.com/svn/trunk/uniqgen.php" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a></span>). This tool will generate two lines you must copy-and-paste into uniq.php at proper place.</p>
<p>You can change the Time-To-Live value at line <code>define('UNIQ_TTL','3600',1);</code> (number means time in seconds).</p>
<p>Upload the uniq.php script to your server and include it into your scripts. The usage is very simply as you can see in the <span class="contextlinks contextlinks-external"><span class="contextlinks-text"><a href="http://uniqid-php.googlecode.com/svn/trunk/index.php" rel="CONTEXTLINKS_NEW_WINDOW">index.php</a></span> <a href="http://uniqid-php.googlecode.com/svn/trunk/index.php" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a></span> script. You get your UniqID string by calling the function getuniq(). Your script can verify obtained uniqID string by calling the checkuniq() function. This function returns value 1, if everything was OK, or 0, if provided uniqID was invalid.</p>
<p>You must provide cyclical calling of function purgeuniq() to proper function of the library. The simplest way is to use the provided script  <span class="contextlinks contextlinks-external"><span class="contextlinks-text"><a href="http://uniqid-php.googlecode.com/svn/trunk/cron.php" rel="CONTEXTLINKS_NEW_WINDOW">cron.php</a></span> <a href="http://uniqid-php.googlecode.com/svn/trunk/cron.php" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a></span>. You can use another method, obviously.</p>
<p>{H3}Download{/H3}</p>
<p>Library is distributed under terms of the MIT license. You can find it at Google Code with name <span class="contextlinks contextlinks-external"><span class="contextlinks-text"><a href="http://code.google.com/p/uniqid-php" rel="CONTEXTLINKS_NEW_WINDOW">uniqid-php</a></span> <a href="http://code.google.com/p/uniqid-php" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a></span>. You can download it using the Subversion client (<em>svn checkout <a href="http://uniqid-php.googlecode.com/svn/trunk/" title="http://uniqid-php.googlecode.com/svn/trunk/">http://uniqid-php.googlecode.com/svn/trunk/</a> uniqid-php</em>) or browsing <span class="contextlinks contextlinks-external"><span class="contextlinks-text"><a href="http://uniqid-php.googlecode.com/svn/trunk/" rel="CONTEXTLINKS_NEW_WINDOW">the Subversion repository</a></span> <a href="http://uniqid-php.googlecode.com/svn/trunk/" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a></span>.</p>
<br class="clear" />

    ]]></content>
  </entry>
  <entry>
    <title>uniqID - knihovna pro generování unikátních ID</title>
    <link rel="alternate" type="text/html" href="http://dev20.info/uniqid-knihovna-pro-generovani-unikatnich-id" />
    <id>http://dev20.info/uniqid-knihovna-pro-generovani-unikatnich-id</id>
    <published>2007-04-22T06:35:05-07:00</published>
    <updated>2007-04-24T03:06:15-07:00</updated>
    <author>
      <name>Martin Malý</name>
    </author>
    <category term="Knihovny" />
    <category term="PHP" />
    <summary type="html"><![CDATA[<!--paging_filter--><p>V souvislosti s rozšířením spamovacích robotů a technik typu &bdquo;session riding&ldquo; je stále častěji potřeba mít jednoduchý generátor unikátních identifikátorů, který splňuje jisté požadavky. Takový generátor v jazyce PHP vám nabízím.</p>
<br class="clear" />

    ]]></summary>
    <content type="html"><![CDATA[<!--paging_filter--><p>V souvislosti s rozšířením spamovacích robotů a technik typu &bdquo;session riding&ldquo; je stále častěji potřeba mít jednoduchý generátor unikátních identifikátorů, který splňuje jisté požadavky. Takový generátor v jazyce PHP vám nabízím.</p>
<p>Princip zabezpečení formulářů pomocí unikátního identifikátoru (dále ID) je prostý: Do formuláře je vložen při jeho generování na straně serveru jednoznačný řetězec, který si zároveň server poznamená jako &bdquo;vydaný&ldquo;. Pokud přijde odeslaný formulář, zkontroluje server tento řetězec a ověří, že už byl vydán a že zároveň nebyl použit. Pokud tyto požadavky splňuje, označí jej server jako použitý a data přijme. Pokud řetězec nevyhovuje, server data odmítne.</p>
<p>Podobný princip lze použít i pro AJAXové požadavky.</p>
<p>{H3}Požadavky na generátor{/H3}</p>
<p>Jako své požadavky na generátor takových ID jsem určil tyto:<br />
{LI}1. Nebudou vydány dva stejné ID v jeden čas{/LI}<br />
{LI}2. Vydaný ID lze použít k poslání dat pouze jednou{/LI}<br />
{LI}3. Jednou použitý ID nebude vydán nikdy v budoucnu{/LI}<br />
{LI}4. Vydaný ID lze použít pouze z té adresy, pro níž byl vydán{/LI}<br />
{LI}5. Platnost vydaného ID je zajištěna pouze po předem stanovenou dobu, po jejím uplynutí už není použitelnost vydaného ID zaručena{/LI}<br />
{LI}6. Nelze použít ID, který nebyl serverem vydán{/LI}</p>
<p>{H3}Řešení{/H3}</p>
<p>Knihovna uniqID generuje identifikátory založené na aktuálním čase (časové razítko + mikrosekundy), tím splňuje požadavek 3. Ke splnění požadavku 1 je ke každému ID přidáno náhodné šestimístné číslo. Existuje tedy nenulová pravděpodobnost, že budou ve stejný časový okamžik vygenerovány dva identifikátory a bude jim přidáno stejné náhodné číslo, ale pravděpodobnost je natolik malá, že ji možno pro tyto účely zanedbat.</p>
<p>Po vygenerování identifikátoru si server vytvoří v pracovním adresáři soubor se stejným jménem. Při kontrole vydaného uniqID se kontroluje existence tohoto souboru (požadavek 6) a pokud existuje, je smazán (požadavek 2). Jako platný je uniqID vyhodnocen pouze tehdy, když se podařilo smazat soubor.</p>
<p>Požadavek ad 4 je zajištěn tím, že do výše zmíněného souboru si server při jeho generování poznamená část IP adresy klienta. Požadavek ad 4 tak není splněn zcela, na druhou stranu je tímto způsobem ošetřena většina případů, kdy je klient, např. s vytáčeným spojením, mezi vygenerováním a použitím uniqID odpojen a znovu připojen - počítá se s tím, že se změní jen část IP.</p>
<p>Požadavek ad 5 je řešen CRONem, který v pravidelných intervalech prochází seznam vydaných uniqID a maže ty, které jsou starší než určený čas.</p>
<p>Vygenerované identifikátory jsou před použitím ošetřeny pomocí jednoduchého zakódování, kdy je jednoduchý číselný řetězec, vzniklý při generování, upraven tím, že jsou jednotlivé číslice nahrazeny různými písmeny (jedna číslice může být zakódována několika různými písmeny) a jejich pořadí je změněno. Před kontrolou je řetězec opět dekódován. Konkrétní přiřazení znaků k číslicím, stejně jako konkrétní změny pořadí, je možno individuálně nastavit. Knihovna obsahuje nástroj pro generování náhodných šifrovacích informací. Tento nástroj je dostupný i online: <span class="contextlinks contextlinks-link"><span class="contextlinks-text"><a href="http://contrib.dev20.info/uniqid/uniqgen.php">uniqGEN</a></span></span>.</p>
<p>{H3}Použití knihovny{/H3}</p>
<p>Stáhněte si soubor  <span class="contextlinks contextlinks-external"><span class="contextlinks-text"><a href="http://uniqid-php.googlecode.com/svn/trunk/uniq.php" rel="CONTEXTLINKS_NEW_WINDOW">uniq.php</a></span> <a href="http://uniqid-php.googlecode.com/svn/trunk/uniq.php" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a></span>. Na řádku <code>define('UNIQ_PATH','*******',1);</code> vyplňte cestu k adresáři, v němž budou uloženy soubory s vydanými identifikátory. Skript musí mít právo do tohoto adresáře zapisovat.</p>
<p>Pomocí nástroje <span class="contextlinks contextlinks-link"><span class="contextlinks-text"><a href="http://contrib.dev20.info/uniqid/uniqgen.php">uniqGEN</a></span></span> (PHP skript <span class="contextlinks contextlinks-external"><span class="contextlinks-text"><a href="http://uniqid-php.googlecode.com/svn/trunk/uniqgen.php" rel="CONTEXTLINKS_NEW_WINDOW">uniqgen.php</a></span> <a href="http://uniqid-php.googlecode.com/svn/trunk/uniqgen.php" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a></span>) si vygenerujte informace pro šifrování ID. Dva vygenerované řádky vložte na označené místo ve skriptu uniq.php.</p>
<p>Pokud chcete, můžete na řádku <code>define('UNIQ_TTL','3600',1);</code> změnit dobu platnosti vydaných identifikátorů (v sekundách).</p>
<p>Skript uniq.php nahrajte na server a includujte jej do svých skriptů. Použití je prosté a je vidět v souboru <span class="contextlinks contextlinks-external"><span class="contextlinks-text"><a href="http://uniqid-php.googlecode.com/svn/trunk/index.php" rel="CONTEXTLINKS_NEW_WINDOW">index.php</a></span> <a href="http://uniqid-php.googlecode.com/svn/trunk/index.php" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a></span>. UniqID je 26znakový řetězec a je vrácen jako návratová hodnota při volání funkce getuniq(). Platnost uniqID, který skript obdržel od klienta, lze pak ověřit voláním funkce checkuniq($uniqid), jejímž parametrem je předaný identifikátor a návratová hodnota je buď 1, pokud je identifikátor vyhodnocen jako platný, nebo 0, pokud došlo k libovolné chybě.</p>
<p>Ke korektní funkci knihovny je potřeba zajistit občasné volání funkce purgeuniq(). Nejjednodušší způsob je využít k tomu účelu připravený skript <span class="contextlinks contextlinks-external"><span class="contextlinks-text"><a href="http://uniqid-php.googlecode.com/svn/trunk/cron.php" rel="CONTEXTLINKS_NEW_WINDOW">cron.php</a></span> <a href="http://uniqid-php.googlecode.com/svn/trunk/cron.php" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a></span>. Pokud vaše aplikace řeší pravidelné úlohy jinak, můžete použít vlastní způsob.</p>
<p>{H3}Download{/H3}</p>
<p>Knihovna je dostupná pod licencí MIT. Na Google Code je pod názvem <span class="contextlinks contextlinks-external"><span class="contextlinks-text"><a href="http://code.google.com/p/uniqid-php" rel="CONTEXTLINKS_NEW_WINDOW">uniqid-php</a></span> <a href="http://code.google.com/p/uniqid-php" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a></span>. Můžete si ji stáhnout i pomocí Subversion (<em>svn checkout <a href="http://uniqid-php.googlecode.com/svn/trunk/" title="http://uniqid-php.googlecode.com/svn/trunk/">http://uniqid-php.googlecode.com/svn/trunk/</a> uniqid-php</em>) či přímo ze <span class="contextlinks contextlinks-external"><span class="contextlinks-text"><a href="http://uniqid-php.googlecode.com/svn/trunk/" rel="CONTEXTLINKS_NEW_WINDOW">Subversion repository</a></span> <a href="http://uniqid-php.googlecode.com/svn/trunk/" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a></span>. (viz též $GOOGLECODE$)</p>
<br class="clear" />

    ]]></content>
  </entry>
  <entry>
    <title>Třeba ten českej internet není tak chcíplej...</title>
    <link rel="alternate" type="text/html" href="http://dev20.info/treba-ten-ceskej-internet-neni-tak-chciplej" />
    <id>http://dev20.info/treba-ten-ceskej-internet-neni-tak-chciplej</id>
    <published>2007-04-19T06:36:45-07:00</published>
    <updated>2007-04-19T06:36:45-07:00</updated>
    <author>
      <name>admin</name>
    </author>
    <category term="Web 2.0" />
    <category term="Widgety" />
    <summary type="html"><![CDATA[<!--paging_filter--><p>Tuhle mi Rony <a href="http://spravodaj.madaj.net"><img src="/modules/contextlinks/images/person.png" alt="person" /></a> povídal, jak je slovenský net chcíplý, jak se tam děje ještě míň než na českém. Možná se mýlí on, mýlím se i já a mýlí se i <a href="http://www.marigold.cz/item/o-mysich-a-webovych-lidech-20" rel="CONTEXTLINKS_NEW_WINDOW">Patrick Zandl</a> <a href="http://www.marigold.cz/item/o-mysich-a-webovych-lidech-20" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a>...</p>
<br class="clear" />

    ]]></summary>
    <content type="html"><![CDATA[<!--paging_filter--><p>Tuhle mi <span class="contextlinks contextlinks-person"><span class="contextlinks-text">Rony</span> <a href="http://spravodaj.madaj.net"><img src="/modules/contextlinks/images/person.png" alt="person" /></a></span> povídal, jak je slovenský net chcíplý, jak se tam děje ještě míň než na českém. Možná se mýlí on, mýlím se i já a mýlí se i <span class="contextlinks contextlinks-external"><span class="contextlinks-text"><a href="http://www.marigold.cz/item/o-mysich-a-webovych-lidech-20" rel="CONTEXTLINKS_NEW_WINDOW">Patrick Zandl</a></span> <a href="http://www.marigold.cz/item/o-mysich-a-webovych-lidech-20" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a></span>...<br />
Objevil jsem před časem službu, kterou jsem chtěl nabídnout uživatelům na Bloguje (to jsem ještě věřil, že to má smysl). Takový FLASHový chat. Bohužel anglicky. Napsal jsem tedy autorům a v mailu jsem jejich službu pochválil, zeptal se na možnosti spolupráce a nabídl jsem, že pokud budou mít zájem, tak jim udělám českou mutaci.</p>
<p>Odpověď přišla do druhého dne, což mě potěšilo. A dech mi vyrazilo, když jsem v odpovědi četl: &bdquo;Kedze sme slovenska firma, mozeme komunikovat v nasom rodnom jazyku...&ldquo;</p>
<p>Takže ne snad že by byl slovenský internet tak chcíplý, to jen slovenské firmy &bdquo;hrají na globálním hřišti&ldquo;.</p>
<p>Ptáte se co to bylo za službu? Jmenuje se <span class="contextlinks contextlinks-external"><span class="contextlinks-text"><a href="http://www.geesee.com/" rel="CONTEXTLINKS_NEW_WINDOW">Geesee.com</a></span> <a href="http://www.geesee.com/" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a></span>, doporučuji zkusit - takhle nějak si představuji směr vývoje webových chatů.</p>
<p>&#8212;</p>
<p>Přivedlo mne to ovšem k úvahám, zda to není častější, než si myslíme. Zda třeba i v Česku nejsou takové firmy, co rezignovaly na český rybníček a hrají &bdquo;venku&ldquo;, takže se tu o nich ani neví... A zároveň to vede i k úvaze: Existuje vůbec něco jako &bdquo;český internet&ldquo;? Není to náhodou jen &bdquo;česky komunikující část&ldquo;?</p>
<p>&#8212;</p>
<p>Mimochodem, u toho <span class="contextlinks contextlinks-external"><span class="contextlinks-text"><a href="http://www.marigold.cz/item/o-mysich-a-webovych-lidech-20" rel="CONTEXTLINKS_NEW_WINDOW">Patrickova článku</a></span> <a href="http://www.marigold.cz/item/o-mysich-a-webovych-lidech-20" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a></span> mě zaujal komentář od Joza, který píše:</p>
<p><cite>Cesky web je pozadu? Co si pamatuji Expandia banka spoustela kdy - 97? Xchat 96, lide.cz 2000 - eat this MySpace</cite></p>
<p>Ano. Ale to neznamená, že český web není pozadu. To znamená jen tolik, že TEHDY byl vepředu.</p>
<br class="clear" />

    ]]></content>
  </entry>
  <entry>
    <title>Nestavte své aplikace jen na cizích technologiích</title>
    <link rel="alternate" type="text/html" href="http://dev20.info/nestavte-sve-aplikace-jen-na-cizich-technologiich" />
    <id>http://dev20.info/nestavte-sve-aplikace-jen-na-cizich-technologiich</id>
    <published>2007-04-04T06:26:02-07:00</published>
    <updated>2007-04-04T06:42:06-07:00</updated>
    <author>
      <name>admin</name>
    </author>
    <category term="Programování" />
    <summary type="html"><![CDATA[<!--paging_filter--><p>Allen Stern komentuje informaci o <a href="http://labs.mozilla.com/2007/04/keep-track-of-your-friends-with-the-coop/" rel="CONTEXTLINKS_NEW_WINDOW">zabudování komunitních funkcí do nové verze Firefoxu</a> <a href="http://labs.mozilla.com/2007/04/keep-track-of-your-friends-with-the-coop/" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a> článkem <a href="http://web20.originalsignal.com/article/8649/dont-build-solely-on-anothers-technology-re-flock.html" rel="CONTEXTLINKS_NEW_WINDOW">Nestavte své aplikace výhradně na cizích technologiích</a> <a href="http://web20.originalsignal.com/article/8649/dont-build-solely-on-anothers-technology-re-flock.html" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a>.</p>
<br class="clear" />

    ]]></summary>
    <content type="html"><![CDATA[<!--paging_filter--><p>Allen Stern komentuje informaci o <span class="contextlinks contextlinks-external"><span class="contextlinks-text"><a href="http://labs.mozilla.com/2007/04/keep-track-of-your-friends-with-the-coop/" rel="CONTEXTLINKS_NEW_WINDOW">zabudování komunitních funkcí do nové verze Firefoxu</a></span> <a href="http://labs.mozilla.com/2007/04/keep-track-of-your-friends-with-the-coop/" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a></span> článkem <span class="contextlinks contextlinks-external"><span class="contextlinks-text"><a href="http://web20.originalsignal.com/article/8649/dont-build-solely-on-anothers-technology-re-flock.html" rel="CONTEXTLINKS_NEW_WINDOW">Nestavte své aplikace výhradně na cizích technologiích</a></span> <a href="http://web20.originalsignal.com/article/8649/dont-build-solely-on-anothers-technology-re-flock.html" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a></span>.</p>
<p>Připomíná situaci z 90. let, kdy kdekdo vyvíjel skvělé a ještě skvělejší kancelářské programy s novými převratnými funkcemi. (Co je dnes s těmi firmami? Nepřežily!) Allen zmiňuje paralelu mezi tehdejším postupem, kdy všechny nové funkce byly vzápětí v další verzi Office, buď jako &bdquo;vypůjčený&ldquo; nápad, nebo rovnou koupená firma, a dnešním stavem, kdy např. na konferenci <span class="contextlinks contextlinks-external"><span class="contextlinks-text"><a href="http://www.searchenginestrategies.com/sew/ny07/" rel="CONTEXTLINKS_NEW_WINDOW">Search Engine Strategies</a></span> <a href="http://www.searchenginestrategies.com/sew/ny07/" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a></span> jsou téměř všechna řešení postavena na cizích API. Naprostá většina pak na enginu Google. </p>
<p>Allen píše: &bdquo;A pokud Google umožňuje používání svých služeb a produktů dnes, co se stane v budoucnu, až bude Google potřebovat zvýšit výtěžnost akcií? Nejspíš zavedou poplatky za užívání. Vím, jak teď vrtíte hlavami, že se naprosto mýlím. Vytiskněte si to, uschovejte si to dva roky, pak to vytáhněte a uvidíme...&ldquo;</p>
<p>Jak to souvisí s komunitními funkcemi ve Firefoxu? Existuje totiž &bdquo;komunitní prohlížeč&ldquo; <span class="contextlinks contextlinks-external"><span class="contextlinks-text"><a href="http://www.flock.com/" rel="CONTEXTLINKS_NEW_WINDOW">Flock</a></span> <a href="http://www.flock.com/" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a></span>, postavený na jádru Mozilla, který právě s těmito funkcemi přišel.  <span class="contextlinks contextlinks-external"><span class="contextlinks-text"><a href="http://www.techcrunch.com/2007/04/03/mozilla-to-build-social-features-into-firefox-bad-news-for-flock" rel="CONTEXTLINKS_NEW_WINDOW">TechCrunch</a></span> <a href="http://www.techcrunch.com/2007/04/03/mozilla-to-build-social-features-into-firefox-bad-news-for-flock" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a></span> poznamenává, že <em>to není pro Flock vůbec dobrá zpráva. Zejména proto, že mnoho z ohlášených novinek vykazuje výrazné podobnosti mezi těmito dvěma produkty</em>.</p>
<p>Flock se tak z pozice &bdquo;inovativního&ldquo; dostal do pozice &bdquo;konkurence&ldquo; a bude muset inovovat mnohem víc, aby se udržel. Pokud nepřijde s dalšími inovacemi, stane se pouze &bdquo;dalším Firefoxem&ldquo;.</p>
<p>Na závěr radí Allen vývojářům: <strong>Dělejte své vlastní aplikace. Používejte technologie třetích stran, pokud to má smysl, ale nestavte na nich.</strong> <em>(V originále použita vazba &bdquo;Nedávejte všechna svá vejce do cizího košíku&ldquo;)</em> <strong>A pokud to přesto uděláte, počítejte s tím, že se vaše pozice může ze dne na den změnit.</strong></p>
<br class="clear" />

    ]]></content>
  </entry>
  <entry>
    <title>IE: ABBR-kadabra</title>
    <link rel="alternate" type="text/html" href="http://dev20.info/ie-abbr-kadabra" />
    <id>http://dev20.info/ie-abbr-kadabra</id>
    <published>2007-04-01T06:37:32-07:00</published>
    <updated>2007-04-01T14:32:28-07:00</updated>
    <author>
      <name>admin</name>
    </author>
    <category term="HTML" />
    <category term="Tipy a triky" />
    <summary type="html"><![CDATA[<!--paging_filter--><p>Jak v IE nastylovat tag ABBR bez použití JavaScriptu?</p>
<br class="clear" />

    ]]></summary>
    <content type="html"><![CDATA[<!--paging_filter--><p>Jak v IE nastylovat tag ABBR bez použití JavaScriptu?<br />
Zajímavé řešení jsem nalezl na stránkách <span class="contextlinks contextlinks-person"><span class="contextlinks-text">Deana Edwardse</span> <a href="http://dean.edwards.name/my/"><img src="/modules/contextlinks/images/person.png" alt="person" /></a></span>. Přišel (už před třemi lety!) s řešením, na které jsem, bůhvíproč, zatím na českých webech nenarazil - je bez JS, bez náhrady tagem &bdquo;acronym&ldquo; a bez obalových SPANů. Podívejte se sami - zde je <span class="contextlinks contextlinks-external"><span class="contextlinks-text"><a href="http://dean.edwards.name/my/abbr-cadabra.html" rel="CONTEXTLINKS_NEW_WINDOW">ukázka</a></span> <a href="http://dean.edwards.name/my/abbr-cadabra.html" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a></span>.</p>
<p>Vysvětlení je ve zdrojovém kódu <span class="contextlinks contextlinks-external"><span class="contextlinks-text"><a href="http://dean.edwards.name/my/abbr-cadabra.html" rel="CONTEXTLINKS_NEW_WINDOW">ukázky</a></span> <a href="http://dean.edwards.name/my/abbr-cadabra.html" rel="CONTEXTLINKS_NEW_WINDOW"><img src="/modules/contextlinks/images/external.png" alt="external" /></a></span>. Celý trik spočívá v explicitním určení jmenného prostoru &bdquo;html&ldquo; pro značku &bdquo;abbr&ldquo;, takto:</p>
<p><em>This is an &lt;html:abbr title=&ldquo;abbreviation&ldquo;&gt;abbr&lt;/html:abbr&gt;</em></p>
<p>Tím donutí Explorer, aby si značky &bdquo;všiml&ldquo; a vytvořil pro ni odpovídající DOM Node. Pak s ní lze pracovat jako s jakýmkoli jiným DOM uzlem.</p>
<p>Dokument začíná určením namespace: &lt;html xmlns:html=&ldquo;http://www.w3.org/1999/xhtml&ldquo;&gt; a ABBR je ostylován následujícím zápisem:</p>
<p>html\:abbr, abbr {<br />
	background: yellow;<br />
	border: none;<br />
	cursor: help;<br />
}</p>
<p>Nejsem (X)HTML odborník, tak prosím ty, kteří jimi jsou: Je v něčem problém?</p>
<p><strong>Problém se objevil u Opery 9.1, která nehodlá zobrazit obsah atributu TITLE (styl je jinak OK). Škoda.</strong></p>
<br class="clear" />

    ]]></content>
  </entry>
  <entry>
    <title>Adobe Flex Builder a Adobe Apollo</title>
    <link rel="alternate" type="text/html" href="http://dev20.info/adobe-flex-builder-adobe-apollo" />
    <id>http://dev20.info/adobe-flex-builder-adobe-apollo</id>
    <published>2007-03-27T18:47:51-07:00</published>
    <updated>2007-03-27T19:25:10-07:00</updated>
    <author>
      <name>admin</name>
    </author>
    <category term="ADOBE" />
    <category term="FLASH" />
    <category term="FLEX" />
    <summary type="html"><![CDATA[<p>Líbí. Moc se mi líbí. Obojí. Kvůli tomu jsem dokonce ochoten vzít FLASH na milost a zapomenout na to, jak mi ho znechutily řvoucí reklamy.</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>Líbí. Moc se mi líbí. Obojí. Kvůli tomu jsem dokonce ochoten vzít FLASH na milost a zapomenout na to, jak mi ho znechutily řvoucí reklamy.</p>
<p>Pokud neznáte, tak dovolte drobné představení. <strong>Flex</strong> je technologie pro vytváření RIA&nbsp;– <em>Rich Internet Aplications</em>. Na rozdíl od DHTML/JS/AJAX frameworků používá k zobrazování aplikačního rozhraní Flash player. <strong>Flex Builder</strong> je nástroj, který vám umožňuje rychle vytvořit webovou aplikaci právě ve Flexu. Kdo jste kdy dělal s Delphi, tak víte. Jen s tím rozdílem, že místo Pascalu je tu ActionScript...</p>
<p>Práce s Flex Builderem mne nadchla a s chutí jsem si s ním několik odpolední (a večerů) hrál. Mohu říct, že mne práce s Flex Builderem opravdu bavila a doufám, že jsme se nesetkali naposledy. Když budu chtít udělat rychle a snadno jednoduchou webovou aplikaci, a nebude mi vadit, že bude FLASH only, tak sáhnu právě po Flex Builderu. Rozdíl mezi psaním aplikace ve Flex Builderu a&nbsp;– třeba&nbsp;– v nějaké kombinaci HTML/JS/AJAX je totiž asi takový jako mezi psaním malé desktopové aplikace v Delphi a v, řekněme, MinGW. <em>Nic proti MinGW, ale&nbsp;– toho kódu co musí člověk napsat, než se objeví tlačítko a něco udělá!</em></p>
<p>Naštěstí jsem objevil i hezký český server FLASH.CZ, který má dokonce celou <a href="http://www.flash.cz/portal/clanky.aspx?sekce=30&amp;p=0" target="_blank">sekci věnovanou Flexu</a>. Pokud chcete s Flex Builderem začít nebo se chcete jen podívat, jak se v "tom" dělá, tak začněte právě tam.&nbsp; Já začal jejich <a href="http://www.flash.cz/portal/clanek.aspx?id=582" target="_blank">návodem na tvorbu RSS čtečky</a>. Po chvíli úprav vypadala <a href="http://www.maly.cz/flex/ctecka.html" target="_blank">takhle</a>.</p>
<p><strong>Pár odkazů</strong>:<br /><a href="https://www.adobe.com/cfusion/tdrc/index.cfm?product=flex&amp;loc=en%5Fus" target="_blank">Trial verze Builderu a Flex SDK</a> <br /><a href="http://www.adobe.com/devnet/flex/?tab:quickstart=1">Tutorial</a> <br /><a href="http://www.adobe.com/devnet/flex/flex_php.html" target="_blank">Propojení Flex a PHP</a> <br /><a href="http://weblogs.macromedia.com/cantrell/archives/flex/index.cfm" target="_blank">Flex rubrika</a>  na blogu Christiana Cantrella </p>
<p><a href="http://www.adobe.com/devnet/flex/community_samples.html" target="_blank">Ukázky</a>  (k tomu, abyste něco viděli, potřebujete Flash Player 9, ale to je snad jasné)<br /><a href="http://examples.adobe.com/flex2/inproduct/sdk/explorer/explorer.html" target="_blank">Seznam komponent</a>  jako Flex aplikace<br /><a href="http://examples.adobe.com/flex2/consulting/styleexplorer/Flex2StyleExplorer.html" target="_blank">Stylování Flex komponent</a> <br /><a href="http://www.garyrgilbert.com/dev/photoalbum/" target="_blank">Galerie obrázků</a> <br /><a href="http://www.onyx-vj.com/demo/" target="_blank">Online VJ-mixer ONYX</a> <br /><a href="http://codeazur.com.br/stuff/fc64_final/" target="_blank">Simulátor Commodore C64</a>  napsaný ve Flex</p>
<p>Ta pravá třešnička na dortu přišla před několika málo dny, kdy Adobe uvolnilo Apollo&nbsp;– zatím v <em>Alpha verzi</em>.<br />
Apollo je věc, která umožňuje běžet aplikacím, napsaným ve Flexu, přímo na desktopu, tak jako běží jiné aplikace. Zjednodušeně řečeno: Vezmete svou Flex aplikaci napsanou v Builderu a s minimálními změnami z ní uděláte aplikaci desktopovou, která poběží všude, kde je nainstalovaný Apollo runtime. (V době, kdy jsou nativní programy na ústupu a kdeco vyžaduje .NET runtime nebo Java runtime bych to nepovažoval za přílišný handicap.) Oproti webové Flex aplikaci máte v Apollo aplikaci navíc možnost přistupovat k souborům na disku a máte možnost vložit si do aplikace HTML prohlížeč jako komponentu.</p>
<p>U HTML prohlížeče v Apollo bych se rád na chviličku zastavil. Je totiž založen na jádru WebKit. To je to, co je v Safari či Konqueroru. Nabízí se tak vývojářům jednoduchý způsob, jak se na své stránky mohou kouknout i na Windows. Jednoduchý "Safari-compatible" prohlížeč si totiž ve Flex Builderu po dvou dnech zkoumání napíšete za&nbsp;– změřil jsem si to&nbsp;– 3 hodiny a 28 minut. Je to od "New Apollo Project" do vytvoření finálního .air instalátoru (<em>ten má, pro zajímavost, 181 kB</em>). A to včetně koukání do referenčních příruček. Pokud máte zájem, <a href="http://www.maly.cz/apollo/safaree.air">zde je</a>  (Je třeba mít předem nainstalovaný <a href="https://www.adobe.com/cfusion/entitlement/index.cfm?e=labs%5Fapollo" target="_blank">Apollo Runtime</a>)</p>
<p><strong>Opět pár odkazů:</strong></p>
<p><a href="https://www.adobe.com/cfusion/entitlement/index.cfm?e=labs%5Fapollo" target="_blank">Apollo runtime a SDK</a>  download</p>
<p><a href="http://weblogs.macromedia.com/cantrell/archives/apollo/index.cfm" target="_blank">Stránky o Apollo</a>  na blogu Christiana Cantrella <br /><a href="http://weblogs.macromedia.com/md/archives/2007/03/apollo_alpha_re_1.cfm" target="_blank">Seznam zdrojů pro Apollo</a> <br /><a href="http://blog.everythingflex.com/2007/03/19/grabit-html-within-apollo/" target="_blank">GrabIt</a>  (náhled stránek v Safari)<br /><a href="http://weblogs.macromedia.com/mesh/" target="_blank">Apollo&nbsp;– Mike Chambers blog</a> </p>
<p>Z podobného soudku&nbsp;– <a href="http://www.flash.cz/portal/clanek.aspx?id=460" target="_blank">MDM Zinc</a>  </p>
<p>Flex,<br />
Flex Builder a Apollo jsou dostupné pro Windows a MacOS. Flex SDK, Apollo SDK i Apollo Runtime jsou k dispozici zdarma, Flex Builder jako třicetidenní zkušební verze.</p>
<p>Inu, teď jsem jen zvědav na to, co <a href="http://www.codegear.com/Products/Delphi/DelphiforPHP/tabid/237/Default.aspx" target="_blank">zajímavého</a>  předvedou CodeGear...</p>
    ]]></content>
  </entry>
</feed>
