<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="text">Jarda Jirava .net - blog</title>
  <subtitle type="text">Jarda Jirava .net - blog</subtitle>
  <id>uuid:ba700339-c126-4268-8906-3a2bdede5115;id=30</id>
  <rights type="html">&amp;copy; Jarda Jirava 2008</rights>
  <updated>2008-10-11T22:03:39+02:00</updated>
  <author>
    <name>Jarda Jirava</name>
    <uri>http://jirava.net/blog/1.aspx</uri>
    <email>jarda jirava net</email>
  </author>
  <generator>jirava.net syndication generator</generator>
  <link rel="alternate" href="http://jirava.net/blog/1.aspx" />
  <entry>
    <id>vyzva-sablonovy-system-nvelocity</id>
    <title type="text">V&amp;yacute;zva - &amp;scaron;ablonov&amp;yacute; syst&amp;eacute;m</title>
    <summary type="text">Zajištění výstupu ve formátu HTML ze vstupních dat je třeba zajistit pomocí šablonovacího systému, který systém jsem vybral pro moji výzvu, já?</summary>
    <published>2008-10-07T08:15:26+02:00</published>
    <updated>2008-10-07T08:15:26+02:00</updated>
    <link rel="alternate" href="http://jirava.net/blog/Archive/vyzva-sablonovy-system-nvelocity.aspx" />
    <category term=".net+technology" />
    <category term="vyzva" />
    <content type="html">&lt;p&gt;Pomalu se dostáváme do finální části, kdy již máme vše připraveno a stačí nám jednotlivé produkty (knihy) vypublikovat na web.&lt;/p&gt; &lt;h3&gt;XSL jako šablona - zavrženo&lt;/h3&gt; &lt;p&gt;Jak jsem se již zmínil v prvních krocích, kdy jsem vytvářel &lt;a href="http://jirava.net/blog/Archive/vyzva-domenove-objekty-linq-to-xml.aspx"&gt;doménové objekty&lt;/a&gt; a ty naplnil &lt;a href="http://jirava.net/blog/Archive/vyzva-definice-zdroje-dat.aspx"&gt;vstupními daty&lt;/a&gt;, &lt;strong&gt;xsl&lt;/strong&gt; pro prezentaci dat bylo zavrženo. Přitom by se dalo říct, že jako šablonový systém, kdy na vstupní straně je &lt;strong&gt;xml&lt;/strong&gt;, je toto řešení přímo ideální a též jsem jej v první chvíli doporučoval.&lt;/p&gt; &lt;p&gt;Jenže jak se říká, zákazník je náš pán a já jsem si svoji práci nechtěl ulehčit tím, že bych xsl použil. Přitom jsem chtěl nabídnout takové možnosti, aby bylo jednoduché vkládat statické texty okolo dynamických polí a to vše s možností plně ovlivnit výstupní HTML.&lt;/p&gt; &lt;p&gt;Chvíli jsem nad tím přemýšlel a uvažoval jsem jak něco tak jednoduchého zabezpečit, když v tom mě to napadlo, jednu takovou věc již používám a její implementace nebude náročná. Stejně tak věřím, že by nebylo náročné pro zkušenějšího uživatele znalého HTML syntaxe naučit se i těch několik málo příkazů. Navíc se tím vyvaruji i dalšího strašáka a to je použití &lt;strong&gt;PHP&lt;/strong&gt;, které bylo taktéž zavrženo.&lt;/p&gt; &lt;h3&gt;NVelocity&lt;/h3&gt; &lt;p&gt;Přesně tak, onou spásnou knihovnou se stala &lt;a href="http://www.castleproject.org/others/nvelocity/index.html"&gt;NVelocity&lt;/a&gt; a to po úpravách z projektu &lt;a href="http://www.castleproject.org/"&gt;Castle&lt;/a&gt;. Domnívám se totiž, že je to velice jednoduše uchopitelný šablonovací systém, přesně splňující základní potřeby pro publikaci potřebných informací a v případě potřeby též snadno rozšiřitelný.&lt;/p&gt; &lt;p&gt;Jelikož mám tuto knihovnu použitou například na &lt;a href="http://jirava.net/blog/"&gt;tomto&lt;/a&gt; webu, kde si pomocí ní generuji emailové notifikace, nebyl problém ji vzít a použít i v tomto systému.&lt;/p&gt; &lt;p&gt;Právě z tohoto důvodu jsem se také v prvních krocích ujal vytvářet doménový model, protože objekty a především jejich vlastnosti jsou základním předpokladem a pomocí nich se zobrazují získaná data.&lt;/p&gt; &lt;p&gt;Jak tedy potom vypadá vygenerování výstupu z takové šablony je vidět na ukázce níže:&lt;/p&gt;&lt;pre class="csharpcode"&gt;IPathLocatorService pathLocatorService = &lt;span class="kwrd"&gt;new&lt;/span&gt; DesktopPathLocatorService();
ITemplateProcessor templateProcessor = &lt;span class="kwrd"&gt;new&lt;/span&gt; NVelocityTemplateProcessor(pathLocatorService);
Hashtable data = &lt;span class="kwrd"&gt;new&lt;/span&gt; Hashtable();
data[&lt;span class="str"&gt;"book"&lt;/span&gt;] = book;
post.description = templateProcessor.RenderView(&lt;span class="str"&gt;"description"&lt;/span&gt;, data);&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;kdy právě instance třídy &lt;em&gt;Book&lt;/em&gt; je předána jako parametr s názvem &lt;em&gt;book&lt;/em&gt; do transformační metody a za pomocí definice šablony je vytvořen na výstupu HTML kód.&lt;/p&gt;
&lt;h3&gt;Šablona&lt;/h3&gt;
&lt;p&gt;Definování šablony je potom již otázkou vkusu a zručnosti. V mém případě tedy otázkou trošku delší, ale věřím, že pro schopného html kodéra by tato práce nebyla vůbec těžká. Já se rozhodl pro jednoduchý výpis informací a v případě generování description jsem použil následující:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="book"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;h4&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Authors:&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;h4&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ul&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
#foreach ($author in $book.Authors)
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;li&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;$author.FullName&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;li&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
#end
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ul&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;dl&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="metainfo"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;dt&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;ISBN&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;dt&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;dd&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;$book.ISBN&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;dd&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;dt&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Pages&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;dt&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;dd&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;$book.NumberOfPages&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;dd&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;dt&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Publication date&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;dt&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;dd&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;$book.PublicationDate.ToString("dd.MM.yyyy")&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;dd&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;dl&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;Samozřejmě není nutné, aby výstupem transformace byl HTML kód, ale v tomto případě je to očekávané.&lt;/p&gt;
&lt;h3&gt;Jak by to probíhalo&lt;/h3&gt;
&lt;p&gt;Zde již opět přichází na řadu součinnost s případným zadavatelem zakázky. Záleží na tom, zda by měl již připravené HTML šablony, do kterých by se umisťovali jednotlivé atributy nebo by si šablony chtěl tvořit sám. V případě prvním bych nejspíše zasedl a začal jednu šablonu za druhou přepisovat a doplňovat řídící značky. V případě druhém by potom došlo k vysvětlení významu jednotlivých řídících značek a popsání doménového modelu.&lt;/p&gt;
&lt;h3&gt;Časový odhad&lt;/h3&gt;
&lt;p&gt;Vzhledem k tomu, že jsem měl připraveno a zaobaleno volání NVelocity v samostatné assembly bylo napojení do systému velice rychlé. Určitě delší čas jsem strávil nad tím, jak vhodně vygenerovat výstup a jaké informace zobrazit a předat do kterého vstupního pole třídy &lt;em&gt;Post&lt;/em&gt; - viz &lt;a href="http://jirava.net/blog/Archive/vyzva-xml-rpc-wordpress.aspx"&gt;napojení na WordPress pomocí XML-RPC&lt;/a&gt;. Celkový čas pro tento krok tedy byl 40 minut. Zde musím upozornit, že v případě předání šablon pro Petru by především definice šablon a jejich úprava mohla zabrat nepoměrně delší dobu.&lt;/p&gt;</content>
    <rights type="html">&amp;copy; Jarda Jirava 2008</rights>
  </entry>
  <entry>
    <id>vyzva-lokalni-databaze</id>
    <title type="text">V&amp;yacute;zva - lok&amp;aacute;ln&amp;iacute; datab&amp;aacute;ze</title>
    <summary type="text">Některé informace je třeba uchovat na straně klienta, k tomu poslouží výborně SQL Server Compact Edition s přístupem pomocí LINQ to SQL.</summary>
    <published>2008-10-02T08:15:57+02:00</published>
    <updated>2008-10-02T08:15:57+02:00</updated>
    <link rel="alternate" href="http://jirava.net/blog/Archive/vyzva-lokalni-databaze.aspx" />
    <category term=".net+technology" />
    <category term="vyzva" />
    <content type="html">&lt;p&gt;V tuto chvíli by se mohlo zdát, že naše aplikace je hotova. Postačující bude ji jen poskládat a předat k užívání.&lt;/p&gt; &lt;h3&gt;Aktualizace dat&lt;/h3&gt; &lt;p&gt;Co je však třeba si uvědomit, že toto nemá sloužit jako jednorázové naplnění webu a bude třeba přidávat nové produkty, případně si maličko pohrát s rozvržením a úpravou statických textů, které budou přidávány ke každému produktu.&lt;/p&gt; &lt;p&gt;Je tedy nutné zajistit, aby se nové položky do &lt;a href="http://jirava.net/blog/Archive/vyzva-publikacni-system-wordpress.aspx"&gt;publikačního systému&lt;/a&gt; vložily a položky již jednou vložené pouze aktualizovaly. Pro zajištění tohoto úkolu jsem si vybral lokální datový soubor a využil jsem tak možností &lt;a href="http://www.microsoft.com/sql/editions/compact/default.mspx"&gt;SQL Server Compact Edition&lt;/a&gt; v. 3.5. Za atributy, které je nutné sledovat jsem si stanovil &lt;em&gt;Id&lt;/em&gt;, které je každému příspěvku přiděleno publikačním systémem &lt;strong&gt;WordPress&lt;/strong&gt; a také &lt;em&gt;ASIN&lt;/em&gt;, který představuje identifikátor na straně &lt;a href="http://jirava.net/blog/Archive/vyzva-domenove-objekty-linq-to-xml.aspx"&gt;vstupních dat&lt;/a&gt;. Dále jsem se rozhodl též ukládat si atribut &lt;em&gt;Title&lt;/em&gt; a &lt;em&gt;Publisher&lt;/em&gt; a pro informaci též datum vystavení (publikace).&lt;/p&gt; &lt;p&gt;Tyto všechny atributy se mi vešly do jedné tabulky, kterou jsem nadefinoval z prostředí &lt;a href="http://msdn.microsoft.com/en-us/vstudio/default.aspx"&gt;Visual Studio&lt;/a&gt;. Pro přístup a manipulaci s daty jsem si potom vybral &lt;strong&gt;LINQ to SQL&lt;/strong&gt;, který dokáže pracovat právě i s touto lokální databází. Podpora v designeru Visual Studia však v současné chvíli chybí a tak je třeba použít nástroje &lt;strong&gt;sqlmetal.exe&lt;/strong&gt;. Mě se v těchto případech osvědčilo použití &lt;em&gt;.bat&lt;/em&gt; souboru, který obsahuje následující definice:&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="str"&gt;"c:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\sqlmetal.exe"&lt;/span&gt; /dbml:ArchiveModel.dbml ArchiveDb.sdf
&lt;span class="str"&gt;"c:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\sqlmetal.exe"&lt;/span&gt; /&lt;span class="kwrd"&gt;namespace&lt;/span&gt;:Vyzva.Data.Archive /serialization:Unidirectional /context:ArchiveDataContext /language:csharp /pluralize /code:ArchiveModel.cs /map:ArchiveModel.config ArchiveModel.dbml&lt;/pre&gt;
&lt;p&gt;Samozřejmě můžete vynechat vytvoření mapovacího souboru, osobně však tomu dávám přednost mít jej vygenerovaný znovu a s koncovou .config&lt;/p&gt;
&lt;p&gt;Takto vygenerované soubory tedy postačuje vložit do projektu, u .config souboru, kde jsou uloženy mapovací informace nastavit jeho &lt;em&gt;Build type&lt;/em&gt; na &lt;em&gt;Embedded resource&lt;/em&gt;, tak aby došlo ke vložení souboru do assembly a začít používat DataContext objekt. V tomto případě, kdy se negenerují atributy nad třídou a vlastnotmi, je třeba při vytváření instance DataContextu předat též odkaz na mapovací schéma a connection string.&lt;/p&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (_mappingSource == &lt;span class="kwrd"&gt;null&lt;/span&gt;) {
  &lt;span class="kwrd"&gt;using&lt;/span&gt; (Stream st = Assembly.GetExecutingAssembly().GetManifestResourceStream(&lt;span class="str"&gt;"Vyzva.Data.Archive.ArchiveModel.config"&lt;/span&gt;)) {
    _mappingSource = XmlMappingSource.FromStream(st);
  }
}
&lt;span class="kwrd"&gt;string&lt;/span&gt; conn = ConfigurationManager.ConnectionStrings[&lt;span class="str"&gt;"DbMainConn"&lt;/span&gt;].ConnectionString;
context = &lt;span class="kwrd"&gt;new&lt;/span&gt; ArchivDataContext(conn, _mappingSource);&lt;/pre&gt;
&lt;p&gt;Proměnnou &lt;em&gt;_mappingSource&lt;/em&gt; mám v tomto případě definovanou v mé &lt;strong&gt;Factory&lt;/strong&gt; třídě jako statickou, neboť není nutné při každém požadavku na &lt;a href="http://msdn.microsoft.com/en-us/library/system.data.linq.datacontext.aspx"&gt;DataContext&lt;/a&gt; vytvářet a parsovat znovu mapovací schéma.&lt;/p&gt;
&lt;p&gt;Tímto mám zaručenu základní funkcionalitu a umožněnu práci s lokální databází.&lt;/p&gt;
&lt;h3&gt;Jak by to probíhalo&lt;/h3&gt;
&lt;p&gt;Ani tento krok se zdá, že by nemusel být učiněn v součinnosti s Petřinými požadavky. Co by však stálo za úvahu je definovat si seznam atributů, které budou v této lokální databázi uchovávány a případně další požadavky. Docela dobře si dokáži představit, že by mohl být učiněn požadavek na změnu kategorie, případně její hromadné doplnění k vybraným produktům, případně jiná úprava, která nelze zajistit v &lt;a href="http://jirava.net/blog/Archive/vyzva-definice-zdroje-dat.aspx"&gt;exportu xml souboru&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Časový odhad&lt;/h3&gt;
&lt;p&gt;Definice struktury databáze, vygenerování souborů pomocí sqlmetal.exe a práce s tím spojené zabrali přibližně 30 minut. Ani zde, obdobně jako v předchozím kroku se nedají očekávat nějaká větší časová zdržení.&lt;/p&gt;</content>
    <rights type="html">&amp;copy; Jarda Jirava 2008</rights>
  </entry>
  <entry>
    <id>vyzva-xml-rpc-wordpress</id>
    <title type="text">V&amp;yacute;zva - napojen&amp;iacute; na XML-RPC wordpressu</title>
    <summary type="text">Vytvoření klienta pomocí XML-RPC pro vzdálený přístup k publikačnímu systému WordPress.</summary>
    <published>2008-09-30T08:15:11+02:00</published>
    <updated>2008-09-30T08:15:11+02:00</updated>
    <link rel="alternate" href="http://jirava.net/blog/Archive/vyzva-xml-rpc-wordpress.aspx" />
    <category term=".net+technology" />
    <category term="vyzva" />
    <content type="html">&lt;p&gt;Pro toho, kdo si píše svůj blog a používá k tomu některý z offline klientů, jako třeba &lt;a href="http://windowslivewriter.spaces.live.com/"&gt;Windows Live Writer&lt;/a&gt; tomu nemůže být cizí, že každý rozumný publikační systém má svoje API rozhraní.&lt;/p&gt; &lt;h3&gt;Publikační API rozhraní&lt;/h3&gt; &lt;p&gt;Většina &lt;strong&gt;API&lt;/strong&gt; rozhraní, která se v současné době používají u publikačních systémů je založena na &lt;strong&gt;XML-RPC&lt;/strong&gt; volání. Těchto API je definováno hned několik a není výjimkou, že se i vzájemně doplňují. Mezi ty známější tak patří:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;blogger API  &lt;li&gt;MovableType API  &lt;li&gt;MetaWeblog API  &lt;li&gt;a samozřejmě, své API má i &lt;a href="http://jirava.net/blog/Archive/vyzva-publikacni-system-wordpress.aspx"&gt;WordPress&lt;/a&gt;, který rozšiřuje možnosti MetaWeblog API o definici svých metod &lt;/li&gt;&lt;/ul&gt; &lt;h3&gt;XML-RPC v .net&lt;/h3&gt; &lt;p&gt;&lt;strong&gt;.net framework&lt;/strong&gt; neobsahuje ve svých assembly třídu, která by umožňovala volání pomocí specifikace &lt;a href="http://www.xmlrpc.com/"&gt;XML-RPC&lt;/a&gt;. To ovšem nevadí v případě, že znáte knihovnu &lt;a href="http://www.xml-rpc.net/"&gt;XML-RPC.net&lt;/a&gt;. Tato knihovna umožňuje velice elegantně a rychle vytvořit nejen klienta, ale také server pro vzdálená volání.&lt;/p&gt; &lt;p&gt;V mém případě bylo plně dostačující vytvoření klienta služby a napojení se na vytvořený účet. A že vytvoření klienta je velice jednoduché může demonstrovat následující postup.&lt;/p&gt; &lt;p&gt;Zároveň se stažením knihovny získáváte i zdrojové kódy a to nejen pro samotnou assembly, ale také s definovanými interface pro výše zmíněné publikační API a to i s definicí struktur parametrů.&lt;/p&gt; &lt;p&gt;Po nareferencování knihovny &lt;em&gt;CookComputing.XmlRpcV2.dll&lt;/em&gt; jsem tak do projektu přidal i definici interface pro MetaWeblog API a rozšíril jsem jej o implementaci interface &lt;em&gt;IXmlRpcProxy&lt;/em&gt;, tak abych mohl vytvořit proxy klienta. Jelikož jsem však potřeboval ještě vytvářet nové kategorie, bylo potřebné doplnit definici metody pro vytvoření nové kategorie. Na stránkách WordPressu jsem v &lt;a href="http://codex.wordpress.org/XML-RPC#wp.newCategory"&gt;dokumentaci&lt;/a&gt; pro vývojáře zjistil, jaký předpis má takové volání a doplnil strukturu a interface metody.&lt;/p&gt;&lt;pre class="csharpcode"&gt;[XmlRpcMethod(&lt;span class="str"&gt;"wp.newCategory"&lt;/span&gt;, Description = &lt;span class="str"&gt;"Create a new category."&lt;/span&gt;)]
&lt;span class="kwrd"&gt;object&lt;/span&gt; newCategory(&lt;span class="kwrd"&gt;string&lt;/span&gt; blogid, &lt;span class="kwrd"&gt;string&lt;/span&gt; username, &lt;span class="kwrd"&gt;string&lt;/span&gt; password, Category category);&lt;/pre&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;struct&lt;/span&gt; Category
{
  &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; name;
  &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; slug;
  &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; parent_id;
  &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; description;
}&lt;/pre&gt;
&lt;p&gt;Poté již stačí jen vytvořit instanci proxy třídy, a nastavit ji správně Url adresu na servisní stranu publikačního systému. Tím jsme hotovy a můžeme volat vzdálené metody a publikovat tak naše produkty, v mém případě knihy.&lt;/p&gt;&lt;pre class="csharpcode"&gt;IMetaWeblog proxy = XmlRpcProxyGen.Create&amp;lt;IMetaWeblog&amp;gt;();
proxy.Url = URL;
// zde již následuje volání metod nad proxy&lt;/pre&gt;
&lt;h3&gt;Jak by to probíhalo&lt;/h3&gt;
&lt;p&gt;Tento krok je plně v mé režii. Co vás případně může zaskočit a co je dobré vědět, že jednotlivá volání je možné trasovat. Což pomohlo i mě, kdy definice pro kategorie nebyla přesná a bylo ji třeba upravit dle skutečného stavu, který posílal nainstalovaný WordPress. Jak zajistit možnost odladit jednotlivá volání:&lt;/p&gt;&lt;pre class="csharpcode"&gt;RequestResponseLogger logger = &lt;span class="kwrd"&gt;new&lt;/span&gt; RequestResponseLogger();
logger.Attach(proxy);&lt;/pre&gt;
&lt;p&gt;Poté bude již veškerá komunikace logována do samostatných souborů.&lt;/p&gt;
&lt;h3&gt;Časový odhad&lt;/h3&gt;
&lt;p&gt;V případě že víte, kam "sáhnout" a nemusíte znovu vynalézat kolo, potom je zprovoznění &lt;strong&gt;XML-RPC&lt;/strong&gt; volání velice jednoduché a rychlé. Mě proklikání se k dokumentaci WordPressu pro jeho rozšířené API, dodefinování metody a odladění volání zabralo asi 35 minut.&lt;/p&gt;</content>
    <rights type="html">&amp;copy; Jarda Jirava 2008</rights>
  </entry>
  <entry>
    <id>vyzva-publikacni-system-wordpress</id>
    <title type="text">V&amp;yacute;zva - publikačn&amp;iacute; syst&amp;eacute;m WordPress</title>
    <summary type="text">Použití publikačního systému WordPress pro publikaci dat získaných z exportu xml pro tvorbu webu.</summary>
    <published>2008-09-25T08:15:39+02:00</published>
    <updated>2008-09-25T08:15:39+02:00</updated>
    <link rel="alternate" href="http://jirava.net/blog/Archive/vyzva-publikacni-system-wordpress.aspx" />
    <category term=".net+technology" />
    <category term="vyzva" />
    <content type="html">&lt;p&gt;Nyní se přesunu z prostředí &lt;strong&gt;.net frameworku&lt;/strong&gt; někam hodně daleko, do míst, která jsem ještě před několika málo týdny téměř vůbec neznal a které je třeba alespoň částečně prozkoumat.&lt;/p&gt; &lt;p&gt;Je to systém &lt;strong&gt;WordPress&lt;/strong&gt;, který byl zmíněn, že je vhodným kandidátem na prezentaci dat o produktech, v mém případě i knih.&lt;/p&gt; &lt;h3&gt;Hosting WordPressu&lt;/h3&gt; &lt;p&gt;Jelikož jsem v tomto odvětví nováček a hosting, který mám je určen pro .net aplikace, jal jsem se hledat způsob, jak rozchodit systém &lt;a href="http://wordpress.org"&gt;WordPress&lt;/a&gt;, abych na něm mohl otestovat možnosti publikace informací získaných v &lt;a href="http://jirava.net/blog/Archive/vyzva-domenove-objekty-linq-to-xml.aspx"&gt;předchozích&lt;/a&gt; krocích. Je příjemné, že přímo na stránkách, kde je možné stáhnout si zdrojové kódy pro tento publikační systém je i odkaz na možnost hostovat své příspěvky na již &lt;a href="http://wordpress.com"&gt;funkčním řešení&lt;/a&gt;. Proto jsem neváhal a zřídil jsem si účet.&lt;/p&gt; &lt;p&gt;V tuto chvíli se musím omluvit všem, kteří čekali odkaz, avšak nebudu jej zatím zveřejňovat, ten kdo má zájem jistě stránky dokáže najít, pro ostatní potom nezbyde, než dočíst tento seriál a odkaz najít v průběhu čtení.&lt;/p&gt; &lt;p&gt;Prostor s publikačním systémem tedy mám, je nakonfigurován a já jsem zkusil vytvořit jednu stránku a jeden příspěvek, abych zjistil jak se zobrazují a co vše je třeba nastavit.&lt;/p&gt; &lt;p&gt;Tady jsem si také definoval, že vhodné bude používat kategorie pro příspěvky a do nich řadit jednotlivé knihy, za kategorii jsem si potom vybral vydavatele dané knihy. Samozřejmě ono členění může být různé a dle možností by se mohl specifikovat třeba autor a vydavatel, případně zvolit jiná kriteria, která je možné získat ze vstupního xml souboru.&lt;/p&gt; &lt;p&gt;Musím říct, že ovládání a administrace WordPressu mě velice mile překvapila a v případě, že bych měl k dispozici pouze &lt;strong&gt;PHP hosting&lt;/strong&gt; s podporou &lt;strong&gt;MySQL&lt;/strong&gt; databáze, byl by mojí volbou pro publikační činnost.&lt;/p&gt; &lt;p&gt;Nakonec jsem si ještě pohrál s tím, abych si vybral nějakou pěknou šablonu a přidal několik widgetů do postraní lišty.&lt;/p&gt; &lt;h3&gt;Jak by to vypadalo&lt;/h3&gt; &lt;p&gt;Tady si myslím, že při spolupráci s Petrou bych se nechal spíše vést, protože věřím, že má více zkušeností s provozem tohoto publikačního systému. Předpokládám též, že by bylo nutné dořešit provázání jednotlivých produktů mezi sebou a vytvoření stromu první úrovně pro následné kategorie.&lt;/p&gt; &lt;h3&gt;Časový odhad&lt;/h3&gt; &lt;p&gt;Mě hledání a zkoumání WordPress publikačního systému zabralo necelou hodinku času.&lt;/p&gt;</content>
    <rights type="html">&amp;copy; Jarda Jirava 2008</rights>
  </entry>
  <entry>
    <id>vyzva-domenove-objekty-linq-to-xml</id>
    <title type="text">V&amp;yacute;zva - dom&amp;eacute;nov&amp;eacute; objekty a jejich naplněn&amp;iacute;</title>
    <summary type="text">Pokračování výzvy z webtrhu pokračuje, tentokráte povídáním o tom, jak jsem si vytvořil doménové objekty pro uchování dat a provedl jejich naplnění.</summary>
    <published>2008-09-23T08:15:26+02:00</published>
    <updated>2008-09-23T08:15:26+02:00</updated>
    <link rel="alternate" href="http://jirava.net/blog/Archive/vyzva-domenove-objekty-linq-to-xml.aspx" />
    <category term=".net+technology" />
    <category term="vyzva" />
    <content type="html">&lt;p&gt;Pokračování výzvy z webtrhu pokračuje, tentokráte povídáním o tom, jak jsem si vytvořil doménové objekty pro uchování dat a provedl jejich naplnění.&lt;/p&gt; &lt;h3&gt;Doménové objekty&lt;/h3&gt; &lt;p&gt;V příspěvku věnovaném &lt;a href="http://jirava.net/blog/Archive/vyzva-definice-zdroje-dat.aspx"&gt;definici zdroje dat&lt;/a&gt; jsem končil v okamžiku, kdy jsem byl schopen pomocí &lt;strong&gt;REST&lt;/strong&gt; volání získat xml zdroj dat. Z následné diskuze na webtrhu vyplynulo, že &lt;a href="http://vetrovka.cz/"&gt;Petra&lt;/a&gt; zrovna neholduje &lt;strong&gt;XSL&lt;/strong&gt; šablonám a přesto by byla ráda, pokud by si mohla v případě potřeby upravit výsledné HTML, které bude publikovat na web. O tom, jak jsem se tohoto problému zhostil v jednom z příštích článků. Co jsem však potřeboval, bylo mít naplněné objekty, které budou sloužit pro držení dat.&lt;/p&gt; &lt;p&gt;Ze vstupního xml souboru jsem si tak definoval několik elementů, které stojí za to mít uchované, a které se budou moci následně zobrazovat a publikovat na webu. Obdobně bych postupoval i se vstupním xml souborem produktů, zde jsem se tedy zaměřil na knihy. Mnou vytvořené třídy tedy představovaly primitivní &lt;a href="http://en.wikipedia.org/wiki/Plain_Old_CLR_Object"&gt;POCO&lt;/a&gt; (Plain Old CLR Object) objekty s definicí vlastností, které odpovídaly dostupným elementům.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Book - ASIN, ISBN, NumberOfPages, PublicationDate, Publisher, Title, Authors, Reviews  &lt;li&gt;Author - FullName  &lt;li&gt;Review - Source, Content &lt;/li&gt;&lt;/ul&gt; &lt;h3&gt;Linq to Xml&lt;/h3&gt; &lt;p&gt;Poté, co jsem měl nadefinovány tyto jednoduché objekty bylo je třeba vytvořit a naplnit daty. K tomu jsem s úspěchem použil nových objektů, které nabízí verze &lt;strong&gt;.net frameworku 3.5&lt;/strong&gt;. A to konkrétně objektů &lt;a href="http://msdn.microsoft.com/en-us/library/system.xml.linq.xelement.aspx"&gt;XElement&lt;/a&gt; ve spojení s &lt;strong&gt;LINQ to XML&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;Stažení dat tak bylo otázkou jednoho jediného řádku:&lt;/p&gt;&lt;pre class="csharpcode"&gt;XElement x = XElement.Load(url);&lt;/pre&gt;
&lt;p&gt;kde proměnná &lt;em&gt;url&lt;/em&gt; představovala doplněnou adresu o proměnné parametry, které jsem představil v minulém článku.&lt;/p&gt;
&lt;p&gt;Pokud si nyní říkáte, jak složité je naplnit POCO objekty vstupnímy daty a získat tak seznam dostupných knih poskytovaných webovou službou amazonu, je to přesně 23 řádků kódu, z čehož je ještě několik řádků věci vizuálního formátování.&lt;/p&gt;
&lt;p&gt;A zde je celé kouzlo, kterým se provede instancování objektů a jejich naplnění&lt;/p&gt;&lt;pre class="csharpcode"&gt;var result = from book &lt;span class="kwrd"&gt;in&lt;/span&gt; x.Descendants(ns + &lt;span class="str"&gt;"Item"&lt;/span&gt;)
  let attrs = book.Element(ns + &lt;span class="str"&gt;"ItemAttributes"&lt;/span&gt;)
  let revs = book.Element(ns + &lt;span class="str"&gt;"EditorialReviews"&lt;/span&gt;)
  select &lt;span class="kwrd"&gt;new&lt;/span&gt; Book()
  {
    ASIN = (&lt;span class="kwrd"&gt;string&lt;/span&gt;)book.Element(ns + &lt;span class="str"&gt;"ASIN"&lt;/span&gt;),
    ISBN = attrs.Element(ns + &lt;span class="str"&gt;"ISBN"&lt;/span&gt;) != &lt;span class="kwrd"&gt;null&lt;/span&gt; ? (&lt;span class="kwrd"&gt;string&lt;/span&gt;)attrs.Element(ns + &lt;span class="str"&gt;"ISBN"&lt;/span&gt;) : &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty,
    NumberOfPages = (&lt;span class="kwrd"&gt;int&lt;/span&gt;?)attrs.Element(ns + &lt;span class="str"&gt;"NumberOfPages"&lt;/span&gt;) ?? 0,
    PublicationDate = (DateTime)attrs.Element(ns + &lt;span class="str"&gt;"PublicationDate"&lt;/span&gt;),
    Publisher = (&lt;span class="kwrd"&gt;string&lt;/span&gt;)attrs.Element(ns + &lt;span class="str"&gt;"Publisher"&lt;/span&gt;),
    Title = (&lt;span class="kwrd"&gt;string&lt;/span&gt;)attrs.Element(ns + &lt;span class="str"&gt;"Title"&lt;/span&gt;),
    Authors = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;Author&amp;gt;(from a &lt;span class="kwrd"&gt;in&lt;/span&gt; attrs.Elements(ns + &lt;span class="str"&gt;"Author"&lt;/span&gt;)
      select &lt;span class="kwrd"&gt;new&lt;/span&gt; Author()
      {
        FullName = (&lt;span class="kwrd"&gt;string&lt;/span&gt;)a
      }),
    Reviews = revs == &lt;span class="kwrd"&gt;null&lt;/span&gt; ? &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;Review&amp;gt;() : &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;Review&amp;gt;(from r &lt;span class="kwrd"&gt;in&lt;/span&gt; revs.Descendants(ns + &lt;span class="str"&gt;"EditorialReview"&lt;/span&gt;)
      select &lt;span class="kwrd"&gt;new&lt;/span&gt; Review()
      {
        Content = (&lt;span class="kwrd"&gt;string&lt;/span&gt;)r.Element(ns + &lt;span class="str"&gt;"Content"&lt;/span&gt;),
        Source = (&lt;span class="kwrd"&gt;string&lt;/span&gt;)r.Element(ns + &lt;span class="str"&gt;"Source"&lt;/span&gt;)
      })
};&lt;/pre&gt;
&lt;h3&gt;Přítelem je let&lt;/h3&gt;
&lt;p&gt;Teď to možná zní velice divně, ale pokud se blíže podíváte na zdrojový kód uvedený výše zjistíte, že jsem použil magické slůvko &lt;em&gt;let&lt;/em&gt;, kterým jsem si vložil do dotazu další proměnné, které používám. První proměnná &lt;em&gt;attrs&lt;/em&gt; je pouze pro usnadnění práce, u druhé to také tak může vypadat, ale má to i hlubší význam. Jak se můžete u některých knih přesvědčit, ne všechny obsahují recenzi. Pokud bych poté chtěl naplnit vlastnost &lt;em&gt;Reviews&lt;/em&gt; přímo a to odkazem na element &lt;em&gt;EditorialReviews&lt;/em&gt; obdržel bych výjimku, konkrétně &lt;a href="http://msdn.microsoft.com/en-us/library/system.nullreferenceexception.aspx"&gt;NullReferenceException&lt;/a&gt;, a to se mi zrovna nehodí. Proto jsem si odkaz na tento element uschoval do proměnné a v okamžiku potřeby přirazení do vlastnosti &lt;em&gt;Reviews&lt;/em&gt; jej kontroluji a případně vytvořím pouze prázdný generický &lt;a href="http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx"&gt;List&amp;lt;T&amp;gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Scházející elementy&lt;/h4&gt;
&lt;p&gt;Do obdobné situace jsem se potom dostal v případě, že jsem se snažil naplnit vlastnosti, avšak ve zdrojovém xml scházel požadovaný element. Příkladem budiž třeba scházející ISBN kód nebo nevyplněný počet stránek knihy. V případě ISBN jsem toto vyřešil pomocí ternárního operátoru, v případě počtu stránek jsem potom opět využil možností přetypovat výsledek na nullable type typu int a pomocí operátoru &lt;strong&gt;??&lt;/strong&gt; případně vrátit hodnotu 0.&lt;/p&gt;
&lt;h3&gt;Jak by to vypadalo&lt;/h3&gt;
&lt;p&gt;Tento krok by se nejspíše odehrál společně s krokem prvním a to při definici zdroje dat. Určili bychom si, které atributy ze vstupního souboru nás budou zajímat, jakým způsobem jsou tyto atributy provázány, stejně tak si řekli, které atributy jsou povinné a které volitelné. Pokud by k vstupnímu xml souboru bylo definováno &lt;strong&gt;xsd schéma&lt;/strong&gt; bylo by to jistě jednodušší.&lt;/p&gt;
&lt;h3&gt;Časový odhad&lt;/h3&gt;
&lt;p&gt;Definice doménových objektů a jejich naplnění byl již poměrně rychlý krok. Co bylo spíše nepříjemné je definování vlastností, v čemž jsem s radostí uvítal automatické property. Dalším krokem pak bylo poskládání LINQ dotazu na zdrojové xml. Celkový čas byl odhadem 25 minut + 10 minut testování na vzorku několika stovek záznamů. V případě produktů, které chtěla Petra sledovat by byl čas závislý na tom, kolik atributů by bylo nutné sledovat a mít k nim uložená data.&lt;/p&gt;</content>
    <rights type="html">&amp;copy; Jarda Jirava 2008</rights>
  </entry>
  <entry>
    <id>vyzva-definice-zdroje-dat</id>
    <title type="text">V&amp;yacute;zva - definice zdroje dat</title>
    <summary type="text">Jednou z těch obtížnějších překážek na cestě k aplikaci, která ve výsledku vybuduje web z xml exportu bylo najít vhodný zdroj dat.</summary>
    <published>2008-09-18T08:15:12+02:00</published>
    <updated>2008-09-18T08:15:12+02:00</updated>
    <link rel="alternate" href="http://jirava.net/blog/Archive/vyzva-definice-zdroje-dat.aspx" />
    <category term=".net+technology" />
    <category term="vyzva" />
    <content type="html">&lt;p&gt;Jednou z těch obtížnějších překážek na cestě k aplikaci, která ve výsledku vybuduje web z xml exportu bylo najít vhodný zdroj dat.&lt;/p&gt; &lt;p&gt;Jak jsem již v &lt;a href="http://jirava.net/blog/Archive/vyzva-z-webtrhu.aspx"&gt;úvodním příspěvku&lt;/a&gt; naznačil, Petra se se mnou nespojila a tak její xml export, ze kterého se měl web vytvořit jsem neměl k dispozici. Co bylo řečeno, že dané xml bude obsahovat přibližně 500 produktů s atributy.&lt;/p&gt; &lt;h3&gt;AWSE&lt;/h3&gt; &lt;p&gt;Když jsem tedy přemýšlel nad tím, jaký zdroj dat použít, vzpoměl jsem si na ukázkový příklad &lt;a href="http://community.infragistics.com/exemplars/tangerine.aspx"&gt;tangerine&lt;/a&gt; od Infragistics. Ten pracoval nad veřejnou částí služeb poskytovaných &lt;a href="http://www.amazon.com"&gt;Amazon.com&lt;/a&gt;, konkrétně nad &lt;a href="http://www.amazon.com/E-Commerce-Service-AWS-home-page/b/ref=sc_fe_l_2/104-2910409-3551969?ie=UTF8&amp;amp;node=12738641&amp;amp;no=342430011&amp;amp;me=A36L942TSJ2AJA"&gt;AWSE&lt;/a&gt;. Po bližším prozkoumání se dá zjistit, že je možné vytvořit si v .net webovou referenci s použitím wsdl a vytvořit si tak proxy na tuto službu.&lt;/p&gt; &lt;p&gt;Úkolem však nebylo takto jednoduše přistupovat k datům, v daném požadavku přeci bylo, že je třeba vytvořit web z xml exportu. A tak jsem našel odkaz na &lt;a href="http://docs.amazonwebservices.com/AWSEcommerceService/2007-01-17/"&gt;dokumentaci&lt;/a&gt; a z ní zjistil, že je možné k webové službě přistupovat i pomocí &lt;a href="http://en.wikipedia.org/wiki/Representational_State_Transfer"&gt;REST&lt;/a&gt;u (&lt;a href="http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm"&gt;Representational State Transfer&lt;/a&gt;) a získat tak výstup v xml.&lt;/p&gt; &lt;p&gt;Poté již stačilo vhodně nakombinovat parametry a vytvořit volání pro získání potřebných zdrojových dat.&lt;/p&gt; &lt;p&gt;Výsledná URL, pomocí níž tedy získávám data o knihách je následující&lt;/p&gt;&lt;pre class="csharpcode"&gt;http://ecs.amazonaws.com/onca/xml?Service=AWSECommerceService&amp;amp;AWSAccessKeyId={0}&amp;amp;Operation=ItemSearch&amp;amp;Version=2007-07-16&amp;amp;ResponseGroup=Medium&amp;amp;SearchIndex=Books&amp;amp;Keywords={1}&amp;amp;ItemPage={2}&lt;/pre&gt;
&lt;p&gt;Prvním parametrem, který doplňuji za běhu aplikace je tak &lt;em&gt;AWSAccessKeyId&lt;/em&gt;, které je uloženo v konfiguračním souboru aplikace. Tento klíč je přidělen každému, kdo se zaregistruje na stránkách amazon.com pro využívání jejich služeb.&lt;/p&gt;
&lt;p&gt;Dále je možné si všimnout, že volám operaci &lt;em&gt;ItemSearch&lt;/em&gt; a požaduji zaslání středního výpisu všech dat, což je pro můj vzorový případ dostačující. Dále je uvedeno, jak jsem se již zmínil, že chci získat pouze knihy a to s mnou definovaným klíčovým slovem, což jsem zvolil jako parametr závislý na uživatelově volbě. Posledním parametrem je potom hodnota &lt;em&gt;ItemPage&lt;/em&gt;, která získá i další stránky výsledků.&lt;/p&gt;
&lt;p&gt;Výhodou tohoto zdroje dat je, že je poměrně obsáhlý, velice dobře zdokumentovaný a přístupný téměř všem, kteří mají touhu projít si se mnou touto výzvou.&lt;/p&gt;
&lt;h3&gt;Jak by to vypadalo&lt;/h3&gt;
&lt;p&gt;Zde by se slušelo upozornit, že takto jednoduché by to nejspíše s Petrou nebylo. A i při získání takové zakázky by právě definice dat byla jednou z těch obtížnějších překážek. Právě tento krok by hodně určoval, jak dlouhou dobu bude tento projekt trvat. Také se zde může nejvíce projevit rozdíl mezi začátečníkem, nebo ne příliš zkušeným analytikem.&lt;/p&gt;
&lt;h3&gt;Časový odhad&lt;/h3&gt;
&lt;p&gt;Dohledání zdroje dat, nastudování dokumentace a prostudování výstupních xml souborů trvalo přibližně 90 minut. Myslím si, že sezení se zákazníkem typu Petra, který ví co chce a očekává za výsledek, by nemělo zabrat u obdobného projektu více jak 120 minut. Samozřejmě zde hodně záleží na složitosti vstupního xml souboru.&lt;/p&gt;</content>
    <rights type="html">&amp;copy; Jarda Jirava 2008</rights>
  </entry>
  <entry>
    <id>vyzva-z-webtrhu</id>
    <title type="text">V&amp;yacute;zva z webtrhu</title>
    <summary type="text">Jak také může skončit jedna celkem nevinná reakce na poptávku jednoduchého systému pro tvorbu webu z xml exportu.</summary>
    <published>2008-09-16T08:15:40+02:00</published>
    <updated>2008-09-16T08:15:40+02:00</updated>
    <link rel="alternate" href="http://jirava.net/blog/Archive/vyzva-z-webtrhu.aspx" />
    <category term=".net+technology" />
    <category term="vyzva" />
    <content type="html">&lt;p&gt;Konec kr&amp;#225;sn&amp;#233;ho slunečn&amp;#233;ho počas&amp;#237;, kter&amp;#233; n&amp;#225;s prov&amp;#225;zelo cel&amp;#233; l&amp;#233;to je spr&amp;#225;vn&amp;#253;m časem zač&amp;#237;t se věnovat někter&amp;#253;m v&amp;#253;zv&amp;#225;m a předsevzet&amp;#237;m, kter&amp;#233; jsem si dal je&amp;#353;tě na jaře.&lt;/p&gt;  &lt;p&gt;Pr&amp;#225;vě jednu takovou v&amp;#253;zvu jsem si si vzal z &lt;a href="http://webtrh.cz"&gt;webtrhu&lt;/a&gt;, kdy se je&amp;#353;tě v Březnu ptala &lt;a href="http://webtrh.cz/member.php?u=6"&gt;Petra&lt;/a&gt;, zda by bylo možn&amp;#233; &lt;a href="http://webtrh.cz/5869-obnasi-udelat-xml-exportu-web"&gt;vytvořit web na z&amp;#225;kladě xml exportu&lt;/a&gt;. Po přečten&amp;#237; jej&amp;#237;ho požadavku jsem si dovolil skromně podotknout, že na vytvořen&amp;#237; jednoduch&amp;#233; aplikace bych potřeboval přibližně 5 hodin pr&amp;#225;ce. Což se samozřejmě setkalo s patřičnou odezvou a tak vznikla tato v&amp;#253;zva.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://vetrovka.cz/"&gt;Petra&lt;/a&gt; od t&amp;#233; doby nic nepopt&amp;#225;vala a tak jsem si jej&amp;#237; zad&amp;#225;n&amp;#237; maličko upravil do potřeb pro seps&amp;#225;n&amp;#237; jednoduch&amp;#233;ho n&amp;#225;vodu k tomu, jak takovou aplikaci s pomoc&amp;#237; &lt;strong&gt;.net frameworku ve verzi 3.5&lt;/strong&gt; vytvořit. Vzniklo tak několik, na sebe navazuj&amp;#237;c&amp;#237;ch d&amp;#237;lů, kter&amp;#233; postupně d&amp;#225;vaj&amp;#237; dohromady funkčn&amp;#237; syst&amp;#233;m pro vytvořen&amp;#237; webu.&lt;/p&gt;  &lt;p&gt;Přizn&amp;#225;v&amp;#225;m hned na zač&amp;#225;tku, že zad&amp;#225;n&amp;#237; jsem si zřejmě př&amp;#237;li&amp;#353; zjednodu&amp;#353;il a je tedy možn&amp;#233;, že v&amp;#253;sledn&amp;#225; aplikace by byla složitěj&amp;#353;&amp;#237;, jako demonstrace toho, že je v&amp;#353;ak možn&amp;#233; takovou aplikaci napsat a to velice jednodu&amp;#353;e a efektivně, nav&amp;#237;c s dodržen&amp;#237;m potřebn&amp;#233;ho a deklarovan&amp;#233;ho času je to mysl&amp;#237;m vhodn&amp;#225; uk&amp;#225;zka.&lt;/p&gt;  &lt;p&gt;Pojďme se tedy pod&amp;#237;vat na to, o čem budu hovořit:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;definov&amp;#225;n&amp;#237; zdroje dat jako export pro web &lt;/li&gt;    &lt;li&gt;definice dom&amp;#233;nov&amp;#253;ch objektů a jejich naplněn&amp;#237; z xml &lt;/li&gt;    &lt;li&gt;zprovozněn&amp;#237; publikačn&amp;#237;ho syst&amp;#233;mu &lt;a href="http://wordpress.org/"&gt;WordPress&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;napojen&amp;#237; aplikace na rozhran&amp;#237; publikačn&amp;#237;ho syst&amp;#233;mu &lt;/li&gt;    &lt;li&gt;vytvořen&amp;#237; lok&amp;#225;ln&amp;#237; datab&amp;#225;ze publikovan&amp;#253;ch čl&amp;#225;nků &lt;/li&gt;    &lt;li&gt;&amp;#353;ablonov&amp;#253; syst&amp;#233;m pro publikaci čl&amp;#225;nků &lt;/li&gt;    &lt;li&gt;kompletace jednotliv&amp;#253;ch modulů do funkčn&amp;#237;ho celku &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Čl&amp;#225;nky m&amp;#225;m v současn&amp;#233; chv&amp;#237;li již připraveny a jejich publikace je napl&amp;#225;nov&amp;#225;na na &amp;#250;ter&amp;#253; a čtvrtek, proto př&amp;#237;padně omluvte nedostatky, kter&amp;#233; se mohou objevit a i to, že v jednotliv&amp;#253;ch čl&amp;#225;nc&amp;#237;ch nebudu reagovat na př&amp;#237;padn&amp;#233; připom&amp;#237;nky nebo dotazy. V př&amp;#237;padě potřeby se pokus&amp;#237;m vložit nějak&amp;#253; vysvětluj&amp;#237;c&amp;#237; čl&amp;#225;nek.&lt;/p&gt;</content>
    <rights type="html">&amp;copy; Jarda Jirava 2008</rights>
  </entry>
  <entry>
    <id>wpf-doevents</id>
    <title type="text">WPF a DoEvents</title>
    <summary type="text">Jak zabezpečit ve WPF aplikaci vyvolání odoby metody DoEvents známé z WinForm aplikací.</summary>
    <published>2008-09-09T09:08:05+02:00</published>
    <updated>2008-09-09T09:08:05+02:00</updated>
    <link rel="alternate" href="http://jirava.net/blog/Archive/wpf-doevents.aspx" />
    <category term=".net+technology" />
    <content type="html">&lt;p&gt;Že aplikace postaven&amp;#233; pomoc&amp;#237; &lt;a href="http://msdn.microsoft.com/en-us/netframework/aa663326.aspx"&gt;WPF&lt;/a&gt; pracuj&amp;#237; &lt;a href="http://msdn.microsoft.com/en-us/magazine/cc163328.aspx"&gt;odli&amp;#353;ně&lt;/a&gt; od klasick&amp;#253;ch &lt;a href="http://windowsclient.net/"&gt;WinForm&lt;/a&gt; aplikac&amp;#237; snad v&amp;#237; každ&amp;#253;, kdo aspoň jednou zkusil vytvořit WPF desktopovou aplikaci.&lt;/p&gt;  &lt;p&gt;Proto ani nepřekvap&amp;#237;, že objekt &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.application.aspx"&gt;Application&lt;/a&gt; ve WPF aplikaci neobsahuje metodu &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.forms.application.doevents.aspx"&gt;DoEvents&lt;/a&gt;, kter&amp;#225; je zn&amp;#225;m&amp;#225; již od dob Visual Basicu 3 - pokud si tak matně vzpom&amp;#237;n&amp;#225;m. Ned&amp;#225;vno jsem se v&amp;#353;ak dostal do situace, že bych pr&amp;#225;vě takovou metodu, kter&amp;#225; dovol&amp;#237; aktualizovat UI aplikace potřeboval. Zabezpečen&amp;#237; několika po sobě n&amp;#225;sleduj&amp;#237;c&amp;#237;ch akc&amp;#237;, kter&amp;#233; se musely odehr&amp;#225;t v hlavn&amp;#237;m threadu aplikace.&lt;/p&gt;  &lt;p&gt;Chv&amp;#237;li jsem p&amp;#225;tral, jak pomoc&amp;#237; objektu &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.threading.dispatcher.aspx"&gt;Dispatcher&lt;/a&gt; zajistit aktualizaci WPF okna a nakonec jsem to na&amp;#353;el:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, &lt;span class="kwrd"&gt;new&lt;/span&gt; ThreadStart(&lt;span class="kwrd"&gt;delegate&lt;/span&gt; { }));&lt;/pre&gt;

&lt;p&gt;možn&amp;#225; to nen&amp;#237; &amp;#250;plně ide&amp;#225;ln&amp;#237;, ale v danou chv&amp;#237;li mi toto vol&amp;#225;n&amp;#237; postačuje, a snad se bude hodit i v&amp;#225;m.&lt;/p&gt;</content>
    <rights type="html">&amp;copy; Jarda Jirava 2008</rights>
  </entry>
  <entry>
    <id>certifikace-pro-net-impulzy</id>
    <title type="text">Certifikace pro .net impulzy pro ano/ne</title>
    <summary type="text">K napsání tohoto příspěvku jsem se již nějakou dobu odhodlával a stále nevěděl, jak jej začít a uchopit. Názory na certifikace se velice různí a každý si tvoří ten svůj a má vlastní pohled.</summary>
    <published>2008-08-27T19:29:41+02:00</published>
    <updated>2008-08-27T19:29:41+02:00</updated>
    <link rel="alternate" href="http://jirava.net/blog/Archive/certifikace-pro-net-impulzy.aspx" />
    <category term=".net+technology" />
    <content type="html">&lt;p&gt;K naps&amp;#225;n&amp;#237; tohoto př&amp;#237;spěvku jsem se již nějakou dobu odhodl&amp;#225;val a st&amp;#225;le nevěděl, jak jej zač&amp;#237;t a uchopit. N&amp;#225;zory na certifikace se velice různ&amp;#237; a každ&amp;#253; si tvoř&amp;#237; ten svůj a m&amp;#225; vlastn&amp;#237; pohled.&lt;/p&gt;  &lt;h3&gt;Můj pohled na certifikace&lt;/h3&gt;  &lt;p&gt;V n&amp;#225;sleduj&amp;#237;c&amp;#237;ch odstavc&amp;#237;ch se pokus&amp;#237;m popsat pouze můj pohled na věc, maličko přibl&amp;#237;žit - v r&amp;#225;mci možnost&amp;#237; - syst&amp;#233;m certifikac&amp;#237; pro &lt;strong&gt;.net v&amp;#253;voj&amp;#225;ře&lt;/strong&gt;, a vyj&amp;#225;dřit tak pouze můj n&amp;#225;zor, se kter&amp;#253;m nemus&amp;#237;te souhlasit. Nejdř&amp;#237;ve uvedu př&amp;#237;pady, kdy jsem se s ot&amp;#225;zkou na certifikace setkal a potom přijde třeba ono rozuzlen&amp;#237;.&lt;/p&gt;  &lt;h4&gt;Prvn&amp;#237; impulz - setk&amp;#225;n&amp;#237; .net builder&lt;/h4&gt;  &lt;p&gt;Pr&amp;#225;vě proč certifikace pro v&amp;#253;voj&amp;#225;ře a zda maj&amp;#237; nějak&amp;#253; v&amp;#253;znam se ře&amp;#353;ilo na &lt;a href="http://jirava.net/blog/Archive/iv-neformalni-setkani-builder-cz.aspx"&gt;&amp;#250;vodn&amp;#237;ch setk&amp;#225;n&amp;#237;ch&lt;/a&gt; s kolegy z f&amp;#243;ra o .netu na builderu. Někdo na tyto zkou&amp;#353;ky z dospělosti v .netu měl čas a byl ochoten je složit, jin&amp;#237; v nich neviděli př&amp;#237;nos.&lt;/p&gt;  &lt;h4&gt;Impulz druh&amp;#253; - kontaktn&amp;#237; formul&amp;#225;ř&lt;/h4&gt;  &lt;p&gt;Jelikož m&amp;#225;m složeny zkou&amp;#353;ky a jsem tak certifikov&amp;#225;n jako &lt;strong&gt;MCAD&lt;/strong&gt; - Microsoft Certified Application Developer a z&amp;#225;roveň &lt;strong&gt;MCPD&lt;/strong&gt; - Microsoft Certified Profesional Developer, dostal jsem několik ot&amp;#225;zek skrz &lt;a href="http://jirava.net/kontakt/Index.aspx"&gt;kontaktn&amp;#237; formul&amp;#225;ř&lt;/a&gt;, zda bych mohl sdělit nějak&amp;#233; podrobnosti k těmto certifikac&amp;#237;m.&lt;/p&gt;  &lt;h4&gt;Impulz třet&amp;#237; - hled&amp;#225; se program&amp;#225;tor&lt;/h4&gt;  &lt;p&gt;Posledn&amp;#237; impulz pak při&amp;#353;el tento t&amp;#253;den, kdy jsem si přečetl podm&amp;#237;nky pro &lt;a href="http://forum.builder.cz/read.php?31,2715988,2715988#msg-2715988"&gt;nov&amp;#233;ho program&amp;#225;tora&lt;/a&gt;. Dovol&amp;#237;m si ocitovat jednu větičku:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;nepožadujeme nijak&amp;#233; MS certifikace, kter&amp;#233; ve vět&amp;#353;ině př&amp;#237;padů stejně o kvalitě nijak nevypov&amp;#237;daj&amp;#237;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h4&gt;Impulz posledn&amp;#237; - ověřen&amp;#237; sv&amp;#253;ch znalost&amp;#237;&lt;/h4&gt;  &lt;p&gt;Asi netřeba zmiňovat, ale pr&amp;#225;vě touha po tom ověřit si svoje znalosti vede spoustu lid&amp;#237; k tomu, že se snaž&amp;#237; zkou&amp;#353;ku pro z&amp;#237;sk&amp;#225;n&amp;#237; certifik&amp;#225;tu složit a doufaj&amp;#237;, že jim pomůže v jejich profesn&amp;#237; kari&amp;#233;ře.&lt;/p&gt;  &lt;h3&gt;Rozuzlen&amp;#237;&lt;/h3&gt;  &lt;p&gt;Když jsem &amp;#353;el na svoji prvn&amp;#237; zkou&amp;#353;ku pro z&amp;#237;sk&amp;#225;n&amp;#237; certifik&amp;#225;tu &lt;strong&gt;MCP&lt;/strong&gt; byl jsem nervozn&amp;#237;, byť jsem věděl, že m&amp;#225;m za sebou dva roky aktivn&amp;#237;ho a intenzivn&amp;#237;ho v&amp;#253;voje na .netu v asp.net, načtenou docela velkou kopu kn&amp;#237;žek na toto t&amp;#233;ma, byť ne zrovna ty, kter&amp;#233; byly &lt;a href="http://www.microsoft.com/learning/mcp/mcad/requirements.mspx"&gt;doporučov&amp;#225;ny&lt;/a&gt; a nez&amp;#250;častnil jsem se ž&amp;#225;dn&amp;#233;ho &amp;#353;kolen&amp;#237;. Pro otestov&amp;#225;n&amp;#237; jsem zvolil &amp;#353;kol&amp;#237;c&amp;#237; a certifikačn&amp;#237; středisko &lt;a href="http://www.gopas.cz/Clanek.aspx?IDClanku=86"&gt;Gopas&lt;/a&gt; a cena testu byla přibližně 3 000,- Kč. Moje obavy z nesplněn&amp;#237; testu se rychle rozpl&amp;#253;valy, neboť jsem zjistil, že to co denně použ&amp;#237;v&amp;#225;m je n&amp;#225;pln&amp;#237; testu, i když několik z&amp;#225;ludnost&amp;#237; se tak&amp;#233; na&amp;#353;lo. Přeci jen, pro někter&amp;#233; &amp;#250;kony si vytvoř&amp;#237;te vlastn&amp;#237; vrstvu a pomaličku zapom&amp;#237;n&amp;#225;te, jak je to uvnitř ře&amp;#353;eno.&lt;/p&gt;  &lt;p&gt;Dal&amp;#353;&amp;#237; zkou&amp;#353;ky pro z&amp;#237;sk&amp;#225;n&amp;#237; &lt;strong&gt;MCAD&lt;/strong&gt; potom již prob&amp;#237;haly obdobně, dostatek času a čast&amp;#233; použ&amp;#237;v&amp;#225;n&amp;#237; byly z&amp;#225;rukou &amp;#250;spěchu. Pokud bych se měl je&amp;#353;tě zm&amp;#237;nit o tom, jak prob&amp;#237;haly dal&amp;#353;&amp;#237; zkou&amp;#353;ky, asi největ&amp;#353;&amp;#237; oř&amp;#237;&amp;#353;ek čekal při testu na z&amp;#237;sk&amp;#225;n&amp;#237; &lt;strong&gt;MCPD&lt;/strong&gt;, kter&amp;#253; považuji za velice poveden&amp;#253; a dalo by se ř&amp;#237;ci i prokazuj&amp;#237;c&amp;#237; nejen znalosti, ale i odolnost v&amp;#253;voj&amp;#225;ře pracovat pod tlakem.&lt;/p&gt;  &lt;p&gt;A reakce na dal&amp;#353;&amp;#237; impulzy? Samozřejmě bude tak&amp;#233;. Začnu asi u př&amp;#237;nosu takov&amp;#233;ho certifik&amp;#225;tu pro firmu s v&amp;#253;voj&amp;#225;řem. Z&amp;#225;měrně ř&amp;#237;k&amp;#225;m firmu, protože zde je to, dle m&amp;#233;ho, markantněji viditeln&amp;#233;. Pokud se firma &amp;#250;častn&amp;#237; v&amp;#253;běrov&amp;#233;ho ř&amp;#237;zen&amp;#237; ve kter&amp;#233;m rozhoduj&amp;#237; manažeři, přeci jen l&amp;#233;pe vyzn&amp;#237;v&amp;#225;, pokud se firma může &lt;em&gt;&amp;quot;pochlubit&amp;quot;&lt;/em&gt; t&amp;#237;m, že na projektu budou pracovat certifikovan&amp;#237; pracovn&amp;#237;ci pro danou oblast. Dalo by se to přirovnat k tomu, když firma z&amp;#237;sk&amp;#225; certifik&amp;#225;t ISO - čili splnila podm&amp;#237;nky. Proto celkem rozum&amp;#237;m pochybovačům na potřebnost certifik&amp;#225;tu u jednotlivce u kter&amp;#233;ho přeci jen zadavatel zak&amp;#225;zky bude upřednostňovat zku&amp;#353;enosti a předchoz&amp;#237; reference.&lt;/p&gt;  &lt;p&gt;Čemu v&amp;#353;ak nerozum&amp;#237;m a co by mě jako v&amp;#253;voj&amp;#225;ře odradilo od spolupr&amp;#225;ce s firmou, pokud se k certifik&amp;#225;tům stav&amp;#237; obdobně jako ve v&amp;#253;&amp;#353;e uveden&amp;#233; citaci. Samozřejmě i v&amp;#253;voj&amp;#225;ř, kter&amp;#253; nem&amp;#225; složenu ž&amp;#225;dnou certifikaci může b&amp;#253;t kvalitněj&amp;#353;&amp;#237;m v&amp;#253;voj&amp;#225;řem, než ten, kdo touto zkou&amp;#353;kou pro&amp;#353;el. Neřekl bych v&amp;#353;ak, že složen&amp;#237; testu o ničem nevypov&amp;#237;d&amp;#225;. &lt;/p&gt;  &lt;p&gt;Od v&amp;#253;voj&amp;#225;ře, kter&amp;#253; chce zkou&amp;#353;ku složit a certifik&amp;#225;t z&amp;#237;skat to znamen&amp;#225; minim&amp;#225;lně se danou oblast naučit a věnovat tomu čas. Ať už se uč&amp;#237; samostatně, nebo čerp&amp;#225; jen ze sv&amp;#253;ch praktick&amp;#253;ch znalost&amp;#237;, vždy je to podloženo znalostmi, kter&amp;#233; musel někde z&amp;#237;skat. Někdo může nam&amp;#237;tnout, že existuj&amp;#237; společnosti, kter&amp;#233; se specializuj&amp;#237; pouze na dan&amp;#233; testy a kter&amp;#233; v&amp;#225;s na test připrav&amp;#237;, i tak tomu ale mus&amp;#237;te věnovat čas a pen&amp;#237;ze. Vždy to znamen&amp;#225;, že mus&amp;#237;m dan&amp;#233; problematice alespoň tro&amp;#353;ku porozumět.&lt;/p&gt;  &lt;p&gt;Certifik&amp;#225;t nezaruč&amp;#237; n&amp;#225;vyky a zku&amp;#353;enosti, co v&amp;#353;ak z toho mohu alespoň v současn&amp;#233; chv&amp;#237;li vyvodit, že dan&amp;#253; v&amp;#253;voj&amp;#225;ř m&amp;#225; z&amp;#225;jem a chce se dan&amp;#233;mu oboru věnovat, je ochoten podstoupit srovn&amp;#225;n&amp;#237; s ostatn&amp;#237;mi. A pr&amp;#225;vě už toto považuji za kvalitu dan&amp;#233;ho v&amp;#253;voj&amp;#225;ře.&lt;/p&gt;  &lt;h3&gt;Co udělat pro zlep&amp;#353;en&amp;#237; vn&amp;#237;m&amp;#225;n&amp;#237; certifikac&amp;#237;&lt;/h3&gt;  &lt;p&gt;Na konci tohoto nadpisu by klidně mohl b&amp;#253;t i otazn&amp;#237;k. Opět se na to pod&amp;#237;v&amp;#225;m sv&amp;#253;ma očima a t&amp;#237;m, co jsem si pro&amp;#353;el. Jak jsem se již zm&amp;#237;nil, l&amp;#237;bil se mi test, kter&amp;#253; jsem absolvoval pro z&amp;#237;sk&amp;#225;n&amp;#237; certifik&amp;#225;tu &lt;strong&gt;MCPD&lt;/strong&gt;. Nejen že trval jednou tak dlouho co předchoz&amp;#237; testy, ale obsahoval i v&amp;#237;ce ot&amp;#225;zek s komplexněj&amp;#353;&amp;#237;m pohledem. Dle m&amp;#233;ho vyžadoval v&amp;#237;ce praktick&amp;#253;ch znalost&amp;#237; a z&amp;#225;roveň s t&amp;#237;m dost&amp;#225;val zkou&amp;#353;en&amp;#233;ho na časov&amp;#233;ho presu a nutnosti se spr&amp;#225;vně rozhodnout. Což si přiznejme, se při v&amp;#253;voji software na zak&amp;#225;zku děje poměrně často.&lt;/p&gt;  &lt;p&gt;Co bych osobně přiv&amp;#237;tal a zřejmě by zv&amp;#253;&amp;#353;ilo kvalitu certifikovan&amp;#253;ch v&amp;#253;voj&amp;#225;řů je skladba odpověd&amp;#237; a vět&amp;#353;&amp;#237; zapojen&amp;#237; zkou&amp;#353;en&amp;#233;ho do vytvořen&amp;#237; odpovědi. Je jasn&amp;#233;, že nen&amp;#237; možn&amp;#233;, aby se př&amp;#237;mo zapisoval třeba k&amp;#243;d programu, ale jistě by bylo realizovateln&amp;#233; m&amp;#237;t seznam př&amp;#237;kazů a poskl&amp;#225;dat z nich nejen funkčn&amp;#237;, ale i optim&amp;#225;ln&amp;#237; k&amp;#243;d. &lt;/p&gt;  &lt;p&gt;Pokud bych to měl uv&amp;#233;st na př&amp;#237;kladu:&lt;/p&gt;  &lt;p&gt;Mějme n&amp;#225;sleduj&amp;#237;c&amp;#237;m způsobem definov&amp;#225;nu sadu př&amp;#237;kazů, kter&amp;#233; můžeme použ&amp;#237;t ve winform aplikaci. Proměnn&amp;#225; cmb definuje ComboBox, kter&amp;#253; m&amp;#225;me naplnit daty. Poskl&amp;#225;dejte př&amp;#237;kazy za sebe tak, aby bylo naplněn&amp;#237; comboboxu optim&amp;#225;ln&amp;#237;. Metoda datovyZdroj vrac&amp;#237; kolekci objektů v vlastnostmi PropertyName a PropertyValue.&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;pre&gt;&lt;span class="lnum"&gt;&lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;div class="csharpcode"&gt;
    &lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;}&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;} &lt;span class="kwrd"&gt;finally&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;cmb.BeginInvoke();&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;cmb.BeginUpdate();&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;cmb.DataSource = datovyZdroj();&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;cmb.DataBind();&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;cmb.DisplayMember = &lt;span class="str"&gt;&amp;quot;PropertyName&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;cmb.EndInvoke();&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;cmb.EndUpdate();&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;cmb.ValueMember = &lt;span class="str"&gt;&amp;quot;PropertyValue&amp;quot;&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;&lt;span class="kwrd"&gt;try&lt;/span&gt; {&lt;/pre&gt;
  &lt;/div&gt;

  &lt;pre&gt;&amp;#160;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Mysl&amp;#237;m, že obdobn&amp;#253;ch ot&amp;#225;zek by mělo b&amp;#253;t v testech v&amp;#237;ce, zkou&amp;#353;en&amp;#253; v&amp;#253;voj&amp;#225;ř by tak byl nucen prok&amp;#225;zat sv&amp;#233; znalosti prověřen&amp;#233; praktick&amp;#253;m použ&amp;#237;v&amp;#225;n&amp;#237;m.&lt;/p&gt;

&lt;p&gt;Co si o certifikac&amp;#237;ch mysl&amp;#237;te vy a co by pomohlo k jejich lep&amp;#353;&amp;#237;mu vn&amp;#237;m&amp;#225;n&amp;#237;?&lt;/p&gt;</content>
    <rights type="html">&amp;copy; Jarda Jirava 2008</rights>
  </entry>
  <entry>
    <id>iv-neformalni-setkani-builder-recap</id>
    <title type="text">IV. neform&amp;aacute;ln&amp;iacute; setk&amp;aacute;n&amp;iacute; .net builder.cz - recap</title>
    <summary type="text">&lt;p&gt;Ve středu se uskutečnilo již IV. setk&amp;#225;n&amp;#237; př&amp;#237;znivců a přispěvatelů .net f&amp;#243;ra na serveru &lt;a href="http://forum.builder.cz/list.php?31"&gt;builder.cz&lt;/a&gt;. Ten kdo dorazil snad nebyl zklam&amp;#225;n a str&amp;#225;vil několik m&amp;#225;lo hodin v přitomnosti kolegů v&amp;#253;voj&amp;#225;řů.&lt;/p&gt;</summary>
    <published>2008-08-08T09:21:32+02:00</published>
    <updated>2008-08-08T09:21:32+02:00</updated>
    <link rel="alternate" href="http://jirava.net/blog/Archive/iv-neformalni-setkani-builder-recap.aspx" />
    <category term="builder.cz" />
    <content type="html">&lt;p&gt;Ve středu se uskutečnilo již IV. setk&amp;#225;n&amp;#237; př&amp;#237;znivců a přispěvatelů .net f&amp;#243;ra na serveru &lt;a href="http://forum.builder.cz/list.php?31"&gt;builder.cz&lt;/a&gt;. Ten kdo dorazil snad nebyl zklam&amp;#225;n a str&amp;#225;vil několik m&amp;#225;lo hodin v přitomnosti kolegů v&amp;#253;voj&amp;#225;řů.&lt;/p&gt;  &lt;p&gt;Hned v &amp;#250;vodu mus&amp;#237;m poděkovat v&amp;#353;em, kteř&amp;#237; se z&amp;#250;častnili za jejich dochvilnost a dobrou n&amp;#225;ladu. Pro ty, kteř&amp;#237; nedorazili a nebo neměli tu možnost se dostavit, přin&amp;#225;&amp;#353;&amp;#237;m kr&amp;#225;tk&amp;#233; shrnut&amp;#237; tak jak jsem byl schopen si prob&amp;#237;ran&amp;#225; t&amp;#233;mata zapamatovat.&lt;/p&gt;  &lt;h3&gt;Rekapitulace&lt;/h3&gt;  &lt;p&gt;Snad hned na &amp;#250;vod neprozrad&amp;#237;m nic tajn&amp;#233;ho, když jsme se dozvěděli, že release &lt;a href="http://www.microsoft.com/sqlserver/2008/en/us/default.aspx"&gt;SQL Server 2008&lt;/a&gt; bude o 14 dn&amp;#237; pozdržen, jak&amp;#233; pak bylo m&amp;#233; překvapen&amp;#237;, když včera byl proveden release :-). Na podzim se tak&amp;#233; chystaj&amp;#237; DevDays a jistě s t&amp;#237;m i spousta novinek - co nov&amp;#233;ho se dozv&amp;#237;me, to se d&amp;#225; jen odhadovat. Pokud bych měl je&amp;#353;tě chvilku zůstat v .net&amp;#237;m světě, tak se probralo něco m&amp;#225;lo z pracovn&amp;#237;ch z&amp;#225;ležitost&amp;#237; okolo port&amp;#225;lov&amp;#233;ho ře&amp;#353;en&amp;#237; nebo jak ře&amp;#353;it incidenty s &lt;a href="http://www.microsoft.com/cs/cz/default.aspx"&gt;MS&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;A dal&amp;#353;&amp;#237; t&amp;#233;mata, kter&amp;#225; určitě nemohla chybět: dopravn&amp;#237; situace, kriminalita - př&amp;#237;běhy a historky nejen z čech na toto t&amp;#233;ma, a tak&amp;#233; samozřejmě nemohl chybět &lt;a href="http://www.apple.com/iphone/"&gt;iPhone&lt;/a&gt; a jeho konkurence. Kolegov&amp;#233; se t&amp;#233;ž rozpov&amp;#237;dali o syst&amp;#233;mu TETRA a TETRAPOL a do&amp;#353;lo i na zas&amp;#237;ťov&amp;#225;n&amp;#237; obytn&amp;#233;ho domu. Jak si můžete přeč&amp;#237;st, t&amp;#233;mata různorod&amp;#225; a každ&amp;#253; si na&amp;#353;el sv&amp;#233; obl&amp;#237;ben&amp;#233;. Na ta, na kter&amp;#225; jsem zapoměl, př&amp;#237;&amp;#353;tě se zkus&amp;#237;m polep&amp;#353;it.&lt;/p&gt;  &lt;p&gt;Samozřejmě tak&amp;#233; padl dotaz, jak v&amp;#237;ce podpořit česk&amp;#233; v&amp;#253;voj&amp;#225;ře a d&amp;#225;t jim k dispozici (nejen) webov&amp;#233; aplikace. A j&amp;#225; snad vyzkou&amp;#353;&amp;#237;m &lt;a href="https://www.mesh.com/Welcome/Welcome.aspx"&gt;Mesh&lt;/a&gt;.&lt;/p&gt;  &lt;h3&gt;Zhodnocen&amp;#237;&lt;/h3&gt;  &lt;p&gt;Douf&amp;#225;m, že v&amp;#353;ichni odch&amp;#225;zeli spokojen&amp;#237; a s nov&amp;#253;mi informacemi a př&amp;#237;&amp;#353;tě se opět sejdeme. Poděkovat mus&amp;#237;m i ochotn&amp;#233;mu a př&amp;#237;jemn&amp;#233;mu person&amp;#225;lu restaurace &lt;a href="http://bilavrana.com/"&gt;B&amp;#237;l&amp;#225; Vr&amp;#225;na&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Co mě osobně mrzelo, že Jakub Blažek, Michal August&amp;#253;n, Kirkie a tak&amp;#233; Tom&amp;#225;&amp;#353; &amp;#352;m&amp;#237;d se ani nenam&amp;#225;hali d&amp;#225;t jakkoli vědět, že jim nem&amp;#225;me držet m&amp;#237;sto u stolu.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;S ostatn&amp;#237;mi se budu tě&amp;#353;it na shledanou, a douf&amp;#225;m, že to bude je&amp;#353;tě tento rok.&lt;/p&gt;  &lt;p&gt;A je&amp;#353;tě několik &lt;a href="http://www.flickr.com/photos/jirava/sets/72157606603543894/detail/"&gt;fotografi&amp;#237;&lt;/a&gt;, kter&amp;#233; poř&amp;#237;dil &amp;#352;těp&amp;#225;n Bechyňsk&amp;#253;.&lt;/p&gt;</content>
    <rights type="html">&amp;copy; Jarda Jirava 2008</rights>
  </entry>
</feed>