<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4053149</id><updated>2012-05-31T14:38:58.538+02:00</updated><category term='java-6'/><category term='hibernate'/><category term='spring-framework'/><category term='podcast'/><category term='jdbc'/><category term='enterprise-java'/><category term='vyvoj-web-aplikaci'/><category term='czjug'/><category term='maven'/><category term='mvn'/><category term='clanky-na-vikend'/><category term='java-5'/><category term='netbeans'/><category term='jbuilder'/><category term='databaze'/><category term='jboss-seam'/><category term='ejb-3'/><category term='eclipse-tipy-a-triky'/><category term='pro-zacatecniky'/><category term='desktop'/><category term='Continuous Delivery'/><category term='java-7'/><category term='nosql'/><category term='ria'/><category term='eclipse'/><category term='pranice'/><category term='sun-tech-days'/><title type='text'>Dagblog</title><subtitle type='html'>Blog nejen o programování pro všechny kodery a koderky.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.dagblog.cz/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default'/><link rel='alternate' type='text/html' href='http://www.dagblog.cz/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default?start-index=26&amp;max-results=25'/><author><name>Roman Pichlík</name><uri>https://profiles.google.com/117598003560721106242</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-VsxZP6r_d4g/AAAAAAAAAAI/AAAAAAAAA5g/kzXGTBcrfyg/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>847</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4053149.post-7181691854749042610</id><published>2012-05-28T15:24:00.000+02:00</published><updated>2012-05-28T15:26:43.044+02:00</updated><title type='text'>Pět a jeden absurdní důvod proč nemáme v JDK podporu JSON</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
Pokaždé když&amp;nbsp;pracuji&amp;nbsp;v Jave s &lt;a href="http://en.wikipedia.org/wiki/JSON"&gt;JSON&lt;/a&gt; mám pocit, že jsme stopadesát let za&amp;nbsp;opicemi. Většinou sice používám skvělou knihovnu &lt;a href="http://jackson.codehaus.org/"&gt;Jackson&lt;/a&gt; (pozor nejedná se o pohrobka ikony pop music Michaela Jacksona), ale i její použití je jako jíti s kanonem na vrabce. Mám úplně jednoduchou strukturu &lt;code&gt;{"l":"0","u":"1","v":1338207547}&lt;/code&gt;, kterou bych rád deserializoval do mapy. Opravdu nerozumím tomu proč už v standardním &lt;i&gt;JDK&lt;/i&gt; Javy neexistuje stupidní jednoduché &lt;i&gt;API&lt;/i&gt;, které mi to umožní. Napadá mě několik&amp;nbsp;vysvětlení.&lt;br /&gt;
&lt;div style="text-align: left;"&gt;
&lt;/div&gt;
&lt;ul style="text-align: left;"&gt;
&lt;li&gt;Někoho rajcuje představa 100MB WARu k jehož dosáhnutí není potřeba vytvářet složitou aplikaci, ale vývojář si vystačí s pár základními problémy.&lt;/li&gt;
&lt;li&gt;Tvůrci Apache Jakarta Commons nevědí co dělají. Nicméně to nebrání většině aplikací používat právě jejich knihovny.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;JCP&lt;/i&gt; proces pro rozšiřování Javy je úplně k ničemu, neboť přidávání nových a potřebných &lt;i&gt;API&lt;/i&gt; nefunguje. Mimochodem jak dlouho už čekáme na nové &lt;i&gt;API&lt;/i&gt; pro práci s datumy?&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Nevylučuji ani možnost, že moje požadavky na něco čemu se říká &lt;i&gt;JDK&lt;/i&gt;, tedy standardní vývojový kit, &amp;nbsp;jsou značně přemrštěné a všichni si posledních deset let vystačíme přibližně s jedněmi a těmi samými prostředky.&lt;/li&gt;
&lt;li&gt;Práce na &lt;i&gt;JSON&lt;/i&gt; je pro mě&amp;nbsp;z nepochopitelných&amp;nbsp;důvodů vázaná na &lt;i&gt;Java EE&lt;/i&gt;. Touto logikou by ovšem v &lt;i&gt;JDK&lt;/i&gt;&amp;nbsp;nemohl skončit například &lt;i&gt;HTTP&lt;/i&gt; server a nebo JAXB. O nesmyslech typu embedované databáze ani nemluvě.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;JSON&lt;/i&gt; je technologie, o které nikdo v Oracle neslyšel. Případně si jí spojuje s konkurencí v podobě JavaScriptu.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Opravdu tomu nerozumím. Přidání nových API a rozšíření &lt;i&gt;JDK&lt;/i&gt; je totiž oproti změnám syntaxe jazyka věcí zpětně kompatibilní. Můžeme se zde točit na faktu, že i nafouknuté &lt;i&gt;JDK &lt;/i&gt;by bylo problém, ale z toho důvodu přece voláme po jeho modularitě. &amp;nbsp;Vlastně je to takový deadlock a teď se pomalu čeká na to kde to vyhnije.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Tam kde je možné Javu inovovat za cenu menšího rizika se to neděje. Namísto toho se její autoři pouští to riskantních podniků změny syntaxe.&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4053149-7181691854749042610?l=www.dagblog.cz' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.dagblog.cz/feeds/7181691854749042610/comments/default' title='Komentáře k příspěvku'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4053149&amp;postID=7181691854749042610' title='Komentáře: 10'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/7181691854749042610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/7181691854749042610'/><link rel='alternate' type='text/html' href='http://www.dagblog.cz/2012_05_27_archive.html#7181691854749042610' title='Pět a jeden absurdní důvod proč nemáme v JDK podporu JSON'/><author><name>Roman Pichlík</name><uri>https://profiles.google.com/117598003560721106242</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-VsxZP6r_d4g/AAAAAAAAAAI/AAAAAAAAA5g/kzXGTBcrfyg/s512-c/photo.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4053149.post-2620659000437372443</id><published>2012-05-25T09:47:00.002+02:00</published><updated>2012-05-25T09:53:09.525+02:00</updated><title type='text'>Pozor na minor updaty Javy</title><content type='html'>&lt;p&gt;Do Javy 7u6 (update 6) a Javy 8 se chystá změna hashovacího algoritmu pro stringové klíče do všech standardních implementací &lt;cite&gt;java.util.Map&lt;/cite&gt; (&lt;cite&gt;HashMap&lt;/cite&gt;, &lt;cite&gt;Hashtable&lt;/cite&gt;, &lt;cite&gt;LinkedHashMap&lt;/cite&gt;, &lt;cite&gt;WeakHashMap&lt;/cite&gt;, &lt;cite&gt;ConcurrentHashMap&lt;/cite&gt;). Tvůrci si slibují, že díky těmto  změnám sníží riziko kolizí a tím pádem nebude docházet ke zpomalení. Více si můžete ostatně přečíst v &lt;a href="http://mail.openjdk.java.net/pipermail/core-libs-dev/2012-May/010238.html"&gt; oznámení této změny&lt;/a&gt;. To co je na celé téhle záplatě zajímave je následující poznámka.&lt;/p&gt;&lt;blockquote cite="http://mail.openjdk.java.net/pipermail/core-libs-dev/2012-May/010238.html"&gt;&lt;p&gt;The iteration order of keys, values and entries for hash-based maps where the new algorithm has been invoked will vary for each HashMap instance. While the Java SE Map documentation makes no promises that iteration order of items returned from Maps will be consistent, developers should check if their applications have incorrectly created a dependency on the iteration order of Map entries, keys or values.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Přestože to je explicitně zmíněné v kontraktu Mapy, stejně bude existovat, a to bych se klidně vsadil, hromada kódu který třeba i nepřímo závisí na pořadí, v jakém se budou klíče vracet. Z mého pohledu je tohle zpětně nekompatibilní změna, ačkoliv skrytá a efektivní pokud dojde k naplnění určité podmínky (možná o to hůře protože to neodhalí standardní testy), a neměla jít rozhodně do updatu Javy 7. Osobně už jsem několikrát nepěkně sedl na lep  vlastní slepé víře v to, že změny v updatech Javy jsou kompatibilní a nehrozí žádné riziko, a dal svolení k provedení updatu, protože nám přece nic nehrozí...  Zvedám proto v tomhle případě varovný prst. Pozor na tenhle update, chyby v kódu se mohou projevit za velmi specifických podmínek a tedy velmi zákeřně.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4053149-2620659000437372443?l=www.dagblog.cz' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.dagblog.cz/feeds/2620659000437372443/comments/default' title='Komentáře k příspěvku'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4053149&amp;postID=2620659000437372443' title='Komentáře: 6'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/2620659000437372443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/2620659000437372443'/><link rel='alternate' type='text/html' href='http://www.dagblog.cz/2012_05_20_archive.html#2620659000437372443' title='Pozor na minor updaty Javy'/><author><name>Roman Pichlík</name><uri>https://profiles.google.com/117598003560721106242</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-VsxZP6r_d4g/AAAAAAAAAAI/AAAAAAAAA5g/kzXGTBcrfyg/s512-c/photo.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4053149.post-2492643180129864589</id><published>2012-05-13T20:23:00.004+02:00</published><updated>2012-05-13T20:23:46.468+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='spring-framework'/><title type='text'>Spring framework tréninkové materiály</title><content type='html'>&lt;p&gt;&lt;a href="https://github.com/dagi/spring-training"&gt;Tréninkové materiály&lt;/a&gt; k mému školeni Spring framework, jsou k dispozici na GitHubu. Prezentace k jednotlivým částem jsou odlinkované přímo z &lt;a href="https://github.com/dagi/spring-training/blob/master/README.md"&gt;README.md&lt;/a&gt; a najdete je i na &lt;a href="https://www.slideshare.net/pichlik"&gt;mém SlideShare profilu&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4053149-2492643180129864589?l=www.dagblog.cz' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.dagblog.cz/feeds/2492643180129864589/comments/default' title='Komentáře k příspěvku'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/2492643180129864589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/2492643180129864589'/><author><name>Roman Pichlík</name><uri>https://profiles.google.com/117598003560721106242</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-VsxZP6r_d4g/AAAAAAAAAAI/AAAAAAAAA5g/kzXGTBcrfyg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4053149.post-3001337758641359882</id><published>2012-05-09T22:53:00.002+02:00</published><updated>2012-05-09T22:53:40.909+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='podcast'/><title type='text'>CZ Podcast 64 - iOS, iPhone, iPad</title><content type='html'>&lt;p&gt;S tím zvukem to zase není úplně ono, ale jinak se nám s panem velkostatkářem Filem povedl dost luxusní &lt;a href="http://java.cz/article/czpodcast-ios-iphone-ipad"&gt;podcast&lt;/a&gt; s týpkama z &lt;cite&gt;Inmite&lt;/cite&gt; o vývoji pro &lt;cite&gt;iOS&lt;/cite&gt;. Poslechněte si to a dejte nám vědět. Příště se bude točit buďto o hrůzostrašných historkách z korporací, abychom zase najeli na méně vážnou notu. Nebo budeme mít, a teď pozor, low level téma a podiváme se na zoubek hackování mobilních a webových aplikací. Slovy klasika: jsme otevřeni všem možnostem přátelé.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4053149-3001337758641359882?l=www.dagblog.cz' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.dagblog.cz/feeds/3001337758641359882/comments/default' title='Komentáře k příspěvku'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/3001337758641359882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/3001337758641359882'/><author><name>Roman Pichlík</name><uri>https://profiles.google.com/117598003560721106242</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-VsxZP6r_d4g/AAAAAAAAAAI/AAAAAAAAA5g/kzXGTBcrfyg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4053149.post-496071788095797340</id><published>2012-05-03T10:50:00.001+02:00</published><updated>2012-05-03T10:50:11.194+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nosql'/><title type='text'>MongoDB pro Java vývojáře</title><content type='html'>&lt;p&gt;Na včerejším setkání JBoss User Group v Brně jsem měl prezentaci na téma &lt;cite&gt;MongoDB&lt;/cite&gt;. Slajdy najdete o kousek níže, rád bych ještě vypíchnul pár myšlenek, které zazněly, ale ze slajdů nemusí být úplně patrné.&lt;/p&gt;&lt;ul&gt; &lt;li&gt;NoSQL není jenom o velkých data. Speciálně MongoDB výrazně redukuje složitost persistentí vrstvy. Rozdíl mezi světem dokumentů a modelu tříd je mnohem menší než je to v případě relačních databází. Pro většinu aplikací, které v uvozovkách vezmou data a pošlou je na výstup, nepřináší relační databáze žádný benefit (kromě toho, že jste s ní pracovali posledních deset let ;-)&lt;/li&gt;
 &lt;li&gt;Při použití MongoDB a obecně NoSQL řešíte jiný typy problému, než které jste zvyklí řešit v relačním světě. Na druhou stranu vám odpadají problémy, které souvisí s managementem persistentního kontextu.&lt;/li&gt;
 &lt;li&gt;MongoDB není náhrada relačních databází, je to vhodný doplněk nebo alternativa chceteli. Relační databáze dávají perfektní smysl pro určité typy úkolů.&lt;/li&gt;
 &lt;li&gt;Smiřte se s tím, že občas povede návrh dokumentů k tomu, že budete mít redundantní data. Jinými slovy rovnou zapomeňte na nějakou normalizaci.&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;div style="width:425px" id="__ss_12782884"&gt;&lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/pichlik/mongodb-for-java-developers" title="MongoDB for Java Developers" target="_blank"&gt;MongoDB for Java Developers&lt;/a&gt;&lt;/strong&gt; &lt;iframe src="http://www.slideshare.net/slideshow/embed_code/12782884" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt; &lt;div style="padding:5px 0 12px"&gt;View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/pichlik" target="_blank"&gt;Roman Pichlik&lt;/a&gt; &lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4053149-496071788095797340?l=www.dagblog.cz' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.dagblog.cz/feeds/496071788095797340/comments/default' title='Komentáře k příspěvku'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/496071788095797340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/496071788095797340'/><author><name>Roman Pichlík</name><uri>https://profiles.google.com/117598003560721106242</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-VsxZP6r_d4g/AAAAAAAAAAI/AAAAAAAAA5g/kzXGTBcrfyg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4053149.post-5335444117695417059</id><published>2012-04-22T23:01:00.003+02:00</published><updated>2012-04-22T23:01:36.914+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='podcast'/><title type='text'>CZ Podcast 63 - Mezinárodní spolupráce</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;V &lt;a href="http://java.cz/article/cz-podcast-63-mezinarodni-spoluprace"&gt;tomto díle&lt;/a&gt; jsme se rozhodli v trochu uvolněné atmosféře probrat téma mezinárodní spolupráce. Přece jenom v IT dochází k tomu, že se práce v mezinárodním prostředí stává normou. Jaké jsou jednotlivé národy, ke komu máme my čechoslováci blíž a ke komu naopak dále. Hostem tohoto dílu byl Jan Tajzich ze společnosti Vendavo CZ. &lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4053149-5335444117695417059?l=www.dagblog.cz' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.dagblog.cz/feeds/5335444117695417059/comments/default' title='Komentáře k příspěvku'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/5335444117695417059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/5335444117695417059'/><author><name>Roman Pichlík</name><uri>https://profiles.google.com/117598003560721106242</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-VsxZP6r_d4g/AAAAAAAAAAI/AAAAAAAAA5g/kzXGTBcrfyg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4053149.post-7468044290533767116</id><published>2012-04-08T15:38:00.000+02:00</published><updated>2012-04-08T15:38:50.557+02:00</updated><title type='text'>Technologie a netechnická kritéria</title><content type='html'>&lt;p&gt;Když jsem v &lt;a href="http://www.dagblog.cz/2012_03_25_archive.html#8695733290044687299"&gt;předchozím článku&lt;/a&gt; podle některých totálně sepsul Javu, nezazněla od nikoho poznámka na téma komunita a nabídka pracovního trhu, doba nutná k zapracování nových vývojářů. Troufám si tvrdit, že na vývojářskou pozici v &lt;cite&gt;Jave&lt;/cite&gt; jsme schopni do měsíce najít kvalitního člověka a za další měsíc jej efektivně zapracovat. To sice nic nevypovídá o tom, že Java je technologicky na špičce, ale vypovídá to cosi o tom, že existuje obecně akceptovaný způsob vývoje. To velmi usnadňuje spolupráci všech vývojářů neboť máme postupy, které se jenom mírně liší firmu od firmy.&lt;/p&gt;&lt;p&gt;Pokud pracujete s velmi novými a neprozkoumanými technologieme a nebo jdete až na dřeň (náš případ použití &lt;cite&gt;JavaScript&lt;/cite&gt; - tlustý klient MVC, vlastní grafová knihovna), rovnou počítejte s tím, že obtížné bude jenom ty vývojáře najít. Neexistující a nebo malá komunita vám nenabídne skoro žádné možnosti ty vývojáře oslovit, případně si budovat pozici. Platí li teze &lt;cite&gt;Joela Spolskeho&lt;/cite&gt;:&lt;cite&gt;... nejlepší lidé práci mají a rozhodně nechodí po pohovorech&lt;/cite&gt;, pak si můžete rovnou najmout &lt;cite&gt;Sherlocka Holmese&lt;/cite&gt;, aby vám je našel.&lt;/p&gt;&lt;p&gt;Samozřejmě vždycky se můžete pokusit vychovat si vývojáře z nováčků. To má ovšem zásadní nevýhodu v tom, že se to projeví v  produktivitě celého týmu, a navíc nikdy nemáte jistotu, že se to povede. Jedná se o klasický kompromis mezi krátkodobým a dlouhodobým přínosem.&lt;/p&gt;&lt;p&gt;Na technologie můžete nahlížet několika různými pohledy a tyto netechnická kritéria mají skoro stejnou váhu jako ta technická.&lt;/p&gt;&lt;p&gt;p.s. Kdybych si měl vybrat technologii, pomocí které budu dělat klasické podnikové aplikace, šáhnul bych bez váhání po &lt;cite&gt;Jave&lt;/cite&gt;. A to jenom z toho důvodu, že velmi snadno najmu lidi. &lt;br /&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4053149-7468044290533767116?l=www.dagblog.cz' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.dagblog.cz/feeds/7468044290533767116/comments/default' title='Komentáře k příspěvku'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/7468044290533767116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/7468044290533767116'/><author><name>Roman Pichlík</name><uri>https://profiles.google.com/117598003560721106242</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-VsxZP6r_d4g/AAAAAAAAAAI/AAAAAAAAA5g/kzXGTBcrfyg/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4053149.post-1294635351132151347</id><published>2012-04-03T20:20:00.000+02:00</published><updated>2012-04-03T20:20:04.773+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='podcast'/><title type='text'>CZ Podcast 62 - Nette framework</title><content type='html'>&lt;p&gt;V díle 62. jsme vyzpovídali nestora české PHP scény a autora webového frameworku Nette &lt;cite&gt;Davida Grudla&lt;/cite&gt;. Kromě technických aspektů jsme se bavili o tom jak Nette vznikalo, kdo ho používá, jak se David dostal k programování, no prostě klasické czpodcastí interview. Tímto bychom vás chtěli zároveň pozvat na natáčení dalšího dílu s pracovním označením &lt;cite&gt;Vývoj v multikulturním prostředí aka Asijská spolupráce&lt;/cite&gt;, které proběhne 19.4.2012 od 18:30 ve firmě Vendavo CZ v Praze. Další detaily budou oznámeny na našem &lt;a href="http://twitter.com/#!/czpodcast"&gt;Twitter účtu&lt;/a&gt;. Pokud máte nějaké otázky, náměty, postřehy a komentáře sem s nimi do diskuze a nebo na náš email czpodcast zavinač gmail.com.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4053149-1294635351132151347?l=www.dagblog.cz' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.dagblog.cz/feeds/1294635351132151347/comments/default' title='Komentáře k příspěvku'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/1294635351132151347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/1294635351132151347'/><author><name>Roman Pichlík</name><uri>https://profiles.google.com/117598003560721106242</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-VsxZP6r_d4g/AAAAAAAAAAI/AAAAAAAAA5g/kzXGTBcrfyg/s512-c/photo.jpg'/></author><thr:total>0</thr:total><georss:featurename>Sokolovská 371/192, 180 00 Praha 8-Libeň, Česká republika</georss:featurename><georss:point>50.1027504 14.4776518</georss:point><georss:box>50.0823744 14.4381698 50.1231264 14.5171338</georss:box></entry><entry><id>tag:blogger.com,1999:blog-4053149.post-5730733394302175316</id><published>2012-03-31T22:11:00.000+02:00</published><updated>2012-03-31T22:13:01.160+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nosql'/><title type='text'>Stavíme infrastrukturu kolem MongoDB - model</title><content type='html'>&lt;p&gt;V poslední době jsem strávil nějaký čas psaním a vymýšlením konceptu persistentní vrstvy, nástrojů  a jejich implementace, který nám umožní ukládat &lt;cite&gt;JSON&lt;/cite&gt; dokumenty do &lt;cite&gt;NoSQL&lt;/cite&gt; databáze &lt;cite&gt;MongoDB&lt;/cite&gt;. Dokumenty i kolekce nemají žádné schéma. To má za následek, nebo alespoň u nás mělo, a divil bych se kdyby to někdo začal používat nějak sofistikovaněji, že moc nepřemýšlíte o struktuře dokumentů a prostě je ukládáte jak se vám zrovna hodí. To je velice příjemné a nějaký čas s tím vydržíte. Problém nastane ve chvíli kdy potřebujete ty dokumenty začít zpracovávat automaticky, například chcete udělat zálohu dokumentů vztahujících se k určité entitě v systému a nebo potřebujete zjistit, že odkazované dokumenty existují. Jinými slovy bez modelu popisujícího dokumenty, kolekce a jejich vztahy se neobejdete. Samozřejmě pokud si to nechcete dělat ručně v kódu pro každý typ dokumentu.&lt;/p&gt;&lt;p&gt;My jsme si data uložená v &lt;cite&gt;MongoDB&lt;/cite&gt; popsali jednoduchým modelem reprezentovaným JSON dokumentem, který je sám v &lt;cite&gt;MongoDB&lt;/cite&gt; uložený. Tento model slouží jednak pro nástroje, které dělají servisní operace, jako zálohy a jejich obnovu, validaci dat, čištění pohrobků apod.m a zároveň jím chceme řídit (zatím není implementováno) vlastní persistentní vrstvu, kterou  ukládáme dokumenty.&lt;/p&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-NHGPSCcrbMY/T3dkvoc7ztI/AAAAAAAAA4E/IO4BrUUGUIw/s1600/model-compact.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="197" width="320" src="http://3.bp.blogspot.com/-NHGPSCcrbMY/T3dkvoc7ztI/AAAAAAAAA4E/IO4BrUUGUIw/s320/model-compact.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;Struktura modelu vypadá následovně.&lt;/p&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/--Er9Ft2zsW4/T3dk2WX3YyI/AAAAAAAAA4Q/00r6yU0165Y/s1600/metamodel-structure.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="142" width="320" src="http://2.bp.blogspot.com/--Er9Ft2zsW4/T3dk2WX3YyI/AAAAAAAAA4Q/00r6yU0165Y/s320/metamodel-structure.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;&lt;cite&gt;DocumentStorageModel&lt;/cite&gt; reprezentuje vlastní model. Má verzi, která nám umožňuje otestovat kompatibilitu dat s ním asociovaných. Typickým příkladem je záloha, ze které se snažím obnovit data, a rád bych se přesvědčil, že aktuální data a tedy i runtime je kompatibilní, a nepotkají mě nepříjemnosti po jejich obnovení. Verzí se zároveň řídí například migrace dat.&lt;/p&gt;&lt;p&gt;&lt;cite&gt;DocumentStorageModel&lt;/cite&gt; obsahuje seznam kolekcí &lt;cite&gt;Collection&lt;/cite&gt;. Každá kolekce má jméno, pod kterým existuje v &lt;cite&gt;MongoDB&lt;/cite&gt;. Zároveň má dokumentaci &lt;cite&gt;Documentation&lt;/cite&gt;. Ta obsahuje lidský srozumitelný popis toho, jaký typ dokumentu je v ní uložený. Dále release, ve kterém vznikla a URI template, pod kterým je vystavený na REST API. Záróveň může mít kolekce asociovaný &lt;cite&gt;ToolHints&lt;/cite&gt;. Ten umožňuje popsat kolekci z pohledu nástrojů pro vytváření a validaci její definice přímo v &lt;cite&gt;MongoDB&lt;/cite&gt;. Například dočasná data se vkládají do takzvané &lt;a href="http://www.mongodb.org/display/DOCS/Capped+Collections"&gt;Capped collection&lt;/a&gt;, která automaticky odmazává nejstarší vložené dokumenty.  Díky těmto hintům je možné ověřit, že je kolekce skutečně tímhle způsobem zkonfigurovaná.&lt;/p&gt;&lt;p&gt;Dokumenty a jejich struktura je popsaná v &lt;cite&gt;DataDefinition&lt;/cite&gt;. Pro jejich validaci je možné definovat &lt;cite&gt;RelaxNG schéma&lt;/cite&gt; (více o tom psal  &lt;cite&gt;Lukáš Křečan&lt;/cite&gt; v článku &lt;a href="http://blog.krecan.net/2011/07/06/converting-json-to-xml/"&gt;Converting JSON to XML&lt;/a&gt;). To se dá použít jednak v persistentni vrstvě pro validaci při změnách/zápisu a zároveň i pro verifikaci například po migraci dat.&lt;/p&gt;&lt;p&gt;Samostatnou kapitolou jsou relace. Šťastnější pojmenování by bylo reference v tomhle případě, aby to v člověku nevyvolávalo pocit, že se snažíme modelovat svět relačních databází. Dokumenty mezi sebou odkazujeme pomocí URI referencí. Máme celkem tři druhy relací: sama na sebe (&lt;cite&gt;SelfDocumentRelation&lt;/cite&gt;), interní na jiný dokument v &lt;cite&gt; MongoDB&lt;/cite&gt; (&lt;cite&gt;InternalDocumentRelation&lt;/cite&gt;) a externí na dokumenty/entity uložené mimo náš systém (&lt;cite&gt;ExternalDocumentRelation&lt;/cite&gt;). Každá relace má u sebe dva atributy cestu k fieldu, ve kterém je v dokumentu uložena a URI template, pomocí které je jí možné rozložit na jednotlivé segmenty. To se používá ve chvíli kdy potřebujeme zjistit příslušnost dokumentu k projektu nebo uživateli. Jednoduchým rozpársováním pomocí URI template víme konkrétního uživatele nebo projekt, ke kterému se dokument vztahuje.&lt;/p&gt;&lt;h3&gt;Ukázka modelu&lt;/h3&gt;&lt;pre class="brush: plain"&gt;{
       "documentStorageModel":{
          "collections":[
             {
                "collection":{
                   "name":"subscriptions",
                   "affiliation":"PROJECT",
                   "resourceUriTemplate":"/gdc/projects/{project}/users/{user}/subscriptions/{subscription}",
                   "documentation":{
                      "description":"Contains notification subscriptions for given user in given project",
                      "releaseVersion":"R59"
                   },
                   "dataDefinition":{
                      "self":{
                         "selfDocumentRelation":{
                            "path":"subscription.meta.uri",
                            "uriTemplate":"/gdc/projects/{project}/users/{user}/subscriptions/{subscription}"
                         }
                      }
                   }
                }
             }
             ... další kolekce
             ],
             "version":"1.0.0"
        }
    }
&lt;/pre&gt;&lt;h3&gt;Ukázka dokumentu popsaného modelem&lt;/h3&gt;&lt;pre class="brush: plain"&gt;{
     "subscription" : {
      "channels" : [
       "/gdc/account/profile/xxx/channelConfigurations/4f4b7e5ce4b0413360a0c4d5"
      ],
      "meta" : {
       "title" : "Test subscription",
       "author" : "/gdc/account/profile/xxx",
       "category" : "subscription",
       "updated" : "2012-02-27 14:00:12",
       "created" : "2012-02-27 14:00:12",
       "uri" : "/gdc/projects/FoodMartDemo/users/xxx/subscriptions/4f4b7e5ce4b0413360a0c4d7"
      },
      "message" : {
       "template" : {
        "expression" : "Hello World"
       }
      },
     }
    }
&lt;/pre&gt;&lt;p&gt;Z modelu je vidět, že v dokumentu by měl být field na cestě &lt;cite&gt;subscription.meta.uri&lt;/cite&gt; a jeho hodnota by měla odpovídat URI template  &lt;cite&gt;/gdc/projects/{project}/users/{user}/subscriptions/{subscription}&lt;/cite&gt;. Z instance dokumentu je vidět, že tomu jak je viz &lt;cite&gt;/gdc/projects/FoodMartDemo/users/xxx/subscriptions/4f4b7e5ce4b0413360a0c4d7&lt;/cite&gt;. Jednoduchou introspekcí této URI reference vidíme, že náleží k projektu &lt;cite&gt;FoodMartDemo&lt;/cite&gt;.&lt;/p&gt;&lt;h3&gt;Závěr&lt;/h3&gt;&lt;p&gt;Cílem tohoto článku bylo nechat vás trochu nahlédnout do toho kam se v &lt;cite&gt;GoodData&lt;/cite&gt; ubírá naše práce s &lt;cite&gt;NoSQL&lt;/cite&gt; databází &lt;cite&gt;MongoDB&lt;/cite&gt;. Potřeba modelu popisujícího data se ukázala jako nutnost. Na druhou stranu to není specifikum &lt;cite&gt;NoSQL&lt;/cite&gt; světa, protože k podobné řešení, jsme již používali v HP SOA Systinet klasickou relační databází. Pokud máte podobné zkušenosti, a nebo naopak používáte jiný způsob k popisu dat a řízení nástrojů pro práci s nimi, určitě se podělte v komentářích pod tímto článkem.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4053149-5730733394302175316?l=www.dagblog.cz' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.dagblog.cz/feeds/5730733394302175316/comments/default' title='Komentáře k příspěvku'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4053149&amp;postID=5730733394302175316' title='Komentáře: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/5730733394302175316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/5730733394302175316'/><link rel='alternate' type='text/html' href='http://www.dagblog.cz/2012_03_25_archive.html#5730733394302175316' title='Stavíme infrastrukturu kolem MongoDB - model'/><author><name>Roman Pichlík</name><uri>https://profiles.google.com/117598003560721106242</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-VsxZP6r_d4g/AAAAAAAAAAI/AAAAAAAAA5g/kzXGTBcrfyg/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-NHGPSCcrbMY/T3dkvoc7ztI/AAAAAAAAA4E/IO4BrUUGUIw/s72-c/model-compact.png' height='72' width='72'/><thr:total>0</thr:total><georss:featurename>Zátaví, 397 01 Kestřany, Česká republika</georss:featurename><georss:point>49.2812053 14.1112973</georss:point><georss:box>49.2708468 14.0915563 49.291563800000006 14.1310383</georss:box></entry><entry><id>tag:blogger.com,1999:blog-4053149.post-8695733290044687299</id><published>2012-03-29T10:02:00.000+02:00</published><updated>2012-04-01T11:11:15.252+02:00</updated><title type='text'>Java s prstem na tepu doby</title><content type='html'>&lt;p&gt;Java a celý její ekosystém čelí zásadním a novým výzvám, které jsou způsobeny posunem v oblasti mobilních zařízení, objemu zpracovaných dat i uživatelů. Ruku v ruce s tím jde vzájemná integrace heterogeních aplikací. Klíčová otázka zní, jakým způsoben je platforma Java, schopna na tyto výzvy reagovat a zároveň si zachovat statut klíčové technologe. Tento článek nemůže a ani nemá ambice na tuto otázku odpovědět, ale pokusí se přiblížit hlavní výzvy a možnosti, kterými se Java může ubírat.&lt;/p&gt;&lt;br /&gt;
&lt;h2&gt;Úkrok stranou&lt;/h2&gt;&lt;br /&gt;
&lt;p&gt;Prvotní a správná otázka je: proč se to všechno děje. Jedna z odpovědí leží pro programátory těžko uchopitelné a o to více ignorované škatulce s nápisem &lt;cite&gt;Business&lt;/cite&gt;. Je historicky prokazatelné, že pouze pár programátorů (nedá moc velkou námahu si domyslet jejich jména) toto pochopilo a dokázalo úspěšně propojit technologickou výhodu s úspěchem komerčním. To je zároveň důvod, proč v čele většiny technologických společností nestojí programátor, ale někdo kdo dokázal spojit oba světy. Každý člověk, bez ohledu na vzdělání, pracovní pozici či věk, má inovativní nápady. Ovšem pouze menší část lidí dokáže začít tyto nápady realizovat. Ještě menší část těchto lidí na nich dokáže kontinuálně pracovat a dále je rozvíjet. A ta nejmenší část lidí je dokáže přetavit v úspěch &lt;a href="#odkaz-1"&gt;[1]&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;První klíčovou veličinou je čas, za který se podaří nápad uvést do stavu, který je možné zpeněžit &lt;a href="#odkaz-2"&gt;[2]&lt;/a&gt;, bez ohledu na fakt jestli se jedná o jednotlivce nebo firmu. Druhou klíčovou veličinou jsou náklady, které s tím jsou spojené, provozní i startovací. Jedním ze způsobů, kterým lze výrazně redukovat čas nutným pro uvedení na trh, představuje volba správné technologie a platformy. Náklady lze do jisté míry redukovat pronájmem bez ohledu na to jestli se jedná o svět virtuální a nebo ten fyzický.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Kromě faktoru času a nákladu hrají přímou roli i veličiny, které není možné ovlivnit. Podle statistik &lt;cite&gt;World Internet Usage&lt;/cite&gt; používalo Internet na konci roku 2000 celkem 360 985 492 uživatelů, ke konci roku 2011 je to již uživatelů 2 095 006 005 &lt;a href="#odkaz-3"&gt;[3]&lt;/a&gt;. Podle typu operací je možné si udělat celkový obrázek o celkovém objemu dat. Za rok 2010 například služba &lt;cite&gt;Flickr&lt;/cite&gt; hostovala 5 000 000 000 obrázků. Za ten samý rok bylo na sociální síti &lt;cite&gt;Twitter&lt;/cite&gt; poslánu 25 000 000 000 zpráv takzvaných tweetů &lt;a href="#odkaz-4"&gt;[4]&lt;/a&gt;. Podle odhadů firmy &lt;cite&gt;Cisco&lt;/cite&gt; bude v roce 2015 připojeno 15 000 000 000 zařízení &lt;a href="#odkaz-5"&gt;[5]&lt;/a&gt;. Zjednodušeně řečeno, velké množství uživatelů používá velké množství zařízení a produkuje velké množství dat. Čísly těžko uchopitelný údaj představuje i změna používání webu. Od prohlížení statických stránek nastal výrazný posun k dynamickému chování a webovým aplikacím. Tato změna je označována jako &lt;a href="http://en.wikipedia.org/wiki/Web_2.0"&gt;Web 2.0&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Výše zmíněné údaje jsou ve velké míře příčinou, a následkem je zrod přístupů či technologií jako &lt;a href="http://en.wikipedia.org/wiki/Cloud_computing"&gt;Cloud computing&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/NoSQL"&gt;NoSQL databází&lt;/a&gt; nebo &lt;a href="http://en.wikipedia.org/wiki/HTML5"&gt;HTML 5&lt;/a&gt;. Tyto technologie zpětně způsobily a způsobují částečnou změnu architektury aplikací, a v neposlední řadě přímo ovlivňují jakým způsobem se aplikace samotné vyvíjí. Jestliže v polovině devadesátých let převládala dvouvrstvá architektura s takzvaným tlustým klientem, na začátku nového století došlo k posunu k architektuře třívrstvé, díky které mimochodem vznikla &lt;cite&gt;Java EE&lt;/cite&gt;, a konceptu takzvaného tenkého klienta &lt;a href="#odkaz-6"&gt;[6]&lt;/a&gt;. V dnešní době se již dá těžko mluvit o tenkém klientovi. Požadavky z pohledu uživatelského rozhraní i interaktivity aplikace vedou k přesunu části logiky ze serveru zpět na klienta. Ačkoliv by se mohlo zdát, že střední vrstva a server by si mohl oddechnout, opak je pravdou. Server musí být schopen velmi efektivně škálovat vzrůstající počet HTTP požadavků.&lt;/p&gt;&lt;br /&gt;
&lt;h2&gt;Java ekosystém&lt;/h2&gt;&lt;p&gt;Když se řekne Java, mnoho lidí si představí pouze jazyk, ale ve skutečnosti se jedná o celý ekosystém též nazývaný platforma. Ta se skládá z několika klíčových součástí: srdcem je Java Virtual Machine, kolem ní je jazyk, dále nástroje pro vývoj a monitorování, a v neposlední řadě i knihovny. Ty standardní umožňující práci například se souborovým systémem, a potom velké množství open source knihoven pokrývajících prakticky cokoliv co člověk potřebuje.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;Jazyk&lt;/h3&gt;&lt;p&gt;Jazyk je jednou z možností, kde se může Java inovovat. Pokud se bavíme o jazyku, jedná se především o změny a rozšíření jeho syntaxe. Ty lze označit buďto jako zásadní viz případ &lt;cite&gt;Lambda výrazů&lt;/cite&gt; (closures) &lt;a href="#odkaz-7"&gt;[7]&lt;/a&gt; a nebo jako syntaktických cukrátek v podobě Diamantového operátoru (přidaný již v Jave 7). Společný problém těchto změn je zvýšení komplexity syntaxe jazyka a tím pádem zhoršení udržovatelnosti zdrojového kódu. Právě jednoduchá syntaxe a jistá míra konzervativnosti stále za velkou oblibou Javy jako jazyku. Mnohem závažnějším problémem je zpětná kompatibilita. Skryté nebezpečí totiž představuje provázanost jazyka a standardních knihoven resp. jejich &lt;cite&gt;API&lt;/cite&gt;. Zavedení Lambda výraz totiž dává smysl pouze se změnou &lt;cite&gt;API&lt;/cite&gt; např. u standardních kolekcí (Mapa, Seznam atd.), se kterými dává jejich použití teprve smysl.  Nekompatibilní změna v těchto &lt;cite&gt;API&lt;/cite&gt; by ovšem vedla k nemožnosti přenést velké množství existujícího kódu. Podobně velká změna syntaxe tohoto ražení v podobě Generik v Jave 5 dopadla dosti tristním způsobem.&lt;/p&gt;&lt;p&gt;Z dalších možností inovace na úrovni jazyku přichází v úvahu zbrusu nový jazyk. Původní Java by zůstala nedotčena a vytvořil by se nový jazyk, říkejme mu Java 2.0. Problém s Java 2.0 je v tom, že nikdo nedokáže říci, jak by měl takový jazyk vypadat a jaká kritéria by měl splňovat, aby přežil a byl úspěšný minimálně jako Java. Bez ohledu na finální rozhodnutí je pro Java platformu štěstím, že nad ní vyrostlo celé množství dalších jazyků tu s větší (&lt;cite&gt;Groovy&lt;/cite&gt;) tu s menší (&lt;cite&gt;Scala&lt;/cite&gt;) či dokonce žádnou podobností (&lt;cite&gt;Clojure&lt;/cite&gt;), které je možné použít pro řešení specifických úkolů.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;Standardní knihovny&lt;/h3&gt;&lt;p&gt;Jednou z motivací, která stojí za snahou změnit jazyk, je komplexnost psaní kódu, který bude dobře škálovat na víceprocesorovém hardware, který je dnes běžně k dispozici. Bohužel vlákna a paměťový model, synchronizační primitiva to je oblast v Jave, která je příliš složitá a její &lt;em&gt;plné pochopení&lt;/em&gt; představuje těžko proniknutelnou bariéru pro většinu programátorů včetně autora těchto řádků. Jenom málo na tom mění balík &lt;cite&gt;java.util.concurrent&lt;/cite&gt;, který byl představen v Jave 5. Z  programovacího jazyku &lt;cite&gt;Erlang&lt;/cite&gt; a dalších se ukazuje, že je potřeba ještě vyšší úroveň abstrakce, kterou nabízí &lt;cite&gt;Aktory&lt;/cite&gt; &lt;a href="#odkaz-8"&gt;[8]&lt;/a&gt;, &lt;cite&gt;Dataflow&lt;/cite&gt; proměnných &lt;a href="#odkaz-9"&gt;[9]&lt;/a&gt; nebo &lt;cite&gt;Softwarová Transakční Paměť&lt;/cite&gt; &lt;a href="#odkaz-10"&gt;[10]&lt;/a&gt;. Tyto konstrukty mohou být poskytovány jako nové standardní knihovny. I další úpravy standardních knihoven se týkají zvýšení propustnosti, například v podobě asynchronní podpory k blokujícím API jako je  &lt;cite&gt;JDBC&lt;/cite&gt; nebo &lt;cite&gt;HTTP klient&lt;/cite&gt;.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;JVM&lt;/h3&gt;&lt;p&gt;Úpravy JVM &lt;a href="#odkaz-11"&gt;[11]&lt;/a&gt; se musí týkat podpory velkých dat. Jedná se například o efektivnější reprezentaci řetězců a dalších datových struktur &lt;a href="#odkaz-12"&gt;[12]&lt;/a&gt;. Problémy představuje je i správa velkých heapu (&gt;10GB) a chování garbage collectoru, kdy při Full GC dochází ke kompletnímu zastavení práce JVM v řádu desítek minut &lt;a href="#odkaz-13"&gt;[13]&lt;/a&gt;. Kromě úpravy chování bude potřeba přidat i další vlastnosti, které se dnes drátují manipulací s byte kódem. Řeč je především &lt;cite&gt;continuations&lt;/cite&gt;, zmrazení a obnovení aktuálního stack frame, které umožní efektivní psaní aplikací postavených na asynchroniích voláních.&lt;/p&gt;&lt;p&gt;Z pohledu nasazení JVM do Cloudu se jedná především o podporu modulárního systému pro nasazování aplikací. Současný deployment model neumožňuje definovat moduly a jejich verze, které bude aplikace potřebovat, a vede k nulovým možnostem poskytování knihoven cílovým systémem. Typická aplikace díky tomu vypadá jako obrovský chumel JAR archivů, kde není jasné co je a není opravdu potřeba. Výsledkem jsou zvýšené paměťové nároky a pomalý start aplikací, který se díky čtení souborů ze systému podobá spíše zátěžovému testu souborového systému.&lt;/p&gt;&lt;br /&gt;
&lt;h2&gt;Nejsme tu sami&lt;/h2&gt;&lt;p&gt;Vývoj v oblasti Javy dlouho trpěl díky přehlížení okolních trendů. Díky tomu je Enterprise verze (Java EE) v podstatě odepsanou technologií pro vývoj webových aplikací. V prostředí veřejných public cloud poskytovatelů to platí dvojnásob. Použitím technologie Java EE se vystavujete obrovským problémům při vývoji i nasazení tohoto typu aplikací. K zásadním nedostatkům patří složitost vývoje a nasazení. Bohužel většina technologií z Java EE stacku je absolutně nevhodná. Kromě ryze technických problémů jsou tu problémy v návrhu jednotlivých technologií. Většina z nich je totiž navržena stavově a s ohledem na to, že vývojář je absolutně odstíněný od prostředí ve kterém aplikace běží. S množstvím dat a požadavcích jednoduchosti vývoje se mění i architektura aplikací. Kromě návratu tlustého klienta, o kterém již byla řeč, se jedná o využívání &lt;cite&gt;NoSQL&lt;/cite&gt; databází jako alternativy k databázím relačním. Je to plíživá revoluce, podobná té kterou spustil kolem roku 2007 framework &lt;cite&gt;Ruby On Rails&lt;/cite&gt;, která bude ovlivňovat vývoj, technologie a knihovny v Jave. Největší chybou pro Javu a celý ekosystém by bylo, stejně jako v roce 2007, tyto trendy podcenit a nebo úplně ignorovat.&lt;/p&gt;&lt;p&gt;Jednou z nejsilnějších a zároveň nejslabších stránek Javy je její fragmentace. Neexistují jeden postup a knihovny pro řešení určitých typů problémů, na druhou stranu to umožňuje dynamicky se přizpůsobit na měnící se podmínky a vybrat vždy tu nejlepší kombinaci. Doufejme tedy, že se Java bude dál "fragmentovat" pod různými vlivy, kdy ty překonané uvolní cestu těm adaptabilnějším, díky nímž budeme my vývojáři schopni přetavit inovativní myšlenky a nápady.&lt;/p&gt;&lt;h3&gt;Post mortem dovětek&lt;/h3&gt;&lt;p&gt;Vzhledem k záplavě reakcí, které jsem k tomutu článku dostal, jsem se rozhodl, že uvedu pár věcí na pravou míru. Nebylo cílem Javu jakkoliv hanit, ale podívat se na její současný stav v kontextu trendů, které se v architektuře a vývoji aplikací objevují. Pokud některým čtenářům přijde, že z tohoto pohledu Java vychází bídně, je to čistě jejich interpretace výše uvedených řádků. Přiznávám, že jedním z postraních úmyslů, které mě při psaní článku vedly, bylo rozbití kliše, že existuje jedna správná technologie a tou je Java. Tím důvodem nejsou mé pochybnosti o Jave, ale víra, že žádná taková technologie neexistuje a existovat nemůže. Jsem hluboce přesvědčen o tom, že jediná správná cesta pro Javu je inovace na základě okolního světa, a nikoliv přešlapování na místě a předstírání, že Java je středobod vývoje okolo kterého se vše točí.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.abclinuxu.cz/clanky/java-s-prstem-na-tepu-doby"&gt;Celý článek&lt;/a&gt; je rovněž k dispozici na ABC Linuxu. Článek tam byl vydán jako součást kampaně firmy &lt;cite&gt;GoodData&lt;/cite&gt;, ve které pracuji jako Java architekt. Věřím, že laskavý čtenář některého z těch přibližně 850 článků na tomto blogu, chápe že vše co píši, vyjadřuje můj osobní pohled a názory, pod které se vždy mohou podepsat. Proto zde článek uvádím v plném rozsahu s tímto dovětkem a možností jej komentovat.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;Odkazy&lt;/h3&gt;&lt;p&gt;&lt;a name="odkaz-1"&gt;1.&lt;/a&gt;&lt;br /&gt;
    &lt;cite&gt;Andy Hunt&lt;/cite&gt;,  &lt;a href="http://pragprog.com/book/ahptl/pragmatic-thinking-and-learning"&gt;Pragmatic Thinking and Learning&lt;/a&gt; strana 66 - Everone has good ideas.&lt;/p&gt;&lt;p&gt;&lt;a name="odkaz-2"&gt;2.&lt;/a&gt; Wikipedia definice &lt;a href="http://en.wikipedia.org/wiki/Time_to_market"&gt;Time To Market&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;a name="odkaz-3"&gt;3.&lt;/a&gt; &lt;a href="http://www.internetworldstats.com/stats.htm"&gt;Statistiky používání internetu&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;a name="odkaz-4"&gt;4.&lt;/a&gt; článek &lt;a href="http://royal.pingdom.com/2011/01/12/internet-2010-in-numbers/"&gt;Internet 2010 in numbers&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;a name="odkaz-5"&gt;5.&lt;/a&gt; BBC new Technology &lt;a href="http://www.bbc.co.uk/news/technology-13613536"&gt;předpověd firmy Cisco ohledně počtu zařízení&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;a name="odkaz-6"&gt;6.&lt;/a&gt; Wikipedia definice &lt;a href="http://en.wikipedia.org/wiki/Client%E2%80%93server_architecture"&gt;Client–server model&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;a name="odkaz-7"&gt;7.&lt;/a&gt; &lt;a href="http://openjdk.java.net/projects/lambda/"&gt;Projekt Lambda&lt;/a&gt; JSR-335 dedikovaný Lambda výrazům.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;a name="odkaz-8"&gt;8.&lt;/a&gt; Wikipedia definice &lt;a href="http://en.wikipedia.org/wiki/Actor_model"&gt;Aktor model&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a name="odkaz-9"&gt;9.&lt;/a&gt; Wikipedia definice &lt;a href="http://en.wikipedia.org/wiki/Dataflow"&gt;Dataflow proměnné&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a name="odkaz-10"&gt;10.&lt;/a&gt; Wikipedia definice &lt;a href="http://en.wikipedia.org/wiki/Software_transactional_memory"&gt;Softwárová transakční paměť&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;a name="odkaz-11"&gt;11.&lt;/a&gt; Úpravy JVM zaštiťuje projekt &lt;a href="http://openjdk.java.net/projects/mlvm/subprojects.html"&gt;the Da Vinci Machine&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;a name="odkaz-12"&gt;12.&lt;/a&gt; Prezentace  &lt;a href="http://www.slideshare.net/srisatish/jvm-goes-to-big-data"&gt;JVM goes big data&lt;/a&gt; vysvětluje některé z problémů velkých dat nad JVM.&lt;/p&gt;&lt;p&gt;&lt;a name="odkaz-13"&gt;13.&lt;/a&gt; Článek objasňuje použíti konceptu BigMemory a odstranění GC přerušení  &lt;a href="http://blog.terracottatech.com/2010/09/bigmemory_explained_a_bit.html"&gt;BigMemory Explained a bit...&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4053149-8695733290044687299?l=www.dagblog.cz' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.dagblog.cz/feeds/8695733290044687299/comments/default' title='Komentáře k příspěvku'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4053149&amp;postID=8695733290044687299' title='Komentáře: 22'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/8695733290044687299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/8695733290044687299'/><link rel='alternate' type='text/html' href='http://www.dagblog.cz/2012_03_25_archive.html#8695733290044687299' title='Java s prstem na tepu doby'/><author><name>Roman Pichlík</name><uri>https://profiles.google.com/117598003560721106242</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-VsxZP6r_d4g/AAAAAAAAAAI/AAAAAAAAA5g/kzXGTBcrfyg/s512-c/photo.jpg'/></author><thr:total>22</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4053149.post-4803018033781260097</id><published>2012-02-24T23:23:00.000+01:00</published><updated>2012-02-24T23:23:07.387+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='podcast'/><title type='text'>CZ Podcast 61 - Roumen se vrací</title><content type='html'>&lt;p&gt;Skoro nás na natáčení &lt;a href="http://java.cz/article/cz-podcast-61-roumen-se-vraci-aneb-tlachani-o-vyvoji"&gt;dílu 61.&lt;/a&gt; do CA nepustili, ale nakonec to stálo za to. Super jsme si s Roumenem pokecali a myslim, že to bude zajímavé i pro vás.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4053149-4803018033781260097?l=www.dagblog.cz' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.dagblog.cz/feeds/4803018033781260097/comments/default' title='Komentáře k příspěvku'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4053149&amp;postID=4803018033781260097' title='Komentáře: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/4803018033781260097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/4803018033781260097'/><link rel='alternate' type='text/html' href='http://www.dagblog.cz/2012_02_19_archive.html#4803018033781260097' title='CZ Podcast 61 - Roumen se vrací'/><author><name>Roman Pichlík</name><uri>https://profiles.google.com/117598003560721106242</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-VsxZP6r_d4g/AAAAAAAAAAI/AAAAAAAAA5g/kzXGTBcrfyg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4053149.post-4372548597824501168</id><published>2012-01-29T14:14:00.000+01:00</published><updated>2012-01-29T14:14:47.824+01:00</updated><title type='text'>Otrávené API</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://farm5.staticflickr.com/4098/4876351747_8dcb2f8cd0_m.jpg" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="159" width="240" src="http://farm5.staticflickr.com/4098/4876351747_8dcb2f8cd0_m.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;cite&gt;Otrávené API&lt;/cite&gt; představuje situaci, která je důvěrně známá každému programátorovi. Během vývoje uděláte nějaké rozhodnutí, které se promítne do návrhu, struktury, výkonnosti či vhodnosti použití. Postupem času se ovšem ukáže, že to nebylo rozhodnutí úplně šťastné. Najednou máme v aplikačním kódu nebo hůře v infrastrukturním kódu něco o čem jsme přesvědčeni, že je špatně. Vždycky mi drásá srdce někomu vysvětlovat, že má použít ztrouchnivělé API, o kterém vím, že by tam nemělo být a nebo by mělo vypadat jinak. Chtěl bych se zmínit jaké možnosti máme, pokud tento problém nastane.&lt;/p&gt;
&lt;h3&gt;Metoda vyhnívání&lt;/h3&gt;
&lt;p&gt;Jedná se trochu o alibistický přístup ve stylu něco tam je, funguje to, sice je to špatně navržené, ale dá se s tím žít. Je to následování pravidla &lt;cite&gt;Pokud něco funguje, nesahejte do toho&lt;/cite&gt;. Osobně tuhle metodu volím  jenom když není jiného zbytí. Pokud jste nespokojeni s relativně izolovanou částí nejlépe aplikačního kódu, která se nepoužívá nijak často, prostě to nechte být. V případě, že se jedná o exponovanou část vaší infrastruktury, rovnou na vyhnívání zapomeňte a řiďte se dalšími radami.&lt;/p&gt;

&lt;h3&gt;Obalující rozhraní&lt;/h3&gt;
&lt;p&gt;
Obalíte novým API to původní otrávené. Bohužel tahle metoda není úplně vždy proveditelná, protože málokdy se vám podaří úplně odizolovat implementační detaily. Jinými slovy, jestliže máte otrávené API, budete mít s velkou pravděpodobností i otrávenou implementaci, a kolem té se bude špatně stavit nové čisté API. Tato metoda vám nezabere tolik času na implementaci a testování jako metoda &lt;cite&gt;Paralelního API&lt;/cite&gt;, která je popsána dále.&lt;/p&gt;
&lt;h3&gt;Paralelní API&lt;/h3&gt;
&lt;p&gt;kud řešíte zpětnou kompatibilitu. Ne vždy znáte nebo můžete změnit všechny místa použití. Proto vytvoříte paralelní implementaci s rozhraním.  Nové a &lt;cite&gt;Otrávené API&lt;/cite&gt; žijí v míru vedle sebe. &lt;cite&gt;Otrávené API&lt;/cite&gt; můžete označit jako &lt;a href="http://docs.oracle.com/javase/1.5.0/docs/guide/javadoc/deprecation/deprecation.html"&gt;deprecated&lt;/a&gt;. Bohužel použití &lt;cite&gt;Otráveného API&lt;/cite&gt; vám tam stále straší. V určitou chvíli proto zavřete oči a použijete metodu vykostění.&lt;/p&gt;
&lt;h3&gt;Vykostění&lt;/h3&gt;
&lt;p&gt;Pokud se rozhodnete pro nejradikálnější řešení problémů s &lt;cite&gt;Otráveným API&lt;/cite&gt;. Jedná se o úplného odstranění &lt;cite&gt;Otráveného API&lt;/cite&gt; a jeho nahrazení novou verzí. Preferujte tuhle metodu vždy pokud máte vaší &lt;cite&gt;code base&lt;/cite&gt; plně pod kontrolou a zpětná kompatibilita pro vás nepředstavuje závažný problém. Všechny tři předešlé metody totiž hřeší na to, že prohlubují &lt;a href="http://www.dagblog.cz/2011_08_21_archive.html"&gt;technologický dluh&lt;/a&gt;. Rizikem tohoto přístupu je, že po nějakém čase nemusíte byt s výsledkem spokojeni, a budete opět stát ve výchozím bodě.&lt;/p&gt;
&lt;h3&gt;Závěrečné doporučení&lt;/h3&gt;
&lt;p&gt;Refaktor kódu a jeho čištění by mělo patřit k základům práce každého vývojáře. Je to mravenčí práce, kterou málokdo ocení a nebo vám na ní poskytne čas. Nicméně s ní musíte počítat pokud nechcete mít problémy s udržováním a dalším rozvojem vašeho kódu. Já osobně preferuji &lt;cite&gt;Vykostění&lt;/cite&gt; &lt;cite&gt;Otrávéného API&lt;/cite&gt;. Takřka vždy se mi totiž ukázalo, že problémy které způsobilo jeho prorůstání do zbytku code base, byly nesrovnatelné s tím, co by stálo jeho včasné odstranění.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4053149-4372548597824501168?l=www.dagblog.cz' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.dagblog.cz/feeds/4372548597824501168/comments/default' title='Komentáře k příspěvku'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4053149&amp;postID=4372548597824501168' title='Komentáře: 8'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/4372548597824501168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/4372548597824501168'/><link rel='alternate' type='text/html' href='http://www.dagblog.cz/2012_01_29_archive.html#4372548597824501168' title='Otrávené API'/><author><name>Roman Pichlík</name><uri>https://profiles.google.com/117598003560721106242</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-VsxZP6r_d4g/AAAAAAAAAAI/AAAAAAAAA5g/kzXGTBcrfyg/s512-c/photo.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4053149.post-3500496059662880640</id><published>2012-01-27T18:04:00.000+01:00</published><updated>2012-01-27T18:04:58.986+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='podcast'/><title type='text'>CZ Podcast 60 - User Experience Design</title><content type='html'>&lt;p&gt;V &lt;a href="http://java.cz/article/cz-podcast-60-user-experience-design"&gt;tomto díle&lt;/a&gt; jsme se věnovali User Experience Designu, tedy tomu jak navrhovat produkt/službu tak, aby z ní uživatel měl co nejlepší prožitek.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4053149-3500496059662880640?l=www.dagblog.cz' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.dagblog.cz/feeds/3500496059662880640/comments/default' title='Komentáře k příspěvku'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4053149&amp;postID=3500496059662880640' title='Komentáře: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/3500496059662880640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/3500496059662880640'/><link rel='alternate' type='text/html' href='http://www.dagblog.cz/2012_01_22_archive.html#3500496059662880640' title='CZ Podcast 60 - User Experience Design'/><author><name>Roman Pichlík</name><uri>https://profiles.google.com/117598003560721106242</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-VsxZP6r_d4g/AAAAAAAAAAI/AAAAAAAAA5g/kzXGTBcrfyg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4053149.post-3260019522895280373</id><published>2012-01-08T19:52:00.000+01:00</published><updated>2012-01-08T19:52:40.562+01:00</updated><title type='text'>Nepoužívejte Mapu ani String v rozhraní vašich tříd</title><content type='html'>&lt;p&gt;Když se zpětně dívám, za APIs které jsem vytvořil, dochází mi, že jednou z největších chyb bylo použití tříd ze standardního SDK v jejich rozhraní. Použití tříd, jako &lt;cite&gt;java.lang.String&lt;/cite&gt; &lt;cite&gt;java.util.Map&lt;/cite&gt; apod., bylo samozřejmě dané mojí leností zavádět si speciální typy vyjadřující danou entitu. V budoucnu jsme platil za tuhle lenost velkou cenu.&lt;/p&gt;
&lt;h3&gt;Použití Mapy&lt;/h3&gt;
&lt;p&gt;Použití Mapy se mi hodilo pro reprezentaci jednoho řádku, který vracelou jedno vzdáleného API.&lt;/p&gt;
&lt;pre class="brush: java"&gt;
    public void processRow(java.util.Map row) {
        ...
    } 
&lt;/pre&gt;
&lt;p&gt;Na první pohled jednoduché použití, ale... Za několik týdnu broušení objektů nad touhle reprezentací řádku jsem potřeboval rozšířit informace, které by o sobě řádek mohl prozradit. Potřeboval jsem metadata k jednotlivým sloupcům, ba co hůře, potřeboval jsem kontrolovat jestli je to řádek originální a nebo synteticky vytvořený. Problém byl na světě. Do Mapy totiž žádnou metodu nepřidáte. Musel jsem pracně předávat metadata jinou cestou. Pokud šlo o typ řádků testoval jsem typ na speciální implementaci Mapy, kterou jsem musel vytvořit. Poučení pro příště, mate-li v API &lt;cite&gt;java.util.Map&lt;/cite&gt; pravděpodobně je něco špatně. Čest výjimkám potvrzujícím pravidlo.&lt;/p&gt;


&lt;h3&gt;Použití Stringu&lt;/h3&gt;
&lt;p&gt;Měl jsem třídu, která vyjadřovala kontext aktuálně přihlášeného uživatele. Identifikátor uživatele byla prostý &lt;cite&gt;java.lang.String&lt;/cite&gt; přestože se jednalo o číselný identifikátor. Opět chyba, za kterou bych si dal rákoskou přes prsty.&lt;/p&gt;

&lt;pre class="brush: java"&gt;
    public String getUserId() {
        ...
    }
&lt;/pre&gt;
&lt;p&gt;Co čert nechtěl, původní reprezentace se změnila z čísla opravdu na řetězec. Ve všech navázaných API byl String a na místech, kde bylo potřeba rozeznat původní číslo a nově řetězec, se muselo provést rozpársování. Správné řešení bylo použití hned od počátku objekt reprezentující uživatelův identifikátor.&lt;/p&gt;

&lt;pre class="brush: java"&gt;
    public UserIdentifier getUserId() {
        ...
    }
&lt;/pre&gt;
&lt;p&gt;Další typické zneužití &lt;cite&gt;java.lang.String&lt;/cite&gt; občas přichází v podobě konstant, které by bylo možné vyjádřit výčtovým typem. Mimochodem doporučuji přečíst poměrně kontroverzní, ale poučný článek &lt;cite&gt;Stefana Schmidta&lt;/cite&gt; &lt;a href="http://codemonkeyism.com/never-never-never-use-string-in-java-or-at-least-less-often/"&gt;Never, never, never use String in Java (or at least less often :-)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Stejný problém představují tyto typy na místě návratových hodnot. Občas si dokonce pomůžeme například polem a nebo zavedeme nějaký tuple. Opět se toho vyvarujte. Sváže vám to do budoucna ruce, API nebude přehledné a těžko se vám bude rozšiřovat s ohledem na zpětnou kompatibilitu.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4053149-3260019522895280373?l=www.dagblog.cz' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.dagblog.cz/feeds/3260019522895280373/comments/default' title='Komentáře k příspěvku'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4053149&amp;postID=3260019522895280373' title='Komentáře: 21'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/3260019522895280373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/3260019522895280373'/><link rel='alternate' type='text/html' href='http://www.dagblog.cz/2012_01_08_archive.html#3260019522895280373' title='Nepoužívejte Mapu ani String v rozhraní vašich tříd'/><author><name>Roman Pichlík</name><uri>https://profiles.google.com/117598003560721106242</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-VsxZP6r_d4g/AAAAAAAAAAI/AAAAAAAAA5g/kzXGTBcrfyg/s512-c/photo.jpg'/></author><thr:total>21</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4053149.post-2991797784863332122</id><published>2012-01-07T23:14:00.000+01:00</published><updated>2012-01-07T23:14:35.450+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nosql'/><title type='text'>MongoDB pár tipů na zajímavé prezentace</title><content type='html'>&lt;p&gt;Čím víc proníkám do MongoDB tím vice se mi zamlouvá. Líbí se mi jak na ní inženýři s 10gen makají a neustále jí vylepšují a jak otevřená je komunita kolem této dokumentové NoSQL databáze. Tenhle týden mě zaujaly tři prezentace, na které vám dám tipy.&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://www.slideshare.net/andrew311/optimizing-mongodb-lessons-learned-at-localytics"&gt;Optimizing MongoDB: Lessons Learned at Localytics&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://spf13.com/post/hybrid-mongodb-sql-applications"&gt;Hybrid MongoDB and RDBMS Applications&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://www.10gen.com/presentations/mongosf2011/craigslist"&gt;Lessons Learned from Migrating 2+ Billion Documents at Craigslist&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4053149-2991797784863332122?l=www.dagblog.cz' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.dagblog.cz/feeds/2991797784863332122/comments/default' title='Komentáře k příspěvku'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4053149&amp;postID=2991797784863332122' title='Komentáře: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/2991797784863332122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/2991797784863332122'/><link rel='alternate' type='text/html' href='http://www.dagblog.cz/2012_01_01_archive.html#2991797784863332122' title='MongoDB pár tipů na zajímavé prezentace'/><author><name>Roman Pichlík</name><uri>https://profiles.google.com/117598003560721106242</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-VsxZP6r_d4g/AAAAAAAAAAI/AAAAAAAAA5g/kzXGTBcrfyg/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4053149.post-3829996812526161684</id><published>2012-01-01T18:23:00.000+01:00</published><updated>2012-01-01T18:23:46.736+01:00</updated><title type='text'>Utvrzené názory za rok 2011</title><content type='html'>&lt;p&gt;Začnete-li psát článek v první den nového roku máte jenom dvě možnosti. Rekapitulovat rok předcházející a nebo věštit budoucnost pro rok nový. Protože protože mé předchozí předpovědi byly spolehlivé asi jako odhad míry zadlužení Řeckého statistického úřadu nebude se do nich letos pouštět. Nechci zároveň ani psát o roce 2011 ve formě jakési rekapitulace. Rozhodl jsem se proto, že se s vámi zkusím podělit o názory, ve kterých mě rok 2011 utvrdil.&lt;/p&gt;

&lt;h4&gt;Život v IT&lt;/h4&gt;
&lt;p&gt;Většina problémů v IT je jenom z malé části ovlivněna metodologií, technologií a kvalitou lidí, které máte k dispozici. Nejzásadnější příčinou je špatná komunikace tedy spíše nekomunikace a nejasná zodpovědnost. S tím souvisí i alibismus, který bych si troufal označit za typickou českou vlastnost (nejen v IT).&lt;/p&gt;

&lt;p&gt;Dobrá zpráva. Zlaté české ručičky není mýtus. Špatná zpráva je, že to platilo pro generaci našich otců, které tady tvrdě vycepoval socialismus, kde většina zboží bylo nedostatková. V kontextu IT to ovšem znamená, že naše budoucnost je limitovaná naší cenou, po kterou budeme brání jako levná pracovní síla z východu. Pokud to chceme změnit musíme udělat tři věci: tvrdě pracovat, snažit se inovovat a neustále si rozvíjet naše vědomosti a znalosti.&lt;/p&gt;

&lt;p&gt;Koncept renesančního člověka není jenom oblíbená Filemonova průpovídka, ale věc, kterou vám potvrdí kdokoliv kdo překročil vlastní stín. Pokud se budete úzce profilovat pouze v jedné oblasti, nedej bože jenom IT, nikdy nezískáte potřebný nadhled a inspiraci, která vás posune o úroveň výše. Ve všech knihách a oborech lze najít plno paralel, které můžete s úspěchem v IT uplatnit. Bylo by velkou chybou před nimi zavírat oči.&lt;/p&gt;

&lt;p&gt;Jedno přísloví říká: "Lepší být jeden den orlem než celý život ovcí". Steve Jobs tuším prohlásil: "Je lepší být pirátem než se dát k námořnictvu". Tím chci říci, pokud něčemu věříte, bez ohledu jestli je to technologie či přístup, řiďte se tím bez ohledu na to, že jdete hlavou proti zdi.&lt;/p&gt;

&lt;p&gt;Nejlepší konfrontace vlastních myšlenek a názorů je jejich veřejná prezentace. Můžete se plést, můžete mít pravdu, nejhorší přístup je mlčet. Chyba není mít opačný názor, chyba je nemít žádný názor. Nejlepší konfrontace bývá s lidmi absolutně opačného názoru.&lt;/p&gt;

&lt;h4&gt;Programování&lt;/h4&gt;

&lt;p&gt;Programování je řemeslo jako každé jiné. Pokud v něm chcete být opravdu dobří počítejte s tím, že vám to zabere minimálně deset let intenzivní práce. Počítejte s tím, že se mnohokrát spletete a budete muset korigovat svoje předchozí způsoby, o kterých jste si mysleli, že jsou to správnou cestou.&lt;/p&gt;

&lt;p&gt;Složitý kód není dobře jednotkově testovatelný. Jednotkově netestovaný kód není dobře objektově navržený. Nedobře objektově navržený kód je kýbl hnoje. Do kýblu hnoje je lepší kopnout a začít znovu a lépe. Objektový návrh a tvorba API se nepovede nikdy na první pokus. Refaktorujte do té doby než jste absolutně spokojeni s každým detailem kódu. Každý dluh, i ten technologický, který uděláte vás později dožene.&lt;/p&gt;

&lt;p&gt;Není nic jako kolektivní vlastnictví kódu. Každý jeden řádek kódu, každá třída, každý modul má jednoho jediného vlastníka, který je za něj zodpovědný. Nikdy neakceptujte kód v formě kontribuce pod který byste se sami nepodepsali.  &lt;/p&gt;

&lt;p&gt;Ďábel leží v detailech. Buďte perfekcionisté nejenom co se týká kódu samotného, ale i jeho dalších detailů. Struktuře, dokumentaci interní i veřejné, konzistenci.&lt;/p&gt;

&lt;p&gt;Výkonnost ovlivňujte na úrovni návrhu nikoliv na úrovni kódu. Změnami v kódu jste schopni ovlivnit výkon v řádu procent, změnami v návrhu ovlivňujete výkonnost v řádu desítek procent.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4053149-3829996812526161684?l=www.dagblog.cz' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.dagblog.cz/feeds/3829996812526161684/comments/default' title='Komentáře k příspěvku'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4053149&amp;postID=3829996812526161684' title='Komentáře: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/3829996812526161684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/3829996812526161684'/><link rel='alternate' type='text/html' href='http://www.dagblog.cz/2012_01_01_archive.html#3829996812526161684' title='Utvrzené názory za rok 2011'/><author><name>Roman Pichlík</name><uri>https://profiles.google.com/117598003560721106242</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-VsxZP6r_d4g/AAAAAAAAAAI/AAAAAAAAA5g/kzXGTBcrfyg/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4053149.post-838537506522105819</id><published>2011-12-20T21:14:00.000+01:00</published><updated>2011-12-20T21:14:53.437+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='podcast'/><title type='text'>CZ Podcast 59 - Automatizace a Configuration management</title><content type='html'>&lt;p&gt;Díl &lt;a href="http://java.cz/article/cz-podcast-59-automatizace-a-configuration-management"&gt;59.&lt;/a&gt; je venku přátelé, a to je pro tento rok z naší estrády definitivně všechno. Sosejte, poslouchejte a doufam, že to neni jenom mlácení prázdné slámy, jak si z toho občas děláme s Filemonem srandu.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4053149-838537506522105819?l=www.dagblog.cz' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.dagblog.cz/feeds/838537506522105819/comments/default' title='Komentáře k příspěvku'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4053149&amp;postID=838537506522105819' title='Komentáře: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/838537506522105819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/838537506522105819'/><link rel='alternate' type='text/html' href='http://www.dagblog.cz/2011_12_18_archive.html#838537506522105819' title='CZ Podcast 59 - Automatizace a Configuration management'/><author><name>Roman Pichlík</name><uri>https://profiles.google.com/117598003560721106242</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-VsxZP6r_d4g/AAAAAAAAAAI/AAAAAAAAA5g/kzXGTBcrfyg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4053149.post-7916735746158748586</id><published>2011-12-13T23:26:00.000+01:00</published><updated>2011-12-13T23:26:41.722+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='podcast'/><title type='text'>CZ Podcast 58 - Výuka Informatiky na vysokých školách</title><content type='html'>&lt;p&gt;Přátelé čekal jsem to horší, že to jde s výukou od desíti k pěti. Nakonec konfrontován s realitou jsem si uvědomil, že úplně totálně v pasti to naše školství není. Poslouchněte si &lt;a href="http://java.cz/article/cz-podcast-58-vyuka-informatiky-na-vysokych-skolach"&gt;další díl&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4053149-7916735746158748586?l=www.dagblog.cz' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.dagblog.cz/feeds/7916735746158748586/comments/default' title='Komentáře k příspěvku'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4053149&amp;postID=7916735746158748586' title='Komentáře: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/7916735746158748586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/7916735746158748586'/><link rel='alternate' type='text/html' href='http://www.dagblog.cz/2011_12_11_archive.html#7916735746158748586' title='CZ Podcast 58 - Výuka Informatiky na vysokých školách'/><author><name>Roman Pichlík</name><uri>https://profiles.google.com/117598003560721106242</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-VsxZP6r_d4g/AAAAAAAAAAI/AAAAAAAAA5g/kzXGTBcrfyg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4053149.post-5073192148306375864</id><published>2011-12-04T23:59:00.002+01:00</published><updated>2011-12-05T00:07:12.852+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Continuous Delivery'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><title type='text'>Další krok k Continuous Delivery</title><content type='html'>&lt;p&gt;V několika předešlých &lt;a href="http://www.dagblog.cz/2010_08_01_archive.html#6390753392812388425"&gt;článcích&lt;/a&gt; jsem se věnoval continous delivery a ještě ve starším článku jsem se zamýšlel nad &lt;a href="http://www.dagblog.cz/2011_01_09_archive.html"&gt;buildováním z jedné hromady oproti releasovatelným celkům&lt;/a&gt;. Když nad tím teď přemýšlím, přijdou mi releasovatelné celky jako výborný krok k continous delivery, alespoň v našem prostředí v &lt;a href="http://gooddata.com"&gt;GoodData&lt;/a&gt;. V tomhle článku vám nechám trochu nahlédnout do kuchyně toho jakým způsobem vyvíjíme Java komponenty a připojím pár postřehů, které si myslím, že by nám mohli pomoci k plnému continous delivery, protože zatím jsme schopni doručovat nové verze produktu přibližně každých 14 dní.&lt;/p&gt;
&lt;h3&gt;Na začátku všeho je commit&lt;/h3&gt;
&lt;p&gt;Chtělo by se začít tímto titulkem, ale já to neudělám, a začnu organizací kódu která se nám osvědčila. Úplně původně jsme měli všechen zdrojový kód na jedné hromadě. V heterogenní aplikaci, kterou v &lt;cite&gt;GoodData&lt;/cite&gt; vytváříme, jsme měli sice strukturované, ale stále na jedné hromadě zdrojové kódy všech služeb UI klientem počínaje a ROLAP enginem konče. Tahle směska má speciální buildovací skript, který volá jednotlivé buildovací nástroje poplatné pro daný jazyk/platformu, v případě Javy to byl Maven. Výsledkem buildovacího procesu jsou RPM balíčky, které umožňují nainstalovat celý produkt.&lt;/p&gt;
&lt;p&gt;Ve verzovacím systému pro správu zdrojových souboru (používáme Git) používáme při vývoji nové funkcionality koncept &lt;a href="http://martinfowler.com/bliki/FeatureBranch.html"&gt;feature branch&lt;/a&gt;, to znaméná, že máme &lt;cite&gt;Master&lt;/cite&gt; větev, do které je možné zamergovat z &lt;cite&gt;Feature&lt;/cite&gt; větve až potom co člověk projde prověrkou kvality, která se skládá z důkladné sborky a rozborky, code review a kurately záludných otázek. Merge do &lt;cite&gt;Masteru&lt;/cite&gt; je úzkým hrdlem celého procesu, a code review je docela komplikované ve chvíli kdy měníte různé komonenty. V Jave máme navíc velké množství komponent, které používáme skrze různé služby a proto je potřeba být velice obezřetnými při jednotlivých změnách. Při buildu na jedné hromadě je prakticky nemožné používat stabilní verze komponent a zároveň mít vývojové verze, protože komponenty mají různý vývojový cyklus. Navíc máme odladěné verze komponent, do kterých se prakticky nesahá a nechceme jimi neustále zdržovat kontinuální buildy ať již z důvodů rychlosti či zdrojů.&lt;/p&gt;

&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-Og59IF1vq18/Ttv69F7GY1I/AAAAAAAAA3s/BV-K15W2URk/s1600/continuosu-delivery-source-code-vs-build.001.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="240" width="320" src="http://4.bp.blogspot.com/-Og59IF1vq18/Ttv69F7GY1I/AAAAAAAAA3s/BV-K15W2URk/s320/continuosu-delivery-source-code-vs-build.001.png" /&gt;&lt;/a&gt;&lt;/div&gt;


&lt;h3&gt;Releasovatelné komponenty v praxi&lt;/h3&gt;
&lt;p&gt;Z výše uvedených důvodů jsme se rozhodli postupně migrovat Java komponenty z jedné velké hromady do separátních repositářů na &lt;a href="http://github.com"&gt;GitHub&lt;/a&gt; a releasovat je jako binární artefakty Maven infrastrukturou. Co se týká Javy máme něco kolem třiceti GitHub repositářů. Každý repositář má svého strážce (gatekeeper), tedy člověka který je zodpovědný za komponenty v daném repositáři. Pokud chci něco v dané komponentě změnit udělám to ve vlastní větvi, ze které vytvořím &lt;a href="https://github.com/blog/712-pull-requests-2-0"&gt;Pull request&lt;/a&gt;. GitHub na to má skvělou podporu bez toho aniž bychom si museli cokoliv programovat vlastními silami. Strážce dostane emailovou notifikaci, s odkazem na &lt;cite&gt;Pull request&lt;/cite&gt;. Přes webové rozhraní si prohlédne změny a má dvě možnosti. Pokud je vše v pořádku akceptuje &lt;cite&gt;Pull request&lt;/cite&gt; a GitHub se postará automaticky o zamergování změn. Pokud se strážci něco nezdá, může do zdrojového kódu, případně k &lt;cite&gt;Pull request&lt;/cite&gt;, dopsat svoje komentáře přes webové rozhraní. Ty jsou žadateli o &lt;cite&gt;Pull request&lt;/cite&gt; zaslány formou emailu. Výhrady se zapracují a pokud není jiných námitek &lt;cite&gt;Pull request&lt;/cite&gt; se akceptuje. Tím je pokryté code review.&lt;/p&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-xwyBK8-ARe4/Ttv7D7mtR-I/AAAAAAAAA34/-ByqweCUuzY/s1600/continuosu-delivery-source-code-vs-build.002.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="240" width="320" src="http://2.bp.blogspot.com/-xwyBK8-ARe4/Ttv7D7mtR-I/AAAAAAAAA34/-ByqweCUuzY/s320/continuosu-delivery-source-code-vs-build.002.png" /&gt;&lt;/a&gt;&lt;/div&gt;


&lt;p&gt;Nad zdrojovými repositáři na GitHubu máme post commit hooky, které se postarají o klasické kolečko build, test a deploy výsledného artefaktu do binárního Maven repositáře. Jediné bílé místo představuje release management komponenty, který dělá strážce manuálně. Pokud je potřeba vyrealsovat stabilní verzi komponenty musí strážce spustit manuálně Maven release plugin, který se postará o všechny záležitosti (build artefaktu, změna verze POMu, přiřazení tagu atd.). I release komponent bychom chtěli dělat automaticky (pravděpodobně speciánlí commit message a nebo manuálně z CI serveru).&lt;/p&gt;
&lt;h4&gt;Pravidla&lt;/h4&gt;
&lt;h5&gt;Release notes&lt;/h5&gt;
&lt;p&gt;Každá komponenta má u sebe soubor &lt;cite&gt;RELEASENOTES.md&lt;/cite&gt;, ve které zaznamenáváme změny v lidsky snadno pochopitelné podobě, aby to člověk nemusel dohledávat z commit logu. Používáme markdown syntaxi, kterou dokáže GitHub renderovat ve webovém rozhraní když člověk prochází repositář.&lt;/p&gt;
&lt;pre&gt;
## 1.1.2
* Added `AbstractMediaTypeAwareFilter` filter provides support for detection  media types from  HTTP headers
* Added `RetainingHttpServletResponse` special `HttpServletResponse` implementation allowing manipulation with the response body and HTTP headers until the flush method is called
* Added `RetainingResponseFilter` this filter wraps `HttpServletResponse` to `RetainingHttpServletResponse`

## 1.1.1
* Added support for altering the Content-Type header (ContentTypeAlteringRequestWrapper)
* Added support for changing the entire request body (BodyAlteringRequestWrapper)   
&lt;/pre&gt;
&lt;h5&gt;Verzovací schéma&lt;/h5&gt;
&lt;p&gt;Používáme klasické trojčíselné označení verze X.Y.Z. Tímto způsobem verzujeme, aby bylo na první pohled patrné, k jakému typu změny v dané verzi komponenty došlo. Číslo X označuje generaci komponenty, je vždy 1 a nepředpokládám, že bude jiné, snad jenom kdybychom se rozhodli danou komponentu totálně překopat. Číslo Y označuje zásadní změny, které mohou být nekompatibilní s předchozí verzí. K nekompatibilním změnám se ještě vrátím. Poslední verze označuje inkrementální změny, bugfixy atd.&lt;/p&gt;
&lt;p&gt;Pokud se rozhodnete releasovat komponenty stane se pro vás zpětná kompatibilita velkým zaklínadlem. Nevíte totiž kde kdo v jaké verzi vaší knihovnu používá a kdy se rozhodne nebo případně bude donucen (tranzitivní závislosti) používat novější verzi.&lt;/p&gt;
&lt;p&gt;Postupem jsem dospěli k tomu, že nejlepší je dělat zpětně kompatibilní změny především u nízkoúrovňových komponent např. HTTP klient, protože jinak se vám výsledný celek může sesypat jak domeček z karet. Mimochodem to je jedna z nevýhod releasovatelných komponent oproti buildu z jedné hromady. U aplikačních komponent už na to není třeba brát zas takový ohled.&lt;/p&gt;
&lt;h5&gt;Readme&lt;/h5&gt;
&lt;p&gt;Většina komponent by u sebe měla mít popis toho k čemu slouží a jak se používají. To usnadňuje orientaci při jejich použití.&lt;/p&gt;
&lt;pre&gt;
JSON
===========
This repository consists of two parts

* [JSON validation](https://confluence.gooddata.com/confluence/display/analysis/JSON+validation+documentation)
* JSON serialization support - also contains [AbstractJsonObject (de)serialization](https://confluence.gooddata.com/confluence/display/Development/Abstract+JSON+object+serialization)
&lt;/pre&gt;
&lt;h3&gt;Continous delivery&lt;/h3&gt;
&lt;p&gt;V Continous delivery alespoň u Java služeb nám brání několik překážek. Zatím nemáme releasovatelné úplně všechny high level služby. Nicméně se držíme pravidla, že v stabilizační větvi (forknutá z Master větve) nepoužíváme SNAPSHOT závislosti. Tím je build reprodukovatelný a nehrozí, že jej rozbijeme. Ve chvíli kdy budeme mít releasovatelné všechny služby už bude jenom několik kroků ke kýženému cíli. Předně psychologická zábrana, které říkám suma všech strachů. Mít tolik testů, schválně neuvádím procento code coverage, které mi umožní udělat commit s vědomím, že případný problém bude zachycen.&lt;/p&gt;
&lt;p&gt;Další věcí je staging repository pro binární artefakty služeb. Po tom co je artifakt připravený v Maven repository a tedy úspěšně proběhly jednotkové a integrační testy je potřeba ho otestovat se zbytkem systému. Pokud tyto testy projdou, je možné artefakt posunout do staging repository, ze které je možné brát artefakty pro finální distribuci, která jde k manuálnímu verifikaci.&lt;/p&gt;
&lt;p&gt;No a poslední překážkou je neschopnost částečného releasu/rollback jenom některých částí. Zatím dokážeme releasovat jeden velký celek, což samozřejmě zvyšuje náklady spojené s celým releasem.&lt;/p&gt;
&lt;h3&gt;Závěr&lt;/h3&gt;
&lt;p&gt;Cesta ke Continous delivery je dlouhá a trnitá, navíc nikdo vám nedá plánek. Funguje jenom postupné zlepšování a učení z vlastních chyb. Doufám, že za půl roku se budu moci pochlubit jak jsme pokročili.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4053149-5073192148306375864?l=www.dagblog.cz' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.dagblog.cz/feeds/5073192148306375864/comments/default' title='Komentáře k příspěvku'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4053149&amp;postID=5073192148306375864' title='Komentáře: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/5073192148306375864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/5073192148306375864'/><link rel='alternate' type='text/html' href='http://www.dagblog.cz/2011_12_04_archive.html#5073192148306375864' title='Další krok k Continuous Delivery'/><author><name>Roman Pichlík</name><uri>https://profiles.google.com/117598003560721106242</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-VsxZP6r_d4g/AAAAAAAAAAI/AAAAAAAAA5g/kzXGTBcrfyg/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-Og59IF1vq18/Ttv69F7GY1I/AAAAAAAAA3s/BV-K15W2URk/s72-c/continuosu-delivery-source-code-vs-build.001.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4053149.post-940884731623385308</id><published>2011-11-22T23:28:00.000+01:00</published><updated>2011-11-22T23:28:30.856+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='podcast'/><title type='text'>CZ Podcast 57 - Pokec s Alešem Roubíčkem o Windows Azure, Code retreat a Agile vývoji</title><content type='html'>&lt;p&gt;&lt;a href="http://java.cz/article/cz-podcast-57-pokec-s-alesem-roubickem-o-windows-azure-code-retreat-a"&gt;Další díl&lt;/a&gt; s &lt;a href="http://rarous.net/weblog/"&gt;Alešem Roubíčkem&lt;/a&gt;. Windows Azure mě docela mile překvapil. To se ovšem nedá říci o zvuku, který jsme zachytili mikrofónem. Zakouzlil jsem v Audacity a doufam, že se vám to bude líbit.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4053149-940884731623385308?l=www.dagblog.cz' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.dagblog.cz/feeds/940884731623385308/comments/default' title='Komentáře k příspěvku'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4053149&amp;postID=940884731623385308' title='Komentáře: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/940884731623385308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/940884731623385308'/><link rel='alternate' type='text/html' href='http://www.dagblog.cz/2011_11_20_archive.html#940884731623385308' title='CZ Podcast 57 - Pokec s Alešem Roubíčkem o Windows Azure, Code retreat a Agile vývoji'/><author><name>Roman Pichlík</name><uri>https://profiles.google.com/117598003560721106242</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-VsxZP6r_d4g/AAAAAAAAAAI/AAAAAAAAA5g/kzXGTBcrfyg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4053149.post-7635160348907870386</id><published>2011-11-19T16:51:00.006+01:00</published><updated>2011-12-05T00:00:11.302+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Continuous Delivery'/><title type='text'>Postřehy z Devoxx 2011</title><content type='html'>&lt;p&gt;S kolegy z &lt;cite&gt;GoodData&lt;/cite&gt; jsme vyrazili na konferenci &lt;a href="http://www.devoxx.com/display/DV11/Home"&gt;Devoxx&lt;/a&gt;, a musím říci předeslat, že to stálo za to. &lt;cite&gt;Devoxx&lt;/cite&gt; je určitě nejlepší konference co se týká Javy v Evropě, která se konala letos po desáté v Antverpách. Paralelně běželo od půl desáté ráno do sedmi večer sedm prezentačních slotů, ze kterých si člověk mohl vybrat to co ho zajímalo. Přestože je to Java konference, byla v nabídce poměrně pestrá škála prezentací z přidružených jazyků a technologií postavených kolem &lt;cite&gt;Java Virtual Machine&lt;/cite&gt; (&lt;cite&gt;JVM&lt;/cite&gt;). Osobně jsem se snažil vybírat prezentace, které neměly s Javou moc společného a to ze dvou důvodů. Jednak nesdílím názor, že postupné nafukování jazyka je cesta, kterou by měly jít další verze Javy. Jednak razím tezi, že člověk by měl chodit na prezentace o technologiích a postupech, které nezná, protože ty ho nejvíce obohatí. Za celou dobu jsem proto z Javy slyšel jenom pár útržků na různých prezentacích.&lt;/p&gt;
&lt;ul&gt;
 &lt;li&gt;&lt;a href="#devoxx-clojure"&gt;Clojure&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#devoxx-continuous-delivery"&gt;Continuous Delivery&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#devoxx-html5"&gt;HTML 5&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;&lt;a href="#devoxx-cloud-java"&gt;Cloud a Java&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;&lt;a name="devoxx-clojure"&gt;Clojure&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Poprvé v životě jsem viděl &lt;cite&gt;Lisp&lt;/cite&gt;, tedy konkrétně &lt;cite&gt;Clojure&lt;/cite&gt; v dvou prezentacích &lt;a href="http://tech.puredanger.com/"&gt;Alexe Millera&lt;/a&gt;. Přiznám se, že syntaxe jazyka pro mě byla natolik exotická, že jsem většinu slajdů v rámci zachování duševního zdraví musel vypustit. Pár postřehů, které jsem si udělal: Lisp dialekt, funkcionální jazyk, kompilovatelný do bajt kódu JVM, imutabilní struktury, kód jsou data, žádné IDE ale Emacs. Síla Clojure se ukázala v prezentaci &lt;cite&gt;Stream Execution with Clojure and Fork/Join&lt;/cite&gt;. V něm bylo prezentováno použití Clojure ve firmě &lt;cite&gt;revelytix.com&lt;/cite&gt;, která umožňuje vyhledávání SPARQL jazykem v RDF dokumentech uložených v relačních databázích. Funguje to asi následujícím způsobem. HTTP rozhraní na které posíláte SPARQL dotazy, z nich se postaví AST a na jeho základě exekuční plán, ten se zoptimalizuje a převede na SQL příkazy, které jsou paralelně vykonány a jejich výsledek sloučen dohromady a vrácen jako odpověď. To všechno prosím pěkně na plus mínus 3000 řádcích kódu Clojure. To na mě udělalo velký dojem, přestože bych spíš pochopil básničky v jazyce Elfů než zdrojový kód, který se tam párkrát objevil.&lt;/p&gt;

&lt;h3&gt;&lt;a name="devoxx-continuous-delivery"&gt;Continuous Delivery&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Každá změna ve verzovacím systému je automaticky přetavena v novou verzi produktu a může se objevit na produkci. Člověk je skoro v pokušení si zaťukat na čelo a jít o dům dál, ale ono to skutečně funguje. Prezentaci měl &lt;cite&gt;Dave Farley&lt;/cite&gt; autor &lt;a href="http://www.amazon.com/gp/product/0321601912?tag=contindelive-20"&gt;stejnojmenné knihy&lt;/a&gt;. Výše zmíněný postup přetavili do praxe ve firmě &lt;cite&gt;LMAX&lt;/cite&gt;, což není garážová firmička, ale pořádný enterprise bumbrlíček, který se živí zprostředkováním finančních transakcí. Kromě toho co jsem psal dříve v článku &lt;a href="http://www.dagblog.cz/2010_08_01_archive.html#6390753392812388425"&gt;Continuous Deployment&lt;/a&gt; (pozn: ve skutečnosti vaším cílem není deployovat novou verzi, ale doručovat nějakou hodnotu vašim zákazníkům) bych vypíchnul jednu zásadní myšlenku, která zazněla. Pokud chcete někdy kontinuálně doručovat váš software, musíte mít &lt;em&gt;spolehlivý release proces&lt;/em&gt; na každé úrovni s dovětkem, že cokoliv co je závislé na zásahu člověka se považuje za nespolehlivé. Více &lt;a href="http://java.dzone.com/articles/8-principles-continuous"&gt;8 Principles of Continuous Delivery&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;&lt;a name="devoxx-html5"&gt;HTML 5&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;HTML 5 byla oblast, kterou jsem v minulosti totálně ignoroval. Musím se přiznat, že HTML 5 pro mě bylo asi největším drahokamem který jsem v Antverpách objevil  Někdo použil větu &lt;cite&gt;HTML 5 is a game changer&lt;/cite&gt; a já s tím musím souhlasit, protože nabízí jednu vývojovou platformu pro svět mobilních telefonů, tabletů a osobních počítačů. Ve všech prezentacích zaznělo kolik má problémů z některých jmenujme: nekompatibilita prohlížečů, chybějící nástroje, výkonnost oproti nativním aplikacím, na druhou stranu nabízí obrovský potenciál. Z technologického hlediska mě zaujala jedna zásadní myšlenka. HTML 5 umožňuje (nikoliv znamená!) změnu architektury webových aplikací. Díky HTML 5 si můžeme dovolit napsat aplikaci, která nebude přímo závislá na online připojení k serveru a bude si dokonce moci držet stav.&lt;/p&gt;

&lt;h3&gt;&lt;a name="devoxx-cloud-java"&gt;Cloud a Java&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Viděl jsem keynote věnovanou &lt;cite&gt;Java EE&lt;/cite&gt;, ve které byl hlavním tématem cloud. Původně jsem chtěl napsat, že to jak si cloud a aplikace v něm napsané představují chlpaci z Oracle, a jak si jej představují já, jsou dva naprosto odlišné světy. Nakonec jsem dospěl k tomu, že moje představa je pokřivená mými zkušenostmi a agilitou potřeb firmy, pro kterou pracuji. &lt;cite&gt;Java EE&lt;/cite&gt; je opravdu úsilí, které je zaměřeno na dodání standardů pupkatým pánům v korporacích. Když to akceptujete, bude váše chápání Enterprise Javy mnohem méně kritické. Proto snahu o podporu JSONu, JPA nad NoSQL databázemi v další verzi berete s jemným přimhouřením oka. To co nejvíce kontrastovalo s mým chápáním, a nebo to na mě přinejmenším tak působilo, byla vize homogenního cloudu z pohledu hostovaných aplikací a služeb. V případě &lt;cite&gt;Java EE&lt;/cite&gt; to byl EAR/WAR v aplikačním serveru. To si myslím může platit pouze pro určitou skupinu aplikací v určitém typu prostředí a napadají mě opět pupkatí páni... Pokud nemáte jenom EARy, WARy a nebo se jinak odlišujete od představy cloudu, například technologiemi které používáte, už pro vás &lt;cite&gt;Java EE&lt;/cite&gt; koulí na noze.&lt;/p&gt;

&lt;p&gt;S tím kontrastovaly prezentace &lt;cite&gt;Platform As A Service&lt;/cite&gt; poskytovatelů, kterým byli &lt;a href="http://www.heroku.com/"&gt;Heroku&lt;/a&gt; a &lt;a href="http://cloudfoundry.org/"&gt;Cloud Foundry&lt;/a&gt;. Přestože by se mohlo zdát, že &lt;cite&gt;Java EE&lt;/cite&gt; a tyto dvě služby k sobě mají stejně daleko, jako Řekové k vyrovnanému státnímu rozpočtu, opak je pravdou. V obou službách totiž přesně pochopili, že vývoj dnešních aplikací se neodehrává v jednom jazyce a za použití jedné technologie. Speciálně bych se zastavil u &lt;cite&gt;Cloud Foundry&lt;/cite&gt;, jehož myšlenka mi přijde skvělá. Skrytý problém dnešního cloud computingu se nazývá vendor lock-in. Česky by se to dalo přeložit jako přikování k jednomu dodavateli. Když si dneska postavíte svojí aplikaci nad Amazonem, budete více či méně svázáni s jeho infrastrukturou a migrace na jiného poskytovatele bude velmi bolestivá. &lt;cite&gt;Cloud Foundry&lt;/cite&gt; by se dala popsat jako prostředník mezi vaší aplikací a poskytovatelem cloud. Namísto toho, abyste aplikaci a nástroje pro monitoring a správu stavěli proti konkrétním službám daného poskytovatele, stavíte je proti API &lt;cite&gt;Cloud Foundry&lt;/cite&gt;, které je adaptuje na konkrétní podvozek. Přechod z jednoho poskytovatele na dalšího pak není tolik bolestivý. Za &lt;cite&gt;Cloud Foundry&lt;/cite&gt; stojí &lt;cite&gt;VMware&lt;/cite&gt;, ale projekt jako takový je open source, tento model bych přirovnal k linuxovým distribucím, jako příklad bych to ilustroval na &lt;a href="http://www.activestate.com/cloud"&gt;Stackato&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Závěr&lt;/h3&gt;
&lt;p&gt;Zaujal mě framework &lt;a href="http://code.google.com/p/disruptor/"&gt;Disruptor&lt;/a&gt; pro pekelně rychlé předávání dat mezi dvěma vlákny, když si ovšem přečtete jejich &lt;a href="http://disruptor.googlecode.com/files/Disruptor-1.0.pdf"&gt;tech paper&lt;/a&gt; zjistíte, že máte k dispozici asynchronní event framework. Zaujaly mě rovněž   &lt;a href="http://www.slideshare.net/remeniuk/first-glance-at-akka-20"&gt;Remote Actory v Akka 2.0&lt;/a&gt; viz strana 27 a &lt;cite&gt;Play framework&lt;/cite&gt;, který kompletně obchází Servlet API a je postavený právě kolem konceptu Actorů. Naopak mě zklamala keynote &lt;cite&gt;Tim Braye&lt;/cite&gt;, ze které jsem si odnesl  pouze odvážnou myšlenku, že trh pro aplikace na mobilní zařízení leží v rozvojových zemích. Pocit politicky korektního, rozuměj nic neříkajícího, tlachání jsem měl z diskuzního panelu kde byli mimo jiné pánové jako &lt;cite&gt;Joshua Bloch&lt;/cite&gt;, &lt;cite&gt;Brian Goetz&lt;/cite&gt;, &lt;cite&gt;Ben Evans&lt;/cite&gt; a &lt;cite&gt;Mark Reinhold&lt;/cite&gt;. Buďto všichni právě střízlivěli z párty  předešlého dne a nebo tomu chybělo lepší moderování a výběr otázek. Jsem v pokušení napsat, že &lt;cite&gt;Filemon&lt;/cite&gt; by to zvládnul lépe než &lt;cite&gt;Tor Norbye&lt;/cite&gt;. Nikdo z nich v podstatě nepřinesl na stůl nic nového a především se snažili hlavně někoho neurazit.&lt;/p&gt;
&lt;p&gt;To byl &lt;cite&gt;Devoxx 2011&lt;/cite&gt; mýma očima.&lt;/p&gt;
&lt;p&gt;Mimochodem doporučuji i &lt;a href="http://blog.krecan.net/2011/11/19/postrehy-z-devoxxu/"&gt;postřehy &lt;cite&gt;Lukáše Křečana&lt;/cite&gt;&lt;/a&gt;, které jsou vtipnější než ty moje a navíc jsme navštěvovali až na pár vyjímek různé prezentace.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4053149-7635160348907870386?l=www.dagblog.cz' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.dagblog.cz/feeds/7635160348907870386/comments/default' title='Komentáře k příspěvku'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4053149&amp;postID=7635160348907870386' title='Komentáře: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/7635160348907870386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/7635160348907870386'/><link rel='alternate' type='text/html' href='http://www.dagblog.cz/2011_11_13_archive.html#7635160348907870386' title='Postřehy z Devoxx 2011'/><author><name>Roman Pichlík</name><uri>https://profiles.google.com/117598003560721106242</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-VsxZP6r_d4g/AAAAAAAAAAI/AAAAAAAAA5g/kzXGTBcrfyg/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4053149.post-4624444060088016909</id><published>2011-11-11T23:05:00.000+01:00</published><updated>2011-11-11T23:05:09.000+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nosql'/><title type='text'>MongoDB - komentář k posledním událostem</title><content type='html'>&lt;p&gt;V posledním týdnu se po různých diskusích začalo trousit hodně negativní reklamy na &lt;cite&gt;MongoDB&lt;/cite&gt;. Jedním z těch příkladů je anonymní &lt;a href="http://pastebin.com/raw.php?i=FD3xe6Jt"&gt;Don't use MongoDB&lt;/a&gt; s &lt;a href="http://news.ycombinator.com/item?id=3202081"&gt;odpovědí přímo od 10gen&lt;/a&gt;. Samozřejmě konkurence si taky &lt;a href="http://seancribbs.com/tech/2011/11/07/mongodb-and-riak-in-context-and-an-apology/"&gt;přihřála polívčičku&lt;/a&gt; ačkoliv to později uvedla na pravou míru. Kdybych to měl shrnout &lt;cite&gt;MongoDB&lt;/cite&gt; je designované s určitými vlastnostmi a vy je buďto akceptujete a budete s nimi počítat a nebo budete nemile překvapeni.&lt;/p&gt;
    
&lt;p&gt;Prvním poměrně zásadním designovým rozhodnutím bylo vypnutí (default) potvrzovacího módu pro write operace. To má za následek, že sice z vašeho pohledu zapíšete data, ale to neznamená, že se data byla ve skutečnosti zapsána na disk. Důvod k tomuto rozhodnutí je přesvědčení autorů, že ne všechny zápisu musí být kritické a zdržovat klienta. Pokud například používáte &lt;cite&gt;MongoDB&lt;/cite&gt; pro sběr logovacích událostí tak vás pravděpodobně nebude mrzet, že některé z nich nebudou za určité konstelace trvale zapsány. Každopádně, a to je důležité zdůraznit, potvrzení zápisu můžete ovládat klientem a to do té míry, že můžete například vynutit zápis na určitý počet replikačních instancí Mongo v clusteru.&lt;/p&gt;

&lt;p&gt;Dalším poměrně často kritizovaným aspektem &lt;cite&gt;MongoDB&lt;/cite&gt; designu byla možná korupce datového souboru při pádu serveru. &lt;cite&gt;MongoDB&lt;/cite&gt; používá mapované soubory do paměti a jednou za čas udělá fsync, kterým se zapíše aktuální stav na disk. Může dojít k porušení integrity pokud ustřelíte &lt;cite&gt;MongoDB&lt;/cite&gt; v ten pravý okamžik, potom vám nezbývá nic jiného než pustit recovery. Od verze 1.6 můžete použít žurnál a máte vystaráno. To má sice negativní implikace na výkon zápisových operací, ale v nereplikovaném řešení je to jediná možnost. Pokud provozujete &lt;cite&gt;MongoDB&lt;/cite&gt; v master/slave módu a nebo replica setu, můžete nechat sesynchronizovat porušený node z masteru či dalších replikantů a máte po problému (teorie - nezkošuel jsem zatím).&lt;/p&gt;

&lt;p&gt;Posledním designovým rozhodnutím, které bývá často kritizované, je &lt;a href="http://www.mongodb.org/display/DOCS/How+does+concurrency+work#Howdoesconcurrencywork-Read%2FWriteLock"&gt;globální read/write zámek&lt;/a&gt;. Díky němu si nikdo jiný neškrtne pokud běží zápisová operace. To je docela nemilé, ale... Záleží kolik zápisových operací máte vzhledem ke čtení. Moje domněnka je, že  rozhodnutí použít globální zámek udělali, protože je to nejjednodušší způsob, jak vyřešit zamykání dat bez zvýšení paměťové náročnosti (nevýhoda MVCC).  Každou novou verzi databáze se optimalizuje výkonnost zkracováním kritické cesty, aby se zámek držel pokud možno co možná nejkratší dobu.&lt;/p&gt;

&lt;p&gt;Toliko k nejčastěji uváděným "nedostatkům" nebo designových rysům &lt;cite&gt;MongoDB&lt;/cite&gt;. Celá ta diskuze mi velmi připomíná debatu Ruby on Rails versus zbytek světa asi před třemi lety: "No vy to sice umíte krásně, ale to se nedá použít, protože požadavky se odbavují jeden po druhém. To nemůže nikdo nikdy použít pro reálný projekt". Samozřejmě kdo chce psa bíti hůl si vždycky najde. V tomhle případě se krásně ukázalo, že pokud existuje technické řešení, pak to není vůbec problém. Pokud bych to převedl zpět na &lt;cite&gt;MongoDB&lt;/cite&gt;, firma &lt;cite&gt;10gen&lt;/cite&gt; si všechno velmi dobře uvědomuje a velmi se snaží všechny defekty řešit a databázi dál vylepšovat.&lt;/p&gt;
&lt;p&gt;Nástup &lt;cite&gt;NoSQL&lt;/cite&gt; řešení je změnou paradigmatu, kterým jsme vyvíjeli webové aplikace posledních deset let. Relační databáze jsou nahrazovány alternativními úložišti z různých důvodů, které jsou dostatečně známé. Ten kdo dneska pošilhává po &lt;cite&gt;NoSQL&lt;/cite&gt; řešení by neměl počítat s tím, že dostane hotový produkt typu relační databáze, jinak bude dost zklamaný. Pokud hodláte &lt;cite&gt;MongoDB&lt;/cite&gt; použít mějte všechny tyto věci na paměti.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4053149-4624444060088016909?l=www.dagblog.cz' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.dagblog.cz/feeds/4624444060088016909/comments/default' title='Komentáře k příspěvku'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4053149&amp;postID=4624444060088016909' title='Komentáře: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/4624444060088016909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/4624444060088016909'/><link rel='alternate' type='text/html' href='http://www.dagblog.cz/2011_11_06_archive.html#4624444060088016909' title='MongoDB - komentář k posledním událostem'/><author><name>Roman Pichlík</name><uri>https://profiles.google.com/117598003560721106242</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-VsxZP6r_d4g/AAAAAAAAAAI/AAAAAAAAA5g/kzXGTBcrfyg/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4053149.post-1847627211667298723</id><published>2011-11-07T22:24:00.000+01:00</published><updated>2011-11-07T22:24:10.309+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='podcast'/><title type='text'>CZ Podcast 56 - Cloud computing, Amazon AWS</title><content type='html'>&lt;p&gt;&lt;a href="http://java.cz/article/czpodcast-56-cloud-aws"&gt;56. díl&lt;/a&gt; jsme natočili opravdu údernickou formou. Filemon šlohnul na fotbalovém zápase Plzeň - Barcelona ruchový mikrofon, ale ten jsme nestačili zapojit, jaký byl fofr tenhle díl natočit. Teď trochu vážně, podařilo se nám vyzpovídat &lt;cite&gt;Teherána&lt;/cite&gt;, což je náš šéf Operations v &lt;a href="http://gooddata.com"&gt;GoodData&lt;/a&gt;, a člověk který pracuje s Amazon AWS každý den.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4053149-1847627211667298723?l=www.dagblog.cz' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.dagblog.cz/feeds/1847627211667298723/comments/default' title='Komentáře k příspěvku'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4053149&amp;postID=1847627211667298723' title='Komentáře: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/1847627211667298723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/1847627211667298723'/><link rel='alternate' type='text/html' href='http://www.dagblog.cz/2011_11_06_archive.html#1847627211667298723' title='CZ Podcast 56 - Cloud computing, Amazon AWS'/><author><name>Roman Pichlík</name><uri>https://profiles.google.com/117598003560721106242</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-VsxZP6r_d4g/AAAAAAAAAAI/AAAAAAAAA5g/kzXGTBcrfyg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4053149.post-4546892683172002673</id><published>2011-10-28T15:58:00.000+02:00</published><updated>2011-10-28T15:58:00.133+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nosql'/><category scheme='http://www.blogger.com/atom/ns#' term='podcast'/><title type='text'>CZPodcast 55 - NoSQL databáze</title><content type='html'>&lt;p&gt;&lt;a href="http://java.cz/article/czpodcast-55-nosql-databaze"&gt;Tímto dílem o NoSQL databázích&lt;/a&gt; jsem si udelěl radost, protože se o ně zajímam docela dlouhou dobu. Podařilo se nám ulovit celkem zajímavé hosty. Karmi, Augi i Honza jsou lidé kteří dnes a deně pracují s různými NoSQL databázemi (Riak, CouchDB, MongoDB, Redis, Cassandra) a mají ten dar, že o tom dokáží zasvěceně povídat. Pokud jste o NoSQL databázích neslyšeli a nebo se chcete dozvědět něco nového, pak je tenhle podcast přesně pro vás.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4053149-4546892683172002673?l=www.dagblog.cz' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.dagblog.cz/feeds/4546892683172002673/comments/default' title='Komentáře k příspěvku'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4053149&amp;postID=4546892683172002673' title='Komentáře: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/4546892683172002673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/4546892683172002673'/><link rel='alternate' type='text/html' href='http://www.dagblog.cz/2011_10_23_archive.html#4546892683172002673' title='CZPodcast 55 - NoSQL databáze'/><author><name>Roman Pichlík</name><uri>https://profiles.google.com/117598003560721106242</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-VsxZP6r_d4g/AAAAAAAAAAI/AAAAAAAAA5g/kzXGTBcrfyg/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4053149.post-3924755453603212557</id><published>2011-10-15T12:17:00.000+02:00</published><updated>2011-10-15T12:17:01.239+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='podcast'/><title type='text'>CZ Podcast 54 - Práce v zahraničí exkluzivně z WebExpo</title><content type='html'>&lt;p&gt;Natáčení &lt;a href="http://java.cz/article/czpodcast-54-prace-v-zahranici"&gt;tohoto dílu&lt;/a&gt; byla celkem velká taškařice. Jediné jasné bylo, že ho "spácháme" na konferenci &lt;a href="http://webexpo.cz/praha2011"&gt;WebExpo&lt;/a&gt;. V plánovaném čase natáčení proti nám běžely dvě jiné přednášky a nebylo moc jasné kolik lidí nakonec dorazí. Mimochodem byl to vůbec první podcast před publikem. Nakonec dorazilo kolem 30 lidí, což nás docela potěšilo, vzhledem k tomu, že proti nám šla těžká váha v podobě &lt;cite&gt;Johna Vanhary&lt;/cite&gt;. Můžete si prohlédnout &lt;a href="https://picasaweb.google.com/111171497579242196539/CZPodcast54"&gt;fotografie z natáčení&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4053149-3924755453603212557?l=www.dagblog.cz' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.dagblog.cz/feeds/3924755453603212557/comments/default' title='Komentáře k příspěvku'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4053149&amp;postID=3924755453603212557' title='Komentáře: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/3924755453603212557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4053149/posts/default/3924755453603212557'/><link rel='alternate' type='text/html' href='http://www.dagblog.cz/2011_10_09_archive.html#3924755453603212557' title='CZ Podcast 54 - Práce v zahraničí exkluzivně z WebExpo'/><author><name>Roman Pichlík</name><uri>https://profiles.google.com/117598003560721106242</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-VsxZP6r_d4g/AAAAAAAAAAI/AAAAAAAAA5g/kzXGTBcrfyg/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry></feed>
