<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:a10="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <title>Jarda Jirava .net - blog</title>
    <link>http://jirava.net/blog/1.aspx</link>
    <description>Jarda Jirava .net - blog</description>
    <copyright>&amp;copy; Jarda Jirava 2008</copyright>
    <managingEditor>jarda jirava net</managingEditor>
    <lastBuildDate>Fri, 21 Nov 2008 17:47:46 +0100</lastBuildDate>
    <generator>jirava.net syndication generator</generator>
    <item>
      <guid isPermaLink="false">sqlserver2008-management-studio</guid>
      <link>http://jirava.net/blog/Archive/sqlserver2008-management-studio.aspx</link>
      <category>.net+technology</category>
      <title>RE: Pot&amp;iacute;že s MS SQL Server Management Studiem?</title>
      <description>&lt;p&gt;Ráno jsem si přečetl příspěvek Tomáše o &lt;a href="http://tomas-net.blogspot.com/2008/11/pote-s-ms-sql-server-management-studiem.html"&gt;jeho problémech&lt;/a&gt; s MS SQL Server Management Studiem pro &lt;a href="http://www.microsoft.com/sqlserver/2008/en/us/default.aspx"&gt;SQL Server 2008&lt;/a&gt;.&lt;/p&gt;</description>
      <pubDate>Tue, 18 Nov 2008 22:38:13 +0100</pubDate>
      <a10:updated>2008-11-18T22:38:13+01:00</a10:updated>
      <a10:rights type="html">&amp;copy; Jarda Jirava 2008</a10:rights>
      <a10:content type="html">&lt;p&gt;Ráno jsem si přečetl příspěvek Tomáše o &lt;a href="http://tomas-net.blogspot.com/2008/11/pote-s-ms-sql-server-management-studiem.html"&gt;jeho problémech&lt;/a&gt; s MS SQL Server Management Studiem pro &lt;a href="http://www.microsoft.com/sqlserver/2008/en/us/default.aspx"&gt;SQL Server 2008&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Ač jsem reagoval již v komentáři, neodpustím si ještě několik poznámek, které si zaslouží maličko více rozvést a najít řešení, které z Management Studia vytvoří plnohodnotný nástroj pro databázového administrátora.&lt;/p&gt; &lt;p&gt;Výroky a postesky nad tímto problémem:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Nepodařilo se mi ho přesvědčit, aby přesunulo sloupce v tabulce tak jak potřebuji. Po této operaci, kterou Designer tabulky viditelně umí, dojde při uložení změn v tabulce k chybě, která se hlásí jako "&lt;em&gt;Název změněné tabulky&lt;/em&gt;".&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;obdobně jako tímto:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Velmi často při uložení změn v tabulce dojde k chybě ukládání. Netuším o jakou chybu jde, protože se hlásí stejně jako chyba předchozí.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;jsou způsobeny pouze tím, jak se Management studio chová k ukládání databázových objektů. Tyto "problémy" jsou způsobeny tím, že se Management studio snaží při takovýchto změnách provést drop objektu a jeho znovuvytvoření, tak jak je popsáno na &lt;a href="http://msdn.microsoft.com/en-us/library/bb895146.aspx"&gt;tomto místě&lt;/a&gt;. Je zde i návod, jak docílit změny a být, takříkajíc, &lt;strong&gt;spokojený&lt;/strong&gt;, postačující je odškrnout volbu v menu &lt;em&gt;Tools-&amp;gt;Options-&amp;gt;Designers-&amp;gt;Table and Database designers-&amp;gt;Prevent saving changes that require table re-creation&lt;/em&gt;.&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Na Subversion je ovšem lepší ukládat textové soubory a to rozhodně záloha MS SQL serverů není. Textový soubor si tedy vyrábím v Management Studiu pomocí &lt;em&gt;Generate Scripts. &lt;/em&gt;Jsem rád, že to Microsoft umí. Bohužel průvodce neumím zkrátit a nastavené volby si nepamatuje. Je to velmi zdlouhavé, zdržující a protivé.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Jak jsem se již zmínil v komentáři pod článkem, toto je asi lepší vyřešit pomocí Powershell scriptu. Samozřejmě, nesmí se zapomenout doinstalovat SQL Server PowerShell snapin pomocí příkazu &lt;strong&gt;sqlps&lt;/strong&gt;. Poté je již možné vyscriptovat jakýkoli databázový objekt. Pro tabulky je to například příkazem:&lt;/p&gt; &lt;p&gt;&lt;code&gt;PS SQLSERVER:\&amp;gt; sl SQLSERVER:\SQL\[server]\[instance]\Databases\[catalog]\Tables; gci| %{$_.Script()} &amp;gt; c:\tables.txt&lt;/code&gt;&lt;/p&gt; &lt;p&gt; Kde je potřeba zaměnit správné hodnoty za placeholdry [server], [instance] - zadat název &lt;em&gt;default&lt;/em&gt; v případě, že se jedná o default instanci a samozřejmě [catalog] je název samotné databáze.&lt;/p&gt; &lt;p&gt;Myslím, že jednodušeji to snad jít ani nemůže. ;-)&lt;/p&gt;</a10:content>
    </item>
    <item>
      <guid isPermaLink="false">simple-aspnet-mvc-controls</guid>
      <link>http://jirava.net/blog/Archive/simple-aspnet-mvc-controls.aspx</link>
      <category>.net+technology</category>
      <title>Simple asp.net MVC Controls</title>
      <description>Výchozí release jednoduchých asp.net MVC prvků je na světě. Jaká je motivace pro vytvoření těchto prvků a jaká je jejich budoucnost?</description>
      <pubDate>Mon, 17 Nov 2008 22:29:38 +0100</pubDate>
      <a10:updated>2008-11-17T22:29:38+01:00</a10:updated>
      <a10:rights type="html">&amp;copy; Jarda Jirava 2008</a10:rights>
      <a10:content type="html">&lt;p&gt;Před pár minutami se mi povedlo uveřejnit na serveru &lt;a href="http://www.codeplex.com/"&gt;CodePlex.com&lt;/a&gt; první alpha release verzi &lt;a href="http://www.codeplex.com/simplemvccontrols"&gt;asp.net MVC prvků&lt;/a&gt;.&lt;/p&gt; &lt;h3&gt;Fieldset&lt;/h3&gt; &lt;p&gt;V tomto úvodním release je zahrnut pouze prvek &lt;strong&gt;Fieldset&lt;/strong&gt;, který je inspirován prvekem Grid z projektu &lt;a href="http://www.codeplex.com/mvccontrib"&gt;MVCContrib&lt;/a&gt;. Tento prvek jsem původně vytvořil pro webové stránky zpracovávané v soutěži na serveru vbnet.cz. Ona myšlenka takovéhoto prvku, který zabezpečí jednotný vzhled a ucelený přístup k tvorbě formulářů na web stránkách, se mi zalíbil a proto jsem jej rozvedl a maličko vylepšil.&lt;/p&gt; &lt;p&gt;Již nyní mám v hlavě další vylepšení a možný rozvoj. Jsem však přesvědčen, že je takovýto prvek lepší publikovat co nejdříve a inspirovat se názory komunity. Budu proto rád, pokud mi napíšete možná vylepšení nebo připomínky.&lt;/p&gt; &lt;h3&gt;Proč simple&lt;/h3&gt; &lt;p&gt;V čem by měl být smysl takto vytvořeného prvku před samostatným tvořením vstupního formuláře? Prvním impulzem, k tvotbě tohoto ovládacího prvku pro mě bylo neustálé zapisování HTML kódu, který se pro každý prvek formuláře opakoval. Dalším podnětem pak byla náchylnost k chybám při zápisu. S release verzí asp.net MVC Beta přibyla možnost validací prvků, avšak pro tyto prvky bylo třeba uvést shodný název, jaký je uveden v tzv. ModelState. Vznikla tak potřeba pro každý validovaný prvek tento název zapsat dvakrát, což už vede k možným chybám.&lt;/p&gt; &lt;p&gt;Z těchto důvodů jsem se rozhodl vytvořit takovou formu zápisu, která by &lt;strong&gt;vývojáře&lt;/strong&gt; odstínila od těchto potřeb a nabídla mu přímou a jednoduchou cestu k cíli. Ukázku možného zápisu jsem prezentoval na oficiálních stránkách &lt;a href="http://www.codeplex.com/simplemvccontrols"&gt;simple asp.net MVC Controls&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Doufám, že se mi cíl vytvoření jednoduchých prvků pro asp.net MVC podařil a bude na čem stavět pro další verze.&lt;/p&gt;</a10:content>
    </item>
    <item>
      <guid isPermaLink="false">silverlight-2</guid>
      <link>http://jirava.net/blog/Archive/silverlight-2.aspx</link>
      <category>.net+technology</category>
      <title>Silverlight 2.0.31005</title>
      <description>&lt;p&gt;Je to tak, po del&amp;#353;&amp;#237;m ček&amp;#225;n&amp;#237; se konečně dostalo na Silverlight 2.0 a jeho ofici&amp;#225;ln&amp;#237; vypu&amp;#353;těn&amp;#237; na web.&lt;/p&gt;</description>
      <pubDate>Tue, 14 Oct 2008 10:40:02 +0200</pubDate>
      <a10:updated>2008-10-14T10:40:02+02:00</a10:updated>
      <a10:rights type="html">&amp;copy; Jarda Jirava 2008</a10:rights>
      <a10:content type="html">&lt;p&gt;Je to tak, po del&amp;#353;&amp;#237;m ček&amp;#225;n&amp;#237; se konečně dostalo na Silverlight 2.0 a jeho ofici&amp;#225;ln&amp;#237; vypu&amp;#353;těn&amp;#237; na web.&lt;/p&gt;  &lt;p&gt;Byť o t&amp;#233;to hork&amp;#233; novince jistě každ&amp;#253; v&amp;#237;, neboť se to obdobn&amp;#253;mi př&amp;#237;spěvky na bloz&amp;#237;ch jen hemž&amp;#237;, ani j&amp;#225; si neodpust&amp;#237;m několik m&amp;#225;lo postřehů. Nejdř&amp;#237;ve těch form&amp;#225;ln&amp;#237;ch:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.microsoft.com/silverlight/"&gt;ke stažen&amp;#237;&lt;/a&gt; na str&amp;#225;nk&amp;#225;ch Microsoftu&lt;/li&gt;    &lt;li&gt;v př&amp;#237;padě, že m&amp;#225;te nainstalov&amp;#225;nu předchoz&amp;#237; Betu, update se provede automaticky&lt;/li&gt;    &lt;li&gt;velikost instalace cca 4.5 MB&lt;/li&gt;    &lt;li&gt;možnosti instalace do prohl&amp;#237;žečů IE 7, IE6, Firefox 1.5, Firefox 2 a FireFox 3, pokud použ&amp;#237;v&amp;#225;te syst&amp;#233;m MAC OS ve verzi 10.4.8 a vy&amp;#353;&amp;#353;&amp;#237; na Intelu, tak i pro Safari.&lt;/li&gt;    &lt;li&gt;nepovedlo se mi roz&amp;#353;&amp;#237;řit si Chromium - Google chrome&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Samozřejmě nesm&amp;#237; chybět nějak&amp;#233; ty informace pro v&amp;#253;voj&amp;#225;ře. Takže pokud jste př&amp;#237;znivci &lt;a href="http://en.wikipedia.org/wiki/Rich_Internet_Application"&gt;RIA&lt;/a&gt; aplikac&amp;#237;, určitě v&amp;#225;s možnosti, kter&amp;#233; přin&amp;#225;&amp;#353;&amp;#237; Silverlight ve verzi 2.0 potě&amp;#353;&amp;#237;. Mezi ty z&amp;#225;kladn&amp;#237; prvky patř&amp;#237;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;ovl&amp;#225;dac&amp;#237; prvky jako jsou DataGrid, ListBox, Slider, ScrollViewer, Calendar a dal&amp;#353;&amp;#237;, kter&amp;#233; se budou objevovat na str&amp;#225;nk&amp;#225;ch &lt;a href="http://www.codeplex.com"&gt;CodePlex&lt;/a&gt; (souč&amp;#225;st&amp;#237; by měl b&amp;#253;t třeba WrapPanel, DockPanel, ViewBox, Label, Expander, TreeView a dal&amp;#353;&amp;#237;)&lt;/li&gt;    &lt;li&gt;pokud se zab&amp;#253;v&amp;#225;te tvorbou WPF aplikac&amp;#237;, bude v&amp;#225;m bl&amp;#237;zk&amp;#233; skinov&amp;#225;n&amp;#237; a použit&amp;#237; templates.&lt;/li&gt;    &lt;li&gt;podpora vol&amp;#225;n&amp;#237; webov&amp;#253;ch služeb - a to jak prov&amp;#225;z&amp;#225;nost&amp;#237; na WCF tak tak&amp;#233; možnost komunikovat přes REST, SOAP nebo standardn&amp;#237; HTTP komunikaci&lt;/li&gt;    &lt;li&gt;podporu hned několika programovac&amp;#237;ch jazyků - takže Silverlight aplikace můžete ps&amp;#225;t nejen v C# nebo VB.NET, ale tak&amp;#233; v dynamick&amp;#253;ch jazyc&amp;#237;ch jako je JavaScript nebo IronPython či IronRuby. A nepochybně se najdou i dal&amp;#353;&amp;#237; portace, třeba pro PHP&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Co určitě potě&amp;#353;&amp;#237; je skutečnost, že se připravuj&amp;#237; Express n&amp;#225;stroje, takže každ&amp;#253; si bude moci vyzkou&amp;#353;et jak vytvořit Silverlight aplikaci. A pokud přeci jen nejste tak &amp;#250;plně zast&amp;#225;nci MS a obl&amp;#237;bili jste si v&amp;#253;vojov&amp;#253; n&amp;#225;stroj Eclipse, tak můžete vyzkou&amp;#353;et &lt;a href="http://www.eclipse4sl.org/"&gt;Eclipse for Silverlight&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Pro ty z v&amp;#225;s, kter&amp;#233; jsem nal&amp;#225;kal, je&amp;#353;tě možnost stažen&amp;#237; &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=8d933343-038f-499c-986c-c3c7e87a60b3&amp;amp;displaylang=en&amp;amp;tm"&gt;SDK&lt;/a&gt; a v př&amp;#237;padě, že použ&amp;#237;v&amp;#225;te Expression Blend 2, tak je vyd&amp;#225;n &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=eb9b5c48-ba2b-4c39-a1c3-135c60bbbe66&amp;amp;displaylang=en&amp;amp;tm"&gt;Service pack&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Přeji př&amp;#237;jemnou z&amp;#225;bavu při vytv&amp;#225;řen&amp;#237; lep&amp;#353;&amp;#237;ch a hezč&amp;#237;ch aplikac&amp;#237;.&lt;/p&gt;</a10:content>
    </item>
    <item>
      <guid isPermaLink="false">vyzva-sablonovy-system-nvelocity</guid>
      <link>http://jirava.net/blog/Archive/vyzva-sablonovy-system-nvelocity.aspx</link>
      <category>.net+technology</category>
      <category>vyzva</category>
      <title>V&amp;yacute;zva - &amp;scaron;ablonov&amp;yacute; syst&amp;eacute;m</title>
      <description>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á?</description>
      <pubDate>Tue, 07 Oct 2008 08:15:26 +0200</pubDate>
      <a10:updated>2008-10-07T08:15:26+02:00</a10:updated>
      <a10:rights type="html">&amp;copy; Jarda Jirava 2008</a10:rights>
      <a10: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;</a10:content>
    </item>
    <item>
      <guid isPermaLink="false">vyzva-lokalni-databaze</guid>
      <link>http://jirava.net/blog/Archive/vyzva-lokalni-databaze.aspx</link>
      <category>.net+technology</category>
      <category>vyzva</category>
      <title>V&amp;yacute;zva - lok&amp;aacute;ln&amp;iacute; datab&amp;aacute;ze</title>
      <description>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.</description>
      <pubDate>Thu, 02 Oct 2008 08:15:57 +0200</pubDate>
      <a10:updated>2008-10-02T08:15:57+02:00</a10:updated>
      <a10:rights type="html">&amp;copy; Jarda Jirava 2008</a10:rights>
      <a10: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;</a10:content>
    </item>
    <item>
      <guid isPermaLink="false">vyzva-xml-rpc-wordpress</guid>
      <link>http://jirava.net/blog/Archive/vyzva-xml-rpc-wordpress.aspx</link>
      <category>.net+technology</category>
      <category>vyzva</category>
      <title>V&amp;yacute;zva - napojen&amp;iacute; na XML-RPC wordpressu</title>
      <description>Vytvoření klienta pomocí XML-RPC pro vzdálený přístup k publikačnímu systému WordPress.</description>
      <pubDate>Tue, 30 Sep 2008 08:15:11 +0200</pubDate>
      <a10:updated>2008-09-30T08:15:11+02:00</a10:updated>
      <a10:rights type="html">&amp;copy; Jarda Jirava 2008</a10:rights>
      <a10: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;</a10:content>
    </item>
    <item>
      <guid isPermaLink="false">vyzva-publikacni-system-wordpress</guid>
      <link>http://jirava.net/blog/Archive/vyzva-publikacni-system-wordpress.aspx</link>
      <category>.net+technology</category>
      <category>vyzva</category>
      <title>V&amp;yacute;zva - publikačn&amp;iacute; syst&amp;eacute;m WordPress</title>
      <description>Použití publikačního systému WordPress pro publikaci dat získaných z exportu xml pro tvorbu webu.</description>
      <pubDate>Thu, 25 Sep 2008 08:15:39 +0200</pubDate>
      <a10:updated>2008-09-25T08:15:39+02:00</a10:updated>
      <a10:rights type="html">&amp;copy; Jarda Jirava 2008</a10:rights>
      <a10: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;</a10:content>
    </item>
    <item>
      <guid isPermaLink="false">vyzva-domenove-objekty-linq-to-xml</guid>
      <link>http://jirava.net/blog/Archive/vyzva-domenove-objekty-linq-to-xml.aspx</link>
      <category>.net+technology</category>
      <category>vyzva</category>
      <title>V&amp;yacute;zva - dom&amp;eacute;nov&amp;eacute; objekty a jejich naplněn&amp;iacute;</title>
      <description>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í.</description>
      <pubDate>Tue, 23 Sep 2008 08:15:26 +0200</pubDate>
      <a10:updated>2008-09-23T08:15:26+02:00</a10:updated>
      <a10:rights type="html">&amp;copy; Jarda Jirava 2008</a10:rights>
      <a10: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;</a10:content>
    </item>
    <item>
      <guid isPermaLink="false">vyzva-definice-zdroje-dat</guid>
      <link>http://jirava.net/blog/Archive/vyzva-definice-zdroje-dat.aspx</link>
      <category>.net+technology</category>
      <category>vyzva</category>
      <title>V&amp;yacute;zva - definice zdroje dat</title>
      <description>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.</description>
      <pubDate>Thu, 18 Sep 2008 08:15:12 +0200</pubDate>
      <a10:updated>2008-09-18T08:15:12+02:00</a10:updated>
      <a10:rights type="html">&amp;copy; Jarda Jirava 2008</a10:rights>
      <a10: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;</a10:content>
    </item>
    <item>
      <guid isPermaLink="false">vyzva-z-webtrhu</guid>
      <link>http://jirava.net/blog/Archive/vyzva-z-webtrhu.aspx</link>
      <category>.net+technology</category>
      <category>vyzva</category>
      <title>V&amp;yacute;zva z webtrhu</title>
      <description>Jak také může skončit jedna celkem nevinná reakce na poptávku jednoduchého systému pro tvorbu webu z xml exportu.</description>
      <pubDate>Tue, 16 Sep 2008 08:15:40 +0200</pubDate>
      <a10:updated>2008-09-16T08:15:40+02:00</a10:updated>
      <a10:rights type="html">&amp;copy; Jarda Jirava 2008</a10:rights>
      <a10: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;</a10:content>
    </item>
  </channel>
</rss>