<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Fedora.cz</title>
	<atom:link href="http://fedora.cz/feed/" rel="self" type="application/rss+xml" />
	<link>http://fedora.cz</link>
	<description>Česká komunita linuxové distribuce Fedora</description>
	<lastBuildDate>Thu, 17 May 2012 12:07:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Pozvánka na Fedora Test Day – Gnome Boxes</title>
		<link>http://fedora.cz/pozvanka-na-fedora-test-day-gnome-boxes/</link>
		<comments>http://fedora.cz/pozvanka-na-fedora-test-day-gnome-boxes/#comments</comments>
		<pubDate>Wed, 16 May 2012 22:20:01 +0000</pubDate>
		<dc:creator>Fedora CZ</dc:creator>
				<category><![CDATA[Novinky]]></category>
		<category><![CDATA[Gnome Boxes]]></category>
		<category><![CDATA[test day]]></category>
		<category><![CDATA[testování]]></category>
		<category><![CDATA[virtualizace]]></category>

		<guid isPermaLink="false">http://fedora.cz/?p=1269</guid>
		<description><![CDATA[Dnes probíhá poslední testovací den Fedory 17, tentokrát je zaměřený na Gnome Boxes. Gnome Boxes je aplikace nabízející koncovým uživatelům intuitivní rozhraní pro instalaci a správu virtuálních strojů. Boxes umožňují uživateli zadat nejnutnější údaje jako uživatelské jméno, heslo a v &#8230; <a href="http://fedora.cz/pozvanka-na-fedora-test-day-gnome-boxes/">Celý příspěvek <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Dnes probíhá <a href="http://fedora.cz/udalosti/fedora-test-day-gnome-boxes/">poslední testovací den Fedory 17</a>, tentokrát je zaměřený na Gnome Boxes. Gnome Boxes je aplikace nabízející koncovým uživatelům intuitivní rozhraní pro instalaci a správu virtuálních strojů. Boxes umožňují uživateli zadat nejnutnější údaje jako uživatelské jméno, heslo a v případě Windows i instalační klíč před samotnou instalací operačního systému. Instalace poté probíhá automaticky a nevyžaduje zásah uživatele, o vše ostatní se postará Gnome Boxes.<span id="more-1269"></span></p>
<p>Včera vyšla Fedora 17 RC1 a dnes v 19.00 bude probíhat Go/No-Go meeting, tento den je tak poslední šancí, jak pomoci vylepšit Fedoru 17 před jejím finálním vydáním.</p>
]]></content:encoded>
			<wfw:commentRss>http://fedora.cz/pozvanka-na-fedora-test-day-gnome-boxes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ako na klávesové skratky v rozšíreniach GNOME Shell</title>
		<link>http://fedora.cz/ako-na-klavesove-skratky-v-rozsireniach-gnome-shell/</link>
		<comments>http://fedora.cz/ako-na-klavesove-skratky-v-rozsireniach-gnome-shell/#comments</comments>
		<pubDate>Wed, 16 May 2012 05:07:58 +0000</pubDate>
		<dc:creator>Ivan Nečas</dc:creator>
				<category><![CDATA[Články]]></category>
		<category><![CDATA[GNOME]]></category>
		<category><![CDATA[gnome-shell]]></category>
		<category><![CDATA[Looking Glass]]></category>

		<guid isPermaLink="false">http://fedora.cz/?p=1244</guid>
		<description><![CDATA[Fedora 17 nám pomaly klope na dvere a to je ten pravý čas pozrieť sa zblízka na niektorú z noviniek, ktoré budú jej súčasťou: konkrétne GNOME 3.4 a vylepšená podpora klávesových skratiek pre rozšírenia GNOME Shell. Tá v predchádzajúcich verziách &#8230; <a href="http://fedora.cz/ako-na-klavesove-skratky-v-rozsireniach-gnome-shell/">Celý příspěvek <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Fedora 17 nám pomaly klope na dvere a to je ten pravý čas pozrieť sa zblízka na niektorú z noviniek, ktoré budú jej súčasťou: konkrétne GNOME 3.4 a vylepšená podpora klávesových skratiek pre rozšírenia GNOME Shell. Tá v predchádzajúcich verziách výrazne zaostávala, o čom svedčí aj minimálne množstvo dostupných rozšírení orientovaných práve na klávesovo-orientované ovládanie prostredia (čo nikoho, kto trávi väčšinu času vo VIMe, úplne neteší). Poďme sa teda pozrieť, ako si vytvoriť jednoduchý nástroj, ktorý by doplnil našu klávesnicu o nejaký ten trik.<span id="more-1244"></span></p>
<h2>API na dosah prstov</h2>
<p>Tým, ktorí sa už s rozširovaním Gnomu hrali, určite nie je potrebné predstavovať nástroj <a href="http://live.gnome.org/GnomeShell/LookingGlass">Looking Glass</a>. Pomocou tohoto Firebugu pre GNOME Shell je možné experimentovať so spúšťaním rôznych príkazov JavaScriptu priamo v aktuálnom kontexte, objavovať dostupné API alebo skúmať vniknuté chyby. Tento nástroj vyvoláte cez spúšťač Alt-F2 príkazom lg. Môžete napr. získať zoznam záhlaví všetkých okien:</p>
<pre>global.get_window_actors().map(function (w) { return w.meta_window.get_title(); })</pre>
<p>Pri vývoji je Looking Glass určite nenahraditeľná pomôcka, ktorú človek využíva veľmi často. Snáď až príliš často na to, aby na jej spustenie bola potrebná taká relatívne zložitá procedúra.</p>
<p>Vytvoríme si teda nové rozšírenie ktoré nám ho sprístupní pomocou skratky. Najskôr vytvoríme prázdny projekt pomocou interaktívneho príkazu</p>
<pre>gnome-shell-extension-tool -c</pre>
<p>Vygenerovaný kód môžeme nájsť na <code>~/.local/share/gnome-shell/extensions/{extension-uuid}</code>.</p>
<p>Ako možno očakávať, náš kód pôjde do súboru extension.js (ako prípona napovedá, je to skutočne JavaScript):</p>
<pre>const Gio = imports.gi.Gio;
const Meta = imports.gi.Meta;

const Main = imports.ui.main;
const KEYBINDING_BASE = 'org.gnome.shell.extensions.looking-glass-keybind.keybindings';

function init() { };

function enable() {
global.screen.get_display().add_keybinding("launch-looking-glass",
new Gio.Settings({schema: KEYBINDING_BASE}),
Meta.KeyBindingFlags.NONE,
function() { Main.createLookingGlass().open() });
};

function disable() { };</pre>
<p>Týmto sme GNOME Shellu povedali, že chceme, aby pri použití klávesovej skratky launch-looking-glass, ktorá je definovaná v schéme <code>org.gnome.shell.extensions.looking-glass-keybind.keybindings</code>, otvoril Looking Glass okno. Je v tom však jeden háčik: ani skratka ani schéma nie sú zatiaľ nikde definované a keby sme sa pokúsili skončiť v tejto fázi, môžeme očakávať grandiózny pád prostredia.</p>
<p>Klávesovú skratku definujeme v schéme, čo je jednoduchý xml dokument. Každá schéma musí mať definované id (a prípadne path), ktoré ju identifikujú. Konvencia je aj pomenovať súbor schémy podľa id. V našom prípade teda <code>org.gnome.shell.extensions.looking-glass-keybind.keybindings.gschema.xml</code>:</p>
<pre>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;schemalist&gt;
&lt;schema id="org.gnome.shell.extensions.looking-glass-binding.keybindings"
path="/org/gnome/shell/extensions/looking-glass-binding/keybindings/"&gt;
&lt;key type="as" name="launch-looking-glass"&gt;
&lt;default&gt;["F12"]&lt;/default&gt;
&lt;summary&gt;Launch looking glass&lt;/summary&gt;&lt;description&gt;&lt;/description&gt;
&lt;/key&gt;
&lt;/schema&gt;
&lt;/schemalist&gt;</pre>
<p>Schému so skratkou sme zadefinovali, zostáva však umiestniť ju na také miesto, aby si ju niekto všimol. Máme 2 možnosti na jeho umiestenie:</p>
<ol>
<li><code>/usr/share/glib-2.0/schemas</code> – medzi ostatné celosystémové súbory</li>
<li><code>~/.local/share/glib-2.0/schemas</code> – v tomto prípade sa musíme uistiť, že máme správne nastavenú premennú XDG_DATA_DIRS a prípadne ju upraviť v <code>~/.profile</code>:
<pre>export XDG_DATA_DIRS=~/.local/share:/usr/share</pre>
<p>Aby sa toto nastavenie prejavilo, je potrebné odhlásiť sa a znovu prihlásiť.</li>
</ol>
<p>V oboch prípadoch je potrebné ešte nakoniec skompilovať všetky schémy v danom umiestení:</p>
<pre>glib-compile-schemas ~/.local/share/glib-2.0/schemas</pre>
<p>Na záver môžeme povoliť nami vytvorené rozšírenie napr. pomocou nástroja gsettings:</p>
<pre>gsettings set org.gnome.shell enabled-extensions "['looking-glass-keybind@inecas.fedora.cz']"</pre>
<p>Ak by vám nevyhovovala pôvodná klávesa F12, je možné veľmi jednoducho použiť inú:</p>
<pre>gsettings set org.gnome.shell.extensions.looking-glass-keybind.keybindings\
launch-looking-glass "['F10']"</pre>
<h2>Záver</h2>
<p>Osobne som novú vlastnosť GNOME Shell 3.4 uvítal z nadšením a teším sa na rozšírenia, ktoré prinesú viac možností ovládania práve pomocou klávesnice. Celý kód z tohoto článku je dostupný na <a href="http://github.com/iNecas/looking-glass-keybind">http://github.com/iNecas/looking-glass-keybind</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://fedora.cz/ako-na-klavesove-skratky-v-rozsireniach-gnome-shell/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Volby do FAmSCo (2012 pro F18)</title>
		<link>http://fedora.cz/volby-do-famsco-2012-pro-f18/</link>
		<comments>http://fedora.cz/volby-do-famsco-2012-pro-f18/#comments</comments>
		<pubDate>Fri, 11 May 2012 12:33:47 +0000</pubDate>
		<dc:creator>Fedora CZ</dc:creator>
				<category><![CDATA[Novinky]]></category>
		<category><![CDATA[ambasadoři]]></category>
		<category><![CDATA[FAmSCo]]></category>
		<category><![CDATA[nominace]]></category>
		<category><![CDATA[volby]]></category>

		<guid isPermaLink="false">http://fedora.cz/?p=1239</guid>
		<description><![CDATA[FAmSCo (Fedora Ambassadors Steering Committee) je orgán, který poskytuje podporu a potřebné zázemí Fedora ambasadorům. Ambasadoři jsou členové komunity, kteří reprezentují, propagují a pomáhají projektu Fedora. Tyto volby jsou překlenovací. Všech sedm míst ve výboru je k dispozici. Čtyři kandidáti s &#8230; <a href="http://fedora.cz/volby-do-famsco-2012-pro-f18/">Celý příspěvek <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://fedoraproject.org/wiki/Fedora_Ambassadors_Steering_Committee">FAmSCo</a> (Fedora Ambassadors Steering Committee) je orgán, který poskytuje podporu a potřebné zázemí Fedora ambasadorům. <a href="http://fedoraproject.org/wiki/Ambassadors">Ambasadoři</a> jsou členové komunity, kteří reprezentují, propagují a pomáhají projektu Fedora. Tyto <a href="https://fedoraproject.org/wiki/FAmSCo_election_2012_F18_nominations">volby</a> jsou překlenovací. Všech sedm míst ve výboru je k dispozici. Čtyři kandidáti s největším počtem hlasů získají místo ve výboru na dva vydávací cykly, zbývající tři kandidáti na jeden cyklus. Všichni kandidáti musí být v rámci Fedora Accounts System členy skupiny Ambassadors, aby bylo zajištěno, že už mají povědomí o tom, jak Fedora Ambassadors pracují. <a href="https://fedoraproject.org/wiki/FAmSCo_election_2012_F18_nominations">Nominace</a> jsou otevřené do půlnoci 15. května.</p>
]]></content:encoded>
			<wfw:commentRss>http://fedora.cz/volby-do-famsco-2012-pro-f18/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Fedora na konferenci LinuxWochen</title>
		<link>http://fedora.cz/fedora-na-konferenci-linuxwochen/</link>
		<comments>http://fedora.cz/fedora-na-konferenci-linuxwochen/#comments</comments>
		<pubDate>Fri, 11 May 2012 05:47:02 +0000</pubDate>
		<dc:creator>Jiří Eischmann</dc:creator>
				<category><![CDATA[Články]]></category>
		<category><![CDATA[BSDDay]]></category>
		<category><![CDATA[GIMP]]></category>
		<category><![CDATA[LGM]]></category>
		<category><![CDATA[Libre Graphics Meeting]]></category>
		<category><![CDATA[LinuxWochen]]></category>
		<category><![CDATA[Vídeň]]></category>

		<guid isPermaLink="false">http://fedora.cz/?p=1232</guid>
		<description><![CDATA[Ve dnech 3. až 5. května se ve Vídni konala linuxová konference LinuxWochen, která letos nabyla na zajímavosti i díky tomu, že se společně s ní odehrála také konference Libre Graphics Meeting. Na tu se sjeli open-source grafici a designéři &#8230; <a href="http://fedora.cz/fedora-na-konferenci-linuxwochen/">Celý příspěvek <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ve dnech 3. až 5. května se ve Vídni konala linuxová konference LinuxWochen, která letos nabyla na zajímavosti i díky tomu, že se společně s ní odehrála také konference Libre Graphics Meeting. Na tu se sjeli open-source grafici a designéři z celého světa. A Fedora na akci samozřejmě nemohla chybět.<span id="more-1232"></span></p>
<h2>LinuxWochen</h2>
<p>Ve středu večer byl na břehu dunajského kanálu připraven uvítací piknik. Na tomto pikniku se sešli prakticky všichni zástupci komunity Fedory a Red Hatu. Byli tam Zoltán Hoppar (Fedora Ambassador pro Maďarsko), Nicu Buculei (grafik, člověk, který fotoaparátem zdokumentoval celou řadu akcí Fedory), Máirín Duffy, Emily Dirsch, Sirko Kemter, María „Tatica“ Leandro (designéři a grafici Fedory), Allan Day a Jakub Steiner (designéři GNOME), Richard Hughes (autor colord, PackageKitu a Color Hugu). Další den dorazili další, např. Jaroslav Řezník a Kevin Kofler (oba z KDE SIGu).</p>
<h2>Open-source Venezuela</h2>
<p>Konference začala ve čtvrtek ráno. Na Libre Graphics Meeting měla keynote María „Tatica“ Leandro, která přednášela o tom, jak země, odkud pochází (Venezuela), přechází kompletně na open source. Všechny venezuelské státní úřady mají dnes nařízené používat open source. S Maríí na toto téma dělal rozhovor i Der Standard, jeden z největších deníků v Rakousku. Brněnská pobočka Red Hatu byla první den zastoupena přednáškou Jiřího Eischmanna o tom, jak může open source pomoci studentům v budoucí kariéře.</p>
<h2>Stánek Fedory</h2>
<p>Fedora měla ve vestibulu Technické univerzity, kde se konference konala, nepřehlédnutelný stánek, kde mohli návštěvníci dostat DVD s Fedorou 16, samolepky nebo „cheat cubes“. Na stánku se řešily také problémy. Např. druhý den došel člověk, který si nainstaloval Fedoru na notebook z DVD, které si na stánku vzal první den. Nefungovala mu však wifi karta od Broadcomu. Aktualizace jádra nakonec pomohla. Hned vedle stánku Fedory byl malý stánek Red Hatu, o který se starali zástupci brněnské pobočky. Zaměřený byl především na pracovní příležitosti pro vývojáře v Red Hatu.</p>
<p><a href="http://fedora.cz/wp-content/uploads/2012/05/linuxwochen1.jpg"><img class="aligncenter size-medium wp-image-1234" title="linuxwochen1" src="http://fedora.cz/wp-content/uploads/2012/05/linuxwochen1-450x300.jpg" alt="" width="450" height="300" /></a></p>
<h2>GIMP 2.8</h2>
<p>Druhý den bylo na Libre Graphics Meeting oznámeno vydání GIMPu 2.8, což byla beze sporu velká událost, protože na novou verzi GIMPu se čekalo několik let (mimochodem, Fedora 17 bude jedna z prvních distribucí, která bude novou verzi GIMPu mít). Brněnská pobočka měla v pátek hned čtyři přednášky: Jiří Eischmann a Jaroslav Řezník mluvili o tom, jaké jsou možnosti přispívání do Fedory. Poté měl Jaroslav Řezník samostatnou přednášku o připravovaném Qt 5. Michal Prívozník měl přednášku o virtualizaci na desktopu a Jiří Vaněk o OpenJDK 8. Páteční večer všichni účastníci strávili v příjemném prostředí Raum D v oblasti Museum Quarter u pivka a free movies.</p>
<h2>Krita, Inkscape, Tupi</h2>
<p>Sobotní ráno začalo přednáškou Lukáše Tvrdého (mimochodem uživatele Fedory) a Timothée Gieta o Kritě, známém open-source nástroji pro digitální umělce. Timothée je autor výukového DVD o Kritě a taky prvního tištěného komiksu v ní vytvořeného. Návštěvníkům tak ukázali spoustu vylepšení, která si vyžádali právě uživatelé. Součástí byly také ukázky jejich tvorby. Přednáška o Tupi – pokračovateli animačního nástroje KToon – musela být zrušena kvůli neúčasti autora a přednášejícího v jedné osobě, a tak Timothée ukázal základy práce v konkurenčním nástroji Synfig Studio. Ze zástupců Fedory v sobotu přednášel Sirko Kemter a měl také workshop o používání Inkscape. Fedora byla ještě zastoupená herní session od Gergely Rakosiho. V sobotu s LinuxWochen a LGM probíhal i BSDDay 2012, a tak bylo možné spatřit spoustu beasties s růžky i logem Fedory.</p>
<p><a href="http://fedora.cz/wp-content/uploads/2012/05/linuxwochen2.jpg"><img class="aligncenter size-medium wp-image-1235" title="linuxwochen2" src="http://fedora.cz/wp-content/uploads/2012/05/linuxwochen2-450x300.jpg" alt="" width="450" height="300" /></a></p>
<h2>Příště</h2>
<p>LinuxWochen ve Vídni je velmi příjemná konference, dalo by se i říct s rodinných duchem – díky své rozumné velikosti. Vídeň je taky pro návštěvníky z České Republiky dobře přístupné místo, některé přednášky bývají i v angličtině (pokud tedy nevládnete němčinou), a tak doufáme, že se uvidíme příští rok na stánku Fedory.</p>
<p><em>Autorem fotografií (licence <a href="http://creativecommons.org/licenses/by-sa/2.5/">Creative Commons Atribution Share-Alike</a>) je <a href="http://nicubunu.blogspot.com/2012/05/lgm-2012-linuxwochen-vienna-photo-dump.html">Nicu Buculei</a>.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://fedora.cz/fedora-na-konferenci-linuxwochen/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Letní stáže v Red Hatu</title>
		<link>http://fedora.cz/letni-staze-v-red-hatu/</link>
		<comments>http://fedora.cz/letni-staze-v-red-hatu/#comments</comments>
		<pubDate>Thu, 10 May 2012 12:48:30 +0000</pubDate>
		<dc:creator>Jiří Eischmann</dc:creator>
				<category><![CDATA[Novinky]]></category>
		<category><![CDATA[Brno]]></category>
		<category><![CDATA[Fedora]]></category>
		<category><![CDATA[internship]]></category>
		<category><![CDATA[Red Hat]]></category>
		<category><![CDATA[Red Hat Czech]]></category>
		<category><![CDATA[stáž]]></category>

		<guid isPermaLink="false">http://fedora.cz/?p=1227</guid>
		<description><![CDATA[Používáte Fedoru a rádi byste se zapojili do jejího vývoje? Brněnský Red Hat dělá na konci května výběrové řízení na letní stáže. Některé vypsané pozice se týkají přímo práce na Fedoře nebo technologiích, které s ní přímo souvisí. Pokud tedy &#8230; <a href="http://fedora.cz/letni-staze-v-red-hatu/">Celý příspěvek <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Používáte Fedoru a rádi byste se zapojili do jejího vývoje? Brněnský Red Hat dělá na konci května výběrové řízení na letní stáže. Některé vypsané pozice se týkají přímo práce na Fedoře nebo technologiích, které s ní přímo souvisí. Pokud tedy hledáte práci na léto (s možností prodloužení na školní rok) a chtěli byste si vyzkoušet práci na open-source softwaru v Red Hatu, přihlaste se do výběrového řízení. Více informací <a href="http://eischmann.wordpress.com/2012/05/10/summer-internship-in-red-hat/">na blogu</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://fedora.cz/letni-staze-v-red-hatu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fedora 17: poslední &#8222;Test Compose&#8220; (TC4)</title>
		<link>http://fedora.cz/fedora-17-posledni-test-compose-tc4/</link>
		<comments>http://fedora.cz/fedora-17-posledni-test-compose-tc4/#comments</comments>
		<pubDate>Thu, 10 May 2012 08:09:23 +0000</pubDate>
		<dc:creator>Fedora CZ</dc:creator>
				<category><![CDATA[Novinky]]></category>
		<category><![CDATA[Beefy Miracle]]></category>
		<category><![CDATA[Fedora 17]]></category>
		<category><![CDATA[testování]]></category>

		<guid isPermaLink="false">http://fedora.cz/?p=1221</guid>
		<description><![CDATA[Přípravy na vydání Fedory 17 (Beefy Miracle) vstupují do poslední fáze. K dispozici je vydání &#8222;Test Compose 4&#8243; (TC4), které by mělo být posledním test compose před vydáním RC a následně finální verzí (vydání plánováno na 22. května). V průběhu &#8230; <a href="http://fedora.cz/fedora-17-posledni-test-compose-tc4/">Celý příspěvek <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Přípravy na vydání Fedory 17 (Beefy Miracle) vstupují do poslední fáze. K dispozici je vydání &#8222;Test Compose 4&#8243; (TC4), které by mělo být posledním test compose před vydáním RC a následně finální verzí (vydání <a href="http://rbergero.fedorapeople.org/schedules/f-17/f-17-quality-tasks.html">plánováno</a> na 22. května). V průběhu následujících 5 dnů (do 15. 5.) by měly být (v ideálním případě) s kladným výsledkem otestovány všechny &#8222;testovací případy&#8220; ze skupin <a href="https://fedoraproject.org/wiki/Test_Results:Current_Installation_Test">Installation</a>, <a href="https://fedoraproject.org/wiki/Test_Results:Current_Base_Test">Base</a>, <a href="https://fedoraproject.org/wiki/Test_Results:Current_Desktop_Test">Desktop</a> a <a href="https://fedoraproject.org/wiki/Test_Results:Current_Security_Lab_Test">Security Lab</a>. Sestavení TC4 můžete stahovat z <a href="http://dl.fedoraproject.org/pub/alt/stage/17.TC4/">dl.fedoraproject.org</a>. Další informace v <a href="http://lists.fedoraproject.org/pipermail/test-announce/2012-May/000443.html">oznámení</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://fedora.cz/fedora-17-posledni-test-compose-tc4/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Eclipse a programovací jazyk Java 5: automatická tvorba zdrojových kódů (dokončení)</title>
		<link>http://fedora.cz/eclipse-a-programovaci-jazyk-java-5-automaticka-tvorba-zdrojovych-kodu-dokonceni/</link>
		<comments>http://fedora.cz/eclipse-a-programovaci-jazyk-java-5-automaticka-tvorba-zdrojovych-kodu-dokonceni/#comments</comments>
		<pubDate>Fri, 04 May 2012 05:01:30 +0000</pubDate>
		<dc:creator>Pavel Tišnovský</dc:creator>
				<category><![CDATA[Články]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://fedora.cz/?p=1199</guid>
		<description><![CDATA[V páté části seriálu o využití integrovaného vývojového prostředí Eclipse pro vývoj aplikací v programovacím jazyku Java si nejprve ukážeme, jak je možné s využitím funkcí IDE automaticky vytvořit metody hashCode() a equals(), které se velmi často musí deklarovat například pro objekty ukládané &#8230; <a href="http://fedora.cz/eclipse-a-programovaci-jazyk-java-5-automaticka-tvorba-zdrojovych-kodu-dokonceni/">Celý příspěvek <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>V páté části seriálu o využití integrovaného vývojového prostředí Eclipse pro vývoj aplikací v programovacím jazyku Java si nejprve ukážeme, jak je možné s využitím funkcí IDE automaticky vytvořit metody <strong>hashCode()</strong> a <strong>equals()</strong>, které se velmi často musí deklarovat například pro objekty ukládané do kolekcí (seznamů, množin, asociativních polí). Taktéž si ukážeme, jakým způsobem je možné jednoduše chování těchto dvou metod otestovat přímo ve vytvářené aplikaci.<span id="more-1199"></span></p>
<p style="text-align: center;"><a href="http://fedora.cz/wp-content/uploads/2012/05/eclipse_01.png"><img class="aligncenter size-medium wp-image-1200" title="eclipse_01" src="http://fedora.cz/wp-content/uploads/2012/05/eclipse_01-450x263.png" alt="" width="450" height="263" /></a></p>
<p style="text-align: center;"><em>Obrázek 1: Při popisu vlastností integrovaného vývojového prostředí Eclipse budeme i dnes využívat projekt s dvojicí zdrojových kódů, který jsme si vytvořili v předcházející části tohoto seriálu. Tyto zdrojové kódy obsahují deklaraci třídy <strong>Person</strong> a <strong>Main</strong>.</em></p>
<h2>Překrytí metody equals()</h2>
<p>Při tvorbě reálných aplikací s využitím programovacího jazyka Java poměrně často narazíme na nutnost překrytí metody <strong>equals()</strong>. Připomeňme si, že tato metoda je deklarována již ve třídě <strong>Object</strong>, tj. ve třídě stojící na samém vrcholu hierarchie tříd v Javě. Tato metoda by měla vracet pravdivostní hodnotu <strong>true</strong> v tom případě, že jsou dva objekty považovány za ekvivalentní. Pod slovem „ekvivalentní“ se ovšem skrývá velké množství různých nuancí a záleží jen na programátorovi, který u svých tříd sám může určit, jak se bude zjišťovat ekvivalence dvou instancí těchto tříd. Ve třídě <strong>Object</strong> je použita velmi jednoduchá varianta metody <strong>equals()</strong>, která vrací pravdivostní hodnotu <strong>true</strong> pouze tehdy, pokud leží oba porovnávané objekty (přesněji řečeno datové položky těchto objektů – atributy) na stejném místě na haldě (heapu). Jinými slovy to znamená, že použití metody <strong>equals()</strong> je v tomto případě prakticky totožné s chováním operátoru ==, ostatně právě s využitím tohoto operátoru je metoda <strong>Object.equals()</strong> implementována (připomeňme si, že v Javě nelze chování operátoru == předefinovat, na rozdíl od programovacího jazyka C++).</p>
<p style="text-align: center;"><a href="http://fedora.cz/wp-content/uploads/2012/05/eclipse_02.png"><img class="aligncenter size-medium wp-image-1201" title="eclipse_02" src="http://fedora.cz/wp-content/uploads/2012/05/eclipse_02-450x263.png" alt="" width="450" height="263" /></a></p>
<p style="text-align: center;"><em>Obrázek 2: Zdrojový kód metody <strong>equals()</strong> definované ve třídě <strong>Object</strong> stojící na vrcholu hierarchie všech tříd v Javě. Implementace této metody je skutečně velmi jednoduchá, protože se zde pouze porovnávají reference dvou objektů.</em></p>
<p>V praxi nám však takto definované chování metody <strong>equals()</strong> nemusí dostačovat, protože většinou požadujeme, aby se porovnávaly nikoli pouze reference na objekty (což je sice velmi rychlé, ale současně i poměrně striktní), ale stavy dvou objektů, přičemž stav je tvořen hodnotami všech atributů, popř. ve speciálních případech pouze vybraných atributů. Dobrým příkladem může být implementace metody <strong>equals()</strong> ve třídě <strong>java.lang.String</strong>, popř. v některé „obalové“ třídě vytvořené nad některým primitivním datovým typem (tyto obalové třídy se jmenují <strong>java.lang.Integer</strong>, <strong>java.lang.Float</strong>, <strong>java.lang.Double</strong> atd.). Z tohoto důvodu se programátoři často uchylují k překrytí metody <strong>equals()</strong> a nahrazují ji svojí vlastní implementací. Pro správné chování, například pro uložení objektů do kolekcí, je však zapotřebí dodržet relativně velké množství požadavků, především požadavku na reflexivitu (<strong>x.equals(x)</strong> musí vrátit hodnotu <strong>true</strong> pro každý existující objekt), tranzitivitu, symetričnost (<strong>x.equals(y)==y.equals(x)</strong>) a konzistenci (metoda by pro stejný objekt vždy měla vracet stále stejnou hodnotu).</p>
<p style="text-align: center;"><a href="http://fedora.cz/wp-content/uploads/2012/05/eclipse_03.png"><img class="aligncenter size-medium wp-image-1202" title="eclipse_03" src="http://fedora.cz/wp-content/uploads/2012/05/eclipse_03-450x263.png" alt="" width="450" height="263" /></a></p>
<p style="text-align: center;"><em>Obrázek 3: Implementace metody <strong>equals()</strong> ve třídě <strong>java.lang.String</strong>, v níž se porovnávají jednotlivé znaky za předpokladu, že nejsou porovnávány objekty se stejnou referencí a současně se v obou případech jedná o instance třídy <strong>String</strong>.</em></p>
<h2>Překrytí metody hashCode()</h2>
<p>S trochou nadsázky by se mohlo říci, že ruku v ruce s překrytím metody <strong>equals()</strong> by měli programátoři současně provést i překrytí metody <strong>hashCode()</strong>, tj. měli by vytvořit vlastní implementaci této metody takovým způsobem, aby chování metod <strong>equals()</strong> a <strong>hashCode()</strong> bylo konzistentní, tj. aby například pro dva objekty, pro něž platí <strong>x.equals(y)==true</strong> (a současně samozřejmě i symetrický vztah <strong>y.equals(x)==true</strong>), platilo taktéž <strong>x.hashCode()==y.hashCode()</strong>. Zatímco metoda <strong>equals()</strong> pracuje s dvojicí objektů a vrací pravdivostní hodnotu <strong>true</strong> nebo <strong>false</strong>, u metody <strong>hashCode()</strong> se pracuje pouze s objektem, pro nějž je metoda volána (metoda je tedy bezparametrická) a vrací se celočíselná hodnota typu <strong>int</strong>, tj. 32bitové číslo se znaménkem. Tato hodnota by v ideálním případě měla být pro shodné objekty vždy stejná a pro různé objekty vždy různá. To však v mnoha případech není možné zaručit, už jenom z toho důvodu, že stavový prostor většiny objektů je větší než rozsah <strong>int</strong> (kupříkladu stačí, aby objekt obsahoval jako svůj atribut řetězec či hodnotu typu <strong>double</strong> atd.).</p>
<p style="text-align: center;"><a href="http://fedora.cz/wp-content/uploads/2012/05/eclipse_04.png"><img class="aligncenter size-medium wp-image-1203" title="eclipse_04" src="http://fedora.cz/wp-content/uploads/2012/05/eclipse_04-450x249.png" alt="" width="450" height="249" /></a></p>
<p style="text-align: center;"><em>Obrázek 4: Zdrojový kód metody <strong>hashCode()</strong> definované ve třídě <strong>Object</strong> stojící na vrcholu hierarchie všech tříd v Javě. Vidíme, že se tato metoda vytváří v nativní funkci, jejíž zdrojový text je zobrazen v pravé části obrázku (jedná se o implementaci realizovanou v OpenJDK, další implementace JDK/JRE samozřejmě mohou používat odlišnou implementaci).</em></p>
<p>Hešovací kód objektu by se měl vypočítat z vhodné kombinace hodnot všech atributů tohoto objektu, popř. ve speciálních případech z kombinace hodnot těch atributů, které jsou porovnávány v těle metody <strong>equals()</strong>. Asi nejlépe je toto chování možné ilustrovat na způsobu implementace seznamů (lists), tj. na třídách implementujících rozhraní <strong>java.util.List</strong>. Metoda <strong>hashCode() </strong>v případě seznamů musí postupně zjistit hešovací kódy všech prvků seznamu a tyto kódy vhodným způsobem zkombinovat takovým způsobem, že se původní (postupně počítaný hešovací kód) vynásobí vhodným prvočíslem (zde je konkrétně použita hodnota 31) a přičte se k němu hešovací kód právě zpracovávaného prvku. Samozřejmě je pravděpodobné, že při výpočtu hešovací hodnoty několikrát dojde k jejímu přetečení přes hodnotu 0x7ffffff (MAX_INT), což však nevadí. Metoda <strong>hashCode()</strong> s těmito vlastnostmi je v případě <em>OpenJDK</em> implementována ve třídě <strong>java.util.AbstractList</strong>, která je děděna i třídami <strong>java.util.ArrayList</strong> a <strong>java.util.LinkedList</strong> – viz též zdrojový kód třídy <strong>java.util.AbstractList</strong>, jenž je zobrazený na obrázku číslo 5.</p>
<p style="text-align: center;"><a href="http://fedora.cz/wp-content/uploads/2012/05/eclipse_05.png"><img class="aligncenter size-medium wp-image-1204" title="eclipse_05" src="http://fedora.cz/wp-content/uploads/2012/05/eclipse_05-450x263.png" alt="" width="450" height="263" /></a></p>
<p style="text-align: center;"><em>Obrázek 5: Implementace metody <strong>hashCode()</strong> ve třídě <strong>java.util.AbstractList</strong>, která je děděna i třídami <strong>java.util.ArrayList</strong> a <strong>java.util.LinkedList</strong>.</em></p>
<p>Podobným způsobem je metoda <strong>hashCode()</strong> implementována i ve třídě <strong>String</strong>. I zde se totiž postupně zjišťují hodnoty jednotlivých znaků (v případě jazyka Java se jedná o šestnáctibitová čísla) a hešovací kód se počítá pomocí iteračního vzorce <em>h_new = h_old * 31 + hodnota_znaku</em>. Za povšimnutí ovšem stojí dvě skutečnosti. Tou první je fakt, že se hešovací hodnota řetězce počítá skutečně jen z hodnot jednotlivých znaků a ostatní atributy objektu se ignorují (což je to, co programátor většinou požaduje, protože ho nezajímá, jaké další pro něj nepodstatné atributy objekty typu <strong>String</strong> obsahují). Druhá zajímavost spočívá v optimalizaci použité v metodě <strong>hashCode()</strong>. Namísto toho, aby se hešovací hodnota počítala stále znovu a znovu po každém volání metody <strong>hashCode()</strong>, je právě vypočtená hodnota uložena do atributu <strong>hash</strong> a výpočet hešovací hodnoty se provede pouze tehdy, pokud je hodnota tohoto atributu nulová. Připomeňme si, že řetězce jsou neměnitelné objekty, takže nikde není nutné zkoumat, zda došlo ke změně stavu objektu – jediné, co je nutné provést, je vynulování atributu <strong>hash</strong> v konstruktoru (hešovací kód se tak vypočítá jen tehdy, pokud je to skutečně nutné, například při ukládání řetězce do kolekce).</p>
<p style="text-align: center;"><a href="http://fedora.cz/wp-content/uploads/2012/05/eclipse_06.png"><img class="aligncenter size-medium wp-image-1205" title="eclipse_06" src="http://fedora.cz/wp-content/uploads/2012/05/eclipse_06-450x263.png" alt="" width="450" height="263" /></a></p>
<p style="text-align: center;"><em>Obrázek 6: Implementace metody <strong>hashCode()</strong> ve třídě <strong>java.lang.String</strong>.</em></p>
<h2>Vygenerování zdrojového textu metod equals() a hashCode()</h2>
<p>Vzhledem k tomu, že při překrytí metody <strong>equals()</strong> je většinou nutné postupně porovnat hodnoty všech vybraných atributů, byla by ruční tvorba této metody v mnoha případech velmi zdlouhavá, a to zejména tehdy, pokud třída, pro niž se metoda <strong>equals()</strong> překrývá, obsahuje velký počet atributů. Nesmíme taktéž zapomenout na to, že mnoho atributů může být nastaveno na <strong>null</strong>, čehož lze využít pro urychlení porovnávání (nemá například smysl volat mnohdy časově náročnou metodu <strong>String.equals()</strong> s parametrem <strong>null</strong>). Ovšem vzhledem k tomu, že se jedná o relativně snadno algoritmizovatelnou činnost, může programátorům v této činnosti pomoci vývojové prostředí Eclipse, které dokáže metodu <strong>equals()</strong> vytvořit na základě výběru všech atributů, které se mají v <strong>equals()</strong> porovnávat – existují totiž případy, kdy je nutné některý atribut z porovnání vynechat. Podobné je to v případě metody <strong>hashCode()</strong>, v níž se postupně zjišťují hešovací hodnoty atributů a tyto hodnoty se posléze navzájem kombinují. Postup vytvoření vlastní varianty metod <strong>equals()</strong> a <strong>hashCode()</strong> je zobrazen na následující sekvenci screenshotů:</p>
<p style="text-align: center;"><a href="http://fedora.cz/wp-content/uploads/2012/05/eclipse_07.png"><img class="aligncenter size-medium wp-image-1206" title="eclipse_07" src="http://fedora.cz/wp-content/uploads/2012/05/eclipse_07-450x263.png" alt="" width="450" height="263" /></a></p>
<p style="text-align: center;"><em>Obrázek 7: Metody <strong>equals()</strong> a <strong>hashCode()</strong> budeme vytvářet pro „hodnotový objekt“ nazvaný <strong>Person</strong>, jehož zdrojový kód jsme postupně tvořili v předchozí části tohoto seriálu. Tento objekt obsahuje trojici atributů, settery a gettery pro tyto atributy a taktéž dvojici konstruktorů – jeden z konstruktorů je přitom bezparametrický a druhý konstruktor nastavuje hodnoty všech atributů objektu.</em></p>
<p style="text-align: center;"><a href="http://fedora.cz/wp-content/uploads/2012/05/eclipse_08.png"><img class="aligncenter size-medium wp-image-1207" title="eclipse_08" src="http://fedora.cz/wp-content/uploads/2012/05/eclipse_08-450x263.png" alt="" width="450" height="263" /></a></p>
<p style="text-align: center;"><em>Obrázek 8: Pro vytvoření metod <strong>equals()</strong> a <strong>hashCode()</strong> je nejdříve nutné vybrat z menu „Source“ příkaz „Generate hashCode() and equals()“.</em></p>
<p style="text-align: center;"><a href="http://fedora.cz/wp-content/uploads/2012/05/eclipse_09.png"><img class="aligncenter size-medium wp-image-1208" title="eclipse_09" src="http://fedora.cz/wp-content/uploads/2012/05/eclipse_09-450x263.png" alt="" width="450" height="263" /></a></p>
<p style="text-align: center;"><em>Obrázek 9: Následně se zobrazí dialog, v němž je možné vybrat ty atributy objektu, které se použijí v tělech metod <strong>equals()</strong> a <strong>hashCode()</strong>. Atributy se vybírají pro obě zmíněné metody současně, protože jen tak je možné dodržet vlastnosti, které jsou po obou metodách vyžadované.</em></p>
<p style="text-align: center;"><a href="http://fedora.cz/wp-content/uploads/2012/05/eclipse_10.png"><img class="aligncenter size-medium wp-image-1209" title="eclipse_10" src="http://fedora.cz/wp-content/uploads/2012/05/eclipse_10-450x263.png" alt="" width="450" height="263" /></a></p>
<p style="text-align: center;"><em>Obrázek 10: Na tomto snímku obrazovky je zobrazen zdrojový kód metody <strong>hashCode()</strong> vygenerované automaticky vývojovým prostředím Eclipse. Povšimněte si, že se nejdříve vypočítají hešovací kódy obou atributů typu <strong>String</strong> a posléze se tyto dvě hešovací hodnoty zkombinují s hodnotou celočíselného atributu <strong>age</strong>. Dále si povšimněte, že tato metoda nikdy nepovede ke vzniku výjimky <strong>NullPointerException</strong>, samozřejmě za předpokladu, že je metoda <strong>String.hashCode()</strong> vytvořena korektně. Postup, pomocí něhož bylo tělo této metody vygenerováno, je popsán například v knize Joshuy Blocha „Java Effective“.</em></p>
<p style="text-align: center;"><a href="http://fedora.cz/wp-content/uploads/2012/05/eclipse_11.png"><img class="aligncenter size-medium wp-image-1210" title="eclipse_11" src="http://fedora.cz/wp-content/uploads/2012/05/eclipse_11-450x263.png" alt="" width="450" height="263" /></a></p>
<p style="text-align: center;"><em>Obrázek 11: Zdrojový kód metody <strong>equals()</strong> vygenerovaný integrovaným vývojovým prostředím Eclipse. Zajímavé je, že IDE Eclipse na začátek této metody zařadilo i původní porovnání dvou referencí objektů (viz též implementace této metody pro třídu <strong>Object</strong>), což samozřejmě dává smysl, protože objekty se stejnou referencí musí být totožné objekty. Dále se u všech atributů testuje, zda nemají hodnotu <strong>null</strong>, a teprve v případě, že tomu tak není, se volá metoda <strong>equals()</strong> i pro jednotlivé atributy (výjimku samozřejmě tvoří atributy primitivních datových typů, u nichž postačuje použít operátor ==, resp. při opačné podmínce !=).</em></p>
<h2>Otestování vygenerovaných metod equals() a hashCode()</h2>
<p>Dvojici metod <strong>equals()</strong> a <strong>hashCode()</strong> vygenerovanou pro třídu <strong>Person</strong> integrovaným vývojovým prostředím Eclipse můžeme velmi snadno otestovat a zjistit přitom, za jakých podmínek se liší výsledek výrazu <strong>x==y</strong> a <strong>x.equals(y)</strong> v případě, že objekty nazvané <strong>x</strong> a <strong>y</strong> jsou instancemi třídy <strong>Person</strong>. Nejprve ve třídě <strong>Main</strong> vytvoříme novou metodu nazvanou <strong>testEqualsAndHashCode()</strong>, která vypíše hodnotu výrazu <strong>x == y</strong>, <strong>x.equals(y)</strong> a <strong>hashCode(x)</strong> pro tři instance třídy <strong>Person</strong>. Přitom se může jednat o libovolné instance této třídy, tj. i o shodné objekty mající stejnou referenci (jejich atributy tedy budou na haldě ležet na stejných adresách). Tělo metody <strong>testEqualsAndHashCode()</strong> je zobrazeno na snímku číslo 12:</p>
<p style="text-align: center;"><a href="http://fedora.cz/wp-content/uploads/2012/05/eclipse_12.png"><img class="aligncenter size-medium wp-image-1211" title="eclipse_12" src="http://fedora.cz/wp-content/uploads/2012/05/eclipse_12-450x263.png" alt="" width="450" height="263" /></a></p>
<p style="text-align: center;"><em>Obrázek 12: Metoda <strong>testEqualsAndHashCode()</strong>, kterou je možné zavolat pro tři libovolné instance třídy <strong>Person</strong>.</em></p>
<p>Na třináctém obrázku je ukázán způsob použití metody <strong>testEqualsAndHashCode()</strong>, která je zavolána pro tři objekty nazvané <strong>p1</strong>, <strong>p2</strong> a <strong>p3</strong>. Při prvním zavolání této metody sice objekty <strong>p1</strong> a <strong>p2</strong> leží na jiném místě na haldě (jedná se o různé reference), a tudíž výraz <strong>p1 == p2</strong> vrátí pravdivostní hodnotu <strong>false</strong>, ovšem vzhledem k tomu, že všechny tři atributy těchto objektů jsou navzájem shodné, bude výraz <strong>p1.equals(p2)</strong> a samozřejmě taktéž výraz <strong>p2.equals(p1)</strong> vracet hodnotu <strong>true</strong>. Podobně volání metody <strong>p1.hashCode()</strong> a <strong>p2.hashCode()</strong> vrátí v tomto případě stejné celé číslo. Při druhém volání metody <strong>testEqualsAndHashCode()</strong> jsou již atributy všech tří objektů <strong>p1</strong>, <strong>p2</strong> a <strong>p3</strong> odlišné, což se samozřejmě projeví na hodnotě výrazů typu <strong>px.equals(py)</strong>. Zajímavé je třetí volání metody <strong>testEqualsAndHashCode()</strong>, protože v tomto případě reference <strong>p1</strong> a <strong>p2</strong> představují shodné objekty, tj. <strong>p1</strong> a <strong>p2</strong> obsahují shodnou referenci. To znamená, že všechny tři výrazy <strong>p1 == p2</strong>, <strong>p1.equals(p2)</strong> a <strong>p2.equals(p1)</strong> budou vracet stejnou hodnotu, podobně jako výraz <strong>p1.hashCode()</strong> a <strong>p2.hashCode()</strong>.</p>
<p style="text-align: center;"><a href="http://fedora.cz/wp-content/uploads/2012/05/eclipse_13.png"><img class="aligncenter size-medium wp-image-1212" title="eclipse_13" src="http://fedora.cz/wp-content/uploads/2012/05/eclipse_13-450x263.png" alt="" width="450" height="263" /></a></p>
<p style="text-align: center;"><em>Obrázek 13: Otestování vlastností operátoru == a metod <strong>equals()</strong> a <strong>hashCode()</strong> pro instance třídy <strong>Person</strong>.</em></p>
<p style="text-align: center;"><a href="http://fedora.cz/wp-content/uploads/2012/05/eclipse_14.png"><img class="aligncenter size-medium wp-image-1213" title="eclipse_14" src="http://fedora.cz/wp-content/uploads/2012/05/eclipse_14-450x263.png" alt="" width="450" height="263" /></a></p>
<p style="text-align: center;"><em>Obrázek 14: Výsledek vypsaný metodou <strong>testEqualsAndHashCode()</strong> pro tři různé hodnoty objektů <strong>p1</strong>, <strong>p2</strong> a <strong>p3</strong>.</em></p>
<p>Vzhledem k tomu, že metody <strong>equals()</strong> a <strong>hashCode()</strong> vygenerované integrovaným vývojovým prostředím Eclipse pro třídu <strong>Person</strong> odpovídají předpokládanému „kontraktu“ popsanému mj. i v dokumentaci třídy <strong>Object</strong>, je možné instance třídy <strong>Person</strong> bez obav uložit do kolekcí, například do seznamů (rozhraní <strong>List</strong> implementované třídami <strong>ArrayList</strong> a <strong>LinkedList</strong>), asociativních polí neboli hešovacích map (rozhraní <strong>Map</strong> implementované třídami <strong>HashMap</strong> a <strong>TreeMap</strong>) a především taktéž množin (rozhraní <strong>Set</strong> implementované třídami <strong>HashSet</strong> a <strong>TreeSet</strong>). Na následující čtveřici snímků obrazovky je ukázáno chování instancí třídy <strong>Person</strong> ukládaných do množin, konkrétně do <strong>HashSetu</strong>. Připomeňme si, že před uložením dalšího prvku do množiny se testuje, zda tento prvek v množině již neexistuje, a právě pro tento test se používá metoda <strong>equals()</strong> v součinnosti s metodou <strong>hashCode()</strong>. Na obrázku číslo 15 a 16 je do množiny uložena trojice navzájem odlišných instancí třídy <strong>Person</strong>, zatímco u obrázků 17 a 18 je použita pětice objektů, ovšem ve výsledné množině jsou uloženy pouze objekty tři – dva zbývající objekty totiž byly ekvivalentní k již uloženým objektům (ekvivalence se přitom zjišťuje právě pomocí <strong>equals()</strong> – viz též dokumentace k rozhraní <strong>Set</strong>).</p>
<p style="text-align: center;"><a href="http://fedora.cz/wp-content/uploads/2012/05/eclipse_15.png"><img class="aligncenter size-medium wp-image-1214" title="eclipse_15" src="http://fedora.cz/wp-content/uploads/2012/05/eclipse_15-450x263.png" alt="" width="450" height="263" /></a></p>
<p style="text-align: center;"><em>Obrázek 15: Jednoduchý testovací příklad, v němž jsou do množiny vloženy tři instance třídy Person, přičemž tyto tři instance nejsou navzájem ekvivalentní.</em></p>
<p style="text-align: center;"><a href="http://fedora.cz/wp-content/uploads/2012/05/eclipse_16.png"><img class="aligncenter size-medium wp-image-1215" title="eclipse_16" src="http://fedora.cz/wp-content/uploads/2012/05/eclipse_16-450x263.png" alt="" width="450" height="263" /></a></p>
<p style="text-align: center;"><em>Obrázek 16: Výsledek běhu testovacího příkladu, jehož kód byl zobrazen na snímku číslo 15 – všechny tři objekty byly skutečně uloženy do množiny a jsou následně vypsány (pořadí výpisu však obecně neodpovídá pořadí vložení prvků do množiny).</em></p>
<p style="text-align: center;"><a href="http://fedora.cz/wp-content/uploads/2012/05/eclipse_17.png"><img class="aligncenter size-medium wp-image-1216" title="eclipse_17" src="http://fedora.cz/wp-content/uploads/2012/05/eclipse_17-450x263.png" alt="" width="450" height="263" /></a></p>
<p style="text-align: center;"><em>Obrázek 17: Druhá varianta testovacího příkladu: do množiny je ukládáno pět objektů, ovšem pouze tři z nich nejsou navzájem ekvivalentní – to se interně ve třídě <strong>HashSet</strong> testuje zavoláním metody <strong>Person.equals()</strong>.</em></p>
<p style="text-align: center;"><a href="http://fedora.cz/wp-content/uploads/2012/05/eclipse_18.png"><img class="aligncenter size-medium wp-image-1217" title="eclipse_18" src="http://fedora.cz/wp-content/uploads/2012/05/eclipse_18-450x263.png" alt="" width="450" height="263" /></a></p>
<p style="text-align: center;"><em>Obrázek 18: Výsledek běhu testovacího příkladu, jehož kód byl zobrazen na snímku číslo 17 – pouze tři objekty byly uloženy do množiny, protože zbylé dva objekty byly ekvivalentní s dříve uloženými objekty.</em></p>
<ul>
<li><a href="/eclipse-integrovane-vyvojove-prostredi-pro-javu-i-dalsi-programovaci-jazyky/">Eclipse – integrované vývojové prostředí pro Javu i další programovací jazyky</a></li>
<li><a href="http://fedora.cz/vyuziti-eclipse-pro-vyvoj-aplikaci-v-programovacim-jazyku-java/">Využití Eclipse pro vývoj aplikací v programovacím jazyku Java</a></li>
<li><a href="http://fedora.cz/eclipse-a-programovaci-jazyk-java-poloautomaticke-opravy-chyb-a-refaktoring-zdrojovych-kodu/">Eclipse a programovací jazyk Java: poloautomatické opravy chyb a refaktoring zdrojových kódů</a></li>
<li><a href="http://fedora.cz/eclipse-a-programovaci-jazyk-java-automaticka-tvorba-zdrojovych-kodu/">Eclipse a programovací jazyk Java: automatická tvorba zdrojových kódů</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://fedora.cz/eclipse-a-programovaci-jazyk-java-5-automaticka-tvorba-zdrojovych-kodu-dokonceni/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fedora 18 bude Spherical Cow</title>
		<link>http://fedora.cz/fedora-18-nude-spherical-cow/</link>
		<comments>http://fedora.cz/fedora-18-nude-spherical-cow/#comments</comments>
		<pubDate>Wed, 02 May 2012 09:54:46 +0000</pubDate>
		<dc:creator>Jiří Eischmann</dc:creator>
				<category><![CDATA[Novinky]]></category>
		<category><![CDATA[codename]]></category>
		<category><![CDATA[Fedora 18]]></category>
		<category><![CDATA[spherical cow]]></category>

		<guid isPermaLink="false">http://fedora.cz/?p=1194</guid>
		<description><![CDATA[Fedora Project Leader Robyn Bergeron oznámila výsledky hlasování o jménu pro Fedoru 18. Vítězem se stal Spherical Cow, neboli &#8222;kulatá kráva&#8220;. Toto spojení pochází z vtipu, který ukazuje na rozdíl mezi teoretickou vědou a reálným světem: Skupina vědců se snaží &#8230; <a href="http://fedora.cz/fedora-18-nude-spherical-cow/">Celý příspěvek <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Fedora Project Leader Robyn Bergeron oznámila <a href="http://lists.fedoraproject.org/pipermail/announce/2012-April/003067.html">výsledky hlasování</a> o jménu pro Fedoru 18. Vítězem se stal <strong>Spherical Cow</strong>, neboli &#8222;kulatá kráva&#8220;. Toto spojení pochází z vtipu, který ukazuje na rozdíl mezi teoretickou vědou a reálným světem: Skupina vědců se snaží vyřešit problémy s nízkou produkcí mléka. Po dvou týdnech bádání přijdou s tím, že našli řešení, to ale funguje pouze pro kulaté krávy ve vakuu.<span id="more-1194"></span></p>
<p><img class="aligncenter" title="Spherical Cow" src="http://upload.wikimedia.org/wikipedia/commons/2/23/SphericalCow2.gif" alt="" width="200" height="231" />Vedle hlasování o jméně pro Fedoru 18 probíhalo také hlasování o tom, jestli mají vydání Fedory i nadále dostávat jména. 550 hlasujících se vyjádřilo pro zachování jmén, 384 proti. Jména tedy zachována budou, jen se možná změní proces jejich vybírání.</p>
]]></content:encoded>
			<wfw:commentRss>http://fedora.cz/fedora-18-nude-spherical-cow/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Výsledky Bug Huntingu 2012</title>
		<link>http://fedora.cz/vysledky-bug-huntingu-2012/</link>
		<comments>http://fedora.cz/vysledky-bug-huntingu-2012/#comments</comments>
		<pubDate>Wed, 02 May 2012 07:28:35 +0000</pubDate>
		<dc:creator>Jiří Eischmann</dc:creator>
				<category><![CDATA[Novinky]]></category>
		<category><![CDATA[bug hunting]]></category>
		<category><![CDATA[open house]]></category>
		<category><![CDATA[Red Hat]]></category>

		<guid isPermaLink="false">http://fedora.cz/?p=1190</guid>
		<description><![CDATA[Zúčastnili jste se soutěže Bug Hunting 2012 během Dne otevřených dveří v brněnském Red Hatu a chcete znát výsledky, nebo jste naopak nemohli dorazit a chcete se podívat na zadání a vyzkoušet si, jak byste si vedli vy? Jan Včelák &#8230; <a href="http://fedora.cz/vysledky-bug-huntingu-2012/">Celý příspěvek <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Zúčastnili jste se soutěže Bug Hunting 2012 během Dne otevřených dveří v brněnském Red Hatu a chcete znát výsledky, nebo jste naopak nemohli dorazit a chcete se podívat na zadání a vyzkoušet si, jak byste si vedli vy? Jan Včelák vytvořil <a href="http://people.redhat.com/jvcelak/bughunting_2012/">stránku letošního ročníku Bug Huntingu</a>, na které jsou výsledky, statistiky a hlavně zadání všech úkolů a jejich řešení.</p>
]]></content:encoded>
			<wfw:commentRss>http://fedora.cz/vysledky-bug-huntingu-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Easyfix &#8211; jednoduché opravy ve Fedoře</title>
		<link>http://fedora.cz/easyfix-jednoduche-opravy-ve-fedore/</link>
		<comments>http://fedora.cz/easyfix-jednoduche-opravy-ve-fedore/#comments</comments>
		<pubDate>Thu, 26 Apr 2012 13:54:56 +0000</pubDate>
		<dc:creator>Jiří Eischmann</dc:creator>
				<category><![CDATA[Novinky]]></category>
		<category><![CDATA[bugzilla]]></category>
		<category><![CDATA[easyfix]]></category>
		<category><![CDATA[Fedora]]></category>
		<category><![CDATA[fedorahosted]]></category>

		<guid isPermaLink="false">http://fedora.cz/?p=1186</guid>
		<description><![CDATA[Pierre-Yves Chibon oznámil v poštovní konferenci vývojářů Fedory novou službu &#8211; Easyfix. Rádi byste se zapojili do vývoje Fedory, ale nevíte, kde začít, a problémy se vám zdají na začátek hodně komplexní? S prvními kroky vám může pomoct Easyfix, který &#8230; <a href="http://fedora.cz/easyfix-jednoduche-opravy-ve-fedore/">Celý příspěvek <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Pierre-Yves Chibon <a href="http://lists.fedoraproject.org/pipermail/devel/2012-April/166405.html">oznámil</a> v poštovní konferenci vývojářů Fedory novou službu &#8211; <a href="http://fedoraproject.org/easyfix/">Easyfix</a>. Rádi byste se zapojili do vývoje Fedory, ale nevíte, kde začít, a problémy se vám zdají na začátek hodně komplexní? S prvními kroky vám může pomoct Easyfix, který nabízí seznam problémů, které vyžadují opravy, které nejsou příliš náročné na čas a znalosti. Jedná se tedy o způsob, jak se relativně bezbolestným způsobem zapojit do vývoje Fedory a příspět k její kvalitě.<span id="more-1186"></span></p>
<p>Do Easyfixu se mohou zapojit všechny projekty, které používají <a href="https://fedoraproject.org/wiki/Easyfix">Fedorahosted</a> nebo <a href="http://bugzilla.redhat.com">Red Had bugzillu</a>. Autoři také zveřejnili <a href="https://fedoraproject.org/wiki/Easyfix">postup</a>, jak přidat projekt, aby se jeho &#8222;jednoduché chyby&#8220; zobrazovali v Easyfixu.</p>
]]></content:encoded>
			<wfw:commentRss>http://fedora.cz/easyfix-jednoduche-opravy-ve-fedore/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

