<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://mis.e-mis.cz/skins/common/feed.css?301"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="cs">
		<id>http://mis.e-mis.cz/index.php?feed=atom&amp;target=Spravce&amp;title=Speci%C3%A1ln%C3%AD%3AP%C5%99%C3%ADsp%C4%9Bvky%2FSpravce</id>
		<title>MiS - Příspěvky uživatele [cs]</title>
		<link rel="self" type="application/atom+xml" href="http://mis.e-mis.cz/index.php?feed=atom&amp;target=Spravce&amp;title=Speci%C3%A1ln%C3%AD%3AP%C5%99%C3%ADsp%C4%9Bvky%2FSpravce"/>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/Speci%C3%A1ln%C3%AD:P%C5%99%C3%ADsp%C4%9Bvky/Spravce"/>
		<updated>2026-10-14T16:59:14Z</updated>
		<subtitle>Z MiS</subtitle>
		<generator>MediaWiki 1.17.0</generator>

	<entry>
		<id>http://mis.e-mis.cz/index.php/N%C3%A1stroje_pro_pr%C3%A1ci_s_procesy</id>
		<title>Nástroje pro práci s procesy</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/N%C3%A1stroje_pro_pr%C3%A1ci_s_procesy"/>
				<updated>2026-10-10T11:24:39Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: /* Linux */ cat /dev/zero nahrazeno za sleep infinity.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]][[Category:OSY]][[Category:Procesy]]&lt;br /&gt;
&lt;br /&gt;
== Windows ==&lt;br /&gt;
; Přehled procesů a využití prostředků&lt;br /&gt;
* Standardně ve Windows: Správce úloh (vyvoláme &amp;lt;tt&amp;gt;Ctrl-Alt-Del&amp;lt;/tt&amp;gt;)&lt;br /&gt;
* Pokročilejší, podrobnější: [http://technet.microsoft.com/cs-cz/sysinternals/bb896653.aspx Process Explorer] (součást balíčku ''[https://docs.microsoft.com/en-us/sysinternals/ Sysinternals]'' od Microsoftu).&lt;br /&gt;
** zdarma, není nutné instalovat, &lt;br /&gt;
** ale pro podrobné informace musí běžet pod účtem správce počítače.&lt;br /&gt;
; Informace o procesech&lt;br /&gt;
* &amp;lt;tt&amp;gt;Start &amp;amp;rarr; Systémové informace&amp;lt;/tt&amp;gt;&lt;br /&gt;
; Správa (spouštění, ukončování, restart) služeb&lt;br /&gt;
* &amp;lt;tt&amp;gt;Správa počítače &amp;amp;rarr; Služby&amp;lt;/tt&amp;gt; (viz [[Služby a démoni]])&lt;br /&gt;
* &amp;lt;tt&amp;gt;msconfig&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Umožňuje jednorázově zakázat spouštění programů, které se jinak zavádí po spuštění počítače.&lt;br /&gt;
** Vhodné pokud si myslíme, že některý program není v systému potřeba, ale nejsme si jisti.&lt;br /&gt;
&lt;br /&gt;
== Linux ==&lt;br /&gt;
&lt;br /&gt;
; &amp;amp;&lt;br /&gt;
*spuštění procesu na pozadí&lt;br /&gt;
* Příklady:&lt;br /&gt;
 freemind &amp;amp;&lt;br /&gt;
&lt;br /&gt;
; echo $$&lt;br /&gt;
*vrací PID aktuálního procesu&lt;br /&gt;
&lt;br /&gt;
=== Zobrazení seznamu procesů ===&lt;br /&gt;
; ps&lt;br /&gt;
* Zkratka z&amp;amp;nbsp;„ProcesseS“.&lt;br /&gt;
*Standardně jen „moje“ procesy (potomci aktuálního procesu).&lt;br /&gt;
* Procesy všech uživatelů:&lt;br /&gt;
 ps aux&lt;br /&gt;
&lt;br /&gt;
; top&lt;br /&gt;
* Zkratka z „TOP n processes according to ...“.&lt;br /&gt;
* Zobrazí procesy v&amp;amp;nbsp;pořadí podle využití procesoru či podle dalších kritérií.&lt;br /&gt;
* Průběžně aktualizuje výpis do doby, než program ukončíme stiskem klávesy &amp;lt;tt&amp;gt;q&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Ovládání&lt;br /&gt;
**z ... barvičky&lt;br /&gt;
**q ... ukončit&lt;br /&gt;
* Kódy stavů procesu&lt;br /&gt;
**D = v &amp;quot;nepřerušitelném spánku&amp;quot;&lt;br /&gt;
**R = běžící nebo ready&lt;br /&gt;
**S = spící&lt;br /&gt;
**T = traceovaný nebo zastavený&lt;br /&gt;
**Z = zombie&lt;br /&gt;
*Nadstavba htop (knihovna ncurses)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Posílání signálů a&amp;amp;nbsp;násilné ukončení procesu ===&lt;br /&gt;
; kill&lt;br /&gt;
*Pošle signál KILL&lt;br /&gt;
* Pomocí parametrů můžeme poslat libovolný signál.&lt;br /&gt;
* Jako parametr zadáváme číslo procesu.&lt;br /&gt;
* Základní použití:&lt;br /&gt;
 kill -''signal'' ''pid''&lt;br /&gt;
* Příklady&lt;br /&gt;
 kill 4562&lt;br /&gt;
 kill -TERM 4562&lt;br /&gt;
 kill -L&lt;br /&gt;
* Vypíše signály, které můžeme posílat.&lt;br /&gt;
&lt;br /&gt;
; killall&lt;br /&gt;
* Umožňuje ukončit všechny procesy s&amp;amp;nbsp;daným názvem procesu (podle názvu, nikoli podle PID).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Spouštění úloh na popředí/pozadí ===&lt;br /&gt;
&lt;br /&gt;
; Ctrl-Z&lt;br /&gt;
* uspí aktuální běžící proces&lt;br /&gt;
* Vypíše do výstupu číslo úlohy. Pomocí tohoto čísla můžeme proces znovu obnovit příkazy &amp;lt;code&amp;gt;bg&amp;lt;/code&amp;gt; nebo &amp;lt;code&amp;gt;fg&amp;lt;/code&amp;gt; viz dále.&lt;br /&gt;
* Pozn.: úlohy jsou číslovány od jedničky a&amp;amp;nbsp;číslo úlohy neodpovídá PID daného procesu.&lt;br /&gt;
&lt;br /&gt;
; bg ''&amp;lt;číslo-úlohy&amp;gt;''&lt;br /&gt;
* Zkratka z&amp;amp;nbsp;''BackGround'' &amp;amp;mdash; „spusť úlohu na pozadí“&lt;br /&gt;
* Spoustí uspaný proces na pozadí.&lt;br /&gt;
 bg 1&lt;br /&gt;
&lt;br /&gt;
; fg ''&amp;lt;číslo-úlohy&amp;gt;''&lt;br /&gt;
* Spoustí uspaný proces na popředí.&lt;br /&gt;
* Zkratka z&amp;amp;nbsp;''ForeGround'' &amp;amp;mdash; „spusť úlohu na popředí“&lt;br /&gt;
 fg 1&lt;br /&gt;
&lt;br /&gt;
; jobs&lt;br /&gt;
* Vypíše seznam běžících úloh s&amp;amp;nbsp;čísly.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Priklad&amp;quot;&amp;gt;&lt;br /&gt;
Spuštění procesu na pozadí:&lt;br /&gt;
 sleep infinity&lt;br /&gt;
 &amp;lt;em&amp;gt;Ctrl-Z&amp;lt;/em&amp;gt;&lt;br /&gt;
 jobs&lt;br /&gt;
 bg &amp;amp;lt;číslo-úlohy&amp;amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Priklad&amp;quot;&amp;gt;&lt;br /&gt;
Zabití zaseknutého procesu:&lt;br /&gt;
 sleep infinity &amp;amp;&lt;br /&gt;
 killall -STOP sleep&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Informace o běžících procesech ===&lt;br /&gt;
* Viz [[Adresář /proc]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Priority procesů ===&lt;br /&gt;
; nice&lt;br /&gt;
*který proces právě poběží určuje jádro podle priorit&lt;br /&gt;
*standardně 0, může zvýšit; rozsah (-20; 19)&lt;br /&gt;
*vyšší hodnota znamená, že poběží nepřerušovaně delší dobu, ale ve větších intervalech&lt;br /&gt;
*nižší hodnota =&amp;gt; rychlejší odezva (vyšší priorita)&lt;br /&gt;
 nice program&lt;br /&gt;
*standardně zvýší hodnotu o 10&lt;br /&gt;
 nice -n 5 program&lt;br /&gt;
*zvýší hodnotu o 5&lt;br /&gt;
&amp;lt;div class=&amp;quot;Priklad&amp;quot;&amp;gt;&lt;br /&gt;
Vyzkoušejte:&lt;br /&gt;
 nice&lt;br /&gt;
 nice nice&lt;br /&gt;
 nice -n 19 nice //hodnotu dědí od svého rodiče&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
; renice&lt;br /&gt;
*mění prioritu procesů&lt;br /&gt;
; ionice&lt;br /&gt;
*Priorita vstupně-výstupních operací.&lt;br /&gt;
*V balíku util-linux&lt;br /&gt;
&lt;br /&gt;
== Zdroje ==&lt;br /&gt;
* [http://www.abclinuxu.cz/clanky/unixove-nastroje-18-nice-renice-umask AbcLinuxu.cz &amp;gt; Unixove-nastroje-18-nice-renice-umask]&lt;br /&gt;
* Kódy stavů procesu: [http://slack-linux.blogspot.cz/2009/07/linux-process-state-codes.html Slack-linux.blogspot.cz &amp;gt; Linux-process-state-codes]&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/Slo%C5%BEitost_algoritmu</id>
		<title>Složitost algoritmu</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/Slo%C5%BEitost_algoritmu"/>
				<updated>2026-10-07T04:26:37Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: Přidány třídy P a NP.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]][[Category:Programování]]&lt;br /&gt;
&lt;br /&gt;
== Složitost jako míra pro srovnání algoritmů ==&lt;br /&gt;
Hledáme nástroje pro porovnání efektivity algoritmů.&lt;br /&gt;
*Máme &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; prvků vstupních dat (&amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; zákazníků, &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; čísel,...),&lt;br /&gt;
*zajímá nás, který ze dvou algoritmů vrátí výsledek dříve.&lt;br /&gt;
&amp;lt;div class=&amp;quot;Poznamka&amp;quot;&amp;gt;Rychlejší algoritmus &amp;amp;rarr; lepší algoritmus!&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;Varovani&amp;quot;&amp;gt;Má to ale jeden háček &amp;amp;mdash; musí nám stačit systémové prostředky pro daný algoritmus, zejména operační paměť. ;)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Problém &amp;amp;mdash; čas je ovlivněn:&lt;br /&gt;
* volbou konkrétního zadání stejného problému,&lt;br /&gt;
* výkonem počítače (pozor také na další běžící procesy),&lt;br /&gt;
* kvalitou implementace algoritmu,&lt;br /&gt;
* použitým programovacím jazykem,&lt;br /&gt;
* použitými knihovnami,&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Měření složitosti – používaná zjednodušení ==&lt;br /&gt;
# ''Neměříme čas, ale počet operací!''&lt;br /&gt;
#* Tím omezíme vliv konkrétního HW.&lt;br /&gt;
# ''Nepočítáme všechny dílčí operace!''&lt;br /&gt;
#* Obvykle počítáme pouze „významné“ (časově náročné) operace (počet porovnání, počet přístupů na disk).&lt;br /&gt;
#* Tím eliminujeme vliv použitého překladače, knihoven, jazyka, procesorové architektury,...&lt;br /&gt;
# ''Zajímá nás průměrná složitost nebo složitost v nejhorším případě!''&lt;br /&gt;
#* Tím eliminujeme vliv konkrétního zadání.&lt;br /&gt;
#* Viz [[#Složitost v průměrném nebo nejhorším případě|průměrná složitost]].&lt;br /&gt;
# ''Zajímají nás velká data, řádový růst!'' &lt;br /&gt;
#* Viz [[#Asymptotická složitost|asymptotická složitost]].&lt;br /&gt;
#* Malé instance skončí v rozumném čase, i když se budou počítat neefektivně.&lt;br /&gt;
# ''Stačí nám horní mez růstu počtu operací''&lt;br /&gt;
#* Místo snahy o přesné vyčíslení počtu operací nám stačí, že počet operací neporoste rychleji než některá matematická funkce.&lt;br /&gt;
#* Například pro N prvků vstupních dat nebude nikdy počet operací vyšší než &amp;lt;code&amp;gt;y = A.N&amp;lt;/code&amp;gt;, kde &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; je zvolená konstanta.&lt;br /&gt;
#* Viz [[#Asymptotická složitost|asymptotická složitost]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Asymptotická složitost ==&lt;br /&gt;
* Zkoumáme, jak se počet operací mění při zvětšování objemu vstupních dat.&lt;br /&gt;
*Zapisujeme &amp;lt;code&amp;gt;O(f(N))&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;... velikost dat&lt;br /&gt;
** &amp;lt;code&amp;gt;f(N)&amp;lt;/code&amp;gt;... funkce, jejímž růstem lze limitovat růst počtu operací&lt;br /&gt;
**Pokud je velikost vstupu &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, pak je složitost limitována funkcí: &amp;lt;code&amp;gt;y = A+B.f(N)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Příklady růstu počtu operací&lt;br /&gt;
* &amp;lt;code&amp;gt;O(N)&amp;lt;/code&amp;gt; &amp;amp;mdash; lineární ... např. hledání maxima posloupnosti&lt;br /&gt;
*Lepší než lineární&lt;br /&gt;
** &amp;lt;code&amp;gt;O(log(N))&amp;lt;/code&amp;gt; ... např. hledání prvku v&amp;amp;nbsp;seřazeném seznamu&lt;br /&gt;
** &amp;lt;code&amp;gt;O(sqrt(N))&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;O(N.log(N))&amp;lt;/code&amp;gt; ... př.: rychlé algoritmy pro řazení&lt;br /&gt;
* &amp;lt;code&amp;gt;O(N&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;)&amp;lt;/code&amp;gt; &amp;amp;mdash; kvadratický ... například řazení opakovaným hledáním maxima&lt;br /&gt;
* &amp;lt;code&amp;gt;O(N&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;)&amp;lt;/code&amp;gt; &amp;amp;mdash; kubický&lt;br /&gt;
*Polynomiální&lt;br /&gt;
**roste jako libovolný polynom (omezen &amp;lt;code&amp;gt;O(N&amp;lt;sup&amp;gt;i&amp;lt;/sup&amp;gt;)&amp;lt;/code&amp;gt;, kde &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; je lib. konstanta).&lt;br /&gt;
* &amp;lt;code&amp;gt;O(2&amp;lt;sup&amp;gt;N&amp;lt;/sup&amp;gt;)&amp;lt;/code&amp;gt; &amp;amp;mdash; exponenciální&lt;br /&gt;
** Viz například: [http://cs.wikipedia.org/wiki/Hanojsk%C3%A9_v%C4%9B%C5%BEe Hanoiské věže].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Priklad&amp;quot;&amp;gt;&lt;br /&gt;
Abyste si lépe uvědomili, jaký vliv má růst složitosti algoritmu, můžete si to zkusit představit na hledání v&amp;amp;nbsp;telefonním seznamu:&lt;br /&gt;
* Běžné hledání v&amp;amp;nbsp;telefonním seznamu má složitost &amp;lt;code&amp;gt;O(N.log(N))&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Složitost &amp;lt;code&amp;gt;O(N)&amp;lt;/code&amp;gt; &amp;amp;mdash; lineární, tedy stále dobrou &amp;amp;mdash; by mělo hledání v&amp;amp;nbsp;telefonním seznamu podle telefonního čísla. Museli byste projít všechny položky a&amp;amp;nbsp;hledat člověka, který má zadané telefonní číslo.&lt;br /&gt;
* Kvadratickou složitost &amp;lt;code&amp;gt;O(N&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;)&amp;lt;/code&amp;gt; by měla úloha, kdy byste každému člověku z&amp;amp;nbsp;telefonního seznamu museli zavolat, on by vám řekl telefonní číslo svého nejlepšího kamaráda a&amp;amp;nbsp;vaším úkolem by bylo nalézt v&amp;amp;nbsp;seznamu jméno toho kamaráda (opět hledáním položku po položce). (Tady už by se vyplatilo si telefonní seznam nejprve seřadit podle telefonních čísel. To by sice zabralo čas &amp;lt;code&amp;gt;O(N.log(N))&amp;lt;/code&amp;gt;, ale pak už byste hledali se složitostí &amp;lt;code&amp;gt;O(log(N))&amp;lt;/code&amp;gt;.)&lt;br /&gt;
* Kubická složitost: na každé číslo v&amp;amp;nbsp;seznamu zavolejte, tam vám řeknou telefonní číslo kamaráda, najděte jeho jméno, zavolejte mu, oslovte ho jménem a&amp;amp;nbsp;on vám řekne číslo svého kamaráda. Jeho jméno najděte. ;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Priklad&amp;quot;&amp;gt;Úkol: Navrhněte algoritmus a odhadněte složitost&lt;br /&gt;
* Hledání maxima&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Složitost v průměrném či nejhorším případě ==&lt;br /&gt;
* Počet vykonaných operací se může lišit podle podoby konkrétních dat.&lt;br /&gt;
* Třeba při řazení podle abecedy může být počet operací jiný pro ''téměř setříděná'' data a jiná pro data, která jsou úplně přeházená.&lt;br /&gt;
* Některé algoritmy mohou mít velmi dobré chování ve většině případů, ale pro nešťastně uspořádaná data mohou mít složitost větší. (Viz třeba známý řadící algoritmus ''QuickSort''.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Priklad&amp;quot;&amp;gt;&lt;br /&gt;
* Při cestě do školy vstanu tak, abych v průměrném případě dorazil včas. Pokud dojde k&amp;amp;nbsp;nehodě na silnici, může se stát, že se zpozdím. Ale je to málo pravděpodobné a vyrážet o&amp;amp;nbsp;hodinu dříve pro případ nehody by bylo nepraktické &amp;amp;mdash; řeším ''průměrnou'' délku cesty.&lt;br /&gt;
* Na druhou stranu pokud jdu k&amp;amp;nbsp;maturitě, čtvrthodinové zpoždění by znamenalo, že budu muset maturovat až na podzim a&amp;amp;nbsp;proto raději hodinu počkám &amp;amp;mdash; zajímá mě spíše délka cesty ''v&amp;amp;nbsp;nejhorším případě''.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Třídy P a NP ==&lt;br /&gt;
; Třída P (polynomiální algoritmy)&lt;br /&gt;
* Zahrnuje všechny algoritmy, jejichž složitost lze omezit polynomem.&lt;br /&gt;
* Tedy všechny algoritmy se složitostí nejvýše &amp;lt;code&amp;gt;O(N&amp;lt;sup&amp;gt;K&amp;lt;/sup&amp;gt;)&amp;lt;/code&amp;gt;, kde &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; je libovolná konstanta.&lt;br /&gt;
; Třída NP (nedeterministicky polynomiální algoritmy)&lt;br /&gt;
* Zahrnuje všechny algoritmy, u kterých pokud známe řešení, můžeme jeho správnost ověřit v polynomiálním čase.&lt;br /&gt;
* Nemusíme umět řešení '''najít''', stačí umět ověřit správnost řešení, které nám někdo dá.&lt;br /&gt;
* Řešení pak obvykle hledáme pomocí nějaké heuristiky – zjednodušeného posutpu, jehož výsledek nemusí být vždy správný, ale který běží v polynomiálním čase. Správnost řešení pak ověřujeme a pokud není správné, hledáme znovu stejnou heuristikou s upravenými parametry.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Související pojmy ==&lt;br /&gt;
; Složitost problému&lt;br /&gt;
*Složitost nejlepšího algoritmu, který řeší daný problém.&lt;br /&gt;
*× složitost nejlepšího ''známého'' algoritmu.&lt;br /&gt;
&lt;br /&gt;
; Paměťová × časová složitost&lt;br /&gt;
&lt;br /&gt;
== Viz také ==&lt;br /&gt;
* [[Algoritmus]]&lt;br /&gt;
&lt;br /&gt;
== Zdroje ==&lt;br /&gt;
*[http://cs.wikipedia.org/wiki/Asymptotick%C3%A1_slo%C5%BEitost Wikipedia.org &amp;gt; Asymptotická složitost]&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/Slo%C5%BEitost_algoritmu</id>
		<title>Složitost algoritmu</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/Slo%C5%BEitost_algoritmu"/>
				<updated>2026-10-07T04:15:51Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: Přidáno zjednodušení omezením danou funkcí, maximální složitost -&amp;gt; složitost v nejhorším případě.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]][[Category:Programování]]&lt;br /&gt;
&lt;br /&gt;
== Složitost jako míra pro srovnání algoritmů ==&lt;br /&gt;
Hledáme nástroje pro porovnání efektivity algoritmů.&lt;br /&gt;
*Máme &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; prvků vstupních dat (&amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; zákazníků, &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; čísel,...),&lt;br /&gt;
*zajímá nás, který ze dvou algoritmů vrátí výsledek dříve.&lt;br /&gt;
&amp;lt;div class=&amp;quot;Poznamka&amp;quot;&amp;gt;Rychlejší algoritmus &amp;amp;rarr; lepší algoritmus!&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;Varovani&amp;quot;&amp;gt;Má to ale jeden háček &amp;amp;mdash; musí nám stačit systémové prostředky pro daný algoritmus, zejména operační paměť. ;)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Problém &amp;amp;mdash; čas je ovlivněn:&lt;br /&gt;
* volbou konkrétního zadání stejného problému,&lt;br /&gt;
* výkonem počítače (pozor také na další běžící procesy),&lt;br /&gt;
* kvalitou implementace algoritmu,&lt;br /&gt;
* použitým programovacím jazykem,&lt;br /&gt;
* použitými knihovnami,&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Měření složitosti – používaná zjednodušení ==&lt;br /&gt;
# ''Neměříme čas, ale počet operací!''&lt;br /&gt;
#* Tím omezíme vliv konkrétního HW.&lt;br /&gt;
# ''Nepočítáme všechny dílčí operace!''&lt;br /&gt;
#* Obvykle počítáme pouze „významné“ (časově náročné) operace (počet porovnání, počet přístupů na disk).&lt;br /&gt;
#* Tím eliminujeme vliv použitého překladače, knihoven, jazyka, procesorové architektury,...&lt;br /&gt;
# ''Zajímá nás průměrná složitost nebo složitost v nejhorším případě!''&lt;br /&gt;
#* Tím eliminujeme vliv konkrétního zadání.&lt;br /&gt;
#* Viz [[#Složitost v průměrném nebo nejhorším případě|průměrná složitost]].&lt;br /&gt;
# ''Zajímají nás velká data, řádový růst!'' &lt;br /&gt;
#* Viz [[#Asymptotická složitost|asymptotická složitost]].&lt;br /&gt;
#* Malé instance skončí v rozumném čase, i když se budou počítat neefektivně.&lt;br /&gt;
# ''Stačí nám horní mez růstu počtu operací''&lt;br /&gt;
#* Místo snahy o přesné vyčíslení počtu operací nám stačí, že počet operací neporoste rychleji než některá matematická funkce.&lt;br /&gt;
#* Například pro N prvků vstupních dat nebude nikdy počet operací vyšší než &amp;lt;code&amp;gt;y = A.N&amp;lt;/code&amp;gt;, kde &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; je zvolená konstanta.&lt;br /&gt;
#* Viz [[#Asymptotická složitost|asymptotická složitost]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Asymptotická složitost ==&lt;br /&gt;
* Zkoumáme, jak se počet operací mění při zvětšování objemu vstupních dat.&lt;br /&gt;
*Zapisujeme &amp;lt;code&amp;gt;O(f(N))&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;... velikost dat&lt;br /&gt;
** &amp;lt;code&amp;gt;f(N)&amp;lt;/code&amp;gt;... funkce, jejímž růstem lze limitovat růst počtu operací&lt;br /&gt;
**Pokud je velikost vstupu &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, pak je složitost limitována funkcí: &amp;lt;code&amp;gt;y = A+B.f(N)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Příklady růstu počtu operací&lt;br /&gt;
* &amp;lt;code&amp;gt;O(N)&amp;lt;/code&amp;gt; &amp;amp;mdash; lineární ... např. hledání maxima posloupnosti&lt;br /&gt;
*Lepší než lineární&lt;br /&gt;
** &amp;lt;code&amp;gt;O(log(N))&amp;lt;/code&amp;gt; ... např. hledání prvku v&amp;amp;nbsp;seřazeném seznamu&lt;br /&gt;
** &amp;lt;code&amp;gt;O(sqrt(N))&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;O(N.log(N))&amp;lt;/code&amp;gt; ... př.: rychlé algoritmy pro řazení&lt;br /&gt;
* &amp;lt;code&amp;gt;O(N&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;)&amp;lt;/code&amp;gt; &amp;amp;mdash; kvadratický ... například řazení opakovaným hledáním maxima&lt;br /&gt;
* &amp;lt;code&amp;gt;O(N&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt;)&amp;lt;/code&amp;gt; &amp;amp;mdash; kubický&lt;br /&gt;
*Polynomiální&lt;br /&gt;
**roste jako libovolný polynom (omezen &amp;lt;code&amp;gt;O(N&amp;lt;sup&amp;gt;i&amp;lt;/sup&amp;gt;)&amp;lt;/code&amp;gt;, kde &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; je lib. konstanta).&lt;br /&gt;
* &amp;lt;code&amp;gt;O(2&amp;lt;sup&amp;gt;N&amp;lt;/sup&amp;gt;)&amp;lt;/code&amp;gt; &amp;amp;mdash; exponenciální&lt;br /&gt;
** Viz například: [http://cs.wikipedia.org/wiki/Hanojsk%C3%A9_v%C4%9B%C5%BEe Hanoiské věže].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Priklad&amp;quot;&amp;gt;&lt;br /&gt;
Abyste si lépe uvědomili, jaký vliv má růst složitosti algoritmu, můžete si to zkusit představit na hledání v&amp;amp;nbsp;telefonním seznamu:&lt;br /&gt;
* Běžné hledání v&amp;amp;nbsp;telefonním seznamu má složitost &amp;lt;code&amp;gt;O(N.log(N))&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Složitost &amp;lt;code&amp;gt;O(N)&amp;lt;/code&amp;gt; &amp;amp;mdash; lineární, tedy stále dobrou &amp;amp;mdash; by mělo hledání v&amp;amp;nbsp;telefonním seznamu podle telefonního čísla. Museli byste projít všechny položky a&amp;amp;nbsp;hledat člověka, který má zadané telefonní číslo.&lt;br /&gt;
* Kvadratickou složitost &amp;lt;code&amp;gt;O(N&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;)&amp;lt;/code&amp;gt; by měla úloha, kdy byste každému člověku z&amp;amp;nbsp;telefonního seznamu museli zavolat, on by vám řekl telefonní číslo svého nejlepšího kamaráda a&amp;amp;nbsp;vaším úkolem by bylo nalézt v&amp;amp;nbsp;seznamu jméno toho kamaráda (opět hledáním položku po položce). (Tady už by se vyplatilo si telefonní seznam nejprve seřadit podle telefonních čísel. To by sice zabralo čas &amp;lt;code&amp;gt;O(N.log(N))&amp;lt;/code&amp;gt;, ale pak už byste hledali se složitostí &amp;lt;code&amp;gt;O(log(N))&amp;lt;/code&amp;gt;.)&lt;br /&gt;
* Kubická složitost: na každé číslo v&amp;amp;nbsp;seznamu zavolejte, tam vám řeknou telefonní číslo kamaráda, najděte jeho jméno, zavolejte mu, oslovte ho jménem a&amp;amp;nbsp;on vám řekne číslo svého kamaráda. Jeho jméno najděte. ;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Priklad&amp;quot;&amp;gt;Úkol: Navrhněte algoritmus a odhadněte složitost&lt;br /&gt;
* Hledání maxima&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Složitost v průměrném či nejhorším případě ==&lt;br /&gt;
* Počet vykonaných operací se může lišit podle podoby konkrétních dat.&lt;br /&gt;
* Třeba při řazení podle abecedy může být počet operací jiný pro ''téměř setříděná'' data a jiná pro data, která jsou úplně přeházená.&lt;br /&gt;
* Některé algoritmy mohou mít velmi dobré chování ve většině případů, ale pro nešťastně uspořádaná data mohou mít složitost větší. (Viz třeba známý řadící algoritmus ''QuickSort''.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Priklad&amp;quot;&amp;gt;&lt;br /&gt;
* Při cestě do školy vstanu tak, abych v průměrném případě dorazil včas. Pokud dojde k&amp;amp;nbsp;nehodě na silnici, může se stát, že se zpozdím. Ale je to málo pravděpodobné a vyrážet o&amp;amp;nbsp;hodinu dříve pro případ nehody by bylo nepraktické &amp;amp;mdash; řeším ''průměrnou'' délku cesty.&lt;br /&gt;
* Na druhou stranu pokud jdu k&amp;amp;nbsp;maturitě, čtvrthodinové zpoždění by znamenalo, že budu muset maturovat až na podzim a&amp;amp;nbsp;proto raději hodinu počkám &amp;amp;mdash; zajímá mě spíše délka cesty ''v&amp;amp;nbsp;nejhorším případě''.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Související pojmy ==&lt;br /&gt;
; Složitost problému&lt;br /&gt;
*Složitost nejlepšího algoritmu, který řeší daný problém.&lt;br /&gt;
*× složitost nejlepšího ''známého'' algoritmu.&lt;br /&gt;
&lt;br /&gt;
; Paměťová × časová složitost&lt;br /&gt;
&lt;br /&gt;
== Viz také ==&lt;br /&gt;
* [[Algoritmus]]&lt;br /&gt;
&lt;br /&gt;
== Zdroje ==&lt;br /&gt;
*[http://cs.wikipedia.org/wiki/Asymptotick%C3%A1_slo%C5%BEitost Wikipedia.org &amp;gt; Asymptotická složitost]&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/P%C5%99%C3%ADstup_proces%C5%AF_do_pam%C4%9Bti</id>
		<title>Přístup procesů do paměti</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/P%C5%99%C3%ADstup_proces%C5%AF_do_pam%C4%9Bti"/>
				<updated>2026-10-06T18:08:32Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: Oprava špatně zapsaného elementu tvrdá mezera (2x).&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]][[Category:Procesy]][[Category:Stránky s obrázky]]&lt;br /&gt;
&lt;br /&gt;
== Pravidla pro běh více procesů ==&lt;br /&gt;
* Proces nemůže a&amp;amp;nbsp;nesmí být ovlivněn činností jiných procesů.&lt;br /&gt;
* Programátor při psaní kódu nemusí řešit, kolik a&amp;amp;nbsp;jakých procesů v&amp;amp;nbsp;paměti bude.&lt;br /&gt;
* Každý proces funguje tak, jako by byl v&amp;amp;nbsp;počítači jediný.&lt;br /&gt;
* Fakt, že byl proces „uspán“ a&amp;amp;nbsp;mezitím běžely jiné procesy nesmí proces nijak poznat &amp;amp;mdash; veškerá data, která měl k&amp;amp;nbsp;dispozici, musí zůstat stejná.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Jak data ochránit? ==&lt;br /&gt;
; Obsah registrů procesoru &amp;amp;rarr; uloží se do paměti&lt;br /&gt;
* Co se týče obsahu registrů procesoru, je situace jednoduchá.&lt;br /&gt;
* Při změně kontextu („přepnutí procesu“) se obsah všech registrů (řádově jsou to stovky byte) uloží na vyhrazené místo do operační paměti.&lt;br /&gt;
* Při [[Plánování procesů | přepínání procesů]] se hodnota registrů procesoru aktualizuje tak, aby po opětovném „probuzení“ měl proces své hodnoty registrů, které si nastavil před „usnutím“.&lt;br /&gt;
&lt;br /&gt;
; Obsah operační paměti &amp;amp;rarr; musí zůstat&lt;br /&gt;
* Obsah operační paměti ale nemůžeme někam „zazálohovat“. Teoreticky by šla uložit na pevný disk, ale operační paměť má velkou kapacitu a&amp;amp;nbsp;ukládání tak velkého množství dat na disk by přepínání procesů nepřípustně zdrželo &amp;amp;mdash; nezapomeňte, že přepínání desítek procesů se musí stíhat tak rychle, aby si uživatel myslel, že všechny procesy běží zároveň. &lt;br /&gt;
* Data procesů v&amp;amp;nbsp;operační paměti tedy musí zůstat a&amp;amp;nbsp;musíme zajistit, aby žádný proces nemohl číst ani zasahovat oblast, která mu nepřísluší.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Postup při práci s&amp;amp;nbsp;pamětí ==&lt;br /&gt;
&lt;br /&gt;
; Řešení&lt;br /&gt;
* Každý proces se chová, jako by měl svou ''virtuální paměť'' jen pro sebe (množství je pro daný operační systém pevně dané, programátor se tedy o množství paměti nestará).&lt;br /&gt;
* Při práci s&amp;amp;nbsp;operační pamětí proces vždy odkazuje na adresu ve své ''virtuální paměti''.&lt;br /&gt;
&amp;lt;div class=&amp;quot;Poznamka&amp;quot;&amp;gt;Na schématu dále je ''virtuální paměť'' jednotlivých procesů znázorněna modrými sloupci. U&amp;amp;nbsp;každého sloupce je uvedeno číslo procesu (''PID'') procesu, jemuž tato virtuální paměť patří.&amp;lt;/div&amp;gt;&lt;br /&gt;
* Přístup do operační paměti nemůže proces řešit přímo, ale vždy musí využít služeb operačního systému.&lt;br /&gt;
&amp;lt;div class=&amp;quot;Varovani&amp;quot;&amp;gt;&lt;br /&gt;
Toto omezení je řešeno přímo na úrovni hardware procesoru: &lt;br /&gt;
* Procesor má při provádění instrukcí procesu informaci o&amp;amp;nbsp;tom, zda se jedná o&amp;amp;nbsp;běžný proces, nebo zda se jedná o&amp;amp;nbsp;systémový proces &amp;amp;mdash; součást jádra operačního systému. Podle toho procesor řeší požadavky na práci s&amp;amp;nbsp;operační pamětí odlišně. Proto žádný proces nemůže omylem ani záměrně tuto kontrolu obejít.&lt;br /&gt;
* Problém by mohl nastat jedině tehdy, kdy by operační systém při spouštění procesu špatně nastavil příznak a&amp;amp;nbsp;spustil běžný proces jako systémový.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Postup při alokaci paměti&lt;br /&gt;
* Proces zažádá operační systém o přidělení paměti. Používá přitom adresy v&amp;amp;nbsp;rámci virtuální paměti (VPFN &amp;amp;mdash; Virtual Page Frame Number).&lt;br /&gt;
* Operační systém si uloží informaci: &lt;br /&gt;
** který proces žádal (PID)&lt;br /&gt;
** jakou adresu (VPFN) ve virtuální paměti chce proces obsadit,&lt;br /&gt;
** kam data skutečně budou zapsána ve fyzické paměti (PFN &amp;amp;mdash; Page Frame Number).&lt;br /&gt;
&lt;br /&gt;
; Postup při čtení/zápisu z/do paměti&lt;br /&gt;
* Proces oznámí procesoru adresu VPFN, kterou chce použít (zapíše ji do odpovídajícího registru).&lt;br /&gt;
* Procesor dohledá v&amp;amp;nbsp;tabulce (kterou vytvořil operační systém) odpovídající PFN a&amp;amp;nbsp;vyzvedne/upraví data.&lt;br /&gt;
&lt;br /&gt;
== Schéma zápisu do paměti ==&lt;br /&gt;
&lt;br /&gt;
; Modré sloupce &amp;amp;mdash; virtuální paměť procesů&lt;br /&gt;
* Modré sloupce reprezentují virtuální operační paměť jednotlivých procesů.&lt;br /&gt;
* U&amp;amp;nbsp;každého sloupce je uvedeno číslo procesu (PID), kterému daná virtuální paměť patří.&lt;br /&gt;
&lt;br /&gt;
; Žlutý blok &amp;amp;mdash; skutečná operační paměť&lt;br /&gt;
* Do ní smí zapisovat pouze operační systém.&lt;br /&gt;
* Operační systém si v&amp;amp;nbsp;ní mimo jiné vede tabulku, pomocí které překládá požadavky procesů na práci s&amp;amp;nbsp;VPFN na skutečné adresy PFN.&lt;br /&gt;
* Některé paměťové bloky lze dokonce dočasně přesunout na disk (swappování) &amp;amp;mdash; před dalším použitím ale musí být přeneseny zpět do operační paměti.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;NaStred&amp;quot;&amp;gt;[[Image:pristup_procesu_do_pameti.png]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Swappování &amp;amp;mdash; co když se data do (fyzické) paměti nevlezou? ==&lt;br /&gt;
* V&amp;amp;nbsp;takovém případě je třeba data procesů, které právě neběží, odložit na pevný disk &amp;amp;mdash; to označujeme jako ''swappování''.&lt;br /&gt;
* Než budou procesy opět spuštěny, bude třeba data znovu načíst do operační paměti.&lt;br /&gt;
* Takto můžeme mít „uloženo v&amp;amp;nbsp;operační paměti“ více dat, než kolik je celková kapacita operační paměti.&lt;br /&gt;
&lt;br /&gt;
; Nevýhody swappování&lt;br /&gt;
* Výrazně zpomaluje přepínání procesů a&amp;amp;nbsp;tím i&amp;amp;nbsp;celkovou odezvu systému.&lt;br /&gt;
* Zabírá kapacitu pevného disku. &lt;br /&gt;
*: ''To je jeden z&amp;amp;nbsp;důvodů, proč si operační systémy obvykle část kapacity (obvykle 10&amp;amp;nbsp;%) pevného disku blokují.''&lt;br /&gt;
*: ''Může se vám tedy stát, že počítač odmítne vytvářet další soubory či přidávat data, i&amp;amp;nbsp;když na disku ještě zůstává třeba 8% volného místa.''&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/Bodovac%C3%AD_stupnice</id>
		<title>Bodovací stupnice</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/Bodovac%C3%AD_stupnice"/>
				<updated>2026-09-15T08:31:28Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: Mínus jsou &amp;lt;= 90/78/65/54, nikoli ostře menší.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:OA]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;Bodový zisk&amp;amp;nbsp;&amp;amp;nbsp; !! &amp;amp;nbsp;&amp;amp;nbsp;Známka&amp;amp;nbsp;&amp;amp;nbsp; !! &amp;amp;nbsp;&amp;amp;nbsp;Z&amp;amp;nbsp;toho mínus&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;ge; 85&amp;amp;nbsp;% || 1 || &amp;amp;le; 90&amp;amp;nbsp;%&amp;amp;nbsp;~&amp;amp;nbsp; 1-&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;ge; 73&amp;amp;nbsp;% || 2 || &amp;amp;le; 78&amp;amp;nbsp;%&amp;amp;nbsp;~&amp;amp;nbsp; 2-&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;ge; 60&amp;amp;nbsp;% || 3 || &amp;amp;le; 65&amp;amp;nbsp;%&amp;amp;nbsp;~&amp;amp;nbsp; 3-&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;ge; 50&amp;amp;nbsp;% || 4 || &amp;amp;le; 54&amp;amp;nbsp;%&amp;amp;nbsp;~&amp;amp;nbsp; 4-&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;lt; 50&amp;amp;nbsp;% || 5&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Poznamka&amp;quot;&amp;gt;&lt;br /&gt;
Pro účely '''uzavírání známek na konci čtvrtletí/pololetí/školního roku''' si vyučující vyhrazuje možnost upravit výsledné hodnocení v&amp;amp;nbsp;rozmezí +/-&amp;amp;nbsp;1&amp;amp;nbsp;% od hranice s&amp;amp;nbsp;přihlédnutím k výsledkům žáka během pololetí a ke struktuře známek (počet opravných testů, výsledky z&amp;amp;nbsp;ústního zkoušení, splněné a nesplněné domácí úkoly, účast v&amp;amp;nbsp;soutěžích, výsledek souhrnného testu,...).&lt;br /&gt;
&lt;br /&gt;
Pokud tedy máte známku například v&amp;amp;nbsp;rozsahu 84-86&amp;amp;nbsp;% a jedná se o výsledek na konci čtvrtletí/pololetí/školního roku, máte výsledek 1-2. &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/Distribuce_GNU/Linuxu</id>
		<title>Distribuce GNU/Linuxu</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/Distribuce_GNU/Linuxu"/>
				<updated>2026-09-14T11:47:49Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: /* Často používané distribuce */ Aktualizace a doplnění textu 2026.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]][[Category:Linux]]&lt;br /&gt;
&lt;br /&gt;
== Distribuce GNU/Linuxu ==&lt;br /&gt;
* Distribuce je balík software, který zahrnuje jádro operačního systému a další programy.&lt;br /&gt;
* Dohromady tvoří kompletní operační systém. &lt;br /&gt;
&lt;br /&gt;
* Jednoduše: distribuce Linuxu = jádro Linux + software + nástroje pro instalaci a správu.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Priklad&amp;quot;&amp;gt;&lt;br /&gt;
Představ si jádro operačního systému jako motor auta. Několik modelů aut běžně používá stejný motor, auta se ale jinak můžou velmi lišit. Dacia třeba využívá motory Renault, ale zbytek auta vypadá úplně jinak. &lt;br /&gt;
&lt;br /&gt;
Distribuce je hotové auto, do kterého můžeš nasednout a jet. Linux (kernel) je motor. &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Proč existují distribuce? ===&lt;br /&gt;
&lt;br /&gt;
* Cílem tvůrců distribucí je nabídnout uživateli hotový balíček, který si &amp;quot;prostě nainstaluješ a je to&amp;quot;.&lt;br /&gt;
* Jádro a programy jsou zahrnuty ve vhodně zvolených verzích tak, aby jádro a programy navzájem spolehlivě fungovaly.&lt;br /&gt;
&lt;br /&gt;
* Různé distribuce jsou určeny pro konkrétní účely, ale také zohledňují preference svých tvůrců: &lt;br /&gt;
** některé distribuce kladou důraz na svobodu software, &lt;br /&gt;
** jiné mohou být určeny pro konkrétní použití, &lt;br /&gt;
** nebo je cílem třeba podobnost s&amp;amp;nbsp;Windows pro usnadnění přechodu z&amp;amp;nbsp;Windows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Distribuce ve smyslu komunity vývojářů ===&lt;br /&gt;
&lt;br /&gt;
* V&amp;amp;nbsp;jiném kontextu se pojem „distribuce Linuxu“ může používat i pro komunitu lidí, která danou distribuci vyvíjí.&lt;br /&gt;
* Ve větě: ''„Distribuce Debian se rozhodla přejít na systemd.“'' chceme říci, že lidé, kteří vyvíjí distribuci Debian, se k&amp;amp;nbsp;tomu rozhodli. ''(Mimochodem: ''systemd'' je typ zavaděče operačního systému. To teď není důležité.)''&lt;br /&gt;
&lt;br /&gt;
== Rozdělení distribucí ==&lt;br /&gt;
&lt;br /&gt;
=== Uživatelsky × serverově orientované ===&lt;br /&gt;
* Liší se zejména ''délkou vývojového cyklu'' &amp;amp;mdash; to je doba, po které je uvedena nová verze distribuce.&lt;br /&gt;
&lt;br /&gt;
; Serverově orientované distribuce&lt;br /&gt;
* Důraz na stabilitu (minimum změn).&lt;br /&gt;
* Nová verze přichází obvykle cca po 3 letech (''délka vývojového cyklu'' 3 roky).&lt;br /&gt;
* Průběžně uvolňovány opravy chyb a&amp;amp;nbsp;bezpečnostní aktualizace, přechod na novou verzi aplikací obvykle až s&amp;amp;nbsp;novou verzí distribuce.&lt;br /&gt;
* Snaha o&amp;amp;nbsp;minimalizaci počtu nutných změn &amp;amp;mdash; každá změna znamená riziko zanesení chyb, omylů, problémů.&lt;br /&gt;
&lt;br /&gt;
; Uživatelsky orientované distribuce&lt;br /&gt;
* Snaha nabídnout uživateli co nejrychleji nové verze aplikací.&lt;br /&gt;
* Délka vývojového cyklu obvykle cca půl roku.&lt;br /&gt;
* Větší množství aktualizací, větší pravděpodobnost nekonzistencí, ale aktuálnější verze knihoven a&amp;amp;nbsp;programů.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Poznamka&amp;quot;&amp;gt;&lt;br /&gt;
; Můžu pracovat na serverově orientované distribuci???&lt;br /&gt;
&lt;br /&gt;
I&amp;amp;nbsp;uživatelsky orientovaná distribuce lze použít pro instalaci na server a&amp;amp;nbsp;bude to fungovat. Jen bude vyžadovat časté aktualizace a&amp;amp;nbsp;je zde větší riziko, že se při aktualizaci serveru pokazí.&lt;br /&gt;
&lt;br /&gt;
Stejně tak serverově orientované distribuce často nabízí plnohodnotnou práci domácímu uživateli. Jen se musí smířit s&amp;amp;nbsp;tím, že bude používat o&amp;amp;nbsp;něco starší verze programů. Ale zase nemusí řešit časté aktualizace a&amp;amp;nbsp;přeinstalace.&lt;br /&gt;
&lt;br /&gt;
Já osobně jsem třeba pro běžnou práci dlouho používal serverově orientovaný Debian a&amp;amp;nbsp;byl jsem zcela spokojen. ;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Komunitní × vyvíjené firmou ===&lt;br /&gt;
* Podle toho, jestli vývoj zastřešuje firma, nebo komunita uživatelů (skupina nezávislých vývojářů).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Podle zaměření ===&lt;br /&gt;
* Zaměřené na:&lt;br /&gt;
** vzdělávání a školské prostředí,&lt;br /&gt;
** grafiku a zpracování videa,&lt;br /&gt;
** začátečníky,&lt;br /&gt;
** testování bezpečnosti systémů,&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
== Často používané distribuce ==&lt;br /&gt;
Distribucí GNU/Linuxu je opravdu hodně. Na druhou stranu běžně používaných distribucí je podstatně méně. Uvedeme si tedy nejběžnější z&amp;amp;nbsp;nich. &lt;br /&gt;
&lt;br /&gt;
; Debian&lt;br /&gt;
* Serverově orientovaná distribuce, udržovaná komunitou uživatelů.&lt;br /&gt;
* Využívá balíčkovací systém APT (balíčky DEB). &lt;br /&gt;
* Jedna z&amp;amp;nbsp;nejznámnějších. Z&amp;amp;nbsp;ní vychází mnohé další distribuce.&lt;br /&gt;
&lt;br /&gt;
; Ubuntu&lt;br /&gt;
* Uživatelsky orientovaná, vývoj zastřešuje firma Cannonical.&lt;br /&gt;
* Vychází z&amp;amp;nbsp;Debianu. Z&amp;amp;nbsp;Ubuntu dále vychází další distribuce.&lt;br /&gt;
* Snaží se být zahrnout pod jednu platformu servery, klientské počítače, cloud i zařízení pro IoT.&lt;br /&gt;
* Varianta Ubuntu Touch je určena pro mobilní telefony.&lt;br /&gt;
&lt;br /&gt;
; Linux Mint&lt;br /&gt;
* Vychází z&amp;amp;nbsp;Ubuntu, ale používá jiná grafická prostředí.&lt;br /&gt;
&lt;br /&gt;
; Red Hat Enterprise Linux (RHEL)&lt;br /&gt;
* Serverově orientovaná, udržuje a vyvíjí firma Red Hat, využívá balíčkovací systém RPM a správce balíčků DNF (dříve jeho předchůdce YUM).&lt;br /&gt;
* Nejspíš nejznámnější distribuce, určená zejména pro korporátní prostředí.&lt;br /&gt;
* Placená, zahrnuje i podporu a další nástroje Red Hatu.&lt;br /&gt;
* Jedna z největších vývojových poboček Red Hatu sídlí v Brně.&lt;br /&gt;
&lt;br /&gt;
; CentOS&lt;br /&gt;
* Dříve binární ekvivalent distribuce Red Hat, pouze bez loga Red Hat.&lt;br /&gt;
* Dnes distribuce spravovaná firmou Red Hat.&lt;br /&gt;
* Serverově orientovaná, ale rychlejší vývoj než Red Hat Enterprise Linux (RHEL).&lt;br /&gt;
* Pokud chcete používat „distribuci Red Hat zdarma“, stahujte CentOS (případně pro vývojové a výukové účely stáhněte RedHat Linux z&amp;amp;nbsp;[https://developers.redhat.com Developers.RedHat.com].&lt;br /&gt;
&lt;br /&gt;
; Fedora&lt;br /&gt;
* Uživatelsky orientovaná distribuce udržovaná firmou Red Hat.&lt;br /&gt;
* Slouží zároveň pro ověření nástrojů předtím než jsou nasazeny v RHEL a CentOS.&lt;br /&gt;
&lt;br /&gt;
; ArchLinux&lt;br /&gt;
* Distribuce založená na tradičním linuxovém jádru s&amp;amp;nbsp;minimem změn.&lt;br /&gt;
* Systém rolling-release.&lt;br /&gt;
&lt;br /&gt;
; [https://alpinelinux.org/about/ Alpine Linux]&lt;br /&gt;
* Minimalistická distribuce.&lt;br /&gt;
* Využívá se často jako základ kontejnerů pro Docker.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pro představu se můžete na Wikipedii podívat na [https://upload.wikimedia.org/wikipedia/commons/1/1b/Linux_Distribution_Timeline.svg velký přehled distribucí] (asi ani tam ale nebudou všechny).&lt;br /&gt;
&lt;br /&gt;
== Vývojový cyklus distribuce ==&lt;br /&gt;
* Co vlastně tvůrci distribuce musí dělat?&lt;br /&gt;
# Vybrat vhodnou verzi Linuxu (kernelu)&lt;br /&gt;
#* Přiměřeně aktuální a&amp;amp;nbsp;přiměřeně „stabilní“&lt;br /&gt;
# Vybrat vhodné aplikace&lt;br /&gt;
#* Zvolit vhodnou verzi vybraných aplikací&lt;br /&gt;
# Uzavřeme přidávání nového SW&lt;br /&gt;
# Otestovat výsledek&lt;br /&gt;
#* Opravit problémy, případně vyřešit kolize&lt;br /&gt;
# Nahrát vše na servery (repozitáře)&lt;br /&gt;
# Publikovat novou verzi distribuce&lt;br /&gt;
# A&amp;amp;nbsp;začít od začátku... ;)&lt;br /&gt;
#* Ve skutečnosti už během testování nejspíš vybíráme vhodné verze software pro další verzi distribuce&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Související pojmy ==&lt;br /&gt;
=== LTS ===&lt;br /&gt;
* Verze s prodlouženou podporou&lt;br /&gt;
* Typicky dostupná u uživatelsky orientovaných distribucí.&lt;br /&gt;
* Délka podpory dané verze pak bývá cca 5&amp;amp;nbsp;let.&lt;br /&gt;
&lt;br /&gt;
=== Rolling-release ===&lt;br /&gt;
* Nevydávají se nové verze, postupnými aktualizacemi se software průběžně obměňuje.&lt;br /&gt;
&lt;br /&gt;
=== Architektura procesoru ===&lt;br /&gt;
* amd64... Intel kompatibilní 64 bitové procesory (Intel, AMD,...)&lt;br /&gt;
* i386, i686... Intel kompatibilní 32 bitové procesory (Intel, AMD,...). Dnes už spíše pro účely podpory starších zařízení.&lt;br /&gt;
* arm64,... procesory jiných architektur než Intel (ARM,...)&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=== Live CD ===&lt;br /&gt;
* CD, ze kterého lze nastartovat operační systém, aniž bychom ho museli instalovat na počítač.&lt;br /&gt;
* U některých distribucí nabízí tuto možnost i standardní instalační CD.&lt;br /&gt;
&lt;br /&gt;
=== Síťová instalace ===&lt;br /&gt;
* Instalační médium, které obsahuje jen nezbytné balíčky pro spuštění instalace (obvykle cca 300&amp;amp;nbsp;MB).&lt;br /&gt;
* Ostatní balíčky se stáhnou až během instalace dle potřeby.&lt;br /&gt;
* Vyžaduje přístup k&amp;amp;nbsp;síti během instalace. (Může být problém s&amp;amp;nbsp;chybějícími ovladači bezdrátových síťových karet.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Související stránky ==&lt;br /&gt;
* [[Software pro GNU/Linux]], [[Instalace software v GNU/Linuxu]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Další zdroje ==&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Linux_distribution Wikipedia.org &amp;amp;rarr; Distribuce GNU/Linuxu]&lt;br /&gt;
* [http://www.abclinuxu.cz/clanky/zaciname-s-linuxem-vyber-distribuce AbcLinuxu.cz &amp;amp;mdash; Distribuce GNU/Linuxu]&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/Tvorba_software</id>
		<title>Tvorba software</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/Tvorba_software"/>
				<updated>2026-07-23T14:56:17Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: /* Fáze projektu */ Doplněno více o nasazení a údržbě.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]][[Category:Programování]][[Category:Softwarové inženýrství]]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
== Tvorba SW zahrnuje postupy ==&lt;br /&gt;
; Analýza&lt;br /&gt;
* Profese: analytik&lt;br /&gt;
* Vstup: slovní popis zadání; myšlenka, co je třeba udělat&lt;br /&gt;
* Výsledek: [[Algoritmus#Problém|problém]] &amp;amp;mdash; formálně popsaný (matematicky přesný) popis zadání.&lt;br /&gt;
Slovní popis zadání formalizujeme tak, abychom získali problém.&lt;br /&gt;
Vstupem je slovní zadání, výstupem je matematicky přesný popis problému. &lt;br /&gt;
&lt;br /&gt;
; Algoritmizace&lt;br /&gt;
* Profese: typicky analytik + kodér (může být dále rozděleno)&lt;br /&gt;
* Vstup: Popis problému&lt;br /&gt;
* Výsledek: [[Algoritmus|algoritmus (obecný postup řešení)]]&lt;br /&gt;
Návrh/nalezení algoritmu pro daný problém.&lt;br /&gt;
&lt;br /&gt;
; Programování/kódování&lt;br /&gt;
* Profese: Kodér, tester&lt;br /&gt;
* Vstup: Popis algoritmu.&lt;br /&gt;
* Výsledek: Zdrojový kód.&lt;br /&gt;
Zápis algoritmu v konkrétním programovacím jazyce.&lt;br /&gt;
&lt;br /&gt;
Viz také: [[Algoritmus]].&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fáze projektu ==&lt;br /&gt;
&lt;br /&gt;
=== Formulace slovního zadání ===&lt;br /&gt;
* Slovní formulace toho, co se má vyřešit.&lt;br /&gt;
* Rozsah několika vět až odstavců.&lt;br /&gt;
* Z&amp;amp;nbsp;tohoto popisu vychází analýza, zadání se při ní dále zpřesňuje.&lt;br /&gt;
* Formuluje zákazník nebo jiný zadavatel.&lt;br /&gt;
* Požadavky:&lt;br /&gt;
** Jednoznačnost popisu.&lt;br /&gt;
** Přesný výčet funkcí, které má systém plnit. S&amp;amp;nbsp;jakými dalšími navazujícími systémy má interagovat, jací uživatelé s&amp;amp;nbsp;ním budou pracovat,...&lt;br /&gt;
** Ověřitelnost požadavků zadání (!)&lt;br /&gt;
&lt;br /&gt;
=== Analýza ===&lt;br /&gt;
; Charakteristika:&lt;br /&gt;
* Vědní disciplína: Softwarové inženýrství&lt;br /&gt;
* Profese: analytik + tester&lt;br /&gt;
* Výsledek: formalizované zadání (teoreticky ideálně až formální popis [[Algoritmus#Problém|problému]])&lt;br /&gt;
; Řešíme:&lt;br /&gt;
* Jaká data potřebujeme?&lt;br /&gt;
* Jaké operace nad daty provádíme?&lt;br /&gt;
* Které skupiny (typy) uživatelů budou se systémem interagovat?&lt;br /&gt;
* Jaké výstupy budeme po systému požadovat?&lt;br /&gt;
* S&amp;amp;nbsp;jakými dalšími systémy má náš systém spolupracovat?&lt;br /&gt;
* Jaká legislativa se týká naší oblasti a jaká zákonná omezení proto musíme zohlednit?&lt;br /&gt;
; Testujeme:&lt;br /&gt;
* Soulad se slovním zadáním.&lt;br /&gt;
* Pokrytí všech funkcí slovního zadání.&lt;br /&gt;
* Soulad jednotlivých částí: &lt;br /&gt;
** Nejsou v&amp;amp;nbsp;datech položky, se kterými nepracuje žádná operace?&lt;br /&gt;
** Mají všechny operace potřebná data v&amp;amp;nbsp;datech?&lt;br /&gt;
** Odpovídá popis operací charakteru zpracovávaných dat (datový slovník)?&lt;br /&gt;
** Odpovídá popis dat formátu, v&amp;amp;nbsp;jakém nám budou navazující systémy poskytovat data?&lt;br /&gt;
&amp;lt;div class=&amp;quot;Poznamka&amp;quot;&amp;gt;&lt;br /&gt;
V&amp;amp;nbsp;rámci analýzy řešíme věci a akce z reálného světa, tomu odpovídá i terminologie. Minimálně používáme specializované pojmy ze světa IT, výstupům by měl rozumět i zákazník.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;Varovani&amp;quot;&amp;gt;&lt;br /&gt;
Zatím se '''NE'''bavíme o:&lt;br /&gt;
* softwarovém či hardwarovém způsobu řešení, &lt;br /&gt;
* algoritmech,&lt;br /&gt;
* způsobu ukládání dat,...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Návrh ===&lt;br /&gt;
*Charakteristika:&lt;br /&gt;
**Vědní disciplína: Softwarové inženýrství + Informatika&lt;br /&gt;
**Profese: analytik + kodér + tester&lt;br /&gt;
**Výsledek: Návrh struktury tříd + algoritmus&lt;br /&gt;
* Řešíme:&lt;br /&gt;
** Jak rozdělit jednotlivé části řešení mezi třídy a metody (strukturu tříd, přiřazení atributů a metod). Které entity reálného světa budou popsány samostatnými třídami, které budou figurovat jako atributy jiných tříd.&lt;br /&gt;
** Dále jaké pomocné třídy je potřeba zavést pro realizaci programu (okna, tlačítka, posluchače,...).&lt;br /&gt;
** [[Algoritmus]] (obecný postup) řešení jednotlivých dílčích úkolů.&lt;br /&gt;
* Podle typu úlohy převládá svou složitostí buď:&lt;br /&gt;
** Návrh struktury &amp;amp;mdash; skladové systémy, evidence zaměstnanců apod., kde algoritmy bývají poměrně triviální a je hlavně třeba správně postihnout požadované chování a vztahy mezi entitami.&lt;br /&gt;
** Algoritmizace &amp;amp;mdash; vědecké výpočty, úlohy hromadného zpracování dat, kde pracujeme často s jednoduchými daty bez vnitřní struktury, ale je třeba je zpracovat ve velkém množství efektivně.&lt;br /&gt;
&lt;br /&gt;
=== Implementace ===&lt;br /&gt;
*Charakteristika:&lt;br /&gt;
**Vědní disciplína: Programování&lt;br /&gt;
**Profese: kodér + tester&lt;br /&gt;
**Výsledek: Zdrojový kód&lt;br /&gt;
*Píšeme kód, který realizuje algoritmus.&lt;br /&gt;
&lt;br /&gt;
=== Nasazení ===&lt;br /&gt;
* Instalujeme u zákazníka (deployment).&lt;br /&gt;
* Zaškolíme obsluhu.&lt;br /&gt;
* Sběr zpětné vazby.&lt;br /&gt;
&lt;br /&gt;
=== Údržba ===&lt;br /&gt;
* Aktualizace, záplaty, opravy.&lt;br /&gt;
* Úpravy v důsledku změn požadavků či legislativy.&lt;br /&gt;
* Migrace dat mezi verzemi.&lt;br /&gt;
&lt;br /&gt;
=== Vyřazení z provozu ===&lt;br /&gt;
* Vytvořený systém je vyřazen z&amp;amp;nbsp;provozu a&amp;amp;nbsp;dále se již nepoužívá.&lt;br /&gt;
&lt;br /&gt;
== Testování ==&lt;br /&gt;
* Testování probíhá ve všech fázích počínaje analýzou a poté při každé úpravě.&lt;br /&gt;
* V&amp;amp;nbsp;počátečních fázích (analýza, návrh) testujeme soulad jednotlivých částí dokumentace a návaznosti mezi jednotlivými fázemi.&lt;br /&gt;
* Ve fázích implementace a údržby už probíhá klasické testování kódu (black-box testy, uživatelské testování,...), ale i zde zároveň testujeme soulad s návrhovou dokumentací a požadavky analýzy, případně aktualizujeme dokumenty vzniklé v&amp;amp;nbsp;předchozích fázích, pokud se mezitím požadavky upravily.&lt;br /&gt;
* Testování proto neuvádíme jako samostatnou fázi. Jedná se o souvislý proces, který se prolíná všemi fázemi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Profese ==&lt;br /&gt;
* Ne v&amp;amp;nbsp;každém týmu se vyskytují všechny role.&lt;br /&gt;
* Některé role může zastřešovat jedna osoba.&lt;br /&gt;
* Názvy a&amp;amp;nbsp;konkrétní náplň práce rolí se v&amp;amp;nbsp;jednotlivých firmách může lišit.&lt;br /&gt;
&lt;br /&gt;
* Každý se může svými vlastnostmi více hodit do některých rolí a&amp;amp;nbsp;pro některé může mít předpokladů méně.&lt;br /&gt;
&lt;br /&gt;
; Informatik&lt;br /&gt;
*vědec&lt;br /&gt;
*zabývá se algoritmy (například: řadícími algoritmy,...)&lt;br /&gt;
*převody algoritmů, vztahy mezi nimi&lt;br /&gt;
*složitost algoritmů,...&lt;br /&gt;
* Dále dělíme na:&lt;br /&gt;
** Základní výzkum: snaží se objevit souvislosti mezi jevy, prozkoumat pravidla.&lt;br /&gt;
** Aplikovaný výzkum: aplikuje nejnovější vědecké poznatky na praktické úlohy s&amp;amp;nbsp;využitím v&amp;amp;nbsp;průmyslu a&amp;amp;nbsp;firmách.&lt;br /&gt;
&lt;br /&gt;
; Softwarový inženýr&lt;br /&gt;
* Odborník zaměřený na tvorbu rozsáhlých aplikací.&lt;br /&gt;
* Zná doporučení pro práci v týmu, účel a smysl jednotlivých fází vývojového cyklu.&lt;br /&gt;
* Analyzuje zadání, navrhuje řešení, zná metodiky vývoje software.&lt;br /&gt;
&lt;br /&gt;
; Analytik&lt;br /&gt;
* Musí být odborník v oblasti, ve které má výsledný produkt fungovat.  &lt;br /&gt;
*: ''Například při tvorbě účetní aplikace musí rozumět účetnictví.''&lt;br /&gt;
* Komunikuje se zákazníkem a specifikuje požadavky.&lt;br /&gt;
* Kontroluje správnost produktu v rámci dané cílové domény (oboru).&lt;br /&gt;
&lt;br /&gt;
; (Softwarový) architekt&lt;br /&gt;
* Navrhuje rozdělení aplikace na mikroslužby, nasazení na servery.&lt;br /&gt;
* Volí vhodné technologie: programovací jazyk, frameworky, databázové systémy, konfiguraci serverů, kontejnerizaci, ...&lt;br /&gt;
* Navrhuje strukturu API.&lt;br /&gt;
* Jedná se o zkušeného vývojáře s praxí.&lt;br /&gt;
* V řešení zohledňuje požadavky na: výkon, škálovatelnost (budoucí rozšiřitelnost), bezpečnost, snadnost údržby.&lt;br /&gt;
* Komunikuje s vývojáři a kontroluje dodržení architektonických požadavků.&lt;br /&gt;
&lt;br /&gt;
; Kodér ~ programátor&lt;br /&gt;
* Aplikuje obecné algoritmy na konkrétní úlohu.&lt;br /&gt;
* Zapisuje algoritmus v programovacím jazyce.&lt;br /&gt;
* Tyto úkoly často postupně přebírají AI agenti.&lt;br /&gt;
&lt;br /&gt;
; Deployment/DevOps&lt;br /&gt;
* Zabývá se nasazením hotového systému na servery.&lt;br /&gt;
* Řeší kontejnerizaci, konfiguraci serverů.&lt;br /&gt;
* Automatizaci nasazení (CI/CD).&lt;br /&gt;
&lt;br /&gt;
; Tester&lt;br /&gt;
* Po '''celou''' dobu projektu ověřuje správnost vytvořených materiálů.&lt;br /&gt;
* Podle povahy cílové aplikace se zaměřuje na různé oblasti:&lt;br /&gt;
** výkonové testy u aplikací kritických na výkon&lt;br /&gt;
** penetrační testování u aplikací kritických na bezpečnost.&lt;br /&gt;
** ...&lt;br /&gt;
* Připravuje testy.&lt;br /&gt;
* Zabývá se automatizací testování.&lt;br /&gt;
&lt;br /&gt;
; Projektový manažer&lt;br /&gt;
* Dohlíží na činnost týmu, kontroluje termíny.&lt;br /&gt;
* Komunikuje se zákazníkem a&amp;amp;nbsp;předává požadavky týmu.&lt;br /&gt;
&lt;br /&gt;
; UX specialista&lt;br /&gt;
* Navrhuje uživatelské rozhraní aplikace/produktu tak, aby bylo uživatelsky přívětivé.&lt;br /&gt;
&lt;br /&gt;
; Grafik&lt;br /&gt;
* Vytváří vizuální podobu produktu.&lt;br /&gt;
&lt;br /&gt;
; Kreativec&lt;br /&gt;
* Přináší nové pohledy na věc. Jeho úkolem primárně není řešit technické provedení.&lt;br /&gt;
&lt;br /&gt;
== Proč začínat na papíře/obrázku? ==&lt;br /&gt;
*Složité věci řešíme první!&lt;br /&gt;
*Vymyslet strukturu tříd je složité.&lt;br /&gt;
*Psát spoustu klíčových slov je triviální a zdržuje.&lt;br /&gt;
*V počátcích zdržuje i klikání v ArgoUML či jiném modeláři.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pojmy ==&lt;br /&gt;
*CASE&lt;br /&gt;
**Computer-Aided Software Engineering&lt;br /&gt;
**Programy pro podporu návrhu software&lt;br /&gt;
*metodika&lt;br /&gt;
**jaké pracovníky využít&lt;br /&gt;
**jaké činnosti vykonat&lt;br /&gt;
**jaké nástroje použít&lt;br /&gt;
**jaké produkty vyrobit&lt;br /&gt;
* Softwarové inženýrství&lt;br /&gt;
** Vědecká disciplína, zabývá se metodikou a postupy efektivní práce a spolupráce v týmu při tvorbě SW. &lt;br /&gt;
** Zahrnuje i návrh grafického rozhraní a jeho zákonitosti.&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/Tvorba_software</id>
		<title>Tvorba software</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/Tvorba_software"/>
				<updated>2026-07-23T14:54:03Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: /* Profese */ Přidán architekt.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]][[Category:Programování]][[Category:Softwarové inženýrství]]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
== Tvorba SW zahrnuje postupy ==&lt;br /&gt;
; Analýza&lt;br /&gt;
* Profese: analytik&lt;br /&gt;
* Vstup: slovní popis zadání; myšlenka, co je třeba udělat&lt;br /&gt;
* Výsledek: [[Algoritmus#Problém|problém]] &amp;amp;mdash; formálně popsaný (matematicky přesný) popis zadání.&lt;br /&gt;
Slovní popis zadání formalizujeme tak, abychom získali problém.&lt;br /&gt;
Vstupem je slovní zadání, výstupem je matematicky přesný popis problému. &lt;br /&gt;
&lt;br /&gt;
; Algoritmizace&lt;br /&gt;
* Profese: typicky analytik + kodér (může být dále rozděleno)&lt;br /&gt;
* Vstup: Popis problému&lt;br /&gt;
* Výsledek: [[Algoritmus|algoritmus (obecný postup řešení)]]&lt;br /&gt;
Návrh/nalezení algoritmu pro daný problém.&lt;br /&gt;
&lt;br /&gt;
; Programování/kódování&lt;br /&gt;
* Profese: Kodér, tester&lt;br /&gt;
* Vstup: Popis algoritmu.&lt;br /&gt;
* Výsledek: Zdrojový kód.&lt;br /&gt;
Zápis algoritmu v konkrétním programovacím jazyce.&lt;br /&gt;
&lt;br /&gt;
Viz také: [[Algoritmus]].&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fáze projektu ==&lt;br /&gt;
&lt;br /&gt;
=== Formulace slovního zadání ===&lt;br /&gt;
* Slovní formulace toho, co se má vyřešit.&lt;br /&gt;
* Rozsah několika vět až odstavců.&lt;br /&gt;
* Z&amp;amp;nbsp;tohoto popisu vychází analýza, zadání se při ní dále zpřesňuje.&lt;br /&gt;
* Formuluje zákazník nebo jiný zadavatel.&lt;br /&gt;
* Požadavky:&lt;br /&gt;
** Jednoznačnost popisu.&lt;br /&gt;
** Přesný výčet funkcí, které má systém plnit. S&amp;amp;nbsp;jakými dalšími navazujícími systémy má interagovat, jací uživatelé s&amp;amp;nbsp;ním budou pracovat,...&lt;br /&gt;
** Ověřitelnost požadavků zadání (!)&lt;br /&gt;
&lt;br /&gt;
=== Analýza ===&lt;br /&gt;
; Charakteristika:&lt;br /&gt;
* Vědní disciplína: Softwarové inženýrství&lt;br /&gt;
* Profese: analytik + tester&lt;br /&gt;
* Výsledek: formalizované zadání (teoreticky ideálně až formální popis [[Algoritmus#Problém|problému]])&lt;br /&gt;
; Řešíme:&lt;br /&gt;
* Jaká data potřebujeme?&lt;br /&gt;
* Jaké operace nad daty provádíme?&lt;br /&gt;
* Které skupiny (typy) uživatelů budou se systémem interagovat?&lt;br /&gt;
* Jaké výstupy budeme po systému požadovat?&lt;br /&gt;
* S&amp;amp;nbsp;jakými dalšími systémy má náš systém spolupracovat?&lt;br /&gt;
* Jaká legislativa se týká naší oblasti a jaká zákonná omezení proto musíme zohlednit?&lt;br /&gt;
; Testujeme:&lt;br /&gt;
* Soulad se slovním zadáním.&lt;br /&gt;
* Pokrytí všech funkcí slovního zadání.&lt;br /&gt;
* Soulad jednotlivých částí: &lt;br /&gt;
** Nejsou v&amp;amp;nbsp;datech položky, se kterými nepracuje žádná operace?&lt;br /&gt;
** Mají všechny operace potřebná data v&amp;amp;nbsp;datech?&lt;br /&gt;
** Odpovídá popis operací charakteru zpracovávaných dat (datový slovník)?&lt;br /&gt;
** Odpovídá popis dat formátu, v&amp;amp;nbsp;jakém nám budou navazující systémy poskytovat data?&lt;br /&gt;
&amp;lt;div class=&amp;quot;Poznamka&amp;quot;&amp;gt;&lt;br /&gt;
V&amp;amp;nbsp;rámci analýzy řešíme věci a akce z reálného světa, tomu odpovídá i terminologie. Minimálně používáme specializované pojmy ze světa IT, výstupům by měl rozumět i zákazník.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;Varovani&amp;quot;&amp;gt;&lt;br /&gt;
Zatím se '''NE'''bavíme o:&lt;br /&gt;
* softwarovém či hardwarovém způsobu řešení, &lt;br /&gt;
* algoritmech,&lt;br /&gt;
* způsobu ukládání dat,...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Návrh ===&lt;br /&gt;
*Charakteristika:&lt;br /&gt;
**Vědní disciplína: Softwarové inženýrství + Informatika&lt;br /&gt;
**Profese: analytik + kodér + tester&lt;br /&gt;
**Výsledek: Návrh struktury tříd + algoritmus&lt;br /&gt;
* Řešíme:&lt;br /&gt;
** Jak rozdělit jednotlivé části řešení mezi třídy a metody (strukturu tříd, přiřazení atributů a metod). Které entity reálného světa budou popsány samostatnými třídami, které budou figurovat jako atributy jiných tříd.&lt;br /&gt;
** Dále jaké pomocné třídy je potřeba zavést pro realizaci programu (okna, tlačítka, posluchače,...).&lt;br /&gt;
** [[Algoritmus]] (obecný postup) řešení jednotlivých dílčích úkolů.&lt;br /&gt;
* Podle typu úlohy převládá svou složitostí buď:&lt;br /&gt;
** Návrh struktury &amp;amp;mdash; skladové systémy, evidence zaměstnanců apod., kde algoritmy bývají poměrně triviální a je hlavně třeba správně postihnout požadované chování a vztahy mezi entitami.&lt;br /&gt;
** Algoritmizace &amp;amp;mdash; vědecké výpočty, úlohy hromadného zpracování dat, kde pracujeme často s jednoduchými daty bez vnitřní struktury, ale je třeba je zpracovat ve velkém množství efektivně.&lt;br /&gt;
&lt;br /&gt;
=== Implementace ===&lt;br /&gt;
*Charakteristika:&lt;br /&gt;
**Vědní disciplína: Programování&lt;br /&gt;
**Profese: kodér + tester&lt;br /&gt;
**Výsledek: Zdrojový kód&lt;br /&gt;
*Píšeme kód, který realizuje algoritmus.&lt;br /&gt;
&lt;br /&gt;
=== Nasazení ===&lt;br /&gt;
* Instalujeme u zákazníka.&lt;br /&gt;
* Zaškolíme obsluhu.&lt;br /&gt;
&lt;br /&gt;
=== Údržba ===&lt;br /&gt;
*aktualizace&lt;br /&gt;
*úpravy&lt;br /&gt;
&lt;br /&gt;
=== Vyřazení z provozu ===&lt;br /&gt;
* Vytvořený systém je vyřazen z&amp;amp;nbsp;provozu a&amp;amp;nbsp;dále se již nepoužívá.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testování ==&lt;br /&gt;
* Testování probíhá ve všech fázích počínaje analýzou a poté při každé úpravě.&lt;br /&gt;
* V&amp;amp;nbsp;počátečních fázích (analýza, návrh) testujeme soulad jednotlivých částí dokumentace a návaznosti mezi jednotlivými fázemi.&lt;br /&gt;
* Ve fázích implementace a údržby už probíhá klasické testování kódu (black-box testy, uživatelské testování,...), ale i zde zároveň testujeme soulad s návrhovou dokumentací a požadavky analýzy, případně aktualizujeme dokumenty vzniklé v&amp;amp;nbsp;předchozích fázích, pokud se mezitím požadavky upravily.&lt;br /&gt;
* Testování proto neuvádíme jako samostatnou fázi. Jedná se o souvislý proces, který se prolíná všemi fázemi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Profese ==&lt;br /&gt;
* Ne v&amp;amp;nbsp;každém týmu se vyskytují všechny role.&lt;br /&gt;
* Některé role může zastřešovat jedna osoba.&lt;br /&gt;
* Názvy a&amp;amp;nbsp;konkrétní náplň práce rolí se v&amp;amp;nbsp;jednotlivých firmách může lišit.&lt;br /&gt;
&lt;br /&gt;
* Každý se může svými vlastnostmi více hodit do některých rolí a&amp;amp;nbsp;pro některé může mít předpokladů méně.&lt;br /&gt;
&lt;br /&gt;
; Informatik&lt;br /&gt;
*vědec&lt;br /&gt;
*zabývá se algoritmy (například: řadícími algoritmy,...)&lt;br /&gt;
*převody algoritmů, vztahy mezi nimi&lt;br /&gt;
*složitost algoritmů,...&lt;br /&gt;
* Dále dělíme na:&lt;br /&gt;
** Základní výzkum: snaží se objevit souvislosti mezi jevy, prozkoumat pravidla.&lt;br /&gt;
** Aplikovaný výzkum: aplikuje nejnovější vědecké poznatky na praktické úlohy s&amp;amp;nbsp;využitím v&amp;amp;nbsp;průmyslu a&amp;amp;nbsp;firmách.&lt;br /&gt;
&lt;br /&gt;
; Softwarový inženýr&lt;br /&gt;
* Odborník zaměřený na tvorbu rozsáhlých aplikací.&lt;br /&gt;
* Zná doporučení pro práci v týmu, účel a smysl jednotlivých fází vývojového cyklu.&lt;br /&gt;
* Analyzuje zadání, navrhuje řešení, zná metodiky vývoje software.&lt;br /&gt;
&lt;br /&gt;
; Analytik&lt;br /&gt;
* Musí být odborník v oblasti, ve které má výsledný produkt fungovat.  &lt;br /&gt;
*: ''Například při tvorbě účetní aplikace musí rozumět účetnictví.''&lt;br /&gt;
* Komunikuje se zákazníkem a specifikuje požadavky.&lt;br /&gt;
* Kontroluje správnost produktu v rámci dané cílové domény (oboru).&lt;br /&gt;
&lt;br /&gt;
; (Softwarový) architekt&lt;br /&gt;
* Navrhuje rozdělení aplikace na mikroslužby, nasazení na servery.&lt;br /&gt;
* Volí vhodné technologie: programovací jazyk, frameworky, databázové systémy, konfiguraci serverů, kontejnerizaci, ...&lt;br /&gt;
* Navrhuje strukturu API.&lt;br /&gt;
* Jedná se o zkušeného vývojáře s praxí.&lt;br /&gt;
* V řešení zohledňuje požadavky na: výkon, škálovatelnost (budoucí rozšiřitelnost), bezpečnost, snadnost údržby.&lt;br /&gt;
* Komunikuje s vývojáři a kontroluje dodržení architektonických požadavků.&lt;br /&gt;
&lt;br /&gt;
; Kodér ~ programátor&lt;br /&gt;
* Aplikuje obecné algoritmy na konkrétní úlohu.&lt;br /&gt;
* Zapisuje algoritmus v programovacím jazyce.&lt;br /&gt;
* Tyto úkoly často postupně přebírají AI agenti.&lt;br /&gt;
&lt;br /&gt;
; Deployment/DevOps&lt;br /&gt;
* Zabývá se nasazením hotového systému na servery.&lt;br /&gt;
* Řeší kontejnerizaci, konfiguraci serverů.&lt;br /&gt;
* Automatizaci nasazení (CI/CD).&lt;br /&gt;
&lt;br /&gt;
; Tester&lt;br /&gt;
* Po '''celou''' dobu projektu ověřuje správnost vytvořených materiálů.&lt;br /&gt;
* Podle povahy cílové aplikace se zaměřuje na různé oblasti:&lt;br /&gt;
** výkonové testy u aplikací kritických na výkon&lt;br /&gt;
** penetrační testování u aplikací kritických na bezpečnost.&lt;br /&gt;
** ...&lt;br /&gt;
* Připravuje testy.&lt;br /&gt;
* Zabývá se automatizací testování.&lt;br /&gt;
&lt;br /&gt;
; Projektový manažer&lt;br /&gt;
* Dohlíží na činnost týmu, kontroluje termíny.&lt;br /&gt;
* Komunikuje se zákazníkem a&amp;amp;nbsp;předává požadavky týmu.&lt;br /&gt;
&lt;br /&gt;
; UX specialista&lt;br /&gt;
* Navrhuje uživatelské rozhraní aplikace/produktu tak, aby bylo uživatelsky přívětivé.&lt;br /&gt;
&lt;br /&gt;
; Grafik&lt;br /&gt;
* Vytváří vizuální podobu produktu.&lt;br /&gt;
&lt;br /&gt;
; Kreativec&lt;br /&gt;
* Přináší nové pohledy na věc. Jeho úkolem primárně není řešit technické provedení.&lt;br /&gt;
&lt;br /&gt;
== Proč začínat na papíře/obrázku? ==&lt;br /&gt;
*Složité věci řešíme první!&lt;br /&gt;
*Vymyslet strukturu tříd je složité.&lt;br /&gt;
*Psát spoustu klíčových slov je triviální a zdržuje.&lt;br /&gt;
*V počátcích zdržuje i klikání v ArgoUML či jiném modeláři.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pojmy ==&lt;br /&gt;
*CASE&lt;br /&gt;
**Computer-Aided Software Engineering&lt;br /&gt;
**Programy pro podporu návrhu software&lt;br /&gt;
*metodika&lt;br /&gt;
**jaké pracovníky využít&lt;br /&gt;
**jaké činnosti vykonat&lt;br /&gt;
**jaké nástroje použít&lt;br /&gt;
**jaké produkty vyrobit&lt;br /&gt;
* Softwarové inženýrství&lt;br /&gt;
** Vědecká disciplína, zabývá se metodikou a postupy efektivní práce a spolupráce v týmu při tvorbě SW. &lt;br /&gt;
** Zahrnuje i návrh grafického rozhraní a jeho zákonitosti.&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/Tvorba_software</id>
		<title>Tvorba software</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/Tvorba_software"/>
				<updated>2026-07-23T14:48:29Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: /* Profese */ Upřesnění profesí, přepracován &amp;quot;softwarový inženýr&amp;quot;.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]][[Category:Programování]][[Category:Softwarové inženýrství]]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
== Tvorba SW zahrnuje postupy ==&lt;br /&gt;
; Analýza&lt;br /&gt;
* Profese: analytik&lt;br /&gt;
* Vstup: slovní popis zadání; myšlenka, co je třeba udělat&lt;br /&gt;
* Výsledek: [[Algoritmus#Problém|problém]] &amp;amp;mdash; formálně popsaný (matematicky přesný) popis zadání.&lt;br /&gt;
Slovní popis zadání formalizujeme tak, abychom získali problém.&lt;br /&gt;
Vstupem je slovní zadání, výstupem je matematicky přesný popis problému. &lt;br /&gt;
&lt;br /&gt;
; Algoritmizace&lt;br /&gt;
* Profese: typicky analytik + kodér (může být dále rozděleno)&lt;br /&gt;
* Vstup: Popis problému&lt;br /&gt;
* Výsledek: [[Algoritmus|algoritmus (obecný postup řešení)]]&lt;br /&gt;
Návrh/nalezení algoritmu pro daný problém.&lt;br /&gt;
&lt;br /&gt;
; Programování/kódování&lt;br /&gt;
* Profese: Kodér, tester&lt;br /&gt;
* Vstup: Popis algoritmu.&lt;br /&gt;
* Výsledek: Zdrojový kód.&lt;br /&gt;
Zápis algoritmu v konkrétním programovacím jazyce.&lt;br /&gt;
&lt;br /&gt;
Viz také: [[Algoritmus]].&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fáze projektu ==&lt;br /&gt;
&lt;br /&gt;
=== Formulace slovního zadání ===&lt;br /&gt;
* Slovní formulace toho, co se má vyřešit.&lt;br /&gt;
* Rozsah několika vět až odstavců.&lt;br /&gt;
* Z&amp;amp;nbsp;tohoto popisu vychází analýza, zadání se při ní dále zpřesňuje.&lt;br /&gt;
* Formuluje zákazník nebo jiný zadavatel.&lt;br /&gt;
* Požadavky:&lt;br /&gt;
** Jednoznačnost popisu.&lt;br /&gt;
** Přesný výčet funkcí, které má systém plnit. S&amp;amp;nbsp;jakými dalšími navazujícími systémy má interagovat, jací uživatelé s&amp;amp;nbsp;ním budou pracovat,...&lt;br /&gt;
** Ověřitelnost požadavků zadání (!)&lt;br /&gt;
&lt;br /&gt;
=== Analýza ===&lt;br /&gt;
; Charakteristika:&lt;br /&gt;
* Vědní disciplína: Softwarové inženýrství&lt;br /&gt;
* Profese: analytik + tester&lt;br /&gt;
* Výsledek: formalizované zadání (teoreticky ideálně až formální popis [[Algoritmus#Problém|problému]])&lt;br /&gt;
; Řešíme:&lt;br /&gt;
* Jaká data potřebujeme?&lt;br /&gt;
* Jaké operace nad daty provádíme?&lt;br /&gt;
* Které skupiny (typy) uživatelů budou se systémem interagovat?&lt;br /&gt;
* Jaké výstupy budeme po systému požadovat?&lt;br /&gt;
* S&amp;amp;nbsp;jakými dalšími systémy má náš systém spolupracovat?&lt;br /&gt;
* Jaká legislativa se týká naší oblasti a jaká zákonná omezení proto musíme zohlednit?&lt;br /&gt;
; Testujeme:&lt;br /&gt;
* Soulad se slovním zadáním.&lt;br /&gt;
* Pokrytí všech funkcí slovního zadání.&lt;br /&gt;
* Soulad jednotlivých částí: &lt;br /&gt;
** Nejsou v&amp;amp;nbsp;datech položky, se kterými nepracuje žádná operace?&lt;br /&gt;
** Mají všechny operace potřebná data v&amp;amp;nbsp;datech?&lt;br /&gt;
** Odpovídá popis operací charakteru zpracovávaných dat (datový slovník)?&lt;br /&gt;
** Odpovídá popis dat formátu, v&amp;amp;nbsp;jakém nám budou navazující systémy poskytovat data?&lt;br /&gt;
&amp;lt;div class=&amp;quot;Poznamka&amp;quot;&amp;gt;&lt;br /&gt;
V&amp;amp;nbsp;rámci analýzy řešíme věci a akce z reálného světa, tomu odpovídá i terminologie. Minimálně používáme specializované pojmy ze světa IT, výstupům by měl rozumět i zákazník.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;Varovani&amp;quot;&amp;gt;&lt;br /&gt;
Zatím se '''NE'''bavíme o:&lt;br /&gt;
* softwarovém či hardwarovém způsobu řešení, &lt;br /&gt;
* algoritmech,&lt;br /&gt;
* způsobu ukládání dat,...&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Návrh ===&lt;br /&gt;
*Charakteristika:&lt;br /&gt;
**Vědní disciplína: Softwarové inženýrství + Informatika&lt;br /&gt;
**Profese: analytik + kodér + tester&lt;br /&gt;
**Výsledek: Návrh struktury tříd + algoritmus&lt;br /&gt;
* Řešíme:&lt;br /&gt;
** Jak rozdělit jednotlivé části řešení mezi třídy a metody (strukturu tříd, přiřazení atributů a metod). Které entity reálného světa budou popsány samostatnými třídami, které budou figurovat jako atributy jiných tříd.&lt;br /&gt;
** Dále jaké pomocné třídy je potřeba zavést pro realizaci programu (okna, tlačítka, posluchače,...).&lt;br /&gt;
** [[Algoritmus]] (obecný postup) řešení jednotlivých dílčích úkolů.&lt;br /&gt;
* Podle typu úlohy převládá svou složitostí buď:&lt;br /&gt;
** Návrh struktury &amp;amp;mdash; skladové systémy, evidence zaměstnanců apod., kde algoritmy bývají poměrně triviální a je hlavně třeba správně postihnout požadované chování a vztahy mezi entitami.&lt;br /&gt;
** Algoritmizace &amp;amp;mdash; vědecké výpočty, úlohy hromadného zpracování dat, kde pracujeme často s jednoduchými daty bez vnitřní struktury, ale je třeba je zpracovat ve velkém množství efektivně.&lt;br /&gt;
&lt;br /&gt;
=== Implementace ===&lt;br /&gt;
*Charakteristika:&lt;br /&gt;
**Vědní disciplína: Programování&lt;br /&gt;
**Profese: kodér + tester&lt;br /&gt;
**Výsledek: Zdrojový kód&lt;br /&gt;
*Píšeme kód, který realizuje algoritmus.&lt;br /&gt;
&lt;br /&gt;
=== Nasazení ===&lt;br /&gt;
* Instalujeme u zákazníka.&lt;br /&gt;
* Zaškolíme obsluhu.&lt;br /&gt;
&lt;br /&gt;
=== Údržba ===&lt;br /&gt;
*aktualizace&lt;br /&gt;
*úpravy&lt;br /&gt;
&lt;br /&gt;
=== Vyřazení z provozu ===&lt;br /&gt;
* Vytvořený systém je vyřazen z&amp;amp;nbsp;provozu a&amp;amp;nbsp;dále se již nepoužívá.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testování ==&lt;br /&gt;
* Testování probíhá ve všech fázích počínaje analýzou a poté při každé úpravě.&lt;br /&gt;
* V&amp;amp;nbsp;počátečních fázích (analýza, návrh) testujeme soulad jednotlivých částí dokumentace a návaznosti mezi jednotlivými fázemi.&lt;br /&gt;
* Ve fázích implementace a údržby už probíhá klasické testování kódu (black-box testy, uživatelské testování,...), ale i zde zároveň testujeme soulad s návrhovou dokumentací a požadavky analýzy, případně aktualizujeme dokumenty vzniklé v&amp;amp;nbsp;předchozích fázích, pokud se mezitím požadavky upravily.&lt;br /&gt;
* Testování proto neuvádíme jako samostatnou fázi. Jedná se o souvislý proces, který se prolíná všemi fázemi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Profese ==&lt;br /&gt;
* Ne v&amp;amp;nbsp;každém týmu se vyskytují všechny role.&lt;br /&gt;
* Některé role může zastřešovat jedna osoba.&lt;br /&gt;
* Názvy a&amp;amp;nbsp;konkrétní náplň práce rolí se v&amp;amp;nbsp;jednotlivých firmách může lišit.&lt;br /&gt;
&lt;br /&gt;
* Každý se může svými vlastnostmi více hodit do některých rolí a&amp;amp;nbsp;pro některé může mít předpokladů méně.&lt;br /&gt;
&lt;br /&gt;
; Informatik&lt;br /&gt;
*vědec&lt;br /&gt;
*zabývá se algoritmy (například: řadícími algoritmy,...)&lt;br /&gt;
*převody algoritmů, vztahy mezi nimi&lt;br /&gt;
*složitost algoritmů,...&lt;br /&gt;
* Dále dělíme na:&lt;br /&gt;
** Základní výzkum: snaží se objevit souvislosti mezi jevy, prozkoumat pravidla.&lt;br /&gt;
** Aplikovaný výzkum: aplikuje nejnovější vědecké poznatky na praktické úlohy s&amp;amp;nbsp;využitím v&amp;amp;nbsp;průmyslu a&amp;amp;nbsp;firmách.&lt;br /&gt;
&lt;br /&gt;
; Softwarový inženýr&lt;br /&gt;
* Odborník zaměřený na tvorbu rozsáhlých aplikací.&lt;br /&gt;
* Zná doporučení pro práci v týmu, účel a smysl jednotlivých fází vývojového cyklu.&lt;br /&gt;
* Analyzuje zadání, navrhuje řešení, zná metodiky vývoje software.&lt;br /&gt;
&lt;br /&gt;
; Analytik&lt;br /&gt;
* Musí být odborník v oblasti, ve které má výsledný produkt fungovat.  &lt;br /&gt;
*: ''Například při tvorbě účetní aplikace musí rozumět účetnictví.''&lt;br /&gt;
* Komunikuje se zákazníkem a specifikuje požadavky.&lt;br /&gt;
* Kontroluje správnost produktu v rámci dané cílové domény (oboru).&lt;br /&gt;
&lt;br /&gt;
; Kodér ~ programátor&lt;br /&gt;
* Aplikuje obecné algoritmy na konkrétní úlohu.&lt;br /&gt;
* Zapisuje algoritmus v programovacím jazyce.&lt;br /&gt;
* Tyto úkoly často postupně přebírají AI agenti.&lt;br /&gt;
&lt;br /&gt;
; DevOps&lt;br /&gt;
* Zabývá se nasazením hotového systému na servery, konfigurací.&lt;br /&gt;
* Řeší kontejnerizaci, automatizaci nasazení (CI/CD).&lt;br /&gt;
&lt;br /&gt;
; Tester&lt;br /&gt;
* Po '''celou''' dobu projektu ověřuje správnost vytvořených materiálů.&lt;br /&gt;
* Podle povahy cílové aplikace se zaměřuje na různé oblasti:&lt;br /&gt;
** výkonové testy u aplikací kritických na výkon&lt;br /&gt;
** penetrační testování u aplikací kritických na bezpečnost.&lt;br /&gt;
** ...&lt;br /&gt;
* Připravuje testy.&lt;br /&gt;
* Zabývá se automatizací testování.&lt;br /&gt;
&lt;br /&gt;
; Projektový manažer&lt;br /&gt;
* Dohlíží na činnost týmu, kontroluje termíny.&lt;br /&gt;
* Komunikuje se zákazníkem a&amp;amp;nbsp;předává požadavky týmu.&lt;br /&gt;
&lt;br /&gt;
; UX specialista&lt;br /&gt;
* Navrhuje uživatelské rozhraní aplikace/produktu tak, aby bylo uživatelsky přívětivé.&lt;br /&gt;
&lt;br /&gt;
; Grafik&lt;br /&gt;
* Vytváří vizuální podobu produktu.&lt;br /&gt;
&lt;br /&gt;
; Kreativec&lt;br /&gt;
* Přináší nové pohledy na věc. Jeho úkolem primárně není řešit technické provedení.&lt;br /&gt;
&lt;br /&gt;
== Proč začínat na papíře/obrázku? ==&lt;br /&gt;
*Složité věci řešíme první!&lt;br /&gt;
*Vymyslet strukturu tříd je složité.&lt;br /&gt;
*Psát spoustu klíčových slov je triviální a zdržuje.&lt;br /&gt;
*V počátcích zdržuje i klikání v ArgoUML či jiném modeláři.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pojmy ==&lt;br /&gt;
*CASE&lt;br /&gt;
**Computer-Aided Software Engineering&lt;br /&gt;
**Programy pro podporu návrhu software&lt;br /&gt;
*metodika&lt;br /&gt;
**jaké pracovníky využít&lt;br /&gt;
**jaké činnosti vykonat&lt;br /&gt;
**jaké nástroje použít&lt;br /&gt;
**jaké produkty vyrobit&lt;br /&gt;
* Softwarové inženýrství&lt;br /&gt;
** Vědecká disciplína, zabývá se metodikou a postupy efektivní práce a spolupráce v týmu při tvorbě SW. &lt;br /&gt;
** Zahrnuje i návrh grafického rozhraní a jeho zákonitosti.&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/Bodovac%C3%AD_stupnice</id>
		<title>Bodovací stupnice</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/Bodovac%C3%AD_stupnice"/>
				<updated>2026-06-22T10:28:28Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: Oprava - aktualizace rozsahu při nerozhodné známce.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:OA]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;Bodový zisk&amp;amp;nbsp;&amp;amp;nbsp; !! &amp;amp;nbsp;&amp;amp;nbsp;Známka&amp;amp;nbsp;&amp;amp;nbsp; !! &amp;amp;nbsp;&amp;amp;nbsp;Z&amp;amp;nbsp;toho mínus&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;ge; 85&amp;amp;nbsp;% || 1 || &amp;amp;lt; 90&amp;amp;nbsp;%&amp;amp;nbsp;~&amp;amp;nbsp; 1-&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;ge; 73&amp;amp;nbsp;% || 2 || &amp;amp;lt; 78&amp;amp;nbsp;%&amp;amp;nbsp;~&amp;amp;nbsp; 2-&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;ge; 60&amp;amp;nbsp;% || 3 || &amp;amp;lt; 65&amp;amp;nbsp;%&amp;amp;nbsp;~&amp;amp;nbsp; 3-&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;ge; 50&amp;amp;nbsp;% || 4 || &amp;amp;lt; 54&amp;amp;nbsp;%&amp;amp;nbsp;~&amp;amp;nbsp; 4-&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;lt; 50&amp;amp;nbsp;% || 5&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Poznamka&amp;quot;&amp;gt;&lt;br /&gt;
Pro účely '''uzavírání známek na konci čtvrtletí/pololetí/školního roku''' si vyučující vyhrazuje možnost upravit výsledné hodnocení v&amp;amp;nbsp;rozmezí +/-&amp;amp;nbsp;1&amp;amp;nbsp;% od hranice s&amp;amp;nbsp;přihlédnutím k výsledkům žáka během pololetí a ke struktuře známek (počet opravných testů, výsledky z&amp;amp;nbsp;ústního zkoušení, splněné a nesplněné domácí úkoly, účast v&amp;amp;nbsp;soutěžích, výsledek souhrnného testu,...).&lt;br /&gt;
&lt;br /&gt;
Pokud tedy máte známku například v&amp;amp;nbsp;rozsahu 84-86&amp;amp;nbsp;% a jedná se o výsledek na konci čtvrtletí/pololetí/školního roku, máte výsledek 1-2. &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/Bodovac%C3%AD_stupnice</id>
		<title>Bodovací stupnice</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/Bodovac%C3%AD_stupnice"/>
				<updated>2026-06-22T10:22:52Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: Úprava pro školní rok 2026/27.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:OA]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &amp;amp;nbsp;&amp;amp;nbsp;Bodový zisk&amp;amp;nbsp;&amp;amp;nbsp; !! &amp;amp;nbsp;&amp;amp;nbsp;Známka&amp;amp;nbsp;&amp;amp;nbsp; !! &amp;amp;nbsp;&amp;amp;nbsp;Z&amp;amp;nbsp;toho mínus&amp;amp;nbsp;&amp;amp;nbsp;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;ge; 85&amp;amp;nbsp;% || 1 || &amp;amp;lt; 90&amp;amp;nbsp;%&amp;amp;nbsp;~&amp;amp;nbsp; 1-&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;ge; 73&amp;amp;nbsp;% || 2 || &amp;amp;lt; 78&amp;amp;nbsp;%&amp;amp;nbsp;~&amp;amp;nbsp; 2-&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;ge; 60&amp;amp;nbsp;% || 3 || &amp;amp;lt; 65&amp;amp;nbsp;%&amp;amp;nbsp;~&amp;amp;nbsp; 3-&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;ge; 50&amp;amp;nbsp;% || 4 || &amp;amp;lt; 54&amp;amp;nbsp;%&amp;amp;nbsp;~&amp;amp;nbsp; 4-&lt;br /&gt;
|-&lt;br /&gt;
| &amp;amp;lt; 50&amp;amp;nbsp;% || 5&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Poznamka&amp;quot;&amp;gt;&lt;br /&gt;
Pro účely '''uzavírání známek na konci čtvrtletí/pololetí/školního roku''' si vyučující vyhrazuje možnost upravit výsledné hodnocení v&amp;amp;nbsp;rozmezí +/-&amp;amp;nbsp;1&amp;amp;nbsp;% od hranice s&amp;amp;nbsp;přihlédnutím k výsledkům žáka během pololetí a ke struktuře známek (počet opravných testů, výsledky z&amp;amp;nbsp;ústního zkoušení, splněné a nesplněné domácí úkoly, účast v&amp;amp;nbsp;soutěžích, výsledek souhrnného testu,...).&lt;br /&gt;
&lt;br /&gt;
Pokud tedy máte známku například v&amp;amp;nbsp;rozsahu 74-76&amp;amp;nbsp;% a jedná se o výsledek na konci čtvrtletí/pololetí/školního roku, máte výsledek 2-3. &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/Flutter:_ListView</id>
		<title>Flutter: ListView</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/Flutter:_ListView"/>
				<updated>2026-06-03T05:07:20Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: /* ListTile: položka seznamu */ Přidána možnost aktivní ikony (IconButton).&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]][[Category:Programování]][[Category:Flutter]]&lt;br /&gt;
&lt;br /&gt;
== ListView ==&lt;br /&gt;
* &amp;lt;code&amp;gt;ListView&amp;lt;/code&amp;gt; slouží pro zobrazení dynamického seznamu položek, kterým lze skrolovat.&lt;br /&gt;
* Lze ho využít například pro zobrazení položek ze seznamu či pro položky, které přidáváme postupně.&lt;br /&gt;
&lt;br /&gt;
== Příklad zobrazení seznamu ==&lt;br /&gt;
* Pro zobrazení seznamu &amp;lt;code&amp;gt;seznam&amp;lt;/code&amp;gt; můžeme použít ListView:&lt;br /&gt;
  List&amp;lt;Element&amp;gt; seznam = ...;&lt;br /&gt;
&lt;br /&gt;
  Expanded(&lt;br /&gt;
    child: ListView.builder(&lt;br /&gt;
      itemCount: _seznam.length,&lt;br /&gt;
      itemBuilder: (context, index) {&lt;br /&gt;
        return ListTile(&lt;br /&gt;
            title: Text('${_seznam[index].nazev}'),&lt;br /&gt;
            subtitle: Text('${_seznam[index].popis}'),&lt;br /&gt;
            trailing: IconButton(&lt;br /&gt;
              icon: const Icon(Icons.delete, color: Colors.red),&lt;br /&gt;
              onPressed: () =&amp;gt; _methodToDeleteItem(index),&lt;br /&gt;
              tooltip: 'Smazat položku',&lt;br /&gt;
            ),&lt;br /&gt;
        );&lt;br /&gt;
      },&lt;br /&gt;
    ),&lt;br /&gt;
  ),&lt;br /&gt;
&lt;br /&gt;
== Vytvoření ListView ==&lt;br /&gt;
&lt;br /&gt;
=== ListView.builder() ===&lt;br /&gt;
* Používá se pro delší nebo dynamické seznamy (nejčastější varianta).&lt;br /&gt;
* Vytváří položky až když jsou potřeba (lepší výkon)&lt;br /&gt;
&lt;br /&gt;
 ListView.builder(&lt;br /&gt;
   itemCount: 10,&lt;br /&gt;
   itemBuilder: (context, index) {&lt;br /&gt;
     return ListTile(&lt;br /&gt;
       title: Text('Položka $index'),&lt;br /&gt;
     );&lt;br /&gt;
   },&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
=== ListView(children: []) ===&lt;br /&gt;
* Vhodné pro krátké statické seznamy &amp;amp;mdash; nelze přidávat položky.&lt;br /&gt;
&lt;br /&gt;
 ListView(&lt;br /&gt;
   children: [&lt;br /&gt;
     ListTile(title: Text('Položka 1')),&lt;br /&gt;
     ListTile(title: Text('Položka 2')),&lt;br /&gt;
     ListTile(title: Text('Položka 3')),&lt;br /&gt;
   ],&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ListTile: položka seznamu ==&lt;br /&gt;
&lt;br /&gt;
* Jednu položku dynamického seznamu reprezentuje widget &amp;lt;code&amp;gt;ListTile&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Vlastnosti &amp;lt;code&amp;gt;ListTile&amp;lt;/code&amp;gt;:&lt;br /&gt;
* &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; – hlavní text (nadpis položky)&lt;br /&gt;
* &amp;lt;code&amp;gt;subtitle&amp;lt;/code&amp;gt; – doplňující popis položky&lt;br /&gt;
* &amp;lt;code&amp;gt;leading&amp;lt;/code&amp;gt; – ikona vlevo (může být &amp;lt;code&amp;gt;Icon&amp;lt;/code&amp;gt; nebo &amp;lt;code&amp;gt;IconButton&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;trailing&amp;lt;/code&amp;gt; – ikona vpravo (opět může být aktivní)&lt;br /&gt;
* &amp;lt;code&amp;gt;onTap&amp;lt;/code&amp;gt; – reakce na kliknutí na položku&lt;br /&gt;
&lt;br /&gt;
; Příklad použití:&lt;br /&gt;
&lt;br /&gt;
 ListTile(&lt;br /&gt;
   leading: Icon(Icons.person),&lt;br /&gt;
   title: Text('Karel Dvořák'),&lt;br /&gt;
   subtitle: Text('místnost: 33'),&lt;br /&gt;
   trailing: IconButton(&lt;br /&gt;
     icon: const Icon(Icons.delete, color: Colors.red),&lt;br /&gt;
     onPressed: () =&amp;gt; _reakceNaIkonu(index),&lt;br /&gt;
     tooltip: 'Nápověda pro ikonku'&lt;br /&gt;
   ),&lt;br /&gt;
   onTap: () {&lt;br /&gt;
     _reakceNaKlik;&lt;br /&gt;
   },&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
== Související stránky ==&lt;br /&gt;
* [[Flutter: Základní widgety]]&lt;br /&gt;
* [[Flutter: Kostra aplikace]]&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/Flutter:_ListView</id>
		<title>Flutter: ListView</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/Flutter:_ListView"/>
				<updated>2026-05-25T17:25:03Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: /* Příklad zobrazení seznamu */ Přidána ikonka pro mazání položky.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]][[Category:Programování]][[Category:Flutter]]&lt;br /&gt;
&lt;br /&gt;
== ListView ==&lt;br /&gt;
* &amp;lt;code&amp;gt;ListView&amp;lt;/code&amp;gt; slouží pro zobrazení dynamického seznamu položek, kterým lze skrolovat.&lt;br /&gt;
* Lze ho využít například pro zobrazení položek ze seznamu či pro položky, které přidáváme postupně.&lt;br /&gt;
&lt;br /&gt;
== Příklad zobrazení seznamu ==&lt;br /&gt;
* Pro zobrazení seznamu &amp;lt;code&amp;gt;seznam&amp;lt;/code&amp;gt; můžeme použít ListView:&lt;br /&gt;
  List&amp;lt;Element&amp;gt; seznam = ...;&lt;br /&gt;
&lt;br /&gt;
  Expanded(&lt;br /&gt;
    child: ListView.builder(&lt;br /&gt;
      itemCount: _seznam.length,&lt;br /&gt;
      itemBuilder: (context, index) {&lt;br /&gt;
        return ListTile(&lt;br /&gt;
            title: Text('${_seznam[index].nazev}'),&lt;br /&gt;
            subtitle: Text('${_seznam[index].popis}'),&lt;br /&gt;
            trailing: IconButton(&lt;br /&gt;
              icon: const Icon(Icons.delete, color: Colors.red),&lt;br /&gt;
              onPressed: () =&amp;gt; _methodToDeleteItem(index),&lt;br /&gt;
              tooltip: 'Smazat položku',&lt;br /&gt;
            ),&lt;br /&gt;
        );&lt;br /&gt;
      },&lt;br /&gt;
    ),&lt;br /&gt;
  ),&lt;br /&gt;
&lt;br /&gt;
== Vytvoření ListView ==&lt;br /&gt;
&lt;br /&gt;
=== ListView.builder() ===&lt;br /&gt;
* Používá se pro delší nebo dynamické seznamy (nejčastější varianta).&lt;br /&gt;
* Vytváří položky až když jsou potřeba (lepší výkon)&lt;br /&gt;
&lt;br /&gt;
 ListView.builder(&lt;br /&gt;
   itemCount: 10,&lt;br /&gt;
   itemBuilder: (context, index) {&lt;br /&gt;
     return ListTile(&lt;br /&gt;
       title: Text('Položka $index'),&lt;br /&gt;
     );&lt;br /&gt;
   },&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
=== ListView(children: []) ===&lt;br /&gt;
* Vhodné pro krátké statické seznamy &amp;amp;mdash; nelze přidávat položky.&lt;br /&gt;
&lt;br /&gt;
 ListView(&lt;br /&gt;
   children: [&lt;br /&gt;
     ListTile(title: Text('Položka 1')),&lt;br /&gt;
     ListTile(title: Text('Položka 2')),&lt;br /&gt;
     ListTile(title: Text('Položka 3')),&lt;br /&gt;
   ],&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ListTile: položka seznamu ==&lt;br /&gt;
&lt;br /&gt;
* Jednu položku dynamického seznamu reprezentuje widget &amp;lt;code&amp;gt;ListTile&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Vlastnosti &amp;lt;code&amp;gt;ListTile&amp;lt;/code&amp;gt;:&lt;br /&gt;
* &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; – hlavní text (nadpis položky)&lt;br /&gt;
* &amp;lt;code&amp;gt;subtitle&amp;lt;/code&amp;gt; – doplňující popis položky&lt;br /&gt;
* &amp;lt;code&amp;gt;leading&amp;lt;/code&amp;gt; – ikona vlevo&lt;br /&gt;
* &amp;lt;code&amp;gt;trailing&amp;lt;/code&amp;gt; – ikona vpravo&lt;br /&gt;
* &amp;lt;code&amp;gt;onTap&amp;lt;/code&amp;gt; – reakce na kliknutí&lt;br /&gt;
&lt;br /&gt;
; Příklad použití:&lt;br /&gt;
&lt;br /&gt;
 ListTile(&lt;br /&gt;
   leading: Icon(Icons.person),&lt;br /&gt;
   title: Text('Karel Dvořák'),&lt;br /&gt;
   subtitle: Text('místnost: 33'),&lt;br /&gt;
   trailing: Icon(Icons.arrow_forward),&lt;br /&gt;
   onTap: () {&lt;br /&gt;
     _reakceNaKlik;&lt;br /&gt;
   },&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Související stránky ==&lt;br /&gt;
* [[Flutter: Základní widgety]]&lt;br /&gt;
* [[Flutter: Kostra aplikace]]&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/Protokol_HTTP</id>
		<title>Protokol HTTP</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/Protokol_HTTP"/>
				<updated>2026-05-14T12:36:55Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: /* Úkol: Odeslání požadavku ručně */ Oprava znění požadavku: HTTP/1.1 místo &amp;quot;HTTP 1.1&amp;quot;.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Internet]][[Category:CRI]][[Category:Sítě]]&lt;br /&gt;
&lt;br /&gt;
== Protokol HTTP  ==&lt;br /&gt;
* Protokol HTTP popisuje postup klienta a serveru při stahování obsahu webových stránek.&lt;br /&gt;
* Klientem je v&amp;amp;nbsp;tomto případě internetový prohlížeč uživatele.&lt;br /&gt;
* Serverem je serverová aplikace Apache, nginx, IIS či jiná, která naslouchá požadavkům a&amp;amp;nbsp;jako odpověď poskytuje klientům obsah webových stránek.&lt;br /&gt;
&lt;br /&gt;
* Protokol HTTP je ''[[Protokoly#Stavové a bezestavové protokoly|bezestavový]]''. Každý požadavek se řeší zcela nezávisle na předchozích požadavcích.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Chování klienta a serveru ==&lt;br /&gt;
&lt;br /&gt;
=== Příprava na stažení webové stránky ===&lt;br /&gt;
# Uživatel zadá adresu do adresního řádku prohlížeče.&lt;br /&gt;
# Pro navázání spojení se serverem je třeba získat IP adresu serveru.&lt;br /&gt;
# Prohlížeč proto osloví DNS server a&amp;amp;nbsp;přeloží doménové jméno na IP adresu (například '''&amp;lt;code&amp;gt;www.oauh.cz&amp;lt;/code&amp;gt; &amp;amp;rarr; &amp;lt;code&amp;gt;212.111.4.142&amp;lt;/code&amp;gt;''').&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Poznamka&amp;quot;&amp;gt;Tato komunikace ještě přímo nesouvisí s protokolem HTTP, využíváme zde [[Protokoly aplikační vrstvy#DNS|Protokoly aplikační vrstvy]].&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== HTTP: Odeslání příkazu a&amp;amp;nbsp;přijetí odpovědi ===&lt;br /&gt;
# Prohlížeč naváže spojení se serverem pomocí IP adresy (využije služeb protokolu TCP).&lt;br /&gt;
# Prohlížeč pošle příkazy, které požaduje provést&lt;br /&gt;
#: Příklad: &amp;lt;code&amp;gt;GET nazev_stranky.htm HTTP/1.1&amp;lt;/code&amp;gt;&lt;br /&gt;
# K&amp;amp;nbsp;požadavku může připojit ještě další informace: ''hlavičky protokolu HTTP''. Jejich počet je volitelný.&lt;br /&gt;
# Některé hlavičky mohou být povinné (například hlavička &amp;lt;code&amp;gt;Host&amp;lt;/code&amp;gt; v&amp;amp;nbsp;protokolu HTTP 1.1).&lt;br /&gt;
# Požadavek končí prázdným řádkem.&lt;br /&gt;
&lt;br /&gt;
=== Zpracování požadavku: dynamické stránky ===&lt;br /&gt;
* Pokud se jedná o statickou webovou stránku, server pouze vyhledá správný soubor a&amp;amp;nbsp;odešle jeho obsah.&lt;br /&gt;
* Pokud jsou ale v&amp;amp;nbsp;obsahu stránky použity skriptovací jazyky PHP, ASP.net, Python či další, musí server nejprve zpracovat veškeré příkazy a&amp;amp;nbsp;teprve výsledný kód se odešle jako odpověď.&lt;br /&gt;
* Toto se netýká skriptů zpracovávaných na straně klienta (v&amp;amp;nbsp;prohlížeči) &amp;amp;mdash; dnes typicky JavaScript. Tyto skripty se odesílají spolu s&amp;amp;nbsp;kódem stránky a&amp;amp;nbsp;jejich zpracování provádí až prohlížeč na počítači klienta.&lt;br /&gt;
&lt;br /&gt;
=== HTTP: Odpověď serveru ===&lt;br /&gt;
# Jako odpověď server vrátí verzi protokolu, stavový kód a&amp;amp;nbsp;textový popis stavu.&lt;br /&gt;
#* Příklad: &amp;lt;code&amp;gt;HTTP/1.1 200 OK&amp;lt;/code&amp;gt; ... požadavek skončil bez chyby&lt;br /&gt;
#* Příklad: &amp;lt;code&amp;gt;HTTP/1.1 404 Page Not Found&amp;lt;/code&amp;gt; ... požadovaný soubor na serveru nebyl nalezen.&lt;br /&gt;
# Následují [[#Hlavičky HTTP|hlavičky]] odpovědi. (Počet je volitelný.)&lt;br /&gt;
# Poté server připojí prázdný řádek a&amp;amp;nbsp;data souboru, který byl požadován.&lt;br /&gt;
# Přijetím odpovědi komunikace končí.&lt;br /&gt;
# Protože je protokol bezstavový, může server zapomenout veškeré informace. Příští spojení bude zcela nezávislé na tomto.&lt;br /&gt;
# Prohlížeč následně zobrazí stránku podle popisu v jazyce HTML&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Poznamka&amp;quot;&amp;gt;Protokol HTTP verze 1.1 umožňuje po ukončení komunikace (po přijetí odpovědi) ihned poslat další požadavek bez ukončení spojení. Server tedy spojení neuzavírá ihned po odeslání odpovědi, ale až s&amp;amp;nbsp;nějakým zpožděním.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Obrázky a jiné objekty ve stránkách ===&lt;br /&gt;
* Pokud je v popisu stránky obrázek či jiný vložený objekt, prohlížeč naváže nové spojení a vyžádá si stažení souboru s obrázkem (či jiným objektem).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Metody HTTP ==&lt;br /&gt;
* Protokol HTTP používá k&amp;amp;nbsp;popisu požadavků tzv. ''metody'' (methods).&lt;br /&gt;
* Můžeme si je představit jako textové „příkazy“, které posíláme serveru. &lt;br /&gt;
* Je tedy docela snadné si komunikaci prohlédnout a&amp;amp;nbsp;případně hledat chyby.&lt;br /&gt;
* Na druhou stranu to ale také nahrává útočníkům, proto dnes mnoho serverů vyžaduje využití SSL pro šifrování komunikace.&lt;br /&gt;
* Při použití „https“ se požadavky protokolu HTTP posílají šifrovaným kanálem. Textový zápis metod zůstává stejný, ale celá komunikace je nyní zašifrovaná.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Metoda GET ===&lt;br /&gt;
* Základní požadavek, který slouží ke stažení webové stránky, používá metodu GET.&lt;br /&gt;
* Syntaxe: &amp;lt;code&amp;gt;GET ''složka/soubor'' HTTP/1.1&amp;lt;/code&amp;gt;&lt;br /&gt;
* Jako druhý parametr se uvádí verze protokolu HTTP. Dnes nejběžněji HTTP 1.1.&lt;br /&gt;
* Na dalších řádcích následují [[#Hlavičky protokolu HTTP| hlavičky protokolu HTTP]].&lt;br /&gt;
* Požadavek končí prázdným řádkem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Další metody ===&lt;br /&gt;
* Kromě stahování obsahu webových stránek dnes lze protokol HTTP využít i&amp;amp;nbsp;pro další účely včetně modifikace obsahu webových stránek.&lt;br /&gt;
* K&amp;amp;nbsp;těmto účelům slouží další metody:&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;POST&amp;lt;/code&amp;gt;&lt;br /&gt;
* Požadavek s&amp;amp;nbsp;desláním formulářových dat.&lt;br /&gt;
* Neukládá se do historie prohlížeče.&lt;br /&gt;
; &amp;lt;code&amp;gt;PUT&amp;lt;/code&amp;gt;&lt;br /&gt;
* Nahrání souboru na server.&lt;br /&gt;
; &amp;lt;code&amp;gt;DELETE&amp;lt;/code&amp;gt;&lt;br /&gt;
* Smazání souborů na serveru.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hlavičky protokolu HTTP ==&lt;br /&gt;
* Jedná se o&amp;amp;nbsp;doplňující textové informace, které posílají server nebo prohlížeč.&lt;br /&gt;
* Jednotlivé hlavičky se oddělují koncem řádku.&lt;br /&gt;
* Více o&amp;amp;nbsp;hlavičkách HTTP viz: [https://en.wikipedia.org/wiki/List_of_HTTP_header_fields Wikipedia &amp;amp;rarr; List_of_HTTP_header_fields]&lt;br /&gt;
&lt;br /&gt;
; Příklady hlaviček prohlížeče&lt;br /&gt;
* Tyto hlavičky může posílat prohlížeč k&amp;amp;nbsp;serveru.&lt;br /&gt;
* &amp;lt;code&amp;gt;Host: www.oauh.cz&amp;lt;/code&amp;gt;&lt;br /&gt;
** Z&amp;amp;nbsp;jaké domény vyžadujeme informace (na dnešním hostingu může běžně na jedné IP adrese běžet více domén).&lt;br /&gt;
* &amp;lt;code&amp;gt;User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/12.0&amp;lt;/code&amp;gt;&lt;br /&gt;
** Označení prohlížeče, který bude stránku zobrazovat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; Příklady hlaviček serveru&lt;br /&gt;
* Doplňující informace pro prohlížeč.&lt;br /&gt;
* &amp;lt;code&amp;gt;Date: Sun, 03 May 2020 14:27:01 GMT&amp;lt;/code&amp;gt;&lt;br /&gt;
** Datum zpracování požadavku.&lt;br /&gt;
* &amp;lt;code&amp;gt;Server: Apache/2.2.12 (Linux/SUSE)&amp;lt;/code&amp;gt;&lt;br /&gt;
** Serverová aplikace, která požadavek zpracovala.&lt;br /&gt;
* &amp;lt;code&amp;gt;Content-Type: text/html; charset=iso-8859-1&amp;lt;/code&amp;gt;&lt;br /&gt;
** Typ obsahu odesílaného souboru.&lt;br /&gt;
* &amp;lt;code&amp;gt;Expires: Thu, 01 Dec 1994 16:00:00 GMT&amp;lt;/code&amp;gt;&lt;br /&gt;
** Kdy obsah přestává být platný a&amp;amp;nbsp;měl by se stáhnout znovu.&lt;br /&gt;
* &amp;lt;code&amp;gt;Location: /pub/WWW/People.html&amp;lt;/code&amp;gt;&lt;br /&gt;
** Přesměrování &amp;amp;mdash; klient by měl místo této stránky stáhnout stránku z&amp;amp;nbsp;uvedené URL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Verze protokolu HTTP ==&lt;br /&gt;
* Dnes je nejběžnější použití HTTP/1.1 (publikováno 1997, aktualizováno 2014) nebo HTTP/2 (publikováno 2015).&lt;br /&gt;
* Starší verze 0.9 a&amp;amp;nbsp;1.0 už se dnes běžně nepoužívají.&lt;br /&gt;
* Postupně se pracuje na specifikaci HTTP/3.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Úkol: Prohlédněte si komunikaci ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Priklad&amp;quot;&amp;gt;&lt;br /&gt;
; Úkol: Prohlédněte si komunikaci mezi klientem a&amp;amp;nbsp;serverem&lt;br /&gt;
# Najděte stránku [https://websniffer.cc/ WebSniffer.cc].&lt;br /&gt;
# Zadejte nějakou URL adresu do okénka.&lt;br /&gt;
# Web sniffer vám vypíše kompletní komunikaci mezi vaším prohlížečem a&amp;amp;nbsp;serverem.&lt;br /&gt;
# Zobrazen máte požadavek s&amp;amp;nbsp;odeslanými hlavičkami i&amp;amp;nbsp;přijatou odpověď včetně hlaviček, které poskytuje server.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Úkol: Odeslání požadavku ručně ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Priklad&amp;quot;&amp;gt;'''Úkol: Vyzkoušejte si ručně, co musí udělat prohlížeč!'''&lt;br /&gt;
* Vyberte si web, ke kterému se zkusíte připojit. (V&amp;amp;nbsp;našem příkladu píšeme &amp;lt;code&amp;gt;''www.oauh.cz''&amp;lt;/code&amp;gt;. Vy napište skutečnou URL adresu bez HTTP.&lt;br /&gt;
* Do poznámkového bloku (či jiného čistě textového editoru) si připravte požadavek:&lt;br /&gt;
 GET / HTTP/1.1&lt;br /&gt;
 Host: ''www.oauh.cz''&lt;br /&gt;
 ''&amp;lt;prázdný řádek&amp;gt;''&lt;br /&gt;
* Připravený požadavek (včetně prázdného řádku na konci) zkopírujte do schránky.&lt;br /&gt;
* Spusťte program PuTTY a&amp;amp;nbsp;vyplňte údaje pro připojení k&amp;amp;nbsp;serveru.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|--&lt;br /&gt;
| Server: || &amp;lt;code&amp;gt;www.oauh.cz&amp;lt;/code&amp;gt; &lt;br /&gt;
|--&lt;br /&gt;
| Port: || &amp;lt;code&amp;gt;80&amp;lt;/code&amp;gt; &lt;br /&gt;
|--&lt;br /&gt;
| Connection-type: || &amp;lt;code&amp;gt;raw&amp;lt;/code&amp;gt; &lt;br /&gt;
|--&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Aby se po ukončení spojení okno neuzavřelo, zatrhněte navíc: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|--&lt;br /&gt;
| Close window on exit: || &amp;lt;code&amp;gt;Never&amp;lt;/code&amp;gt; &lt;br /&gt;
|--&lt;br /&gt;
|}&lt;br /&gt;
* Ihned po navázání spojení klikněte do okénka PuTTY pravým tlačítkem.&lt;br /&gt;
** Tím provedete operaci „paste“: odešlete otevřeným spojením celý obsah schránky Windows (ve schránce máte připravený požadavek HTTP GET).&lt;br /&gt;
* Zkontrolujte odpověď.&lt;br /&gt;
** Odpověď serveru by měla začínat: &amp;lt;code&amp;gt;HTTP/1.1 200 OK&amp;lt;/code&amp;gt;&lt;br /&gt;
** Pokud je odpověď jiná, najděte chybový kód a&amp;amp;nbsp;upravte postup.&lt;br /&gt;
** Dnes servery často vyžadují šifrované spojení přes HTTPS. V&amp;amp;nbsp;tom případě bude nejspíš odpověď serveru začínat: &amp;lt;code&amp;gt;HTTP/1.1 301 Moved permanently&amp;lt;/code&amp;gt; a&amp;amp;nbsp;bude následovat hlavička &amp;lt;code&amp;gt;Location:&amp;lt;/code&amp;gt;, která udává, na jaké adrese najdete stránku nyní (https://...).&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Poznamka&amp;quot;&amp;gt;&lt;br /&gt;
; Obvyklé chyby&lt;br /&gt;
* Chybějící hlavička &amp;lt;code&amp;gt;Host:&amp;lt;/code&amp;gt;&lt;br /&gt;
* Špatná velikost písmen (dodržte malá a&amp;amp;nbsp;velká písmena podle vzoru).&lt;br /&gt;
* Chybějící prázdný řádek na konci (požadavek končí prázdným řádkem &amp;amp;mdash; dvěma dvojicemi CR+LF).&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/Blockchain_a_kryptom%C4%9Bny</id>
		<title>Blockchain a kryptoměny</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/Blockchain_a_kryptom%C4%9Bny"/>
				<updated>2026-04-16T12:17:31Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: /* Kde uchovávat kryptoměny */ Doplnění, že peněženka neuchovává měnu.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]][[Category:Kryptoměny]]&lt;br /&gt;
&lt;br /&gt;
== Co je bitcoin? Co jsou kryptoměny? ==&lt;br /&gt;
* ''Bitcoin'' je první a nejznámnější kryptoměna. Kryptoměn ale existuje více: například ''Ethereum'', ''Solana'' a další.&lt;br /&gt;
* Kryptoměna je virtuální měna. Ve skutečnosti se tedy vlastně jedná jen o digitální zápis o vlastnictví určitého počtu jednotek dané kryptoměny.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Poznamka&amp;quot;&amp;gt;&lt;br /&gt;
Virtuální platby jsou částečně podobné jako platby platební kartou. Mění se pouze informace o vlastnictví měny. Fyzicky se žádná reprezentace peněz nepřesunuje.&lt;br /&gt;
&lt;br /&gt;
Na rozdíl od platebních karet ale kryptoměna nemá žádnou vlastní hodnotu &amp;amp;mdash; obdobně jako akcie. Vlastníkovi peněz na platební kartě může banka vyplatit hotovost. U kryptoměny není žádná fyzická reprezentace měny, kterou byste si mohli nechat vyplatit.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Blockchain a decentralizace ==&lt;br /&gt;
* Databáze vlastnictví a operací s&amp;amp;nbsp;kryptoměnou se uchovává ve sdílené databázi označované jako ''blockchain''. Pokud provedeme platbu kryptoměnou, do blockchainu se zapíše informace o provedené operaci.&lt;br /&gt;
* Kryptoměny jsou tedy ''decentralizované'' &amp;amp;mdash; kopii blockchainu může mít uloženu každý účastník. Tím se stane součástí ''kryptoměnové sítě''.&lt;br /&gt;
* Žádná organizace ani účastník nemůže sám ovlivnit chování celé sítě. Zároveň nelze kryptoměny jednoduše „zakázat“ nebo zrušit.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Poznamka&amp;quot;&amp;gt;&lt;br /&gt;
Pojem blockchain jako distribuovaná databáze se nemusí obecně vztahovat jen ke kryptoměnám, ale v případě kryptoměn se používá pro evidenci transakcí s&amp;amp;nbsp;kryptoměnou.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Jak získat kryptoměny ==&lt;br /&gt;
&lt;br /&gt;
; Těžba&lt;br /&gt;
* Některé kryptoměny umožňují generování nových jednotek na základě přesně daného algoritmu.&lt;br /&gt;
* Teoreticky můžete k&amp;amp;nbsp;těžbě používat počítač, ale je to velmi neefektivní a vzhledem k&amp;amp;nbsp;ceně elektřiny a amortizaci počítače to obvykle nedává smysl.&lt;br /&gt;
* Obvykle se používají speciální počítače optimalizované pro výpočty související s&amp;amp;nbsp;těžením kryptoměny. Označují se jako ''těžební stroje''.&lt;br /&gt;
* Provoz těžebních strojů se obvykle vyplatí jen v&amp;amp;nbsp;oblastech s&amp;amp;nbsp;velmi levnou elektřinou.&lt;br /&gt;
* Lze si také na dálku pronajmout či koupit těžební stroje od firmy, která jej provozuje.&lt;br /&gt;
* Můžete si stáhnout aplikaci, která váš počítač zapojí do větší skupiny.&lt;br /&gt;
&lt;br /&gt;
; Registrace plateb v blockchainu&lt;br /&gt;
* Ti, kdo se starají o blockchain dostávají odměnu za evidenci jednotlivých transakcí ve formě poplatku za transakci.&lt;br /&gt;
* Obdobně jako provozovatelé sítě platebních karet si z&amp;amp;nbsp;každé transakce strhávají poplatek.&lt;br /&gt;
&lt;br /&gt;
; Převod/nákup kryptoměny od jiného vlastníka&lt;br /&gt;
* Můžeme jinému vlastníkovi zaplatit za to, že část jednotek, které vlastní, nám převede.&lt;br /&gt;
* Samozřejmě nám může kryptoměnu někdo darovat atd. &lt;br /&gt;
&lt;br /&gt;
== Způsoby nákupu kryptoměn ==&lt;br /&gt;
&lt;br /&gt;
; Burzy kryptoměn&lt;br /&gt;
* Obdobné klasickým burzám na akciovém trhu.&lt;br /&gt;
* Obvykle nižší poplatky, ale složitější rozhraní.&lt;br /&gt;
&lt;br /&gt;
; Kryptoměnové směnárny&lt;br /&gt;
* Vyšší poplatky, obvykle jednodušší rozhraní.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Kde uchovávat kryptoměny ==&lt;br /&gt;
* Ve skutečnosti neuchováváme kryptoměnu, ale privátní klíč, který ověřuje vlastnictví kryptoměny.&lt;br /&gt;
* Jako záloha pro případ ztráty zařízení se používá ''seed'' &amp;amp;mdash; obvykle sekvence 12-24 slov. Pomocí seedu lze obnovit soukromé klíče.&lt;br /&gt;
&lt;br /&gt;
; Kryptoměnové peněženky v&amp;amp;nbsp;rámci burz&lt;br /&gt;
* Obdoba investic ve světě běžných měn.&lt;br /&gt;
* Měnu nemáte u sebe &amp;amp;mdash; v&amp;amp;nbsp;případě zavření burzy může být problém získat finanční prostředky zpět.&lt;br /&gt;
* Nemusíte se starat o bezpečnost sami.&lt;br /&gt;
&lt;br /&gt;
; Kryptoměnové peněženky v&amp;amp;nbsp;mobilu či stolním počítači&lt;br /&gt;
* Obdoba klasické peněženky ve světě běžných měn.&lt;br /&gt;
* Klasická aplikace, vyzkoušejte třeba ''Trust''.&lt;br /&gt;
* Některé umožňují i nákup kryptoměny na burze.&lt;br /&gt;
&lt;br /&gt;
; Hardwarová peněženka&lt;br /&gt;
* Zařízení podobné flashdisku, které slouží jako úložiště kryptoměny, ale zároveň je jednoúčelové &amp;amp;mdash; je tedy lépe chráněno například proti malware.&lt;br /&gt;
* Pro provedení transakce je třeba například zmáčknout tlačítko, nebo zadat otisk prstu.&lt;br /&gt;
&lt;br /&gt;
== Povinnosti ==&lt;br /&gt;
&lt;br /&gt;
* Ve většině zemí se dnes nákup kryptoměn bere jako běžná investice.&lt;br /&gt;
* Pokud vyděláte větší obnos, je třeba zahrnout prodej do daňového přiznání k&amp;amp;nbsp;dani z&amp;amp;nbsp;příjmu.&lt;br /&gt;
* Je tedy vhodné zapisovat si nákupy, jejich cenu a množství nakoupené kryptoměny.&lt;br /&gt;
* Podrobněji je třeba obrátit se na daňového poradce.&lt;br /&gt;
* Při malých nákupech nejspíš povinost podávat daňové přiznání nevznikne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Varovani&amp;quot;&amp;gt;&lt;br /&gt;
Berte v&amp;amp;nbsp;potaz, že kryptoměny jsou považovány za velmi rizikovou investici. Jsou běžné výkyvy ceny v&amp;amp;nbsp;desítkách procent. &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Varovani&amp;quot;&amp;gt;&lt;br /&gt;
Rizikové investice (jako například kryptoměny) by měly tvořit '''maximálně''' 10&amp;amp;nbsp;% vašeho investičního portfolia.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Poznamka&amp;quot;&amp;gt;&lt;br /&gt;
Investiční portfolium by mělo vždy zahrnovat pouze prostředky, jejichž případná ztráta nebude mít vliv na vaši životní úroveň. Není vhodné investovat prostředky, které potřebujete k&amp;amp;nbsp;zajištění životních potřeb, nebo které tvoří běžnou provozní rezervu (výdaje na 6&amp;amp;nbsp;měsíců dopředu).&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Varovani&amp;quot;&amp;gt;&lt;br /&gt;
Před investováním větší částky vždy doporučujeme konzultovat postup s&amp;amp;nbsp;daňovým poradcem.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tipy ==&lt;br /&gt;
&lt;br /&gt;
* Zkuste si nainstalovat peněženku do mobilu a zakoupit nějakou kryptoměnu v&amp;amp;nbsp;ceně stokorun.&lt;br /&gt;
* Zkuste s&amp;amp;nbsp;kamarádem provést transakci.&lt;br /&gt;
* Zkuste si nainstalovat pro těžbu bitcoinu do svého PC a chvíli ji provozovat. Pozor na zátěž počítače. ;)&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/Blockchain_a_kryptom%C4%9Bny</id>
		<title>Blockchain a kryptoměny</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/Blockchain_a_kryptom%C4%9Bny"/>
				<updated>2026-04-16T12:07:07Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: Větší přepracování a doplnění celé stránky.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]][[Category:Kryptoměny]]&lt;br /&gt;
&lt;br /&gt;
== Co je bitcoin? Co jsou kryptoměny? ==&lt;br /&gt;
* ''Bitcoin'' je první a nejznámnější kryptoměna. Kryptoměn ale existuje více: například ''Ethereum'', ''Solana'' a další.&lt;br /&gt;
* Kryptoměna je virtuální měna. Ve skutečnosti se tedy vlastně jedná jen o digitální zápis o vlastnictví určitého počtu jednotek dané kryptoměny.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Poznamka&amp;quot;&amp;gt;&lt;br /&gt;
Virtuální platby jsou částečně podobné jako platby platební kartou. Mění se pouze informace o vlastnictví měny. Fyzicky se žádná reprezentace peněz nepřesunuje.&lt;br /&gt;
&lt;br /&gt;
Na rozdíl od platebních karet ale kryptoměna nemá žádnou vlastní hodnotu &amp;amp;mdash; obdobně jako akcie. Vlastníkovi peněz na platební kartě může banka vyplatit hotovost. U kryptoměny není žádná fyzická reprezentace měny, kterou byste si mohli nechat vyplatit.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Blockchain a decentralizace ==&lt;br /&gt;
* Databáze vlastnictví a operací s&amp;amp;nbsp;kryptoměnou se uchovává ve sdílené databázi označované jako ''blockchain''. Pokud provedeme platbu kryptoměnou, do blockchainu se zapíše informace o provedené operaci.&lt;br /&gt;
* Kryptoměny jsou tedy ''decentralizované'' &amp;amp;mdash; kopii blockchainu může mít uloženu každý účastník. Tím se stane součástí ''kryptoměnové sítě''.&lt;br /&gt;
* Žádná organizace ani účastník nemůže sám ovlivnit chování celé sítě. Zároveň nelze kryptoměny jednoduše „zakázat“ nebo zrušit.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Poznamka&amp;quot;&amp;gt;&lt;br /&gt;
Pojem blockchain jako distribuovaná databáze se nemusí obecně vztahovat jen ke kryptoměnám, ale v případě kryptoměn se používá pro evidenci transakcí s&amp;amp;nbsp;kryptoměnou.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Jak získat kryptoměny ==&lt;br /&gt;
&lt;br /&gt;
; Těžba&lt;br /&gt;
* Některé kryptoměny umožňují generování nových jednotek na základě přesně daného algoritmu.&lt;br /&gt;
* Teoreticky můžete k&amp;amp;nbsp;těžbě používat počítač, ale je to velmi neefektivní a vzhledem k&amp;amp;nbsp;ceně elektřiny a amortizaci počítače to obvykle nedává smysl.&lt;br /&gt;
* Obvykle se používají speciální počítače optimalizované pro výpočty související s&amp;amp;nbsp;těžením kryptoměny. Označují se jako ''těžební stroje''.&lt;br /&gt;
* Provoz těžebních strojů se obvykle vyplatí jen v&amp;amp;nbsp;oblastech s&amp;amp;nbsp;velmi levnou elektřinou.&lt;br /&gt;
* Lze si také na dálku pronajmout či koupit těžební stroje od firmy, která jej provozuje.&lt;br /&gt;
* Můžete si stáhnout aplikaci, která váš počítač zapojí do větší skupiny.&lt;br /&gt;
&lt;br /&gt;
; Registrace plateb v blockchainu&lt;br /&gt;
* Ti, kdo se starají o blockchain dostávají odměnu za evidenci jednotlivých transakcí ve formě poplatku za transakci.&lt;br /&gt;
* Obdobně jako provozovatelé sítě platebních karet si z&amp;amp;nbsp;každé transakce strhávají poplatek.&lt;br /&gt;
&lt;br /&gt;
; Převod/nákup kryptoměny od jiného vlastníka&lt;br /&gt;
* Můžeme jinému vlastníkovi zaplatit za to, že část jednotek, které vlastní, nám převede.&lt;br /&gt;
* Samozřejmě nám může kryptoměnu někdo darovat atd. &lt;br /&gt;
&lt;br /&gt;
== Způsoby nákupu kryptoměn ==&lt;br /&gt;
&lt;br /&gt;
; Burzy kryptoměn&lt;br /&gt;
* Obdobné klasickým burzám na akciovém trhu.&lt;br /&gt;
* Obvykle nižší poplatky, ale složitější rozhraní.&lt;br /&gt;
&lt;br /&gt;
; Kryptoměnové směnárny&lt;br /&gt;
* Vyšší poplatky, obvykle jednodušší rozhraní.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Kde uchovávat kryptoměny ==&lt;br /&gt;
&lt;br /&gt;
; Kryptoměnové peněženky v&amp;amp;nbsp;rámci burz&lt;br /&gt;
* Obdoba investic ve světě běžných měn.&lt;br /&gt;
* Měnu nemáte u sebe &amp;amp;mdash; v&amp;amp;nbsp;případě zavření burzy může být problém získat finanční prostředky zpět.&lt;br /&gt;
* Nemusíte se starat o bezpečnost sami.&lt;br /&gt;
; Kryptoměnové peněženky v&amp;amp;nbsp;mobilu či stolním počítači&lt;br /&gt;
* Obdoba klasické peněženky ve světě běžných měn.&lt;br /&gt;
* Klasická aplikace, vyzkoušejte třeba ''Trust''.&lt;br /&gt;
* Některé umožňují i nákup kryptoměny na burze.&lt;br /&gt;
; Hardwarová peněženka&lt;br /&gt;
* Zařízení podobné flashdisku, které slouží jako úložiště kryptoměny, ale zároveň je jednoúčelové &amp;amp;mdash; je tedy lépe chráněno například proti malware.&lt;br /&gt;
* Pro provedení transakce je třeba například zmáčknout tlačítko, nebo zadat otisk prstu.&lt;br /&gt;
&lt;br /&gt;
== Povinnosti ==&lt;br /&gt;
&lt;br /&gt;
* Ve většině zemí se dnes nákup kryptoměn bere jako běžná investice.&lt;br /&gt;
* Pokud vyděláte větší obnos, je třeba zahrnout prodej do daňového přiznání k&amp;amp;nbsp;dani z&amp;amp;nbsp;příjmu.&lt;br /&gt;
* Je tedy vhodné zapisovat si nákupy, jejich cenu a množství nakoupené kryptoměny.&lt;br /&gt;
* Podrobněji je třeba obrátit se na daňového poradce.&lt;br /&gt;
* Při malých nákupech nejspíš povinost podávat daňové přiznání nevznikne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Varovani&amp;quot;&amp;gt;&lt;br /&gt;
Berte v&amp;amp;nbsp;potaz, že kryptoměny jsou považovány za velmi rizikovou investici. Jsou běžné výkyvy ceny v&amp;amp;nbsp;desítkách procent. &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Varovani&amp;quot;&amp;gt;&lt;br /&gt;
Rizikové investice (jako například kryptoměny) by měly tvořit '''maximálně''' 10&amp;amp;nbsp;% vašeho investičního portfolia.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Poznamka&amp;quot;&amp;gt;&lt;br /&gt;
Investiční portfolium by mělo vždy zahrnovat pouze prostředky, jejichž případná ztráta nebude mít vliv na vaši životní úroveň. Není vhodné investovat prostředky, které potřebujete k&amp;amp;nbsp;zajištění životních potřeb, nebo které tvoří běžnou provozní rezervu (výdaje na 6&amp;amp;nbsp;měsíců dopředu).&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Varovani&amp;quot;&amp;gt;&lt;br /&gt;
Před investováním větší částky vždy doporučujeme konzultovat postup s&amp;amp;nbsp;daňovým poradcem.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tipy ==&lt;br /&gt;
&lt;br /&gt;
* Zkuste si nainstalovat peněženku do mobilu a zakoupit nějakou kryptoměnu v&amp;amp;nbsp;ceně stokorun.&lt;br /&gt;
* Zkuste s&amp;amp;nbsp;kamarádem provést transakci.&lt;br /&gt;
* Zkuste si nainstalovat pro těžbu bitcoinu do svého PC a chvíli ji provozovat. Pozor na zátěž počítače. ;)&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/Blockchain_a_kryptom%C4%9Bny</id>
		<title>Blockchain a kryptoměny</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/Blockchain_a_kryptom%C4%9Bny"/>
				<updated>2026-04-16T11:48:18Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: /* Co je bitcoin? */ Vylepšení popisu kryptoměny.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]][[Category:Kryptoměny]]&lt;br /&gt;
&lt;br /&gt;
== Co je bitcoin? Co jsou kryptoměny? ==&lt;br /&gt;
* ''Bitcoin'' je první a nejznámnější kryptoměna. Kryptoměn ale existuje více: například ''Ethereum'', ''Solana'' a další.&lt;br /&gt;
* Kryptoměna je virtuální měna. Ve skutečnosti se tedy vlastně jedná jen o digitální zápis o vlastnictví určitého počtu jednotek dané kryptoměny.&lt;br /&gt;
* Databáze vlastnictví a operací s&amp;amp;nbsp;kryptoměnou se uchovává ve sdílené databázi označované jako ''blockchain''. Pokud provedeme platbu kryptoměnou, do blockchainu se zapíše informace o provedené operaci.&lt;br /&gt;
* Kryptoměny jsou tedy ''decentralizované'' &amp;amp;mdash; kopii blockchainu může mít uloženu každý účastník. Tím se stane součástí ''kryptoměnové sítě''.&lt;br /&gt;
* Žádná organizace ani účastník nemůže sám ovlivnit chování celé sítě. Zároveň nelze kryptoměny jednoduše „zakázat“ nebo zrušit.&lt;br /&gt;
&lt;br /&gt;
== Blockchain ==&lt;br /&gt;
* Distribuovaná databáze.&lt;br /&gt;
* Nemusí se obecně vztahovat jen ke kryptoměnám, ale v případě kryptoměn se používá pro evidenci transakcí s&amp;amp;nbsp;kryptoměnou.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Kde získat kryptoměny ==&lt;br /&gt;
&lt;br /&gt;
* Těžba: hledání nových číselných kombinací nebo registrace plateb v&amp;amp;nbsp;blockchainu.&lt;br /&gt;
* Nákup od jiného vlastníka.&lt;br /&gt;
&lt;br /&gt;
; K tomu slouží&lt;br /&gt;
* Burzy kryptoměn.&lt;br /&gt;
* Pronájem či nákup těžebního stroje od firmy, která je provozuje.&lt;br /&gt;
* Můžete si stáhnout aplikaci, která váš počítač zapojí do větší skupiny.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Kde uchovávat kryptoměny ==&lt;br /&gt;
&lt;br /&gt;
; Kryptoměnové peněženky v&amp;amp;nbsp;rámci burz&lt;br /&gt;
* Obdoba investic ve světě běžných měn.&lt;br /&gt;
* Měnu nemáte u sebe &amp;amp;mdash; v&amp;amp;nbsp;případě zavření burzy může být problém získat finanční prostředky zpět.&lt;br /&gt;
* Nemusíte se starat o bezpečnost sami.&lt;br /&gt;
; Kryptoměnové peněženky v&amp;amp;nbsp;mobilu či stolním počítači&lt;br /&gt;
* Obdoba klasické peněženky ve světě běžných měn.&lt;br /&gt;
* Klasická aplikace, vyzkoušejte třeba ''Trust''.&lt;br /&gt;
* Některé umožňují i nákup kryptoměny na burze.&lt;br /&gt;
; Hardwarová peněženka&lt;br /&gt;
* Zařízení podobné flashdisku, které slouží jako úložiště kryptoměny, ale zároveň je jednoúčelové &amp;amp;mdash; je tedy lépe chráněno například proti malware.&lt;br /&gt;
* Pro provedení transakce je třeba například zmáčknout tlačítko, nebo zadat otisk prstu.&lt;br /&gt;
&lt;br /&gt;
== Povinnosti ==&lt;br /&gt;
&lt;br /&gt;
* Ve většině zemí se dnes nákup kryptoměn bere jako běžná investice.&lt;br /&gt;
* Pokud vyděláte větší obnos, je třeba zahrnout prodej do daňového přiznání k&amp;amp;nbsp;dani z&amp;amp;nbsp;příjmu.&lt;br /&gt;
* Je tedy vhodné zapisovat si nákupy, jejich cenu a množství nakoupené kryptoměny.&lt;br /&gt;
* Podrobněji je třeba obrátit se na daňového poradce.&lt;br /&gt;
* Při malých nákupech nejspíš povinost podávat daňové přiznání nevznikne.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Varovani&amp;quot;&amp;gt;&lt;br /&gt;
Berte v&amp;amp;nbsp;potaz, že kryptoměny jsou považovány za velmi rizikovou investici. Jsou běžné výkyvy ceny v&amp;amp;nbsp;desítkách procent. &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Varovani&amp;quot;&amp;gt;&lt;br /&gt;
Rizikové investice (jako například kryptoměny) by měly tvořit '''maximálně''' 10&amp;amp;nbsp;% vašeho investičního portfolia.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Poznamka&amp;quot;&amp;gt;&lt;br /&gt;
Investiční portfolium by mělo vždy zahrnovat pouze prostředky, jejichž případná ztráta nebude mít vliv na vaši životní úroveň. Není vhodné investovat prostředky, které potřebujete k&amp;amp;nbsp;zajištění životních potřeb, nebo které tvoří běžnou provozní rezervu (výdaje na 6&amp;amp;nbsp;měsíců dopředu).&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Varovani&amp;quot;&amp;gt;&lt;br /&gt;
Před investováním větší částky vždy doporučujeme konzultovat postup s&amp;amp;nbsp;daňovým poradcem.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tipy ==&lt;br /&gt;
&lt;br /&gt;
* Zkuste si nainstalovat peněženku do mobilu a zakoupit nějakou kryptoměnu v&amp;amp;nbsp;ceně stokorun.&lt;br /&gt;
* Zkuste s&amp;amp;nbsp;kamarádem provést transakci.&lt;br /&gt;
* Zkuste si nainstalovat pro těžbu bitcoinu do svého PC a chvíli ji provozovat. Pozor na zátěž počítače. ;)&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/P%C5%99%C3%ADklady_souborov%C3%BDch_syst%C3%A9m%C5%AF</id>
		<title>Příklady souborových systémů</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/P%C5%99%C3%ADklady_souborov%C3%BDch_syst%C3%A9m%C5%AF"/>
				<updated>2026-04-15T07:27:13Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: /* ext2/ext3/ext4 */ Podpora v jiných OS.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]][[Category:OSY]][[Category:Ukládání_dat]]&lt;br /&gt;
&lt;br /&gt;
== NTFS ==&lt;br /&gt;
* Zaveden ve Windows NT.&lt;br /&gt;
* Podpora šifrování, komprese.&lt;br /&gt;
* Obvykle menší clustery než u FAT32.&lt;br /&gt;
* Názvy souborů v UTF8.&lt;br /&gt;
* Existuje více verzí, aktuální verze NTFS v. 3.1 (od Windows 2000), navíc se liší i verze ovladače NTFS.sys (pro Windows Vista a vyšší verze 6.0).&lt;br /&gt;
&lt;br /&gt;
; Podpora v&amp;amp;nbsp;jiných OS: &lt;br /&gt;
* Specifikace NTFS není oficiálně publikována &amp;amp;mdash; podpora v&amp;amp;nbsp;jiných OS nemusí zahrnovat všechny vlastnosti.&lt;br /&gt;
** V&amp;amp;nbsp;GNU/Linuxu lze ve většině distribucí bez problémů číst, zápis funguje obvykle také, ale je obvykle potřeba povolit zápis v&amp;amp;nbsp;nastavení.&lt;br /&gt;
** V&amp;amp;nbsp;macOSu by čtení mělo být bez rozšíření, pro zápis je potřeba placené ovladače třetích stran (Paragon Software a další).&lt;br /&gt;
* Problémy s fragmentací, nutná pravidelná [[Defragmentace|defragmentace]]. (Ve Windows 7 a novějších se defragmentace spouští automaticky.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Poznamka&amp;quot;&amp;gt;&lt;br /&gt;
Verzi NTFS zjistíte příkazem: &lt;br /&gt;
 fsutil fsinfo ntfsinfo c:&lt;br /&gt;
&lt;br /&gt;
(Spusťte příkazový řádek jako správce: ''Start &amp;amp;rarr; cmd &amp;amp;rarr; pravé tlačítko &amp;amp;rarr; Spustit jako správce''!)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Zdroje&lt;br /&gt;
* [http://www.thomasmaurer.ch/2011/05/check-ntfs-version/ http://www.thomasmaurer.ch/2011/05/check-ntfs-version/]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/NTFS#Versions http://en.wikipedia.org/wiki/NTFS#Versions]&lt;br /&gt;
* [https://technet.microsoft.com/en-us/library/cc781134%28v=ws.10%29.aspx https://technet.microsoft.com/en-us/library/cc781134%28v=ws.10%29.aspx]&lt;br /&gt;
&lt;br /&gt;
== FAT/FAT32/exFAT ==&lt;br /&gt;
* Pochází z MS-DOSu resp. Windows 95.&lt;br /&gt;
* Dnes se používá obvykle jen na paměťových kartách a flash discích.&lt;br /&gt;
* Zastaralý &amp;amp;mdash; struktury pro uložení metadat vychází ze 70. a 80. let, kdy diskety měly řádově stovky kilobyte. Proto je náchylný k chybám.&lt;br /&gt;
* Nevhodné pro zálohování či trvalé ukládání dat.&lt;br /&gt;
&lt;br /&gt;
; FAT(16)&lt;br /&gt;
* Dnes již historický (omezení velikosti oddílu).&lt;br /&gt;
* Názvy souborů 8+3 znaky, bez podpory diakritiky.&lt;br /&gt;
* Byl určený pro diskety, dnes se již nepoužívá.&lt;br /&gt;
&lt;br /&gt;
; FAT32&lt;br /&gt;
* Delší jména souborů než u FAT.&lt;br /&gt;
* Soubory velikosti max. 4&amp;amp;nbsp;GB na 64-bitových systémech (max. 2&amp;amp;nbsp;GB na 32-bitových systémech).&lt;br /&gt;
* Limit celkové velikosti souborového systému je teoreticky až 2&amp;amp;nbsp;TB při velikosti sektoru 512 B. Standardní nástroj pro formátování disků ve starších Windows limituje maximální velikost oddílu FAT32 na 32&amp;amp;nbsp;GB. V&amp;amp;nbsp;novějších verzích Windows 11 už je toto omezení odstraněno, ale stejně se pro disky přes 32&amp;amp;nbsp;GBdoporučuje použít raději exFAT.&lt;br /&gt;
* Nemá žurnálování.&lt;br /&gt;
* Široká podpora (HW zařízení, operační systémy,...).&lt;br /&gt;
* Jednoduchý na implementaci.&lt;br /&gt;
&lt;br /&gt;
; exFAT&lt;br /&gt;
* Původně proprietární FS Microsoftu, v&amp;amp;nbsp;roce 2019 specifikace zveřejněna.&lt;br /&gt;
* Má sloužit jako náhrada FAT32 pro flash-disky.&lt;br /&gt;
* Rozšiřuje FAT32.&lt;br /&gt;
* Odstraňuje omezení velikosti souboru.&lt;br /&gt;
* Výchozí souborový systém po SDXC karty větší než 32&amp;amp;nbsp;GB.&lt;br /&gt;
* Může podporovat žurnálování, pokud to povolíme.&lt;br /&gt;
&lt;br /&gt;
; Podpora v&amp;amp;nbsp;jiných OS:&lt;br /&gt;
* FAT32 prakticky na všech běžných operačních systémech. &lt;br /&gt;
* exFAT &amp;amp;mdash; podpora se postupně zlepšuje.&lt;br /&gt;
** Čtení a zápis podporuje Linux kernel od verze 5.4 (pro srovnání v&amp;amp;nbsp;2021 aktuální verze Debian 10 používá kernel 4.19, Ubuntu 20.04 LTS používá kernel 5.4.8).&lt;br /&gt;
** V&amp;amp;nbsp;nástrojích pro formátování v&amp;amp;nbsp;Linuxu nemusí být podpora pro vytvoření oddílu s&amp;amp;nbsp;exFAT.&lt;br /&gt;
** Mac OS X od verze 10.6.5 (uvolněno v&amp;amp;nbsp;roce 2010), &lt;br /&gt;
** V&amp;amp;nbsp;roce 2021 některá mobilní zařízení.&lt;br /&gt;
&lt;br /&gt;
== ReFS ==&lt;br /&gt;
* ''Resilient File System''&lt;br /&gt;
* Nový pokročilý souborový systém Microsoftu.&lt;br /&gt;
* Zatím používán pro Windows Server 2016 a 2022 (rok 2023).&lt;br /&gt;
* Důraz na spolehlivost a výkon&lt;br /&gt;
** Umí nahradit RAID &amp;amp;mdash; zrcadlení dat (mirroring): rychlejší přístup a možnost opravy při chybě HW.&lt;br /&gt;
** Automatická průběžná kontrola dat &amp;amp;mdash; nejen při čtení, ale i kontrola dat, se kterými se nepracuje (''scrubber'').&lt;br /&gt;
** Optimalizován pro vysoký výkon i u velikých disků (miliony terabyte apod.&lt;br /&gt;
* Podora pro virtuální stroje:&lt;br /&gt;
** Rychlé vytváření souborů obsahujících samé nuly (při vytváření virtuálních disků s&amp;amp;nbsp;fixní velikostí).&lt;br /&gt;
** Rychlé kopírování celých bloků (snímky virtuálních strojů)&lt;br /&gt;
* Limity: název souboru 255 znaků, délka cesty 32K znaků, velikost souboru i oddílu 35 PB (NTFS 256 TB)&lt;br /&gt;
* Podpora: BitLocker, Junctions (soft-links), hard-links, ACL, žurnál, trim&lt;br /&gt;
&lt;br /&gt;
; Podpora v&amp;amp;nbsp;jiných OS:&lt;br /&gt;
* Linux: placený ovladač od Paragon Software, svobodné ovladače https://github.com/unsound/refsprogs, ale podpora s nimi může být omezená.&lt;br /&gt;
* macOS: podpora zatím není &amp;amp;mdash; lze data sdílet přes síťový disk&lt;br /&gt;
&lt;br /&gt;
== ext2/ext3/ext4 ==&lt;br /&gt;
* Rozšíření původního systému &amp;lt;tt&amp;gt;ext&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Implementovány v Unixových systémech, standardní volba pro většinu linuxových distribucí.&lt;br /&gt;
* Vzájemně kompatibilní.&lt;br /&gt;
; ext3&lt;br /&gt;
* Zpětně kompatibilní s ext2.&lt;br /&gt;
* Přidává žurnálování.&lt;br /&gt;
* Podporuje POSIX ACL (Access Control Lists).&lt;br /&gt;
* Není klasická defragmentace.&lt;br /&gt;
* Kontrola disku (&amp;lt;code&amp;gt;fsck&amp;lt;/code&amp;gt;) jen v režimu read-only (viz [[Nástroje_pro_práci_s_diskem#Kontrola_souborového_systému|Nástroje pro práci s diskem]]).&lt;br /&gt;
* Není transparentní komprese.&lt;br /&gt;
* Viz také [http://en.wikipedia.org/wiki/Ext3 Wikipedia.org &amp;gt; Ext3]&lt;br /&gt;
; ext4&lt;br /&gt;
* Dnes nativní pro běžné uživatelské distribuce Linuxu&lt;br /&gt;
* Žurnálování lze volitelně vypnout pomocí &amp;lt;code&amp;gt;tune4fs&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
; Podpora v&amp;amp;nbsp;jiných OS&lt;br /&gt;
* Obvykle není, nebo jen s&amp;amp;nbsp;ovladači třetích stran.&lt;br /&gt;
&lt;br /&gt;
; Porovnání:&lt;br /&gt;
* [http://www.thegeekstuff.com/2011/05/ext2-ext3-ext4/ TheGeekStuff.com &amp;amp;rarr; ext2 &amp;amp;mdash; ext3 &amp;amp;mdash; ext4]&lt;br /&gt;
&lt;br /&gt;
== btrfs ==&lt;br /&gt;
* Pokročilý souborový systém pro GNU/Linux, Solaris,...&lt;br /&gt;
* Distribuce Fedora používá btrfs jakou výchozí volbu od verze Fedora 33 (rok 2020)&lt;br /&gt;
* Subvoluming&lt;br /&gt;
** Jeden FS může být rozprostřen přes více fyzických zařízení.&lt;br /&gt;
** Prostor (raw storage) rozdělen na úseky (např. 1GB), které se pak spojují do subvolumes.&lt;br /&gt;
** Nahrazuje LVM (Logical Volume Manager) a ZFS.&lt;br /&gt;
* Snapshots (snímky disku)&lt;br /&gt;
** Ukládání současného stavu disku a změn oproti tomuto stavu.&lt;br /&gt;
* Copy on write&lt;br /&gt;
** Vytváření kopie svazku při současné práci se svazkem.&lt;br /&gt;
* https://btrfs.wiki.kernel.org/index.php/Main_Page&lt;br /&gt;
* Vyvinut firmou Oracle, dnes GPL.&lt;br /&gt;
; Vlastnosti:&lt;br /&gt;
* Velikost souboru až 2^64 B ~ 16 EiB&lt;br /&gt;
* Dynamic i-node allocation&lt;br /&gt;
* Podpora svazků (volumes) a RAID vestavěná ve FS&lt;br /&gt;
** RAID 0, 1 a 10&lt;br /&gt;
** chystá se RAID 5 a 6&lt;br /&gt;
* Kontrolní součty (checksumming)&lt;br /&gt;
* Body obnovení (snapshotting) &amp;amp;mdash; uchová stav systému před rizikovou operací.&lt;br /&gt;
* On-line defragmentation.&lt;br /&gt;
&lt;br /&gt;
== APFS (HFS+) ==&lt;br /&gt;
* Apple File System (APFS)&lt;br /&gt;
* Souborový systém pro operační systém macOS&lt;br /&gt;
* Počítače Apple&lt;br /&gt;
* Starší verze macOS (před rokem 2017) používaly starší souborový systém HFS+.&lt;br /&gt;
* Proprietární Apple, částečná specifikace je zvěřejněna a umožňuje čtení z nešifrovaných úložišť.&lt;br /&gt;
* Pro uložení informací o rozdělení disku využívá GPT.&lt;br /&gt;
* Využívá ''firmlink'' &amp;amp;mdash; na rozdíl od hard linků z&amp;amp;nbsp;Linuxu může odkazovat na jiné disky.&lt;br /&gt;
* Umožňuje klonování souborů místo klasické kopie (data zůstávají na disku jen jednou, systém sleduje pouze změny v jednotlivých souborech. Klonování se automaticky použije ve Finderu, u příkazu &amp;lt;code&amp;gt;cp&amp;lt;/code&amp;gt; je třeba použít přepínač &amp;lt;code&amp;gt;-c&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Podporuje šifrování celého disku i jednotlivých souborů, kompresy a sdílení volného místa mezi jednotlivými oddíly (volumes).&lt;br /&gt;
* Místo žurnálování používá ''redirect-on-write'' &amp;amp;mdash; při zápisu do souboru se vytvoří nová metadata v&amp;amp;nbsp;novém inode a posléze se upraví odkaz. Původní metadata se označí jako nevyužitá.&lt;br /&gt;
* Nedoporučuje se pro používání na klasických HDD (plotnových).&lt;br /&gt;
* Existují ovladače třetích stran pro Windows (placené) a Linux (svobodné) s&amp;amp;nbsp;částečně omezenou podporou.&lt;br /&gt;
&lt;br /&gt;
== swap ==&lt;br /&gt;
*Pro odkládání nepotřebných paměťových bloků na disk.&lt;br /&gt;
*Pod Windows se řeší speciálním souborem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== proc ==&lt;br /&gt;
*Pouze virtuální FS.&lt;br /&gt;
*Slouží k práci s procesy.&lt;br /&gt;
&lt;br /&gt;
== Zdroje ==&lt;br /&gt;
* Resilient File System (ReFS) overview. Microsoft Learn [online]. Microsoft, 15.2.2023 [cit. 2023-05-07]. Dostupné z: [https://learn.microsoft.com/en-us/windows-server/storage/refs/refs-overview https://learn.microsoft.com/en-us/windows-server/storage/refs/refs-overview]&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/P%C5%99%C3%ADklady_souborov%C3%BDch_syst%C3%A9m%C5%AF</id>
		<title>Příklady souborových systémů</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/P%C5%99%C3%ADklady_souborov%C3%BDch_syst%C3%A9m%C5%AF"/>
				<updated>2026-04-15T07:25:20Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: /* FAT/FAT32/exFAT */ Náchylnost k chybám přesunuta na začátek. Podpora v jiných OS přesunuta do samostatné podkapitoly.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]][[Category:OSY]][[Category:Ukládání_dat]]&lt;br /&gt;
&lt;br /&gt;
== NTFS ==&lt;br /&gt;
* Zaveden ve Windows NT.&lt;br /&gt;
* Podpora šifrování, komprese.&lt;br /&gt;
* Obvykle menší clustery než u FAT32.&lt;br /&gt;
* Názvy souborů v UTF8.&lt;br /&gt;
* Existuje více verzí, aktuální verze NTFS v. 3.1 (od Windows 2000), navíc se liší i verze ovladače NTFS.sys (pro Windows Vista a vyšší verze 6.0).&lt;br /&gt;
&lt;br /&gt;
; Podpora v&amp;amp;nbsp;jiných OS: &lt;br /&gt;
* Specifikace NTFS není oficiálně publikována &amp;amp;mdash; podpora v&amp;amp;nbsp;jiných OS nemusí zahrnovat všechny vlastnosti.&lt;br /&gt;
** V&amp;amp;nbsp;GNU/Linuxu lze ve většině distribucí bez problémů číst, zápis funguje obvykle také, ale je obvykle potřeba povolit zápis v&amp;amp;nbsp;nastavení.&lt;br /&gt;
** V&amp;amp;nbsp;macOSu by čtení mělo být bez rozšíření, pro zápis je potřeba placené ovladače třetích stran (Paragon Software a další).&lt;br /&gt;
* Problémy s fragmentací, nutná pravidelná [[Defragmentace|defragmentace]]. (Ve Windows 7 a novějších se defragmentace spouští automaticky.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Poznamka&amp;quot;&amp;gt;&lt;br /&gt;
Verzi NTFS zjistíte příkazem: &lt;br /&gt;
 fsutil fsinfo ntfsinfo c:&lt;br /&gt;
&lt;br /&gt;
(Spusťte příkazový řádek jako správce: ''Start &amp;amp;rarr; cmd &amp;amp;rarr; pravé tlačítko &amp;amp;rarr; Spustit jako správce''!)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Zdroje&lt;br /&gt;
* [http://www.thomasmaurer.ch/2011/05/check-ntfs-version/ http://www.thomasmaurer.ch/2011/05/check-ntfs-version/]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/NTFS#Versions http://en.wikipedia.org/wiki/NTFS#Versions]&lt;br /&gt;
* [https://technet.microsoft.com/en-us/library/cc781134%28v=ws.10%29.aspx https://technet.microsoft.com/en-us/library/cc781134%28v=ws.10%29.aspx]&lt;br /&gt;
&lt;br /&gt;
== FAT/FAT32/exFAT ==&lt;br /&gt;
* Pochází z MS-DOSu resp. Windows 95.&lt;br /&gt;
* Dnes se používá obvykle jen na paměťových kartách a flash discích.&lt;br /&gt;
* Zastaralý &amp;amp;mdash; struktury pro uložení metadat vychází ze 70. a 80. let, kdy diskety měly řádově stovky kilobyte. Proto je náchylný k chybám.&lt;br /&gt;
* Nevhodné pro zálohování či trvalé ukládání dat.&lt;br /&gt;
&lt;br /&gt;
; FAT(16)&lt;br /&gt;
* Dnes již historický (omezení velikosti oddílu).&lt;br /&gt;
* Názvy souborů 8+3 znaky, bez podpory diakritiky.&lt;br /&gt;
* Byl určený pro diskety, dnes se již nepoužívá.&lt;br /&gt;
&lt;br /&gt;
; FAT32&lt;br /&gt;
* Delší jména souborů než u FAT.&lt;br /&gt;
* Soubory velikosti max. 4&amp;amp;nbsp;GB na 64-bitových systémech (max. 2&amp;amp;nbsp;GB na 32-bitových systémech).&lt;br /&gt;
* Limit celkové velikosti souborového systému je teoreticky až 2&amp;amp;nbsp;TB při velikosti sektoru 512 B. Standardní nástroj pro formátování disků ve starších Windows limituje maximální velikost oddílu FAT32 na 32&amp;amp;nbsp;GB. V&amp;amp;nbsp;novějších verzích Windows 11 už je toto omezení odstraněno, ale stejně se pro disky přes 32&amp;amp;nbsp;GBdoporučuje použít raději exFAT.&lt;br /&gt;
* Nemá žurnálování.&lt;br /&gt;
* Široká podpora (HW zařízení, operační systémy,...).&lt;br /&gt;
* Jednoduchý na implementaci.&lt;br /&gt;
&lt;br /&gt;
; exFAT&lt;br /&gt;
* Původně proprietární FS Microsoftu, v&amp;amp;nbsp;roce 2019 specifikace zveřejněna.&lt;br /&gt;
* Má sloužit jako náhrada FAT32 pro flash-disky.&lt;br /&gt;
* Rozšiřuje FAT32.&lt;br /&gt;
* Odstraňuje omezení velikosti souboru.&lt;br /&gt;
* Výchozí souborový systém po SDXC karty větší než 32&amp;amp;nbsp;GB.&lt;br /&gt;
* Může podporovat žurnálování, pokud to povolíme.&lt;br /&gt;
&lt;br /&gt;
; Podpora v&amp;amp;nbsp;jiných OS:&lt;br /&gt;
* FAT32 prakticky na všech běžných operačních systémech. &lt;br /&gt;
* exFAT &amp;amp;mdash; podpora se postupně zlepšuje.&lt;br /&gt;
** Čtení a zápis podporuje Linux kernel od verze 5.4 (pro srovnání v&amp;amp;nbsp;2021 aktuální verze Debian 10 používá kernel 4.19, Ubuntu 20.04 LTS používá kernel 5.4.8).&lt;br /&gt;
** V&amp;amp;nbsp;nástrojích pro formátování v&amp;amp;nbsp;Linuxu nemusí být podpora pro vytvoření oddílu s&amp;amp;nbsp;exFAT.&lt;br /&gt;
** Mac OS X od verze 10.6.5 (uvolněno v&amp;amp;nbsp;roce 2010), &lt;br /&gt;
** V&amp;amp;nbsp;roce 2021 některá mobilní zařízení.&lt;br /&gt;
&lt;br /&gt;
== ReFS ==&lt;br /&gt;
* ''Resilient File System''&lt;br /&gt;
* Nový pokročilý souborový systém Microsoftu.&lt;br /&gt;
* Zatím používán pro Windows Server 2016 a 2022 (rok 2023).&lt;br /&gt;
* Důraz na spolehlivost a výkon&lt;br /&gt;
** Umí nahradit RAID &amp;amp;mdash; zrcadlení dat (mirroring): rychlejší přístup a možnost opravy při chybě HW.&lt;br /&gt;
** Automatická průběžná kontrola dat &amp;amp;mdash; nejen při čtení, ale i kontrola dat, se kterými se nepracuje (''scrubber'').&lt;br /&gt;
** Optimalizován pro vysoký výkon i u velikých disků (miliony terabyte apod.&lt;br /&gt;
* Podora pro virtuální stroje:&lt;br /&gt;
** Rychlé vytváření souborů obsahujících samé nuly (při vytváření virtuálních disků s&amp;amp;nbsp;fixní velikostí).&lt;br /&gt;
** Rychlé kopírování celých bloků (snímky virtuálních strojů)&lt;br /&gt;
* Limity: název souboru 255 znaků, délka cesty 32K znaků, velikost souboru i oddílu 35 PB (NTFS 256 TB)&lt;br /&gt;
* Podpora: BitLocker, Junctions (soft-links), hard-links, ACL, žurnál, trim&lt;br /&gt;
&lt;br /&gt;
; Podpora v&amp;amp;nbsp;jiných OS:&lt;br /&gt;
* Linux: placený ovladač od Paragon Software, svobodné ovladače https://github.com/unsound/refsprogs, ale podpora s nimi může být omezená.&lt;br /&gt;
* macOS: podpora zatím není &amp;amp;mdash; lze data sdílet přes síťový disk&lt;br /&gt;
&lt;br /&gt;
== ext2/ext3/ext4 ==&lt;br /&gt;
* Rozšíření původního systému &amp;lt;tt&amp;gt;ext&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Implementovány v Unixových systémech, standardní volba pro většinu linuxových distribucí.&lt;br /&gt;
* Vzájemně kompatibilní.&lt;br /&gt;
; ext3&lt;br /&gt;
* Zpětně kompatibilní s ext2.&lt;br /&gt;
* Přidává žurnálování.&lt;br /&gt;
* Podporuje POSIX ACL (Access Control Lists).&lt;br /&gt;
* Není klasická defragmentace.&lt;br /&gt;
* Kontrola disku (&amp;lt;code&amp;gt;fsck&amp;lt;/code&amp;gt;) jen v režimu read-only (viz [[Nástroje_pro_práci_s_diskem#Kontrola_souborového_systému|Nástroje pro práci s diskem]]).&lt;br /&gt;
* Není transparentní komprese.&lt;br /&gt;
* Viz také [http://en.wikipedia.org/wiki/Ext3 Wikipedia.org &amp;gt; Ext3]&lt;br /&gt;
; ext4&lt;br /&gt;
* Dnes nativní pro běžné uživatelské distribuce Linuxu&lt;br /&gt;
* Žurnálování lze volitelně vypnout pomocí &amp;lt;code&amp;gt;tune4fs&amp;lt;/code&amp;gt;.&lt;br /&gt;
; Porovnání:&lt;br /&gt;
* [http://www.thegeekstuff.com/2011/05/ext2-ext3-ext4/ TheGeekStuff.com &amp;amp;rarr; ext2 &amp;amp;mdash; ext3 &amp;amp;mdash; ext4]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== btrfs ==&lt;br /&gt;
* Pokročilý souborový systém pro GNU/Linux, Solaris,...&lt;br /&gt;
* Distribuce Fedora používá btrfs jakou výchozí volbu od verze Fedora 33 (rok 2020)&lt;br /&gt;
* Subvoluming&lt;br /&gt;
** Jeden FS může být rozprostřen přes více fyzických zařízení.&lt;br /&gt;
** Prostor (raw storage) rozdělen na úseky (např. 1GB), které se pak spojují do subvolumes.&lt;br /&gt;
** Nahrazuje LVM (Logical Volume Manager) a ZFS.&lt;br /&gt;
* Snapshots (snímky disku)&lt;br /&gt;
** Ukládání současného stavu disku a změn oproti tomuto stavu.&lt;br /&gt;
* Copy on write&lt;br /&gt;
** Vytváření kopie svazku při současné práci se svazkem.&lt;br /&gt;
* https://btrfs.wiki.kernel.org/index.php/Main_Page&lt;br /&gt;
* Vyvinut firmou Oracle, dnes GPL.&lt;br /&gt;
; Vlastnosti:&lt;br /&gt;
* Velikost souboru až 2^64 B ~ 16 EiB&lt;br /&gt;
* Dynamic i-node allocation&lt;br /&gt;
* Podpora svazků (volumes) a RAID vestavěná ve FS&lt;br /&gt;
** RAID 0, 1 a 10&lt;br /&gt;
** chystá se RAID 5 a 6&lt;br /&gt;
* Kontrolní součty (checksumming)&lt;br /&gt;
* Body obnovení (snapshotting) &amp;amp;mdash; uchová stav systému před rizikovou operací.&lt;br /&gt;
* On-line defragmentation.&lt;br /&gt;
&lt;br /&gt;
== APFS (HFS+) ==&lt;br /&gt;
* Apple File System (APFS)&lt;br /&gt;
* Souborový systém pro operační systém macOS&lt;br /&gt;
* Počítače Apple&lt;br /&gt;
* Starší verze macOS (před rokem 2017) používaly starší souborový systém HFS+.&lt;br /&gt;
* Proprietární Apple, částečná specifikace je zvěřejněna a umožňuje čtení z nešifrovaných úložišť.&lt;br /&gt;
* Pro uložení informací o rozdělení disku využívá GPT.&lt;br /&gt;
* Využívá ''firmlink'' &amp;amp;mdash; na rozdíl od hard linků z&amp;amp;nbsp;Linuxu může odkazovat na jiné disky.&lt;br /&gt;
* Umožňuje klonování souborů místo klasické kopie (data zůstávají na disku jen jednou, systém sleduje pouze změny v jednotlivých souborech. Klonování se automaticky použije ve Finderu, u příkazu &amp;lt;code&amp;gt;cp&amp;lt;/code&amp;gt; je třeba použít přepínač &amp;lt;code&amp;gt;-c&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Podporuje šifrování celého disku i jednotlivých souborů, kompresy a sdílení volného místa mezi jednotlivými oddíly (volumes).&lt;br /&gt;
* Místo žurnálování používá ''redirect-on-write'' &amp;amp;mdash; při zápisu do souboru se vytvoří nová metadata v&amp;amp;nbsp;novém inode a posléze se upraví odkaz. Původní metadata se označí jako nevyužitá.&lt;br /&gt;
* Nedoporučuje se pro používání na klasických HDD (plotnových).&lt;br /&gt;
* Existují ovladače třetích stran pro Windows (placené) a Linux (svobodné) s&amp;amp;nbsp;částečně omezenou podporou.&lt;br /&gt;
&lt;br /&gt;
== swap ==&lt;br /&gt;
*Pro odkládání nepotřebných paměťových bloků na disk.&lt;br /&gt;
*Pod Windows se řeší speciálním souborem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== proc ==&lt;br /&gt;
*Pouze virtuální FS.&lt;br /&gt;
*Slouží k práci s procesy.&lt;br /&gt;
&lt;br /&gt;
== Zdroje ==&lt;br /&gt;
* Resilient File System (ReFS) overview. Microsoft Learn [online]. Microsoft, 15.2.2023 [cit. 2023-05-07]. Dostupné z: [https://learn.microsoft.com/en-us/windows-server/storage/refs/refs-overview https://learn.microsoft.com/en-us/windows-server/storage/refs/refs-overview]&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/P%C5%99%C3%ADklady_souborov%C3%BDch_syst%C3%A9m%C5%AF</id>
		<title>Příklady souborových systémů</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/P%C5%99%C3%ADklady_souborov%C3%BDch_syst%C3%A9m%C5%AF"/>
				<updated>2026-04-15T07:09:02Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: /* NTFS */ Podpora v jiných OS jako samostatný odstavec + doplněn Paragon Software.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]][[Category:OSY]][[Category:Ukládání_dat]]&lt;br /&gt;
&lt;br /&gt;
== NTFS ==&lt;br /&gt;
* Zaveden ve Windows NT.&lt;br /&gt;
* Podpora šifrování, komprese.&lt;br /&gt;
* Obvykle menší clustery než u FAT32.&lt;br /&gt;
* Názvy souborů v UTF8.&lt;br /&gt;
* Existuje více verzí, aktuální verze NTFS v. 3.1 (od Windows 2000), navíc se liší i verze ovladače NTFS.sys (pro Windows Vista a vyšší verze 6.0).&lt;br /&gt;
&lt;br /&gt;
; Podpora v&amp;amp;nbsp;jiných OS: &lt;br /&gt;
* Specifikace NTFS není oficiálně publikována &amp;amp;mdash; podpora v&amp;amp;nbsp;jiných OS nemusí zahrnovat všechny vlastnosti.&lt;br /&gt;
** V&amp;amp;nbsp;GNU/Linuxu lze ve většině distribucí bez problémů číst, zápis funguje obvykle také, ale je obvykle potřeba povolit zápis v&amp;amp;nbsp;nastavení.&lt;br /&gt;
** V&amp;amp;nbsp;macOSu by čtení mělo být bez rozšíření, pro zápis je potřeba placené ovladače třetích stran (Paragon Software a další).&lt;br /&gt;
* Problémy s fragmentací, nutná pravidelná [[Defragmentace|defragmentace]]. (Ve Windows 7 a novějších se defragmentace spouští automaticky.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Poznamka&amp;quot;&amp;gt;&lt;br /&gt;
Verzi NTFS zjistíte příkazem: &lt;br /&gt;
 fsutil fsinfo ntfsinfo c:&lt;br /&gt;
&lt;br /&gt;
(Spusťte příkazový řádek jako správce: ''Start &amp;amp;rarr; cmd &amp;amp;rarr; pravé tlačítko &amp;amp;rarr; Spustit jako správce''!)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Zdroje&lt;br /&gt;
* [http://www.thomasmaurer.ch/2011/05/check-ntfs-version/ http://www.thomasmaurer.ch/2011/05/check-ntfs-version/]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/NTFS#Versions http://en.wikipedia.org/wiki/NTFS#Versions]&lt;br /&gt;
* [https://technet.microsoft.com/en-us/library/cc781134%28v=ws.10%29.aspx https://technet.microsoft.com/en-us/library/cc781134%28v=ws.10%29.aspx]&lt;br /&gt;
&lt;br /&gt;
== FAT/FAT32/exFAT ==&lt;br /&gt;
* Pochází z MS-DOSu resp. Windows 95.&lt;br /&gt;
* Dnes se používá obvykle jen na paměťových kartách a flash discích.&lt;br /&gt;
&lt;br /&gt;
; FAT(16)&lt;br /&gt;
* Dnes již historický (omezení velikosti oddílu).&lt;br /&gt;
* Názvy souborů 8+3 znaky, bez podpory diakritiky.&lt;br /&gt;
* Byl určený pro diskety, dnes se již nepoužívá.&lt;br /&gt;
&lt;br /&gt;
; FAT32&lt;br /&gt;
* Delší jména souborů než u FAT.&lt;br /&gt;
* Soubory velikosti max. 4&amp;amp;nbsp;GB na 64-bitových systémech (max. 2&amp;amp;nbsp;GB na 32-bitových systémech).&lt;br /&gt;
* Limit celkové velikosti souborového systému je teoreticky až 2&amp;amp;nbsp;TB při velikosti sektoru 512 B. Standardní nástroj pro formátování disků ve starších Windows limituje maximální velikost oddílu FAT32 na 32&amp;amp;nbsp;GB. V&amp;amp;nbsp;novějších verzích Windows 11 už je toto omezení odstraněno, ale stejně se pro disky přes 32&amp;amp;nbsp;GBdoporučuje použít raději exFAT.&lt;br /&gt;
* Zastaralý &amp;amp;mdash; princip zůstává stejný jako u FAT16.&lt;br /&gt;
* Náchylný k chybám, nemá žurnálování.&lt;br /&gt;
* Široká podpora (HW zařízení, operační systémy,...).&lt;br /&gt;
* Jednoduchý na implementaci.&lt;br /&gt;
&lt;br /&gt;
; exFAT&lt;br /&gt;
* Původně proprietární FS Microsoftu, v&amp;amp;nbsp;roce 2019 specifikace zveřejněna.&lt;br /&gt;
* Podpora se průběžně zlepšuje: &lt;br /&gt;
** Linux kernel od verze 5.4 (pro srovnání v&amp;amp;nbsp;2021 aktuální verze Debian 10 používá kernel 4.19, Ubuntu 20.04 LTS používá kernel 5.4.8), &lt;br /&gt;
** Mac OS X od verze 10.6.5 (uvolněno v&amp;amp;nbsp;roce 2010), &lt;br /&gt;
** v&amp;amp;nbsp;roce 2021 některá mobilní zařízení.&lt;br /&gt;
* Má sloužit jako náhrada FAT32 pro flash-disky.&lt;br /&gt;
* Rozšiřuje FAT32.&lt;br /&gt;
* Odstraňuje omezení velikosti souboru.&lt;br /&gt;
* Výchozí souborový systém po SDXC karty větší než 32&amp;amp;nbsp;GB.&lt;br /&gt;
* Může podporovat žurnálování, pokud to povolíme.&lt;br /&gt;
&lt;br /&gt;
== ReFS ==&lt;br /&gt;
* ''Resilient File System''&lt;br /&gt;
* Nový pokročilý souborový systém Microsoftu.&lt;br /&gt;
* Zatím používán pro Windows Server 2016 a 2022 (rok 2023).&lt;br /&gt;
* Důraz na spolehlivost a výkon&lt;br /&gt;
** Umí nahradit RAID &amp;amp;mdash; zrcadlení dat (mirroring): rychlejší přístup a možnost opravy při chybě HW.&lt;br /&gt;
** Automatická průběžná kontrola dat &amp;amp;mdash; nejen při čtení, ale i kontrola dat, se kterými se nepracuje (''scrubber'').&lt;br /&gt;
** Optimalizován pro vysoký výkon i u velikých disků (miliony terabyte apod.&lt;br /&gt;
* Podora pro virtuální stroje:&lt;br /&gt;
** Rychlé vytváření souborů obsahujících samé nuly (při vytváření virtuálních disků s&amp;amp;nbsp;fixní velikostí).&lt;br /&gt;
** Rychlé kopírování celých bloků (snímky virtuálních strojů)&lt;br /&gt;
* Limity: název souboru 255 znaků, délka cesty 32K znaků, velikost souboru i oddílu 35 PB (NTFS 256 TB)&lt;br /&gt;
* Podpora: BitLocker, Junctions (soft-links), hard-links, ACL, žurnál, trim&lt;br /&gt;
&lt;br /&gt;
; Podpora v&amp;amp;nbsp;jiných OS:&lt;br /&gt;
* Linux: placený ovladač od Paragon Software, svobodné ovladače https://github.com/unsound/refsprogs, ale podpora s nimi může být omezená.&lt;br /&gt;
* macOS: podpora zatím není &amp;amp;mdash; lze data sdílet přes síťový disk&lt;br /&gt;
&lt;br /&gt;
== ext2/ext3/ext4 ==&lt;br /&gt;
* Rozšíření původního systému &amp;lt;tt&amp;gt;ext&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Implementovány v Unixových systémech, standardní volba pro většinu linuxových distribucí.&lt;br /&gt;
* Vzájemně kompatibilní.&lt;br /&gt;
; ext3&lt;br /&gt;
* Zpětně kompatibilní s ext2.&lt;br /&gt;
* Přidává žurnálování.&lt;br /&gt;
* Podporuje POSIX ACL (Access Control Lists).&lt;br /&gt;
* Není klasická defragmentace.&lt;br /&gt;
* Kontrola disku (&amp;lt;code&amp;gt;fsck&amp;lt;/code&amp;gt;) jen v režimu read-only (viz [[Nástroje_pro_práci_s_diskem#Kontrola_souborového_systému|Nástroje pro práci s diskem]]).&lt;br /&gt;
* Není transparentní komprese.&lt;br /&gt;
* Viz také [http://en.wikipedia.org/wiki/Ext3 Wikipedia.org &amp;gt; Ext3]&lt;br /&gt;
; ext4&lt;br /&gt;
* Dnes nativní pro běžné uživatelské distribuce Linuxu&lt;br /&gt;
* Žurnálování lze volitelně vypnout pomocí &amp;lt;code&amp;gt;tune4fs&amp;lt;/code&amp;gt;.&lt;br /&gt;
; Porovnání:&lt;br /&gt;
* [http://www.thegeekstuff.com/2011/05/ext2-ext3-ext4/ TheGeekStuff.com &amp;amp;rarr; ext2 &amp;amp;mdash; ext3 &amp;amp;mdash; ext4]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== btrfs ==&lt;br /&gt;
* Pokročilý souborový systém pro GNU/Linux, Solaris,...&lt;br /&gt;
* Distribuce Fedora používá btrfs jakou výchozí volbu od verze Fedora 33 (rok 2020)&lt;br /&gt;
* Subvoluming&lt;br /&gt;
** Jeden FS může být rozprostřen přes více fyzických zařízení.&lt;br /&gt;
** Prostor (raw storage) rozdělen na úseky (např. 1GB), které se pak spojují do subvolumes.&lt;br /&gt;
** Nahrazuje LVM (Logical Volume Manager) a ZFS.&lt;br /&gt;
* Snapshots (snímky disku)&lt;br /&gt;
** Ukládání současného stavu disku a změn oproti tomuto stavu.&lt;br /&gt;
* Copy on write&lt;br /&gt;
** Vytváření kopie svazku při současné práci se svazkem.&lt;br /&gt;
* https://btrfs.wiki.kernel.org/index.php/Main_Page&lt;br /&gt;
* Vyvinut firmou Oracle, dnes GPL.&lt;br /&gt;
; Vlastnosti:&lt;br /&gt;
* Velikost souboru až 2^64 B ~ 16 EiB&lt;br /&gt;
* Dynamic i-node allocation&lt;br /&gt;
* Podpora svazků (volumes) a RAID vestavěná ve FS&lt;br /&gt;
** RAID 0, 1 a 10&lt;br /&gt;
** chystá se RAID 5 a 6&lt;br /&gt;
* Kontrolní součty (checksumming)&lt;br /&gt;
* Body obnovení (snapshotting) &amp;amp;mdash; uchová stav systému před rizikovou operací.&lt;br /&gt;
* On-line defragmentation.&lt;br /&gt;
&lt;br /&gt;
== APFS (HFS+) ==&lt;br /&gt;
* Apple File System (APFS)&lt;br /&gt;
* Souborový systém pro operační systém macOS&lt;br /&gt;
* Počítače Apple&lt;br /&gt;
* Starší verze macOS (před rokem 2017) používaly starší souborový systém HFS+.&lt;br /&gt;
* Proprietární Apple, částečná specifikace je zvěřejněna a umožňuje čtení z nešifrovaných úložišť.&lt;br /&gt;
* Pro uložení informací o rozdělení disku využívá GPT.&lt;br /&gt;
* Využívá ''firmlink'' &amp;amp;mdash; na rozdíl od hard linků z&amp;amp;nbsp;Linuxu může odkazovat na jiné disky.&lt;br /&gt;
* Umožňuje klonování souborů místo klasické kopie (data zůstávají na disku jen jednou, systém sleduje pouze změny v jednotlivých souborech. Klonování se automaticky použije ve Finderu, u příkazu &amp;lt;code&amp;gt;cp&amp;lt;/code&amp;gt; je třeba použít přepínač &amp;lt;code&amp;gt;-c&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Podporuje šifrování celého disku i jednotlivých souborů, kompresy a sdílení volného místa mezi jednotlivými oddíly (volumes).&lt;br /&gt;
* Místo žurnálování používá ''redirect-on-write'' &amp;amp;mdash; při zápisu do souboru se vytvoří nová metadata v&amp;amp;nbsp;novém inode a posléze se upraví odkaz. Původní metadata se označí jako nevyužitá.&lt;br /&gt;
* Nedoporučuje se pro používání na klasických HDD (plotnových).&lt;br /&gt;
* Existují ovladače třetích stran pro Windows (placené) a Linux (svobodné) s&amp;amp;nbsp;částečně omezenou podporou.&lt;br /&gt;
&lt;br /&gt;
== swap ==&lt;br /&gt;
*Pro odkládání nepotřebných paměťových bloků na disk.&lt;br /&gt;
*Pod Windows se řeší speciálním souborem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== proc ==&lt;br /&gt;
*Pouze virtuální FS.&lt;br /&gt;
*Slouží k práci s procesy.&lt;br /&gt;
&lt;br /&gt;
== Zdroje ==&lt;br /&gt;
* Resilient File System (ReFS) overview. Microsoft Learn [online]. Microsoft, 15.2.2023 [cit. 2023-05-07]. Dostupné z: [https://learn.microsoft.com/en-us/windows-server/storage/refs/refs-overview https://learn.microsoft.com/en-us/windows-server/storage/refs/refs-overview]&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/P%C5%99%C3%ADklady_souborov%C3%BDch_syst%C3%A9m%C5%AF</id>
		<title>Příklady souborových systémů</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/P%C5%99%C3%ADklady_souborov%C3%BDch_syst%C3%A9m%C5%AF"/>
				<updated>2026-04-15T07:01:58Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: /* ReFS */ Doplnění podpory v jiných OS.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]][[Category:OSY]][[Category:Ukládání_dat]]&lt;br /&gt;
&lt;br /&gt;
== NTFS ==&lt;br /&gt;
* Zaveden ve Windows NT.&lt;br /&gt;
* Podpora šifrování, komprese.&lt;br /&gt;
* Obvykle menší clustery než u FAT32.&lt;br /&gt;
* Názvy souborů v UTF8.&lt;br /&gt;
* Existuje více verzí, aktuální verze NTFS v. 3.1 (od Windows 2000), navíc se liší i verze ovladače NTFS.sys (pro Windows Vista a vyšší verze 6.0).&lt;br /&gt;
* Problematická podpora mimo Windows: specifikace není oficiálně publikována.&lt;br /&gt;
** V&amp;amp;nbsp;GNU/Linuxu lze ve většině distribucí bez problémů číst, zápis funguje obvykle také, ale je třeba povolit v&amp;amp;nbsp;nastavení.&lt;br /&gt;
** V&amp;amp;nbsp;macOSu by čtení mělo být bez rozšíření, pro zápis je potřeba placené ovladače třetích stran.&lt;br /&gt;
* Problémy s fragmentací, nutná pravidelná [[Defragmentace|defragmentace]]. (Ve Windows 7 a novějších se defragmentace spouští automaticky.)&lt;br /&gt;
&amp;lt;div class=&amp;quot;Poznamka&amp;quot;&amp;gt;&lt;br /&gt;
Verzi NTFS zjistíte příkazem: &lt;br /&gt;
 fsutil fsinfo ntfsinfo c:&lt;br /&gt;
&lt;br /&gt;
(Spusťte příkazový řádek jako správce: ''Start &amp;amp;rarr; cmd &amp;amp;rarr; pravé tlačítko &amp;amp;rarr; Spustit jako správce''!)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Zdroje&lt;br /&gt;
* [http://www.thomasmaurer.ch/2011/05/check-ntfs-version/ http://www.thomasmaurer.ch/2011/05/check-ntfs-version/]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/NTFS#Versions http://en.wikipedia.org/wiki/NTFS#Versions]&lt;br /&gt;
* [https://technet.microsoft.com/en-us/library/cc781134%28v=ws.10%29.aspx https://technet.microsoft.com/en-us/library/cc781134%28v=ws.10%29.aspx]&lt;br /&gt;
&lt;br /&gt;
== FAT/FAT32/exFAT ==&lt;br /&gt;
* Pochází z MS-DOSu resp. Windows 95.&lt;br /&gt;
* Dnes se používá obvykle jen na paměťových kartách a flash discích.&lt;br /&gt;
&lt;br /&gt;
; FAT(16)&lt;br /&gt;
* Dnes již historický (omezení velikosti oddílu).&lt;br /&gt;
* Názvy souborů 8+3 znaky, bez podpory diakritiky.&lt;br /&gt;
* Byl určený pro diskety, dnes se již nepoužívá.&lt;br /&gt;
&lt;br /&gt;
; FAT32&lt;br /&gt;
* Delší jména souborů než u FAT.&lt;br /&gt;
* Soubory velikosti max. 4&amp;amp;nbsp;GB na 64-bitových systémech (max. 2&amp;amp;nbsp;GB na 32-bitových systémech).&lt;br /&gt;
* Limit celkové velikosti souborového systému je teoreticky až 2&amp;amp;nbsp;TB při velikosti sektoru 512 B. Standardní nástroj pro formátování disků ve starších Windows limituje maximální velikost oddílu FAT32 na 32&amp;amp;nbsp;GB. V&amp;amp;nbsp;novějších verzích Windows 11 už je toto omezení odstraněno, ale stejně se pro disky přes 32&amp;amp;nbsp;GBdoporučuje použít raději exFAT.&lt;br /&gt;
* Zastaralý &amp;amp;mdash; princip zůstává stejný jako u FAT16.&lt;br /&gt;
* Náchylný k chybám, nemá žurnálování.&lt;br /&gt;
* Široká podpora (HW zařízení, operační systémy,...).&lt;br /&gt;
* Jednoduchý na implementaci.&lt;br /&gt;
&lt;br /&gt;
; exFAT&lt;br /&gt;
* Původně proprietární FS Microsoftu, v&amp;amp;nbsp;roce 2019 specifikace zveřejněna.&lt;br /&gt;
* Podpora se průběžně zlepšuje: &lt;br /&gt;
** Linux kernel od verze 5.4 (pro srovnání v&amp;amp;nbsp;2021 aktuální verze Debian 10 používá kernel 4.19, Ubuntu 20.04 LTS používá kernel 5.4.8), &lt;br /&gt;
** Mac OS X od verze 10.6.5 (uvolněno v&amp;amp;nbsp;roce 2010), &lt;br /&gt;
** v&amp;amp;nbsp;roce 2021 některá mobilní zařízení.&lt;br /&gt;
* Má sloužit jako náhrada FAT32 pro flash-disky.&lt;br /&gt;
* Rozšiřuje FAT32.&lt;br /&gt;
* Odstraňuje omezení velikosti souboru.&lt;br /&gt;
* Výchozí souborový systém po SDXC karty větší než 32&amp;amp;nbsp;GB.&lt;br /&gt;
* Může podporovat žurnálování, pokud to povolíme.&lt;br /&gt;
&lt;br /&gt;
== ReFS ==&lt;br /&gt;
* ''Resilient File System''&lt;br /&gt;
* Nový pokročilý souborový systém Microsoftu.&lt;br /&gt;
* Zatím používán pro Windows Server 2016 a 2022 (rok 2023).&lt;br /&gt;
* Důraz na spolehlivost a výkon&lt;br /&gt;
** Umí nahradit RAID &amp;amp;mdash; zrcadlení dat (mirroring): rychlejší přístup a možnost opravy při chybě HW.&lt;br /&gt;
** Automatická průběžná kontrola dat &amp;amp;mdash; nejen při čtení, ale i kontrola dat, se kterými se nepracuje (''scrubber'').&lt;br /&gt;
** Optimalizován pro vysoký výkon i u velikých disků (miliony terabyte apod.&lt;br /&gt;
* Podora pro virtuální stroje:&lt;br /&gt;
** Rychlé vytváření souborů obsahujících samé nuly (při vytváření virtuálních disků s&amp;amp;nbsp;fixní velikostí).&lt;br /&gt;
** Rychlé kopírování celých bloků (snímky virtuálních strojů)&lt;br /&gt;
* Limity: název souboru 255 znaků, délka cesty 32K znaků, velikost souboru i oddílu 35 PB (NTFS 256 TB)&lt;br /&gt;
* Podpora: BitLocker, Junctions (soft-links), hard-links, ACL, žurnál, trim&lt;br /&gt;
&lt;br /&gt;
; Podpora v&amp;amp;nbsp;jiných OS:&lt;br /&gt;
* Linux: placený ovladač od Paragon Software, svobodné ovladače https://github.com/unsound/refsprogs, ale podpora s nimi může být omezená.&lt;br /&gt;
* macOS: podpora zatím není &amp;amp;mdash; lze data sdílet přes síťový disk&lt;br /&gt;
&lt;br /&gt;
== ext2/ext3/ext4 ==&lt;br /&gt;
* Rozšíření původního systému &amp;lt;tt&amp;gt;ext&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Implementovány v Unixových systémech, standardní volba pro většinu linuxových distribucí.&lt;br /&gt;
* Vzájemně kompatibilní.&lt;br /&gt;
; ext3&lt;br /&gt;
* Zpětně kompatibilní s ext2.&lt;br /&gt;
* Přidává žurnálování.&lt;br /&gt;
* Podporuje POSIX ACL (Access Control Lists).&lt;br /&gt;
* Není klasická defragmentace.&lt;br /&gt;
* Kontrola disku (&amp;lt;code&amp;gt;fsck&amp;lt;/code&amp;gt;) jen v režimu read-only (viz [[Nástroje_pro_práci_s_diskem#Kontrola_souborového_systému|Nástroje pro práci s diskem]]).&lt;br /&gt;
* Není transparentní komprese.&lt;br /&gt;
* Viz také [http://en.wikipedia.org/wiki/Ext3 Wikipedia.org &amp;gt; Ext3]&lt;br /&gt;
; ext4&lt;br /&gt;
* Dnes nativní pro běžné uživatelské distribuce Linuxu&lt;br /&gt;
* Žurnálování lze volitelně vypnout pomocí &amp;lt;code&amp;gt;tune4fs&amp;lt;/code&amp;gt;.&lt;br /&gt;
; Porovnání:&lt;br /&gt;
* [http://www.thegeekstuff.com/2011/05/ext2-ext3-ext4/ TheGeekStuff.com &amp;amp;rarr; ext2 &amp;amp;mdash; ext3 &amp;amp;mdash; ext4]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== btrfs ==&lt;br /&gt;
* Pokročilý souborový systém pro GNU/Linux, Solaris,...&lt;br /&gt;
* Distribuce Fedora používá btrfs jakou výchozí volbu od verze Fedora 33 (rok 2020)&lt;br /&gt;
* Subvoluming&lt;br /&gt;
** Jeden FS může být rozprostřen přes více fyzických zařízení.&lt;br /&gt;
** Prostor (raw storage) rozdělen na úseky (např. 1GB), které se pak spojují do subvolumes.&lt;br /&gt;
** Nahrazuje LVM (Logical Volume Manager) a ZFS.&lt;br /&gt;
* Snapshots (snímky disku)&lt;br /&gt;
** Ukládání současného stavu disku a změn oproti tomuto stavu.&lt;br /&gt;
* Copy on write&lt;br /&gt;
** Vytváření kopie svazku při současné práci se svazkem.&lt;br /&gt;
* https://btrfs.wiki.kernel.org/index.php/Main_Page&lt;br /&gt;
* Vyvinut firmou Oracle, dnes GPL.&lt;br /&gt;
; Vlastnosti:&lt;br /&gt;
* Velikost souboru až 2^64 B ~ 16 EiB&lt;br /&gt;
* Dynamic i-node allocation&lt;br /&gt;
* Podpora svazků (volumes) a RAID vestavěná ve FS&lt;br /&gt;
** RAID 0, 1 a 10&lt;br /&gt;
** chystá se RAID 5 a 6&lt;br /&gt;
* Kontrolní součty (checksumming)&lt;br /&gt;
* Body obnovení (snapshotting) &amp;amp;mdash; uchová stav systému před rizikovou operací.&lt;br /&gt;
* On-line defragmentation.&lt;br /&gt;
&lt;br /&gt;
== APFS (HFS+) ==&lt;br /&gt;
* Apple File System (APFS)&lt;br /&gt;
* Souborový systém pro operační systém macOS&lt;br /&gt;
* Počítače Apple&lt;br /&gt;
* Starší verze macOS (před rokem 2017) používaly starší souborový systém HFS+.&lt;br /&gt;
* Proprietární Apple, částečná specifikace je zvěřejněna a umožňuje čtení z nešifrovaných úložišť.&lt;br /&gt;
* Pro uložení informací o rozdělení disku využívá GPT.&lt;br /&gt;
* Využívá ''firmlink'' &amp;amp;mdash; na rozdíl od hard linků z&amp;amp;nbsp;Linuxu může odkazovat na jiné disky.&lt;br /&gt;
* Umožňuje klonování souborů místo klasické kopie (data zůstávají na disku jen jednou, systém sleduje pouze změny v jednotlivých souborech. Klonování se automaticky použije ve Finderu, u příkazu &amp;lt;code&amp;gt;cp&amp;lt;/code&amp;gt; je třeba použít přepínač &amp;lt;code&amp;gt;-c&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Podporuje šifrování celého disku i jednotlivých souborů, kompresy a sdílení volného místa mezi jednotlivými oddíly (volumes).&lt;br /&gt;
* Místo žurnálování používá ''redirect-on-write'' &amp;amp;mdash; při zápisu do souboru se vytvoří nová metadata v&amp;amp;nbsp;novém inode a posléze se upraví odkaz. Původní metadata se označí jako nevyužitá.&lt;br /&gt;
* Nedoporučuje se pro používání na klasických HDD (plotnových).&lt;br /&gt;
* Existují ovladače třetích stran pro Windows (placené) a Linux (svobodné) s&amp;amp;nbsp;částečně omezenou podporou.&lt;br /&gt;
&lt;br /&gt;
== swap ==&lt;br /&gt;
*Pro odkládání nepotřebných paměťových bloků na disk.&lt;br /&gt;
*Pod Windows se řeší speciálním souborem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== proc ==&lt;br /&gt;
*Pouze virtuální FS.&lt;br /&gt;
*Slouží k práci s procesy.&lt;br /&gt;
&lt;br /&gt;
== Zdroje ==&lt;br /&gt;
* Resilient File System (ReFS) overview. Microsoft Learn [online]. Microsoft, 15.2.2023 [cit. 2023-05-07]. Dostupné z: [https://learn.microsoft.com/en-us/windows-server/storage/refs/refs-overview https://learn.microsoft.com/en-us/windows-server/storage/refs/refs-overview]&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/P%C5%99%C3%ADklady_souborov%C3%BDch_syst%C3%A9m%C5%AF</id>
		<title>Příklady souborových systémů</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/P%C5%99%C3%ADklady_souborov%C3%BDch_syst%C3%A9m%C5%AF"/>
				<updated>2026-04-15T06:49:49Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: /* btrfs */ Doplněno to, že je výchozí ve Fedoře, vypuštěny poznámky ke stavu v roce 2012.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]][[Category:OSY]][[Category:Ukládání_dat]]&lt;br /&gt;
&lt;br /&gt;
== NTFS ==&lt;br /&gt;
* Zaveden ve Windows NT.&lt;br /&gt;
* Podpora šifrování, komprese.&lt;br /&gt;
* Obvykle menší clustery než u FAT32.&lt;br /&gt;
* Názvy souborů v UTF8.&lt;br /&gt;
* Existuje více verzí, aktuální verze NTFS v. 3.1 (od Windows 2000), navíc se liší i verze ovladače NTFS.sys (pro Windows Vista a vyšší verze 6.0).&lt;br /&gt;
* Problematická podpora mimo Windows: specifikace není oficiálně publikována.&lt;br /&gt;
** V&amp;amp;nbsp;GNU/Linuxu lze ve většině distribucí bez problémů číst, zápis funguje obvykle také, ale je třeba povolit v&amp;amp;nbsp;nastavení.&lt;br /&gt;
** V&amp;amp;nbsp;macOSu by čtení mělo být bez rozšíření, pro zápis je potřeba placené ovladače třetích stran.&lt;br /&gt;
* Problémy s fragmentací, nutná pravidelná [[Defragmentace|defragmentace]]. (Ve Windows 7 a novějších se defragmentace spouští automaticky.)&lt;br /&gt;
&amp;lt;div class=&amp;quot;Poznamka&amp;quot;&amp;gt;&lt;br /&gt;
Verzi NTFS zjistíte příkazem: &lt;br /&gt;
 fsutil fsinfo ntfsinfo c:&lt;br /&gt;
&lt;br /&gt;
(Spusťte příkazový řádek jako správce: ''Start &amp;amp;rarr; cmd &amp;amp;rarr; pravé tlačítko &amp;amp;rarr; Spustit jako správce''!)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Zdroje&lt;br /&gt;
* [http://www.thomasmaurer.ch/2011/05/check-ntfs-version/ http://www.thomasmaurer.ch/2011/05/check-ntfs-version/]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/NTFS#Versions http://en.wikipedia.org/wiki/NTFS#Versions]&lt;br /&gt;
* [https://technet.microsoft.com/en-us/library/cc781134%28v=ws.10%29.aspx https://technet.microsoft.com/en-us/library/cc781134%28v=ws.10%29.aspx]&lt;br /&gt;
&lt;br /&gt;
== FAT/FAT32/exFAT ==&lt;br /&gt;
* Pochází z MS-DOSu resp. Windows 95.&lt;br /&gt;
* Dnes se používá obvykle jen na paměťových kartách a flash discích.&lt;br /&gt;
&lt;br /&gt;
; FAT(16)&lt;br /&gt;
* Dnes již historický (omezení velikosti oddílu).&lt;br /&gt;
* Názvy souborů 8+3 znaky, bez podpory diakritiky.&lt;br /&gt;
* Byl určený pro diskety, dnes se již nepoužívá.&lt;br /&gt;
&lt;br /&gt;
; FAT32&lt;br /&gt;
* Delší jména souborů než u FAT.&lt;br /&gt;
* Soubory velikosti max. 4&amp;amp;nbsp;GB na 64-bitových systémech (max. 2&amp;amp;nbsp;GB na 32-bitových systémech).&lt;br /&gt;
* Limit celkové velikosti souborového systému je teoreticky až 2&amp;amp;nbsp;TB při velikosti sektoru 512 B. Standardní nástroj pro formátování disků ve starších Windows limituje maximální velikost oddílu FAT32 na 32&amp;amp;nbsp;GB. V&amp;amp;nbsp;novějších verzích Windows 11 už je toto omezení odstraněno, ale stejně se pro disky přes 32&amp;amp;nbsp;GBdoporučuje použít raději exFAT.&lt;br /&gt;
* Zastaralý &amp;amp;mdash; princip zůstává stejný jako u FAT16.&lt;br /&gt;
* Náchylný k chybám, nemá žurnálování.&lt;br /&gt;
* Široká podpora (HW zařízení, operační systémy,...).&lt;br /&gt;
* Jednoduchý na implementaci.&lt;br /&gt;
&lt;br /&gt;
; exFAT&lt;br /&gt;
* Původně proprietární FS Microsoftu, v&amp;amp;nbsp;roce 2019 specifikace zveřejněna.&lt;br /&gt;
* Podpora se průběžně zlepšuje: &lt;br /&gt;
** Linux kernel od verze 5.4 (pro srovnání v&amp;amp;nbsp;2021 aktuální verze Debian 10 používá kernel 4.19, Ubuntu 20.04 LTS používá kernel 5.4.8), &lt;br /&gt;
** Mac OS X od verze 10.6.5 (uvolněno v&amp;amp;nbsp;roce 2010), &lt;br /&gt;
** v&amp;amp;nbsp;roce 2021 některá mobilní zařízení.&lt;br /&gt;
* Má sloužit jako náhrada FAT32 pro flash-disky.&lt;br /&gt;
* Rozšiřuje FAT32.&lt;br /&gt;
* Odstraňuje omezení velikosti souboru.&lt;br /&gt;
* Výchozí souborový systém po SDXC karty větší než 32&amp;amp;nbsp;GB.&lt;br /&gt;
* Může podporovat žurnálování, pokud to povolíme.&lt;br /&gt;
&lt;br /&gt;
== ReFS ==&lt;br /&gt;
* ''Resilient File System''&lt;br /&gt;
* Nový pokročilý souborový systém Microsoftu.&lt;br /&gt;
* Zatím používán pro Windows Server 2016 a 2022 (rok 2023).&lt;br /&gt;
* Důraz na spolehlivost a výkon&lt;br /&gt;
** Umí nahradit RAID &amp;amp;mdash; zrcadlení dat (mirroring): rychlejší přístup a možnost opravy při chybě HW.&lt;br /&gt;
** Automatická průběžná kontrola dat &amp;amp;mdash; nejen při čtení, ale i kontrola dat, se kterými se nepracuje (''scrubber'').&lt;br /&gt;
** Optimalizován pro vysoký výkon i u velikých disků (miliony terabyte apod.&lt;br /&gt;
* Podora pro virtuální stroje:&lt;br /&gt;
** Rychlé vytváření souborů obsahujících samé nuly (při vytváření virtuálních disků s&amp;amp;nbsp;fixní velikostí).&lt;br /&gt;
** Rychlé kopírování celých bloků (snímky virtuálních strojů)&lt;br /&gt;
* Limity: název souboru 255 znaků, délka cesty 32K znaků, velikost souboru i oddílu 35 PB (NTFS 256 TB)&lt;br /&gt;
* Podpora: BitLocker, Junctions (soft-links), hard-links, ACL, žurnál, trim&lt;br /&gt;
&lt;br /&gt;
== ext2/ext3/ext4 ==&lt;br /&gt;
* Rozšíření původního systému &amp;lt;tt&amp;gt;ext&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Implementovány v Unixových systémech, standardní volba pro většinu linuxových distribucí.&lt;br /&gt;
* Vzájemně kompatibilní.&lt;br /&gt;
; ext3&lt;br /&gt;
* Zpětně kompatibilní s ext2.&lt;br /&gt;
* Přidává žurnálování.&lt;br /&gt;
* Podporuje POSIX ACL (Access Control Lists).&lt;br /&gt;
* Není klasická defragmentace.&lt;br /&gt;
* Kontrola disku (&amp;lt;code&amp;gt;fsck&amp;lt;/code&amp;gt;) jen v režimu read-only (viz [[Nástroje_pro_práci_s_diskem#Kontrola_souborového_systému|Nástroje pro práci s diskem]]).&lt;br /&gt;
* Není transparentní komprese.&lt;br /&gt;
* Viz také [http://en.wikipedia.org/wiki/Ext3 Wikipedia.org &amp;gt; Ext3]&lt;br /&gt;
; ext4&lt;br /&gt;
* Dnes nativní pro běžné uživatelské distribuce Linuxu&lt;br /&gt;
* Žurnálování lze volitelně vypnout pomocí &amp;lt;code&amp;gt;tune4fs&amp;lt;/code&amp;gt;.&lt;br /&gt;
; Porovnání:&lt;br /&gt;
* [http://www.thegeekstuff.com/2011/05/ext2-ext3-ext4/ TheGeekStuff.com &amp;amp;rarr; ext2 &amp;amp;mdash; ext3 &amp;amp;mdash; ext4]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== btrfs ==&lt;br /&gt;
* Pokročilý souborový systém pro GNU/Linux, Solaris,...&lt;br /&gt;
* Distribuce Fedora používá btrfs jakou výchozí volbu od verze Fedora 33 (rok 2020)&lt;br /&gt;
* Subvoluming&lt;br /&gt;
** Jeden FS může být rozprostřen přes více fyzických zařízení.&lt;br /&gt;
** Prostor (raw storage) rozdělen na úseky (např. 1GB), které se pak spojují do subvolumes.&lt;br /&gt;
** Nahrazuje LVM (Logical Volume Manager) a ZFS.&lt;br /&gt;
* Snapshots (snímky disku)&lt;br /&gt;
** Ukládání současného stavu disku a změn oproti tomuto stavu.&lt;br /&gt;
* Copy on write&lt;br /&gt;
** Vytváření kopie svazku při současné práci se svazkem.&lt;br /&gt;
* https://btrfs.wiki.kernel.org/index.php/Main_Page&lt;br /&gt;
* Vyvinut firmou Oracle, dnes GPL.&lt;br /&gt;
; Vlastnosti:&lt;br /&gt;
* Velikost souboru až 2^64 B ~ 16 EiB&lt;br /&gt;
* Dynamic i-node allocation&lt;br /&gt;
* Podpora svazků (volumes) a RAID vestavěná ve FS&lt;br /&gt;
** RAID 0, 1 a 10&lt;br /&gt;
** chystá se RAID 5 a 6&lt;br /&gt;
* Kontrolní součty (checksumming)&lt;br /&gt;
* Body obnovení (snapshotting) &amp;amp;mdash; uchová stav systému před rizikovou operací.&lt;br /&gt;
* On-line defragmentation.&lt;br /&gt;
&lt;br /&gt;
== APFS (HFS+) ==&lt;br /&gt;
* Apple File System (APFS)&lt;br /&gt;
* Souborový systém pro operační systém macOS&lt;br /&gt;
* Počítače Apple&lt;br /&gt;
* Starší verze macOS (před rokem 2017) používaly starší souborový systém HFS+.&lt;br /&gt;
* Proprietární Apple, částečná specifikace je zvěřejněna a umožňuje čtení z nešifrovaných úložišť.&lt;br /&gt;
* Pro uložení informací o rozdělení disku využívá GPT.&lt;br /&gt;
* Využívá ''firmlink'' &amp;amp;mdash; na rozdíl od hard linků z&amp;amp;nbsp;Linuxu může odkazovat na jiné disky.&lt;br /&gt;
* Umožňuje klonování souborů místo klasické kopie (data zůstávají na disku jen jednou, systém sleduje pouze změny v jednotlivých souborech. Klonování se automaticky použije ve Finderu, u příkazu &amp;lt;code&amp;gt;cp&amp;lt;/code&amp;gt; je třeba použít přepínač &amp;lt;code&amp;gt;-c&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Podporuje šifrování celého disku i jednotlivých souborů, kompresy a sdílení volného místa mezi jednotlivými oddíly (volumes).&lt;br /&gt;
* Místo žurnálování používá ''redirect-on-write'' &amp;amp;mdash; při zápisu do souboru se vytvoří nová metadata v&amp;amp;nbsp;novém inode a posléze se upraví odkaz. Původní metadata se označí jako nevyužitá.&lt;br /&gt;
* Nedoporučuje se pro používání na klasických HDD (plotnových).&lt;br /&gt;
* Existují ovladače třetích stran pro Windows (placené) a Linux (svobodné) s&amp;amp;nbsp;částečně omezenou podporou.&lt;br /&gt;
&lt;br /&gt;
== swap ==&lt;br /&gt;
*Pro odkládání nepotřebných paměťových bloků na disk.&lt;br /&gt;
*Pod Windows se řeší speciálním souborem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== proc ==&lt;br /&gt;
*Pouze virtuální FS.&lt;br /&gt;
*Slouží k práci s procesy.&lt;br /&gt;
&lt;br /&gt;
== Zdroje ==&lt;br /&gt;
* Resilient File System (ReFS) overview. Microsoft Learn [online]. Microsoft, 15.2.2023 [cit. 2023-05-07]. Dostupné z: [https://learn.microsoft.com/en-us/windows-server/storage/refs/refs-overview https://learn.microsoft.com/en-us/windows-server/storage/refs/refs-overview]&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/P%C5%99%C3%ADklady_souborov%C3%BDch_syst%C3%A9m%C5%AF</id>
		<title>Příklady souborových systémů</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/P%C5%99%C3%ADklady_souborov%C3%BDch_syst%C3%A9m%C5%AF"/>
				<updated>2026-04-15T06:38:31Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: /* NTFS */ Doplněny informace o podpoře NTFS v jiných operačních systémech než Windows.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]][[Category:OSY]][[Category:Ukládání_dat]]&lt;br /&gt;
&lt;br /&gt;
== NTFS ==&lt;br /&gt;
* Zaveden ve Windows NT.&lt;br /&gt;
* Podpora šifrování, komprese.&lt;br /&gt;
* Obvykle menší clustery než u FAT32.&lt;br /&gt;
* Názvy souborů v UTF8.&lt;br /&gt;
* Existuje více verzí, aktuální verze NTFS v. 3.1 (od Windows 2000), navíc se liší i verze ovladače NTFS.sys (pro Windows Vista a vyšší verze 6.0).&lt;br /&gt;
* Problematická podpora mimo Windows: specifikace není oficiálně publikována.&lt;br /&gt;
** V&amp;amp;nbsp;GNU/Linuxu lze ve většině distribucí bez problémů číst, zápis funguje obvykle také, ale je třeba povolit v&amp;amp;nbsp;nastavení.&lt;br /&gt;
** V&amp;amp;nbsp;macOSu by čtení mělo být bez rozšíření, pro zápis je potřeba placené ovladače třetích stran.&lt;br /&gt;
* Problémy s fragmentací, nutná pravidelná [[Defragmentace|defragmentace]]. (Ve Windows 7 a novějších se defragmentace spouští automaticky.)&lt;br /&gt;
&amp;lt;div class=&amp;quot;Poznamka&amp;quot;&amp;gt;&lt;br /&gt;
Verzi NTFS zjistíte příkazem: &lt;br /&gt;
 fsutil fsinfo ntfsinfo c:&lt;br /&gt;
&lt;br /&gt;
(Spusťte příkazový řádek jako správce: ''Start &amp;amp;rarr; cmd &amp;amp;rarr; pravé tlačítko &amp;amp;rarr; Spustit jako správce''!)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Zdroje&lt;br /&gt;
* [http://www.thomasmaurer.ch/2011/05/check-ntfs-version/ http://www.thomasmaurer.ch/2011/05/check-ntfs-version/]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/NTFS#Versions http://en.wikipedia.org/wiki/NTFS#Versions]&lt;br /&gt;
* [https://technet.microsoft.com/en-us/library/cc781134%28v=ws.10%29.aspx https://technet.microsoft.com/en-us/library/cc781134%28v=ws.10%29.aspx]&lt;br /&gt;
&lt;br /&gt;
== FAT/FAT32/exFAT ==&lt;br /&gt;
* Pochází z MS-DOSu resp. Windows 95.&lt;br /&gt;
* Dnes se používá obvykle jen na paměťových kartách a flash discích.&lt;br /&gt;
&lt;br /&gt;
; FAT(16)&lt;br /&gt;
* Dnes již historický (omezení velikosti oddílu).&lt;br /&gt;
* Názvy souborů 8+3 znaky, bez podpory diakritiky.&lt;br /&gt;
* Byl určený pro diskety, dnes se již nepoužívá.&lt;br /&gt;
&lt;br /&gt;
; FAT32&lt;br /&gt;
* Delší jména souborů než u FAT.&lt;br /&gt;
* Soubory velikosti max. 4&amp;amp;nbsp;GB na 64-bitových systémech (max. 2&amp;amp;nbsp;GB na 32-bitových systémech).&lt;br /&gt;
* Limit celkové velikosti souborového systému je teoreticky až 2&amp;amp;nbsp;TB při velikosti sektoru 512 B. Standardní nástroj pro formátování disků ve starších Windows limituje maximální velikost oddílu FAT32 na 32&amp;amp;nbsp;GB. V&amp;amp;nbsp;novějších verzích Windows 11 už je toto omezení odstraněno, ale stejně se pro disky přes 32&amp;amp;nbsp;GBdoporučuje použít raději exFAT.&lt;br /&gt;
* Zastaralý &amp;amp;mdash; princip zůstává stejný jako u FAT16.&lt;br /&gt;
* Náchylný k chybám, nemá žurnálování.&lt;br /&gt;
* Široká podpora (HW zařízení, operační systémy,...).&lt;br /&gt;
* Jednoduchý na implementaci.&lt;br /&gt;
&lt;br /&gt;
; exFAT&lt;br /&gt;
* Původně proprietární FS Microsoftu, v&amp;amp;nbsp;roce 2019 specifikace zveřejněna.&lt;br /&gt;
* Podpora se průběžně zlepšuje: &lt;br /&gt;
** Linux kernel od verze 5.4 (pro srovnání v&amp;amp;nbsp;2021 aktuální verze Debian 10 používá kernel 4.19, Ubuntu 20.04 LTS používá kernel 5.4.8), &lt;br /&gt;
** Mac OS X od verze 10.6.5 (uvolněno v&amp;amp;nbsp;roce 2010), &lt;br /&gt;
** v&amp;amp;nbsp;roce 2021 některá mobilní zařízení.&lt;br /&gt;
* Má sloužit jako náhrada FAT32 pro flash-disky.&lt;br /&gt;
* Rozšiřuje FAT32.&lt;br /&gt;
* Odstraňuje omezení velikosti souboru.&lt;br /&gt;
* Výchozí souborový systém po SDXC karty větší než 32&amp;amp;nbsp;GB.&lt;br /&gt;
* Může podporovat žurnálování, pokud to povolíme.&lt;br /&gt;
&lt;br /&gt;
== ReFS ==&lt;br /&gt;
* ''Resilient File System''&lt;br /&gt;
* Nový pokročilý souborový systém Microsoftu.&lt;br /&gt;
* Zatím používán pro Windows Server 2016 a 2022 (rok 2023).&lt;br /&gt;
* Důraz na spolehlivost a výkon&lt;br /&gt;
** Umí nahradit RAID &amp;amp;mdash; zrcadlení dat (mirroring): rychlejší přístup a možnost opravy při chybě HW.&lt;br /&gt;
** Automatická průběžná kontrola dat &amp;amp;mdash; nejen při čtení, ale i kontrola dat, se kterými se nepracuje (''scrubber'').&lt;br /&gt;
** Optimalizován pro vysoký výkon i u velikých disků (miliony terabyte apod.&lt;br /&gt;
* Podora pro virtuální stroje:&lt;br /&gt;
** Rychlé vytváření souborů obsahujících samé nuly (při vytváření virtuálních disků s&amp;amp;nbsp;fixní velikostí).&lt;br /&gt;
** Rychlé kopírování celých bloků (snímky virtuálních strojů)&lt;br /&gt;
* Limity: název souboru 255 znaků, délka cesty 32K znaků, velikost souboru i oddílu 35 PB (NTFS 256 TB)&lt;br /&gt;
* Podpora: BitLocker, Junctions (soft-links), hard-links, ACL, žurnál, trim&lt;br /&gt;
&lt;br /&gt;
== ext2/ext3/ext4 ==&lt;br /&gt;
* Rozšíření původního systému &amp;lt;tt&amp;gt;ext&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Implementovány v Unixových systémech, standardní volba pro většinu linuxových distribucí.&lt;br /&gt;
* Vzájemně kompatibilní.&lt;br /&gt;
; ext3&lt;br /&gt;
* Zpětně kompatibilní s ext2.&lt;br /&gt;
* Přidává žurnálování.&lt;br /&gt;
* Podporuje POSIX ACL (Access Control Lists).&lt;br /&gt;
* Není klasická defragmentace.&lt;br /&gt;
* Kontrola disku (&amp;lt;code&amp;gt;fsck&amp;lt;/code&amp;gt;) jen v režimu read-only (viz [[Nástroje_pro_práci_s_diskem#Kontrola_souborového_systému|Nástroje pro práci s diskem]]).&lt;br /&gt;
* Není transparentní komprese.&lt;br /&gt;
* Viz také [http://en.wikipedia.org/wiki/Ext3 Wikipedia.org &amp;gt; Ext3]&lt;br /&gt;
; ext4&lt;br /&gt;
* Dnes nativní pro běžné uživatelské distribuce Linuxu&lt;br /&gt;
* Žurnálování lze volitelně vypnout pomocí &amp;lt;code&amp;gt;tune4fs&amp;lt;/code&amp;gt;.&lt;br /&gt;
; Porovnání:&lt;br /&gt;
* [http://www.thegeekstuff.com/2011/05/ext2-ext3-ext4/ TheGeekStuff.com &amp;amp;rarr; ext2 &amp;amp;mdash; ext3 &amp;amp;mdash; ext4]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== btrfs ==&lt;br /&gt;
* Pokročilý souborový systém pro GNU/Linux, Solaris,...&lt;br /&gt;
* Subvoluming&lt;br /&gt;
** Jeden FS může být rozprostřen přes více fyzických zařízení.&lt;br /&gt;
** Prostor (raw storage) rozdělen na úseky (např. 1GB), které se pak spojují do subvolumes.&lt;br /&gt;
** Nahrazuje LVM (Logical Volume Manager) a ZFS.&lt;br /&gt;
* Snapshots (snímky disku)&lt;br /&gt;
** Ukládání současného stavu disku a změn oproti tomuto stavu.&lt;br /&gt;
* Copy on write&lt;br /&gt;
** Vytváření kopie svazku při současné práci se svazkem.&lt;br /&gt;
*&amp;lt;https://btrfs.wiki.kernel.org/index.php/Main_Page&amp;gt;&lt;br /&gt;
* Vyvinut firmou Oracle, dnes GPL.&lt;br /&gt;
* Teprve se chystá podpora kontroly a opravy (rok 2012).&lt;br /&gt;
; Vlastnosti:&lt;br /&gt;
*Velikost souboru až 2^64 B ~ 16 EiB&lt;br /&gt;
*Dynamic i-node allocation&lt;br /&gt;
*Podpora svazků (volumes) a RAID vestavěná ve FS&lt;br /&gt;
**RAID 0, 1 a 10&lt;br /&gt;
**chystá se RAID 5 a 6&lt;br /&gt;
*Kontrolní součty (checksumming)&lt;br /&gt;
*Body obnovení (snapshotting) &amp;amp;mdash; uchová stav systému před rizikovou operací.&lt;br /&gt;
*On-line defragmentation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== APFS (HFS+) ==&lt;br /&gt;
* Apple File System (APFS)&lt;br /&gt;
* Souborový systém pro operační systém macOS&lt;br /&gt;
* Počítače Apple&lt;br /&gt;
* Starší verze macOS (před rokem 2017) používaly starší souborový systém HFS+.&lt;br /&gt;
* Proprietární Apple, částečná specifikace je zvěřejněna a umožňuje čtení z nešifrovaných úložišť.&lt;br /&gt;
* Pro uložení informací o rozdělení disku využívá GPT.&lt;br /&gt;
* Využívá ''firmlink'' &amp;amp;mdash; na rozdíl od hard linků z&amp;amp;nbsp;Linuxu může odkazovat na jiné disky.&lt;br /&gt;
* Umožňuje klonování souborů místo klasické kopie (data zůstávají na disku jen jednou, systém sleduje pouze změny v jednotlivých souborech. Klonování se automaticky použije ve Finderu, u příkazu &amp;lt;code&amp;gt;cp&amp;lt;/code&amp;gt; je třeba použít přepínač &amp;lt;code&amp;gt;-c&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Podporuje šifrování celého disku i jednotlivých souborů, kompresy a sdílení volného místa mezi jednotlivými oddíly (volumes).&lt;br /&gt;
* Místo žurnálování používá ''redirect-on-write'' &amp;amp;mdash; při zápisu do souboru se vytvoří nová metadata v&amp;amp;nbsp;novém inode a posléze se upraví odkaz. Původní metadata se označí jako nevyužitá.&lt;br /&gt;
* Nedoporučuje se pro používání na klasických HDD (plotnových).&lt;br /&gt;
* Existují ovladače třetích stran pro Windows (placené) a Linux (svobodné) s&amp;amp;nbsp;částečně omezenou podporou.&lt;br /&gt;
&lt;br /&gt;
== swap ==&lt;br /&gt;
*Pro odkládání nepotřebných paměťových bloků na disk.&lt;br /&gt;
*Pod Windows se řeší speciálním souborem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== proc ==&lt;br /&gt;
*Pouze virtuální FS.&lt;br /&gt;
*Slouží k práci s procesy.&lt;br /&gt;
&lt;br /&gt;
== Zdroje ==&lt;br /&gt;
* Resilient File System (ReFS) overview. Microsoft Learn [online]. Microsoft, 15.2.2023 [cit. 2023-05-07]. Dostupné z: [https://learn.microsoft.com/en-us/windows-server/storage/refs/refs-overview https://learn.microsoft.com/en-us/windows-server/storage/refs/refs-overview]&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/Speci%C3%A1ln%C3%AD_typy_IP_adres</id>
		<title>Speciální typy IP adres</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/Speci%C3%A1ln%C3%AD_typy_IP_adres"/>
				<updated>2026-03-26T09:59:52Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: /* Adresa sítě a adresa broadcastová */ Oprava vzhledu&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]][[Category:Sítě]][[Category:IP adresy]]&lt;br /&gt;
&lt;br /&gt;
== Localhost/loopback ==&lt;br /&gt;
* Označuje vlastní počítač bez ohledu na konkrétní IP adresu.&lt;br /&gt;
* Používá se také označení „místní smyčka“.&lt;br /&gt;
* Rosah adres IP v. 4: &amp;lt;code&amp;gt;127.0.0.0/8&amp;lt;/code&amp;gt;&lt;br /&gt;
** Běžně se používá jen adresa: &amp;lt;code&amp;gt;127.0.0.1&amp;lt;/code&amp;gt;&lt;br /&gt;
* Rosah adres IP v. 6: &amp;lt;code&amp;gt;::1/128&amp;lt;/code&amp;gt;&lt;br /&gt;
* V&amp;amp;nbsp;prohlížečích lze obvykle nahradit textem &amp;lt;code&amp;gt;localhost&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Privátní IP adresy ==&lt;br /&gt;
* Může použít volně kdokoli.&lt;br /&gt;
* Platí jen v&amp;amp;nbsp;rámci sítě toho, kdo je použil. Ve veřejném internetu se nesměrují.&lt;br /&gt;
* Pokud chcete z&amp;amp;nbsp;těchto adres komunikovat mimo lokální síť, musíte použít NAT.&lt;br /&gt;
* Rozsahy IP v. 4:&lt;br /&gt;
** &amp;lt;code&amp;gt;10.0.0.0/8&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;172.16.0.0/12&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;192.168.0.0/16&amp;lt;/code&amp;gt;&lt;br /&gt;
** Pro speciální účely (sítě poskytovatelů připojení) i: &amp;lt;code&amp;gt;100.64.0.0/10&amp;lt;/code&amp;gt;&lt;br /&gt;
* V IP v. 6 žádný rozsah s&amp;amp;nbsp;tímto významem vyhrazený není.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Globální adresy (veřejné) ==&lt;br /&gt;
* Běžně používány pro označení zařízení &amp;amp;mdash; tedy ty adresy, které nemají jiný speciální význam.&lt;br /&gt;
* V IP v. 4 jsou to ty, které nemají jiný speciální význam.&lt;br /&gt;
* V IP v. 6 rozsah: &amp;lt;code&amp;gt;2000::/3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Link-local ==&lt;br /&gt;
* Pokud zařízení neobdrží adresu z&amp;amp;nbsp;DHCP a&amp;amp;nbsp;nemá přidělenu ručně. V&amp;amp;nbsp;IP v. 6 se používají pro autokonfiguraci (SLAAC).&lt;br /&gt;
* Rozsahy IP v. 4:&lt;br /&gt;
** &amp;lt;code&amp;gt;169.254.0.0/16&amp;lt;/code&amp;gt;&lt;br /&gt;
* Rozsahy IP v. 6:&lt;br /&gt;
** &amp;lt;code&amp;gt;FE 80::/9&amp;lt;/code&amp;gt;&lt;br /&gt;
** Pro autokonfiguraci vyhrazen rozsah: &amp;lt;code&amp;gt;FE 80::/10&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Skupinové &amp;amp;mdash; multicastové adresy ==&lt;br /&gt;
* Vysílání pro skupinu vybraných počítačů.&lt;br /&gt;
* Rozsah IP v. 4: &amp;lt;code&amp;gt;224.0.0.0/'''4'''&amp;lt;/code&amp;gt;&lt;br /&gt;
* Rozsah IP v. 6: &amp;lt;code&amp;gt;FF00::/8&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Skupinové &amp;amp;mdash; anycast ==&lt;br /&gt;
* Doručení libovolnému členu skupiny.&lt;br /&gt;
* Pouze v IP v. 6.&lt;br /&gt;
* Spadají do rozsahu globálních adres, nemají specifický prefix.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Adresa sítě a adresa broadcastová ==&lt;br /&gt;
* Pouze v&amp;amp;nbsp;IP v.&amp;amp;nbsp;4.&lt;br /&gt;
* V&amp;amp;nbsp;IP v.&amp;amp;nbsp;6 se nedefinují, ale adresa zařízení se samými nulami se obvykle používá jako anycast adresa pro všechny routery dané sítě.&lt;br /&gt;
* Pro označení sítě se v IP v. 6 používá prefix sítě.&lt;br /&gt;
* Viz [[IP adresa a maska]].&lt;br /&gt;
&lt;br /&gt;
== Zdroje ==&lt;br /&gt;
* [https://www.tutorialspoint.com/ipv4/ipv4_reserved_addresses.htm TutorialsPoint.com &amp;amp;rarr; Rezervované rozsahy IP v. 4]&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/Speci%C3%A1ln%C3%AD_typy_IP_adres</id>
		<title>Speciální typy IP adres</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/Speci%C3%A1ln%C3%AD_typy_IP_adres"/>
				<updated>2026-03-26T09:59:25Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: /* Adresa sítě a adresa broadcastová */ V IP v. 6 se nedefinují.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]][[Category:Sítě]][[Category:IP adresy]]&lt;br /&gt;
&lt;br /&gt;
== Localhost/loopback ==&lt;br /&gt;
* Označuje vlastní počítač bez ohledu na konkrétní IP adresu.&lt;br /&gt;
* Používá se také označení „místní smyčka“.&lt;br /&gt;
* Rosah adres IP v. 4: &amp;lt;code&amp;gt;127.0.0.0/8&amp;lt;/code&amp;gt;&lt;br /&gt;
** Běžně se používá jen adresa: &amp;lt;code&amp;gt;127.0.0.1&amp;lt;/code&amp;gt;&lt;br /&gt;
* Rosah adres IP v. 6: &amp;lt;code&amp;gt;::1/128&amp;lt;/code&amp;gt;&lt;br /&gt;
* V&amp;amp;nbsp;prohlížečích lze obvykle nahradit textem &amp;lt;code&amp;gt;localhost&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Privátní IP adresy ==&lt;br /&gt;
* Může použít volně kdokoli.&lt;br /&gt;
* Platí jen v&amp;amp;nbsp;rámci sítě toho, kdo je použil. Ve veřejném internetu se nesměrují.&lt;br /&gt;
* Pokud chcete z&amp;amp;nbsp;těchto adres komunikovat mimo lokální síť, musíte použít NAT.&lt;br /&gt;
* Rozsahy IP v. 4:&lt;br /&gt;
** &amp;lt;code&amp;gt;10.0.0.0/8&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;172.16.0.0/12&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;192.168.0.0/16&amp;lt;/code&amp;gt;&lt;br /&gt;
** Pro speciální účely (sítě poskytovatelů připojení) i: &amp;lt;code&amp;gt;100.64.0.0/10&amp;lt;/code&amp;gt;&lt;br /&gt;
* V IP v. 6 žádný rozsah s&amp;amp;nbsp;tímto významem vyhrazený není.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Globální adresy (veřejné) ==&lt;br /&gt;
* Běžně používány pro označení zařízení &amp;amp;mdash; tedy ty adresy, které nemají jiný speciální význam.&lt;br /&gt;
* V IP v. 4 jsou to ty, které nemají jiný speciální význam.&lt;br /&gt;
* V IP v. 6 rozsah: &amp;lt;code&amp;gt;2000::/3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Link-local ==&lt;br /&gt;
* Pokud zařízení neobdrží adresu z&amp;amp;nbsp;DHCP a&amp;amp;nbsp;nemá přidělenu ručně. V&amp;amp;nbsp;IP v. 6 se používají pro autokonfiguraci (SLAAC).&lt;br /&gt;
* Rozsahy IP v. 4:&lt;br /&gt;
** &amp;lt;code&amp;gt;169.254.0.0/16&amp;lt;/code&amp;gt;&lt;br /&gt;
* Rozsahy IP v. 6:&lt;br /&gt;
** &amp;lt;code&amp;gt;FE 80::/9&amp;lt;/code&amp;gt;&lt;br /&gt;
** Pro autokonfiguraci vyhrazen rozsah: &amp;lt;code&amp;gt;FE 80::/10&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Skupinové &amp;amp;mdash; multicastové adresy ==&lt;br /&gt;
* Vysílání pro skupinu vybraných počítačů.&lt;br /&gt;
* Rozsah IP v. 4: &amp;lt;code&amp;gt;224.0.0.0/'''4'''&amp;lt;/code&amp;gt;&lt;br /&gt;
* Rozsah IP v. 6: &amp;lt;code&amp;gt;FF00::/8&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Skupinové &amp;amp;mdash; anycast ==&lt;br /&gt;
* Doručení libovolnému členu skupiny.&lt;br /&gt;
* Pouze v IP v. 6.&lt;br /&gt;
* Spadají do rozsahu globálních adres, nemají specifický prefix.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Adresa sítě a adresa broadcastová ==&lt;br /&gt;
* Pouze v&amp;amp;nbsp;IP v.&amp;amp;nbps;4.&lt;br /&gt;
* V&amp;amp;nbsp;IP v.&amp;amp;nbsp;6 se nedefinují, ale adresa zařízení se samými nulami se obvykle používá jako anycast adresa pro všechny routery dané sítě.&lt;br /&gt;
* Pro označení sítě se v IP v. 6 používá prefix sítě.&lt;br /&gt;
* Viz [[IP adresa a maska]].&lt;br /&gt;
&lt;br /&gt;
== Zdroje ==&lt;br /&gt;
* [https://www.tutorialspoint.com/ipv4/ipv4_reserved_addresses.htm TutorialsPoint.com &amp;amp;rarr; Rezervované rozsahy IP v. 4]&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/P%C5%99%C3%ADklady_souborov%C3%BDch_syst%C3%A9m%C5%AF</id>
		<title>Příklady souborových systémů</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/P%C5%99%C3%ADklady_souborov%C3%BDch_syst%C3%A9m%C5%AF"/>
				<updated>2026-03-24T09:52:15Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: /* FAT/FAT32/exFAT */ Upřesnění FAT32 a limity.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]][[Category:OSY]][[Category:Ukládání_dat]]&lt;br /&gt;
&lt;br /&gt;
== NTFS ==&lt;br /&gt;
* Zaveden ve Windows NT.&lt;br /&gt;
* Podpora šifrování, komprese.&lt;br /&gt;
* Obvykle menší clustery než u FAT32.&lt;br /&gt;
* Názvy souborů v UTF8.&lt;br /&gt;
* Existuje více verzí, aktuální verze NTFS v. 3.1 (od Windows 2000), navíc se liší i verze ovladače NTFS.sys (pro Windows Vista a vyšší verze 6.0).&lt;br /&gt;
* Problematická podpora mimo Windows.&lt;br /&gt;
* Problémy s fragmentací, nutná pravidelná [[Defragmentace|defragmentace]]. (Ve Windows 7 se spouští automaticky.)&lt;br /&gt;
&amp;lt;div class=&amp;quot;Poznamka&amp;quot;&amp;gt;&lt;br /&gt;
Verzi NTFS zjistíte příkazem: &lt;br /&gt;
 fsutil fsinfo ntfsinfo c:&lt;br /&gt;
&lt;br /&gt;
(Spusťte příkazový řádek jako správce: ''Start &amp;amp;rarr; cmd &amp;amp;rarr; pravé tlačítko &amp;amp;rarr; Spustit jako správce''!)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Zdroje&lt;br /&gt;
* [http://www.thomasmaurer.ch/2011/05/check-ntfs-version/ http://www.thomasmaurer.ch/2011/05/check-ntfs-version/]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/NTFS#Versions http://en.wikipedia.org/wiki/NTFS#Versions]&lt;br /&gt;
* [https://technet.microsoft.com/en-us/library/cc781134%28v=ws.10%29.aspx https://technet.microsoft.com/en-us/library/cc781134%28v=ws.10%29.aspx]&lt;br /&gt;
&lt;br /&gt;
== FAT/FAT32/exFAT ==&lt;br /&gt;
* Pochází z MS-DOSu resp. Windows 95.&lt;br /&gt;
* Dnes se používá obvykle jen na paměťových kartách a flash discích.&lt;br /&gt;
&lt;br /&gt;
; FAT(16)&lt;br /&gt;
* Dnes již historický (omezení velikosti oddílu).&lt;br /&gt;
* Názvy souborů 8+3 znaky, bez podpory diakritiky.&lt;br /&gt;
* Byl určený pro diskety, dnes se již nepoužívá.&lt;br /&gt;
&lt;br /&gt;
; FAT32&lt;br /&gt;
* Delší jména souborů než u FAT.&lt;br /&gt;
* Soubory velikosti max. 4&amp;amp;nbsp;GB na 64-bitových systémech (max. 2&amp;amp;nbsp;GB na 32-bitových systémech).&lt;br /&gt;
* Limit celkové velikosti souborového systému je teoreticky až 2&amp;amp;nbsp;TB při velikosti sektoru 512 B. Standardní nástroj pro formátování disků ve starších Windows limituje maximální velikost oddílu FAT32 na 32&amp;amp;nbsp;GB. V&amp;amp;nbsp;novějších verzích Windows 11 už je toto omezení odstraněno, ale stejně se pro disky přes 32&amp;amp;nbsp;GBdoporučuje použít raději exFAT.&lt;br /&gt;
* Zastaralý &amp;amp;mdash; princip zůstává stejný jako u FAT16.&lt;br /&gt;
* Náchylný k chybám, nemá žurnálování.&lt;br /&gt;
* Široká podpora (HW zařízení, operační systémy,...).&lt;br /&gt;
* Jednoduchý na implementaci.&lt;br /&gt;
&lt;br /&gt;
; exFAT&lt;br /&gt;
* Původně proprietární FS Microsoftu, v&amp;amp;nbsp;roce 2019 specifikace zveřejněna.&lt;br /&gt;
* Podpora se průběžně zlepšuje: &lt;br /&gt;
** Linux kernel od verze 5.4 (pro srovnání v&amp;amp;nbsp;2021 aktuální verze Debian 10 používá kernel 4.19, Ubuntu 20.04 LTS používá kernel 5.4.8), &lt;br /&gt;
** Mac OS X od verze 10.6.5 (uvolněno v&amp;amp;nbsp;roce 2010), &lt;br /&gt;
** v&amp;amp;nbsp;roce 2021 některá mobilní zařízení.&lt;br /&gt;
* Má sloužit jako náhrada FAT32 pro flash-disky.&lt;br /&gt;
* Rozšiřuje FAT32.&lt;br /&gt;
* Odstraňuje omezení velikosti souboru.&lt;br /&gt;
* Výchozí souborový systém po SDXC karty větší než 32&amp;amp;nbsp;GB.&lt;br /&gt;
* Může podporovat žurnálování, pokud to povolíme.&lt;br /&gt;
&lt;br /&gt;
== ReFS ==&lt;br /&gt;
* ''Resilient File System''&lt;br /&gt;
* Nový pokročilý souborový systém Microsoftu.&lt;br /&gt;
* Zatím používán pro Windows Server 2016 a 2022 (rok 2023).&lt;br /&gt;
* Důraz na spolehlivost a výkon&lt;br /&gt;
** Umí nahradit RAID &amp;amp;mdash; zrcadlení dat (mirroring): rychlejší přístup a možnost opravy při chybě HW.&lt;br /&gt;
** Automatická průběžná kontrola dat &amp;amp;mdash; nejen při čtení, ale i kontrola dat, se kterými se nepracuje (''scrubber'').&lt;br /&gt;
** Optimalizován pro vysoký výkon i u velikých disků (miliony terabyte apod.&lt;br /&gt;
* Podora pro virtuální stroje:&lt;br /&gt;
** Rychlé vytváření souborů obsahujících samé nuly (při vytváření virtuálních disků s&amp;amp;nbsp;fixní velikostí).&lt;br /&gt;
** Rychlé kopírování celých bloků (snímky virtuálních strojů)&lt;br /&gt;
* Limity: název souboru 255 znaků, délka cesty 32K znaků, velikost souboru i oddílu 35 PB (NTFS 256 TB)&lt;br /&gt;
* Podpora: BitLocker, Junctions (soft-links), hard-links, ACL, žurnál, trim&lt;br /&gt;
&lt;br /&gt;
== ext2/ext3/ext4 ==&lt;br /&gt;
* Rozšíření původního systému &amp;lt;tt&amp;gt;ext&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Implementovány v Unixových systémech, standardní volba pro většinu linuxových distribucí.&lt;br /&gt;
* Vzájemně kompatibilní.&lt;br /&gt;
; ext3&lt;br /&gt;
* Zpětně kompatibilní s ext2.&lt;br /&gt;
* Přidává žurnálování.&lt;br /&gt;
* Podporuje POSIX ACL (Access Control Lists).&lt;br /&gt;
* Není klasická defragmentace.&lt;br /&gt;
* Kontrola disku (&amp;lt;code&amp;gt;fsck&amp;lt;/code&amp;gt;) jen v režimu read-only (viz [[Nástroje_pro_práci_s_diskem#Kontrola_souborového_systému|Nástroje pro práci s diskem]]).&lt;br /&gt;
* Není transparentní komprese.&lt;br /&gt;
* Viz také [http://en.wikipedia.org/wiki/Ext3 Wikipedia.org &amp;gt; Ext3]&lt;br /&gt;
; ext4&lt;br /&gt;
* Dnes nativní pro běžné uživatelské distribuce Linuxu&lt;br /&gt;
* Žurnálování lze volitelně vypnout pomocí &amp;lt;code&amp;gt;tune4fs&amp;lt;/code&amp;gt;.&lt;br /&gt;
; Porovnání:&lt;br /&gt;
* [http://www.thegeekstuff.com/2011/05/ext2-ext3-ext4/ TheGeekStuff.com &amp;amp;rarr; ext2 &amp;amp;mdash; ext3 &amp;amp;mdash; ext4]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== btrfs ==&lt;br /&gt;
* Pokročilý souborový systém pro GNU/Linux, Solaris,...&lt;br /&gt;
* Subvoluming&lt;br /&gt;
** Jeden FS může být rozprostřen přes více fyzických zařízení.&lt;br /&gt;
** Prostor (raw storage) rozdělen na úseky (např. 1GB), které se pak spojují do subvolumes.&lt;br /&gt;
** Nahrazuje LVM (Logical Volume Manager) a ZFS.&lt;br /&gt;
* Snapshots (snímky disku)&lt;br /&gt;
** Ukládání současného stavu disku a změn oproti tomuto stavu.&lt;br /&gt;
* Copy on write&lt;br /&gt;
** Vytváření kopie svazku při současné práci se svazkem.&lt;br /&gt;
*&amp;lt;https://btrfs.wiki.kernel.org/index.php/Main_Page&amp;gt;&lt;br /&gt;
* Vyvinut firmou Oracle, dnes GPL.&lt;br /&gt;
* Teprve se chystá podpora kontroly a opravy (rok 2012).&lt;br /&gt;
; Vlastnosti:&lt;br /&gt;
*Velikost souboru až 2^64 B ~ 16 EiB&lt;br /&gt;
*Dynamic i-node allocation&lt;br /&gt;
*Podpora svazků (volumes) a RAID vestavěná ve FS&lt;br /&gt;
**RAID 0, 1 a 10&lt;br /&gt;
**chystá se RAID 5 a 6&lt;br /&gt;
*Kontrolní součty (checksumming)&lt;br /&gt;
*Body obnovení (snapshotting) &amp;amp;mdash; uchová stav systému před rizikovou operací.&lt;br /&gt;
*On-line defragmentation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== APFS (HFS+) ==&lt;br /&gt;
* Apple File System (APFS)&lt;br /&gt;
* Souborový systém pro operační systém macOS&lt;br /&gt;
* Počítače Apple&lt;br /&gt;
* Starší verze macOS (před rokem 2017) používaly starší souborový systém HFS+.&lt;br /&gt;
* Proprietární Apple, částečná specifikace je zvěřejněna a umožňuje čtení z nešifrovaných úložišť.&lt;br /&gt;
* Pro uložení informací o rozdělení disku využívá GPT.&lt;br /&gt;
* Využívá ''firmlink'' &amp;amp;mdash; na rozdíl od hard linků z&amp;amp;nbsp;Linuxu může odkazovat na jiné disky.&lt;br /&gt;
* Umožňuje klonování souborů místo klasické kopie (data zůstávají na disku jen jednou, systém sleduje pouze změny v jednotlivých souborech. Klonování se automaticky použije ve Finderu, u příkazu &amp;lt;code&amp;gt;cp&amp;lt;/code&amp;gt; je třeba použít přepínač &amp;lt;code&amp;gt;-c&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Podporuje šifrování celého disku i jednotlivých souborů, kompresy a sdílení volného místa mezi jednotlivými oddíly (volumes).&lt;br /&gt;
* Místo žurnálování používá ''redirect-on-write'' &amp;amp;mdash; při zápisu do souboru se vytvoří nová metadata v&amp;amp;nbsp;novém inode a posléze se upraví odkaz. Původní metadata se označí jako nevyužitá.&lt;br /&gt;
* Nedoporučuje se pro používání na klasických HDD (plotnových).&lt;br /&gt;
* Existují ovladače třetích stran pro Windows (placené) a Linux (svobodné) s&amp;amp;nbsp;částečně omezenou podporou.&lt;br /&gt;
&lt;br /&gt;
== swap ==&lt;br /&gt;
*Pro odkládání nepotřebných paměťových bloků na disk.&lt;br /&gt;
*Pod Windows se řeší speciálním souborem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== proc ==&lt;br /&gt;
*Pouze virtuální FS.&lt;br /&gt;
*Slouží k práci s procesy.&lt;br /&gt;
&lt;br /&gt;
== Zdroje ==&lt;br /&gt;
* Resilient File System (ReFS) overview. Microsoft Learn [online]. Microsoft, 15.2.2023 [cit. 2023-05-07]. Dostupné z: [https://learn.microsoft.com/en-us/windows-server/storage/refs/refs-overview https://learn.microsoft.com/en-us/windows-server/storage/refs/refs-overview]&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/P%C5%99%C3%ADklady_souborov%C3%BDch_syst%C3%A9m%C5%AF</id>
		<title>Příklady souborových systémů</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/P%C5%99%C3%ADklady_souborov%C3%BDch_syst%C3%A9m%C5%AF"/>
				<updated>2026-03-24T09:22:59Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: /* APFS (HFS+) */ Upřesnění informací o APFS.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]][[Category:OSY]][[Category:Ukládání_dat]]&lt;br /&gt;
&lt;br /&gt;
== NTFS ==&lt;br /&gt;
* Zaveden ve Windows NT.&lt;br /&gt;
* Podpora šifrování, komprese.&lt;br /&gt;
* Obvykle menší clustery než u FAT32.&lt;br /&gt;
* Názvy souborů v UTF8.&lt;br /&gt;
* Existuje více verzí, aktuální verze NTFS v. 3.1 (od Windows 2000), navíc se liší i verze ovladače NTFS.sys (pro Windows Vista a vyšší verze 6.0).&lt;br /&gt;
* Problematická podpora mimo Windows.&lt;br /&gt;
* Problémy s fragmentací, nutná pravidelná [[Defragmentace|defragmentace]]. (Ve Windows 7 se spouští automaticky.)&lt;br /&gt;
&amp;lt;div class=&amp;quot;Poznamka&amp;quot;&amp;gt;&lt;br /&gt;
Verzi NTFS zjistíte příkazem: &lt;br /&gt;
 fsutil fsinfo ntfsinfo c:&lt;br /&gt;
&lt;br /&gt;
(Spusťte příkazový řádek jako správce: ''Start &amp;amp;rarr; cmd &amp;amp;rarr; pravé tlačítko &amp;amp;rarr; Spustit jako správce''!)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Zdroje&lt;br /&gt;
* [http://www.thomasmaurer.ch/2011/05/check-ntfs-version/ http://www.thomasmaurer.ch/2011/05/check-ntfs-version/]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/NTFS#Versions http://en.wikipedia.org/wiki/NTFS#Versions]&lt;br /&gt;
* [https://technet.microsoft.com/en-us/library/cc781134%28v=ws.10%29.aspx https://technet.microsoft.com/en-us/library/cc781134%28v=ws.10%29.aspx]&lt;br /&gt;
&lt;br /&gt;
== FAT/FAT32/exFAT ==&lt;br /&gt;
* Pochází z MS-DOSu resp. Windows 95.&lt;br /&gt;
* Dnes se používá obvykle jen na paměťových kartách a flash discích.&lt;br /&gt;
&lt;br /&gt;
; FAT(16)&lt;br /&gt;
* Dnes již historický (omezení velikosti oddílu).&lt;br /&gt;
* Názvy souborů 8+3 znaky, bez podpory diakritiky.&lt;br /&gt;
* Byl určený pro diskety, dnes se již nepoužívá.&lt;br /&gt;
&lt;br /&gt;
; FAT32&lt;br /&gt;
* Delší jména souborů než u FAT.&lt;br /&gt;
* Soubory velikosti max. 2&amp;amp;nbsp;GB (resp. 4&amp;amp;nbsp;GB podle konfigurace).&lt;br /&gt;
* Limit celkové velikosti souborového systému je teoreticky až 2&amp;amp;nbsp;TB, ale pouze za cenu zvětšení clusterů. Navíc podle standardů by maximální velikost oddílu FAT32 měla být 32&amp;amp;nbsp;GB a Windows tedy dodržují limit maximální velikosti oddílu 32&amp;amp;nbsp;GB.&lt;br /&gt;
* Zastaralý &amp;amp;mdash; princip zůstává stejný jako u FAT16.&lt;br /&gt;
* Náchylný k chybám, nemá žurnálování.&lt;br /&gt;
* Široká podpora (HW zařízení, operační systémy,...).&lt;br /&gt;
* Jednoduchý na implementaci.&lt;br /&gt;
&lt;br /&gt;
; exFAT&lt;br /&gt;
* Původně proprietární FS Microsoftu, v&amp;amp;nbsp;roce 2019 specifikace zveřejněna.&lt;br /&gt;
* Podpora se průběžně zlepšuje: &lt;br /&gt;
** Linux kernel od verze 5.4 (pro srovnání v&amp;amp;nbsp;2021 aktuální verze Debian 10 používá kernel 4.19, Ubuntu 20.04 LTS používá kernel 5.4.8), &lt;br /&gt;
** Mac OS X od verze 10.6.5 (uvolněno v&amp;amp;nbsp;roce 2010), &lt;br /&gt;
** v&amp;amp;nbsp;roce 2021 některá mobilní zařízení.&lt;br /&gt;
* Má sloužit jako náhrada FAT32 pro flash-disky.&lt;br /&gt;
* Rozšiřuje FAT32.&lt;br /&gt;
* Odstraňuje omezení velikosti souboru.&lt;br /&gt;
* Výchozí souborový systém po SDXC karty větší než 32&amp;amp;nbsp;GB.&lt;br /&gt;
* Může podporovat žurnálování, pokud to povolíme.&lt;br /&gt;
&lt;br /&gt;
== ReFS ==&lt;br /&gt;
* ''Resilient File System''&lt;br /&gt;
* Nový pokročilý souborový systém Microsoftu.&lt;br /&gt;
* Zatím používán pro Windows Server 2016 a 2022 (rok 2023).&lt;br /&gt;
* Důraz na spolehlivost a výkon&lt;br /&gt;
** Umí nahradit RAID &amp;amp;mdash; zrcadlení dat (mirroring): rychlejší přístup a možnost opravy při chybě HW.&lt;br /&gt;
** Automatická průběžná kontrola dat &amp;amp;mdash; nejen při čtení, ale i kontrola dat, se kterými se nepracuje (''scrubber'').&lt;br /&gt;
** Optimalizován pro vysoký výkon i u velikých disků (miliony terabyte apod.&lt;br /&gt;
* Podora pro virtuální stroje:&lt;br /&gt;
** Rychlé vytváření souborů obsahujících samé nuly (při vytváření virtuálních disků s&amp;amp;nbsp;fixní velikostí).&lt;br /&gt;
** Rychlé kopírování celých bloků (snímky virtuálních strojů)&lt;br /&gt;
* Limity: název souboru 255 znaků, délka cesty 32K znaků, velikost souboru i oddílu 35 PB (NTFS 256 TB)&lt;br /&gt;
* Podpora: BitLocker, Junctions (soft-links), hard-links, ACL, žurnál, trim&lt;br /&gt;
&lt;br /&gt;
== ext2/ext3/ext4 ==&lt;br /&gt;
* Rozšíření původního systému &amp;lt;tt&amp;gt;ext&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Implementovány v Unixových systémech, standardní volba pro většinu linuxových distribucí.&lt;br /&gt;
* Vzájemně kompatibilní.&lt;br /&gt;
; ext3&lt;br /&gt;
* Zpětně kompatibilní s ext2.&lt;br /&gt;
* Přidává žurnálování.&lt;br /&gt;
* Podporuje POSIX ACL (Access Control Lists).&lt;br /&gt;
* Není klasická defragmentace.&lt;br /&gt;
* Kontrola disku (&amp;lt;code&amp;gt;fsck&amp;lt;/code&amp;gt;) jen v režimu read-only (viz [[Nástroje_pro_práci_s_diskem#Kontrola_souborového_systému|Nástroje pro práci s diskem]]).&lt;br /&gt;
* Není transparentní komprese.&lt;br /&gt;
* Viz také [http://en.wikipedia.org/wiki/Ext3 Wikipedia.org &amp;gt; Ext3]&lt;br /&gt;
; ext4&lt;br /&gt;
* Dnes nativní pro běžné uživatelské distribuce Linuxu&lt;br /&gt;
* Žurnálování lze volitelně vypnout pomocí &amp;lt;code&amp;gt;tune4fs&amp;lt;/code&amp;gt;.&lt;br /&gt;
; Porovnání:&lt;br /&gt;
* [http://www.thegeekstuff.com/2011/05/ext2-ext3-ext4/ TheGeekStuff.com &amp;amp;rarr; ext2 &amp;amp;mdash; ext3 &amp;amp;mdash; ext4]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== btrfs ==&lt;br /&gt;
* Pokročilý souborový systém pro GNU/Linux, Solaris,...&lt;br /&gt;
* Subvoluming&lt;br /&gt;
** Jeden FS může být rozprostřen přes více fyzických zařízení.&lt;br /&gt;
** Prostor (raw storage) rozdělen na úseky (např. 1GB), které se pak spojují do subvolumes.&lt;br /&gt;
** Nahrazuje LVM (Logical Volume Manager) a ZFS.&lt;br /&gt;
* Snapshots (snímky disku)&lt;br /&gt;
** Ukládání současného stavu disku a změn oproti tomuto stavu.&lt;br /&gt;
* Copy on write&lt;br /&gt;
** Vytváření kopie svazku při současné práci se svazkem.&lt;br /&gt;
*&amp;lt;https://btrfs.wiki.kernel.org/index.php/Main_Page&amp;gt;&lt;br /&gt;
* Vyvinut firmou Oracle, dnes GPL.&lt;br /&gt;
* Teprve se chystá podpora kontroly a opravy (rok 2012).&lt;br /&gt;
; Vlastnosti:&lt;br /&gt;
*Velikost souboru až 2^64 B ~ 16 EiB&lt;br /&gt;
*Dynamic i-node allocation&lt;br /&gt;
*Podpora svazků (volumes) a RAID vestavěná ve FS&lt;br /&gt;
**RAID 0, 1 a 10&lt;br /&gt;
**chystá se RAID 5 a 6&lt;br /&gt;
*Kontrolní součty (checksumming)&lt;br /&gt;
*Body obnovení (snapshotting) &amp;amp;mdash; uchová stav systému před rizikovou operací.&lt;br /&gt;
*On-line defragmentation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== APFS (HFS+) ==&lt;br /&gt;
* Apple File System (APFS)&lt;br /&gt;
* Souborový systém pro operační systém macOS&lt;br /&gt;
* Počítače Apple&lt;br /&gt;
* Starší verze macOS (před rokem 2017) používaly starší souborový systém HFS+.&lt;br /&gt;
* Proprietární Apple, částečná specifikace je zvěřejněna a umožňuje čtení z nešifrovaných úložišť.&lt;br /&gt;
* Pro uložení informací o rozdělení disku využívá GPT.&lt;br /&gt;
* Využívá ''firmlink'' &amp;amp;mdash; na rozdíl od hard linků z&amp;amp;nbsp;Linuxu může odkazovat na jiné disky.&lt;br /&gt;
* Umožňuje klonování souborů místo klasické kopie (data zůstávají na disku jen jednou, systém sleduje pouze změny v jednotlivých souborech. Klonování se automaticky použije ve Finderu, u příkazu &amp;lt;code&amp;gt;cp&amp;lt;/code&amp;gt; je třeba použít přepínač &amp;lt;code&amp;gt;-c&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Podporuje šifrování celého disku i jednotlivých souborů, kompresy a sdílení volného místa mezi jednotlivými oddíly (volumes).&lt;br /&gt;
* Místo žurnálování používá ''redirect-on-write'' &amp;amp;mdash; při zápisu do souboru se vytvoří nová metadata v&amp;amp;nbsp;novém inode a posléze se upraví odkaz. Původní metadata se označí jako nevyužitá.&lt;br /&gt;
* Nedoporučuje se pro používání na klasických HDD (plotnových).&lt;br /&gt;
* Existují ovladače třetích stran pro Windows (placené) a Linux (svobodné) s&amp;amp;nbsp;částečně omezenou podporou.&lt;br /&gt;
&lt;br /&gt;
== swap ==&lt;br /&gt;
*Pro odkládání nepotřebných paměťových bloků na disk.&lt;br /&gt;
*Pod Windows se řeší speciálním souborem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== proc ==&lt;br /&gt;
*Pouze virtuální FS.&lt;br /&gt;
*Slouží k práci s procesy.&lt;br /&gt;
&lt;br /&gt;
== Zdroje ==&lt;br /&gt;
* Resilient File System (ReFS) overview. Microsoft Learn [online]. Microsoft, 15.2.2023 [cit. 2023-05-07]. Dostupné z: [https://learn.microsoft.com/en-us/windows-server/storage/refs/refs-overview https://learn.microsoft.com/en-us/windows-server/storage/refs/refs-overview]&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/Konverze_form%C3%A1t%C5%AF_p%C5%99i_p%C5%99enosu</id>
		<title>Konverze formátů při přenosu</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/Konverze_form%C3%A1t%C5%AF_p%C5%99i_p%C5%99enosu"/>
				<updated>2026-02-25T12:19:31Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: /* Kódování textů */ Doplněno UTF-32, přeformulována role ISO8859-2.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Sítě]][[Category:Informatika]][[Category:Prezentační vrstva]]&lt;br /&gt;
&lt;br /&gt;
== Co je „konverze formátů“? ==&lt;br /&gt;
Jedním z úkolů prezentační vrstvy je převádět formát zápisu (způsob kódování) složitějších datových struktur při přenosu mezi dvěma počítači. Může se jednat o&amp;amp;nbsp;čísla delší než 1 byte, ale také o obrázky a&amp;amp;nbsp;další datové struktury.&lt;br /&gt;
&lt;br /&gt;
Pokud komunikující počítače používají odlišnou reprezentaci těchto dat, je třeba data při přenosu zkonvertovat.&lt;br /&gt;
* V modelu ISO/OSI to má na starosti prezentační vrstva.&lt;br /&gt;
* Reálně používaný model TCP/IP prezentační vrstvu nemá, konverzi si musí provést aplikace sama.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Priklad&amp;quot;&amp;gt;&lt;br /&gt;
; Příklad &amp;amp;ndash; desetinná čísla&lt;br /&gt;
Jako příklad uveďme desetinná čísla. Pokud chceme desetinné číslo uložit v&amp;amp;nbsp;počítači, musíme ho převést na posloupnost nul a jedniček. Existují různé způsoby, jak toto provést. Pokud v&amp;amp;nbsp;síti komunikují dva počítače a&amp;amp;nbsp;každý z&amp;amp;nbsp;nich používá jiný způsob, nemohou prostě poslat odpovídající posloupnost bitů přes síť, protože na druhém počítači by stejná posloupnost znamenala jiné číslo. Je třeba provést konverzi.&lt;br /&gt;
&lt;br /&gt;
; Představme si následující situaci&lt;br /&gt;
Odesílatel a příjemce ukládají desetinná čísla tak, že číslo &amp;lt;code&amp;gt;0,083&amp;lt;/code&amp;gt; převedou na &amp;lt;code&amp;gt;83*10&amp;lt;sup&amp;gt;-3&amp;lt;/sup&amp;gt;&amp;lt;/code&amp;gt;. Číslu &amp;lt;code&amp;gt;83&amp;lt;/code&amp;gt; se říká ''mantisa'' a &amp;lt;code&amp;gt;-3&amp;lt;/code&amp;gt; je ''exponent''.&lt;br /&gt;
&lt;br /&gt;
Odesilatel i&amp;amp;nbsp;příjemce použijí&amp;amp;nbsp;16 bitů. Dále ale postupují různě: &lt;br /&gt;
* Odesilatel:&lt;br /&gt;
*# mantisu (číslo &amp;lt;code&amp;gt;83&amp;lt;/code&amp;gt;) ukládá na 8&amp;amp;nbsp;bitů: &amp;lt;code&amp;gt;0101 0011&amp;lt;/code&amp;gt;&lt;br /&gt;
*# posléze využije další byte tak, že 1.&amp;amp;nbsp;bit bude reprezentovat znaménko (0..plus, 1..mínus) a dalších 7 bitů exponent &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;000 0011&amp;lt;/code&amp;gt;&lt;br /&gt;
*: &amp;lt;code&amp;gt;0,083&amp;lt;/code&amp;gt; =&amp;gt; číslo &amp;lt;code&amp;gt;83&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;0101 0011&amp;lt;/code&amp;gt; + znaménko: &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; (mínus) + exponent &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;000 0011&amp;lt;/code&amp;gt; =&amp;gt; &amp;lt;code&amp;gt;0101 0011 1000 0011&amp;lt;/code&amp;gt; &lt;br /&gt;
* Příjemce reprezentuje desetinná čísla jinak. Číslo &amp;lt;code&amp;gt;0,083&amp;lt;/code&amp;gt; uloží tak, že:&lt;br /&gt;
*# nejprve uvede znaménko exponentu (1 bit): &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; (mínus)&lt;br /&gt;
*# poté exponent na 3 bity (to obvykle stačí): &amp;lt;code&amp;gt;011&amp;lt;/code&amp;gt;&lt;br /&gt;
*# a posléze využije 12 bitů na zápis mantisy (číselné části).&lt;br /&gt;
*: &amp;lt;code&amp;gt;0,083&amp;lt;/code&amp;gt; =&amp;gt; znaménko: &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; (mínus) + exponent &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;011&amp;lt;/code&amp;gt; + číslo &amp;lt;code&amp;gt;83&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;0000 0101 0011&amp;lt;/code&amp;gt; =&amp;gt; &amp;lt;code&amp;gt;1011 0000 0101 0011&amp;lt;/code&amp;gt;) &lt;br /&gt;
&lt;br /&gt;
Pokud by odesilatel prostě vzal 16 bitů, které reprezentují číslo a poslal je příjemci, ten by místo čísla &amp;lt;code&amp;gt;0,083&amp;lt;/code&amp;gt; přečetl:&lt;br /&gt;
*: &amp;lt;code&amp;gt;0101 0011 1000 0011&amp;lt;/code&amp;gt; =&amp;gt; znaménko: &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; (plus) + exponent &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;101&amp;lt;/code&amp;gt; + číslo &amp;lt;code&amp;gt;899&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;0011 1000 0011&amp;lt;/code&amp;gt; =&amp;gt; &amp;lt;code&amp;gt;899*10&amp;lt;sup&amp;gt;5&amp;lt;/sup&amp;gt;&amp;lt;/code&amp;gt; =&amp;gt; &amp;lt;code&amp;gt;89&amp;amp;nbsp;900&amp;amp;nbsp;000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aby se nedorozumění předešlo, musí buď odesilatel nebo příjemce data převést do formátu, který používá příjemce. To označujeme jako provedení konverze.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Další běžné konverze dat ==&lt;br /&gt;
V&amp;amp;nbsp;dnešních sítích se naprosto běžně setkáme s následujícími variantami konverze dat:&lt;br /&gt;
* Převod různých způsobů kódování textů (národní abecedy)&lt;br /&gt;
* Převod různých formátů pro ukládání obrázků&lt;br /&gt;
* Převod různého způsobu zápisu delších čísel (Little a Big Endian)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Kódování textů ===&lt;br /&gt;
* Veškerá data jsou v&amp;amp;nbsp;počítači ukládána a přenášena jako posloupnosti 0 a 1.&lt;br /&gt;
* Pro ukládání a&amp;amp;nbsp;přenášení textů je tedy nutno texty převést (zakódovat) na čísla.&lt;br /&gt;
&lt;br /&gt;
; ASCII, UTF-8 a kódové stránky&lt;br /&gt;
* Pro kódování textů (ukládání textů v&amp;amp;nbsp;paměti počítače ve tvaru posloupností byte) se dnes běžně používá kódování ASCII či z&amp;amp;nbsp;něj odvozená kódování UTF-8 či (výjimečně) UTF-16.&lt;br /&gt;
* Problém s&amp;amp;nbsp;ASCII je v tom, že znaky ukládá na 8&amp;amp;nbsp;bitů.&lt;br /&gt;
* 8&amp;amp;nbsp;bitů ale umožňuje pouze 256&amp;amp;nbsp;různých kombinací, což sice dostačuje pro základní latinskou abecedu, ale neumožňuje ukládat rozšířené národní abecedy (azbuka, české znaky s&amp;amp;nbsp;diakritikou, čínská abeceda,...)&lt;br /&gt;
&lt;br /&gt;
* Rozšířené národní abecedy (například znaky s&amp;amp;nbsp;diakritikou v&amp;amp;nbsp;češtině a&amp;amp;nbsp;dalších jazycích) používají různé tzv.&amp;amp;nbsp;„kódové stránky“, které přiřazují znakům ze 2.&amp;amp;nbsp;poloviny ASCII tabulky speciální významy.&lt;br /&gt;
* Například pro češtinu se běžně používají kódové stránky:&lt;br /&gt;
*# Windows-1250 (kódová stránka 1250)... navržena a používána Microsoftem v&amp;amp;nbsp;grafickém prostředí Windows&lt;br /&gt;
*# Latin II (kódová stránka 852)... starší standard, používá Microsoft při zápisu názvů souborů (je třeba používat při psaní skriptů pro Windows).&lt;br /&gt;
*# ISO-8859-2... standard organizace ISO. Dříve používán většinou ostatních operačních systémů kromě Windows. Dnes je již obvykle nahrazen kódováním UTF-8 a jeho význam postupně upadá.&lt;br /&gt;
&lt;br /&gt;
* Pokud tvůrce webové stránky vytvoří web s&amp;amp;nbsp;kódováním Windows-1250 a&amp;amp;nbsp;čtenář používá Linux, některé české znaky se čtenáři nezobrazí správně. A&amp;amp;nbsp;samozřejmě podobně naopak.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Poznamka&amp;quot;&amp;gt;&lt;br /&gt;
Pokud komunikují počítače, které používají odlišné způsoby kódování znaků, je třeba je převádět (konvertovat). Dnes se to řeší tak, že prohlížeče běžně znají všechny běžně používané způsoby kódování a tvůrce stránky do kódu HTML zapíše, jaký způsob kódování používá (viz HTML element &amp;lt;code&amp;gt;&amp;amp;lt;meta charset=&amp;quot;windows-1250&amp;quot; /&amp;amp;gt;&amp;lt;/code&amp;gt;).&lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
&lt;br /&gt;
; UTF-8&lt;br /&gt;
* Vzhledem k problémům s&amp;amp;nbsp;detekcí a&amp;amp;nbsp;konverzemi kódových stránek se kódování ASCII postupně nahrazuje univerzálním kódováním [https://cs.wikipedia.org/wiki/UTF-8 UTF-8], které je s&amp;amp;nbsp;ASCII částečně kompatibilní (reprezentace prvních 128 znaků ASCII je stejná). &lt;br /&gt;
* Například ve většině linuxových distribucí je již UTF-8 standardem. Stejně tak je doporučenou volbou pro psaní webových stránek.&lt;br /&gt;
* Nevýhodou UTF-8 je, že jeden znak je reprezentován kódem dlouhým 8-32 bitů. Nelze tedy jednoduše najít pozici znaku v&amp;amp;nbsp;textu podle jeho indexu.&lt;br /&gt;
&lt;br /&gt;
; UTF-16 a UTF-32&lt;br /&gt;
* Tyto kódování ukládají všechny znaky na stejně dlouhé posloupnosti bitů (16 bitů/znak u UTF-16 a 32 bitů/znak u UTF-32).&lt;br /&gt;
* To je paměťově méně efektivní, ale umožňuje snáze zpracovávat texty na základě pozice jednotlivých znaků.&lt;br /&gt;
* Tato kódování se dnes obvykle nepoužívají pro výměnu dat, ale pro zpracování textů v&amp;amp;nbsp;knihovnách programovacích jazyků.&lt;br /&gt;
&lt;br /&gt;
; ASCII &amp;amp;times; EBCDIC apod.&lt;br /&gt;
* V&amp;amp;nbsp;době vzniku architektury ISO/OSI byla situace složitější v&amp;amp;nbsp;tom, že se běžně používaly pro ukládání znaků i&amp;amp;nbsp;zcela odlišné způsoby kódování znaků. Kromě ASCII třeba kód EBCDIC na sálových počítačích IBM v&amp;amp;nbsp;70. letech.&lt;br /&gt;
&lt;br /&gt;
=== Obrázky ===&lt;br /&gt;
* Z&amp;amp;nbsp;grafiky samozřejmě víte, že existují různé formáty obrázků.&lt;br /&gt;
* Dnešní sítě se s&amp;amp;nbsp;problémem převodu obrázků vyrovnaly tak, že existuje skupina „běžně podporovaných“ formátů (PNG, JPG, GIF,...) a&amp;amp;nbsp;jiné formáty se v&amp;amp;nbsp;sítích běžně nepoužívají.&lt;br /&gt;
* Pokud by byl ale model ISO/OSI implementován běžně v&amp;amp;nbsp;počítačích, byl by převod formátů obrázků starostí síťového rozhraní. Například prohlížeč by si řekl, v&amp;amp;nbsp;jakém formátu obrázky umí zobrazit, a&amp;amp;nbsp;prezentační vrstva by měla za úkol obrázky převést. (Asi by s&amp;amp;nbsp;tím bylo dost těžkostí, ale to ponechme stranou.) &lt;br /&gt;
&lt;br /&gt;
=== Little × Big Endian ===&lt;br /&gt;
* K&amp;amp;nbsp;problémům s&amp;amp;nbsp;konverzí dat ale dochází i&amp;amp;nbsp;v&amp;amp;nbsp;mnohem jednodušších situacích.&lt;br /&gt;
* Představme si, že chceme přes síť přenést 32bitové číslo. Například číslo &amp;lt;code&amp;gt;1158&amp;lt;/code&amp;gt; &amp;amp;rarr; &amp;lt;code&amp;gt;00000000 00000000 00000100 10000110&amp;lt;/code&amp;gt; binárně resp. &amp;lt;code&amp;gt;00 00 04 86&amp;lt;/code&amp;gt; hexadecimálně.&lt;br /&gt;
&lt;br /&gt;
; Big Endian&lt;br /&gt;
* Jsme zvyklí v&amp;amp;nbsp;číslech zapisovat nejprve nejvýznamnější číslice: číslo &amp;lt;code&amp;gt;1158&amp;lt;/code&amp;gt; píšeme jako &amp;lt;code&amp;gt;1&amp;amp;rarr;1&amp;amp;rarr;5&amp;amp;rarr;8&amp;lt;/code&amp;gt;, nikoli jako: &amp;lt;code&amp;gt;8&amp;amp;rarr;5&amp;amp;rarr;1&amp;amp;rarr;1&amp;lt;/code&amp;gt;&lt;br /&gt;
* Proto nám připadá logické, že uložíme číslo &amp;lt;code&amp;gt;1158&amp;lt;/code&amp;gt; do paměti počítače takto:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Adresa v paměti !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0000 0000 (00 hex)&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 0000 0000 (00 hex)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 0000 0100 (04 hex)&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 1000 0110 (86 hex)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
* Tento způsob zápisu se označuje jako ''Big Endian''.&lt;br /&gt;
* Big Endian:&lt;br /&gt;
** Je snáze čitelný pro lidi (například při sledování obsahu datagramů,...)&lt;br /&gt;
** Používá se v&amp;amp;nbsp;hlavičkách síťových protokolů.&lt;br /&gt;
&lt;br /&gt;
; Little Endian&lt;br /&gt;
* Na druhou stranu například pro matematické operace s&amp;amp;nbsp;dvojkovými čísly je praktičtější, když jsou čísla uložena v&amp;amp;nbsp;opačném pořadí. Například pokud čísla sčítáme, bereme nejprve součet nejméně významných číslic.&lt;br /&gt;
&amp;lt;div class=&amp;quot;Priklad&amp;quot;&amp;gt;&lt;br /&gt;
Například když sčítáme &amp;lt;code&amp;gt;1158+507&amp;lt;/code&amp;gt;, budeme nejprve potřebovat zjistit součet  &amp;lt;code&amp;gt;8+8&amp;lt;/code&amp;gt;, pak budeme sčítat &amp;lt;code&amp;gt;5+0+1&amp;lt;/code&amp;gt; atd. (Potřebujeme tak postupovat kvůli přenosu z&amp;amp;nbsp;nižších řádů.)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Například procesory Intel v&amp;amp;nbsp;paměti používají zápis, označovaný jako ''Little Endian'':&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Adresa v paměti !! Hodnota&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1000 0110 (86 hex)&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 0000 0100 (04 hex)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 0000 0000 (00 hex)&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 0000 0000 (00 hex)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
* Při zápisu Little Endian jsou v&amp;amp;nbsp;paměti nejprve méně významné byte a&amp;amp;nbsp;až poté ty významnější (nejprve „jednotky“, pak „desítky“, pak „stovky“,... tedy, pokud to takto můžeme označit při zápisu ve dvojkové soustavě po bytech).&lt;br /&gt;
* Little Endian&lt;br /&gt;
** Je o&amp;amp;nbsp;něco praktičtější při matematických operacích s&amp;amp;nbsp;čísly.&lt;br /&gt;
** Používají jej procesory architektury Intel x86 a&amp;amp;nbsp;kompatibilní (tedy samozřejmě i&amp;amp;nbsp;AMD a&amp;amp;nbsp;obecně dnes většina procesorů stolních počítačů.)&lt;br /&gt;
&lt;br /&gt;
; Je lepší Little nebo Big Endian?&lt;br /&gt;
* To je asi zcela zbytečná otázka. V&amp;amp;nbsp;dnešním světě se používá obojí a&amp;amp;nbsp;ještě dlouho nejspíš bude. &lt;br /&gt;
* Každopádně je důležité vědět:&lt;br /&gt;
** co toto označení znamená,&lt;br /&gt;
** že při přenosu dat mezi zařízeními je třeba řešit, zda není potřeba data převést z&amp;amp;nbsp;jednoho způsobu ukládání na druhý,&lt;br /&gt;
** při programování nástrojů pro sítě a&amp;amp;nbsp;obecně komunikaci řešit, zda se používá Little nebo Big Endian.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Poznamka&amp;quot;&amp;gt;&lt;br /&gt;
; Odkud se vzalo označení „Little/Big Endian“?&lt;br /&gt;
* V&amp;amp;nbsp;knize Jonathana Swifta [https://www.databazeknih.cz/knihy/gulliverovy-cesty-35047 Gulliverovy cesty (Gulliver's Travels, 1726)] se objevují dva národy trpaslíků, které mezi sebou vedou letitou a&amp;amp;nbsp;krvavou válku o&amp;amp;nbsp;to, zda je správné vařené vejce rozbíjet na širším či užším konci (little × big end).&lt;br /&gt;
&lt;br /&gt;
* Autor knihy tím mimo jiné nejspíš poukazoval na nesmyslnost válek mezi katolíky a&amp;amp;nbsp;protestanty, které zmítaly Evropou většinu raného novověku a&amp;amp;nbsp;hlavním „tématem sporu“ bylo, zda věřící při přijímání mohou s&amp;amp;nbsp;knězem pít mešní víno, nebo smí pozřít pouze hostie (reprezentující krev a&amp;amp;nbsp;tělo Krista). &lt;br /&gt;
* Samozřejmě z&amp;amp;nbsp;dějepisu víte, že ve skutečnosti šlo spíše o&amp;amp;nbsp;to, zda má církev shromaždovat majetek a politický vliv, či zda se má starat pouze o&amp;amp;nbsp;duše věřících.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ASN.1 ==&lt;br /&gt;
* Pokud bychom chtěli implementovat plně model ISO/OSI, museli bychom se vyrovnat s&amp;amp;nbsp;existencí velkého množství různých formátů dat.&lt;br /&gt;
* V&amp;amp;nbsp;80. letech proto vznikla myšlenka, že by bylo jednodušší navrhnout univerzální, všemi podporovaný formát dat. Pak by stačilo, aby každý počítač uměl převádět data do tohoto univerzálního formátu a&amp;amp;nbsp;zpět.&lt;br /&gt;
* Takovým formátem měl být formát ASN.1.&lt;br /&gt;
* My ale víme, že svět sítí se nakonec vydal jinou cestou &amp;amp;rarr; využitím jednoduššího modelu TCP/IP a&amp;amp;nbsp;přenecháním starostí s&amp;amp;nbsp;převodem formátů na tvůrce jednotlivých aplikací.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Zdroje ==&lt;br /&gt;
* PETERKA, Jiří. ''Prezentační vrstva.'' eArchiv.cz [online]. 1996 [cit. 2017-06-26]. Dostupné z: [http://www.earchiv.cz/a92/a226c110.php3 http://www.earchiv.cz/a92/a226c110.php3]&lt;br /&gt;
* ASCII. In: ''Wikipedia: the free encyclopedia [online].'' San Francisco (CA): Wikimedia Foundation, 2016 [cit. 2017-06-26]. Dostupné z: [https://cs.wikipedia.org/wiki/ASCII https://cs.wikipedia.org/wiki/ASCII]&lt;br /&gt;
* UTF-8. In: ''Wikipedia: the free encyclopedia [online].'' San Francisco (CA): Wikimedia Foundation, 2016 [cit. 2017-06-26]. Dostupné z: [https://cs.wikipedia.org/wiki/UTF-8 https://cs.wikipedia.org/wiki/UTF-8]&lt;br /&gt;
* Abstract Syntax Notation One. In: ''Wikipedia: the free encyclopedia [online].'' San Francisco (CA): Wikimedia Foundation, 2016 [cit. 2020-03-16].[https://en.wikipedia.org/wiki/Abstract_Syntax_Notation_One https://en.wikipedia.org/wiki/Abstract_Syntax_Notation_One]&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/Flutter:_Ukl%C3%A1d%C3%A1n%C3%AD_dat</id>
		<title>Flutter: Ukládání dat</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/Flutter:_Ukl%C3%A1d%C3%A1n%C3%AD_dat"/>
				<updated>2026-02-23T06:14:03Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: /* Nastavení projektu pro Firebase */ Doplněno ověření přihlášení do firebase.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]][[Category:Programování]][[Category:Flutter]]&lt;br /&gt;
&lt;br /&gt;
Pro trvalé uložení dat i po vypnutí aplikace můžeme data uložit:&lt;br /&gt;
* na lokální disk konkrétního zařízení&lt;br /&gt;
* do síťového úložiště (databáze, cloudové úložiště)&lt;br /&gt;
* můžeme rozdělit aplikaci na frontend a backend, kde data budou uložena v&amp;amp;nbsp;backendu (opět obvykle v&amp;amp;nbsp;databázi).&lt;br /&gt;
&lt;br /&gt;
Následuje několik příkladů možných řešení.&lt;br /&gt;
&lt;br /&gt;
== Lokální export: jsonEncode/jsonDecode ==&lt;br /&gt;
&lt;br /&gt;
=== Vlastnosti ===&lt;br /&gt;
* Formát JSON lze zpracovávat i v dalších aplikacích – je vhodný pro výměnu dat mezi aplikacemi a je textový.&lt;br /&gt;
* Jednoduše lze uložit seznam objektů. Složitější vnořované struktury objektů je třeba ručně převádět.&lt;br /&gt;
* Není vhodné pro větší objem dat – převod na text může zvětšit objem dat.&lt;br /&gt;
* Vhodné zejména pro textová data: texty, celá čísla, logické hodnoty. Méně vhodné pro desetinná čísla, obrázky, ... z důvodu nutné konverze na text.&lt;br /&gt;
* Formát JSON neukládá datové typy.&lt;br /&gt;
* Výsledek je uložen lokálně – převod z mobilní aplikace na desktop apod. je třeba řešit ručně.&lt;br /&gt;
&lt;br /&gt;
=== Postup zápisu ===&lt;br /&gt;
# Nalezení umístění souboru:&lt;br /&gt;
#* Využij balíček &amp;lt;code&amp;gt;path_provider&amp;lt;/code&amp;gt; a metodu &amp;lt;code&amp;gt;getApplicationDocumentsDirectory()&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Pro zápis do souboru použij třídu &amp;lt;code&amp;gt;File&amp;lt;/code&amp;gt; a metodu &amp;lt;code&amp;gt;writeAsString&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Převod dat na JSON&lt;br /&gt;
#* Využij balíček &amp;lt;code&amp;gt;dart:convert&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Pro parsování JSON využij metodu &amp;lt;code&amp;gt;jsonDecode(list)&amp;lt;/code&amp;gt; – výsledkem bude textová reprezentace objektu ve formátu JSON.&lt;br /&gt;
&lt;br /&gt;
=== Postup čtení ===&lt;br /&gt;
# Nalezení umístění souboru:&lt;br /&gt;
#* Využij balíček &amp;lt;code&amp;gt;path_provider&amp;lt;/code&amp;gt; a metodu &amp;lt;code&amp;gt;getApplicationDocumentsDirectory()&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Pro čtení souboru použij třídu &amp;lt;code&amp;gt;File&amp;lt;/code&amp;gt; a metodu &amp;lt;code&amp;gt;readAsString&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Převod dat na JSON&lt;br /&gt;
#* Využij balíček &amp;lt;code&amp;gt;dart:convert&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Pro ukládání využij metodu &amp;lt;code&amp;gt;jsonEncode(list)&amp;lt;/code&amp;gt; – výsledkem bude textová reprezentace objektu ve formátu JSON.&lt;br /&gt;
&lt;br /&gt;
=== Ukázka použití v aplikaci ===&lt;br /&gt;
 import 'dart:io';&lt;br /&gt;
 import 'package:flutter/material.dart';&lt;br /&gt;
 import 'package:path_provider/path_provider.dart';&lt;br /&gt;
 import 'dart:convert';&lt;br /&gt;
 &lt;br /&gt;
 void main() {&lt;br /&gt;
   runApp(const MyApp());&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class MyApp extends StatelessWidget {&lt;br /&gt;
   const MyApp({super.key});&lt;br /&gt;
 &lt;br /&gt;
   @override&lt;br /&gt;
   Widget build(BuildContext context) {&lt;br /&gt;
     return MaterialApp(&lt;br /&gt;
       title: 'Úložiště Demo',&lt;br /&gt;
       home: HomePage('''storage: FileStorage()'''),&lt;br /&gt;
     );&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class Zaznam {&lt;br /&gt;
   final String jmeno;&lt;br /&gt;
   final int pocet;&lt;br /&gt;
 &lt;br /&gt;
   const Zaznam({ required this.jmeno, required this.pocet, }); &lt;br /&gt;
 &lt;br /&gt;
   // Převod do JSON&lt;br /&gt;
   '''Map&amp;lt;String, dynamic&amp;gt; toJson() =&amp;gt; {'''&lt;br /&gt;
     'jmeno': jmeno,&lt;br /&gt;
     'pocet': pocet,&lt;br /&gt;
   };&lt;br /&gt;
 &lt;br /&gt;
   // Obnov z JSON&lt;br /&gt;
   '''factory Zaznam.fromJson(Map&amp;lt;String, dynamic&amp;gt; json) {'''&lt;br /&gt;
     return Zaznam(&lt;br /&gt;
       jmeno: (json['jmeno']),&lt;br /&gt;
       pocet: json['pocet'] as int,&lt;br /&gt;
     );&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /// Práce se soubory&lt;br /&gt;
 '''class FileStorage {'''&lt;br /&gt;
   '''Future&amp;lt;String&amp;gt; get _localPath''' async {&lt;br /&gt;
     final directory = await getApplicationDocumentsDirectory();&lt;br /&gt;
     return directory.path;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;File&amp;gt; get _localFile''' async {&lt;br /&gt;
     final path = await _localPath;&lt;br /&gt;
     return File('$path/data.txt');&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;String&amp;gt; readFile()''' async {&lt;br /&gt;
     final file = await _localFile;&lt;br /&gt;
     return file.readAsString();&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;void&amp;gt; writeFile(String content)''' async {&lt;br /&gt;
     final file = await _localFile;&lt;br /&gt;
     await file.writeAsString(content);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /// Stav aplikace včetně zápisu do souboru&lt;br /&gt;
 class HomePage extends StatefulWidget {&lt;br /&gt;
   final FileStorage storage;&lt;br /&gt;
   const HomePage('''{required this.storage}''');&lt;br /&gt;
   @override&lt;br /&gt;
   State&amp;lt;HomePage&amp;gt; createState() =&amp;gt; _HomePageState();&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class _HomePageState extends State&amp;lt;HomePage&amp;gt; {&lt;br /&gt;
   List&amp;lt;Zaznam&amp;gt; _seznam = [];&lt;br /&gt;
 &lt;br /&gt;
   @override&lt;br /&gt;
   void initState() {&lt;br /&gt;
     super.initState();&lt;br /&gt;
     '''_loadData();'''   // Načtení dat při startu&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;void&amp;gt; _loadData() async {'''&lt;br /&gt;
     try {&lt;br /&gt;
       final jsonString = await widget.storage.readFile();&lt;br /&gt;
       final List&amp;lt;dynamic&amp;gt; decoded = jsonDecode(jsonString);&lt;br /&gt;
       setState(() {&lt;br /&gt;
         _seznam = decoded&lt;br /&gt;
             .map((item) =&amp;gt; Zaznam.fromJson(item as Map&amp;lt;String, dynamic&amp;gt;))&lt;br /&gt;
             .toList();&lt;br /&gt;
       });&lt;br /&gt;
     } catch (e) {&lt;br /&gt;
       TODO: Zobraz chybové hlášení vhodným způsobem.&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;void&amp;gt; _saveData() async {'''&lt;br /&gt;
     final jsonString = jsonEncode(&lt;br /&gt;
       _seznam.map((z) =&amp;gt; z.toJson()).toList()&lt;br /&gt;
     );&lt;br /&gt;
     await widget.storage.writeFile(jsonString);&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   void _addRecord() {&lt;br /&gt;
     setState(() {&lt;br /&gt;
       _seznam.add(Zaznam(&lt;br /&gt;
         jmeno: 'Josef',&lt;br /&gt;
         pocet: 1000,&lt;br /&gt;
       ));&lt;br /&gt;
     });&lt;br /&gt;
     '''_saveData();'''&lt;br /&gt;
   } &lt;br /&gt;
 &lt;br /&gt;
   @override&lt;br /&gt;
   Widget build(BuildContext context) {&lt;br /&gt;
     return Scaffold(&lt;br /&gt;
       // ... vytvoř GUI&lt;br /&gt;
     );&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Tip ===&lt;br /&gt;
* Pro větší objemy dat či komplexnější data lze pro export do formátu JSON využít balíček &amp;lt;code&amp;gt;json_serializable&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Zdroje ===&lt;br /&gt;
* [https://hatchjs.com/list-to-json-flutter/ HatchJS.com &amp;gt; How to Convert a List to JSON in Flutter]&lt;br /&gt;
* [https://docs.flutter.dev/data-and-backend/serialization/json Flutter Docs &amp;gt; JSON and serialization]&lt;br /&gt;
* [https://docs.flutter.dev/cookbook/persistence/reading-writing-files Flutter Docs &amp;gt; Read and write files]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lokální databáze: Hive ==&lt;br /&gt;
&lt;br /&gt;
* Data ukládá binárně, ale stále na lokální zařízení.&lt;br /&gt;
&lt;br /&gt;
=== Zdroje ===&lt;br /&gt;
* [https://medium.com/@ChanakaDev/hive-vs-shared-preferences-10353068a8a6 Medium.com: ChanakaDev &amp;gt; Hive vs. Shared Preferences]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Google Firestore ==&lt;br /&gt;
&lt;br /&gt;
* Cloud Firestore je cloudová NoSQL databáze od Google, která je součástí platformy Google Firebase. &lt;br /&gt;
&lt;br /&gt;
=== Vlastnosti Cloud Firestore ===&lt;br /&gt;
&lt;br /&gt;
; Výhody a nevýhody&lt;br /&gt;
* Firebase je dobře integrovaná do frameworku Flutter (Flutter také vyvíjí Google)&lt;br /&gt;
* Data se ukládají do cloudu – data může sdílet mobilní i webová aplikace&lt;br /&gt;
* Synchronizace dat v reálném čase&lt;br /&gt;
* Pro přístup k&amp;amp;nbsp;datům je potřeba připojení k&amp;amp;nbsp;internetu&lt;br /&gt;
* Pro malé projekty stačí varianta zdarma (pro větší bude třeba platit)&lt;br /&gt;
&lt;br /&gt;
; Struktura dat ve Firestore&lt;br /&gt;
* Data se neukládají do entit jako u ER databází – spíše jako několik seznamů objektů.&lt;br /&gt;
&lt;br /&gt;
Pojmy&lt;br /&gt;
* Dokument (Document) ... konkrétní záznam (jako jeden řádek v databázi) – například údaje o jednom uživateli.&lt;br /&gt;
* Pole (Field) ... konkrétní hodnota (atribut) – například jméno uživatele&lt;br /&gt;
* Kolekce (Collection) ... odpovídá entitě v ER databázích – je to vlastně seznam dokumentů&lt;br /&gt;
* Databáze (Database) ... skupina souvisejících kolekcí&lt;br /&gt;
* Projekt (Project) ... jeden projekt obvykle odpovídá jednomu softwarovému produktu. Může zahrnovat různé podoby jedné aplikace:&lt;br /&gt;
** IOS&lt;br /&gt;
** Android&lt;br /&gt;
** webová aplikace&lt;br /&gt;
** Unity&lt;br /&gt;
** Flutter multiplatformní aplikace&lt;br /&gt;
&lt;br /&gt;
Příklad:&lt;br /&gt;
 users (kolekce)&lt;br /&gt;
    └── user1 (dokument)&lt;br /&gt;
          ├── name: &amp;quot;Jan&amp;quot;&lt;br /&gt;
          ├── age: 18&lt;br /&gt;
          └── email: &amp;quot;jan@email.cz&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Nastavení projektu pro Firebase===&lt;br /&gt;
&lt;br /&gt;
; Založení projektu na webu Firebase&lt;br /&gt;
#Jdi na: [https://console.firebase.google.com Console.firebase.google.com]&lt;br /&gt;
#Klikni na Vytvořit projekt a zadej název projektu&lt;br /&gt;
#Po vytvoření přidej aplikaci (Android / iOS / Web)&lt;br /&gt;
&lt;br /&gt;
; Instalace FlutterFire CLI&lt;br /&gt;
# Nainstaluj Firebase CLI podle [https://firebase.google.com/docs/cli návodu z&amp;amp;nbsp; Firebase.google.com &amp;gt; CLI]&lt;br /&gt;
#* Bude nejspíš vyžadovate heslo správce počítače.&lt;br /&gt;
# Přihlaš se: &amp;lt;code&amp;gt;firebase login&amp;lt;/code&amp;gt;&lt;br /&gt;
#* Musíš rozhodnout, jestli budeš využívat Google Gemini v rámci Firebase a jestli může Google využívat statistická data.&lt;br /&gt;
#* Zvolíš účet Google, pod kterým budeš pracovat&lt;br /&gt;
#* Ověř funkčnost pomocí: &amp;lt;code&amp;gt;firebase projects:list&amp;lt;/code&amp;gt; – mělo by vypsat seznam založených projektů&lt;br /&gt;
# Založ projekt ve Flutteru jako obvykle&lt;br /&gt;
# Ve složce projektu spusť aktivaci FlutterFire CLI:&lt;br /&gt;
#: &amp;lt;code&amp;gt;dart pub global activate flutterfire_cli&amp;lt;/code&amp;gt;&lt;br /&gt;
#: &amp;lt;code&amp;gt;flutterfire configure --project='''nazev-projektu'''&amp;lt;/code&amp;gt;&lt;br /&gt;
#: Do projektu tím přibude konfigurační soubor: &amp;lt;code&amp;gt;lib/firebase_options.dart&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Podle ChatGPT – ale neodpovídá návodu na Firebase:&lt;br /&gt;
Ve Flutter projektu spusť:&lt;br /&gt;
&lt;br /&gt;
 flutter pub add firebase_core&lt;br /&gt;
 flutter pub add cloud_firestore&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Inicializuj Firebase v main.dart:&lt;br /&gt;
 import 'package:firebase_core/firebase_core.dart';&lt;br /&gt;
 import 'firebase_options.dart';&lt;br /&gt;
 &lt;br /&gt;
 // ...&lt;br /&gt;
 &lt;br /&gt;
 await Firebase.initializeApp(&lt;br /&gt;
     options: DefaultFirebaseOptions.currentPlatform,&lt;br /&gt;
 );&lt;br /&gt;
&amp;lt;!-- Původní podle ChatGPT&lt;br /&gt;
 import 'package:firebase_core/firebase_core.dart';&lt;br /&gt;
 import 'package:flutter/material.dart';&lt;br /&gt;
 &lt;br /&gt;
 void main() async {&lt;br /&gt;
   WidgetsFlutterBinding.ensureInitialized();&lt;br /&gt;
   await Firebase.initializeApp();&lt;br /&gt;
   runApp(MyApp());&lt;br /&gt;
 }&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Další plug-iny importuj dle potřeby viz dále&lt;br /&gt;
&lt;br /&gt;
=== Import Firestore ===&lt;br /&gt;
&lt;br /&gt;
Import:&lt;br /&gt;
&lt;br /&gt;
 import 'package:cloud_firestore/cloud_firestore.dart';&lt;br /&gt;
&lt;br /&gt;
Vytvoření instance pro přístup k databázi:&lt;br /&gt;
&lt;br /&gt;
 final FirebaseFirestore db = FirebaseFirestore.instance;&lt;br /&gt;
&lt;br /&gt;
=== Přidání nového dokumentu ===&lt;br /&gt;
 await db.collection('users').add({&lt;br /&gt;
   'name': 'Jan',&lt;br /&gt;
   'age': 18,&lt;br /&gt;
   'email': 'jan@email.cz',&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
Tím se:&lt;br /&gt;
# vytvoří kolekce users (pokud neexistuje)&lt;br /&gt;
# přidá nový dokument s automatickým ID&lt;br /&gt;
&lt;br /&gt;
; Uložení dokumentu s vlastním ID&lt;br /&gt;
 await db.collection('users').doc('student1').set({&lt;br /&gt;
   'name': 'Petra',&lt;br /&gt;
   'age': 17,&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
=== Čtení dat z Firestore jednorázově===&lt;br /&gt;
&lt;br /&gt;
 var snapshot = await db.collection('users').get();&lt;br /&gt;
 &lt;br /&gt;
 for (var doc in snapshot.docs) {&lt;br /&gt;
   print(doc.data());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Čtení v reálném čase ===&lt;br /&gt;
&lt;br /&gt;
Firestore umožňuje poslouchat změny. Data se pak automaticky aktualizují, pokud proběhne změna v databázi (například z jiného zařízení připojeného ke stejnému projektu):&lt;br /&gt;
&lt;br /&gt;
 StreamBuilder(&lt;br /&gt;
   stream: db.collection('users').snapshots(),&lt;br /&gt;
   builder: (context, snapshot) {&lt;br /&gt;
     if (!snapshot.hasData) {&lt;br /&gt;
       return CircularProgressIndicator();&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     var docs = snapshot.data!.docs;&lt;br /&gt;
 &lt;br /&gt;
     return ListView(&lt;br /&gt;
       children: docs.map((doc) {&lt;br /&gt;
         return ListTile(&lt;br /&gt;
           title: Text(doc['name']),&lt;br /&gt;
         );&lt;br /&gt;
       }).toList(),&lt;br /&gt;
     );&lt;br /&gt;
   },&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
=== Aktualizace dat===&lt;br /&gt;
 await db.collection('users').doc('student1').update({&lt;br /&gt;
   'age': 18,&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
=== Smazání dat===&lt;br /&gt;
&lt;br /&gt;
; Smazání dokumentu&lt;br /&gt;
 await db.collection('users').doc('student1').delete();&lt;br /&gt;
&lt;br /&gt;
=== Bezpečnostní pravidla (Rules) ===&lt;br /&gt;
&lt;br /&gt;
Ve Firebase konzoli nastav pravidla přístupu.&lt;br /&gt;
&lt;br /&gt;
Například pouze pro přihlášené uživatele:&lt;br /&gt;
&lt;br /&gt;
 rules_version = '2';&lt;br /&gt;
 service cloud.firestore {&lt;br /&gt;
   match /databases/{database}/documents {&lt;br /&gt;
     match /{document=**} {&lt;br /&gt;
       allow read, write: if request.auth != null;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Zdroje ===&lt;br /&gt;
* Základ sekce o Firebase byl vytvořen pomocí služby [https://www.chatgpt.com ChatGPT].&lt;br /&gt;
* [https://console.firebase.google.com/ Console.firebase.google.com &amp;gt; Postup nastavení projektu]&lt;br /&gt;
* [https://www.youtube.com/playlist?list=PLl-K7zZEsYLluG5MCVEzXAQ7ACZBCuZgZ YouTube.com &amp;gt; Get to know Cloud Firebase] (seriál videí)&lt;br /&gt;
* [https://cloud.google.com/firestore/pricing Google Cloud &amp;gt; Firestore Pricing]&lt;br /&gt;
&lt;br /&gt;
== Vlastní backend: ServerPod ==&lt;br /&gt;
&lt;br /&gt;
* Framework, který umožňuje vytvořit projekt Flutteru se dvěma částmi: backendem a frontendem.&lt;br /&gt;
* Backend je následně možné spustit na svém serveru.&lt;br /&gt;
* Frontend běží na desktopu.&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/Flutter:_Ukl%C3%A1d%C3%A1n%C3%AD_dat</id>
		<title>Flutter: Ukládání dat</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/Flutter:_Ukl%C3%A1d%C3%A1n%C3%AD_dat"/>
				<updated>2026-02-23T06:11:08Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: /* Nastavení projektu pro Firebase */ Oprava velkého písmene v příkazu&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]][[Category:Programování]][[Category:Flutter]]&lt;br /&gt;
&lt;br /&gt;
Pro trvalé uložení dat i po vypnutí aplikace můžeme data uložit:&lt;br /&gt;
* na lokální disk konkrétního zařízení&lt;br /&gt;
* do síťového úložiště (databáze, cloudové úložiště)&lt;br /&gt;
* můžeme rozdělit aplikaci na frontend a backend, kde data budou uložena v&amp;amp;nbsp;backendu (opět obvykle v&amp;amp;nbsp;databázi).&lt;br /&gt;
&lt;br /&gt;
Následuje několik příkladů možných řešení.&lt;br /&gt;
&lt;br /&gt;
== Lokální export: jsonEncode/jsonDecode ==&lt;br /&gt;
&lt;br /&gt;
=== Vlastnosti ===&lt;br /&gt;
* Formát JSON lze zpracovávat i v dalších aplikacích – je vhodný pro výměnu dat mezi aplikacemi a je textový.&lt;br /&gt;
* Jednoduše lze uložit seznam objektů. Složitější vnořované struktury objektů je třeba ručně převádět.&lt;br /&gt;
* Není vhodné pro větší objem dat – převod na text může zvětšit objem dat.&lt;br /&gt;
* Vhodné zejména pro textová data: texty, celá čísla, logické hodnoty. Méně vhodné pro desetinná čísla, obrázky, ... z důvodu nutné konverze na text.&lt;br /&gt;
* Formát JSON neukládá datové typy.&lt;br /&gt;
* Výsledek je uložen lokálně – převod z mobilní aplikace na desktop apod. je třeba řešit ručně.&lt;br /&gt;
&lt;br /&gt;
=== Postup zápisu ===&lt;br /&gt;
# Nalezení umístění souboru:&lt;br /&gt;
#* Využij balíček &amp;lt;code&amp;gt;path_provider&amp;lt;/code&amp;gt; a metodu &amp;lt;code&amp;gt;getApplicationDocumentsDirectory()&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Pro zápis do souboru použij třídu &amp;lt;code&amp;gt;File&amp;lt;/code&amp;gt; a metodu &amp;lt;code&amp;gt;writeAsString&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Převod dat na JSON&lt;br /&gt;
#* Využij balíček &amp;lt;code&amp;gt;dart:convert&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Pro parsování JSON využij metodu &amp;lt;code&amp;gt;jsonDecode(list)&amp;lt;/code&amp;gt; – výsledkem bude textová reprezentace objektu ve formátu JSON.&lt;br /&gt;
&lt;br /&gt;
=== Postup čtení ===&lt;br /&gt;
# Nalezení umístění souboru:&lt;br /&gt;
#* Využij balíček &amp;lt;code&amp;gt;path_provider&amp;lt;/code&amp;gt; a metodu &amp;lt;code&amp;gt;getApplicationDocumentsDirectory()&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Pro čtení souboru použij třídu &amp;lt;code&amp;gt;File&amp;lt;/code&amp;gt; a metodu &amp;lt;code&amp;gt;readAsString&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Převod dat na JSON&lt;br /&gt;
#* Využij balíček &amp;lt;code&amp;gt;dart:convert&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Pro ukládání využij metodu &amp;lt;code&amp;gt;jsonEncode(list)&amp;lt;/code&amp;gt; – výsledkem bude textová reprezentace objektu ve formátu JSON.&lt;br /&gt;
&lt;br /&gt;
=== Ukázka použití v aplikaci ===&lt;br /&gt;
 import 'dart:io';&lt;br /&gt;
 import 'package:flutter/material.dart';&lt;br /&gt;
 import 'package:path_provider/path_provider.dart';&lt;br /&gt;
 import 'dart:convert';&lt;br /&gt;
 &lt;br /&gt;
 void main() {&lt;br /&gt;
   runApp(const MyApp());&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class MyApp extends StatelessWidget {&lt;br /&gt;
   const MyApp({super.key});&lt;br /&gt;
 &lt;br /&gt;
   @override&lt;br /&gt;
   Widget build(BuildContext context) {&lt;br /&gt;
     return MaterialApp(&lt;br /&gt;
       title: 'Úložiště Demo',&lt;br /&gt;
       home: HomePage('''storage: FileStorage()'''),&lt;br /&gt;
     );&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class Zaznam {&lt;br /&gt;
   final String jmeno;&lt;br /&gt;
   final int pocet;&lt;br /&gt;
 &lt;br /&gt;
   const Zaznam({ required this.jmeno, required this.pocet, }); &lt;br /&gt;
 &lt;br /&gt;
   // Převod do JSON&lt;br /&gt;
   '''Map&amp;lt;String, dynamic&amp;gt; toJson() =&amp;gt; {'''&lt;br /&gt;
     'jmeno': jmeno,&lt;br /&gt;
     'pocet': pocet,&lt;br /&gt;
   };&lt;br /&gt;
 &lt;br /&gt;
   // Obnov z JSON&lt;br /&gt;
   '''factory Zaznam.fromJson(Map&amp;lt;String, dynamic&amp;gt; json) {'''&lt;br /&gt;
     return Zaznam(&lt;br /&gt;
       jmeno: (json['jmeno']),&lt;br /&gt;
       pocet: json['pocet'] as int,&lt;br /&gt;
     );&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /// Práce se soubory&lt;br /&gt;
 '''class FileStorage {'''&lt;br /&gt;
   '''Future&amp;lt;String&amp;gt; get _localPath''' async {&lt;br /&gt;
     final directory = await getApplicationDocumentsDirectory();&lt;br /&gt;
     return directory.path;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;File&amp;gt; get _localFile''' async {&lt;br /&gt;
     final path = await _localPath;&lt;br /&gt;
     return File('$path/data.txt');&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;String&amp;gt; readFile()''' async {&lt;br /&gt;
     final file = await _localFile;&lt;br /&gt;
     return file.readAsString();&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;void&amp;gt; writeFile(String content)''' async {&lt;br /&gt;
     final file = await _localFile;&lt;br /&gt;
     await file.writeAsString(content);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /// Stav aplikace včetně zápisu do souboru&lt;br /&gt;
 class HomePage extends StatefulWidget {&lt;br /&gt;
   final FileStorage storage;&lt;br /&gt;
   const HomePage('''{required this.storage}''');&lt;br /&gt;
   @override&lt;br /&gt;
   State&amp;lt;HomePage&amp;gt; createState() =&amp;gt; _HomePageState();&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class _HomePageState extends State&amp;lt;HomePage&amp;gt; {&lt;br /&gt;
   List&amp;lt;Zaznam&amp;gt; _seznam = [];&lt;br /&gt;
 &lt;br /&gt;
   @override&lt;br /&gt;
   void initState() {&lt;br /&gt;
     super.initState();&lt;br /&gt;
     '''_loadData();'''   // Načtení dat při startu&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;void&amp;gt; _loadData() async {'''&lt;br /&gt;
     try {&lt;br /&gt;
       final jsonString = await widget.storage.readFile();&lt;br /&gt;
       final List&amp;lt;dynamic&amp;gt; decoded = jsonDecode(jsonString);&lt;br /&gt;
       setState(() {&lt;br /&gt;
         _seznam = decoded&lt;br /&gt;
             .map((item) =&amp;gt; Zaznam.fromJson(item as Map&amp;lt;String, dynamic&amp;gt;))&lt;br /&gt;
             .toList();&lt;br /&gt;
       });&lt;br /&gt;
     } catch (e) {&lt;br /&gt;
       TODO: Zobraz chybové hlášení vhodným způsobem.&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;void&amp;gt; _saveData() async {'''&lt;br /&gt;
     final jsonString = jsonEncode(&lt;br /&gt;
       _seznam.map((z) =&amp;gt; z.toJson()).toList()&lt;br /&gt;
     );&lt;br /&gt;
     await widget.storage.writeFile(jsonString);&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   void _addRecord() {&lt;br /&gt;
     setState(() {&lt;br /&gt;
       _seznam.add(Zaznam(&lt;br /&gt;
         jmeno: 'Josef',&lt;br /&gt;
         pocet: 1000,&lt;br /&gt;
       ));&lt;br /&gt;
     });&lt;br /&gt;
     '''_saveData();'''&lt;br /&gt;
   } &lt;br /&gt;
 &lt;br /&gt;
   @override&lt;br /&gt;
   Widget build(BuildContext context) {&lt;br /&gt;
     return Scaffold(&lt;br /&gt;
       // ... vytvoř GUI&lt;br /&gt;
     );&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Tip ===&lt;br /&gt;
* Pro větší objemy dat či komplexnější data lze pro export do formátu JSON využít balíček &amp;lt;code&amp;gt;json_serializable&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Zdroje ===&lt;br /&gt;
* [https://hatchjs.com/list-to-json-flutter/ HatchJS.com &amp;gt; How to Convert a List to JSON in Flutter]&lt;br /&gt;
* [https://docs.flutter.dev/data-and-backend/serialization/json Flutter Docs &amp;gt; JSON and serialization]&lt;br /&gt;
* [https://docs.flutter.dev/cookbook/persistence/reading-writing-files Flutter Docs &amp;gt; Read and write files]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lokální databáze: Hive ==&lt;br /&gt;
&lt;br /&gt;
* Data ukládá binárně, ale stále na lokální zařízení.&lt;br /&gt;
&lt;br /&gt;
=== Zdroje ===&lt;br /&gt;
* [https://medium.com/@ChanakaDev/hive-vs-shared-preferences-10353068a8a6 Medium.com: ChanakaDev &amp;gt; Hive vs. Shared Preferences]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Google Firestore ==&lt;br /&gt;
&lt;br /&gt;
* Cloud Firestore je cloudová NoSQL databáze od Google, která je součástí platformy Google Firebase. &lt;br /&gt;
&lt;br /&gt;
=== Vlastnosti Cloud Firestore ===&lt;br /&gt;
&lt;br /&gt;
; Výhody a nevýhody&lt;br /&gt;
* Firebase je dobře integrovaná do frameworku Flutter (Flutter také vyvíjí Google)&lt;br /&gt;
* Data se ukládají do cloudu – data může sdílet mobilní i webová aplikace&lt;br /&gt;
* Synchronizace dat v reálném čase&lt;br /&gt;
* Pro přístup k&amp;amp;nbsp;datům je potřeba připojení k&amp;amp;nbsp;internetu&lt;br /&gt;
* Pro malé projekty stačí varianta zdarma (pro větší bude třeba platit)&lt;br /&gt;
&lt;br /&gt;
; Struktura dat ve Firestore&lt;br /&gt;
* Data se neukládají do entit jako u ER databází – spíše jako několik seznamů objektů.&lt;br /&gt;
&lt;br /&gt;
Pojmy&lt;br /&gt;
* Dokument (Document) ... konkrétní záznam (jako jeden řádek v databázi) – například údaje o jednom uživateli.&lt;br /&gt;
* Pole (Field) ... konkrétní hodnota (atribut) – například jméno uživatele&lt;br /&gt;
* Kolekce (Collection) ... odpovídá entitě v ER databázích – je to vlastně seznam dokumentů&lt;br /&gt;
* Databáze (Database) ... skupina souvisejících kolekcí&lt;br /&gt;
* Projekt (Project) ... jeden projekt obvykle odpovídá jednomu softwarovému produktu. Může zahrnovat různé podoby jedné aplikace:&lt;br /&gt;
** IOS&lt;br /&gt;
** Android&lt;br /&gt;
** webová aplikace&lt;br /&gt;
** Unity&lt;br /&gt;
** Flutter multiplatformní aplikace&lt;br /&gt;
&lt;br /&gt;
Příklad:&lt;br /&gt;
 users (kolekce)&lt;br /&gt;
    └── user1 (dokument)&lt;br /&gt;
          ├── name: &amp;quot;Jan&amp;quot;&lt;br /&gt;
          ├── age: 18&lt;br /&gt;
          └── email: &amp;quot;jan@email.cz&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Nastavení projektu pro Firebase===&lt;br /&gt;
&lt;br /&gt;
; Založení projektu na webu Firebase&lt;br /&gt;
#Jdi na: [https://console.firebase.google.com Console.firebase.google.com]&lt;br /&gt;
#Klikni na Vytvořit projekt a zadej název projektu&lt;br /&gt;
#Po vytvoření přidej aplikaci (Android / iOS / Web)&lt;br /&gt;
&lt;br /&gt;
; Instalace FlutterFire CLI&lt;br /&gt;
# Nainstaluj Firebase CLI podle [https://firebase.google.com/docs/cli návodu z&amp;amp;nbsp; Firebase.google.com &amp;gt; CLI]&lt;br /&gt;
#* Bude nejspíš vyžadovate heslo správce počítače.&lt;br /&gt;
# Přihlaš se: &amp;lt;code&amp;gt;firebase login&amp;lt;/code&amp;gt;&lt;br /&gt;
#* Musíš rozhodnout, jestli budeš využívat Google Gemini v rámci Firebase a jestli může Google využívat statistická data.&lt;br /&gt;
#* Zvolíš účet Google, pod kterým budeš pracovat&lt;br /&gt;
# Založ projekt ve Flutteru jako obvykle&lt;br /&gt;
# Ve složce projektu spusť aktivaci FlutterFire CLI:&lt;br /&gt;
#: &amp;lt;code&amp;gt;dart pub global activate flutterfire_cli&amp;lt;/code&amp;gt;&lt;br /&gt;
#: &amp;lt;code&amp;gt;flutterfire configure --project='''nazev-projektu'''&amp;lt;/code&amp;gt;&lt;br /&gt;
#: Do projektu tím přibude konfigurační soubor: &amp;lt;code&amp;gt;lib/firebase_options.dart&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Podle ChatGPT – ale neodpovídá návodu na Firebase:&lt;br /&gt;
Ve Flutter projektu spusť:&lt;br /&gt;
&lt;br /&gt;
 flutter pub add firebase_core&lt;br /&gt;
 flutter pub add cloud_firestore&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Inicializuj Firebase v main.dart:&lt;br /&gt;
 import 'package:firebase_core/firebase_core.dart';&lt;br /&gt;
 import 'firebase_options.dart';&lt;br /&gt;
 &lt;br /&gt;
 // ...&lt;br /&gt;
 &lt;br /&gt;
 await Firebase.initializeApp(&lt;br /&gt;
     options: DefaultFirebaseOptions.currentPlatform,&lt;br /&gt;
 );&lt;br /&gt;
&amp;lt;!-- Původní podle ChatGPT&lt;br /&gt;
 import 'package:firebase_core/firebase_core.dart';&lt;br /&gt;
 import 'package:flutter/material.dart';&lt;br /&gt;
 &lt;br /&gt;
 void main() async {&lt;br /&gt;
   WidgetsFlutterBinding.ensureInitialized();&lt;br /&gt;
   await Firebase.initializeApp();&lt;br /&gt;
   runApp(MyApp());&lt;br /&gt;
 }&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Další plug-iny importuj dle potřeby viz dále&lt;br /&gt;
&lt;br /&gt;
=== Import Firestore ===&lt;br /&gt;
&lt;br /&gt;
Import:&lt;br /&gt;
&lt;br /&gt;
 import 'package:cloud_firestore/cloud_firestore.dart';&lt;br /&gt;
&lt;br /&gt;
Vytvoření instance pro přístup k databázi:&lt;br /&gt;
&lt;br /&gt;
 final FirebaseFirestore db = FirebaseFirestore.instance;&lt;br /&gt;
&lt;br /&gt;
=== Přidání nového dokumentu ===&lt;br /&gt;
 await db.collection('users').add({&lt;br /&gt;
   'name': 'Jan',&lt;br /&gt;
   'age': 18,&lt;br /&gt;
   'email': 'jan@email.cz',&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
Tím se:&lt;br /&gt;
# vytvoří kolekce users (pokud neexistuje)&lt;br /&gt;
# přidá nový dokument s automatickým ID&lt;br /&gt;
&lt;br /&gt;
; Uložení dokumentu s vlastním ID&lt;br /&gt;
 await db.collection('users').doc('student1').set({&lt;br /&gt;
   'name': 'Petra',&lt;br /&gt;
   'age': 17,&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
=== Čtení dat z Firestore jednorázově===&lt;br /&gt;
&lt;br /&gt;
 var snapshot = await db.collection('users').get();&lt;br /&gt;
 &lt;br /&gt;
 for (var doc in snapshot.docs) {&lt;br /&gt;
   print(doc.data());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Čtení v reálném čase ===&lt;br /&gt;
&lt;br /&gt;
Firestore umožňuje poslouchat změny. Data se pak automaticky aktualizují, pokud proběhne změna v databázi (například z jiného zařízení připojeného ke stejnému projektu):&lt;br /&gt;
&lt;br /&gt;
 StreamBuilder(&lt;br /&gt;
   stream: db.collection('users').snapshots(),&lt;br /&gt;
   builder: (context, snapshot) {&lt;br /&gt;
     if (!snapshot.hasData) {&lt;br /&gt;
       return CircularProgressIndicator();&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     var docs = snapshot.data!.docs;&lt;br /&gt;
 &lt;br /&gt;
     return ListView(&lt;br /&gt;
       children: docs.map((doc) {&lt;br /&gt;
         return ListTile(&lt;br /&gt;
           title: Text(doc['name']),&lt;br /&gt;
         );&lt;br /&gt;
       }).toList(),&lt;br /&gt;
     );&lt;br /&gt;
   },&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
=== Aktualizace dat===&lt;br /&gt;
 await db.collection('users').doc('student1').update({&lt;br /&gt;
   'age': 18,&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
=== Smazání dat===&lt;br /&gt;
&lt;br /&gt;
; Smazání dokumentu&lt;br /&gt;
 await db.collection('users').doc('student1').delete();&lt;br /&gt;
&lt;br /&gt;
=== Bezpečnostní pravidla (Rules) ===&lt;br /&gt;
&lt;br /&gt;
Ve Firebase konzoli nastav pravidla přístupu.&lt;br /&gt;
&lt;br /&gt;
Například pouze pro přihlášené uživatele:&lt;br /&gt;
&lt;br /&gt;
 rules_version = '2';&lt;br /&gt;
 service cloud.firestore {&lt;br /&gt;
   match /databases/{database}/documents {&lt;br /&gt;
     match /{document=**} {&lt;br /&gt;
       allow read, write: if request.auth != null;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Zdroje ===&lt;br /&gt;
* Základ sekce o Firebase byl vytvořen pomocí služby [https://www.chatgpt.com ChatGPT].&lt;br /&gt;
* [https://console.firebase.google.com/ Console.firebase.google.com &amp;gt; Postup nastavení projektu]&lt;br /&gt;
* [https://www.youtube.com/playlist?list=PLl-K7zZEsYLluG5MCVEzXAQ7ACZBCuZgZ YouTube.com &amp;gt; Get to know Cloud Firebase] (seriál videí)&lt;br /&gt;
* [https://cloud.google.com/firestore/pricing Google Cloud &amp;gt; Firestore Pricing]&lt;br /&gt;
&lt;br /&gt;
== Vlastní backend: ServerPod ==&lt;br /&gt;
&lt;br /&gt;
* Framework, který umožňuje vytvořit projekt Flutteru se dvěma částmi: backendem a frontendem.&lt;br /&gt;
* Backend je následně možné spustit na svém serveru.&lt;br /&gt;
* Frontend běží na desktopu.&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/Flutter:_Ukl%C3%A1d%C3%A1n%C3%AD_dat</id>
		<title>Flutter: Ukládání dat</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/Flutter:_Ukl%C3%A1d%C3%A1n%C3%AD_dat"/>
				<updated>2026-02-23T06:10:19Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: /* Nastavení projektu pro Firebase */ Doplnění zkušeností z instalace.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]][[Category:Programování]][[Category:Flutter]]&lt;br /&gt;
&lt;br /&gt;
Pro trvalé uložení dat i po vypnutí aplikace můžeme data uložit:&lt;br /&gt;
* na lokální disk konkrétního zařízení&lt;br /&gt;
* do síťového úložiště (databáze, cloudové úložiště)&lt;br /&gt;
* můžeme rozdělit aplikaci na frontend a backend, kde data budou uložena v&amp;amp;nbsp;backendu (opět obvykle v&amp;amp;nbsp;databázi).&lt;br /&gt;
&lt;br /&gt;
Následuje několik příkladů možných řešení.&lt;br /&gt;
&lt;br /&gt;
== Lokální export: jsonEncode/jsonDecode ==&lt;br /&gt;
&lt;br /&gt;
=== Vlastnosti ===&lt;br /&gt;
* Formát JSON lze zpracovávat i v dalších aplikacích – je vhodný pro výměnu dat mezi aplikacemi a je textový.&lt;br /&gt;
* Jednoduše lze uložit seznam objektů. Složitější vnořované struktury objektů je třeba ručně převádět.&lt;br /&gt;
* Není vhodné pro větší objem dat – převod na text může zvětšit objem dat.&lt;br /&gt;
* Vhodné zejména pro textová data: texty, celá čísla, logické hodnoty. Méně vhodné pro desetinná čísla, obrázky, ... z důvodu nutné konverze na text.&lt;br /&gt;
* Formát JSON neukládá datové typy.&lt;br /&gt;
* Výsledek je uložen lokálně – převod z mobilní aplikace na desktop apod. je třeba řešit ručně.&lt;br /&gt;
&lt;br /&gt;
=== Postup zápisu ===&lt;br /&gt;
# Nalezení umístění souboru:&lt;br /&gt;
#* Využij balíček &amp;lt;code&amp;gt;path_provider&amp;lt;/code&amp;gt; a metodu &amp;lt;code&amp;gt;getApplicationDocumentsDirectory()&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Pro zápis do souboru použij třídu &amp;lt;code&amp;gt;File&amp;lt;/code&amp;gt; a metodu &amp;lt;code&amp;gt;writeAsString&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Převod dat na JSON&lt;br /&gt;
#* Využij balíček &amp;lt;code&amp;gt;dart:convert&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Pro parsování JSON využij metodu &amp;lt;code&amp;gt;jsonDecode(list)&amp;lt;/code&amp;gt; – výsledkem bude textová reprezentace objektu ve formátu JSON.&lt;br /&gt;
&lt;br /&gt;
=== Postup čtení ===&lt;br /&gt;
# Nalezení umístění souboru:&lt;br /&gt;
#* Využij balíček &amp;lt;code&amp;gt;path_provider&amp;lt;/code&amp;gt; a metodu &amp;lt;code&amp;gt;getApplicationDocumentsDirectory()&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Pro čtení souboru použij třídu &amp;lt;code&amp;gt;File&amp;lt;/code&amp;gt; a metodu &amp;lt;code&amp;gt;readAsString&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Převod dat na JSON&lt;br /&gt;
#* Využij balíček &amp;lt;code&amp;gt;dart:convert&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Pro ukládání využij metodu &amp;lt;code&amp;gt;jsonEncode(list)&amp;lt;/code&amp;gt; – výsledkem bude textová reprezentace objektu ve formátu JSON.&lt;br /&gt;
&lt;br /&gt;
=== Ukázka použití v aplikaci ===&lt;br /&gt;
 import 'dart:io';&lt;br /&gt;
 import 'package:flutter/material.dart';&lt;br /&gt;
 import 'package:path_provider/path_provider.dart';&lt;br /&gt;
 import 'dart:convert';&lt;br /&gt;
 &lt;br /&gt;
 void main() {&lt;br /&gt;
   runApp(const MyApp());&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class MyApp extends StatelessWidget {&lt;br /&gt;
   const MyApp({super.key});&lt;br /&gt;
 &lt;br /&gt;
   @override&lt;br /&gt;
   Widget build(BuildContext context) {&lt;br /&gt;
     return MaterialApp(&lt;br /&gt;
       title: 'Úložiště Demo',&lt;br /&gt;
       home: HomePage('''storage: FileStorage()'''),&lt;br /&gt;
     );&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class Zaznam {&lt;br /&gt;
   final String jmeno;&lt;br /&gt;
   final int pocet;&lt;br /&gt;
 &lt;br /&gt;
   const Zaznam({ required this.jmeno, required this.pocet, }); &lt;br /&gt;
 &lt;br /&gt;
   // Převod do JSON&lt;br /&gt;
   '''Map&amp;lt;String, dynamic&amp;gt; toJson() =&amp;gt; {'''&lt;br /&gt;
     'jmeno': jmeno,&lt;br /&gt;
     'pocet': pocet,&lt;br /&gt;
   };&lt;br /&gt;
 &lt;br /&gt;
   // Obnov z JSON&lt;br /&gt;
   '''factory Zaznam.fromJson(Map&amp;lt;String, dynamic&amp;gt; json) {'''&lt;br /&gt;
     return Zaznam(&lt;br /&gt;
       jmeno: (json['jmeno']),&lt;br /&gt;
       pocet: json['pocet'] as int,&lt;br /&gt;
     );&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /// Práce se soubory&lt;br /&gt;
 '''class FileStorage {'''&lt;br /&gt;
   '''Future&amp;lt;String&amp;gt; get _localPath''' async {&lt;br /&gt;
     final directory = await getApplicationDocumentsDirectory();&lt;br /&gt;
     return directory.path;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;File&amp;gt; get _localFile''' async {&lt;br /&gt;
     final path = await _localPath;&lt;br /&gt;
     return File('$path/data.txt');&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;String&amp;gt; readFile()''' async {&lt;br /&gt;
     final file = await _localFile;&lt;br /&gt;
     return file.readAsString();&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;void&amp;gt; writeFile(String content)''' async {&lt;br /&gt;
     final file = await _localFile;&lt;br /&gt;
     await file.writeAsString(content);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /// Stav aplikace včetně zápisu do souboru&lt;br /&gt;
 class HomePage extends StatefulWidget {&lt;br /&gt;
   final FileStorage storage;&lt;br /&gt;
   const HomePage('''{required this.storage}''');&lt;br /&gt;
   @override&lt;br /&gt;
   State&amp;lt;HomePage&amp;gt; createState() =&amp;gt; _HomePageState();&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class _HomePageState extends State&amp;lt;HomePage&amp;gt; {&lt;br /&gt;
   List&amp;lt;Zaznam&amp;gt; _seznam = [];&lt;br /&gt;
 &lt;br /&gt;
   @override&lt;br /&gt;
   void initState() {&lt;br /&gt;
     super.initState();&lt;br /&gt;
     '''_loadData();'''   // Načtení dat při startu&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;void&amp;gt; _loadData() async {'''&lt;br /&gt;
     try {&lt;br /&gt;
       final jsonString = await widget.storage.readFile();&lt;br /&gt;
       final List&amp;lt;dynamic&amp;gt; decoded = jsonDecode(jsonString);&lt;br /&gt;
       setState(() {&lt;br /&gt;
         _seznam = decoded&lt;br /&gt;
             .map((item) =&amp;gt; Zaznam.fromJson(item as Map&amp;lt;String, dynamic&amp;gt;))&lt;br /&gt;
             .toList();&lt;br /&gt;
       });&lt;br /&gt;
     } catch (e) {&lt;br /&gt;
       TODO: Zobraz chybové hlášení vhodným způsobem.&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;void&amp;gt; _saveData() async {'''&lt;br /&gt;
     final jsonString = jsonEncode(&lt;br /&gt;
       _seznam.map((z) =&amp;gt; z.toJson()).toList()&lt;br /&gt;
     );&lt;br /&gt;
     await widget.storage.writeFile(jsonString);&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   void _addRecord() {&lt;br /&gt;
     setState(() {&lt;br /&gt;
       _seznam.add(Zaznam(&lt;br /&gt;
         jmeno: 'Josef',&lt;br /&gt;
         pocet: 1000,&lt;br /&gt;
       ));&lt;br /&gt;
     });&lt;br /&gt;
     '''_saveData();'''&lt;br /&gt;
   } &lt;br /&gt;
 &lt;br /&gt;
   @override&lt;br /&gt;
   Widget build(BuildContext context) {&lt;br /&gt;
     return Scaffold(&lt;br /&gt;
       // ... vytvoř GUI&lt;br /&gt;
     );&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Tip ===&lt;br /&gt;
* Pro větší objemy dat či komplexnější data lze pro export do formátu JSON využít balíček &amp;lt;code&amp;gt;json_serializable&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Zdroje ===&lt;br /&gt;
* [https://hatchjs.com/list-to-json-flutter/ HatchJS.com &amp;gt; How to Convert a List to JSON in Flutter]&lt;br /&gt;
* [https://docs.flutter.dev/data-and-backend/serialization/json Flutter Docs &amp;gt; JSON and serialization]&lt;br /&gt;
* [https://docs.flutter.dev/cookbook/persistence/reading-writing-files Flutter Docs &amp;gt; Read and write files]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lokální databáze: Hive ==&lt;br /&gt;
&lt;br /&gt;
* Data ukládá binárně, ale stále na lokální zařízení.&lt;br /&gt;
&lt;br /&gt;
=== Zdroje ===&lt;br /&gt;
* [https://medium.com/@ChanakaDev/hive-vs-shared-preferences-10353068a8a6 Medium.com: ChanakaDev &amp;gt; Hive vs. Shared Preferences]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Google Firestore ==&lt;br /&gt;
&lt;br /&gt;
* Cloud Firestore je cloudová NoSQL databáze od Google, která je součástí platformy Google Firebase. &lt;br /&gt;
&lt;br /&gt;
=== Vlastnosti Cloud Firestore ===&lt;br /&gt;
&lt;br /&gt;
; Výhody a nevýhody&lt;br /&gt;
* Firebase je dobře integrovaná do frameworku Flutter (Flutter také vyvíjí Google)&lt;br /&gt;
* Data se ukládají do cloudu – data může sdílet mobilní i webová aplikace&lt;br /&gt;
* Synchronizace dat v reálném čase&lt;br /&gt;
* Pro přístup k&amp;amp;nbsp;datům je potřeba připojení k&amp;amp;nbsp;internetu&lt;br /&gt;
* Pro malé projekty stačí varianta zdarma (pro větší bude třeba platit)&lt;br /&gt;
&lt;br /&gt;
; Struktura dat ve Firestore&lt;br /&gt;
* Data se neukládají do entit jako u ER databází – spíše jako několik seznamů objektů.&lt;br /&gt;
&lt;br /&gt;
Pojmy&lt;br /&gt;
* Dokument (Document) ... konkrétní záznam (jako jeden řádek v databázi) – například údaje o jednom uživateli.&lt;br /&gt;
* Pole (Field) ... konkrétní hodnota (atribut) – například jméno uživatele&lt;br /&gt;
* Kolekce (Collection) ... odpovídá entitě v ER databázích – je to vlastně seznam dokumentů&lt;br /&gt;
* Databáze (Database) ... skupina souvisejících kolekcí&lt;br /&gt;
* Projekt (Project) ... jeden projekt obvykle odpovídá jednomu softwarovému produktu. Může zahrnovat různé podoby jedné aplikace:&lt;br /&gt;
** IOS&lt;br /&gt;
** Android&lt;br /&gt;
** webová aplikace&lt;br /&gt;
** Unity&lt;br /&gt;
** Flutter multiplatformní aplikace&lt;br /&gt;
&lt;br /&gt;
Příklad:&lt;br /&gt;
 users (kolekce)&lt;br /&gt;
    └── user1 (dokument)&lt;br /&gt;
          ├── name: &amp;quot;Jan&amp;quot;&lt;br /&gt;
          ├── age: 18&lt;br /&gt;
          └── email: &amp;quot;jan@email.cz&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Nastavení projektu pro Firebase===&lt;br /&gt;
&lt;br /&gt;
; Založení projektu na webu Firebase&lt;br /&gt;
#Jdi na: [https://console.firebase.google.com Console.firebase.google.com]&lt;br /&gt;
#Klikni na Vytvořit projekt a zadej název projektu&lt;br /&gt;
#Po vytvoření přidej aplikaci (Android / iOS / Web)&lt;br /&gt;
&lt;br /&gt;
; Instalace FlutterFire CLI&lt;br /&gt;
# Nainstaluj Firebase CLI podle [https://firebase.google.com/docs/cli návodu z&amp;amp;nbsp; Firebase.google.com &amp;gt; CLI]&lt;br /&gt;
#* Bude nejspíš vyžadovate heslo správce počítače.&lt;br /&gt;
# Přihlaš se: &amp;lt;code&amp;gt;Firebase login&amp;lt;/code&amp;gt;&lt;br /&gt;
#* Musíš rozhodnout, jestli budeš využívat Google Gemini v rámci Firebase a jestli může Google využívat statistická data.&lt;br /&gt;
#* Zvolíš účet Google, pod kterým budeš pracovat&lt;br /&gt;
# Založ projekt ve Flutteru jako obvykle&lt;br /&gt;
# Ve složce projektu spusť aktivaci FlutterFire CLI:&lt;br /&gt;
#: &amp;lt;code&amp;gt;dart pub global activate flutterfire_cli&amp;lt;/code&amp;gt;&lt;br /&gt;
#: &amp;lt;code&amp;gt;flutterfire configure --project='''nazev-projektu'''&amp;lt;/code&amp;gt;&lt;br /&gt;
#: Do projektu tím přibude konfigurační soubor: &amp;lt;code&amp;gt;lib/firebase_options.dart&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Podle ChatGPT – ale neodpovídá návodu na Firebase:&lt;br /&gt;
Ve Flutter projektu spusť:&lt;br /&gt;
&lt;br /&gt;
 flutter pub add firebase_core&lt;br /&gt;
 flutter pub add cloud_firestore&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Inicializuj Firebase v main.dart:&lt;br /&gt;
 import 'package:firebase_core/firebase_core.dart';&lt;br /&gt;
 import 'firebase_options.dart';&lt;br /&gt;
 &lt;br /&gt;
 // ...&lt;br /&gt;
 &lt;br /&gt;
 await Firebase.initializeApp(&lt;br /&gt;
     options: DefaultFirebaseOptions.currentPlatform,&lt;br /&gt;
 );&lt;br /&gt;
&amp;lt;!-- Původní podle ChatGPT&lt;br /&gt;
 import 'package:firebase_core/firebase_core.dart';&lt;br /&gt;
 import 'package:flutter/material.dart';&lt;br /&gt;
 &lt;br /&gt;
 void main() async {&lt;br /&gt;
   WidgetsFlutterBinding.ensureInitialized();&lt;br /&gt;
   await Firebase.initializeApp();&lt;br /&gt;
   runApp(MyApp());&lt;br /&gt;
 }&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Další plug-iny importuj dle potřeby viz dále&lt;br /&gt;
&lt;br /&gt;
=== Import Firestore ===&lt;br /&gt;
&lt;br /&gt;
Import:&lt;br /&gt;
&lt;br /&gt;
 import 'package:cloud_firestore/cloud_firestore.dart';&lt;br /&gt;
&lt;br /&gt;
Vytvoření instance pro přístup k databázi:&lt;br /&gt;
&lt;br /&gt;
 final FirebaseFirestore db = FirebaseFirestore.instance;&lt;br /&gt;
&lt;br /&gt;
=== Přidání nového dokumentu ===&lt;br /&gt;
 await db.collection('users').add({&lt;br /&gt;
   'name': 'Jan',&lt;br /&gt;
   'age': 18,&lt;br /&gt;
   'email': 'jan@email.cz',&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
Tím se:&lt;br /&gt;
# vytvoří kolekce users (pokud neexistuje)&lt;br /&gt;
# přidá nový dokument s automatickým ID&lt;br /&gt;
&lt;br /&gt;
; Uložení dokumentu s vlastním ID&lt;br /&gt;
 await db.collection('users').doc('student1').set({&lt;br /&gt;
   'name': 'Petra',&lt;br /&gt;
   'age': 17,&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
=== Čtení dat z Firestore jednorázově===&lt;br /&gt;
&lt;br /&gt;
 var snapshot = await db.collection('users').get();&lt;br /&gt;
 &lt;br /&gt;
 for (var doc in snapshot.docs) {&lt;br /&gt;
   print(doc.data());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Čtení v reálném čase ===&lt;br /&gt;
&lt;br /&gt;
Firestore umožňuje poslouchat změny. Data se pak automaticky aktualizují, pokud proběhne změna v databázi (například z jiného zařízení připojeného ke stejnému projektu):&lt;br /&gt;
&lt;br /&gt;
 StreamBuilder(&lt;br /&gt;
   stream: db.collection('users').snapshots(),&lt;br /&gt;
   builder: (context, snapshot) {&lt;br /&gt;
     if (!snapshot.hasData) {&lt;br /&gt;
       return CircularProgressIndicator();&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     var docs = snapshot.data!.docs;&lt;br /&gt;
 &lt;br /&gt;
     return ListView(&lt;br /&gt;
       children: docs.map((doc) {&lt;br /&gt;
         return ListTile(&lt;br /&gt;
           title: Text(doc['name']),&lt;br /&gt;
         );&lt;br /&gt;
       }).toList(),&lt;br /&gt;
     );&lt;br /&gt;
   },&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
=== Aktualizace dat===&lt;br /&gt;
 await db.collection('users').doc('student1').update({&lt;br /&gt;
   'age': 18,&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
=== Smazání dat===&lt;br /&gt;
&lt;br /&gt;
; Smazání dokumentu&lt;br /&gt;
 await db.collection('users').doc('student1').delete();&lt;br /&gt;
&lt;br /&gt;
=== Bezpečnostní pravidla (Rules) ===&lt;br /&gt;
&lt;br /&gt;
Ve Firebase konzoli nastav pravidla přístupu.&lt;br /&gt;
&lt;br /&gt;
Například pouze pro přihlášené uživatele:&lt;br /&gt;
&lt;br /&gt;
 rules_version = '2';&lt;br /&gt;
 service cloud.firestore {&lt;br /&gt;
   match /databases/{database}/documents {&lt;br /&gt;
     match /{document=**} {&lt;br /&gt;
       allow read, write: if request.auth != null;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Zdroje ===&lt;br /&gt;
* Základ sekce o Firebase byl vytvořen pomocí služby [https://www.chatgpt.com ChatGPT].&lt;br /&gt;
* [https://console.firebase.google.com/ Console.firebase.google.com &amp;gt; Postup nastavení projektu]&lt;br /&gt;
* [https://www.youtube.com/playlist?list=PLl-K7zZEsYLluG5MCVEzXAQ7ACZBCuZgZ YouTube.com &amp;gt; Get to know Cloud Firebase] (seriál videí)&lt;br /&gt;
* [https://cloud.google.com/firestore/pricing Google Cloud &amp;gt; Firestore Pricing]&lt;br /&gt;
&lt;br /&gt;
== Vlastní backend: ServerPod ==&lt;br /&gt;
&lt;br /&gt;
* Framework, který umožňuje vytvořit projekt Flutteru se dvěma částmi: backendem a frontendem.&lt;br /&gt;
* Backend je následně možné spustit na svém serveru.&lt;br /&gt;
* Frontend běží na desktopu.&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/Flutter:_Ukl%C3%A1d%C3%A1n%C3%AD_dat</id>
		<title>Flutter: Ukládání dat</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/Flutter:_Ukl%C3%A1d%C3%A1n%C3%AD_dat"/>
				<updated>2026-02-23T06:00:18Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: /* Google Firestore */ Lepší popis instalace podle stránek Firebase.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]][[Category:Programování]][[Category:Flutter]]&lt;br /&gt;
&lt;br /&gt;
Pro trvalé uložení dat i po vypnutí aplikace můžeme data uložit:&lt;br /&gt;
* na lokální disk konkrétního zařízení&lt;br /&gt;
* do síťového úložiště (databáze, cloudové úložiště)&lt;br /&gt;
* můžeme rozdělit aplikaci na frontend a backend, kde data budou uložena v&amp;amp;nbsp;backendu (opět obvykle v&amp;amp;nbsp;databázi).&lt;br /&gt;
&lt;br /&gt;
Následuje několik příkladů možných řešení.&lt;br /&gt;
&lt;br /&gt;
== Lokální export: jsonEncode/jsonDecode ==&lt;br /&gt;
&lt;br /&gt;
=== Vlastnosti ===&lt;br /&gt;
* Formát JSON lze zpracovávat i v dalších aplikacích – je vhodný pro výměnu dat mezi aplikacemi a je textový.&lt;br /&gt;
* Jednoduše lze uložit seznam objektů. Složitější vnořované struktury objektů je třeba ručně převádět.&lt;br /&gt;
* Není vhodné pro větší objem dat – převod na text může zvětšit objem dat.&lt;br /&gt;
* Vhodné zejména pro textová data: texty, celá čísla, logické hodnoty. Méně vhodné pro desetinná čísla, obrázky, ... z důvodu nutné konverze na text.&lt;br /&gt;
* Formát JSON neukládá datové typy.&lt;br /&gt;
* Výsledek je uložen lokálně – převod z mobilní aplikace na desktop apod. je třeba řešit ručně.&lt;br /&gt;
&lt;br /&gt;
=== Postup zápisu ===&lt;br /&gt;
# Nalezení umístění souboru:&lt;br /&gt;
#* Využij balíček &amp;lt;code&amp;gt;path_provider&amp;lt;/code&amp;gt; a metodu &amp;lt;code&amp;gt;getApplicationDocumentsDirectory()&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Pro zápis do souboru použij třídu &amp;lt;code&amp;gt;File&amp;lt;/code&amp;gt; a metodu &amp;lt;code&amp;gt;writeAsString&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Převod dat na JSON&lt;br /&gt;
#* Využij balíček &amp;lt;code&amp;gt;dart:convert&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Pro parsování JSON využij metodu &amp;lt;code&amp;gt;jsonDecode(list)&amp;lt;/code&amp;gt; – výsledkem bude textová reprezentace objektu ve formátu JSON.&lt;br /&gt;
&lt;br /&gt;
=== Postup čtení ===&lt;br /&gt;
# Nalezení umístění souboru:&lt;br /&gt;
#* Využij balíček &amp;lt;code&amp;gt;path_provider&amp;lt;/code&amp;gt; a metodu &amp;lt;code&amp;gt;getApplicationDocumentsDirectory()&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Pro čtení souboru použij třídu &amp;lt;code&amp;gt;File&amp;lt;/code&amp;gt; a metodu &amp;lt;code&amp;gt;readAsString&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Převod dat na JSON&lt;br /&gt;
#* Využij balíček &amp;lt;code&amp;gt;dart:convert&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Pro ukládání využij metodu &amp;lt;code&amp;gt;jsonEncode(list)&amp;lt;/code&amp;gt; – výsledkem bude textová reprezentace objektu ve formátu JSON.&lt;br /&gt;
&lt;br /&gt;
=== Ukázka použití v aplikaci ===&lt;br /&gt;
 import 'dart:io';&lt;br /&gt;
 import 'package:flutter/material.dart';&lt;br /&gt;
 import 'package:path_provider/path_provider.dart';&lt;br /&gt;
 import 'dart:convert';&lt;br /&gt;
 &lt;br /&gt;
 void main() {&lt;br /&gt;
   runApp(const MyApp());&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class MyApp extends StatelessWidget {&lt;br /&gt;
   const MyApp({super.key});&lt;br /&gt;
 &lt;br /&gt;
   @override&lt;br /&gt;
   Widget build(BuildContext context) {&lt;br /&gt;
     return MaterialApp(&lt;br /&gt;
       title: 'Úložiště Demo',&lt;br /&gt;
       home: HomePage('''storage: FileStorage()'''),&lt;br /&gt;
     );&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class Zaznam {&lt;br /&gt;
   final String jmeno;&lt;br /&gt;
   final int pocet;&lt;br /&gt;
 &lt;br /&gt;
   const Zaznam({ required this.jmeno, required this.pocet, }); &lt;br /&gt;
 &lt;br /&gt;
   // Převod do JSON&lt;br /&gt;
   '''Map&amp;lt;String, dynamic&amp;gt; toJson() =&amp;gt; {'''&lt;br /&gt;
     'jmeno': jmeno,&lt;br /&gt;
     'pocet': pocet,&lt;br /&gt;
   };&lt;br /&gt;
 &lt;br /&gt;
   // Obnov z JSON&lt;br /&gt;
   '''factory Zaznam.fromJson(Map&amp;lt;String, dynamic&amp;gt; json) {'''&lt;br /&gt;
     return Zaznam(&lt;br /&gt;
       jmeno: (json['jmeno']),&lt;br /&gt;
       pocet: json['pocet'] as int,&lt;br /&gt;
     );&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /// Práce se soubory&lt;br /&gt;
 '''class FileStorage {'''&lt;br /&gt;
   '''Future&amp;lt;String&amp;gt; get _localPath''' async {&lt;br /&gt;
     final directory = await getApplicationDocumentsDirectory();&lt;br /&gt;
     return directory.path;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;File&amp;gt; get _localFile''' async {&lt;br /&gt;
     final path = await _localPath;&lt;br /&gt;
     return File('$path/data.txt');&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;String&amp;gt; readFile()''' async {&lt;br /&gt;
     final file = await _localFile;&lt;br /&gt;
     return file.readAsString();&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;void&amp;gt; writeFile(String content)''' async {&lt;br /&gt;
     final file = await _localFile;&lt;br /&gt;
     await file.writeAsString(content);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /// Stav aplikace včetně zápisu do souboru&lt;br /&gt;
 class HomePage extends StatefulWidget {&lt;br /&gt;
   final FileStorage storage;&lt;br /&gt;
   const HomePage('''{required this.storage}''');&lt;br /&gt;
   @override&lt;br /&gt;
   State&amp;lt;HomePage&amp;gt; createState() =&amp;gt; _HomePageState();&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class _HomePageState extends State&amp;lt;HomePage&amp;gt; {&lt;br /&gt;
   List&amp;lt;Zaznam&amp;gt; _seznam = [];&lt;br /&gt;
 &lt;br /&gt;
   @override&lt;br /&gt;
   void initState() {&lt;br /&gt;
     super.initState();&lt;br /&gt;
     '''_loadData();'''   // Načtení dat při startu&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;void&amp;gt; _loadData() async {'''&lt;br /&gt;
     try {&lt;br /&gt;
       final jsonString = await widget.storage.readFile();&lt;br /&gt;
       final List&amp;lt;dynamic&amp;gt; decoded = jsonDecode(jsonString);&lt;br /&gt;
       setState(() {&lt;br /&gt;
         _seznam = decoded&lt;br /&gt;
             .map((item) =&amp;gt; Zaznam.fromJson(item as Map&amp;lt;String, dynamic&amp;gt;))&lt;br /&gt;
             .toList();&lt;br /&gt;
       });&lt;br /&gt;
     } catch (e) {&lt;br /&gt;
       TODO: Zobraz chybové hlášení vhodným způsobem.&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;void&amp;gt; _saveData() async {'''&lt;br /&gt;
     final jsonString = jsonEncode(&lt;br /&gt;
       _seznam.map((z) =&amp;gt; z.toJson()).toList()&lt;br /&gt;
     );&lt;br /&gt;
     await widget.storage.writeFile(jsonString);&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   void _addRecord() {&lt;br /&gt;
     setState(() {&lt;br /&gt;
       _seznam.add(Zaznam(&lt;br /&gt;
         jmeno: 'Josef',&lt;br /&gt;
         pocet: 1000,&lt;br /&gt;
       ));&lt;br /&gt;
     });&lt;br /&gt;
     '''_saveData();'''&lt;br /&gt;
   } &lt;br /&gt;
 &lt;br /&gt;
   @override&lt;br /&gt;
   Widget build(BuildContext context) {&lt;br /&gt;
     return Scaffold(&lt;br /&gt;
       // ... vytvoř GUI&lt;br /&gt;
     );&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Tip ===&lt;br /&gt;
* Pro větší objemy dat či komplexnější data lze pro export do formátu JSON využít balíček &amp;lt;code&amp;gt;json_serializable&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Zdroje ===&lt;br /&gt;
* [https://hatchjs.com/list-to-json-flutter/ HatchJS.com &amp;gt; How to Convert a List to JSON in Flutter]&lt;br /&gt;
* [https://docs.flutter.dev/data-and-backend/serialization/json Flutter Docs &amp;gt; JSON and serialization]&lt;br /&gt;
* [https://docs.flutter.dev/cookbook/persistence/reading-writing-files Flutter Docs &amp;gt; Read and write files]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lokální databáze: Hive ==&lt;br /&gt;
&lt;br /&gt;
* Data ukládá binárně, ale stále na lokální zařízení.&lt;br /&gt;
&lt;br /&gt;
=== Zdroje ===&lt;br /&gt;
* [https://medium.com/@ChanakaDev/hive-vs-shared-preferences-10353068a8a6 Medium.com: ChanakaDev &amp;gt; Hive vs. Shared Preferences]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Google Firestore ==&lt;br /&gt;
&lt;br /&gt;
* Cloud Firestore je cloudová NoSQL databáze od Google, která je součástí platformy Google Firebase. &lt;br /&gt;
&lt;br /&gt;
=== Vlastnosti Cloud Firestore ===&lt;br /&gt;
&lt;br /&gt;
; Výhody a nevýhody&lt;br /&gt;
* Firebase je dobře integrovaná do frameworku Flutter (Flutter také vyvíjí Google)&lt;br /&gt;
* Data se ukládají do cloudu – data může sdílet mobilní i webová aplikace&lt;br /&gt;
* Synchronizace dat v reálném čase&lt;br /&gt;
* Pro přístup k&amp;amp;nbsp;datům je potřeba připojení k&amp;amp;nbsp;internetu&lt;br /&gt;
* Pro malé projekty stačí varianta zdarma (pro větší bude třeba platit)&lt;br /&gt;
&lt;br /&gt;
; Struktura dat ve Firestore&lt;br /&gt;
* Data se neukládají do entit jako u ER databází – spíše jako několik seznamů objektů.&lt;br /&gt;
&lt;br /&gt;
Pojmy&lt;br /&gt;
* Dokument (Document) ... konkrétní záznam (jako jeden řádek v databázi) – například údaje o jednom uživateli.&lt;br /&gt;
* Pole (Field) ... konkrétní hodnota (atribut) – například jméno uživatele&lt;br /&gt;
* Kolekce (Collection) ... odpovídá entitě v ER databázích – je to vlastně seznam dokumentů&lt;br /&gt;
* Databáze (Database) ... skupina souvisejících kolekcí&lt;br /&gt;
* Projekt (Project) ... jeden projekt obvykle odpovídá jednomu softwarovému produktu. Může zahrnovat různé podoby jedné aplikace:&lt;br /&gt;
** IOS&lt;br /&gt;
** Android&lt;br /&gt;
** webová aplikace&lt;br /&gt;
** Unity&lt;br /&gt;
** Flutter multiplatformní aplikace&lt;br /&gt;
&lt;br /&gt;
Příklad:&lt;br /&gt;
 users (kolekce)&lt;br /&gt;
    └── user1 (dokument)&lt;br /&gt;
          ├── name: &amp;quot;Jan&amp;quot;&lt;br /&gt;
          ├── age: 18&lt;br /&gt;
          └── email: &amp;quot;jan@email.cz&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Nastavení projektu pro Firebase===&lt;br /&gt;
&lt;br /&gt;
; Založení projektu na webu Firebase&lt;br /&gt;
#Jdi na: [https://console.firebase.google.com Console.firebase.google.com]&lt;br /&gt;
#Klikni na Vytvořit projekt a zadej název projektu&lt;br /&gt;
#Po vytvoření přidej aplikaci (Android / iOS / Web)&lt;br /&gt;
&lt;br /&gt;
; Instalace FlutterFire CLI&lt;br /&gt;
# Nainstaluj Firebase CLI podle [https://firebase.google.com/docs/cli návodu z&amp;amp;nbsp; Firebase.google.com &amp;gt; CLI]&lt;br /&gt;
# Přihlaš se: &amp;lt;code&amp;gt;Firebase login&amp;lt;/code&amp;gt;&lt;br /&gt;
# Založ projekt ve Flutteru&lt;br /&gt;
# Ve složce projektu spusť aktivaci FlutterFire CLI:&lt;br /&gt;
#: &amp;lt;code&amp;gt;dart pub global activate flutterfire_cli&amp;lt;/code&amp;gt;&lt;br /&gt;
#: &amp;lt;code&amp;gt;flutterfire configure --project='''nazev-projektu'''&amp;lt;/code&amp;gt;&lt;br /&gt;
#: Do projektu tím přibude konfigurační soubor: &amp;lt;code&amp;gt;lib/firebase_options.dart&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Podle ChatGPT – ale neodpovídá návodu na Firebase:&lt;br /&gt;
Ve Flutter projektu spusť:&lt;br /&gt;
&lt;br /&gt;
 flutter pub add firebase_core&lt;br /&gt;
 flutter pub add cloud_firestore&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Inicializuj Firebase v main.dart:&lt;br /&gt;
 import 'package:firebase_core/firebase_core.dart';&lt;br /&gt;
 import 'firebase_options.dart';&lt;br /&gt;
 &lt;br /&gt;
 // ...&lt;br /&gt;
 &lt;br /&gt;
 await Firebase.initializeApp(&lt;br /&gt;
     options: DefaultFirebaseOptions.currentPlatform,&lt;br /&gt;
 );&lt;br /&gt;
&amp;lt;!-- Původní podle ChatGPT&lt;br /&gt;
 import 'package:firebase_core/firebase_core.dart';&lt;br /&gt;
 import 'package:flutter/material.dart';&lt;br /&gt;
 &lt;br /&gt;
 void main() async {&lt;br /&gt;
   WidgetsFlutterBinding.ensureInitialized();&lt;br /&gt;
   await Firebase.initializeApp();&lt;br /&gt;
   runApp(MyApp());&lt;br /&gt;
 }&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Další plug-iny importuj dle potřeby viz dále&lt;br /&gt;
&lt;br /&gt;
=== Import Firestore ===&lt;br /&gt;
&lt;br /&gt;
Import:&lt;br /&gt;
&lt;br /&gt;
 import 'package:cloud_firestore/cloud_firestore.dart';&lt;br /&gt;
&lt;br /&gt;
Vytvoření instance pro přístup k databázi:&lt;br /&gt;
&lt;br /&gt;
 final FirebaseFirestore db = FirebaseFirestore.instance;&lt;br /&gt;
&lt;br /&gt;
=== Přidání nového dokumentu ===&lt;br /&gt;
 await db.collection('users').add({&lt;br /&gt;
   'name': 'Jan',&lt;br /&gt;
   'age': 18,&lt;br /&gt;
   'email': 'jan@email.cz',&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
Tím se:&lt;br /&gt;
# vytvoří kolekce users (pokud neexistuje)&lt;br /&gt;
# přidá nový dokument s automatickým ID&lt;br /&gt;
&lt;br /&gt;
; Uložení dokumentu s vlastním ID&lt;br /&gt;
 await db.collection('users').doc('student1').set({&lt;br /&gt;
   'name': 'Petra',&lt;br /&gt;
   'age': 17,&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
=== Čtení dat z Firestore jednorázově===&lt;br /&gt;
&lt;br /&gt;
 var snapshot = await db.collection('users').get();&lt;br /&gt;
 &lt;br /&gt;
 for (var doc in snapshot.docs) {&lt;br /&gt;
   print(doc.data());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Čtení v reálném čase ===&lt;br /&gt;
&lt;br /&gt;
Firestore umožňuje poslouchat změny. Data se pak automaticky aktualizují, pokud proběhne změna v databázi (například z jiného zařízení připojeného ke stejnému projektu):&lt;br /&gt;
&lt;br /&gt;
 StreamBuilder(&lt;br /&gt;
   stream: db.collection('users').snapshots(),&lt;br /&gt;
   builder: (context, snapshot) {&lt;br /&gt;
     if (!snapshot.hasData) {&lt;br /&gt;
       return CircularProgressIndicator();&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     var docs = snapshot.data!.docs;&lt;br /&gt;
 &lt;br /&gt;
     return ListView(&lt;br /&gt;
       children: docs.map((doc) {&lt;br /&gt;
         return ListTile(&lt;br /&gt;
           title: Text(doc['name']),&lt;br /&gt;
         );&lt;br /&gt;
       }).toList(),&lt;br /&gt;
     );&lt;br /&gt;
   },&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
=== Aktualizace dat===&lt;br /&gt;
 await db.collection('users').doc('student1').update({&lt;br /&gt;
   'age': 18,&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
=== Smazání dat===&lt;br /&gt;
&lt;br /&gt;
; Smazání dokumentu&lt;br /&gt;
 await db.collection('users').doc('student1').delete();&lt;br /&gt;
&lt;br /&gt;
=== Bezpečnostní pravidla (Rules) ===&lt;br /&gt;
&lt;br /&gt;
Ve Firebase konzoli nastav pravidla přístupu.&lt;br /&gt;
&lt;br /&gt;
Například pouze pro přihlášené uživatele:&lt;br /&gt;
&lt;br /&gt;
 rules_version = '2';&lt;br /&gt;
 service cloud.firestore {&lt;br /&gt;
   match /databases/{database}/documents {&lt;br /&gt;
     match /{document=**} {&lt;br /&gt;
       allow read, write: if request.auth != null;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Zdroje ===&lt;br /&gt;
* Základ sekce o Firebase byl vytvořen pomocí služby [https://www.chatgpt.com ChatGPT].&lt;br /&gt;
* [https://console.firebase.google.com/ Console.firebase.google.com &amp;gt; Postup nastavení projektu]&lt;br /&gt;
* [https://www.youtube.com/playlist?list=PLl-K7zZEsYLluG5MCVEzXAQ7ACZBCuZgZ YouTube.com &amp;gt; Get to know Cloud Firebase] (seriál videí)&lt;br /&gt;
* [https://cloud.google.com/firestore/pricing Google Cloud &amp;gt; Firestore Pricing]&lt;br /&gt;
&lt;br /&gt;
== Vlastní backend: ServerPod ==&lt;br /&gt;
&lt;br /&gt;
* Framework, který umožňuje vytvořit projekt Flutteru se dvěma částmi: backendem a frontendem.&lt;br /&gt;
* Backend je následně možné spustit na svém serveru.&lt;br /&gt;
* Frontend běží na desktopu.&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/Flutter:_Ukl%C3%A1d%C3%A1n%C3%AD_dat</id>
		<title>Flutter: Ukládání dat</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/Flutter:_Ukl%C3%A1d%C3%A1n%C3%AD_dat"/>
				<updated>2026-02-22T02:29:22Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: /* Google Firestore */ Opraven název na Cloud Firestore.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]][[Category:Programování]][[Category:Flutter]]&lt;br /&gt;
&lt;br /&gt;
Pro trvalé uložení dat i po vypnutí aplikace můžeme data uložit:&lt;br /&gt;
* na lokální disk konkrétního zařízení&lt;br /&gt;
* do síťového úložiště (databáze, cloudové úložiště)&lt;br /&gt;
* můžeme rozdělit aplikaci na frontend a backend, kde data budou uložena v&amp;amp;nbsp;backendu (opět obvykle v&amp;amp;nbsp;databázi).&lt;br /&gt;
&lt;br /&gt;
Následuje několik příkladů možných řešení.&lt;br /&gt;
&lt;br /&gt;
== Lokální export: jsonEncode/jsonDecode ==&lt;br /&gt;
&lt;br /&gt;
=== Vlastnosti ===&lt;br /&gt;
* Formát JSON lze zpracovávat i v dalších aplikacích – je vhodný pro výměnu dat mezi aplikacemi a je textový.&lt;br /&gt;
* Jednoduše lze uložit seznam objektů. Složitější vnořované struktury objektů je třeba ručně převádět.&lt;br /&gt;
* Není vhodné pro větší objem dat – převod na text může zvětšit objem dat.&lt;br /&gt;
* Vhodné zejména pro textová data: texty, celá čísla, logické hodnoty. Méně vhodné pro desetinná čísla, obrázky, ... z důvodu nutné konverze na text.&lt;br /&gt;
* Formát JSON neukládá datové typy.&lt;br /&gt;
* Výsledek je uložen lokálně – převod z mobilní aplikace na desktop apod. je třeba řešit ručně.&lt;br /&gt;
&lt;br /&gt;
=== Postup zápisu ===&lt;br /&gt;
# Nalezení umístění souboru:&lt;br /&gt;
#* Využij balíček &amp;lt;code&amp;gt;path_provider&amp;lt;/code&amp;gt; a metodu &amp;lt;code&amp;gt;getApplicationDocumentsDirectory()&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Pro zápis do souboru použij třídu &amp;lt;code&amp;gt;File&amp;lt;/code&amp;gt; a metodu &amp;lt;code&amp;gt;writeAsString&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Převod dat na JSON&lt;br /&gt;
#* Využij balíček &amp;lt;code&amp;gt;dart:convert&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Pro parsování JSON využij metodu &amp;lt;code&amp;gt;jsonDecode(list)&amp;lt;/code&amp;gt; – výsledkem bude textová reprezentace objektu ve formátu JSON.&lt;br /&gt;
&lt;br /&gt;
=== Postup čtení ===&lt;br /&gt;
# Nalezení umístění souboru:&lt;br /&gt;
#* Využij balíček &amp;lt;code&amp;gt;path_provider&amp;lt;/code&amp;gt; a metodu &amp;lt;code&amp;gt;getApplicationDocumentsDirectory()&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Pro čtení souboru použij třídu &amp;lt;code&amp;gt;File&amp;lt;/code&amp;gt; a metodu &amp;lt;code&amp;gt;readAsString&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Převod dat na JSON&lt;br /&gt;
#* Využij balíček &amp;lt;code&amp;gt;dart:convert&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Pro ukládání využij metodu &amp;lt;code&amp;gt;jsonEncode(list)&amp;lt;/code&amp;gt; – výsledkem bude textová reprezentace objektu ve formátu JSON.&lt;br /&gt;
&lt;br /&gt;
=== Ukázka použití v aplikaci ===&lt;br /&gt;
 import 'dart:io';&lt;br /&gt;
 import 'package:flutter/material.dart';&lt;br /&gt;
 import 'package:path_provider/path_provider.dart';&lt;br /&gt;
 import 'dart:convert';&lt;br /&gt;
 &lt;br /&gt;
 void main() {&lt;br /&gt;
   runApp(const MyApp());&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class MyApp extends StatelessWidget {&lt;br /&gt;
   const MyApp({super.key});&lt;br /&gt;
 &lt;br /&gt;
   @override&lt;br /&gt;
   Widget build(BuildContext context) {&lt;br /&gt;
     return MaterialApp(&lt;br /&gt;
       title: 'Úložiště Demo',&lt;br /&gt;
       home: HomePage('''storage: FileStorage()'''),&lt;br /&gt;
     );&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class Zaznam {&lt;br /&gt;
   final String jmeno;&lt;br /&gt;
   final int pocet;&lt;br /&gt;
 &lt;br /&gt;
   const Zaznam({ required this.jmeno, required this.pocet, }); &lt;br /&gt;
 &lt;br /&gt;
   // Převod do JSON&lt;br /&gt;
   '''Map&amp;lt;String, dynamic&amp;gt; toJson() =&amp;gt; {'''&lt;br /&gt;
     'jmeno': jmeno,&lt;br /&gt;
     'pocet': pocet,&lt;br /&gt;
   };&lt;br /&gt;
 &lt;br /&gt;
   // Obnov z JSON&lt;br /&gt;
   '''factory Zaznam.fromJson(Map&amp;lt;String, dynamic&amp;gt; json) {'''&lt;br /&gt;
     return Zaznam(&lt;br /&gt;
       jmeno: (json['jmeno']),&lt;br /&gt;
       pocet: json['pocet'] as int,&lt;br /&gt;
     );&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /// Práce se soubory&lt;br /&gt;
 '''class FileStorage {'''&lt;br /&gt;
   '''Future&amp;lt;String&amp;gt; get _localPath''' async {&lt;br /&gt;
     final directory = await getApplicationDocumentsDirectory();&lt;br /&gt;
     return directory.path;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;File&amp;gt; get _localFile''' async {&lt;br /&gt;
     final path = await _localPath;&lt;br /&gt;
     return File('$path/data.txt');&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;String&amp;gt; readFile()''' async {&lt;br /&gt;
     final file = await _localFile;&lt;br /&gt;
     return file.readAsString();&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;void&amp;gt; writeFile(String content)''' async {&lt;br /&gt;
     final file = await _localFile;&lt;br /&gt;
     await file.writeAsString(content);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /// Stav aplikace včetně zápisu do souboru&lt;br /&gt;
 class HomePage extends StatefulWidget {&lt;br /&gt;
   final FileStorage storage;&lt;br /&gt;
   const HomePage('''{required this.storage}''');&lt;br /&gt;
   @override&lt;br /&gt;
   State&amp;lt;HomePage&amp;gt; createState() =&amp;gt; _HomePageState();&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class _HomePageState extends State&amp;lt;HomePage&amp;gt; {&lt;br /&gt;
   List&amp;lt;Zaznam&amp;gt; _seznam = [];&lt;br /&gt;
 &lt;br /&gt;
   @override&lt;br /&gt;
   void initState() {&lt;br /&gt;
     super.initState();&lt;br /&gt;
     '''_loadData();'''   // Načtení dat při startu&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;void&amp;gt; _loadData() async {'''&lt;br /&gt;
     try {&lt;br /&gt;
       final jsonString = await widget.storage.readFile();&lt;br /&gt;
       final List&amp;lt;dynamic&amp;gt; decoded = jsonDecode(jsonString);&lt;br /&gt;
       setState(() {&lt;br /&gt;
         _seznam = decoded&lt;br /&gt;
             .map((item) =&amp;gt; Zaznam.fromJson(item as Map&amp;lt;String, dynamic&amp;gt;))&lt;br /&gt;
             .toList();&lt;br /&gt;
       });&lt;br /&gt;
     } catch (e) {&lt;br /&gt;
       TODO: Zobraz chybové hlášení vhodným způsobem.&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;void&amp;gt; _saveData() async {'''&lt;br /&gt;
     final jsonString = jsonEncode(&lt;br /&gt;
       _seznam.map((z) =&amp;gt; z.toJson()).toList()&lt;br /&gt;
     );&lt;br /&gt;
     await widget.storage.writeFile(jsonString);&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   void _addRecord() {&lt;br /&gt;
     setState(() {&lt;br /&gt;
       _seznam.add(Zaznam(&lt;br /&gt;
         jmeno: 'Josef',&lt;br /&gt;
         pocet: 1000,&lt;br /&gt;
       ));&lt;br /&gt;
     });&lt;br /&gt;
     '''_saveData();'''&lt;br /&gt;
   } &lt;br /&gt;
 &lt;br /&gt;
   @override&lt;br /&gt;
   Widget build(BuildContext context) {&lt;br /&gt;
     return Scaffold(&lt;br /&gt;
       // ... vytvoř GUI&lt;br /&gt;
     );&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Tip ===&lt;br /&gt;
* Pro větší objemy dat či komplexnější data lze pro export do formátu JSON využít balíček &amp;lt;code&amp;gt;json_serializable&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Zdroje ===&lt;br /&gt;
* [https://hatchjs.com/list-to-json-flutter/ HatchJS.com &amp;gt; How to Convert a List to JSON in Flutter]&lt;br /&gt;
* [https://docs.flutter.dev/data-and-backend/serialization/json Flutter Docs &amp;gt; JSON and serialization]&lt;br /&gt;
* [https://docs.flutter.dev/cookbook/persistence/reading-writing-files Flutter Docs &amp;gt; Read and write files]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lokální databáze: Hive ==&lt;br /&gt;
&lt;br /&gt;
* Data ukládá binárně, ale stále na lokální zařízení.&lt;br /&gt;
&lt;br /&gt;
=== Zdroje ===&lt;br /&gt;
* [https://medium.com/@ChanakaDev/hive-vs-shared-preferences-10353068a8a6 Medium.com: ChanakaDev &amp;gt; Hive vs. Shared Preferences]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Google Firestore ==&lt;br /&gt;
&lt;br /&gt;
* Cloud Firestore je cloudová NoSQL databáze od Google, která je součástí platformy Google Firebase. &lt;br /&gt;
&lt;br /&gt;
; Vlastnosti&lt;br /&gt;
* Firebase je dobře integrovaná do frameworku Flutter (Flutter také vyvíjí Google)&lt;br /&gt;
* Data se ukládají do cloudu – data může sdílet mobilní i webová aplikace&lt;br /&gt;
* Synchronizace dat v reálném čase&lt;br /&gt;
* Pro malé projekty stačí varianta zdarma (pro větší bude třeba platit)&lt;br /&gt;
&lt;br /&gt;
=== Struktura dat ve Firestore ===&lt;br /&gt;
* Data se neukládají do entit jako u ER databází – spíše jako několik seznamů objektů.&lt;br /&gt;
&lt;br /&gt;
; Pojmy:&lt;br /&gt;
* Dokument (Document) ... konkrétní záznam (jako jeden řádek v databázi) – například údaje o jednom uživateli.&lt;br /&gt;
* Pole (Field) ... konkrétní hodnota (atribut) – například jméno uživatele&lt;br /&gt;
* Kolekce (Collection) ... odpovídá entitě v ER databázích – je to vlastně seznam dokumentů&lt;br /&gt;
* Databáze (Database) ... skupina souvisejících kolekcí&lt;br /&gt;
* Projekt (Project) ... jeden projekt obvykle odpovídá jednomu softwarovému produktu. Může zahrnovat různé podoby jedné aplikace:&lt;br /&gt;
** IOS&lt;br /&gt;
** Android&lt;br /&gt;
** webová aplikace&lt;br /&gt;
** Unity&lt;br /&gt;
** Flutter multiplatformní aplikace&lt;br /&gt;
&lt;br /&gt;
Příklad:&lt;br /&gt;
 users (kolekce)&lt;br /&gt;
    └── user1 (dokument)&lt;br /&gt;
          ├── name: &amp;quot;Jan&amp;quot;&lt;br /&gt;
          ├── age: 18&lt;br /&gt;
          └── email: &amp;quot;jan@email.cz&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Vytvoření projektu ve Firebase===&lt;br /&gt;
&lt;br /&gt;
#Jdi na: [https://console.firebase.google.com Console.firebase.google.com]&lt;br /&gt;
#Klikni na Vytvořit projekt&lt;br /&gt;
#Zadej název projektu&lt;br /&gt;
#Po vytvoření přidej aplikaci (Android / iOS / Web)&lt;br /&gt;
&lt;br /&gt;
===Propojení Flutter aplikace s Firebase===&lt;br /&gt;
&lt;br /&gt;
Ve Flutter projektu spusť:&lt;br /&gt;
&lt;br /&gt;
 flutter pub add firebase_core&lt;br /&gt;
 flutter pub add cloud_firestore&lt;br /&gt;
&lt;br /&gt;
Poté inicializuj Firebase v main.dart:&lt;br /&gt;
&lt;br /&gt;
 import 'package:firebase_core/firebase_core.dart';&lt;br /&gt;
 import 'package:flutter/material.dart';&lt;br /&gt;
 &lt;br /&gt;
 void main() async {&lt;br /&gt;
   WidgetsFlutterBinding.ensureInitialized();&lt;br /&gt;
   await Firebase.initializeApp();&lt;br /&gt;
   runApp(MyApp());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Ukládání dat do Firestore===&lt;br /&gt;
&lt;br /&gt;
; Importuj Firestore:&lt;br /&gt;
&lt;br /&gt;
 import 'package:cloud_firestore/cloud_firestore.dart';&lt;br /&gt;
&lt;br /&gt;
; Vytvoření instance pro přístup k databázi:&lt;br /&gt;
&lt;br /&gt;
 final FirebaseFirestore db = FirebaseFirestore.instance;&lt;br /&gt;
&lt;br /&gt;
; Přidání nového dokumentu&lt;br /&gt;
 await db.collection('users').add({&lt;br /&gt;
   'name': 'Jan',&lt;br /&gt;
   'age': 18,&lt;br /&gt;
   'email': 'jan@email.cz',&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
Tím se:&lt;br /&gt;
# vytvoří kolekce users (pokud neexistuje)&lt;br /&gt;
# přidá nový dokument s automatickým ID&lt;br /&gt;
&lt;br /&gt;
; Uložení dokumentu s vlastním ID&lt;br /&gt;
 await db.collection('users').doc('student1').set({&lt;br /&gt;
   'name': 'Petra',&lt;br /&gt;
   'age': 17,&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
=== Čtení dat z Firestore jednorázově===&lt;br /&gt;
&lt;br /&gt;
 var snapshot = await db.collection('users').get();&lt;br /&gt;
 &lt;br /&gt;
 for (var doc in snapshot.docs) {&lt;br /&gt;
   print(doc.data());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===Načtení v reálném čase ===&lt;br /&gt;
&lt;br /&gt;
Firestore umožňuje poslouchat změny. Data se pak automaticky aktualizují, pokud proběhne změna v databázi (například z jiného zařízení připojeného ke stejnému projektu):&lt;br /&gt;
&lt;br /&gt;
 StreamBuilder(&lt;br /&gt;
   stream: db.collection('users').snapshots(),&lt;br /&gt;
   builder: (context, snapshot) {&lt;br /&gt;
     if (!snapshot.hasData) {&lt;br /&gt;
       return CircularProgressIndicator();&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     var docs = snapshot.data!.docs;&lt;br /&gt;
 &lt;br /&gt;
     return ListView(&lt;br /&gt;
       children: docs.map((doc) {&lt;br /&gt;
         return ListTile(&lt;br /&gt;
           title: Text(doc['name']),&lt;br /&gt;
         );&lt;br /&gt;
       }).toList(),&lt;br /&gt;
     );&lt;br /&gt;
   },&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
=== Aktualizace dat===&lt;br /&gt;
 await db.collection('users').doc('student1').update({&lt;br /&gt;
   'age': 18,&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
=== Smazání dat===&lt;br /&gt;
&lt;br /&gt;
; Smazání dokumentu&lt;br /&gt;
 await db.collection('users').doc('student1').delete();&lt;br /&gt;
&lt;br /&gt;
=== Bezpečnostní pravidla (Rules) ===&lt;br /&gt;
&lt;br /&gt;
Ve Firebase konzoli nastav pravidla přístupu.&lt;br /&gt;
&lt;br /&gt;
Například pouze pro přihlášené uživatele:&lt;br /&gt;
&lt;br /&gt;
 rules_version = '2';&lt;br /&gt;
 service cloud.firestore {&lt;br /&gt;
   match /databases/{database}/documents {&lt;br /&gt;
     match /{document=**} {&lt;br /&gt;
       allow read, write: if request.auth != null;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Zdroje ===&lt;br /&gt;
* Základ sekce o Firebase byl vytvořen pomocí služby [https://www.chatgpt.com ChatGPT].&lt;br /&gt;
* [https://www.youtube.com/playlist?list=PLl-K7zZEsYLluG5MCVEzXAQ7ACZBCuZgZ YouTube.com &amp;gt; Get to know Cloud Firebase] (seriál videí)&lt;br /&gt;
* [https://cloud.google.com/firestore/pricing Google Cloud &amp;gt; Firestore Pricing]&lt;br /&gt;
&lt;br /&gt;
== Vlastní backend: ServerPod ==&lt;br /&gt;
&lt;br /&gt;
* Framework, který umožňuje vytvořit projekt Flutteru se dvěma částmi: backendem a frontendem.&lt;br /&gt;
* Backend je následně možné spustit na svém serveru.&lt;br /&gt;
* Frontend běží na desktopu.&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/Flutter:_Ukl%C3%A1d%C3%A1n%C3%AD_dat</id>
		<title>Flutter: Ukládání dat</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/Flutter:_Ukl%C3%A1d%C3%A1n%C3%AD_dat"/>
				<updated>2026-02-22T02:28:13Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: /* Zdroje */ Přidán seriál videí Get to know Cloud Firebase.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]][[Category:Programování]][[Category:Flutter]]&lt;br /&gt;
&lt;br /&gt;
Pro trvalé uložení dat i po vypnutí aplikace můžeme data uložit:&lt;br /&gt;
* na lokální disk konkrétního zařízení&lt;br /&gt;
* do síťového úložiště (databáze, cloudové úložiště)&lt;br /&gt;
* můžeme rozdělit aplikaci na frontend a backend, kde data budou uložena v&amp;amp;nbsp;backendu (opět obvykle v&amp;amp;nbsp;databázi).&lt;br /&gt;
&lt;br /&gt;
Následuje několik příkladů možných řešení.&lt;br /&gt;
&lt;br /&gt;
== Lokální export: jsonEncode/jsonDecode ==&lt;br /&gt;
&lt;br /&gt;
=== Vlastnosti ===&lt;br /&gt;
* Formát JSON lze zpracovávat i v dalších aplikacích – je vhodný pro výměnu dat mezi aplikacemi a je textový.&lt;br /&gt;
* Jednoduše lze uložit seznam objektů. Složitější vnořované struktury objektů je třeba ručně převádět.&lt;br /&gt;
* Není vhodné pro větší objem dat – převod na text může zvětšit objem dat.&lt;br /&gt;
* Vhodné zejména pro textová data: texty, celá čísla, logické hodnoty. Méně vhodné pro desetinná čísla, obrázky, ... z důvodu nutné konverze na text.&lt;br /&gt;
* Formát JSON neukládá datové typy.&lt;br /&gt;
* Výsledek je uložen lokálně – převod z mobilní aplikace na desktop apod. je třeba řešit ručně.&lt;br /&gt;
&lt;br /&gt;
=== Postup zápisu ===&lt;br /&gt;
# Nalezení umístění souboru:&lt;br /&gt;
#* Využij balíček &amp;lt;code&amp;gt;path_provider&amp;lt;/code&amp;gt; a metodu &amp;lt;code&amp;gt;getApplicationDocumentsDirectory()&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Pro zápis do souboru použij třídu &amp;lt;code&amp;gt;File&amp;lt;/code&amp;gt; a metodu &amp;lt;code&amp;gt;writeAsString&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Převod dat na JSON&lt;br /&gt;
#* Využij balíček &amp;lt;code&amp;gt;dart:convert&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Pro parsování JSON využij metodu &amp;lt;code&amp;gt;jsonDecode(list)&amp;lt;/code&amp;gt; – výsledkem bude textová reprezentace objektu ve formátu JSON.&lt;br /&gt;
&lt;br /&gt;
=== Postup čtení ===&lt;br /&gt;
# Nalezení umístění souboru:&lt;br /&gt;
#* Využij balíček &amp;lt;code&amp;gt;path_provider&amp;lt;/code&amp;gt; a metodu &amp;lt;code&amp;gt;getApplicationDocumentsDirectory()&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Pro čtení souboru použij třídu &amp;lt;code&amp;gt;File&amp;lt;/code&amp;gt; a metodu &amp;lt;code&amp;gt;readAsString&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Převod dat na JSON&lt;br /&gt;
#* Využij balíček &amp;lt;code&amp;gt;dart:convert&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Pro ukládání využij metodu &amp;lt;code&amp;gt;jsonEncode(list)&amp;lt;/code&amp;gt; – výsledkem bude textová reprezentace objektu ve formátu JSON.&lt;br /&gt;
&lt;br /&gt;
=== Ukázka použití v aplikaci ===&lt;br /&gt;
 import 'dart:io';&lt;br /&gt;
 import 'package:flutter/material.dart';&lt;br /&gt;
 import 'package:path_provider/path_provider.dart';&lt;br /&gt;
 import 'dart:convert';&lt;br /&gt;
 &lt;br /&gt;
 void main() {&lt;br /&gt;
   runApp(const MyApp());&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class MyApp extends StatelessWidget {&lt;br /&gt;
   const MyApp({super.key});&lt;br /&gt;
 &lt;br /&gt;
   @override&lt;br /&gt;
   Widget build(BuildContext context) {&lt;br /&gt;
     return MaterialApp(&lt;br /&gt;
       title: 'Úložiště Demo',&lt;br /&gt;
       home: HomePage('''storage: FileStorage()'''),&lt;br /&gt;
     );&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class Zaznam {&lt;br /&gt;
   final String jmeno;&lt;br /&gt;
   final int pocet;&lt;br /&gt;
 &lt;br /&gt;
   const Zaznam({ required this.jmeno, required this.pocet, }); &lt;br /&gt;
 &lt;br /&gt;
   // Převod do JSON&lt;br /&gt;
   '''Map&amp;lt;String, dynamic&amp;gt; toJson() =&amp;gt; {'''&lt;br /&gt;
     'jmeno': jmeno,&lt;br /&gt;
     'pocet': pocet,&lt;br /&gt;
   };&lt;br /&gt;
 &lt;br /&gt;
   // Obnov z JSON&lt;br /&gt;
   '''factory Zaznam.fromJson(Map&amp;lt;String, dynamic&amp;gt; json) {'''&lt;br /&gt;
     return Zaznam(&lt;br /&gt;
       jmeno: (json['jmeno']),&lt;br /&gt;
       pocet: json['pocet'] as int,&lt;br /&gt;
     );&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /// Práce se soubory&lt;br /&gt;
 '''class FileStorage {'''&lt;br /&gt;
   '''Future&amp;lt;String&amp;gt; get _localPath''' async {&lt;br /&gt;
     final directory = await getApplicationDocumentsDirectory();&lt;br /&gt;
     return directory.path;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;File&amp;gt; get _localFile''' async {&lt;br /&gt;
     final path = await _localPath;&lt;br /&gt;
     return File('$path/data.txt');&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;String&amp;gt; readFile()''' async {&lt;br /&gt;
     final file = await _localFile;&lt;br /&gt;
     return file.readAsString();&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;void&amp;gt; writeFile(String content)''' async {&lt;br /&gt;
     final file = await _localFile;&lt;br /&gt;
     await file.writeAsString(content);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /// Stav aplikace včetně zápisu do souboru&lt;br /&gt;
 class HomePage extends StatefulWidget {&lt;br /&gt;
   final FileStorage storage;&lt;br /&gt;
   const HomePage('''{required this.storage}''');&lt;br /&gt;
   @override&lt;br /&gt;
   State&amp;lt;HomePage&amp;gt; createState() =&amp;gt; _HomePageState();&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class _HomePageState extends State&amp;lt;HomePage&amp;gt; {&lt;br /&gt;
   List&amp;lt;Zaznam&amp;gt; _seznam = [];&lt;br /&gt;
 &lt;br /&gt;
   @override&lt;br /&gt;
   void initState() {&lt;br /&gt;
     super.initState();&lt;br /&gt;
     '''_loadData();'''   // Načtení dat při startu&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;void&amp;gt; _loadData() async {'''&lt;br /&gt;
     try {&lt;br /&gt;
       final jsonString = await widget.storage.readFile();&lt;br /&gt;
       final List&amp;lt;dynamic&amp;gt; decoded = jsonDecode(jsonString);&lt;br /&gt;
       setState(() {&lt;br /&gt;
         _seznam = decoded&lt;br /&gt;
             .map((item) =&amp;gt; Zaznam.fromJson(item as Map&amp;lt;String, dynamic&amp;gt;))&lt;br /&gt;
             .toList();&lt;br /&gt;
       });&lt;br /&gt;
     } catch (e) {&lt;br /&gt;
       TODO: Zobraz chybové hlášení vhodným způsobem.&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;void&amp;gt; _saveData() async {'''&lt;br /&gt;
     final jsonString = jsonEncode(&lt;br /&gt;
       _seznam.map((z) =&amp;gt; z.toJson()).toList()&lt;br /&gt;
     );&lt;br /&gt;
     await widget.storage.writeFile(jsonString);&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   void _addRecord() {&lt;br /&gt;
     setState(() {&lt;br /&gt;
       _seznam.add(Zaznam(&lt;br /&gt;
         jmeno: 'Josef',&lt;br /&gt;
         pocet: 1000,&lt;br /&gt;
       ));&lt;br /&gt;
     });&lt;br /&gt;
     '''_saveData();'''&lt;br /&gt;
   } &lt;br /&gt;
 &lt;br /&gt;
   @override&lt;br /&gt;
   Widget build(BuildContext context) {&lt;br /&gt;
     return Scaffold(&lt;br /&gt;
       // ... vytvoř GUI&lt;br /&gt;
     );&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Tip ===&lt;br /&gt;
* Pro větší objemy dat či komplexnější data lze pro export do formátu JSON využít balíček &amp;lt;code&amp;gt;json_serializable&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Zdroje ===&lt;br /&gt;
* [https://hatchjs.com/list-to-json-flutter/ HatchJS.com &amp;gt; How to Convert a List to JSON in Flutter]&lt;br /&gt;
* [https://docs.flutter.dev/data-and-backend/serialization/json Flutter Docs &amp;gt; JSON and serialization]&lt;br /&gt;
* [https://docs.flutter.dev/cookbook/persistence/reading-writing-files Flutter Docs &amp;gt; Read and write files]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lokální databáze: Hive ==&lt;br /&gt;
&lt;br /&gt;
* Data ukládá binárně, ale stále na lokální zařízení.&lt;br /&gt;
&lt;br /&gt;
=== Zdroje ===&lt;br /&gt;
* [https://medium.com/@ChanakaDev/hive-vs-shared-preferences-10353068a8a6 Medium.com: ChanakaDev &amp;gt; Hive vs. Shared Preferences]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Google Firestore ==&lt;br /&gt;
&lt;br /&gt;
* Google Firestore je cloudová NoSQL databáze od Google, která je součástí platformy Firebase. &lt;br /&gt;
&lt;br /&gt;
; Vlastnosti&lt;br /&gt;
* Firebase je dobře integrovaná do frameworku Flutter (Flutter také vyvíjí Google)&lt;br /&gt;
* Data se ukládají do cloudu – data může sdílet mobilní i webová aplikace&lt;br /&gt;
* Synchronizace dat v reálném čase&lt;br /&gt;
* Pro malé projekty stačí varianta zdarma (pro větší bude třeba platit)&lt;br /&gt;
&lt;br /&gt;
=== Struktura dat ve Firestore ===&lt;br /&gt;
* Data se neukládají do entit jako u ER databází – spíše jako několik seznamů objektů.&lt;br /&gt;
&lt;br /&gt;
; Pojmy:&lt;br /&gt;
* Dokument (Document) ... konkrétní záznam (jako jeden řádek v databázi) – například údaje o jednom uživateli.&lt;br /&gt;
* Pole (Field) ... konkrétní hodnota (atribut) – například jméno uživatele&lt;br /&gt;
* Kolekce (Collection) ... odpovídá entitě v ER databázích – je to vlastně seznam dokumentů&lt;br /&gt;
* Databáze (Database) ... skupina souvisejících kolekcí&lt;br /&gt;
* Projekt (Project) ... jeden projekt obvykle odpovídá jednomu softwarovému produktu. Může zahrnovat různé podoby jedné aplikace:&lt;br /&gt;
** IOS&lt;br /&gt;
** Android&lt;br /&gt;
** webová aplikace&lt;br /&gt;
** Unity&lt;br /&gt;
** Flutter multiplatformní aplikace&lt;br /&gt;
&lt;br /&gt;
Příklad:&lt;br /&gt;
 users (kolekce)&lt;br /&gt;
    └── user1 (dokument)&lt;br /&gt;
          ├── name: &amp;quot;Jan&amp;quot;&lt;br /&gt;
          ├── age: 18&lt;br /&gt;
          └── email: &amp;quot;jan@email.cz&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Vytvoření projektu ve Firebase===&lt;br /&gt;
&lt;br /&gt;
#Jdi na: [https://console.firebase.google.com Console.firebase.google.com]&lt;br /&gt;
#Klikni na Vytvořit projekt&lt;br /&gt;
#Zadej název projektu&lt;br /&gt;
#Po vytvoření přidej aplikaci (Android / iOS / Web)&lt;br /&gt;
&lt;br /&gt;
===Propojení Flutter aplikace s Firebase===&lt;br /&gt;
&lt;br /&gt;
Ve Flutter projektu spusť:&lt;br /&gt;
&lt;br /&gt;
 flutter pub add firebase_core&lt;br /&gt;
 flutter pub add cloud_firestore&lt;br /&gt;
&lt;br /&gt;
Poté inicializuj Firebase v main.dart:&lt;br /&gt;
&lt;br /&gt;
 import 'package:firebase_core/firebase_core.dart';&lt;br /&gt;
 import 'package:flutter/material.dart';&lt;br /&gt;
 &lt;br /&gt;
 void main() async {&lt;br /&gt;
   WidgetsFlutterBinding.ensureInitialized();&lt;br /&gt;
   await Firebase.initializeApp();&lt;br /&gt;
   runApp(MyApp());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Ukládání dat do Firestore===&lt;br /&gt;
&lt;br /&gt;
; Importuj Firestore:&lt;br /&gt;
&lt;br /&gt;
 import 'package:cloud_firestore/cloud_firestore.dart';&lt;br /&gt;
&lt;br /&gt;
; Vytvoření instance pro přístup k databázi:&lt;br /&gt;
&lt;br /&gt;
 final FirebaseFirestore db = FirebaseFirestore.instance;&lt;br /&gt;
&lt;br /&gt;
; Přidání nového dokumentu&lt;br /&gt;
 await db.collection('users').add({&lt;br /&gt;
   'name': 'Jan',&lt;br /&gt;
   'age': 18,&lt;br /&gt;
   'email': 'jan@email.cz',&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
Tím se:&lt;br /&gt;
# vytvoří kolekce users (pokud neexistuje)&lt;br /&gt;
# přidá nový dokument s automatickým ID&lt;br /&gt;
&lt;br /&gt;
; Uložení dokumentu s vlastním ID&lt;br /&gt;
 await db.collection('users').doc('student1').set({&lt;br /&gt;
   'name': 'Petra',&lt;br /&gt;
   'age': 17,&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
=== Čtení dat z Firestore jednorázově===&lt;br /&gt;
&lt;br /&gt;
 var snapshot = await db.collection('users').get();&lt;br /&gt;
 &lt;br /&gt;
 for (var doc in snapshot.docs) {&lt;br /&gt;
   print(doc.data());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===Načtení v reálném čase ===&lt;br /&gt;
&lt;br /&gt;
Firestore umožňuje poslouchat změny. Data se pak automaticky aktualizují, pokud proběhne změna v databázi (například z jiného zařízení připojeného ke stejnému projektu):&lt;br /&gt;
&lt;br /&gt;
 StreamBuilder(&lt;br /&gt;
   stream: db.collection('users').snapshots(),&lt;br /&gt;
   builder: (context, snapshot) {&lt;br /&gt;
     if (!snapshot.hasData) {&lt;br /&gt;
       return CircularProgressIndicator();&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     var docs = snapshot.data!.docs;&lt;br /&gt;
 &lt;br /&gt;
     return ListView(&lt;br /&gt;
       children: docs.map((doc) {&lt;br /&gt;
         return ListTile(&lt;br /&gt;
           title: Text(doc['name']),&lt;br /&gt;
         );&lt;br /&gt;
       }).toList(),&lt;br /&gt;
     );&lt;br /&gt;
   },&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
=== Aktualizace dat===&lt;br /&gt;
 await db.collection('users').doc('student1').update({&lt;br /&gt;
   'age': 18,&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
=== Smazání dat===&lt;br /&gt;
&lt;br /&gt;
; Smazání dokumentu&lt;br /&gt;
 await db.collection('users').doc('student1').delete();&lt;br /&gt;
&lt;br /&gt;
=== Bezpečnostní pravidla (Rules) ===&lt;br /&gt;
&lt;br /&gt;
Ve Firebase konzoli nastav pravidla přístupu.&lt;br /&gt;
&lt;br /&gt;
Například pouze pro přihlášené uživatele:&lt;br /&gt;
&lt;br /&gt;
 rules_version = '2';&lt;br /&gt;
 service cloud.firestore {&lt;br /&gt;
   match /databases/{database}/documents {&lt;br /&gt;
     match /{document=**} {&lt;br /&gt;
       allow read, write: if request.auth != null;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Zdroje ===&lt;br /&gt;
* Základ sekce o Firebase byl vytvořen pomocí služby [https://www.chatgpt.com ChatGPT].&lt;br /&gt;
* [https://www.youtube.com/playlist?list=PLl-K7zZEsYLluG5MCVEzXAQ7ACZBCuZgZ YouTube.com &amp;gt; Get to know Cloud Firebase] (seriál videí)&lt;br /&gt;
* [https://cloud.google.com/firestore/pricing Google Cloud &amp;gt; Firestore Pricing]&lt;br /&gt;
&lt;br /&gt;
== Vlastní backend: ServerPod ==&lt;br /&gt;
&lt;br /&gt;
* Framework, který umožňuje vytvořit projekt Flutteru se dvěma částmi: backendem a frontendem.&lt;br /&gt;
* Backend je následně možné spustit na svém serveru.&lt;br /&gt;
* Frontend běží na desktopu.&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/Flutter:_Ukl%C3%A1d%C3%A1n%C3%AD_dat</id>
		<title>Flutter: Ukládání dat</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/Flutter:_Ukl%C3%A1d%C3%A1n%C3%AD_dat"/>
				<updated>2026-02-22T02:05:48Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: /* Smazání dat */ Oprava formátování&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]][[Category:Programování]][[Category:Flutter]]&lt;br /&gt;
&lt;br /&gt;
Pro trvalé uložení dat i po vypnutí aplikace můžeme data uložit:&lt;br /&gt;
* na lokální disk konkrétního zařízení&lt;br /&gt;
* do síťového úložiště (databáze, cloudové úložiště)&lt;br /&gt;
* můžeme rozdělit aplikaci na frontend a backend, kde data budou uložena v&amp;amp;nbsp;backendu (opět obvykle v&amp;amp;nbsp;databázi).&lt;br /&gt;
&lt;br /&gt;
Následuje několik příkladů možných řešení.&lt;br /&gt;
&lt;br /&gt;
== Lokální export: jsonEncode/jsonDecode ==&lt;br /&gt;
&lt;br /&gt;
=== Vlastnosti ===&lt;br /&gt;
* Formát JSON lze zpracovávat i v dalších aplikacích – je vhodný pro výměnu dat mezi aplikacemi a je textový.&lt;br /&gt;
* Jednoduše lze uložit seznam objektů. Složitější vnořované struktury objektů je třeba ručně převádět.&lt;br /&gt;
* Není vhodné pro větší objem dat – převod na text může zvětšit objem dat.&lt;br /&gt;
* Vhodné zejména pro textová data: texty, celá čísla, logické hodnoty. Méně vhodné pro desetinná čísla, obrázky, ... z důvodu nutné konverze na text.&lt;br /&gt;
* Formát JSON neukládá datové typy.&lt;br /&gt;
* Výsledek je uložen lokálně – převod z mobilní aplikace na desktop apod. je třeba řešit ručně.&lt;br /&gt;
&lt;br /&gt;
=== Postup zápisu ===&lt;br /&gt;
# Nalezení umístění souboru:&lt;br /&gt;
#* Využij balíček &amp;lt;code&amp;gt;path_provider&amp;lt;/code&amp;gt; a metodu &amp;lt;code&amp;gt;getApplicationDocumentsDirectory()&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Pro zápis do souboru použij třídu &amp;lt;code&amp;gt;File&amp;lt;/code&amp;gt; a metodu &amp;lt;code&amp;gt;writeAsString&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Převod dat na JSON&lt;br /&gt;
#* Využij balíček &amp;lt;code&amp;gt;dart:convert&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Pro parsování JSON využij metodu &amp;lt;code&amp;gt;jsonDecode(list)&amp;lt;/code&amp;gt; – výsledkem bude textová reprezentace objektu ve formátu JSON.&lt;br /&gt;
&lt;br /&gt;
=== Postup čtení ===&lt;br /&gt;
# Nalezení umístění souboru:&lt;br /&gt;
#* Využij balíček &amp;lt;code&amp;gt;path_provider&amp;lt;/code&amp;gt; a metodu &amp;lt;code&amp;gt;getApplicationDocumentsDirectory()&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Pro čtení souboru použij třídu &amp;lt;code&amp;gt;File&amp;lt;/code&amp;gt; a metodu &amp;lt;code&amp;gt;readAsString&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Převod dat na JSON&lt;br /&gt;
#* Využij balíček &amp;lt;code&amp;gt;dart:convert&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Pro ukládání využij metodu &amp;lt;code&amp;gt;jsonEncode(list)&amp;lt;/code&amp;gt; – výsledkem bude textová reprezentace objektu ve formátu JSON.&lt;br /&gt;
&lt;br /&gt;
=== Ukázka použití v aplikaci ===&lt;br /&gt;
 import 'dart:io';&lt;br /&gt;
 import 'package:flutter/material.dart';&lt;br /&gt;
 import 'package:path_provider/path_provider.dart';&lt;br /&gt;
 import 'dart:convert';&lt;br /&gt;
 &lt;br /&gt;
 void main() {&lt;br /&gt;
   runApp(const MyApp());&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class MyApp extends StatelessWidget {&lt;br /&gt;
   const MyApp({super.key});&lt;br /&gt;
 &lt;br /&gt;
   @override&lt;br /&gt;
   Widget build(BuildContext context) {&lt;br /&gt;
     return MaterialApp(&lt;br /&gt;
       title: 'Úložiště Demo',&lt;br /&gt;
       home: HomePage('''storage: FileStorage()'''),&lt;br /&gt;
     );&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class Zaznam {&lt;br /&gt;
   final String jmeno;&lt;br /&gt;
   final int pocet;&lt;br /&gt;
 &lt;br /&gt;
   const Zaznam({ required this.jmeno, required this.pocet, }); &lt;br /&gt;
 &lt;br /&gt;
   // Převod do JSON&lt;br /&gt;
   '''Map&amp;lt;String, dynamic&amp;gt; toJson() =&amp;gt; {'''&lt;br /&gt;
     'jmeno': jmeno,&lt;br /&gt;
     'pocet': pocet,&lt;br /&gt;
   };&lt;br /&gt;
 &lt;br /&gt;
   // Obnov z JSON&lt;br /&gt;
   '''factory Zaznam.fromJson(Map&amp;lt;String, dynamic&amp;gt; json) {'''&lt;br /&gt;
     return Zaznam(&lt;br /&gt;
       jmeno: (json['jmeno']),&lt;br /&gt;
       pocet: json['pocet'] as int,&lt;br /&gt;
     );&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /// Práce se soubory&lt;br /&gt;
 '''class FileStorage {'''&lt;br /&gt;
   '''Future&amp;lt;String&amp;gt; get _localPath''' async {&lt;br /&gt;
     final directory = await getApplicationDocumentsDirectory();&lt;br /&gt;
     return directory.path;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;File&amp;gt; get _localFile''' async {&lt;br /&gt;
     final path = await _localPath;&lt;br /&gt;
     return File('$path/data.txt');&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;String&amp;gt; readFile()''' async {&lt;br /&gt;
     final file = await _localFile;&lt;br /&gt;
     return file.readAsString();&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;void&amp;gt; writeFile(String content)''' async {&lt;br /&gt;
     final file = await _localFile;&lt;br /&gt;
     await file.writeAsString(content);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /// Stav aplikace včetně zápisu do souboru&lt;br /&gt;
 class HomePage extends StatefulWidget {&lt;br /&gt;
   final FileStorage storage;&lt;br /&gt;
   const HomePage('''{required this.storage}''');&lt;br /&gt;
   @override&lt;br /&gt;
   State&amp;lt;HomePage&amp;gt; createState() =&amp;gt; _HomePageState();&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class _HomePageState extends State&amp;lt;HomePage&amp;gt; {&lt;br /&gt;
   List&amp;lt;Zaznam&amp;gt; _seznam = [];&lt;br /&gt;
 &lt;br /&gt;
   @override&lt;br /&gt;
   void initState() {&lt;br /&gt;
     super.initState();&lt;br /&gt;
     '''_loadData();'''   // Načtení dat při startu&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;void&amp;gt; _loadData() async {'''&lt;br /&gt;
     try {&lt;br /&gt;
       final jsonString = await widget.storage.readFile();&lt;br /&gt;
       final List&amp;lt;dynamic&amp;gt; decoded = jsonDecode(jsonString);&lt;br /&gt;
       setState(() {&lt;br /&gt;
         _seznam = decoded&lt;br /&gt;
             .map((item) =&amp;gt; Zaznam.fromJson(item as Map&amp;lt;String, dynamic&amp;gt;))&lt;br /&gt;
             .toList();&lt;br /&gt;
       });&lt;br /&gt;
     } catch (e) {&lt;br /&gt;
       TODO: Zobraz chybové hlášení vhodným způsobem.&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;void&amp;gt; _saveData() async {'''&lt;br /&gt;
     final jsonString = jsonEncode(&lt;br /&gt;
       _seznam.map((z) =&amp;gt; z.toJson()).toList()&lt;br /&gt;
     );&lt;br /&gt;
     await widget.storage.writeFile(jsonString);&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   void _addRecord() {&lt;br /&gt;
     setState(() {&lt;br /&gt;
       _seznam.add(Zaznam(&lt;br /&gt;
         jmeno: 'Josef',&lt;br /&gt;
         pocet: 1000,&lt;br /&gt;
       ));&lt;br /&gt;
     });&lt;br /&gt;
     '''_saveData();'''&lt;br /&gt;
   } &lt;br /&gt;
 &lt;br /&gt;
   @override&lt;br /&gt;
   Widget build(BuildContext context) {&lt;br /&gt;
     return Scaffold(&lt;br /&gt;
       // ... vytvoř GUI&lt;br /&gt;
     );&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Tip ===&lt;br /&gt;
* Pro větší objemy dat či komplexnější data lze pro export do formátu JSON využít balíček &amp;lt;code&amp;gt;json_serializable&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Zdroje ===&lt;br /&gt;
* [https://hatchjs.com/list-to-json-flutter/ HatchJS.com &amp;gt; How to Convert a List to JSON in Flutter]&lt;br /&gt;
* [https://docs.flutter.dev/data-and-backend/serialization/json Flutter Docs &amp;gt; JSON and serialization]&lt;br /&gt;
* [https://docs.flutter.dev/cookbook/persistence/reading-writing-files Flutter Docs &amp;gt; Read and write files]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lokální databáze: Hive ==&lt;br /&gt;
&lt;br /&gt;
* Data ukládá binárně, ale stále na lokální zařízení.&lt;br /&gt;
&lt;br /&gt;
=== Zdroje ===&lt;br /&gt;
* [https://medium.com/@ChanakaDev/hive-vs-shared-preferences-10353068a8a6 Medium.com: ChanakaDev &amp;gt; Hive vs. Shared Preferences]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Google Firestore ==&lt;br /&gt;
&lt;br /&gt;
* Google Firestore je cloudová NoSQL databáze od Google, která je součástí platformy Firebase. &lt;br /&gt;
&lt;br /&gt;
; Vlastnosti&lt;br /&gt;
* Firebase je dobře integrovaná do frameworku Flutter (Flutter také vyvíjí Google)&lt;br /&gt;
* Data se ukládají do cloudu – data může sdílet mobilní i webová aplikace&lt;br /&gt;
* Synchronizace dat v reálném čase&lt;br /&gt;
* Pro malé projekty stačí varianta zdarma (pro větší bude třeba platit)&lt;br /&gt;
&lt;br /&gt;
=== Struktura dat ve Firestore ===&lt;br /&gt;
* Data se neukládají do entit jako u ER databází – spíše jako několik seznamů objektů.&lt;br /&gt;
&lt;br /&gt;
; Pojmy:&lt;br /&gt;
* Dokument (Document) ... konkrétní záznam (jako jeden řádek v databázi) – například údaje o jednom uživateli.&lt;br /&gt;
* Pole (Field) ... konkrétní hodnota (atribut) – například jméno uživatele&lt;br /&gt;
* Kolekce (Collection) ... odpovídá entitě v ER databázích – je to vlastně seznam dokumentů&lt;br /&gt;
* Databáze (Database) ... skupina souvisejících kolekcí&lt;br /&gt;
* Projekt (Project) ... jeden projekt obvykle odpovídá jednomu softwarovému produktu. Může zahrnovat různé podoby jedné aplikace:&lt;br /&gt;
** IOS&lt;br /&gt;
** Android&lt;br /&gt;
** webová aplikace&lt;br /&gt;
** Unity&lt;br /&gt;
** Flutter multiplatformní aplikace&lt;br /&gt;
&lt;br /&gt;
Příklad:&lt;br /&gt;
 users (kolekce)&lt;br /&gt;
    └── user1 (dokument)&lt;br /&gt;
          ├── name: &amp;quot;Jan&amp;quot;&lt;br /&gt;
          ├── age: 18&lt;br /&gt;
          └── email: &amp;quot;jan@email.cz&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Vytvoření projektu ve Firebase===&lt;br /&gt;
&lt;br /&gt;
#Jdi na: [https://console.firebase.google.com Console.firebase.google.com]&lt;br /&gt;
#Klikni na Vytvořit projekt&lt;br /&gt;
#Zadej název projektu&lt;br /&gt;
#Po vytvoření přidej aplikaci (Android / iOS / Web)&lt;br /&gt;
&lt;br /&gt;
===Propojení Flutter aplikace s Firebase===&lt;br /&gt;
&lt;br /&gt;
Ve Flutter projektu spusť:&lt;br /&gt;
&lt;br /&gt;
 flutter pub add firebase_core&lt;br /&gt;
 flutter pub add cloud_firestore&lt;br /&gt;
&lt;br /&gt;
Poté inicializuj Firebase v main.dart:&lt;br /&gt;
&lt;br /&gt;
 import 'package:firebase_core/firebase_core.dart';&lt;br /&gt;
 import 'package:flutter/material.dart';&lt;br /&gt;
 &lt;br /&gt;
 void main() async {&lt;br /&gt;
   WidgetsFlutterBinding.ensureInitialized();&lt;br /&gt;
   await Firebase.initializeApp();&lt;br /&gt;
   runApp(MyApp());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Ukládání dat do Firestore===&lt;br /&gt;
&lt;br /&gt;
; Importuj Firestore:&lt;br /&gt;
&lt;br /&gt;
 import 'package:cloud_firestore/cloud_firestore.dart';&lt;br /&gt;
&lt;br /&gt;
; Vytvoření instance pro přístup k databázi:&lt;br /&gt;
&lt;br /&gt;
 final FirebaseFirestore db = FirebaseFirestore.instance;&lt;br /&gt;
&lt;br /&gt;
; Přidání nového dokumentu&lt;br /&gt;
 await db.collection('users').add({&lt;br /&gt;
   'name': 'Jan',&lt;br /&gt;
   'age': 18,&lt;br /&gt;
   'email': 'jan@email.cz',&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
Tím se:&lt;br /&gt;
# vytvoří kolekce users (pokud neexistuje)&lt;br /&gt;
# přidá nový dokument s automatickým ID&lt;br /&gt;
&lt;br /&gt;
; Uložení dokumentu s vlastním ID&lt;br /&gt;
 await db.collection('users').doc('student1').set({&lt;br /&gt;
   'name': 'Petra',&lt;br /&gt;
   'age': 17,&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
=== Čtení dat z Firestore jednorázově===&lt;br /&gt;
&lt;br /&gt;
 var snapshot = await db.collection('users').get();&lt;br /&gt;
 &lt;br /&gt;
 for (var doc in snapshot.docs) {&lt;br /&gt;
   print(doc.data());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===Načtení v reálném čase ===&lt;br /&gt;
&lt;br /&gt;
Firestore umožňuje poslouchat změny. Data se pak automaticky aktualizují, pokud proběhne změna v databázi (například z jiného zařízení připojeného ke stejnému projektu):&lt;br /&gt;
&lt;br /&gt;
 StreamBuilder(&lt;br /&gt;
   stream: db.collection('users').snapshots(),&lt;br /&gt;
   builder: (context, snapshot) {&lt;br /&gt;
     if (!snapshot.hasData) {&lt;br /&gt;
       return CircularProgressIndicator();&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     var docs = snapshot.data!.docs;&lt;br /&gt;
 &lt;br /&gt;
     return ListView(&lt;br /&gt;
       children: docs.map((doc) {&lt;br /&gt;
         return ListTile(&lt;br /&gt;
           title: Text(doc['name']),&lt;br /&gt;
         );&lt;br /&gt;
       }).toList(),&lt;br /&gt;
     );&lt;br /&gt;
   },&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
=== Aktualizace dat===&lt;br /&gt;
 await db.collection('users').doc('student1').update({&lt;br /&gt;
   'age': 18,&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
=== Smazání dat===&lt;br /&gt;
&lt;br /&gt;
; Smazání dokumentu&lt;br /&gt;
 await db.collection('users').doc('student1').delete();&lt;br /&gt;
&lt;br /&gt;
=== Bezpečnostní pravidla (Rules) ===&lt;br /&gt;
&lt;br /&gt;
Ve Firebase konzoli nastav pravidla přístupu.&lt;br /&gt;
&lt;br /&gt;
Například pouze pro přihlášené uživatele:&lt;br /&gt;
&lt;br /&gt;
 rules_version = '2';&lt;br /&gt;
 service cloud.firestore {&lt;br /&gt;
   match /databases/{database}/documents {&lt;br /&gt;
     match /{document=**} {&lt;br /&gt;
       allow read, write: if request.auth != null;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Zdroje ===&lt;br /&gt;
* Sekce o Firebase byla vytvořena pomocí služby [https://www.chatgpt.com ChatGPT].&lt;br /&gt;
* [https://cloud.google.com/firestore/pricing Google Cloud &amp;gt; Firestore Pricing]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vlastní backend: ServerPod ==&lt;br /&gt;
&lt;br /&gt;
* Framework, který umožňuje vytvořit projekt Flutteru se dvěma částmi: backendem a frontendem.&lt;br /&gt;
* Backend je následně možné spustit na svém serveru.&lt;br /&gt;
* Frontend běží na desktopu.&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/Flutter:_Ukl%C3%A1d%C3%A1n%C3%AD_dat</id>
		<title>Flutter: Ukládání dat</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/Flutter:_Ukl%C3%A1d%C3%A1n%C3%AD_dat"/>
				<updated>2026-02-22T02:00:09Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: /* Struktura dat ve Firestore */ Doplněny možné podoby – aplikace.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]][[Category:Programování]][[Category:Flutter]]&lt;br /&gt;
&lt;br /&gt;
Pro trvalé uložení dat i po vypnutí aplikace můžeme data uložit:&lt;br /&gt;
* na lokální disk konkrétního zařízení&lt;br /&gt;
* do síťového úložiště (databáze, cloudové úložiště)&lt;br /&gt;
* můžeme rozdělit aplikaci na frontend a backend, kde data budou uložena v&amp;amp;nbsp;backendu (opět obvykle v&amp;amp;nbsp;databázi).&lt;br /&gt;
&lt;br /&gt;
Následuje několik příkladů možných řešení.&lt;br /&gt;
&lt;br /&gt;
== Lokální export: jsonEncode/jsonDecode ==&lt;br /&gt;
&lt;br /&gt;
=== Vlastnosti ===&lt;br /&gt;
* Formát JSON lze zpracovávat i v dalších aplikacích – je vhodný pro výměnu dat mezi aplikacemi a je textový.&lt;br /&gt;
* Jednoduše lze uložit seznam objektů. Složitější vnořované struktury objektů je třeba ručně převádět.&lt;br /&gt;
* Není vhodné pro větší objem dat – převod na text může zvětšit objem dat.&lt;br /&gt;
* Vhodné zejména pro textová data: texty, celá čísla, logické hodnoty. Méně vhodné pro desetinná čísla, obrázky, ... z důvodu nutné konverze na text.&lt;br /&gt;
* Formát JSON neukládá datové typy.&lt;br /&gt;
* Výsledek je uložen lokálně – převod z mobilní aplikace na desktop apod. je třeba řešit ručně.&lt;br /&gt;
&lt;br /&gt;
=== Postup zápisu ===&lt;br /&gt;
# Nalezení umístění souboru:&lt;br /&gt;
#* Využij balíček &amp;lt;code&amp;gt;path_provider&amp;lt;/code&amp;gt; a metodu &amp;lt;code&amp;gt;getApplicationDocumentsDirectory()&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Pro zápis do souboru použij třídu &amp;lt;code&amp;gt;File&amp;lt;/code&amp;gt; a metodu &amp;lt;code&amp;gt;writeAsString&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Převod dat na JSON&lt;br /&gt;
#* Využij balíček &amp;lt;code&amp;gt;dart:convert&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Pro parsování JSON využij metodu &amp;lt;code&amp;gt;jsonDecode(list)&amp;lt;/code&amp;gt; – výsledkem bude textová reprezentace objektu ve formátu JSON.&lt;br /&gt;
&lt;br /&gt;
=== Postup čtení ===&lt;br /&gt;
# Nalezení umístění souboru:&lt;br /&gt;
#* Využij balíček &amp;lt;code&amp;gt;path_provider&amp;lt;/code&amp;gt; a metodu &amp;lt;code&amp;gt;getApplicationDocumentsDirectory()&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Pro čtení souboru použij třídu &amp;lt;code&amp;gt;File&amp;lt;/code&amp;gt; a metodu &amp;lt;code&amp;gt;readAsString&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Převod dat na JSON&lt;br /&gt;
#* Využij balíček &amp;lt;code&amp;gt;dart:convert&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Pro ukládání využij metodu &amp;lt;code&amp;gt;jsonEncode(list)&amp;lt;/code&amp;gt; – výsledkem bude textová reprezentace objektu ve formátu JSON.&lt;br /&gt;
&lt;br /&gt;
=== Ukázka použití v aplikaci ===&lt;br /&gt;
 import 'dart:io';&lt;br /&gt;
 import 'package:flutter/material.dart';&lt;br /&gt;
 import 'package:path_provider/path_provider.dart';&lt;br /&gt;
 import 'dart:convert';&lt;br /&gt;
 &lt;br /&gt;
 void main() {&lt;br /&gt;
   runApp(const MyApp());&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class MyApp extends StatelessWidget {&lt;br /&gt;
   const MyApp({super.key});&lt;br /&gt;
 &lt;br /&gt;
   @override&lt;br /&gt;
   Widget build(BuildContext context) {&lt;br /&gt;
     return MaterialApp(&lt;br /&gt;
       title: 'Úložiště Demo',&lt;br /&gt;
       home: HomePage('''storage: FileStorage()'''),&lt;br /&gt;
     );&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class Zaznam {&lt;br /&gt;
   final String jmeno;&lt;br /&gt;
   final int pocet;&lt;br /&gt;
 &lt;br /&gt;
   const Zaznam({ required this.jmeno, required this.pocet, }); &lt;br /&gt;
 &lt;br /&gt;
   // Převod do JSON&lt;br /&gt;
   '''Map&amp;lt;String, dynamic&amp;gt; toJson() =&amp;gt; {'''&lt;br /&gt;
     'jmeno': jmeno,&lt;br /&gt;
     'pocet': pocet,&lt;br /&gt;
   };&lt;br /&gt;
 &lt;br /&gt;
   // Obnov z JSON&lt;br /&gt;
   '''factory Zaznam.fromJson(Map&amp;lt;String, dynamic&amp;gt; json) {'''&lt;br /&gt;
     return Zaznam(&lt;br /&gt;
       jmeno: (json['jmeno']),&lt;br /&gt;
       pocet: json['pocet'] as int,&lt;br /&gt;
     );&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /// Práce se soubory&lt;br /&gt;
 '''class FileStorage {'''&lt;br /&gt;
   '''Future&amp;lt;String&amp;gt; get _localPath''' async {&lt;br /&gt;
     final directory = await getApplicationDocumentsDirectory();&lt;br /&gt;
     return directory.path;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;File&amp;gt; get _localFile''' async {&lt;br /&gt;
     final path = await _localPath;&lt;br /&gt;
     return File('$path/data.txt');&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;String&amp;gt; readFile()''' async {&lt;br /&gt;
     final file = await _localFile;&lt;br /&gt;
     return file.readAsString();&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;void&amp;gt; writeFile(String content)''' async {&lt;br /&gt;
     final file = await _localFile;&lt;br /&gt;
     await file.writeAsString(content);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /// Stav aplikace včetně zápisu do souboru&lt;br /&gt;
 class HomePage extends StatefulWidget {&lt;br /&gt;
   final FileStorage storage;&lt;br /&gt;
   const HomePage('''{required this.storage}''');&lt;br /&gt;
   @override&lt;br /&gt;
   State&amp;lt;HomePage&amp;gt; createState() =&amp;gt; _HomePageState();&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class _HomePageState extends State&amp;lt;HomePage&amp;gt; {&lt;br /&gt;
   List&amp;lt;Zaznam&amp;gt; _seznam = [];&lt;br /&gt;
 &lt;br /&gt;
   @override&lt;br /&gt;
   void initState() {&lt;br /&gt;
     super.initState();&lt;br /&gt;
     '''_loadData();'''   // Načtení dat při startu&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;void&amp;gt; _loadData() async {'''&lt;br /&gt;
     try {&lt;br /&gt;
       final jsonString = await widget.storage.readFile();&lt;br /&gt;
       final List&amp;lt;dynamic&amp;gt; decoded = jsonDecode(jsonString);&lt;br /&gt;
       setState(() {&lt;br /&gt;
         _seznam = decoded&lt;br /&gt;
             .map((item) =&amp;gt; Zaznam.fromJson(item as Map&amp;lt;String, dynamic&amp;gt;))&lt;br /&gt;
             .toList();&lt;br /&gt;
       });&lt;br /&gt;
     } catch (e) {&lt;br /&gt;
       TODO: Zobraz chybové hlášení vhodným způsobem.&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;void&amp;gt; _saveData() async {'''&lt;br /&gt;
     final jsonString = jsonEncode(&lt;br /&gt;
       _seznam.map((z) =&amp;gt; z.toJson()).toList()&lt;br /&gt;
     );&lt;br /&gt;
     await widget.storage.writeFile(jsonString);&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   void _addRecord() {&lt;br /&gt;
     setState(() {&lt;br /&gt;
       _seznam.add(Zaznam(&lt;br /&gt;
         jmeno: 'Josef',&lt;br /&gt;
         pocet: 1000,&lt;br /&gt;
       ));&lt;br /&gt;
     });&lt;br /&gt;
     '''_saveData();'''&lt;br /&gt;
   } &lt;br /&gt;
 &lt;br /&gt;
   @override&lt;br /&gt;
   Widget build(BuildContext context) {&lt;br /&gt;
     return Scaffold(&lt;br /&gt;
       // ... vytvoř GUI&lt;br /&gt;
     );&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Tip ===&lt;br /&gt;
* Pro větší objemy dat či komplexnější data lze pro export do formátu JSON využít balíček &amp;lt;code&amp;gt;json_serializable&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Zdroje ===&lt;br /&gt;
* [https://hatchjs.com/list-to-json-flutter/ HatchJS.com &amp;gt; How to Convert a List to JSON in Flutter]&lt;br /&gt;
* [https://docs.flutter.dev/data-and-backend/serialization/json Flutter Docs &amp;gt; JSON and serialization]&lt;br /&gt;
* [https://docs.flutter.dev/cookbook/persistence/reading-writing-files Flutter Docs &amp;gt; Read and write files]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lokální databáze: Hive ==&lt;br /&gt;
&lt;br /&gt;
* Data ukládá binárně, ale stále na lokální zařízení.&lt;br /&gt;
&lt;br /&gt;
=== Zdroje ===&lt;br /&gt;
* [https://medium.com/@ChanakaDev/hive-vs-shared-preferences-10353068a8a6 Medium.com: ChanakaDev &amp;gt; Hive vs. Shared Preferences]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Google Firestore ==&lt;br /&gt;
&lt;br /&gt;
* Google Firestore je cloudová NoSQL databáze od Google, která je součástí platformy Firebase. &lt;br /&gt;
&lt;br /&gt;
; Vlastnosti&lt;br /&gt;
* Firebase je dobře integrovaná do frameworku Flutter (Flutter také vyvíjí Google)&lt;br /&gt;
* Data se ukládají do cloudu – data může sdílet mobilní i webová aplikace&lt;br /&gt;
* Synchronizace dat v reálném čase&lt;br /&gt;
* Pro malé projekty stačí varianta zdarma (pro větší bude třeba platit)&lt;br /&gt;
&lt;br /&gt;
=== Struktura dat ve Firestore ===&lt;br /&gt;
* Data se neukládají do entit jako u ER databází – spíše jako několik seznamů objektů.&lt;br /&gt;
&lt;br /&gt;
; Pojmy:&lt;br /&gt;
* Dokument (Document) ... konkrétní záznam (jako jeden řádek v databázi) – například údaje o jednom uživateli.&lt;br /&gt;
* Pole (Field) ... konkrétní hodnota (atribut) – například jméno uživatele&lt;br /&gt;
* Kolekce (Collection) ... odpovídá entitě v ER databázích – je to vlastně seznam dokumentů&lt;br /&gt;
* Databáze (Database) ... skupina souvisejících kolekcí&lt;br /&gt;
* Projekt (Project) ... jeden projekt obvykle odpovídá jednomu softwarovému produktu. Může zahrnovat různé podoby jedné aplikace:&lt;br /&gt;
** IOS&lt;br /&gt;
** Android&lt;br /&gt;
** webová aplikace&lt;br /&gt;
** Unity&lt;br /&gt;
** Flutter multiplatformní aplikace&lt;br /&gt;
&lt;br /&gt;
Příklad:&lt;br /&gt;
 users (kolekce)&lt;br /&gt;
    └── user1 (dokument)&lt;br /&gt;
          ├── name: &amp;quot;Jan&amp;quot;&lt;br /&gt;
          ├── age: 18&lt;br /&gt;
          └── email: &amp;quot;jan@email.cz&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Vytvoření projektu ve Firebase===&lt;br /&gt;
&lt;br /&gt;
#Jdi na: [https://console.firebase.google.com Console.firebase.google.com]&lt;br /&gt;
#Klikni na Vytvořit projekt&lt;br /&gt;
#Zadej název projektu&lt;br /&gt;
#Po vytvoření přidej aplikaci (Android / iOS / Web)&lt;br /&gt;
&lt;br /&gt;
===Propojení Flutter aplikace s Firebase===&lt;br /&gt;
&lt;br /&gt;
Ve Flutter projektu spusť:&lt;br /&gt;
&lt;br /&gt;
 flutter pub add firebase_core&lt;br /&gt;
 flutter pub add cloud_firestore&lt;br /&gt;
&lt;br /&gt;
Poté inicializuj Firebase v main.dart:&lt;br /&gt;
&lt;br /&gt;
 import 'package:firebase_core/firebase_core.dart';&lt;br /&gt;
 import 'package:flutter/material.dart';&lt;br /&gt;
 &lt;br /&gt;
 void main() async {&lt;br /&gt;
   WidgetsFlutterBinding.ensureInitialized();&lt;br /&gt;
   await Firebase.initializeApp();&lt;br /&gt;
   runApp(MyApp());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Ukládání dat do Firestore===&lt;br /&gt;
&lt;br /&gt;
; Importuj Firestore:&lt;br /&gt;
&lt;br /&gt;
 import 'package:cloud_firestore/cloud_firestore.dart';&lt;br /&gt;
&lt;br /&gt;
; Vytvoření instance pro přístup k databázi:&lt;br /&gt;
&lt;br /&gt;
 final FirebaseFirestore db = FirebaseFirestore.instance;&lt;br /&gt;
&lt;br /&gt;
; Přidání nového dokumentu&lt;br /&gt;
 await db.collection('users').add({&lt;br /&gt;
   'name': 'Jan',&lt;br /&gt;
   'age': 18,&lt;br /&gt;
   'email': 'jan@email.cz',&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
Tím se:&lt;br /&gt;
# vytvoří kolekce users (pokud neexistuje)&lt;br /&gt;
# přidá nový dokument s automatickým ID&lt;br /&gt;
&lt;br /&gt;
; Uložení dokumentu s vlastním ID&lt;br /&gt;
 await db.collection('users').doc('student1').set({&lt;br /&gt;
   'name': 'Petra',&lt;br /&gt;
   'age': 17,&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
=== Čtení dat z Firestore jednorázově===&lt;br /&gt;
&lt;br /&gt;
 var snapshot = await db.collection('users').get();&lt;br /&gt;
 &lt;br /&gt;
 for (var doc in snapshot.docs) {&lt;br /&gt;
   print(doc.data());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===Načtení v reálném čase ===&lt;br /&gt;
&lt;br /&gt;
Firestore umožňuje poslouchat změny. Data se pak automaticky aktualizují, pokud proběhne změna v databázi (například z jiného zařízení připojeného ke stejnému projektu):&lt;br /&gt;
&lt;br /&gt;
 StreamBuilder(&lt;br /&gt;
   stream: db.collection('users').snapshots(),&lt;br /&gt;
   builder: (context, snapshot) {&lt;br /&gt;
     if (!snapshot.hasData) {&lt;br /&gt;
       return CircularProgressIndicator();&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     var docs = snapshot.data!.docs;&lt;br /&gt;
 &lt;br /&gt;
     return ListView(&lt;br /&gt;
       children: docs.map((doc) {&lt;br /&gt;
         return ListTile(&lt;br /&gt;
           title: Text(doc['name']),&lt;br /&gt;
         );&lt;br /&gt;
       }).toList(),&lt;br /&gt;
     );&lt;br /&gt;
   },&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
=== Aktualizace dat===&lt;br /&gt;
 await db.collection('users').doc('student1').update({&lt;br /&gt;
   'age': 18,&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
=== Smazání dat===&lt;br /&gt;
&lt;br /&gt;
; Smazání dokumentu&lt;br /&gt;
await db.collection('users').doc('student1').delete();&lt;br /&gt;
&lt;br /&gt;
=== Bezpečnostní pravidla (Rules) ===&lt;br /&gt;
&lt;br /&gt;
Ve Firebase konzoli nastav pravidla přístupu.&lt;br /&gt;
&lt;br /&gt;
Například pouze pro přihlášené uživatele:&lt;br /&gt;
&lt;br /&gt;
 rules_version = '2';&lt;br /&gt;
 service cloud.firestore {&lt;br /&gt;
   match /databases/{database}/documents {&lt;br /&gt;
     match /{document=**} {&lt;br /&gt;
       allow read, write: if request.auth != null;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Zdroje ===&lt;br /&gt;
* Sekce o Firebase byla vytvořena pomocí služby [https://www.chatgpt.com ChatGPT].&lt;br /&gt;
* [https://cloud.google.com/firestore/pricing Google Cloud &amp;gt; Firestore Pricing]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vlastní backend: ServerPod ==&lt;br /&gt;
&lt;br /&gt;
* Framework, který umožňuje vytvořit projekt Flutteru se dvěma částmi: backendem a frontendem.&lt;br /&gt;
* Backend je následně možné spustit na svém serveru.&lt;br /&gt;
* Frontend běží na desktopu.&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/Flutter:_Ukl%C3%A1d%C3%A1n%C3%AD_dat</id>
		<title>Flutter: Ukládání dat</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/Flutter:_Ukl%C3%A1d%C3%A1n%C3%AD_dat"/>
				<updated>2026-02-22T01:55:28Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: Vytvořená sekce o Firebase – zatím pomocí ChatGPT.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]][[Category:Programování]][[Category:Flutter]]&lt;br /&gt;
&lt;br /&gt;
Pro trvalé uložení dat i po vypnutí aplikace můžeme data uložit:&lt;br /&gt;
* na lokální disk konkrétního zařízení&lt;br /&gt;
* do síťového úložiště (databáze, cloudové úložiště)&lt;br /&gt;
* můžeme rozdělit aplikaci na frontend a backend, kde data budou uložena v&amp;amp;nbsp;backendu (opět obvykle v&amp;amp;nbsp;databázi).&lt;br /&gt;
&lt;br /&gt;
Následuje několik příkladů možných řešení.&lt;br /&gt;
&lt;br /&gt;
== Lokální export: jsonEncode/jsonDecode ==&lt;br /&gt;
&lt;br /&gt;
=== Vlastnosti ===&lt;br /&gt;
* Formát JSON lze zpracovávat i v dalších aplikacích – je vhodný pro výměnu dat mezi aplikacemi a je textový.&lt;br /&gt;
* Jednoduše lze uložit seznam objektů. Složitější vnořované struktury objektů je třeba ručně převádět.&lt;br /&gt;
* Není vhodné pro větší objem dat – převod na text může zvětšit objem dat.&lt;br /&gt;
* Vhodné zejména pro textová data: texty, celá čísla, logické hodnoty. Méně vhodné pro desetinná čísla, obrázky, ... z důvodu nutné konverze na text.&lt;br /&gt;
* Formát JSON neukládá datové typy.&lt;br /&gt;
* Výsledek je uložen lokálně – převod z mobilní aplikace na desktop apod. je třeba řešit ručně.&lt;br /&gt;
&lt;br /&gt;
=== Postup zápisu ===&lt;br /&gt;
# Nalezení umístění souboru:&lt;br /&gt;
#* Využij balíček &amp;lt;code&amp;gt;path_provider&amp;lt;/code&amp;gt; a metodu &amp;lt;code&amp;gt;getApplicationDocumentsDirectory()&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Pro zápis do souboru použij třídu &amp;lt;code&amp;gt;File&amp;lt;/code&amp;gt; a metodu &amp;lt;code&amp;gt;writeAsString&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Převod dat na JSON&lt;br /&gt;
#* Využij balíček &amp;lt;code&amp;gt;dart:convert&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Pro parsování JSON využij metodu &amp;lt;code&amp;gt;jsonDecode(list)&amp;lt;/code&amp;gt; – výsledkem bude textová reprezentace objektu ve formátu JSON.&lt;br /&gt;
&lt;br /&gt;
=== Postup čtení ===&lt;br /&gt;
# Nalezení umístění souboru:&lt;br /&gt;
#* Využij balíček &amp;lt;code&amp;gt;path_provider&amp;lt;/code&amp;gt; a metodu &amp;lt;code&amp;gt;getApplicationDocumentsDirectory()&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Pro čtení souboru použij třídu &amp;lt;code&amp;gt;File&amp;lt;/code&amp;gt; a metodu &amp;lt;code&amp;gt;readAsString&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Převod dat na JSON&lt;br /&gt;
#* Využij balíček &amp;lt;code&amp;gt;dart:convert&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Pro ukládání využij metodu &amp;lt;code&amp;gt;jsonEncode(list)&amp;lt;/code&amp;gt; – výsledkem bude textová reprezentace objektu ve formátu JSON.&lt;br /&gt;
&lt;br /&gt;
=== Ukázka použití v aplikaci ===&lt;br /&gt;
 import 'dart:io';&lt;br /&gt;
 import 'package:flutter/material.dart';&lt;br /&gt;
 import 'package:path_provider/path_provider.dart';&lt;br /&gt;
 import 'dart:convert';&lt;br /&gt;
 &lt;br /&gt;
 void main() {&lt;br /&gt;
   runApp(const MyApp());&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class MyApp extends StatelessWidget {&lt;br /&gt;
   const MyApp({super.key});&lt;br /&gt;
 &lt;br /&gt;
   @override&lt;br /&gt;
   Widget build(BuildContext context) {&lt;br /&gt;
     return MaterialApp(&lt;br /&gt;
       title: 'Úložiště Demo',&lt;br /&gt;
       home: HomePage('''storage: FileStorage()'''),&lt;br /&gt;
     );&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class Zaznam {&lt;br /&gt;
   final String jmeno;&lt;br /&gt;
   final int pocet;&lt;br /&gt;
 &lt;br /&gt;
   const Zaznam({ required this.jmeno, required this.pocet, }); &lt;br /&gt;
 &lt;br /&gt;
   // Převod do JSON&lt;br /&gt;
   '''Map&amp;lt;String, dynamic&amp;gt; toJson() =&amp;gt; {'''&lt;br /&gt;
     'jmeno': jmeno,&lt;br /&gt;
     'pocet': pocet,&lt;br /&gt;
   };&lt;br /&gt;
 &lt;br /&gt;
   // Obnov z JSON&lt;br /&gt;
   '''factory Zaznam.fromJson(Map&amp;lt;String, dynamic&amp;gt; json) {'''&lt;br /&gt;
     return Zaznam(&lt;br /&gt;
       jmeno: (json['jmeno']),&lt;br /&gt;
       pocet: json['pocet'] as int,&lt;br /&gt;
     );&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /// Práce se soubory&lt;br /&gt;
 '''class FileStorage {'''&lt;br /&gt;
   '''Future&amp;lt;String&amp;gt; get _localPath''' async {&lt;br /&gt;
     final directory = await getApplicationDocumentsDirectory();&lt;br /&gt;
     return directory.path;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;File&amp;gt; get _localFile''' async {&lt;br /&gt;
     final path = await _localPath;&lt;br /&gt;
     return File('$path/data.txt');&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;String&amp;gt; readFile()''' async {&lt;br /&gt;
     final file = await _localFile;&lt;br /&gt;
     return file.readAsString();&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;void&amp;gt; writeFile(String content)''' async {&lt;br /&gt;
     final file = await _localFile;&lt;br /&gt;
     await file.writeAsString(content);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /// Stav aplikace včetně zápisu do souboru&lt;br /&gt;
 class HomePage extends StatefulWidget {&lt;br /&gt;
   final FileStorage storage;&lt;br /&gt;
   const HomePage('''{required this.storage}''');&lt;br /&gt;
   @override&lt;br /&gt;
   State&amp;lt;HomePage&amp;gt; createState() =&amp;gt; _HomePageState();&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class _HomePageState extends State&amp;lt;HomePage&amp;gt; {&lt;br /&gt;
   List&amp;lt;Zaznam&amp;gt; _seznam = [];&lt;br /&gt;
 &lt;br /&gt;
   @override&lt;br /&gt;
   void initState() {&lt;br /&gt;
     super.initState();&lt;br /&gt;
     '''_loadData();'''   // Načtení dat při startu&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;void&amp;gt; _loadData() async {'''&lt;br /&gt;
     try {&lt;br /&gt;
       final jsonString = await widget.storage.readFile();&lt;br /&gt;
       final List&amp;lt;dynamic&amp;gt; decoded = jsonDecode(jsonString);&lt;br /&gt;
       setState(() {&lt;br /&gt;
         _seznam = decoded&lt;br /&gt;
             .map((item) =&amp;gt; Zaznam.fromJson(item as Map&amp;lt;String, dynamic&amp;gt;))&lt;br /&gt;
             .toList();&lt;br /&gt;
       });&lt;br /&gt;
     } catch (e) {&lt;br /&gt;
       TODO: Zobraz chybové hlášení vhodným způsobem.&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;void&amp;gt; _saveData() async {'''&lt;br /&gt;
     final jsonString = jsonEncode(&lt;br /&gt;
       _seznam.map((z) =&amp;gt; z.toJson()).toList()&lt;br /&gt;
     );&lt;br /&gt;
     await widget.storage.writeFile(jsonString);&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   void _addRecord() {&lt;br /&gt;
     setState(() {&lt;br /&gt;
       _seznam.add(Zaznam(&lt;br /&gt;
         jmeno: 'Josef',&lt;br /&gt;
         pocet: 1000,&lt;br /&gt;
       ));&lt;br /&gt;
     });&lt;br /&gt;
     '''_saveData();'''&lt;br /&gt;
   } &lt;br /&gt;
 &lt;br /&gt;
   @override&lt;br /&gt;
   Widget build(BuildContext context) {&lt;br /&gt;
     return Scaffold(&lt;br /&gt;
       // ... vytvoř GUI&lt;br /&gt;
     );&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Tip ===&lt;br /&gt;
* Pro větší objemy dat či komplexnější data lze pro export do formátu JSON využít balíček &amp;lt;code&amp;gt;json_serializable&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Zdroje ===&lt;br /&gt;
* [https://hatchjs.com/list-to-json-flutter/ HatchJS.com &amp;gt; How to Convert a List to JSON in Flutter]&lt;br /&gt;
* [https://docs.flutter.dev/data-and-backend/serialization/json Flutter Docs &amp;gt; JSON and serialization]&lt;br /&gt;
* [https://docs.flutter.dev/cookbook/persistence/reading-writing-files Flutter Docs &amp;gt; Read and write files]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lokální databáze: Hive ==&lt;br /&gt;
&lt;br /&gt;
* Data ukládá binárně, ale stále na lokální zařízení.&lt;br /&gt;
&lt;br /&gt;
=== Zdroje ===&lt;br /&gt;
* [https://medium.com/@ChanakaDev/hive-vs-shared-preferences-10353068a8a6 Medium.com: ChanakaDev &amp;gt; Hive vs. Shared Preferences]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Google Firestore ==&lt;br /&gt;
&lt;br /&gt;
* Google Firestore je cloudová NoSQL databáze od Google, která je součástí platformy Firebase. &lt;br /&gt;
&lt;br /&gt;
; Vlastnosti&lt;br /&gt;
* Firebase je dobře integrovaná do frameworku Flutter (Flutter také vyvíjí Google)&lt;br /&gt;
* Data se ukládají do cloudu – data může sdílet mobilní i webová aplikace&lt;br /&gt;
* Synchronizace dat v reálném čase&lt;br /&gt;
* Pro malé projekty stačí varianta zdarma (pro větší bude třeba platit)&lt;br /&gt;
&lt;br /&gt;
=== Struktura dat ve Firestore ===&lt;br /&gt;
* Data se neukládají do entit jako u ER databází – spíše jako několik seznamů objektů.&lt;br /&gt;
&lt;br /&gt;
; Pojmy:&lt;br /&gt;
* Dokument (Document) ... konkrétní záznam (jako jeden řádek v databázi) – například údaje o jednom uživateli.&lt;br /&gt;
* Pole (Field) ... konkrétní hodnota (atribut) – například jméno uživatele&lt;br /&gt;
* Kolekce (Collection) ... odpovídá entitě v ER databázích – je to vlastně seznam dokumentů&lt;br /&gt;
* Databáze (Database) ... skupina souvisejících kolekcí&lt;br /&gt;
* Projekt (Project) ... jeden projekt obvykle odpovídá jednomu projektu ve Flutteru (jedné aplikaci, která může mít více podob – Android, IOS, web, ...)&lt;br /&gt;
&lt;br /&gt;
Příklad:&lt;br /&gt;
 users (kolekce)&lt;br /&gt;
    └── user1 (dokument)&lt;br /&gt;
          ├── name: &amp;quot;Jan&amp;quot;&lt;br /&gt;
          ├── age: 18&lt;br /&gt;
          └── email: &amp;quot;jan@email.cz&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Vytvoření projektu ve Firebase===&lt;br /&gt;
&lt;br /&gt;
#Jdi na: [https://console.firebase.google.com Console.firebase.google.com]&lt;br /&gt;
#Klikni na Vytvořit projekt&lt;br /&gt;
#Zadej název projektu&lt;br /&gt;
#Po vytvoření přidej aplikaci (Android / iOS / Web)&lt;br /&gt;
&lt;br /&gt;
===Propojení Flutter aplikace s Firebase===&lt;br /&gt;
&lt;br /&gt;
Ve Flutter projektu spusť:&lt;br /&gt;
&lt;br /&gt;
 flutter pub add firebase_core&lt;br /&gt;
 flutter pub add cloud_firestore&lt;br /&gt;
&lt;br /&gt;
Poté inicializuj Firebase v main.dart:&lt;br /&gt;
&lt;br /&gt;
 import 'package:firebase_core/firebase_core.dart';&lt;br /&gt;
 import 'package:flutter/material.dart';&lt;br /&gt;
 &lt;br /&gt;
 void main() async {&lt;br /&gt;
   WidgetsFlutterBinding.ensureInitialized();&lt;br /&gt;
   await Firebase.initializeApp();&lt;br /&gt;
   runApp(MyApp());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Ukládání dat do Firestore===&lt;br /&gt;
&lt;br /&gt;
; Importuj Firestore:&lt;br /&gt;
&lt;br /&gt;
 import 'package:cloud_firestore/cloud_firestore.dart';&lt;br /&gt;
&lt;br /&gt;
; Vytvoření instance pro přístup k databázi:&lt;br /&gt;
&lt;br /&gt;
 final FirebaseFirestore db = FirebaseFirestore.instance;&lt;br /&gt;
&lt;br /&gt;
; Přidání nového dokumentu&lt;br /&gt;
 await db.collection('users').add({&lt;br /&gt;
   'name': 'Jan',&lt;br /&gt;
   'age': 18,&lt;br /&gt;
   'email': 'jan@email.cz',&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
Tím se:&lt;br /&gt;
# vytvoří kolekce users (pokud neexistuje)&lt;br /&gt;
# přidá nový dokument s automatickým ID&lt;br /&gt;
&lt;br /&gt;
; Uložení dokumentu s vlastním ID&lt;br /&gt;
 await db.collection('users').doc('student1').set({&lt;br /&gt;
   'name': 'Petra',&lt;br /&gt;
   'age': 17,&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
=== Čtení dat z Firestore jednorázově===&lt;br /&gt;
&lt;br /&gt;
 var snapshot = await db.collection('users').get();&lt;br /&gt;
 &lt;br /&gt;
 for (var doc in snapshot.docs) {&lt;br /&gt;
   print(doc.data());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
===Načtení v reálném čase ===&lt;br /&gt;
&lt;br /&gt;
Firestore umožňuje poslouchat změny. Data se pak automaticky aktualizují, pokud proběhne změna v databázi (například z jiného zařízení připojeného ke stejnému projektu):&lt;br /&gt;
&lt;br /&gt;
 StreamBuilder(&lt;br /&gt;
   stream: db.collection('users').snapshots(),&lt;br /&gt;
   builder: (context, snapshot) {&lt;br /&gt;
     if (!snapshot.hasData) {&lt;br /&gt;
       return CircularProgressIndicator();&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     var docs = snapshot.data!.docs;&lt;br /&gt;
 &lt;br /&gt;
     return ListView(&lt;br /&gt;
       children: docs.map((doc) {&lt;br /&gt;
         return ListTile(&lt;br /&gt;
           title: Text(doc['name']),&lt;br /&gt;
         );&lt;br /&gt;
       }).toList(),&lt;br /&gt;
     );&lt;br /&gt;
   },&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
=== Aktualizace dat===&lt;br /&gt;
 await db.collection('users').doc('student1').update({&lt;br /&gt;
   'age': 18,&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
=== Smazání dat===&lt;br /&gt;
&lt;br /&gt;
; Smazání dokumentu&lt;br /&gt;
await db.collection('users').doc('student1').delete();&lt;br /&gt;
&lt;br /&gt;
=== Bezpečnostní pravidla (Rules) ===&lt;br /&gt;
&lt;br /&gt;
Ve Firebase konzoli nastav pravidla přístupu.&lt;br /&gt;
&lt;br /&gt;
Například pouze pro přihlášené uživatele:&lt;br /&gt;
&lt;br /&gt;
 rules_version = '2';&lt;br /&gt;
 service cloud.firestore {&lt;br /&gt;
   match /databases/{database}/documents {&lt;br /&gt;
     match /{document=**} {&lt;br /&gt;
       allow read, write: if request.auth != null;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Zdroje ===&lt;br /&gt;
* Sekce o Firebase byla vytvořena pomocí služby [https://www.chatgpt.com ChatGPT].&lt;br /&gt;
* [https://cloud.google.com/firestore/pricing Google Cloud &amp;gt; Firestore Pricing]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vlastní backend: ServerPod ==&lt;br /&gt;
&lt;br /&gt;
* Framework, který umožňuje vytvořit projekt Flutteru se dvěma částmi: backendem a frontendem.&lt;br /&gt;
* Backend je následně možné spustit na svém serveru.&lt;br /&gt;
* Frontend běží na desktopu.&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/Flutter:_Ukl%C3%A1d%C3%A1n%C3%AD_dat</id>
		<title>Flutter: Ukládání dat</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/Flutter:_Ukl%C3%A1d%C3%A1n%C3%AD_dat"/>
				<updated>2026-02-22T01:04:57Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: Lokální export do JSON pomocí jsonEncode/Decode().&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]][[Category:Programování]][[Category:Flutter]]&lt;br /&gt;
&lt;br /&gt;
Pro trvalé uložení dat i po vypnutí aplikace můžeme data uložit:&lt;br /&gt;
* na lokální disk konkrétního zařízení&lt;br /&gt;
* do síťového úložiště (databáze, cloudové úložiště)&lt;br /&gt;
* můžeme rozdělit aplikaci na frontend a backend, kde data budou uložena v&amp;amp;nbsp;backendu (opět obvykle v&amp;amp;nbsp;databázi).&lt;br /&gt;
&lt;br /&gt;
Následuje několik příkladů možných řešení.&lt;br /&gt;
&lt;br /&gt;
== Lokální export: jsonEncode/jsonDecode ==&lt;br /&gt;
&lt;br /&gt;
=== Vlastnosti ===&lt;br /&gt;
* Formát JSON lze zpracovávat i v dalších aplikacích – je vhodný pro výměnu dat mezi aplikacemi a je textový.&lt;br /&gt;
* Jednoduše lze uložit seznam objektů. Složitější vnořované struktury objektů je třeba ručně převádět.&lt;br /&gt;
* Není vhodné pro větší objem dat – převod na text může zvětšit objem dat.&lt;br /&gt;
* Vhodné zejména pro textová data: texty, celá čísla, logické hodnoty. Méně vhodné pro desetinná čísla, obrázky, ... z důvodu nutné konverze na text.&lt;br /&gt;
* Formát JSON neukládá datové typy.&lt;br /&gt;
* Výsledek je uložen lokálně – převod z mobilní aplikace na desktop apod. je třeba řešit ručně.&lt;br /&gt;
&lt;br /&gt;
=== Postup zápisu ===&lt;br /&gt;
# Nalezení umístění souboru:&lt;br /&gt;
#* Využij balíček &amp;lt;code&amp;gt;path_provider&amp;lt;/code&amp;gt; a metodu &amp;lt;code&amp;gt;getApplicationDocumentsDirectory()&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Pro zápis do souboru použij třídu &amp;lt;code&amp;gt;File&amp;lt;/code&amp;gt; a metodu &amp;lt;code&amp;gt;writeAsString&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Převod dat na JSON&lt;br /&gt;
#* Využij balíček &amp;lt;code&amp;gt;dart:convert&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Pro parsování JSON využij metodu &amp;lt;code&amp;gt;jsonDecode(list)&amp;lt;/code&amp;gt; – výsledkem bude textová reprezentace objektu ve formátu JSON.&lt;br /&gt;
&lt;br /&gt;
=== Postup čtení ===&lt;br /&gt;
# Nalezení umístění souboru:&lt;br /&gt;
#* Využij balíček &amp;lt;code&amp;gt;path_provider&amp;lt;/code&amp;gt; a metodu &amp;lt;code&amp;gt;getApplicationDocumentsDirectory()&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Pro čtení souboru použij třídu &amp;lt;code&amp;gt;File&amp;lt;/code&amp;gt; a metodu &amp;lt;code&amp;gt;readAsString&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Převod dat na JSON&lt;br /&gt;
#* Využij balíček &amp;lt;code&amp;gt;dart:convert&amp;lt;/code&amp;gt;.&lt;br /&gt;
#* Pro ukládání využij metodu &amp;lt;code&amp;gt;jsonEncode(list)&amp;lt;/code&amp;gt; – výsledkem bude textová reprezentace objektu ve formátu JSON.&lt;br /&gt;
&lt;br /&gt;
=== Ukázka použití v aplikaci ===&lt;br /&gt;
 import 'dart:io';&lt;br /&gt;
 import 'package:flutter/material.dart';&lt;br /&gt;
 import 'package:path_provider/path_provider.dart';&lt;br /&gt;
 import 'dart:convert';&lt;br /&gt;
 &lt;br /&gt;
 void main() {&lt;br /&gt;
   runApp(const MyApp());&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class MyApp extends StatelessWidget {&lt;br /&gt;
   const MyApp({super.key});&lt;br /&gt;
 &lt;br /&gt;
   @override&lt;br /&gt;
   Widget build(BuildContext context) {&lt;br /&gt;
     return MaterialApp(&lt;br /&gt;
       title: 'Úložiště Demo',&lt;br /&gt;
       home: HomePage('''storage: FileStorage()'''),&lt;br /&gt;
     );&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class Zaznam {&lt;br /&gt;
   final String jmeno;&lt;br /&gt;
   final int pocet;&lt;br /&gt;
 &lt;br /&gt;
   const Zaznam({ required this.jmeno, required this.pocet, }); &lt;br /&gt;
 &lt;br /&gt;
   // Převod do JSON&lt;br /&gt;
   '''Map&amp;lt;String, dynamic&amp;gt; toJson() =&amp;gt; {'''&lt;br /&gt;
     'jmeno': jmeno,&lt;br /&gt;
     'pocet': pocet,&lt;br /&gt;
   };&lt;br /&gt;
 &lt;br /&gt;
   // Obnov z JSON&lt;br /&gt;
   '''factory Zaznam.fromJson(Map&amp;lt;String, dynamic&amp;gt; json) {'''&lt;br /&gt;
     return Zaznam(&lt;br /&gt;
       jmeno: (json['jmeno']),&lt;br /&gt;
       pocet: json['pocet'] as int,&lt;br /&gt;
     );&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /// Práce se soubory&lt;br /&gt;
 '''class FileStorage {'''&lt;br /&gt;
   '''Future&amp;lt;String&amp;gt; get _localPath''' async {&lt;br /&gt;
     final directory = await getApplicationDocumentsDirectory();&lt;br /&gt;
     return directory.path;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;File&amp;gt; get _localFile''' async {&lt;br /&gt;
     final path = await _localPath;&lt;br /&gt;
     return File('$path/data.txt');&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;String&amp;gt; readFile()''' async {&lt;br /&gt;
     final file = await _localFile;&lt;br /&gt;
     return file.readAsString();&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;void&amp;gt; writeFile(String content)''' async {&lt;br /&gt;
     final file = await _localFile;&lt;br /&gt;
     await file.writeAsString(content);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /// Stav aplikace včetně zápisu do souboru&lt;br /&gt;
 class HomePage extends StatefulWidget {&lt;br /&gt;
   final FileStorage storage;&lt;br /&gt;
   const HomePage('''{required this.storage}''');&lt;br /&gt;
   @override&lt;br /&gt;
   State&amp;lt;HomePage&amp;gt; createState() =&amp;gt; _HomePageState();&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 class _HomePageState extends State&amp;lt;HomePage&amp;gt; {&lt;br /&gt;
   List&amp;lt;Zaznam&amp;gt; _seznam = [];&lt;br /&gt;
 &lt;br /&gt;
   @override&lt;br /&gt;
   void initState() {&lt;br /&gt;
     super.initState();&lt;br /&gt;
     '''_loadData();'''   // Načtení dat při startu&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;void&amp;gt; _loadData() async {'''&lt;br /&gt;
     try {&lt;br /&gt;
       final jsonString = await widget.storage.readFile();&lt;br /&gt;
       final List&amp;lt;dynamic&amp;gt; decoded = jsonDecode(jsonString);&lt;br /&gt;
       setState(() {&lt;br /&gt;
         _seznam = decoded&lt;br /&gt;
             .map((item) =&amp;gt; Zaznam.fromJson(item as Map&amp;lt;String, dynamic&amp;gt;))&lt;br /&gt;
             .toList();&lt;br /&gt;
       });&lt;br /&gt;
     } catch (e) {&lt;br /&gt;
       TODO: Zobraz chybové hlášení vhodným způsobem.&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   '''Future&amp;lt;void&amp;gt; _saveData() async {'''&lt;br /&gt;
     final jsonString = jsonEncode(&lt;br /&gt;
       _seznam.map((z) =&amp;gt; z.toJson()).toList()&lt;br /&gt;
     );&lt;br /&gt;
     await widget.storage.writeFile(jsonString);&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   void _addRecord() {&lt;br /&gt;
     setState(() {&lt;br /&gt;
       _seznam.add(Zaznam(&lt;br /&gt;
         jmeno: 'Josef',&lt;br /&gt;
         pocet: 1000,&lt;br /&gt;
       ));&lt;br /&gt;
     });&lt;br /&gt;
     '''_saveData();'''&lt;br /&gt;
   } &lt;br /&gt;
 &lt;br /&gt;
   @override&lt;br /&gt;
   Widget build(BuildContext context) {&lt;br /&gt;
     return Scaffold(&lt;br /&gt;
       // ... vytvoř GUI&lt;br /&gt;
     );&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Tip ===&lt;br /&gt;
* Pro větší objemy dat či komplexnější data lze pro export do formátu JSON využít balíček &amp;lt;code&amp;gt;json_serializable&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Zdroje ===&lt;br /&gt;
* [https://hatchjs.com/list-to-json-flutter/ HatchJS.com &amp;gt; How to Convert a List to JSON in Flutter]&lt;br /&gt;
* [https://docs.flutter.dev/data-and-backend/serialization/json Flutter Docs &amp;gt; JSON and serialization]&lt;br /&gt;
* [https://docs.flutter.dev/cookbook/persistence/reading-writing-files Flutter Docs &amp;gt; Read and write files]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Lokální databáze: Hive ==&lt;br /&gt;
&lt;br /&gt;
=== Zdroje ===&lt;br /&gt;
* [https://medium.com/@ChanakaDev/hive-vs-shared-preferences-10353068a8a6 Medium.com: ChanakaDev &amp;gt; Hive vs. Shared Preferences]&lt;br /&gt;
&lt;br /&gt;
== Google Firestore ==&lt;br /&gt;
&lt;br /&gt;
== Vlastní backend: ServerPod ==&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/S%C3%AD%C5%A5ov%C3%A9_%C3%BAtoky</id>
		<title>Síťové útoky</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/S%C3%AD%C5%A5ov%C3%A9_%C3%BAtoky"/>
				<updated>2026-02-20T10:59:59Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: /* 6. Malware šířený sítí */ Oprava nadpisu&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== DoS / DDoS útok (Denial of Service) ==&lt;br /&gt;
&lt;br /&gt;
; Cíl&lt;br /&gt;
* Způsobit nedostupnost síťového prostředku (typicky webového serveru či připojení k&amp;amp;nbsp;internetu).&lt;br /&gt;
&lt;br /&gt;
; Průběh&lt;br /&gt;
# Útočník si vytvoří nebo pronajme botnet (síť napadených počítačů).&lt;br /&gt;
#* Každé zařízení je schopné odesílat síťové požadavky na pokyn útočníka.&lt;br /&gt;
# Zahájení útoku&lt;br /&gt;
#* Botnet začne současně posílat obrovské množství datagramů nebo požadavků na server.&lt;br /&gt;
#* Protože se jedná o legitimní požadavky (například zobrazení webové stránky ze serveru) z&amp;amp;nbsp;různých počítačů, není jednoduché útok filtrovat na základě běžných firewallů.&lt;br /&gt;
#* Server má omezené prostředky a nestíhá zpracovat všechny požadavky.&lt;br /&gt;
# Výsledek&lt;br /&gt;
#* Legitimní uživatelé se nedostanou ke službě.&lt;br /&gt;
#* Server může úplně spadnout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Phishing ==&lt;br /&gt;
&lt;br /&gt;
; Cíl&lt;br /&gt;
* Získat citlivé informace o uživateli.&lt;br /&gt;
* Typickým cílem jsou přihlašovací údaje do elektronického bankovnictví nebo čísla kreditních karet.&lt;br /&gt;
&lt;br /&gt;
; Průběh útoku&lt;br /&gt;
# Příprava falešného prostředí&lt;br /&gt;
#* Útočník vytvoří kopii webu (např. banky).&lt;br /&gt;
#* Vypadá téměř identicky jako originál.&lt;br /&gt;
# Distribuce&lt;br /&gt;
#* Pošle e-mail nebo SMS s odkazem.&lt;br /&gt;
#* Často používá psychologický nátlak:&lt;br /&gt;
#** „Účet bude zablokován“&lt;br /&gt;
#** „Potvrďte ihned platbu“&lt;br /&gt;
# Získání údajů&lt;br /&gt;
#* Oběť zadá:&lt;br /&gt;
#** login&lt;br /&gt;
#** heslo&lt;br /&gt;
#** číslo karty&lt;br /&gt;
# Zneužití&lt;br /&gt;
#* Útočník se přihlásí do skutečného účtu.&lt;br /&gt;
#* Může převést peníze nebo ukrást data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Man-in-the-Middle (MITM) ==&lt;br /&gt;
&lt;br /&gt;
; Cíl&lt;br /&gt;
* Odposlechnout údaje spojení, které měly zůstat důvěrné.&lt;br /&gt;
* Narušit šifrovanou komunikaci.&lt;br /&gt;
&lt;br /&gt;
; Průběh útoku&lt;br /&gt;
# Získání pozice mezi komunikujícími&lt;br /&gt;
#* Útočník vytvoří falešnou Wi-Fi síť nebo provede ARP spoofing.&lt;br /&gt;
# Přesměrování komunikace&lt;br /&gt;
#* Oběť si myslí, že komunikuje přímo se serverem.&lt;br /&gt;
#* Ve skutečnosti data prochází přes útočníka.&lt;br /&gt;
# Odposlech / manipulace&lt;br /&gt;
#* Útočník může:&lt;br /&gt;
#** číst přenášená data&lt;br /&gt;
#** měnit obsah&lt;br /&gt;
#** vkládat škodlivý kód&lt;br /&gt;
# Nenápadnost&lt;br /&gt;
#* Komunikace často pokračuje bez přerušení.&lt;br /&gt;
#* Oběť si útoku nevšimne.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Spoofing (podvržení identity) ==&lt;br /&gt;
&lt;br /&gt;
; Průběh&lt;br /&gt;
# Falšování identity&lt;br /&gt;
#* Útočník změní identifikační údaje:&lt;br /&gt;
#** IP adresu&lt;br /&gt;
#** e-mailovou hlavičku&lt;br /&gt;
#** DNS záznam&lt;br /&gt;
# Navázání důvěry&lt;br /&gt;
#* Systém nebo uživatel věří, že komunikace je legitimní.&lt;br /&gt;
# Zneužití&lt;br /&gt;
#* Útočník může:&lt;br /&gt;
#** získat přístup&lt;br /&gt;
#** přesměrovat komunikaci&lt;br /&gt;
#** spustit další útok.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Brute-Force útok ==&lt;br /&gt;
&lt;br /&gt;
; Průběh&lt;br /&gt;
# Získání cíle&lt;br /&gt;
#* Útočník zná přihlašovací stránku nebo účet.&lt;br /&gt;
# Automatizované pokusy&lt;br /&gt;
#* Program zkouší tisíce hesel za sekundu.&lt;br /&gt;
#* Používají se slovníky běžných hesel.&lt;br /&gt;
#* Pokud je heslo slabé, je nalezeno velmi rychle.&lt;br /&gt;
# Převzetí účtu&lt;br /&gt;
#* Útočník získá plnou kontrolu nad účtem a může ho dále zneužít.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Malware šířený sítí ==&lt;br /&gt;
&lt;br /&gt;
; Průběh&lt;br /&gt;
# Distribuce&lt;br /&gt;
#* E-mailová příloha&lt;br /&gt;
#* stažení z webu&lt;br /&gt;
#* exploit zranitelnosti&lt;br /&gt;
# Spuštění&lt;br /&gt;
#* Uživatel otevře soubor nebo klikne na odkaz.&lt;br /&gt;
#* Malware se nainstaluje.&lt;br /&gt;
# Skrytá činnost&lt;br /&gt;
#* Běží na pozadí:&lt;br /&gt;
#** krade data&lt;br /&gt;
#** zaznamenává stisky kláves&lt;br /&gt;
#** šifruje soubory&lt;br /&gt;
# Další šíření&lt;br /&gt;
#* Může napadat další zařízení v síti.&lt;br /&gt;
&lt;br /&gt;
== SQL Injection ==&lt;br /&gt;
&lt;br /&gt;
; Průběh&lt;br /&gt;
# Nalezení zranitelného formuláře&lt;br /&gt;
* Například přihlašovací pole.&lt;br /&gt;
# Vložení škodlivého kódu&lt;br /&gt;
#* Útočník zadá SQL příkaz místo běžného textu.&lt;br /&gt;
# Spuštění databázového dotazu&lt;br /&gt;
#* Server příkaz vykoná, protože není správně ošetřen vstup.&lt;br /&gt;
# Získání dat&lt;br /&gt;
#* Útočník může:&lt;br /&gt;
#** zobrazit databázi&lt;br /&gt;
#** upravovat záznamy&lt;br /&gt;
#** mazat data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Společný průběh většiny útoků ==&lt;br /&gt;
&lt;br /&gt;
Typický útok má tyto fáze:&lt;br /&gt;
&lt;br /&gt;
# Průzkum (reconnaissance) – hledání zranitelností&lt;br /&gt;
# Proniknutí (exploitation) – využití slabiny&lt;br /&gt;
# Udržení přístupu – skrytá přítomnost v systému&lt;br /&gt;
# Zneužití – krádež dat nebo narušení služby&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/S%C3%AD%C5%A5ov%C3%A9_%C3%BAtoky</id>
		<title>Síťové útoky</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/S%C3%AD%C5%A5ov%C3%A9_%C3%BAtoky"/>
				<updated>2026-02-20T10:54:59Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: Úprava vzhledu a upřesnění.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== DoS / DDoS útok (Denial of Service) ==&lt;br /&gt;
&lt;br /&gt;
; Cíl&lt;br /&gt;
* Způsobit nedostupnost síťového prostředku (typicky webového serveru či připojení k&amp;amp;nbsp;internetu).&lt;br /&gt;
&lt;br /&gt;
; Průběh&lt;br /&gt;
# Útočník si vytvoří nebo pronajme botnet (síť napadených počítačů).&lt;br /&gt;
#* Každé zařízení je schopné odesílat síťové požadavky na pokyn útočníka.&lt;br /&gt;
# Zahájení útoku&lt;br /&gt;
#* Botnet začne současně posílat obrovské množství datagramů nebo požadavků na server.&lt;br /&gt;
#* Protože se jedná o legitimní požadavky (například zobrazení webové stránky ze serveru) z&amp;amp;nbsp;různých počítačů, není jednoduché útok filtrovat na základě běžných firewallů.&lt;br /&gt;
#* Server má omezené prostředky a nestíhá zpracovat všechny požadavky.&lt;br /&gt;
# Výsledek&lt;br /&gt;
#* Legitimní uživatelé se nedostanou ke službě.&lt;br /&gt;
#* Server může úplně spadnout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Phishing ==&lt;br /&gt;
&lt;br /&gt;
; Cíl&lt;br /&gt;
* Získat citlivé informace o uživateli.&lt;br /&gt;
* Typickým cílem jsou přihlašovací údaje do elektronického bankovnictví nebo čísla kreditních karet.&lt;br /&gt;
&lt;br /&gt;
; Průběh útoku&lt;br /&gt;
# Příprava falešného prostředí&lt;br /&gt;
#* Útočník vytvoří kopii webu (např. banky).&lt;br /&gt;
#* Vypadá téměř identicky jako originál.&lt;br /&gt;
# Distribuce&lt;br /&gt;
#* Pošle e-mail nebo SMS s odkazem.&lt;br /&gt;
#* Často používá psychologický nátlak:&lt;br /&gt;
#** „Účet bude zablokován“&lt;br /&gt;
#** „Potvrďte ihned platbu“&lt;br /&gt;
# Získání údajů&lt;br /&gt;
#* Oběť zadá:&lt;br /&gt;
#** login&lt;br /&gt;
#** heslo&lt;br /&gt;
#** číslo karty&lt;br /&gt;
# Zneužití&lt;br /&gt;
#* Útočník se přihlásí do skutečného účtu.&lt;br /&gt;
#* Může převést peníze nebo ukrást data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Man-in-the-Middle (MITM) ==&lt;br /&gt;
&lt;br /&gt;
; Cíl&lt;br /&gt;
* Odposlechnout údaje spojení, které měly zůstat důvěrné.&lt;br /&gt;
* Narušit šifrovanou komunikaci.&lt;br /&gt;
&lt;br /&gt;
; Průběh útoku&lt;br /&gt;
# Získání pozice mezi komunikujícími&lt;br /&gt;
#* Útočník vytvoří falešnou Wi-Fi síť nebo provede ARP spoofing.&lt;br /&gt;
# Přesměrování komunikace&lt;br /&gt;
#* Oběť si myslí, že komunikuje přímo se serverem.&lt;br /&gt;
#* Ve skutečnosti data prochází přes útočníka.&lt;br /&gt;
# Odposlech / manipulace&lt;br /&gt;
#* Útočník může:&lt;br /&gt;
#** číst přenášená data&lt;br /&gt;
#** měnit obsah&lt;br /&gt;
#** vkládat škodlivý kód&lt;br /&gt;
# Nenápadnost&lt;br /&gt;
#* Komunikace často pokračuje bez přerušení.&lt;br /&gt;
#* Oběť si útoku nevšimne.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Spoofing (podvržení identity) ==&lt;br /&gt;
&lt;br /&gt;
; Průběh&lt;br /&gt;
# Falšování identity&lt;br /&gt;
#* Útočník změní identifikační údaje:&lt;br /&gt;
#** IP adresu&lt;br /&gt;
#** e-mailovou hlavičku&lt;br /&gt;
#** DNS záznam&lt;br /&gt;
# Navázání důvěry&lt;br /&gt;
#* Systém nebo uživatel věří, že komunikace je legitimní.&lt;br /&gt;
# Zneužití&lt;br /&gt;
#* Útočník může:&lt;br /&gt;
#** získat přístup&lt;br /&gt;
#** přesměrovat komunikaci&lt;br /&gt;
#** spustit další útok.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Brute-Force útok ==&lt;br /&gt;
&lt;br /&gt;
; Průběh&lt;br /&gt;
# Získání cíle&lt;br /&gt;
#* Útočník zná přihlašovací stránku nebo účet.&lt;br /&gt;
# Automatizované pokusy&lt;br /&gt;
#* Program zkouší tisíce hesel za sekundu.&lt;br /&gt;
#* Používají se slovníky běžných hesel.&lt;br /&gt;
#* Pokud je heslo slabé, je nalezeno velmi rychle.&lt;br /&gt;
# Převzetí účtu&lt;br /&gt;
#* Útočník získá plnou kontrolu nad účtem a může ho dále zneužít.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 6. Malware šířený sítí ==&lt;br /&gt;
&lt;br /&gt;
; Průběh&lt;br /&gt;
# Distribuce&lt;br /&gt;
#* E-mailová příloha&lt;br /&gt;
#* stažení z webu&lt;br /&gt;
#* exploit zranitelnosti&lt;br /&gt;
# Spuštění&lt;br /&gt;
#* Uživatel otevře soubor nebo klikne na odkaz.&lt;br /&gt;
#* Malware se nainstaluje.&lt;br /&gt;
# Skrytá činnost&lt;br /&gt;
#* Běží na pozadí:&lt;br /&gt;
#** krade data&lt;br /&gt;
#** zaznamenává stisky kláves&lt;br /&gt;
#** šifruje soubory&lt;br /&gt;
# Další šíření&lt;br /&gt;
#* Může napadat další zařízení v síti.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SQL Injection ==&lt;br /&gt;
&lt;br /&gt;
; Průběh&lt;br /&gt;
# Nalezení zranitelného formuláře&lt;br /&gt;
* Například přihlašovací pole.&lt;br /&gt;
# Vložení škodlivého kódu&lt;br /&gt;
#* Útočník zadá SQL příkaz místo běžného textu.&lt;br /&gt;
# Spuštění databázového dotazu&lt;br /&gt;
#* Server příkaz vykoná, protože není správně ošetřen vstup.&lt;br /&gt;
# Získání dat&lt;br /&gt;
#* Útočník může:&lt;br /&gt;
#** zobrazit databázi&lt;br /&gt;
#** upravovat záznamy&lt;br /&gt;
#** mazat data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Společný průběh většiny útoků ==&lt;br /&gt;
&lt;br /&gt;
Typický útok má tyto fáze:&lt;br /&gt;
&lt;br /&gt;
# Průzkum (reconnaissance) – hledání zranitelností&lt;br /&gt;
# Proniknutí (exploitation) – využití slabiny&lt;br /&gt;
# Udržení přístupu – skrytá přítomnost v systému&lt;br /&gt;
# Zneužití – krádež dat nebo narušení služby&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/S%C3%AD%C5%A5ov%C3%A9_%C3%BAtoky</id>
		<title>Síťové útoky</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/S%C3%AD%C5%A5ov%C3%A9_%C3%BAtoky"/>
				<updated>2026-02-20T10:43:37Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: Vytvoření základní kostry stránky&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== DoS / DDoS útok (Denial of Service) ==&lt;br /&gt;
&lt;br /&gt;
; Cíl&lt;br /&gt;
* Způsobit nedostupnost síťového prostředku (typicky webového serveru či připojení k&amp;amp;nbsp;internetu).&lt;br /&gt;
&lt;br /&gt;
; Průběh&lt;br /&gt;
&lt;br /&gt;
# '''Příprava'''&lt;br /&gt;
#* Útočník si vytvoří nebo pronajme botnet (síť napadených počítačů).&lt;br /&gt;
#* Každé zařízení je schopné odesílat síťové požadavky.&lt;br /&gt;
&lt;br /&gt;
# '''Zahájení útoku'''&lt;br /&gt;
#* Botnet začne současně posílat obrovské množství datagramů nebo požadavků na server.&lt;br /&gt;
&lt;br /&gt;
# '''Vyčerpání zdrojů'''&lt;br /&gt;
#* Server má omezené nestíhá zpracovat všechny požadavky.&lt;br /&gt;
&lt;br /&gt;
# '''Výsledek'''&lt;br /&gt;
#* Legitimní uživatelé se nedostanou ke službě.&lt;br /&gt;
#* Server může úplně spadnout.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Phishing ==&lt;br /&gt;
&lt;br /&gt;
; Cíl&lt;br /&gt;
* Získat citlivé informace o uživateli.&lt;br /&gt;
* Typickým cílem jsou přihlašovací údaje do elektronického bankovnictví nebo čísla kreditních karet.&lt;br /&gt;
&lt;br /&gt;
; Průběh útoku&lt;br /&gt;
&lt;br /&gt;
# '''Příprava falešného prostředí'''&lt;br /&gt;
#* Útočník vytvoří kopii webu (např. banky).&lt;br /&gt;
#* Vypadá téměř identicky jako originál.&lt;br /&gt;
&lt;br /&gt;
# '''Distribuce'''&lt;br /&gt;
#* Pošle e-mail nebo SMS s odkazem.&lt;br /&gt;
#* Často používá psychologický nátlak:&lt;br /&gt;
#** „Účet bude zablokován“&lt;br /&gt;
#** „Potvrďte ihned platbu“&lt;br /&gt;
&lt;br /&gt;
# '''Získání údajů'''&lt;br /&gt;
#* Oběť zadá:&lt;br /&gt;
#** login&lt;br /&gt;
#** heslo&lt;br /&gt;
#** číslo karty&lt;br /&gt;
&lt;br /&gt;
# '''Zneužití'''&lt;br /&gt;
#* Útočník se přihlásí do skutečného účtu.&lt;br /&gt;
#* Může převést peníze nebo ukrást data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Man-in-the-Middle (MITM) ==&lt;br /&gt;
&lt;br /&gt;
; Cíl&lt;br /&gt;
* Odposlechnout údaje spojení, které měly zůstat důvěrné.&lt;br /&gt;
* Narušit šifrovanou komunikaci.&lt;br /&gt;
&lt;br /&gt;
; Průběh útoku&lt;br /&gt;
&lt;br /&gt;
# '''Získání pozice mezi komunikujícími'''&lt;br /&gt;
#* Útočník vytvoří falešnou Wi-Fi síť nebo provede ARP spoofing.&lt;br /&gt;
&lt;br /&gt;
# '''Přesměrování komunikace'''&lt;br /&gt;
#* Oběť si myslí, že komunikuje přímo se serverem.&lt;br /&gt;
#* Ve skutečnosti data prochází přes útočníka.&lt;br /&gt;
&lt;br /&gt;
# '''Odposlech / manipulace'''&lt;br /&gt;
#* Útočník může:&lt;br /&gt;
#** číst přenášená data&lt;br /&gt;
#** měnit obsah&lt;br /&gt;
#** vkládat škodlivý kód&lt;br /&gt;
&lt;br /&gt;
# '''Nenápadnost'''&lt;br /&gt;
#* Komunikace často pokračuje bez přerušení.&lt;br /&gt;
#* Oběť si útoku nevšimne.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 4. Spoofing (podvržení identity) ==&lt;br /&gt;
&lt;br /&gt;
; Průběh&lt;br /&gt;
&lt;br /&gt;
# '''Falšování identity'''&lt;br /&gt;
#* Útočník změní identifikační údaje:&lt;br /&gt;
#** IP adresu&lt;br /&gt;
#** e-mailovou hlavičku&lt;br /&gt;
#** DNS záznam&lt;br /&gt;
&lt;br /&gt;
# '''Navázání důvěry'''&lt;br /&gt;
#* Systém nebo uživatel věří, že komunikace je legitimní.&lt;br /&gt;
# '''Zneužití'''&lt;br /&gt;
#* Útočník může:&lt;br /&gt;
#** získat přístup&lt;br /&gt;
#** přesměrovat komunikaci&lt;br /&gt;
#** spustit další útok.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Brute-Force útok ==&lt;br /&gt;
&lt;br /&gt;
; Průběh&lt;br /&gt;
&lt;br /&gt;
# '''Získání cíle'''&lt;br /&gt;
#* Útočník zná přihlašovací stránku nebo účet.&lt;br /&gt;
&lt;br /&gt;
# '''Automatizované pokusy'''&lt;br /&gt;
#* Program zkouší tisíce hesel za sekundu.&lt;br /&gt;
#* Používají se slovníky běžných hesel.&lt;br /&gt;
#* Pokud je heslo slabé, je nalezeno velmi rychle.&lt;br /&gt;
&lt;br /&gt;
# '''Převzetí účtu'''&lt;br /&gt;
#* Útočník získá plnou kontrolu nad účtem a může ho dále zneužít.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 6. Malware šířený sítí ==&lt;br /&gt;
&lt;br /&gt;
; Průběh&lt;br /&gt;
&lt;br /&gt;
# '''Distribuce'''&lt;br /&gt;
#* E-mailová příloha&lt;br /&gt;
#* stažení z webu&lt;br /&gt;
#* exploit zranitelnosti&lt;br /&gt;
# '''Spuštění'''&lt;br /&gt;
#* Uživatel otevře soubor nebo klikne na odkaz.&lt;br /&gt;
#* Malware se nainstaluje.&lt;br /&gt;
# '''Skrytá činnost'''&lt;br /&gt;
#* Běží na pozadí:&lt;br /&gt;
#** krade data&lt;br /&gt;
#** zaznamenává stisky kláves&lt;br /&gt;
#** šifruje soubory&lt;br /&gt;
# '''Další šíření'''&lt;br /&gt;
#* Může napadat další zařízení v síti.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SQL Injection ==&lt;br /&gt;
&lt;br /&gt;
; Průběh&lt;br /&gt;
&lt;br /&gt;
# '''Nalezení zranitelného formuláře'''&lt;br /&gt;
* Například přihlašovací pole.&lt;br /&gt;
# '''Vložení škodlivého kódu'''&lt;br /&gt;
#* Útočník zadá SQL příkaz místo běžného textu.&lt;br /&gt;
# '''Spuštění databázového dotazu'''&lt;br /&gt;
#* Server příkaz vykoná, protože není správně ošetřen vstup.&lt;br /&gt;
&lt;br /&gt;
# '''Získání dat'''&lt;br /&gt;
#* Útočník může:&lt;br /&gt;
#** zobrazit databázi&lt;br /&gt;
#** upravovat záznamy&lt;br /&gt;
#** mazat data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Společný průběh většiny útoků ==&lt;br /&gt;
&lt;br /&gt;
Typický útok má tyto fáze:&lt;br /&gt;
&lt;br /&gt;
# '''Průzkum (reconnaissance)''' – hledání zranitelností&lt;br /&gt;
# '''Proniknutí (exploitation)''' – využití slabiny&lt;br /&gt;
# '''Udržení přístupu''' – skrytá přítomnost v systému&lt;br /&gt;
# '''Zneužití''' – krádež dat nebo narušení služby&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/Informatika</id>
		<title>Informatika</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/Informatika"/>
				<updated>2026-02-20T10:30:25Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: Osamostatnění kategorie kybernetické bezpečnosti.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]]&lt;br /&gt;
&lt;br /&gt;
== [[:Category:Historie_IT|Historie IT]] ==&lt;br /&gt;
* [[Generace počítačů]], [[Von Neumannova architektura]], &lt;br /&gt;
* [[Historie Internetu]], [[Vývoj modelů IT]]&lt;br /&gt;
* [[Historie Windows]], [[Projekt GNU a GNU/Linux]], [[Unix]], [[Svobodný software]]&lt;br /&gt;
* [[:Category:Historie_IT|A další...]]&lt;br /&gt;
&lt;br /&gt;
== [[:Category:Řízení projektů|Řízení IT projektů]] ==&lt;br /&gt;
* [[Tvorba_software]]&lt;br /&gt;
* [[Git]]: [[Git: Instalace|Instalace]], [[Git: Versioning|Správa verzí]], [[Git: Repository|Vzdálený repozitář]], [[Git: Branch|Větvení]], [[Markdown]], [[Git: FAQ|FAQ]]&lt;br /&gt;
* Další nástroje: [[Slack]], [[Toggl Track]], [[Asana]]&lt;br /&gt;
* [[:Category:Dokumentace projektu|Dokumentace]]: [[Zápis zadání]], [[Uživatelská dokumentace]]&lt;br /&gt;
; Sofwarové inženýrství&lt;br /&gt;
* [[Jazyk UML|UML]]: [[UML: Use Case|Use case]], [[UML: Class|Class]], [[UML: Sequence|Sequence]], [[UML: State|State]] diagramy&lt;br /&gt;
* UI, UX: [[Návrh UI]], [[Wireframe]], [[Persony]], [[Scénáře použití]], [[Testování UI]]&lt;br /&gt;
&lt;br /&gt;
== [[:Category:Programování|Programování]] ==&lt;br /&gt;
; Teorie&lt;br /&gt;
* [[Algoritmus]], [[Složitost algoritmu]]&lt;br /&gt;
* [[Programovací jazyky]]&lt;br /&gt;
* [[Řadící algoritmy]] &lt;br /&gt;
* [[Objektově orientované programování]]&lt;br /&gt;
* [[Návrhové vzory]]&lt;br /&gt;
* [[Vytvořte hezkou hru]]&lt;br /&gt;
; Zápis kódu:&lt;br /&gt;
* [[Řídící struktury programu]]: [[Cykly|cykly]], [[Větvení|větvení]]), [[Ošetření vstupních proměnných]], [[Podmíněný výraz]]&lt;br /&gt;
; [[Java]]: &lt;br /&gt;
* [[Slovníček pojmů pro programování]], [[Konvence|Konvence pro zápis kódu]], [[Vývoj aplikací v Javě]]&lt;br /&gt;
* [[Java: Zápis tříd|Zápis tříd]], [[Java: Datové typy|Datové typy]], [[Java: Modifikátory přístupu|Modifikátory přístupu]], [[Platnost proměnných]], [[Java: Abstraktní třídy, dědičnost a rozhraní|Rozhraní]], [[Java: Enum|Výčtový typ]]&lt;br /&gt;
* [[Java]]: [[Java| Další knihovní třídy]], [[Java: Práce s texty|Práce s texty]], [[Java: Kontejnery| Kontejnery]], [[Java: Práce s poli|Práce s poli]], [[Java: Řazení|Řazení kontejnerů]], [[Datum a čas v Javě|Datum a čas]]&lt;br /&gt;
* Java &amp;amp;mdash; spouštění: [[Java: Export balíčku JAR|Export balíčku JAR]], [[Spouštění appletů]]&lt;br /&gt;
* GUI: [[JavaFX v kostce]] .:. [[GUI v Javě|Základy grafického uživatelského rozhraní]], [[Java: Checkbox a RadioButton|Checkbox a RadioButton]], [[Dialogy_a_vyskakovací_okna]], [[Menu v Javě]], [[Tabulky v Javě]], [[Layout v Javě]], [[Myš v Javě]], [[Myš a obrázky v Javě &amp;amp;mdash; cvičení]], [[Java: 2D malování]]&lt;br /&gt;
* [[Práce se soubory v Javě]], [[Java: Textový vstup a výstup]], [[Serializace]], [[Databáze v Javě]]&lt;br /&gt;
* [[Výjimky v Javě]]&lt;br /&gt;
; [[:Category:Android|Programování pro Android]]: &lt;br /&gt;
* [[Android: Instalace SDK]], [[Android: Projekt|Projekt Android Studia]], [[Android: Tvorba GUI| Tvorba GUI]], [[Android: Ladění aplikace|Ladění aplikace]],[[Android: Spuštění aplikace| Spuštění aplikace]]&lt;br /&gt;
; [[Greenfoot]]&lt;br /&gt;
* [[Greenfoot]], [[Greenfoot: Řešení častých úloh]]&lt;br /&gt;
; [[:Category:Flutter|Flutter+Dart]]&lt;br /&gt;
* [[Dart vs. Java]], [[Dart: Užitečné tipy]]&lt;br /&gt;
* [[Flutter: Kostra aplikace]], [[Flutter: Základní widgety]], [[Flutter: ListView]]&lt;br /&gt;
* [[Flutter: Ukládání dat]]&lt;br /&gt;
; Podpůrné nástroje&lt;br /&gt;
* [[GIT]]&lt;br /&gt;
; Výměna dat&lt;br /&gt;
* [[JSON]]&lt;br /&gt;
; [[:Category:Programování|A další...]]&lt;br /&gt;
&lt;br /&gt;
== [[:Category:HTML| Webové stránky]] ==&lt;br /&gt;
* HTML: [[HTML]], [[HTML: Položky v hlavičce stránky|Hlavička stránky]], [[HTML: Struktura webové stránky|Struktura stránky]]&lt;br /&gt;
* [[CSS|Kaskádové styly (CSS)]], &lt;br /&gt;
* [[Cvičení HTML]], [[Cvičení HTML 2]], [[Cvičení HTML 3]], [[Cvičení HTML 4]], [[Cvičení HTML 5]]&lt;br /&gt;
* [[Formuláře v PHP]], [[Ošetření vstupních proměnných]], [[HTTP přesměrování v PHP|HTTP přesměrování]]&lt;br /&gt;
* [[Testování webových stránek]], [[Publikování stránky]]&lt;br /&gt;
* JavaScript: [[Skrytí mailové adresy na webu]]&lt;br /&gt;
* [[:Category:HTML|A další...]]&lt;br /&gt;
&lt;br /&gt;
== [[:Category:Principy IT| Principy IT, hardware, log. obvody]] ==&lt;br /&gt;
* [[Číselné soustavy]]&lt;br /&gt;
* [[Karnaughova mapa]], [[Booleova algebra]]&lt;br /&gt;
* [[Obvody elektrického proudu]]&lt;br /&gt;
* [[Konečný automat]], [[Regulární výrazy]]&lt;br /&gt;
* Hardware: [[HW: Skříně a chlazení| Skříně a chlazení]], [[LCD]], [[CPU]], [[Základní deska]], [[Grafická karta]]&lt;br /&gt;
* [[Pevný disk]]: [[SSD|SSD disk]], [[Klasický pevný disk|HDD]], [[Rozdělení disku]]&lt;br /&gt;
* IoT: [[ESP: Nastavení IDE]], [[ESP: Princip programování]], [[ESP: Sériový vstup a výstup]], [[ESP: GPIO]]&lt;br /&gt;
* Letní kurz IoT: [[Letní IoT: Den 1|Den 1]], [[Letní IoT: Den 2|Den 2]], [[Letní IoT: Den 3|Den 3]], [[Letní IoT: Den 4|Den 4]]&lt;br /&gt;
* Aktuální: [[Umělá inteligence]]&lt;br /&gt;
* [[:Category:Principy IT|A další...]]&lt;br /&gt;
&lt;br /&gt;
== [[:Category:Admin|Operační systémy, správa počítače]] ==&lt;br /&gt;
* [[Operační systém|Co je operační systém?]], [[Zavádění operačního systému]], [[Rozdělení disku]], [[Operační_systémy#O konkrétních OS|O konkrétních OS]]&lt;br /&gt;
* [[:Category:Příkazový řádek|Příkazový řádek (kategorie)]], [[Práce v shellu]]&lt;br /&gt;
* [[Operační systémy#Uživatelská práva|Uživatelské účty a nastavení práv]], [[Operační_systémy#Souborový systém|Souborový systém]], [[Operační_systémy#Procesy a správa paměti|Procesy a správa paměti]], [[Komunikace mezi procesy]], [[Nástroje pro práci s procesy]], [[Služby a démoni]]&lt;br /&gt;
* [[Vzdálené připojení k počítači]], [[Správa síťového rozhraní počítače|Správa sítě]],  Správa HW (ve Windows)&lt;br /&gt;
* [[Operační systémy#Uživatelská práva|Uživatelské účty a oprávnění]]: [[Uživatelský účet]] &lt;br /&gt;
* [[Skript]]&lt;br /&gt;
* [[Správa síťového rozhraní počítače|Správa sítě v CLI]]&lt;br /&gt;
* [[Bootovací USB]]&lt;br /&gt;
; GNU/Linux&lt;br /&gt;
* Souhrn: [[Debian: návod pro uživatele]]&lt;br /&gt;
* [[Základní pojmy Linuxu]], [[Distribuce GNU/Linuxu]], [[Software pro GNU/Linux]] .:. [[Instalace software v GNU/Linuxu]]&lt;br /&gt;
* [[Konfigurační soubory|Konfigurační soubory GNU/Linuxu]]&lt;br /&gt;
* [[Základy CLI]], [[Získávání nápovědy v CLI]], [[Vstup a výstup procesů, přesměrování]], [[Proměnné prostředí]], [[Vyhodnocení příkazů]]&lt;br /&gt;
* [[Správa uživatelských účtů v Linuxu]], [[Nastavování práv|Nastavování oprávnění]], [[Speciální bity]]&lt;br /&gt;
* [[Plánování úloh]], [[Sdílení souborů pomocí Samby]], [[Samba - konfigurace]]&lt;br /&gt;
* [[Významné složky GNU/Linuxu]], [[Významné adresáře Linuxu]]&lt;br /&gt;
; Windows&lt;br /&gt;
* [[Historie Windows]], [[Verze a edice Windows]]&lt;br /&gt;
* [[Významné složky Windows]], [[Konzole MMC]]&lt;br /&gt;
* [[Sdílení souborů a tiskáren]]&lt;br /&gt;
* [[Správa uživatelských účtů ve Windows]], [[Uživatelské účty ve Windows — úkoly]]&lt;br /&gt;
* Powershell: [[Powershell: Základy]], [[Powershell: Nápověda]], [[Powershell: Cmdlets]], [[Powershell: Pipelining]]&lt;br /&gt;
* Active Directory: [[Základní pojmy Active Directory]], [[Typy účtů Active Directory]]&lt;br /&gt;
* [[:Category:Admin|A další: správa počítače ...]]&lt;br /&gt;
* [[Operační systémy|A další: operační systémy ...]]&lt;br /&gt;
&lt;br /&gt;
== [[Virtualizace počítače]] ==&lt;br /&gt;
* [[Virtualizace]]&lt;br /&gt;
* [[Nástroje pro virtualizaci]]&lt;br /&gt;
* VirtualBox: [[VirtualBox — základy ovládání]], [[Virtualizace_ukoly]]&lt;br /&gt;
&lt;br /&gt;
* [[Virtualizace počítače|A další...]]&lt;br /&gt;
&lt;br /&gt;
== [[:Category:Sítě|Sítě a přenos dat]] ==&lt;br /&gt;
* Teorie informace: [[Základní pojmy teorie informace]], [[Kódování-šifrování-hashování]], [[Jednotky množství informace]], [[Měření množství informace]]&lt;br /&gt;
* [[:Category:Přenos dat|Přenos dat]]: [[Varianty přenosu dat]], [[Analogový a digitální přenos]], [[Digitalizace analogového signálu]], [[Zabezpečení proti chybám]]&lt;br /&gt;
* [[Správa síťového rozhraní počítače|Správa sítě v CLI]], [[Sdílení souborů a tiskáren]]&lt;br /&gt;
* [[:Category:Internet|Internet]]: [[Netiketa]], [[Cloud|Cloud computing]], [[Topologie Internetu|Architektura Internetu]], [[Připojení k&amp;amp;nbsp;Internetu]], [[Stažení webové stránky]]&lt;br /&gt;
* Telefonie: [[IP telefonie]], [[PSTN]], [[Mobilní telefonní síť]]&lt;br /&gt;
* Adresace a směrování: [[Adresace| Adresace IP]], [[IP adresa a maska|Výpočty s IP adresou a maskou]], [[Speciální typy IP adres]], [[Návrh IP adres| Návrh IP adres: příklady]] .:. [[Směrování]], [[Směrovací protokoly]], [[Protokol RIP]]&lt;br /&gt;
* Princip komunikace: [[Model ISO/OSI]], [[Úkoly vrstev ISO/OSI]], [[Datagramová komunikace]], [[Předávání dat]], [[Trendy počítačových sítí]]&lt;br /&gt;
* [[Strukturovaná kabeláž]], [[Konfigurace bezdrátového routeru]], [[Standardy WLAN]], [[Média počítačových sítí]]&lt;br /&gt;
* Transportní vrstva: [[TCP a UDP]], [[Navazování spojení]], [[Socket a číslo portu]]&lt;br /&gt;
* Šifrování a podpis: [[Princip šifrování]], [[Hashovací funkce]], [[Elektronický podpis]], [[Šifrování prakticky]], [[Certifikát elektronického podpisu]]&lt;br /&gt;
* Relační a prezentační vrstva: [[Úkoly relační vrstvy]], [[Komprese]], [[Konverze formátů při přenosu]]&lt;br /&gt;
* Model ISO/OSI a&amp;amp;nbsp;úkoly vrstev: [[Úkoly vrstev ISO/OSI]], [[Úkoly fyzické vrstvy ISO/OSI|fyzická]], [[Úkoly linkové vrstvy ISO/OSI|linková]], [[Úkoly síťové vrstvy ISO/OSI|síťová]], [[Úkoly transportní vrstvy ISO/OSI|transportní]], [[Úkoly relační vrstvy|relační]], [[Úkoly prezentační vrstvy|prezentační]], [[Protokoly aplikační vrstvy|aplikační]].&lt;br /&gt;
* Konfigurace routeru a&amp;amp;nbsp;propojení sítí: [[Propojování sítí: Časté chyby|Časté chyby]], [[Propojování sítí: Troubleshooting|Troubleshooting]]&lt;br /&gt;
* [[:Category:Sítě|A další...]]&lt;br /&gt;
&lt;br /&gt;
== [[:Category:Bezpečnost|Kybernetická bezpečnost]] ==&lt;br /&gt;
* [[Rizika při práci s daty]], &lt;br /&gt;
* [[Malware]], [[Ochrana proti malware]],...&lt;br /&gt;
* [[Síťové útoky]]&lt;br /&gt;
* [[Zálohování]]&lt;br /&gt;
* [[Úkoly k zabezpečení počítače]]&lt;br /&gt;
&lt;br /&gt;
== Aplikační software, [[Kancelářský software]] ==&lt;br /&gt;
* [[Licence na SW]]&lt;br /&gt;
; [[Kancelářský software]]&lt;br /&gt;
* Zpracování textů, [[Tabulkový procesor]], [[Prezentace]], [[Nástroje pro tvorbu prezentací]]&lt;br /&gt;
* [[Rejstřík]]&lt;br /&gt;
* Příklady z hodin, [[Šikovné vzorce pro Calc]]&lt;br /&gt;
* [[Kancelářský software|A další...]]&lt;br /&gt;
&lt;br /&gt;
== [[:Category:Grafika a 3D tisk|Grafika a 3D tisk]] ==&lt;br /&gt;
* [[Modelování pro 3D tisk]], [[3D tisk]]&lt;br /&gt;
* [[:Category:Grafika a 3D tisk|A další...]]&lt;br /&gt;
&lt;br /&gt;
== Související ==&lt;br /&gt;
* [[Ergonomie pracoviště]]&lt;br /&gt;
* [[Blockchain a kryptoměny]]&lt;br /&gt;
* [[Profesní prezentace]]&lt;br /&gt;
&lt;br /&gt;
== Zábava, různé ==&lt;br /&gt;
* [[Kalendář hackera]] ([http://stallman.org/articles/on-hacking.html Kdo je hacker? By RMS in english])&lt;br /&gt;
* [[Život s programátorem ;)]]&lt;br /&gt;
&lt;br /&gt;
== Postupně zrušit ==&lt;br /&gt;
* [[:Category:Zrušit|Stránky ke zrušení]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- --------------------------------------------------------------------------------------------------------------&lt;br /&gt;
------------------Starší stručnější verze, která byla vložena na hlavní stránce -----------------------------------&lt;br /&gt;
== Informatika ==&lt;br /&gt;
&lt;br /&gt;
* Historie počítačů&lt;br /&gt;
** [[Generace počítačů]]&lt;br /&gt;
** [[Von Neumannova architektura]]&lt;br /&gt;
** [[Historie Internetu]]&lt;br /&gt;
** [[Historie Windows]]&lt;br /&gt;
&lt;br /&gt;
* [[:Category:Programování|Programování]]&lt;br /&gt;
** [[Řídící struktury programu]]&lt;br /&gt;
** [[Konvence|Dohodnuté konvence pro psaní kódu]]&lt;br /&gt;
&lt;br /&gt;
* [[:Category:OSY|Operační systémy]]&lt;br /&gt;
&lt;br /&gt;
* [[:Category:Admin|Správa počítače]]&lt;br /&gt;
&lt;br /&gt;
* [[:Category:Sítě|Sítě]]&lt;br /&gt;
&lt;br /&gt;
* [[:Category:Office|SW pro kancelář]]&lt;br /&gt;
** [[Prezentace]]&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/Kategorie:Bezpe%C4%8Dnost</id>
		<title>Kategorie:Bezpečnost</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/Kategorie:Bezpe%C4%8Dnost"/>
				<updated>2026-02-20T10:29:06Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: Vyřazen odkaz na neexistující stránku Zabezpečení počítače.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]]&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/Ochrana_proti_malware</id>
		<title>Ochrana proti malware</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/Ochrana_proti_malware"/>
				<updated>2026-02-18T11:02:02Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: /* Firewall */ Doplnění a upřesnění rozdělení firewallů podle vrstvy, na které pracují.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]][[Category:CRI]][[Category:Bezpečnost]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Způsoby ochrany ==&lt;br /&gt;
&lt;br /&gt;
=== 1. Opatrnost ===&lt;br /&gt;
* Obezřetnost v prostředí Internetu (e-mail, web, Facebook,...).&lt;br /&gt;
* Nezadávat své osobní údaje (e-mailovou adresu, čísla účtu, už vůbec ne hesla apod.), není-li to nezbytné.&lt;br /&gt;
* Být opatrný v tom, jaké stránky navštěvuji.&lt;br /&gt;
* Prověřit si pravost došlé zprávy, než kliknu na odkaz v ní.&lt;br /&gt;
* Nestahovat a nespouštět nelegální software.&lt;br /&gt;
* Nejsme-li si jistí korektností stránky či programu, raději se jí/mu vyhneme.&lt;br /&gt;
&lt;br /&gt;
=== 2. Technické zabezpečení ===&lt;br /&gt;
; Nezbytný základ:&lt;br /&gt;
* Trvale spuštěný antivirový program (i pro mobilní zařízení!)&lt;br /&gt;
* Trvale spuštěný firewall.&lt;br /&gt;
* Automatická instalace aktualizací (minimálně bezpečnostní aktualizace).&lt;br /&gt;
&lt;br /&gt;
; Lze i další:&lt;br /&gt;
* Antispyware.&lt;br /&gt;
** Programy svým principem a funkcí velmi podobné antivirovým programům, ale specializující se na spyware.&lt;br /&gt;
** Příklady: SpyBot, AdAware&lt;br /&gt;
* Ochrana proti modifikacím DNS záznamů (pharmingu)&lt;br /&gt;
** Existují doplňky do prohlížečů, které kontrolují IP adresy &lt;br /&gt;
** Například: [http://toolbar.netcraft.com/ toolbar.netcraft.com] &amp;amp;mdash; neověřeno!&lt;br /&gt;
&lt;br /&gt;
=== 3. Zálohování dat ===&lt;br /&gt;
* Jako obrana proti útoku ransomware šifrujícího data.&lt;br /&gt;
&lt;br /&gt;
=== 4. Prevence proti spamu ===&lt;br /&gt;
* Nepublikujte svoji adresu veřejně &amp;amp;mdash; nelze u&amp;amp;nbsp;pracovních adres, kde je komunikace veřejně součástí práce.&lt;br /&gt;
** Pokud musí být adresa vystavena na webu, [[Skrytí mailové adresy na webu|skryjte ji před roboty]].&lt;br /&gt;
* Neposílejte řetězové maily!&lt;br /&gt;
* Pokud musíte posílat zprávy více adresátům, VŽDY adresy pište do kolonky Skrytá kopie!&lt;br /&gt;
** Příjemce tak uvidí jen vaši adresu (odesilatele) a svoji, nikoli adresy ostatních adresátů.&lt;br /&gt;
** Je neslušné vystavovat adresy všech příjemců všem příjemcům, navíc pokud má některý příjemce prolomené zabezpečení schránky, útočník se nedozví adresy ostatních adresátů.&lt;br /&gt;
* Měňte si pravidelně heslo k mailové schránce!&lt;br /&gt;
* Neregistrujte svůj mail na všelikých stránkách!&lt;br /&gt;
** Mějte speciální adresu pro registraci na e-shopech a jiných méně důvěryhodných stránkách.&lt;br /&gt;
** Mějte jinou adresu pro pracovní a jinou pro osobní komunikaci.&lt;br /&gt;
* Zákaz automatických náhledů mailu v&amp;amp;nbsp;klientech elektronické pošty a&amp;amp;nbsp;zákaz automatického zobrazování obrázků v poštovních zprávách&lt;br /&gt;
** Čteme jen hlavičky zpráv (subject/předmět), otevíráme jen to, co je vpořádku.&lt;br /&gt;
** V nevyžádaném mailu může být vložen miniaturní neviditelný obrázek. Prohlížeč při zobrazení mailu stáhne obrázek ze serveru útočníka a&amp;amp;nbsp;útočník tak ví, že spam došel příjemci a e-mailová adresa je funkční (vlastně slouží jako potvrzení o přečtení nevyžádané zprávy). Navíc útočník ví i&amp;amp;nbsp;IP adresu a rychlost přečtení mailu.&lt;br /&gt;
** Zákaz zobrazování obrázků se projeví chybějícími obrázky v mailu, jednotlivě lze zobrazování ručně povolit ve zprávách, u&amp;amp;nbsp;kterých jsem si jisti, že je bezpečná.&lt;br /&gt;
** Pokud čtete zprávy přes webové rozhraní a&amp;amp;nbsp;zobrazování obrázků nelze vypnout, zvažte používání mailového klienta (třeba Thunderbird).&lt;br /&gt;
* Nemějte mailovou schránku na špatně zabezpečených mailových serverech!&lt;br /&gt;
** Třeba jeden z&amp;amp;nbsp;nejpopulárnějších českých mailových serverů je kromě jiných neduhů nechvalně známý tím, že z&amp;amp;nbsp;jeho adres běžně chodí spam...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Antivirové programy ==&lt;br /&gt;
&lt;br /&gt;
=== Jak hledají malware? ===&lt;br /&gt;
* Databáze signatur&lt;br /&gt;
** hledá v programech na disku posloupnosti instrukcí, o kterých se ví, že je obsahuje jen virus&lt;br /&gt;
** závislé na aktuálnosti databáze (co není v databázi, to nenajdeme)&lt;br /&gt;
** přesné, rychlé&lt;br /&gt;
** malé riziko falešného hlášení&lt;br /&gt;
* Heuristická analýza&lt;br /&gt;
** analyzuje kód programu a hledá potenciálně podezdřelé instrukce&lt;br /&gt;
** riziko falešného hlášení &amp;amp;mdash; zdravý program může být občas prohlášen za virus&lt;br /&gt;
** výrazně náročnější na čas procesoru&lt;br /&gt;
** najde i škodlivé programy, které jsou úplně nové&lt;br /&gt;
&lt;br /&gt;
=== Kdy se spouští test ===&lt;br /&gt;
* Rezidentní ochrana&lt;br /&gt;
** Antivir běží stále na pozadí.&lt;br /&gt;
** Zpomaluje počítač (významné u starších počítačů)&lt;br /&gt;
** Kdykoli otevíráme soubor, je obsah souboru nejprve zkontrolován na přítomnost viru.&lt;br /&gt;
* Ruční spuštění testu&lt;br /&gt;
&lt;br /&gt;
=== Příklady antivirů ===&lt;br /&gt;
; Svobodné antiviry (zdarma pro libovolné použití + dostupný zdrojový kód)&lt;br /&gt;
*[http://www.clamav.net/lang/en/ ClamAV/Immunet]&lt;br /&gt;
** Licence GPL.&lt;br /&gt;
** Verze pro Linux i Windows (Immunet).&lt;br /&gt;
; Antiviry zdarma&lt;br /&gt;
*[http://www.comodo.com/ Comodo]&lt;br /&gt;
**Internet Security = Antivirus + Firewall&lt;br /&gt;
**placené verze i verze zdarma (není uživatelská podpora)&lt;br /&gt;
**přesměrovává DNS server (obrana proti pharmingu)&lt;br /&gt;
*[http://www.free-av.com/ Avira]&lt;br /&gt;
** Platformy Windows, Mac, Android a iOS &lt;br /&gt;
** Existuje placená verze&lt;br /&gt;
; Antiviry zdarma pouze pro nekomerční použití&lt;br /&gt;
* AVG&lt;br /&gt;
** Existuje placená i „free“ verze v angličtině (česká ne).&lt;br /&gt;
** AVG nabízí i anti-spyware, tam česká „free“ verze, ale nemá rezidentní štít.&lt;br /&gt;
* Avast&lt;br /&gt;
** zdarma pro nekomerční použití, ale je třeba jednou za rok registrovat.&lt;br /&gt;
; Placené antiviry&lt;br /&gt;
* Cena obvykle cca 1000&amp;amp;ndash;1500 Kč/rok&lt;br /&gt;
* Obvykle výborně hodnocené (spolehlivost detekce, spektrum služeb (i firewall atd.), rychlost testování,...)&lt;br /&gt;
* Uživatelská podpora.&lt;br /&gt;
* Často další služby: zálohování dat on-line atd.&lt;br /&gt;
* NOD32&lt;br /&gt;
* Kasperski Antivirus&lt;br /&gt;
* [http://www.symantec.com/cs/cz/ Produkty řady Norton (Symantec).]&lt;br /&gt;
&lt;br /&gt;
; Porovnání antivirů&lt;br /&gt;
* [http://www.av-comparatives.org av-comparatives.org]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Firewall ==&lt;br /&gt;
* Kontroluje tok dat mezi počítačem/počítačovou sítí a okolním světem (okolními sítěmi).&lt;br /&gt;
* Nerozlišuje škodlivost aplikace, pouze řeší, jestli tato aplikace má povoleno komunikovat do sítě pomocí daného síťového protokolu.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Priklad&amp;quot;&amp;gt;Příkad:&lt;br /&gt;
* Smí program VLC komunikovat prostřednictvím portu 80 (protokol HTTP)?&lt;br /&gt;
* Smí FreeCommander komunikovat prostřednictvím portu 21 (protokol FTP)?&lt;br /&gt;
* Máme povolit spojení z cizího počítače na port 22 (protokol SSH) našeho počítače?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Rozdělení podle toho, kde běží&lt;br /&gt;
* Osobní firewall &amp;amp;mdash; běží v počítači, který chrání.&lt;br /&gt;
* Síťový firewall&lt;br /&gt;
** Chrání přístup do celé sítě, veškerý provoz do sítě musí jít přes něj.&lt;br /&gt;
** Běží na routeru nebo se jedná o samostatné zařízení, přes které prochází veškerý provoz z/do sítě.&lt;br /&gt;
&lt;br /&gt;
; Rozdělení podle vrstvy, na které pracují&lt;br /&gt;
Na nižších vrstvách architektury ISO/OSI rychlejší, ale neumí tak dobře rozlišit datové toky.&lt;br /&gt;
&lt;br /&gt;
''Paketový filtr'' (síťová vrstva)&lt;br /&gt;
* běží na router-u&lt;br /&gt;
* komunikace probíhá přímo mezi chráněnou stanicí a vnějším partnerem,&lt;br /&gt;
* může být vybráno několik stanic ''bastion hosts'', které mohou komunikovat (nebo dále zprostředkovat komunikaci) přímo. (''DMZ &amp;amp;mdash; demilitarized zone'' &amp;amp;mdash; mezi firewallem a těmito stanicemi.)&lt;br /&gt;
* povolení nebo zákaz podle kombinace IP adresy a portu.&lt;br /&gt;
&lt;br /&gt;
''Aplikační brána'' (aplikační vrstva)&lt;br /&gt;
* někdy také nazýváno „proxy“&lt;br /&gt;
* komunikace probíhá mezi vnějším partnerem a firewallem, ten případně komunikuje s chráněnými stroji,&lt;br /&gt;
* chráněné stanice jsou z vnější sítě nedostupné (např. mají privátní IP adresy),&lt;br /&gt;
* aplikační brána musí rozumět danému síťovému protokolu.&lt;br /&gt;
&lt;br /&gt;
''Stavový paketový filtr''&lt;br /&gt;
* Při filtrování provozu zohledňuje předchozí provoz.&lt;br /&gt;
* Například odpověď je vpuštěna pouze pokud jsme předtím zaslali dotaz.&lt;br /&gt;
&lt;br /&gt;
; Vstupní × výstupní provoz (in- nebo out-)&lt;br /&gt;
* Zabezpečení sítě proti útoku napadení z okolí&lt;br /&gt;
** Snažší k zajištění. &lt;br /&gt;
** Útočník vždy musí projít přes firewall, chce-li síť napadnout.&lt;br /&gt;
&lt;br /&gt;
* Zabezpečení proti úniku dat&lt;br /&gt;
** Například v důsledku napadení malwarem, který odesílá citlivá data.&lt;br /&gt;
** Je složitější rozlišit korektní provoz od škodlivého (používají stejné programy).&lt;br /&gt;
** Nebezpečí zneužití klientů protokolů HTTP, POP3, IRC, které standardně podporujeme.&lt;br /&gt;
&lt;br /&gt;
* Vždy existuje riziko úniku dat jinými cestami:&lt;br /&gt;
** paměťová média odnesená zaměstnanci,&lt;br /&gt;
** modemové spojení,&lt;br /&gt;
** telefonní hovory: social engineering.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; Strategie zabezepečení&lt;br /&gt;
* „Prevence“&lt;br /&gt;
** ''„Zakážeme vše a povolíme jen ten provoz a ty programy, které jsou určitě v pořádku.“''&lt;br /&gt;
** Jednodušší, častější.&lt;br /&gt;
** Vyjmenujeme programy či služby, které povolíme, zbytek zůstane zakázán.&lt;br /&gt;
** Může dojít k blokování toků, které jsou v pořádku, ale nebyly uvedeny mezi povolenými.&lt;br /&gt;
&lt;br /&gt;
* „Presumpce neviny“&lt;br /&gt;
** ''„Povolíme vše a zakážeme provoz, který je určitě špatně.“''&lt;br /&gt;
** Problém s novými programy, se kterými se nepočítalo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; Zdroje&lt;br /&gt;
*interhack.net &amp;gt; Pubs &amp;gt; Fwfaq &amp;lt;http://www.interhack.net/pubs/fwfaq/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Příklady&lt;br /&gt;
* Vestavěný firewall operačního systému&lt;br /&gt;
* Comodo Firewall &amp;amp;mdash; zdarma&lt;br /&gt;
** povolování komunikace pro jednotlivé aplikace&lt;br /&gt;
* Firewally zdarma ke stažení: [http://www.thefreecountry.com/security/firewalls.shtml TheFreeCountry.com &amp;amp;gt; Security &amp;amp;gt; Firewalls]&lt;br /&gt;
&lt;br /&gt;
== Související stránky a zdroje ==&lt;br /&gt;
* [[Malware]], [[Skrytí mailové adresy na webu]]&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/Spr%C3%A1va_u%C5%BEivatelsk%C3%BDch_%C3%BA%C4%8Dt%C5%AF_v_Linuxu</id>
		<title>Správa uživatelských účtů v Linuxu</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/Spr%C3%A1va_u%C5%BEivatelsk%C3%BDch_%C3%BA%C4%8Dt%C5%AF_v_Linuxu"/>
				<updated>2026-02-17T10:38:34Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: /* Zjištění informací o uživateli */ Lépe okomentován příkaz id.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]][[Category:OSY]][[Category:Linux]][[Category:Uživatelské účty]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Poznamka&amp;quot;&amp;gt;Všechny probírané akce lze samozřejmě provést i v grafickém rozhraní. Přesné provedení se ale liší.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Co se máte naučit ==&lt;br /&gt;
* Vytvořit uživatelský účet v příkazovém řádku GNU/Linuxu&lt;br /&gt;
* Vytvořit skupinu uživatelů a &lt;br /&gt;
* Znát strukturu konfiguračních souborů &amp;lt;tt&amp;gt;/etc/passwd&amp;lt;/tt&amp;gt; a &amp;lt;tt&amp;gt;/etc/group&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Vytvoření uživatelského účtu == &lt;br /&gt;
&amp;lt;div class=&amp;quot;Upozorneni&amp;quot;&amp;gt;Tyto příkazy smí provádět pouze správce počítače!&amp;lt;/div&amp;gt;&lt;br /&gt;
=== Příkaz adduser ===&lt;br /&gt;
* intuitivní, „user-friendly“ — vhodný pro ruční vytváření uživatelských účtů&lt;br /&gt;
** zeptá se na všechny potřebné údaje&lt;br /&gt;
** volá příkazy &amp;lt;code&amp;gt;useradd&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;usermod&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;groupadd&amp;lt;/code&amp;gt; a další&lt;br /&gt;
* bývá v&amp;amp;nbsp;distribucích založených na Debianu, v&amp;amp;nbsp;ostatních distribucích to bývá jen alias pro příkaz &amp;lt;code&amp;gt;useradd&amp;lt;/code&amp;gt;&lt;br /&gt;
 adduser karel&lt;br /&gt;
&lt;br /&gt;
=== Příkaz useradd ===&lt;br /&gt;
* Na rozdíl od &amp;lt;code&amp;gt;adduser&amp;lt;/code&amp;gt; je třeba pomocí parametrů nastavit parametry uživatelského účtu.&lt;br /&gt;
*Parametry:&lt;br /&gt;
**-m&lt;br /&gt;
***vytvoří uživatelskou složku v /home&lt;br /&gt;
**-g&lt;br /&gt;
***přiřadí uživateli primární skupinu&lt;br /&gt;
**-N&lt;br /&gt;
***Nevytvoří zároveň skupinu se stejným jménem (standardně se vytváří)&lt;br /&gt;
**-s&lt;br /&gt;
***nastaví default-ní shell&lt;br /&gt;
**-p&lt;br /&gt;
***nastaví úvodní heslo&lt;br /&gt;
*** musíme ale zadat heslo zašifrované funkcí crypt()&lt;br /&gt;
*** praktičtější je nastavit heslo dodatečně příkazem &amp;lt;code&amp;gt;passwd&amp;lt;/code&amp;gt; nebo použít &amp;lt;code&amp;gt;adduser&amp;lt;/code&amp;gt;&lt;br /&gt;
 useradd -m -s /bin/bash bittnerova_pavlina&amp;lt;br /&amp;gt;passwd bittnerova_pavlina&lt;br /&gt;
&lt;br /&gt;
=== Příkaz &amp;lt;code&amp;gt;newusers&amp;lt;/code&amp;gt; ===&lt;br /&gt;
* Příkazu předáme soubor s účty a hesly:&lt;br /&gt;
 newusers seznam_uctu.txt&lt;br /&gt;
* Bohužel musíme zadávat ručně i UID.&lt;br /&gt;
* Obsah souboru &amp;lt;tt&amp;gt;seznam_uctu.txt&amp;lt;/tt&amp;gt; může vypadat například takto:&lt;br /&gt;
 franta:password:1001:1001:Vedouci:/home/franta:/bin/bash&lt;br /&gt;
 josef:password:1002:1002:Manager:/home/josef:/bin/bash&lt;br /&gt;
 alice:password:1050:uctari:Ucetni:/home/alice:/bin/bash&lt;br /&gt;
* Bezpečnostní doporučení:&lt;br /&gt;
** Soubor vytvořte v domovském adresáři uživatele &amp;lt;tt&amp;gt;root&amp;lt;/tt&amp;gt;,&lt;br /&gt;
** nastavte práva na &amp;lt;code&amp;gt;0600&amp;lt;/code&amp;gt;,&lt;br /&gt;
** soubor po použití smažte.&lt;br /&gt;
&lt;br /&gt;
Více viz: [http://www.cyberciti.biz/tips/linux-how-to-create-multiple-users-accounts-in-batch.html cyberciti.biz &amp;gt; Tips &amp;gt; Linux-how-to-create-multiple-users-accounts-in-batch] nebo &amp;lt;code&amp;gt;man newusers&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Změna vlastností a zrušení uživatele ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Upozorneni&amp;quot;&amp;gt;Tyto příkazy smí provádět pouze správce počítače!&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Příkaz usermod ===&lt;br /&gt;
* Například zařazení uživatele do skupiny: &lt;br /&gt;
 usermod -aG ''skupina'' ''uzivatel''&lt;br /&gt;
&amp;lt;div class=&amp;quot;Varovani&amp;quot;&amp;gt;POZOR! Změna se projeví až po dalším přihlášení! Nebo ji můžete aktivovat příkazem:&lt;br /&gt;
 newgrp ''skupina''&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;Priklad&amp;quot;&amp;gt;&lt;br /&gt;
; Příklad: &lt;br /&gt;
Povolte uživateli volat příkaz sudo (nastavte uživateli oprávnění správce)&lt;br /&gt;
* Využívá toho, že všichni správci jsou zařazeni v&amp;amp;nbsp;specifické skupině. Název skupiny se liší v&amp;amp;nbsp;různých distribucích, příkladem může být &amp;lt;tt&amp;gt;sudo&amp;lt;/tt&amp;gt; (Debian) či &amp;lt;tt&amp;gt;wheel&amp;lt;/tt&amp;gt; (Red Hat).&lt;br /&gt;
* Viz také [[Oprávnění pro přístup k souborům]].&lt;br /&gt;
 usermod -a -G sudo ''novyadmin''&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Příkaz chage ===&lt;br /&gt;
* Omezení platnosti uživatelského účtu a&amp;amp;nbsp;nutnost změnit heslo.&lt;br /&gt;
&amp;lt;div class=&amp;quot;Priklad&amp;quot;&amp;gt;&lt;br /&gt;
; Příklad:&lt;br /&gt;
Uživatel &amp;lt;code&amp;gt;karel&amp;lt;/code&amp;gt; si vždy po 60 dnech musí změnit heslo:&lt;br /&gt;
 chage -M 60 karel&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Příkaz userdel ===&lt;br /&gt;
* Smaže uživatelský účet.&lt;br /&gt;
&lt;br /&gt;
== Zjištění informací o uživateli ==&lt;br /&gt;
&lt;br /&gt;
Příkaz &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;&lt;br /&gt;
* Vypíše informace o uživatelském účtu či skupině.&lt;br /&gt;
* Standardně musíme zadat UID resp. GID. &lt;br /&gt;
* Přepínač &amp;lt;code&amp;gt;-n&amp;lt;/code&amp;gt; umožní používat název uživatelského účtu/skupiny místo UID/GID.&lt;br /&gt;
* Další přepínače zjišťují doplňující informace.&lt;br /&gt;
* Př: Do kterých skupin uživatel patří?&lt;br /&gt;
 id -Gn student&lt;br /&gt;
* Neuvedeme-li uživatele/skupinu, zobrazí se informace o aktuálně přihlášeném uživateli.&lt;br /&gt;
&lt;br /&gt;
Alternativy:&lt;br /&gt;
 echo $USER&lt;br /&gt;
 whoami&lt;br /&gt;
 who&lt;br /&gt;
&lt;br /&gt;
== Vytvoření skupiny, přiřazení uživatelů do skupiny ==&lt;br /&gt;
* Uživatel může být ve více skupinách, ve skupině může být více uživatelů.&lt;br /&gt;
* Jedna skupina je ale pro uživatele „primární“, obvykle má název stejný jako je jeho uživatelské jméno.&lt;br /&gt;
&lt;br /&gt;
=== Vytvoření, zrušení skupiny ===&lt;br /&gt;
* &amp;lt;code&amp;gt;groupadd&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;groupdel&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Přiřazení uživatelů ===&lt;br /&gt;
* &amp;lt;code&amp;gt;groupmod&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;usermod&amp;lt;/code&amp;gt;: viz [[Správa_uživatelských_účtů#Příkaz_usermod|výše]].&lt;br /&gt;
&lt;br /&gt;
=== Výpis uživatelů ve skupině ===&lt;br /&gt;
* Seznam uživatelů je v souboru &amp;lt;tt&amp;gt;/etc/group&amp;lt;/tt&amp;gt;. &lt;br /&gt;
* Viz také [[Konfigurační soubory GNU/Linuxu - Uživatelské účty]].&lt;br /&gt;
 grep ^''skupina'': /etc/group&lt;br /&gt;
&amp;lt;div class=&amp;quot;Priklad&amp;quot;&amp;gt;&lt;br /&gt;
Pro zajímavost: &lt;br /&gt;
* Co vlastně příkaz &amp;lt;code&amp;gt;grep ^''skupina'': /etc/group&amp;lt;/code&amp;gt; přesně dělá? &lt;br /&gt;
* Šel by upravit, aby vypsal JEN jména uživatelů ve skupině??? ;)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Konfigurační soubory ==&lt;br /&gt;
&lt;br /&gt;
Informace o uživatelských účtech jsou uloženy v [[Konfigurační_soubory|konfiguračních souborech]]. Konkrétně se jedná o soubory:&lt;br /&gt;
 /etc/passwd&lt;br /&gt;
 /etc/group&lt;br /&gt;
 /etc/shadow&lt;br /&gt;
 /etc/sudoers&lt;br /&gt;
Více viz [[Konfigurační soubory GNU/Linuxu - Uživatelské účty]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Zjištění informací o uživatelích a skupinách ==&lt;br /&gt;
&lt;br /&gt;
; Poslední přihlášení&lt;br /&gt;
 last&lt;br /&gt;
* Poslední přihlášení&lt;br /&gt;
 lastb&lt;br /&gt;
* Poslední nezdařené přihlášení&lt;br /&gt;
&lt;br /&gt;
; Informace o uživateli&lt;br /&gt;
Tyto informace lze získat i z&amp;amp;nbsp;konfiguračních souborů.&lt;br /&gt;
 id&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Úkoly ==&lt;br /&gt;
* Jak zjistit uživatelská jména uživatelů, kteří mají účet na tomto počítači?&lt;br /&gt;
* Co udělá příkaz: &lt;br /&gt;
 cat /etc/passwd | cut -d : -f 1 | sort&lt;br /&gt;
* Vytvořte na svém počítači uživatelské účty pro sebe a svého kolegu. Nastavte účtům heslo.&lt;br /&gt;
* Vytvořte uživatelskou skupinu &amp;lt;tt&amp;gt;treti_b&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Zařaďte vytvořené účty do skupiny &amp;lt;tt&amp;gt;treti_b&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Zkontrolujte v konfiguračních souborech, že vytváření proběhlo v pořádku.&lt;br /&gt;
* Vyzkoušejte připojení ze sousedního počítače (řekněte kolegovi jeho heslo a login a nechte ho, ať se přihlásí ze sousedního počítače). (Viz také [[Vzdálené připojení k počítači]].)&lt;br /&gt;
* Jak se liší „administrátorský“ účet od běžného?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Zdroje ==&lt;br /&gt;
* [http://www.abclinuxu.cz/clanky/navody/unixove-nastroje-5-opravneni-chmod-chown-chgrp AbcLinuxu.cz &amp;gt; Unixové nástroje, oprávnění, chmod-chown-chgrp]&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/Speci%C3%A1ln%C3%AD_bity</id>
		<title>Speciální bity</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/Speci%C3%A1ln%C3%AD_bity"/>
				<updated>2026-02-17T10:34:15Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: Přidány příklady výpisu ls -l pro sticky a pro SGID bit.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]][[Category:OSY]][[Category:Uživatelské účty]][[Category:Linux]]&lt;br /&gt;
&lt;br /&gt;
== Úvod ==&lt;br /&gt;
* V systému Unix a systémech z něj vycházejících (Linux,...) se tradičně oprávnění pro přístup k souborům ukládala pomocí devíti bitů viz [[Nastavování práv]].&lt;br /&gt;
* Dále se ovšem ukládaly a ukládají další tři speciální bity, které upravují chování programů a složek v některých specifických případech.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Set UID (SUID) ==&lt;br /&gt;
* Používá se pro spustitelné soubory (programy).&lt;br /&gt;
* Program je spouštěn s právy vlastníka programu (jako by ho spustil vlastník).&lt;br /&gt;
* (Standardně se program spustí s právy toho, kdo program spustil.)&lt;br /&gt;
; Nastavení SUID&lt;br /&gt;
 chmod u+s program&lt;br /&gt;
; Ověření SUID&lt;br /&gt;
* Ve výpisu &amp;lt;code&amp;gt;ls -l&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Místo písmene &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; ve výpisu práv vlastníka se objeví:&lt;br /&gt;
** &amp;lt;tt&amp;gt;s&amp;lt;/tt&amp;gt;... SUID + nastavené právo spouštět (&amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt;)&lt;br /&gt;
** &amp;lt;tt&amp;gt;S&amp;lt;/tt&amp;gt;... SUID bez práva spouštět&lt;br /&gt;
* Například:&lt;br /&gt;
 ''$'' ls -l `which passwd`&lt;br /&gt;
 ''-rw&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;s&amp;lt;/span&amp;gt;r-xr-x 1 root root 45396 kvě 25  2012 /usr/bin/passwd''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Priklad&amp;quot;&amp;gt;Příklad použití: &lt;br /&gt;
Například program &amp;lt;tt&amp;gt;/usr/bin/passwd&amp;lt;/tt&amp;gt; (příkaz &amp;lt;tt&amp;gt;passwd&amp;lt;/tt&amp;gt;) &amp;amp;mdash; pro nastavení hesla potřebuje právo zapisovat do souboru &amp;lt;tt&amp;gt;/etc/shadow&amp;lt;/tt&amp;gt;, smí ale zapisovat jen hesla aktuálního uživatele!&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;Varovani&amp;quot;&amp;gt;POZOR!!!&lt;br /&gt;
Nebezpečné, používá se výjimečně pouze pro velmi důvěryhodné a prověřené programy.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;Poznamka&amp;quot;&amp;gt;Upozornění!&lt;br /&gt;
Pro skripty a další interpretované programy (bash, Python, PHP,...) se SUID bit ve většině operačních systémů ignoruje!&lt;br /&gt;
&lt;br /&gt;
(V&amp;amp;nbsp;Linuxu se SUID u&amp;amp;nbsp;skriptů ignoruje od verze jádra Linux 3.x.)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Set GID (SGID) ==&lt;br /&gt;
* Pro spustitelné soubory (programy):&lt;br /&gt;
** Význam analogický jako SUID &amp;amp;mdash; program bude spouštěn s právy skupiny, která program vlastní. (Dnes ne moc používané.)&lt;br /&gt;
* Pro složky:&lt;br /&gt;
** Pokud ve složce vytvořím soubor či složku, pak se vlastnická skupina převezme z nastavení složky. (Vlastník budu já.)&lt;br /&gt;
** (Standardně bych vlastník byl také já, ale vlastnická skupina by byla moje primární skupina.)&lt;br /&gt;
** Pokud vytvářím složku, zdědí vytvářená složka i SGID bit.&lt;br /&gt;
; Nastavení&lt;br /&gt;
 chmod g+s slozka&lt;br /&gt;
; Výpis &amp;lt;code&amp;gt;ls -l&amp;lt;/code&amp;gt;:&lt;br /&gt;
* Místo &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; v právech ''skupiny'':&lt;br /&gt;
**&amp;lt;tt&amp;gt;s&amp;lt;/tt&amp;gt;... SGID + právo spouštět pro skupinu&lt;br /&gt;
**&amp;lt;tt&amp;gt;S&amp;lt;/tt&amp;gt;... SGID - právo spouštět pro skupinu&lt;br /&gt;
&lt;br /&gt;
* Například:&lt;br /&gt;
 ''$'' ls -ld share&lt;br /&gt;
 ''drwxrw&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;s&amp;lt;/span&amp;gt;r-x 2 student skupina 4096 17. úno 11.31 share''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Priklad&amp;quot;&amp;gt;&lt;br /&gt;
Používá se u sdílených složek, kde má právo vytvářet soubory skupina uživatelů. Nově vytvořené soubory tak budou opět vlastněny skupinou.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sticky-bit ==&lt;br /&gt;
* Dnes obvykle používán pouze pro adresáře. &lt;br /&gt;
* (Původně zamýšlená složitější funkčnost, i pro soubory.)&lt;br /&gt;
* Pokud je u&amp;amp;nbsp;adresáře nastaven bit sticky, pak může v&amp;amp;nbsp;adresáři uživatel mazat ty soubory, jejichž je vlastníkem. &lt;br /&gt;
* (Standardně buď má uživatel právo zápisu do adresáře (&amp;lt;tt&amp;gt;w&amp;lt;/tt&amp;gt;) a pak může mazat všechny soubory bez ohledu na vlastnictví, nebo nemá právo zápisu a nemůže mazat žádné soubory (ani svoje).)&lt;br /&gt;
; Nastavení&lt;br /&gt;
 chmod o+t adresar&lt;br /&gt;
; Výpis &amp;lt;code&amp;gt;ls -l&amp;lt;/code&amp;gt;:&lt;br /&gt;
* Místo &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; v právech ''ostatních uživatelů'':&lt;br /&gt;
** &amp;lt;tt&amp;gt;t&amp;lt;/tt&amp;gt;... „sticky“ + právo spouštět pro všechny uživatele&lt;br /&gt;
** &amp;lt;tt&amp;gt;T&amp;lt;/tt&amp;gt;... „sticky“ bez právo &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; pro všechny uživatele&lt;br /&gt;
&lt;br /&gt;
* Například:&lt;br /&gt;
 ''$'' ls -ld /tmp&lt;br /&gt;
 ''drwxrwxrw&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;t&amp;lt;/span&amp;gt; 10 root root 200 17. úno 11.09 /tmp''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Priklad&amp;quot;&amp;gt;&lt;br /&gt;
Příklad použití: &lt;br /&gt;
* Je nastaven na složce &amp;lt;tt&amp;gt;/tmp&amp;lt;/tt&amp;gt; (do ní si aplikace odkládají dočasné soubory).&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== umask ==&lt;br /&gt;
* Nastavuje, jaká práva má mít nově vytvořený soubor.&lt;br /&gt;
* Pokud vytvoříme soubor, pak:&lt;br /&gt;
** Vlastník: bude ten uživatel, který soubor vytvořil.&lt;br /&gt;
** Vlastnická skupina: primární skupina uživatele, který soubor vytvořil.&lt;br /&gt;
* Práva získáme tak, že bity nastavené příkazem &amp;lt;tt&amp;gt;umask&amp;lt;/tt&amp;gt; odečteme od základní masky:&lt;br /&gt;
** základní maska pro soubory &amp;lt;tt&amp;gt;666&amp;lt;/tt&amp;gt; (reprezentuje kombinaci &amp;lt;tt&amp;gt;rw-rw-rw-&amp;lt;/tt&amp;gt;)&lt;br /&gt;
** základní maska pro adresáře &amp;lt;tt&amp;gt;777&amp;lt;/tt&amp;gt; (reprezentuje kombinaci &amp;lt;tt&amp;gt;rwxrwxrwx&amp;lt;/tt&amp;gt;)&lt;br /&gt;
* Standardní nastavení &amp;lt;tt&amp;gt;umask&amp;lt;/tt&amp;gt; je &amp;lt;tt&amp;gt;022&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&amp;lt;div class=&amp;quot;Priklad&amp;quot;&amp;gt;&lt;br /&gt;
; Příklad:&lt;br /&gt;
 umask 007&lt;br /&gt;
* Výpočet&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| ||Soubory ||Adresáře&lt;br /&gt;
|-&lt;br /&gt;
|Základ ||666 ||777&lt;br /&gt;
|-&lt;br /&gt;
|Umask ||007 ||007&lt;br /&gt;
|-&lt;br /&gt;
|Výsledek ||660 ||770 &lt;br /&gt;
|}&lt;br /&gt;
* Podrobněji po bitech:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| ||Soubory ||Adresáře&lt;br /&gt;
|-&lt;br /&gt;
|Základ||110 110 110||111 111 111&lt;br /&gt;
|-&lt;br /&gt;
|Umask||000 000 111||000 000 111&lt;br /&gt;
|-&lt;br /&gt;
|Výsledek||110 110 000||111 111 000 &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
; Symbolický zápis:&lt;br /&gt;
 &amp;lt;code&amp;gt;práva = základ AND NOT(umask)&amp;lt;/code&amp;gt;&lt;br /&gt;
* (Předpokládáme, že logické operace se provádí na každý bit zvlášť.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Ukol&amp;quot;&amp;gt;&lt;br /&gt;
; Úkol&lt;br /&gt;
* Jaká práva bude mít soubor/adresář vytvoření se standardním nastavením &amp;lt;tt&amp;gt;umask&amp;lt;/tt&amp;gt;?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Související stránky ==&lt;br /&gt;
* [[Oprávnění pro přístup k souborům]], [[Nastavování práv|Nastavování oprávnění]]&lt;br /&gt;
&lt;br /&gt;
== Další zdroje ==&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Setuid Wikipedia &amp;amp;rarr; Set UID]&lt;br /&gt;
* [http://www.library.yale.edu/wsg/docs/permissions/sgid.htm Yale.edu &amp;amp;rarr; SGID pro sdílené složky]&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/Speci%C3%A1ln%C3%AD_bity</id>
		<title>Speciální bity</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/Speci%C3%A1ln%C3%AD_bity"/>
				<updated>2026-02-17T10:22:22Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: /* Související stránky */ Úprava odkazu na stránku: Nastavení oprávnění místo práv.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]][[Category:OSY]][[Category:Uživatelské účty]][[Category:Linux]]&lt;br /&gt;
&lt;br /&gt;
== Úvod ==&lt;br /&gt;
* V systému Unix a systémech z něj vycházejících (Linux,...) se tradičně oprávnění pro přístup k souborům ukládala pomocí devíti bitů viz [[Nastavování práv]].&lt;br /&gt;
* Dále se ovšem ukládaly a ukládají další tři speciální bity, které upravují chování programů a složek v některých specifických případech.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Set UID (SUID) ==&lt;br /&gt;
* Používá se pro spustitelné soubory (programy).&lt;br /&gt;
* Program je spouštěn s právy vlastníka programu (jako by ho spustil vlastník).&lt;br /&gt;
* (Standardně se program spustí s právy toho, kdo program spustil.)&lt;br /&gt;
; Nastavení SUID&lt;br /&gt;
 chmod u+s program&lt;br /&gt;
; Ověření SUID&lt;br /&gt;
* Ve výpisu &amp;lt;code&amp;gt;ls -l&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Místo písmene &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; ve výpisu práv vlastníka se objeví:&lt;br /&gt;
** &amp;lt;tt&amp;gt;s&amp;lt;/tt&amp;gt;... SUID + nastavené právo spouštět (&amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt;)&lt;br /&gt;
** &amp;lt;tt&amp;gt;S&amp;lt;/tt&amp;gt;... SUID bez práva spouštět&lt;br /&gt;
* Například:&lt;br /&gt;
 ''$'' ls -l `which passwd`&lt;br /&gt;
 ''-rw&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;s&amp;lt;/span&amp;gt;r-xr-x 1 root root 45396 kvě 25  2012 /usr/bin/passwd''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Priklad&amp;quot;&amp;gt;Příklad použití: &lt;br /&gt;
Například program &amp;lt;tt&amp;gt;/usr/bin/passwd&amp;lt;/tt&amp;gt; (příkaz &amp;lt;tt&amp;gt;passwd&amp;lt;/tt&amp;gt;) &amp;amp;mdash; pro nastavení hesla potřebuje právo zapisovat do souboru &amp;lt;tt&amp;gt;/etc/shadow&amp;lt;/tt&amp;gt;, smí ale zapisovat jen hesla aktuálního uživatele!&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;Varovani&amp;quot;&amp;gt;POZOR!!!&lt;br /&gt;
Nebezpečné, používá se výjimečně pouze pro velmi důvěryhodné a prověřené programy.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;Poznamka&amp;quot;&amp;gt;Upozornění!&lt;br /&gt;
Pro skripty a další interpretované programy (bash, Python, PHP,...) se SUID bit ve většině operačních systémů ignoruje!&lt;br /&gt;
&lt;br /&gt;
(V&amp;amp;nbsp;Linuxu se SUID u&amp;amp;nbsp;skriptů ignoruje od verze jádra Linux 3.x.)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Set GID (SGID) ==&lt;br /&gt;
* Pro spustitelné soubory (programy):&lt;br /&gt;
** Význam analogický jako SUID &amp;amp;mdash; program bude spouštěn s právy skupiny, která program vlastní. (Dnes ne moc používané.)&lt;br /&gt;
* Pro složky:&lt;br /&gt;
** Pokud ve složce vytvořím soubor či složku, pak se vlastnická skupina převezme z nastavení složky. (Vlastník budu já.)&lt;br /&gt;
** (Standardně bych vlastník byl také já, ale vlastnická skupina by byla moje primární skupina.)&lt;br /&gt;
** Pokud vytvářím složku, zdědí vytvářená složka i SGID bit.&lt;br /&gt;
; Nastavení&lt;br /&gt;
 chmod g+s slozka&lt;br /&gt;
; Výpis &amp;lt;code&amp;gt;ls -l&amp;lt;/code&amp;gt;:&lt;br /&gt;
* Místo &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; v právech ''skupiny'':&lt;br /&gt;
**&amp;lt;tt&amp;gt;s&amp;lt;/tt&amp;gt;... SGID + právo spouštět pro skupinu&lt;br /&gt;
**&amp;lt;tt&amp;gt;S&amp;lt;/tt&amp;gt;... SGID - právo spouštět pro skupinu&lt;br /&gt;
&amp;lt;div class=&amp;quot;Priklad&amp;quot;&amp;gt;&lt;br /&gt;
Používá se u sdílených složek, kde má právo vytvářet soubory skupina uživatelů. Nově vytvořené soubory tak budou opět vlastněny skupinou.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sticky-bit ==&lt;br /&gt;
* Dnes obvykle používán pouze pro adresáře. &lt;br /&gt;
* (Původně zamýšlená složitější funkčnost, i pro soubory.)&lt;br /&gt;
* Pokud je u&amp;amp;nbsp;adresáře nastaven bit sticky, pak může v&amp;amp;nbsp;adresáři uživatel mazat ty soubory, jejichž je vlastníkem. &lt;br /&gt;
* (Standardně buď má uživatel právo zápisu do adresáře (&amp;lt;tt&amp;gt;w&amp;lt;/tt&amp;gt;) a pak může mazat všechny soubory bez ohledu na vlastnictví, nebo nemá právo zápisu a nemůže mazat žádné soubory (ani svoje).)&lt;br /&gt;
; Nastavení&lt;br /&gt;
 chmod o+t adresar&lt;br /&gt;
; Výpis &amp;lt;code&amp;gt;ls -l&amp;lt;/code&amp;gt;:&lt;br /&gt;
* Místo &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; v právech ''ostatních uživatelů'':&lt;br /&gt;
** &amp;lt;tt&amp;gt;t&amp;lt;/tt&amp;gt;... „sticky“ + právo spouštět pro všechny uživatele&lt;br /&gt;
** &amp;lt;tt&amp;gt;T&amp;lt;/tt&amp;gt;... „sticky“ bez právo &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; pro všechny uživatele&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Priklad&amp;quot;&amp;gt;&lt;br /&gt;
Příklad použití: &lt;br /&gt;
* Je nastaven na složce &amp;lt;tt&amp;gt;/tmp&amp;lt;/tt&amp;gt; (do ní si aplikace odkládají dočasné soubory).&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== umask ==&lt;br /&gt;
* Nastavuje, jaká práva má mít nově vytvořený soubor.&lt;br /&gt;
* Pokud vytvoříme soubor, pak:&lt;br /&gt;
** Vlastník: bude ten uživatel, který soubor vytvořil.&lt;br /&gt;
** Vlastnická skupina: primární skupina uživatele, který soubor vytvořil.&lt;br /&gt;
* Práva získáme tak, že bity nastavené příkazem &amp;lt;tt&amp;gt;umask&amp;lt;/tt&amp;gt; odečteme od základní masky:&lt;br /&gt;
** základní maska pro soubory &amp;lt;tt&amp;gt;666&amp;lt;/tt&amp;gt; (reprezentuje kombinaci &amp;lt;tt&amp;gt;rw-rw-rw-&amp;lt;/tt&amp;gt;)&lt;br /&gt;
** základní maska pro adresáře &amp;lt;tt&amp;gt;777&amp;lt;/tt&amp;gt; (reprezentuje kombinaci &amp;lt;tt&amp;gt;rwxrwxrwx&amp;lt;/tt&amp;gt;)&lt;br /&gt;
* Standardní nastavení &amp;lt;tt&amp;gt;umask&amp;lt;/tt&amp;gt; je &amp;lt;tt&amp;gt;022&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&amp;lt;div class=&amp;quot;Priklad&amp;quot;&amp;gt;&lt;br /&gt;
; Příklad:&lt;br /&gt;
 umask 007&lt;br /&gt;
* Výpočet&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| ||Soubory ||Adresáře&lt;br /&gt;
|-&lt;br /&gt;
|Základ ||666 ||777&lt;br /&gt;
|-&lt;br /&gt;
|Umask ||007 ||007&lt;br /&gt;
|-&lt;br /&gt;
|Výsledek ||660 ||770 &lt;br /&gt;
|}&lt;br /&gt;
* Podrobněji po bitech:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| ||Soubory ||Adresáře&lt;br /&gt;
|-&lt;br /&gt;
|Základ||110 110 110||111 111 111&lt;br /&gt;
|-&lt;br /&gt;
|Umask||000 000 111||000 000 111&lt;br /&gt;
|-&lt;br /&gt;
|Výsledek||110 110 000||111 111 000 &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
; Symbolický zápis:&lt;br /&gt;
 &amp;lt;code&amp;gt;práva = základ AND NOT(umask)&amp;lt;/code&amp;gt;&lt;br /&gt;
* (Předpokládáme, že logické operace se provádí na každý bit zvlášť.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;Ukol&amp;quot;&amp;gt;&lt;br /&gt;
; Úkol&lt;br /&gt;
* Jaká práva bude mít soubor/adresář vytvoření se standardním nastavením &amp;lt;tt&amp;gt;umask&amp;lt;/tt&amp;gt;?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Související stránky ==&lt;br /&gt;
* [[Oprávnění pro přístup k souborům]], [[Nastavování práv|Nastavování oprávnění]]&lt;br /&gt;
&lt;br /&gt;
== Další zdroje ==&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Setuid Wikipedia &amp;amp;rarr; Set UID]&lt;br /&gt;
* [http://www.library.yale.edu/wsg/docs/permissions/sgid.htm Yale.edu &amp;amp;rarr; SGID pro sdílené složky]&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/Flutter:_Ukl%C3%A1d%C3%A1n%C3%AD_dat</id>
		<title>Flutter: Ukládání dat</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/Flutter:_Ukl%C3%A1d%C3%A1n%C3%AD_dat"/>
				<updated>2026-02-16T11:36:00Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: Vytvoření kostry stránky&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]][[Category:Programování]][[Category:Flutter]]&lt;br /&gt;
&lt;br /&gt;
== Ukládání dat lokálně: JSON ==&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/Flutter:_Z%C3%A1kladn%C3%AD_widgety</id>
		<title>Flutter: Základní widgety</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/Flutter:_Z%C3%A1kladn%C3%AD_widgety"/>
				<updated>2026-02-16T09:55:37Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: /* Jednoduchý dialog */ Lépe struktorováno, přidány příklady dialogů, připraveno na budoucí osamostatnění.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]][[Category:Programování]][[Category:Flutter]]&lt;br /&gt;
&lt;br /&gt;
== Uspořádání stránky ==&lt;br /&gt;
&lt;br /&gt;
 Center( child: ... )&lt;br /&gt;
* Vycentruje obsah uvnitř widgetu.&lt;br /&gt;
&lt;br /&gt;
 Column(&lt;br /&gt;
   mainAxisAlignment: MainAxisAlignment.center,&lt;br /&gt;
   children: &amp;lt;Widget&amp;gt;[ ... ]&lt;br /&gt;
 )&lt;br /&gt;
* Vloží blok více prvků poskládaných pod sebe.&lt;br /&gt;
&lt;br /&gt;
 Padding(&lt;br /&gt;
   padding: EdgeInsetsGeometry.all(20),&lt;br /&gt;
   child: ...&lt;br /&gt;
 )&lt;br /&gt;
* Všechny prvky budou odsazeny navzájem o 20 pixelů.&lt;br /&gt;
&lt;br /&gt;
 Expanded( child: ... )&lt;br /&gt;
* Tato část okna se bude roztahovat při zvětšování okna.&lt;br /&gt;
&lt;br /&gt;
== Textová pole ==&lt;br /&gt;
 TextField(&lt;br /&gt;
   controller: _abcController,&lt;br /&gt;
   decoration: const InputDecoration(&lt;br /&gt;
     labelText: 'Nadpis pole – viditelný popisek:',&lt;br /&gt;
   ),&lt;br /&gt;
   keyboardType: TextInputType.number, // Pokud chceme omezit vstup na číselné hodnoty&lt;br /&gt;
 ),&lt;br /&gt;
&lt;br /&gt;
; Parametry widgetu&lt;br /&gt;
&lt;br /&gt;
 enabled:  &lt;br /&gt;
* Aktivní/zakázané textové pole.&lt;br /&gt;
* Zakázané textové pole je šedivé a nejde do něj umístit kurzor.&lt;br /&gt;
&lt;br /&gt;
 readOnly:  &lt;br /&gt;
* Textové pole pouze pro čtení – ale není šedivé a lze do něj umístit kurzor&lt;br /&gt;
&lt;br /&gt;
 onChanged: (text) { ... }&lt;br /&gt;
* Metoda, která se zavolá při změně obsahu tlačítka. &lt;br /&gt;
* Metoda musí přijímat jako parametr text.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; Kontroler textového pole&lt;br /&gt;
 final TextEditingController _abcController = TextEditingController();&lt;br /&gt;
* Pro práci s obsahem textového pole slouží &amp;lt;code&amp;gt;TextEditingController&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 final double totalPrice = double.parse(parsedValue = _abcController.text.trim());&lt;br /&gt;
* Přístup k obsahu textového pole zprostředkovává atribut &amp;lt;code&amp;gt;.text&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Obdobně lze &amp;lt;code&amp;gt;int.parse(...)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 _abcController.dispose()&lt;br /&gt;
* Při uvolňování paměti by měly být řádně uvolněny i kontrolery metodou &amp;lt;code&amp;gt;dispose()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
; Nastavení vzhledu &amp;lt;code&amp;gt;InputDecoration&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 contentPadding: EdgeInsets.all(20.0),&lt;br /&gt;
* Odsazení obsahu&lt;br /&gt;
&lt;br /&gt;
 border: OutlineInputBorder(),&lt;br /&gt;
* Ohraničení textového pole&lt;br /&gt;
&lt;br /&gt;
 labelText: 'text'&lt;br /&gt;
* Popiska textového pole.&lt;br /&gt;
* Když je pole prázdné, text je v poli.&lt;br /&gt;
* Jakmile uživatel pole vyplní, popiska se přesune do rámečku textového pole.&lt;br /&gt;
&lt;br /&gt;
 hintText: 'Text'&lt;br /&gt;
* Nápověda – co má uživatel zadat do pole.&lt;br /&gt;
* Po zadání textu do pole text zmizí.&lt;br /&gt;
&lt;br /&gt;
== Tlačítka ==&lt;br /&gt;
  ElevatedButton(&lt;br /&gt;
    onPressed: _nazevMetodyReakce,&lt;br /&gt;
    child: const Text('Popis tlačítka'),&lt;br /&gt;
  ),&lt;br /&gt;
&lt;br /&gt;
; Vlastnosti:&lt;br /&gt;
&lt;br /&gt;
 onPressed:   &lt;br /&gt;
* Název metody, která se vyvolá při stisknutí tlačítka.&lt;br /&gt;
* Obecně může být vložena akce i přímo&lt;br /&gt;
&lt;br /&gt;
 child:  &lt;br /&gt;
* Obsah tlačítka – popis, ikona, obrázek, ...&lt;br /&gt;
&lt;br /&gt;
== ListView ==&lt;br /&gt;
* Pro zobrazení dynamického seznamu prvků.&lt;br /&gt;
* Více viz samostatná stránka [[Flutter: ListView]].&lt;br /&gt;
&lt;br /&gt;
== Odsazení ==&lt;br /&gt;
 SizedBox(height: 10),&lt;br /&gt;
&lt;br /&gt;
Příklad použití:&lt;br /&gt;
 Column(&lt;br /&gt;
   const Text('Hello'),&lt;br /&gt;
   const Sizedbox(height: 10),&lt;br /&gt;
   const Text('World!'),&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
== Textová popiska ==&lt;br /&gt;
 const Text('Záznamy o tankování:',),&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vyskakovací bublina (Toast) ==&lt;br /&gt;
&lt;br /&gt;
* V&amp;amp;nbsp;mobilních aplikacích se pro stručná oznámení používá spíše vyskakovací bublina, než vyskakovací okno.&lt;br /&gt;
&lt;br /&gt;
  setState(() {&lt;br /&gt;
    ScaffoldMessenger.of(context).showSnackBar(&lt;br /&gt;
      SnackBar(&lt;br /&gt;
          content: Text('Informace pro uživatele')&lt;br /&gt;
      ),&lt;br /&gt;
    );&lt;br /&gt;
  });&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Jednoduchý dialog ==&lt;br /&gt;
&lt;br /&gt;
Pro vytvoření jednoduchého dialogu slouží třída &amp;lt;code&amp;gt;AlertDialog&amp;lt;/code&amp;gt;.&lt;br /&gt;
; Parametry konstruktoru &amp;lt;code&amp;gt;AlertDialog&amp;lt;/code&amp;gt;&lt;br /&gt;
 title: const Text('Titulek dialogu')&lt;br /&gt;
 content: const Text('Zpráva dialogu...')&lt;br /&gt;
 actions: [ ''seznam akcí/tlačítek'' ]&lt;br /&gt;
&lt;br /&gt;
; Příklad – Jednoduchý dialog s jedním tlačítkem&lt;br /&gt;
 AlertDialog(&lt;br /&gt;
   title: const Text('Skutečně smazat položku'),&lt;br /&gt;
   content: const Text('Soubor neobsahuje platná data!'),&lt;br /&gt;
   actions: [&lt;br /&gt;
     TextButton(&lt;br /&gt;
       onPressed: () =&amp;gt; Navigator.pop(context),&lt;br /&gt;
       child: const Text('OK'),&lt;br /&gt;
     ),&lt;br /&gt;
   ]&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
; Příklad – Potvrzovací dialog se dvěma tlačítky&lt;br /&gt;
 AlertDialog(&lt;br /&gt;
   title: const Text('Upozornění'),&lt;br /&gt;
   content: const Text('Skutečně chcete smazat položku XYZ?'),&lt;br /&gt;
   actions: [&lt;br /&gt;
     '''TextButton('''&lt;br /&gt;
       onPressed: () =&amp;gt; {&lt;br /&gt;
         setState(() { ''_akceSmazSkutecne();'' };);&lt;br /&gt;
         _akceUloz();&lt;br /&gt;
         Navigator.pop(context);&lt;br /&gt;
       },&lt;br /&gt;
       child: const '''Text('Smaž'),'''&lt;br /&gt;
     '''),'''&lt;br /&gt;
     '''TextButton('''&lt;br /&gt;
       onPressed: () =&amp;gt; Navigator.pop(context),&lt;br /&gt;
       child: const '''Text('Zrušit'),'''&lt;br /&gt;
     '''),'''&lt;br /&gt;
   ]&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
=== Vyvolání dialogu ===&lt;br /&gt;
&lt;br /&gt;
; Metoda pro různá hlášení&lt;br /&gt;
&lt;br /&gt;
Můžeme připravit metodu pro vyvolání obecného dialogu:&lt;br /&gt;
  Future&amp;lt;void&amp;gt; ukazHlaseni(String messageText) =&amp;gt; showDialog&amp;lt;void&amp;gt;(&lt;br /&gt;
    context: context,&lt;br /&gt;
    builder: (context) {&lt;br /&gt;
      return AlertDialog( ''...'' );&lt;br /&gt;
    },&lt;br /&gt;
  );&lt;br /&gt;
&lt;br /&gt;
Metodu následně voláme:&lt;br /&gt;
 ukazHlaseni('Text');&lt;br /&gt;
&lt;br /&gt;
; Volání přímo v kódu&lt;br /&gt;
&lt;br /&gt;
Můžeme také dialog vytvořit a rovnou ho zavolat:&lt;br /&gt;
 showDialog(&lt;br /&gt;
   context: context,&lt;br /&gt;
   builder: (context) =&amp;gt; AlertDialog( ''...'' ),&lt;br /&gt;
 )&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/Informatika</id>
		<title>Informatika</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/Informatika"/>
				<updated>2026-02-16T09:29:43Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: /* Programování */ Přidáno Flutter: Ukládání dat a upravena struktura Category: Flutter&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]]&lt;br /&gt;
&lt;br /&gt;
== [[:Category:Historie_IT|Historie IT]] ==&lt;br /&gt;
* [[Generace počítačů]], [[Von Neumannova architektura]], &lt;br /&gt;
* [[Historie Internetu]], [[Vývoj modelů IT]]&lt;br /&gt;
* [[Historie Windows]], [[Projekt GNU a GNU/Linux]], [[Unix]], [[Svobodný software]]&lt;br /&gt;
* [[:Category:Historie_IT|A další...]]&lt;br /&gt;
&lt;br /&gt;
== [[:Category:Řízení projektů|Řízení IT projektů]] ==&lt;br /&gt;
* [[Tvorba_software]]&lt;br /&gt;
* [[Git]]: [[Git: Instalace|Instalace]], [[Git: Versioning|Správa verzí]], [[Git: Repository|Vzdálený repozitář]], [[Git: Branch|Větvení]], [[Markdown]], [[Git: FAQ|FAQ]]&lt;br /&gt;
* Další nástroje: [[Slack]], [[Toggl Track]], [[Asana]]&lt;br /&gt;
* [[:Category:Dokumentace projektu|Dokumentace]]: [[Zápis zadání]], [[Uživatelská dokumentace]]&lt;br /&gt;
; Sofwarové inženýrství&lt;br /&gt;
* [[Jazyk UML|UML]]: [[UML: Use Case|Use case]], [[UML: Class|Class]], [[UML: Sequence|Sequence]], [[UML: State|State]] diagramy&lt;br /&gt;
* UI, UX: [[Návrh UI]], [[Wireframe]], [[Persony]], [[Scénáře použití]], [[Testování UI]]&lt;br /&gt;
&lt;br /&gt;
== [[:Category:Programování|Programování]] ==&lt;br /&gt;
; Teorie&lt;br /&gt;
* [[Algoritmus]], [[Složitost algoritmu]]&lt;br /&gt;
* [[Programovací jazyky]]&lt;br /&gt;
* [[Řadící algoritmy]] &lt;br /&gt;
* [[Objektově orientované programování]]&lt;br /&gt;
* [[Návrhové vzory]]&lt;br /&gt;
* [[Vytvořte hezkou hru]]&lt;br /&gt;
; Zápis kódu:&lt;br /&gt;
* [[Řídící struktury programu]]: [[Cykly|cykly]], [[Větvení|větvení]]), [[Ošetření vstupních proměnných]], [[Podmíněný výraz]]&lt;br /&gt;
; [[Java]]: &lt;br /&gt;
* [[Slovníček pojmů pro programování]], [[Konvence|Konvence pro zápis kódu]], [[Vývoj aplikací v Javě]]&lt;br /&gt;
* [[Java: Zápis tříd|Zápis tříd]], [[Java: Datové typy|Datové typy]], [[Java: Modifikátory přístupu|Modifikátory přístupu]], [[Platnost proměnných]], [[Java: Abstraktní třídy, dědičnost a rozhraní|Rozhraní]], [[Java: Enum|Výčtový typ]]&lt;br /&gt;
* [[Java]]: [[Java| Další knihovní třídy]], [[Java: Práce s texty|Práce s texty]], [[Java: Kontejnery| Kontejnery]], [[Java: Práce s poli|Práce s poli]], [[Java: Řazení|Řazení kontejnerů]], [[Datum a čas v Javě|Datum a čas]]&lt;br /&gt;
* Java &amp;amp;mdash; spouštění: [[Java: Export balíčku JAR|Export balíčku JAR]], [[Spouštění appletů]]&lt;br /&gt;
* GUI: [[JavaFX v kostce]] .:. [[GUI v Javě|Základy grafického uživatelského rozhraní]], [[Java: Checkbox a RadioButton|Checkbox a RadioButton]], [[Dialogy_a_vyskakovací_okna]], [[Menu v Javě]], [[Tabulky v Javě]], [[Layout v Javě]], [[Myš v Javě]], [[Myš a obrázky v Javě &amp;amp;mdash; cvičení]], [[Java: 2D malování]]&lt;br /&gt;
* [[Práce se soubory v Javě]], [[Java: Textový vstup a výstup]], [[Serializace]], [[Databáze v Javě]]&lt;br /&gt;
* [[Výjimky v Javě]]&lt;br /&gt;
; [[:Category:Android|Programování pro Android]]: &lt;br /&gt;
* [[Android: Instalace SDK]], [[Android: Projekt|Projekt Android Studia]], [[Android: Tvorba GUI| Tvorba GUI]], [[Android: Ladění aplikace|Ladění aplikace]],[[Android: Spuštění aplikace| Spuštění aplikace]]&lt;br /&gt;
; [[Greenfoot]]&lt;br /&gt;
* [[Greenfoot]], [[Greenfoot: Řešení častých úloh]]&lt;br /&gt;
; [[:Category:Flutter|Flutter+Dart]]&lt;br /&gt;
* [[Dart vs. Java]], [[Dart: Užitečné tipy]]&lt;br /&gt;
* [[Flutter: Kostra aplikace]], [[Flutter: Základní widgety]], [[Flutter: ListView]]&lt;br /&gt;
* [[Flutter: Ukládání dat]]&lt;br /&gt;
; Podpůrné nástroje&lt;br /&gt;
* [[GIT]]&lt;br /&gt;
; Výměna dat&lt;br /&gt;
* [[JSON]]&lt;br /&gt;
; [[:Category:Programování|A další...]]&lt;br /&gt;
&lt;br /&gt;
== [[:Category:HTML| Webové stránky]] ==&lt;br /&gt;
* HTML: [[HTML]], [[HTML: Položky v hlavičce stránky|Hlavička stránky]], [[HTML: Struktura webové stránky|Struktura stránky]]&lt;br /&gt;
* [[CSS|Kaskádové styly (CSS)]], &lt;br /&gt;
* [[Cvičení HTML]], [[Cvičení HTML 2]], [[Cvičení HTML 3]], [[Cvičení HTML 4]], [[Cvičení HTML 5]]&lt;br /&gt;
* [[Formuláře v PHP]], [[Ošetření vstupních proměnných]], [[HTTP přesměrování v PHP|HTTP přesměrování]]&lt;br /&gt;
* [[Testování webových stránek]], [[Publikování stránky]]&lt;br /&gt;
* JavaScript: [[Skrytí mailové adresy na webu]]&lt;br /&gt;
* [[:Category:HTML|A další...]]&lt;br /&gt;
&lt;br /&gt;
== [[:Category:Principy IT| Principy IT, hardware, log. obvody]] ==&lt;br /&gt;
* [[Číselné soustavy]]&lt;br /&gt;
* [[Karnaughova mapa]], [[Booleova algebra]]&lt;br /&gt;
* [[Obvody elektrického proudu]]&lt;br /&gt;
* [[Konečný automat]], [[Regulární výrazy]]&lt;br /&gt;
* Hardware: [[HW: Skříně a chlazení| Skříně a chlazení]], [[LCD]], [[CPU]], [[Základní deska]], [[Grafická karta]]&lt;br /&gt;
* [[Pevný disk]]: [[SSD|SSD disk]], [[Klasický pevný disk|HDD]], [[Rozdělení disku]]&lt;br /&gt;
* IoT: [[ESP: Nastavení IDE]], [[ESP: Princip programování]], [[ESP: Sériový vstup a výstup]], [[ESP: GPIO]]&lt;br /&gt;
* Letní kurz IoT: [[Letní IoT: Den 1|Den 1]], [[Letní IoT: Den 2|Den 2]], [[Letní IoT: Den 3|Den 3]], [[Letní IoT: Den 4|Den 4]]&lt;br /&gt;
* Aktuální: [[Umělá inteligence]]&lt;br /&gt;
* [[:Category:Principy IT|A další...]]&lt;br /&gt;
&lt;br /&gt;
== [[:Category:Admin|Operační systémy, správa počítače]] ==&lt;br /&gt;
* [[Operační systém|Co je operační systém?]], [[Zavádění operačního systému]], [[Rozdělení disku]], [[Operační_systémy#O konkrétních OS|O konkrétních OS]]&lt;br /&gt;
* [[:Category:Příkazový řádek|Příkazový řádek (kategorie)]], [[Práce v shellu]]&lt;br /&gt;
* [[Operační systémy#Uživatelská práva|Uživatelské účty a nastavení práv]], [[Operační_systémy#Souborový systém|Souborový systém]], [[Operační_systémy#Procesy a správa paměti|Procesy a správa paměti]], [[Komunikace mezi procesy]], [[Nástroje pro práci s procesy]], [[Služby a démoni]]&lt;br /&gt;
* [[Vzdálené připojení k počítači]], [[Správa síťového rozhraní počítače|Správa sítě]],  Správa HW (ve Windows)&lt;br /&gt;
* [[Zabezpečení počítače]], [[Úkoly k zabezpečení počítače]], [[Zálohování]]&lt;br /&gt;
* [[Operační systémy#Uživatelská práva|Uživatelské účty a oprávnění]]: [[Uživatelský účet]] &lt;br /&gt;
* [[Skript]]&lt;br /&gt;
* [[Správa síťového rozhraní počítače|Správa sítě v CLI]]&lt;br /&gt;
* [[Bootovací USB]]&lt;br /&gt;
; GNU/Linux&lt;br /&gt;
* Souhrn: [[Debian: návod pro uživatele]]&lt;br /&gt;
* [[Základní pojmy Linuxu]], [[Distribuce GNU/Linuxu]], [[Software pro GNU/Linux]] .:. [[Instalace software v GNU/Linuxu]]&lt;br /&gt;
* [[Konfigurační soubory|Konfigurační soubory GNU/Linuxu]]&lt;br /&gt;
* [[Základy CLI]], [[Získávání nápovědy v CLI]], [[Vstup a výstup procesů, přesměrování]], [[Proměnné prostředí]], [[Vyhodnocení příkazů]]&lt;br /&gt;
* [[Správa uživatelských účtů v Linuxu]], [[Nastavování práv|Nastavování oprávnění]], [[Speciální bity]]&lt;br /&gt;
* [[Plánování úloh]], [[Sdílení souborů pomocí Samby]], [[Samba - konfigurace]]&lt;br /&gt;
* [[Významné složky GNU/Linuxu]], [[Významné adresáře Linuxu]]&lt;br /&gt;
; Windows&lt;br /&gt;
* [[Historie Windows]], [[Verze a edice Windows]]&lt;br /&gt;
* [[Významné složky Windows]], [[Konzole MMC]]&lt;br /&gt;
* [[Sdílení souborů a tiskáren]]&lt;br /&gt;
* [[Správa uživatelských účtů ve Windows]], [[Uživatelské účty ve Windows — úkoly]]&lt;br /&gt;
* Powershell: [[Powershell: Základy]], [[Powershell: Nápověda]], [[Powershell: Cmdlets]], [[Powershell: Pipelining]]&lt;br /&gt;
* Active Directory: [[Základní pojmy Active Directory]], [[Typy účtů Active Directory]]&lt;br /&gt;
* [[:Category:Admin|A další: správa počítače ...]]&lt;br /&gt;
* [[Operační systémy|A další: operační systémy ...]]&lt;br /&gt;
&lt;br /&gt;
== [[Virtualizace počítače]] ==&lt;br /&gt;
* [[Virtualizace]]&lt;br /&gt;
* [[Nástroje pro virtualizaci]]&lt;br /&gt;
* VirtualBox: [[VirtualBox — základy ovládání]], [[Virtualizace_ukoly]]&lt;br /&gt;
&lt;br /&gt;
* [[Virtualizace počítače|A další...]]&lt;br /&gt;
&lt;br /&gt;
== [[:Category:Sítě|Sítě a přenos dat]] ==&lt;br /&gt;
* Teorie informace: [[Základní pojmy teorie informace]], [[Kódování-šifrování-hashování]], [[Jednotky množství informace]], [[Měření množství informace]]&lt;br /&gt;
* [[:Category:Přenos dat|Přenos dat]]: [[Varianty přenosu dat]], [[Analogový a digitální přenos]], [[Digitalizace analogového signálu]], [[Zabezpečení proti chybám]]&lt;br /&gt;
* [[Správa síťového rozhraní počítače|Správa sítě v CLI]], [[Sdílení souborů a tiskáren]]&lt;br /&gt;
* [[:Category:Internet|Internet]]: [[Netiketa]], [[Cloud|Cloud computing]], [[Topologie Internetu|Architektura Internetu]], [[Připojení k&amp;amp;nbsp;Internetu]], [[Stažení webové stránky]]&lt;br /&gt;
* Telefonie: [[IP telefonie]], [[PSTN]], [[Mobilní telefonní síť]]&lt;br /&gt;
* Adresace a směrování: [[Adresace| Adresace IP]], [[IP adresa a maska|Výpočty s IP adresou a maskou]], [[Speciální typy IP adres]], [[Návrh IP adres| Návrh IP adres: příklady]] .:. [[Směrování]], [[Směrovací protokoly]], [[Protokol RIP]]&lt;br /&gt;
* Princip komunikace: [[Model ISO/OSI]], [[Úkoly vrstev ISO/OSI]], [[Datagramová komunikace]], [[Předávání dat]], [[Trendy počítačových sítí]]&lt;br /&gt;
* [[Strukturovaná kabeláž]], [[Konfigurace bezdrátového routeru]], [[Standardy WLAN]], [[Média počítačových sítí]]&lt;br /&gt;
* [[:Category:Bezpečnost| Bezpečnost]]: [[Rizika při práci s daty]], [[Malware]], [[Ochrana proti malware]],...&lt;br /&gt;
* Transportní vrstva: [[TCP a UDP]], [[Navazování spojení]], [[Socket a číslo portu]]&lt;br /&gt;
* Šifrování a podpis: [[Princip šifrování]], [[Hashovací funkce]], [[Elektronický podpis]], [[Šifrování prakticky]], [[Certifikát elektronického podpisu]]&lt;br /&gt;
* Relační a prezentační vrstva: [[Úkoly relační vrstvy]], [[Komprese]], [[Konverze formátů při přenosu]]&lt;br /&gt;
* Model ISO/OSI a&amp;amp;nbsp;úkoly vrstev: [[Úkoly vrstev ISO/OSI]], [[Úkoly fyzické vrstvy ISO/OSI|fyzická]], [[Úkoly linkové vrstvy ISO/OSI|linková]], [[Úkoly síťové vrstvy ISO/OSI|síťová]], [[Úkoly transportní vrstvy ISO/OSI|transportní]], [[Úkoly relační vrstvy|relační]], [[Úkoly prezentační vrstvy|prezentační]], [[Protokoly aplikační vrstvy|aplikační]].&lt;br /&gt;
* Konfigurace routeru a&amp;amp;nbsp;propojení sítí: [[Propojování sítí: Časté chyby|Časté chyby]], [[Propojování sítí: Troubleshooting|Troubleshooting]]&lt;br /&gt;
* [[:Category:Sítě|A další...]]&lt;br /&gt;
&lt;br /&gt;
== Aplikační software, [[Kancelářský software]] ==&lt;br /&gt;
* [[Licence na SW]]&lt;br /&gt;
; [[Kancelářský software]]&lt;br /&gt;
* Zpracování textů, [[Tabulkový procesor]], [[Prezentace]], [[Nástroje pro tvorbu prezentací]]&lt;br /&gt;
* [[Rejstřík]]&lt;br /&gt;
* Příklady z hodin, [[Šikovné vzorce pro Calc]]&lt;br /&gt;
* [[Kancelářský software|A další...]]&lt;br /&gt;
&lt;br /&gt;
== [[:Category:Grafika a 3D tisk|Grafika a 3D tisk]] ==&lt;br /&gt;
* [[Modelování pro 3D tisk]], [[3D tisk]]&lt;br /&gt;
* [[:Category:Grafika a 3D tisk|A další...]]&lt;br /&gt;
&lt;br /&gt;
== Související ==&lt;br /&gt;
* [[Ergonomie pracoviště]]&lt;br /&gt;
* [[Blockchain a kryptoměny]]&lt;br /&gt;
* [[Profesní prezentace]]&lt;br /&gt;
&lt;br /&gt;
== Zábava, různé ==&lt;br /&gt;
* [[Kalendář hackera]] ([http://stallman.org/articles/on-hacking.html Kdo je hacker? By RMS in english])&lt;br /&gt;
* [[Život s programátorem ;)]]&lt;br /&gt;
&lt;br /&gt;
== Postupně zrušit ==&lt;br /&gt;
* [[:Category:Zrušit|Stránky ke zrušení]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- --------------------------------------------------------------------------------------------------------------&lt;br /&gt;
------------------Starší stručnější verze, která byla vložena na hlavní stránce -----------------------------------&lt;br /&gt;
== Informatika ==&lt;br /&gt;
&lt;br /&gt;
* Historie počítačů&lt;br /&gt;
** [[Generace počítačů]]&lt;br /&gt;
** [[Von Neumannova architektura]]&lt;br /&gt;
** [[Historie Internetu]]&lt;br /&gt;
** [[Historie Windows]]&lt;br /&gt;
&lt;br /&gt;
* [[:Category:Programování|Programování]]&lt;br /&gt;
** [[Řídící struktury programu]]&lt;br /&gt;
** [[Konvence|Dohodnuté konvence pro psaní kódu]]&lt;br /&gt;
&lt;br /&gt;
* [[:Category:OSY|Operační systémy]]&lt;br /&gt;
&lt;br /&gt;
* [[:Category:Admin|Správa počítače]]&lt;br /&gt;
&lt;br /&gt;
* [[:Category:Sítě|Sítě]]&lt;br /&gt;
&lt;br /&gt;
* [[:Category:Office|SW pro kancelář]]&lt;br /&gt;
** [[Prezentace]]&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	<entry>
		<id>http://mis.e-mis.cz/index.php/Moodle_GIFT</id>
		<title>Moodle GIFT</title>
		<link rel="alternate" type="text/html" href="http://mis.e-mis.cz/index.php/Moodle_GIFT"/>
				<updated>2026-02-16T05:35:18Z</updated>
		
		<summary type="html">&lt;p&gt;Spravce: Vytvoření kostry stránky a multichoice otázka.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:VSE]][[Category:Informatika]][[Category:Jiné]]&lt;br /&gt;
&lt;br /&gt;
GIFT je otevřený formát Moodle pro popis testových otázek.&lt;br /&gt;
&lt;br /&gt;
== Multichoice ==&lt;br /&gt;
&lt;br /&gt;
 //TODO!!!&lt;br /&gt;
 ::oblast_nazev0XY::&lt;br /&gt;
 Vyberte správná tvrzení o ...: &lt;br /&gt;
 [Vyber všechny správné odpovědi. Za nesprávné odpovědi dostáváš záporné body]&lt;br /&gt;
 {&lt;br /&gt;
 ~%20%Správná A&lt;br /&gt;
 ~%40%Správná B&lt;br /&gt;
 ~%40%Správná C.#Komentář k odpovědi k zobrazení ve výsledcích&lt;br /&gt;
 ~%-20%Špatně X&lt;br /&gt;
 ~%-20%Špatně Y&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Zdroje ==&lt;br /&gt;
* [https://docs.moodle.org/501/en/GIFT_format Moodle.org &amp;gt; GIFT format]&lt;/div&gt;</summary>
		<author><name>Spravce</name></author>	</entry>

	</feed>