-- MySQL dump 9.11 -- -- Host: localhost Database: cswikibooks -- ------------------------------------------------------ -- Server version 4.0.22-log -- -- Table structure for table `cur` -- CREATE TABLE cur ( cur_id int(8) unsigned NOT NULL auto_increment, cur_namespace tinyint(2) unsigned NOT NULL default '0', cur_title varchar(255) binary NOT NULL default '', cur_text mediumtext NOT NULL, cur_comment tinyblob NOT NULL, cur_user int(5) unsigned NOT NULL default '0', cur_user_text varchar(255) binary NOT NULL default '', cur_timestamp varchar(14) binary NOT NULL default '', cur_restrictions tinyblob NOT NULL, cur_counter bigint(20) unsigned NOT NULL default '0', cur_is_redirect tinyint(1) unsigned NOT NULL default '0', cur_minor_edit tinyint(1) unsigned NOT NULL default '0', cur_is_new tinyint(1) unsigned NOT NULL default '0', cur_random double unsigned NOT NULL default '0', cur_touched varchar(14) binary NOT NULL default '', inverse_timestamp varchar(14) binary NOT NULL default '', UNIQUE KEY cur_id (cur_id), KEY cur_title (cur_title(20)), KEY cur_timestamp (cur_timestamp), KEY cur_random (cur_random), KEY name_title_timestamp (cur_namespace,cur_title,inverse_timestamp), KEY user_timestamp (cur_user,inverse_timestamp), KEY usertext_timestamp (cur_user_text,inverse_timestamp), KEY namespace_redirect_timestamp (cur_namespace,cur_is_redirect,cur_timestamp), KEY jamesspecialpages (cur_is_redirect,cur_namespace,cur_title,cur_timestamp), KEY qry_checktouched (cur_id,cur_is_redirect,cur_namespace,cur_title,cur_touched) ) TYPE=InnoDB PACK_KEYS=1; -- -- Dumping data for table `cur` -- INSERT INTO cur VALUES (1,0,'Main_Page','\n==This subdomain is reserved for the creation of a Wikibooks in the [http://en.wikipedia.org/wiki/Česky Česky] language.==\n\nIf you speak this language and think it would be cool to have your own Encyclopedia then \'\'\'you\'\'\' can make it.\n\n\'\'\'\'\'Go ahead. Translate this page and start working on your Encyclopedia.\'\'\'\'\'\n\n[http://en.wikipedia.org For more information go to the main website]\n\n\n
\n\n\'\'\'Other wikis\'\'\'\n [http://sep11.wikipedia.org September 11 memorial wiki/Wiki memoriale des 11 Septembrem] | [http://meta.wikipedia.org Meta-Wikipedia/Meta-Vicipaedia] | [http://wiktionary.org Wikitonary/Victionaria] | [http://wikibooks.org Wikibooks/Vicilibraria] | [http://wikiquote.org Wikiquote/Viciquotas] | [http://wikisource.org Wikisource] | [http://wikitravel.org Wikitravel] \n
\n\n[[aa:]]\n[[af:]]\n[[als:]]\n[[ar:]]\n[[de:]]\n[[en:]]\n[[as:]]\n[[ast:]] \n[[ay:]]\n[[az:]]\n[[be:]]\n[[bg:]]\n[[bn:]]\n[[bo:]]\n[[bs:]]\n[[cs:]]\n[[co:]]\n[[cs:]]\n[[cy:]]\n[[da:]]\n[[el:]]\n[[eo:]]\n[[es:]]\n[[et:]]\n[[eu:]]\n[[fa:]]\n[[fi:]]\n[[fr:]]\n[[fy:]]\n[[ga:]]\n[[gl:]]\n[[gn:]]\n[[gu:]]\n[[he:]]\n[[hi:]]\n[[hr:]]\n[[hy:]]\n[[ia:]]\n[[id:]]\n[[is:]]\n[[it:]]\n[[ja:]]\n[[ka:]]\n[[kk:]]\n[[km:]]\n[[kn:]]\n[[ko:]]\n[[ks:]]\n[[ku:]]\n[[ky:]]\n[[la:]]\n[[ln:]] \n[[lo:]]\n[[lt:]]\n[[lv:]]\n[[hu:]]\n[[mi:]]\n[[mk:]]\n[[ml:]]\n[[mn:]]\n[[mr:]]\n[[ms:]]\n[[mt:]] \n[[my:]]\n[[na:]]\n[[nah:]]\n[[nds:]]\n[[ne:]]\n[[nl:]]\n[[no:]]\n[[oc:]]\n[[om:]]\n[[pa:]]\n[[pl:]]\n[[ps:]]\n[[pt:]]\n[[qu:]]\n[[ro:]]\n[[ru:]]\n[[sa:]]\n[[si:]]\n[[sk:]]\n[[sl:]]\n[[sq:]]\n[[sr:]]\n[[sv:]]\n[[sw:]]\n[[ta:]]\n[[te:]]\n[[tg:]]\n[[th:]]\n[[tk:]]\n[[tl:]]\n[[tr:]]\n[[tt:]]\n[[ug:]]\n[[uk:]]\n[[ur:]]\n[[uz:]]\n[[vi:]]\n[[vo:]]\n[[xh:]]\n[[yo:]]\n[[za:]]\n[[zh:]]\n[[zu:]]\n','',0,'','20040806183303','',0,0,0,1,0.761689790879,'20040806183303','79959193816696'); INSERT INTO cur VALUES (2,4,'Každá_stránka_podle_titulu','\n\n
Hlavní strana to Main Page
\n','',0,'24.29.135.164','20040813130014','sysop',0,0,0,0,0.0161799686180241,'20040813130014','79959186869985'); INSERT INTO cur VALUES (3,0,'Hlavní_strana','[[Wikibooks:Welcome, newcomers|Vítejte]] ve \'\'\'Wikibooks\'\'\'. Vytváříme a rozšiřujeme \'\'\'[[:en:gratis|svobodné]] [[:en:open content| otevřené]] materiály\'\'\', manuály, knihy a jiné texty. V současné době jsme zahájili činnost české verze. Uvítáme jakákoliv doplnění, nové kapitoly či celé knihy. Pokud potřebujete pomoc, navštivte [[Help:Contents|stránky pomoci]].\n\n== Dostupné sekce ==\n\n* [[Linux]]\n** [[ Linuxové emulátory ]]\n* [[Věda|Věda]]\n* [[Matematika|Matematika]]\n** [[Algebra|Algebra]]\n** [[Aplikovaná matematika|Aplikovaná matematika]]\n** [[Diskrétní matematika|Diskrétní matematika]]\n** [[Geometrie|Geometrie]] původní umístění je na [[:en:Cz:Geometrie]]\n** [[Statistika|Statistika]]\n* [[Informační technologie|Informační technologie]]\n**[[Wikipedie|Wikipedie]]\n* [[Jazyky|Jazyky]]\n* [[Humanitní obory|Humanitní obory]]\n* [[Komentované texty|Komentované texty]]\n* [[Různé|Různé]]\n\nNové sekce:\n[[Počítače]]\n\n[[aa:]]\n[[af:]]\n[[als:]]\n[[ar:]]\n[[de:]]\n[[as:]]\n\n[[ay:]]\n[[az:]]\n[[be:]]\n[[bg:]]\n[[bn:]]\n[[bo:]]\n[[bs:]]\n[[co:]]\n[[cy:]]\n[[da:]]\n[[el:]]\n[[en:]]\n[[eo:]]\n[[es:]]\n[[et:]]\n[[eu:]]\n[[fa:]]\n[[fi:]]\n[[fr:]]\n[[fy:]]\n[[ga:]]\n[[gl:]]\n[[gn:]]\n[[gu:]]\n[[he:]]\n[[hi:]]\n[[hr:]]\n[[hy:]]\n[[ia:]]\n[[id:]]\n[[is:]]\n[[it:]]\n[[ja:]]\n[[ka:]]\n[[kk:]]\n[[km:]]\n[[kn:]]\n[[ko:]]\n[[ks:]]\n[[ku:]]\n[[ky:]]\n[[la:]]\n[[ln:]] \n[[lo:]]\n[[lt:]]\n[[lv:]]\n[[hu:]]\n[[mi:]]\n[[mk:]]\n[[ml:]]\n[[mn:]]\n[[mr:]]\n[[ms:]]\n\n[[my:]]\n[[na:]]\n[[nah:]]\n[[nds:]]\n[[ne:]]\n[[nl:]]\n[[no:]]\n[[oc:]]\n[[om:]]\n[[pa:]]\n[[pl:]]\n[[ps:]]\n[[pt:]]\n[[qu:]]\n[[ro:]]\n[[ru:]]\n[[sa:]]\n[[si:]]\n[[simple:]]\n[[sk:]]\n[[sl:]]\n[[sq:]]\n[[sr:]]\n[[sv:]]\n[[sw:]]\n[[ta:]]\n[[te:]]\n[[tg:]]\n[[th:]]\n[[tk:]]\n[[tl:]]\n[[tr:]]\n[[tt:]]\n[[ug:]]\n[[uk:]]\n[[ur:]]\n[[uz:]]\n[[vi:]]\n[[vo:]]\n[[xh:]]\n[[yo:]]\n\n[[zh:]]\n[[zu:]]','/* Dostupné sekce */',0,'83.208.61.201','20050313180427','',0,0,0,0,0.939251482924,'20050313181251','79949686819572'); INSERT INTO cur VALUES (4,1,'Hlavní_strana','Začal jsem přesouvat české materiály z anglické wikibooks sem. Kdo s tím chcete pomoci, beze všeho. Pokud nevíte jak se s Wikibooks pracuje, prostudujte si nápovědy k wikipedii, je to prakticky totéž, pouze jiná doména. [[Wikipedista:Woodcraft|Woodcraft]] 09:03, 3. 9. 2004 (UTC)\n\n== Geometrické modelování přesunuto ==\n\nPřesunul jsem celé geometrické modelování a dal jsem na originální stránky na začátek varování: \'\'\'Pozor, tato stránka již není aktualizovaná, byla přesunuta na nové umístění: http://cs.wikibooks.org/wiki/Geometrie\'\'\' -lzap-\n\n== Co to pojmenovat WikiKnihy ==\njiný projekty jsou taky jakoby česky.','',0,'83.208.26.231','20050308205309','',0,0,0,0,0.918495309967,'20050308205309','79949691794690'); INSERT INTO cur VALUES (5,0,'Geometrie','Geometrie je jedna z nejstarších matematických disciplín, jež se zabývá geometrickými útvary, jejich vlastnostmi a vztahy mezi nimi.\n\n== Euklidovská geometrie ==\n\n== Analytická geometrie ==\n\n=== Analytická geometrie v rovině ===\n\n* [[Soustava souřadnic|Soustava souřadnic]]\n* [[Bod, úsečka, trojúhelník, mnohoúhelník|Bod, úsečka, trojúhelník, mnohoúhelník]]\n* [[Přímka, vektor|Přímka, vektor]]\n* [[Křivky, kuželosečky|Křivky, kuželosečky]]\n* [[Polární a homogenní souřadnice|Polární a homogenní souřadnice]]\n* [[Afinní transformace souřadnic|Afinní transformace souřadnic]]\n\n=== Analytická geometrie v prostoru ===\n\n* [[Soustavy souřadnic|Soustavy souřadnic]]\n* [[Lineární útvary|Lineární útvary]]\n* [[Kvadratické plochy|Kvadratické plochy]]\n* [[Rotační a přímkové plochy|Rotační a přímkové plochy]]\n\n== Diferenciální geometrie ==\n\n=== Diferenciální geometrie křivek ===\n* [[Délka křivky]]\n* [[Inflexní body]]\n* [[První křivost]]\n* [[Druhá křivost]]\n* [[Oskulační kružnice]]\n* [[Frenetův trojhran]]\n* [[Normála, tečný vektor, tečna a tečná rovina křivky]]\n* [[Oskulační rovina]]\n* [[Spojené konce 1. a 2. derivace]]\n* [[Evolventa]]\n\n=== Diferenciální geometrie ploch ===\n* [[Tečný vektor, tečná rovina a tečna plochy|Tečný vektor, tečná rovina a tečna plochy]]\n* [[Normála plochy a normálový vektor|Normála plochy a normálový vektor]]\n* [[Normálová křivost|Normálová křivost]]\n* [[Hlavní křivost|Hlavní křivost]]\n* [[Hlavní směry|Hlavní směry]]\n* [[Gaussova křivost|Gaussova křivost]]\n\n== Geometrické modelování ==\n\n* [[Geometrické modelování|Geometrické modelování]]\n\n=== Geometrické modelování křivek ===\n\n* [[Modelování křivek|Modelování křivek]]\n\n==== Interpolační křivky ====\n\n* [[Lagrangeova interpolace|Lagrangeova interpolace]]\n* [[C1 kubická interpolace|C1 kubická interpolace]]\n* [[C2 kubická interpolace|C2 kubická interpolace]]\n* [[Hermitova kubika|Hermitova kubika]]\n\n==== Aproximační křivky (Bézier) ====\n\n* [[Bézierova křivka|Bézierova křivka]]\n* [[Racionální Bézierova křivka|Racionální Bézierova křivka]]\n* [[Algoritmus de Casteljau|Algoritmus de Casteljau]]\n* [[Racionální algoritmus de Casteljau|Racionální algoritmus de Casteljau]]\n\n==== Aproximační křivky (Spline) ====\n\n* [[B–spline křivka|B–spline křivka]]\n* [[Racionální B–spline křivka|Racionální B–spline křivka]]\n* [[Algoritmus de Boor|Algoritmus de Boor]]\n* [[Racionální algoritmus de Boor|Racionální algoritmus de Boor]]\n\n==== Operace s křivkami ====\n\n* [[Výpočet průsečíku křivek|Výpočet průsečíku křivek]]\n\n=== Geometrické modelování objektů ===\n\n* [[Ořezávání]]\n* [[Vyplňování]]\n* [[Promítání]]\n* [[Viditelnost]]\n* [[Stínování]]\n* [[Raytracing]]\n* [[Rasterizace]]','nová kapitolka',0,'62.177.124.69','20041116141535','',0,0,0,0,0.359131267927,'20041220121145','79958883858464'); INSERT INTO cur VALUES (6,0,'Afinní_transformace_souřadnic','Geometrické transformace jsou jedněmi z nejčastěji používaných operací v počítačové grafice. Mezi afinní operace patří posunutí, otáčení, změna měřítka, zkosení a operace vzniklé jejich skládáním.\n\n==Vyjádření==\n\n\'\'Afinní transformace\'\' jsou vyjádřeny vztahem \'\'P\' \'\' = \'\'P\'\' \'\'\'A\'\'\', kde \'\'P\'\' je bodem, který transformujeme maticí \'\'\'A\'\'\'. Platí \'\'P\' \'\' = [x\' y\' w\'] = \'\'P\'\' \'\'\'A\'\'\' = [x y w] \'\'\'A\'\'\'. Matice \'\'\'A\'\'\' reprezentuje jednotlivé transformace, které mohou být i skládány.\n\nGeometrické afinní transformace souřadnic nám umožňují bod \'\'P\'\' posunout, otočit nebo změnit jeho měřítko (týká se objektů, z těchto bodů složených).\n\nPodrobnější rozepsání těchto transformací a jejich skládání viz níže.\n\n==Afinní geometrické transformace souřadnic==\n\n===Posunutí===\n\nTransformace posunutí nebo také translace \'\'(move, translation)\'\' bodu \'\'P[X, Y]\'\' je určena vektorem posunutí\n\n\np=(X_T, Y_T)=(X\' - X, Y\' - Y)\n\n\nAplikací této transformace na bod \'\'P\'\' získáme bod \'\'P\' \'\' o souřadnicích\n\n\nX\'=X+X_T\n
\n\nY\'=Y+Y_T\n\n\nMaticové vyjádření transformace posunutí má pro homogenní souřadnice tvar\n\n\nA_T=\n\\begin{bmatrix} 1 & 0 & 0\\\\ 0 & 1 & 0\\\\ X_T & Y_T & 1 \\end{bmatrix}\n\n\n
\n[[Image:Move02.jpg]]\n
\n\n
\nObr.1: Posunutí - Červená křivka je výsledkem posunutí původní modré křivky o vektor \'\'a\'\'.\n
\n\n===Otáčení===\n\nOtáčením \'\'(rotation)\'\' bodu \'\'P\'\' kolem počátku soustavy souřadnic O=[0,0] o orientovaný úhel α získáme bod \'\'P\' \'\' o souřadnicích\n\n\nX\'=Xcos\\alpha -Ysin\\alpha\n
\n\nY\'=Xsin\\alpha +Ycos \\alpha\n\n\nMaticové vyjádření transformace otáčení má pro homogenní souřadnice tvar\n\n\nA_R=\n\\begin{bmatrix} cos\\alpha & sin\\alpha & 0\\\\ -sin\\alpha & cos\\alpha & 0\\\\ 0 & 0 & 1 \\end{bmatrix}\n\n\n
\n[[Image:Rotate.jpg]]\n
\n\n
\nObr.2: Otočení - Červená křivka je výsledkem otočení původní modré křivky o 1800.\n
\n\n===Změna měřítka===\n\nZměna měřítka \'\'(scale, zoom)\'\' je změnou velikosti objektu ve směru souřadnicových os. Pokud je absolutní hodnota koeficientu měřítkování v intervalu (0, 1), dochází ke zmenšení transformovaného objektu.\nJe-li absolutní hodnota koeficientu větší než jedna, dojde k prodloužení, je-li znaménko záporné, dochází k prodloužení či zmenšení v opačném směru.\n\nRovnice pro změnu měřítka bodu \'\'P\'\' mají tvar\n\n\nX\'=S_xX\n
\n\nY\'=S_yY\n\n\nkde Sx je koeficient změny měřítka ve směru souřadnicové osy \'\'x\'\' a Sy je koeficient změny měřítka ve směru souřadnicové osy \'\'y\'\'.\n\nOdpovídající transformační matice má pro homogenní souřadnice tvar\n\n\nA_{S}=\n\\begin{bmatrix} S_x & 0 & 0\\\\ 0 & S_y & 0\\\\ 0 & 0 & 1 \\end{bmatrix}\n\n\n
\n[[Image:Scale01.jpg]]\n
\n\n
\nObr.3: Změna měřítka - Červená křivka je výsledkem zvětšení původní modré křivky, zelená pak jejím zmenšením.
\nČervená křivka: Scale X = Scale Y = 1,2
\nZelená křivka: Scale X = Scale Y = 0,45\n
\n\n===Skládání transformací===\n\nPři postupném aplikování transformací na bod \'\'P\'\' záleží na pořadí, v jakém se transformace provádějí. \nJe rozdíl, jestliže bod posuneme a poté otočíme okolo počátku souřadnicového systému, nebo zda bod nejprve otočíme a poté provedeme transformaci posunutí. \nTransformaci vzniklou složením z více transformací lze vyjádřit jedinou maticí, kterou získáme postupným násobením matic, reprezentujících dílčí transformace. \nProtože záleží na pořadí transformací, záleží i na pořadí násobení matic. Jelikož používáme zápis \'\'P\'=P\'\'\'A\'\'\' \'\', musíme matice reprezentující jednotlivé transformace násobit zprava.\n\nPlatí, že pokud násobíme transformační matici, maticí k ní inverzní, dostaneme původní (netransformované) souřadnice. Jinak řečeno iverzní transformace je reprezentována inverzní maticí.\n\n\'\'Příklad\'\'\n\nOdvození transformační matice pro otáčení o úhel α okolo bodu R[xR\n,yR]\n\nOperaci provedeme následujícím způsobem: bod \'\'R\'\' nejprve přemístíme pomocí matice \'\'\'A\'\'\'M do počátku souřadnicového systému, poté provedeme otočení o úhel α pomocí matice \'\'\'A\'\'\'R a nakonec bod přemístíme zpět do původní polohy inverzní matice \'\'\'A\'\'\'-1M. Vše provedeme tak, že vytvoříme matici, která vznikne složením matic vyjadřujících všechny tři operace. Výsledná matice je součin\n\nA=A_MA_RA_M^{-1}\n\n.\n\n\'\'(Pozn. Výše uvedené vztahy a vzorce jsou vztaženy ke 2D. Jejich 3D verze jsou podobné a z nich lehce odvoditelné.)\'\'\n\n==Autoři==\n\nTento text vypracovali studenti [http://www.inf.upol.cz Univerzity Palackého v Olomouci] katedry Matematické informatiky jako zápočtový úkol do předmětu Počítačová geometrie.','',0,'195.113.188.3','20040903082504','',0,0,0,1,0.644339609726,'20040903082504','79959096917495'); INSERT INTO cur VALUES (7,6,'Move02.jpg','Obr.1: Posunutí - Červená křivka je výsledkem posunutí původní modré křivky o vektor a→','Obr.1: Posunutí - Červená křivka je výsledkem posunutí původní modré křivky o vektor a→',3,'Woodcraft','20040903082947','',0,0,0,1,0.110258364221322,'20040903082947','79959096917052'); INSERT INTO cur VALUES (8,4,'kniha_nahrávek_','','načetl \"Linefill2.png\": Vyplňování 2',4,'Lzap','20041216063845','sysop',0,0,0,0,0.502751945986181,'20041216063845','79958783936154'); INSERT INTO cur VALUES (9,6,'Rotate.jpg','Obr.2: Otočení - Červená křivka je výsledkem otočení původní modré křivky o 180.','Obr.2: Otočení - Červená křivka je výsledkem otočení původní modré křivky o 180.',3,'Woodcraft','20040903083244','',0,0,0,1,0.182984668000587,'20040903083244','79959096916755'); INSERT INTO cur VALUES (10,6,'Scale01.jpg','Obr.3: Změna měřítka - Červená křivka je výsledkem zvětšení původní modré křivky, zelená pak jejím zmenšením.','Obr.3: Změna měřítka - Červená křivka je výsledkem zvětšení původní modré křivky, zelená pak jejím zmenšením.',3,'Woodcraft','20040903083349','',0,0,0,1,0.406667532778035,'20040903083349','79959096916650'); INSERT INTO cur VALUES (11,0,'Délka_křivky','==Popis==\nDélka křivky je velmi nutná vlastnost, kterou potřebujeme pro parametr typu oblouk. Oblouk je speciálním typem parametru, který tzv. měří délku křivky.\n== Vyjádření ==\nNechť je k křivka dána vektorovou rovnicí f = f(t) , t\\in J . Zvolme si libovolné pevné číslo t_0 \\in J. Potom funkci s, definovanou na intervalu J jako\ns(t) = \\int_{t_0}^t \\sqrt {f\'(t) * f\'(t)} dt , t_0,t \\in J\nnazýváme obloukem křivky k .Číslo \'\'s(t)\'\' vyjadřuje délku křivky mezi body \'\'F(t0)\'\' a \'\'F(t)\'\'.\n\n==Algoritmizace==\nVýpočet délky křivky byl realizován pomocí algoritmu, který v cyklu spočítá bod na křivce. Bod se přičte k aktuální délce křivky a ještě v cyklu se posunujeme dále v parametru, ze kterého počítáme následujíci bod na křivce.\n;lengthBySuma : proměnná typu int, délka křivky,\n;ParametrTypeCommonMin : proměnná určující minimální hodnotu parametru,\n;ParametrTypeCommonMax : proměnná určující maximální hodnotu parametru.\n\n private void DelkaKrivky()\n { \n lengthBySuma = 0;\n double t = ParametrTypeCommonMin;\n int i = 0;\n c2DPoint bodMinuly = Fxy(ParametrTypeCommonMin);\n do\n {\n t = ParametrTypeCommonMin + (Segment * i);\n c2DPoint bodAktualni = Fxy(t);\n lengthBySuma += bodAktualni.Distance(bodMinuly);\n bodMinuly = bodAktualni;\n i++;\n }\n while (t <= ParametrTypeCommonMax);\n }\n\n==Autoři==\n\nTento text vypracovali studenti [http://www.inf.upol.cz Univerzity Palackého v Olomouci] katedry Matematické informatiky jako zápočtový úkol do předmětu Počítačová geometrie.','',3,'Woodcraft','20040903083540','',0,0,0,1,0.515551439727,'20040903083540','79959096916459'); INSERT INTO cur VALUES (12,6,'Tohlejsouinflexni.jpg','Obr.1: Inflexní body na sinusoidě.','Obr.1: Inflexní body na sinusoidě.',3,'Woodcraft','20040903083802','',0,0,0,1,0.484383690622061,'20040903083918','79959096916197'); INSERT INTO cur VALUES (13,0,'Inflexní_body','==Popis==\nBod na křivce nazveme inflexním bodem na křivce k daná vektorovou rovnicí f = f(t), jestliže jsou vektory f \'\' (t) , f \' \'\' (t) lineárně závislé. Bod, který není inflexní, nazýváme neinflexní bod. Pojem inflexního a neinflexního bodu je nezávislý na parametrizaci dané křivky\n\n
\n[[image:Tohlejsouinflexni.jpg]]\n
\n
\nObr.1: Inflexní body na sinusoidě.\n
\n\n\n==Algoritmizace==\n\nVýpočet inflexních bodů byl realizován taktéž pomocí cyklu, který procházel přes délku parametru\na v každém svém kroku spočítá první a druhou derivaci. Pokud se druhá derivace blíží nule, interval se dá nastavit, tak se aktuálni bod přidá k množině inflexních bodů.\n\n;flexPoints : proměnná typu Arraylist obsahující seznam inflexních bodů,\n;ParametrTypeCommonMin : proměnná určující minimální hodnotu parametru,\n;ParametrTypeCommonMax : proměnná určující maximální hodnotu parametru,\n;bodAktualni : aktuální bod na křivce,\n;bod1der : derivace aktuálního bodu na křivce,\n;bod2der : druhá derivace aktuálního bodu na křivce.\n\n private void InflexniBody()\n {\n flexPoints.Clear();\n for (double i = ParametrTypeCommonMin; i -cInfobases.VicinityOfInflexPoint) && (bod2der.X < cInfobases.VicinityOfInflexPoint)\n && (bod2der.Y > -cInfobases.VicinityOfInflexPoint) && (bod2der.Y < cInfobases.VicinityOfInflexPoint))\n {\n flexPoints.Add(bodAktualni);\n }\n }\n }\n\n==Autoři==\n\nTento text vypracovali studenti [http://www.inf.upol.cz Univerzity Palackého v Olomouci] katedry Matematické informatiky jako zápočtový úkol do předmětu Počítačová geometrie.','',3,'Woodcraft','20040903083916','',0,0,0,1,0.863578523446,'20040903083916','79959096916083'); INSERT INTO cur VALUES (14,0,'První_křivost','==Popis==\nPrvní křivost přiřazuje každému bodu F(p) křivky k jeho \'\'vychýlení\'\' do roviny. Tudíž je pomocí ní možné určovat inflexní body nebo jestli je křivka přímka (část přímky).\n\n== Vyjádření ==\nNechť je k křivka dána vektorovou rovnicí f = f(p) , p\\in J a p je parametr typu oblouk. Vektor první křivosti křivky k v bodě F(p) je vektor f^{\\prime\\prime}(p). První křivost je pro parametr typu oblouk funkce g(p) = |f^{\\prime\\prime}(p)|, která přiřazuje každému bodu F(p) křivky k jeho první křivost. První křivost i její vektor jsou nezávislé na zvoleném oblouku křivky.\n\nNa tomto obrázku vidíme vektor 1. křivosti na části kartoidy a taktéž efekt na poloměr oskulační kružnice.\n\n[[Image:VektorKrivosti.jpg]]\n\n==Algoritmizace==\nFunkce pro výpočet první křivosti:\n;firstCurvature : proměnná reprezentující první křivost.\n public void SetFirstCurvature()\n {\n c2DPoint D1Point = Fxydxy(parametr); // point of the 1st derivation\n c2DPoint D2Point = Fxyddxy(parametr); // point of the 2nd der.\n \n firstCurvature = Math.Sqrt(Math.Pow(Math.Abs(D1Point.X*D2Point.Y -\n D1Point.Y*D2Point.X), 2) /\n Math.Pow(Math.Abs(SkalarProductTwoVectors(D1Point,D1Point)), 3));\n }\n\nFunkce pro výpočet vektoru první křivosti:\n;firstTorsion : úsečka reprezentující vektor první křivosti.\n private void SetVectorOfFirstCurvature()\n {\n Point P = Fxy(parametr); // actual point\n \n Point D2P = this.normal.PointByDistance(firstCurvature);\n // point at a distance of firstCurvature at the direction of the normal from the actual point\n \n Point OsCirCent = new Point(oscullatingCircle[0],oscullatingCircle[1]); // center of the osculating circle\n \n Point D2P2 = new Point(P.X - (D2P.X - P.X),P.Y - (D2P.Y - P.Y));\n // point opposite to a point D2P around the tangent \n \n double DistRtoP2 = Math.Sqrt(Math.Pow(OsCirCent.X - D2P2.X,2)+Math.Pow(OsCirCent.Y - D2P2.Y,2)); \n // distance from point D2P2 to center of oscullating circle\n \n double DistRtoP = Math.Sqrt(Math.Pow(OsCirCent.X - D2P.X,2)+Math.Pow(OsCirCent.Y - D2P.Y,2)); \n // distance from point D2P to center of oscullating circle\n \n //2nd point of the vector of firstTorsion is set to a point which is closer to the center of the osculating circle\n if(DistRtoP2 > DistRtoP) \n {\n firstTorsion.A = P;\n firstTorsion.B = D2P; \n }\n else\n {\n firstTorsion.A = P;\n firstTorsion.B = D2P2;\n }\n }\n\n==Autoři==\n\nTento text vypracovali studenti [http://www.inf.upol.cz Univerzity Palackého v Olomouci] katedry Matematické informatiky jako zápočtový úkol do předmětu Počítačová geometrie.','',3,'Woodcraft','20040903084318','',0,0,0,1,0.465861719319,'20040903084318','79959096915681'); INSERT INTO cur VALUES (15,6,'VektorKrivosti.jpg','Vektor 1. křivosti na části kartoidy a taktéž efekt na poloměr oskulační kružnice.','Vektor 1. křivosti na části kartoidy a taktéž efekt na poloměr oskulační kružnice.',3,'Woodcraft','20040903084519','',0,0,0,1,0.201915885509845,'20040903084519','79959096915480'); INSERT INTO cur VALUES (16,6,'2krivost.jpg','Vektory druhé křivosti.','Vektory druhé křivosti.',3,'Woodcraft','20040903084632','',0,0,0,1,0.556428386416685,'20040903084807','79959096915367'); INSERT INTO cur VALUES (17,0,'Druhá_křivost','==Popis==\nDruhá křivost přiřazuje každému bodu F(p) křivky k jeho \'\'vychýlení\'\' z roviny.\n\n== Vyjádření ==\nNechť je k křivka dána vektorovou rovnicí f = f(p) , p\\in J . Druhá křivost je funkce \n\n~^{2} k = \\frac{\\left[ f~\'(p), f~\'\'(p), f~\'\'\'(p) \\right]}{\\| f~\'\'(p) \\|^{2}},\n\nkterá přiřazuje každému bodu F(p) křivky k jeho druhou křivost. Druhá křivost je nezávislá na zvoleném oblouku křivky.\n== Geometrický význam ==\n\nZvolme na křivce dva různé body F(s) a F(s+h). Označme \\phi(h) odchylku vektorů binormály b(s) a b(s+h). Potom pro reálnou funkci ~^{2}k(s) přiřazující každému bodu F(s) křivky k jeho druhou křivost platí:\n\n|~^{2}k(s)|=lim_{h\\rightarrow0}\\frac{\\varphi(h)}{|h|}\n\n[[Image:2krivost.jpg]]\n\n== Algoritmus ==\n\nFunkce pro výpočet druhé křivosti pro obecný parametr\n public static double DruhaKrivost(Curve krivka, double u)\n {\n Vector3d d1=krivka.FirstDeriv(u);\n Vector3d d2=krivka.SecondDeriv(u);\n Vector3d d3=krivka.ThirthDeriv(u);\n double citatel=d1.DotProduct(d2,d3); //skalární součin d1*d2*d3\n double jmenovatel=Math.Pow(d1.CrossProduct(d2).Length(),2)));\n //velikost vektorového součinu d1*d2 na druhou\n return citatel/jmenovatel;\n }','',3,'Woodcraft','20040903084803','',0,0,0,1,0.356855448036,'20040903084803','79959096915196'); INSERT INTO cur VALUES (18,0,'Oskulační_kružnice','== Vyjádření ==\nZvolme na křivce k neinflexní bod F(p). Oskulační kružnice křivky k v bodě F(p) je kružnice, která leží v oskulační rovině křivky k v bodě F(p), kterým také prochází a sdílí v něm tečnu křivky k. Poloměr kružnice je roven převrácené hodnotě první křivosti křivky k v bodě F(p), tzn. r = \\frac{1}{~^{1} k(p)}. Její střed leží na polopřímce určené bodem F(p) a vektorem 1. křivosti křivky k v tomto bodě. Kde p je parametr na křivce.\n\nNa těchto obrázcích vidíme vztah poloměru oskulační kružnice k velikosti vektoru první křivosti. Na prvním obrázku vidíme menší vektor 1. křivosti a větší oskulační kružnici.\n\n[[Image:OKvyrezPopis.jpg]]\n\nNa druhém pak větší vektor 1. křivosti a menší oskulační kružnici.\n\n[[Image:OKvyrezPopis2.jpg]]\n\n==Algoritmizace==\n;firstCurvature : první křivost,\n;oscullatingCircle : pole reprezentující oskulační kružnici [Stred.X, Stred.Y, polomer].\n public void SetOsculatingCircle()\n {\n c2DPoint P = Fxy(parametr); // actual point\n c2DPoint D1Point = Fxydxy(parametr); // point of the 1st derivation\n c2DPoint D2Point = Fxyddxy(parametr);// point of the 2nd der.\n \n double fraction = (Math.Pow(D1Point.X, 2) + Math.Pow(D1Point.Y, 2)) /\n D1Point.X*D2Point.Y - D1Point.Y*D2Point.X);\n \n oscullatingCircle[0] = P.X - fraction * D1Point.Y; // Center.X (Sx)\n oscullatingCircle[1] = P.Y + fraction * D1Point.X; // Center.Y (Sy)\n oscullatingCircle[2] = 1 / firstCurvature; // Radius (r)\n }\n\nPrvní křivost je popsána [http://en.wikibooks.org/wiki/Cz:firstCurvature zde]\n\n==Autoři==\n\nTento text vypracovali studenti [http://www.inf.upol.cz Univerzity Palackého v Olomouci] katedry Matematické informatiky jako zápočtový úkol do předmětu Počítačová geometrie.','',3,'Woodcraft','20040903085020','',0,0,0,1,0.992789188397,'20040903085020','79959096914979'); INSERT INTO cur VALUES (19,6,'OKvyrezPopis.jpg','','',3,'Woodcraft','20040903085112','',0,0,0,1,0.176394306287537,'20040903085112','79959096914887'); INSERT INTO cur VALUES (20,6,'OKvyrezPopis2.jpg','','',3,'Woodcraft','20040903085240','',0,0,0,1,0.212686402921273,'20040903085240','79959096914759'); INSERT INTO cur VALUES (21,0,'Geometrické_modelování','Model, který představuje navrhovaný reálný objekt (desku plošných spojů, strojnickou součástku,...), obsahuje v různých grafických systémech \'\'rozdílné typy údajů\'\' (geometrické, technologické,...).\n\nGeometrické modelování zkoumá reálné objekty z hlediska \'\'geometrických vlastností\'\'. V následujících kapitolách se budeme zabývat právě problematikou geometrického modelování. Provedeme rozbor základních typů modelů, ukážeme si některé datové reprezentace modelů a nakonec popíšeme základní metody geometrického modelování.\n\n== Typy modelů ==\nV této části se zaměříme na základní klasifikaci jednotlivých typů geometrických modelů a provedeme rozbor výhod a nevýhod těchto typů při geometrickém modelování v rovině či prostoru. Na následujícím obrázku jsou příklady základních typů modelů pro trojboký hranol:\n#\'\'Drátěný model\'\' (Wireframe model) - je určen seznamem devíti hran.\n#\'\'Hraniční model\'\' (Boundary model) - je určen seznamem pěti stěn.\n#\'\'Objemový model\'\' (Volume, Solid model) - je určen velikostí stran podstavy a výškou.\n\n[[Image:model_01.png|Základní typy modelů]]\n\n=== Drátěné (hranové) modely ===\n\nDrátěné (Wireframe) modely jsou reprezentovány hranami objektu a skládají se z bodů, přímek a křivek. První wireframe systémy byly pouze dvou-dimenzionální. Používaly se především na návrhy tištěných spojů. Základními elementy těchto systémů byly body, přímky a oblouky některých kuželoseček. Vnitřní reprezentaci tvořil obvykle seznam úseček a oblouků.\n\nV 70. letech byla wireframe reprezentace použita i pro modelování v prostoru. Zde však vznikaly dost závažné problémy:\n*Možnost vytvoření \'\'nejednoznačných\'\' modelů.\n*Možnost vytvoření \'\'nesmyslných\'\' modelů.\n*Problém \'\'velkého počtu dat\'\' pro \"drátěný\" popis objektu.\n\nPřiklad nejednoznačného modelu je na následujícím obrázku. Z náčrtků je zřejmé, že průmět drátěného modelu může mít více významů. Pokud u modelu vynecháme některé hrany, dostaneme nesmyslný (nonsense) model. U wireframe modelů je právě velice obtížné kontrolovat jejich logickou správnost.\n\n[[Image:model_02.png|Přiklad nejednoznačného modelu]]\n\nPoslední nevýhodou je značné množství dat, které jsou nutné pro úplný popis objektu. Například obecně pro jednoznačné určení kvádru v prostoru stačí výška, šířka, hloubka a poloha. Wireframe model kvádru musí obsahovat souřadnice osmi vrcholů, musí být určeno dvanáct hran a ještě není model jednoznačný.\n\n=== Hraniční (stěnové) modely ===\n\nTato reprezentace (boundary reprezentace) patří k nejpoužívanějším typům při geometrickém popisu objektů. Hraniční model je tvořen seznamem stěn, které daný objekt ohraničují.\n\nNapříklad model trojbokého hranolu je určen pěti stěnami F1, F2, F3, F4, F5.\n\nObecně mohou být stěny rovinné i nerovinné (obecné). Rovinné stěny jsou určeny hraničními hranami stěny (lomenou čarou nebo rovinnými křivkami).\n\nNerovinné stěny mohou být jednak analytické plochy (známe přímo analytický předpis plochy) nebo plochy, které vzniknou některou interpolační nebo aproximační metodou (viz. modelování ploch).\n\nDříve se nejčastěji používala boundary reprezentace s rovinnými stěnami, které byly ohraničeny rovinnými n-úhelníky. Tato reprezentace se používala i pro objekt, jehož hranice byla tvořena obecnými (nerovinnými) plochami. Tyto plochy pak byly aproximovány vhodným počtem n-úhelníků a model daného objektu pak byl mnohostěnem.\n\nDnešní CAD systémy používají i boundary reprezentaci s obecnými plochami.\n\n\n=== Objemové modely ===\n\nObjemový model (solid model, volume model) je model, který v sobě zahrnuje informace o části prostoru, kterou těleso zaujímá.\n\nPro popis objemového modelu se používají tyto způsoby:\n*\'\'B - reprezentace s orientovanými stěnami\'\' - objemový model může být určen seznamem orientovaných stěn (B-reprezentace), které dané těleso ohraničují (stěny mohou být rovinné i nerovinné-viz hraniční modely). Stěna je orientována, jestliže můžeme jednoznačně určit, která strana stěny je vnitřní a která je vnější vzhledem k danému tělesu.\n*\'\'CSG reprezentace\'\' - modelované těleso je reprezentováno binárním stromem, jehož vnitřní uzly představují množinové operace nebo geometrické transformace a listy představují elementární tělesa (primitiva). V poslední době se staly oblíbeními hybridní modely, které v sobě uchovávají současně CSG i B reprezentaci.\n*\'\'Dekompoziční reprezentace\'\' - model je určen seznamem objemových elementů (např. krychliček), které dané těleso vyplňují - např. Octree reprezentace.\n\n== Datové reprezentace modelů ==\n\nPro popis geometrických modelů používají různé grafické systémy různé datové reprezentace. Datová reprezentace modelu je určena jednak typem modelu (datová reprezentace drátěného modelu se bude lišit od datové reprezentace hraničního modelu) a dále je určena operacemi, které se s modelem provádí.\n\n[[Image:model_03.png|Datová reprezentace modelu]]\n\nMějme dán trojboký hranol. Mezi vrcholy (vertex), hranami (edge) a stěnami (face) platí následující vztahy:\n\n[[Image:model_04.png|Vztahy mezi vrcholy, hranami a stěnami]]\n\n== Datové reprezentace drátěných modelů ==\n\n=== E - reprezentace ===\n\nE - reprezentaci tvoří seznam hran, které obsahuje popisovaný objekt. Tuto reprezentaci můžeme použít pro tvorbu rovinného i prostorového modelu. Je výhodná pro rychlé zobrazení rovinného či prostorového modelu, není však vhodná pro řešení geometrických úloh prostorového modelu či řešení viditelnosti. Pro E-model trojbokého hranolu pak platí:\n\n\n
\n \n \n \n \n \n \n \n \n \n \n \n
Seznam hran
E1x1y1z1x2y2z2
E2x2y2z2x3y3z3
E3x3y3z3x1y1z1
E4x1y1z1x4y4z4
E5x2y2z2x5y5z5
E6x3y3z3x6y6z6
E7x4y4z4x5y5z5
E8x5y5z5x6y6z6
E9x6y6z6x4y4z4
\n
\n\n\nModifikací této reprezentace dostaneme dva seznamy - seznam vrcholů a seznam hran. Touto modifikací oddělíme geometrické vlastnosti modelu (souřadnice vrcholů) od topologických (hrana je určena indexy odpovídajících vrcholů).\n\n
\n\n\n
\n \n \n \n \n \n \n \n \n \n \n \n
Seznam hran
E1V1V2
E2V2V3
E3V3V1
E4V1V4
E5V2V5
E6V3V6
E7V4V5
E8V5V6
E9V6V4
\n
\n \n \n \n \n \n \n \n \n
Seznam vrcholů
V1x1y1z1
V2x2y2z2
V3x3y3z3
V4x4y4z4
V5x5y5z5
V6x6y6z6
\n
\n
\n\n=== P - reprezentace ===\n\nP - reprezentace je tvořena seznamem lomených čar, které jsou určeny vrcholy modelovaného objektu. Danou reprezentaci budeme používat pro popis rovinného i prostorového modelu. Rovinný P-model použijeme pro popis rovinné scény, kterou tvoří rovinné křivky a lomené čáry. Prostorový P-model bude popisovat především drátěný model analytické plochy.\n\nP-model je určen dvěma seznamy - seznamem vrcholů a seznamem polygonů. V seznamu vrcholů jsou uloženy jednotlivé lomené čáry (souřadnicemi vrcholů každé lomené čáry), seznam polygonů obsahuje ukazatel na první vrchol každé lomené čáry a počet vrcholů této čáry.\n\nP - model trojbokého hranolu je tvořen těmito seznamy:\n\n\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Seznam vrcholů
V1V2V3V1V4V5V6V4V1V4V2V5V3V6
\n
\n\n

\n\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Seznam polygonů
P1P2\n P3\n P4\n P5\n
145492112132
\n
\n\n\n
\n\n== Datové reprezentace hraničních modelů ==\n\n=== B - reprezentace ===\n\nB - reprezentace je tvořena seznamem stěn, které daný objekt ohraničují. B reprezentací můžeme popisovat nejen mnohostěny, ale i obecné analytické plochy.\n\nV následujícím výkladu se zaměříme na popis datové reprezentace modelu, kterým je mnohostěn.\n\nKe standardním typům B-reprezentace patří popis objektu pomocí tří seznamů:\n*seznam vrcholů,\n*seznam hran,\n*seznam stěn.\n\nTo znamená, že rozšiřuje modifikovanou E-reprezentaci o seznam stěn. Každá stěna je pro tento typ B-reprezentace určena ukazately na hrany v seznamu hran, které tuto stěnu ohraničují.\n\nTrojboký hranol je pak určen těmito seznamy:\n\n
\n
\n\n\n\n\n\n\n\n\n
Seznam stěn
F1E1E5E7E4
F2E2E6E8E5
F3E3E6E9E4
F4E1E2E3
F5E7E8E9
\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n
Seznam hran
E1V1V2
E2V2V3
E3V3V1
E4V1V4
E5V2V5
E6V3V6
E7V4V5
E8V5V6
E9V6V4
\n\n
\n\n\n\n\n\n\n\n\n\n
Seznam vrcholů
V1x1y1z1
V2x2y2z2
V3x3y3z3
V4x4y4z4
V5x5y5z5
V6x6y6z6
\n\n
\n
\n\nJiný typ B-reprezentace popisuje každou stěnu přímo pomocí vrcholů hraničního polygonu. B-model trojbokého hranolu.\n\n== Datové reprezentace objemových modelů ==\n\nV této kapitole se zastavíme pouze u těch datových reprezentací, které určují objemový model pomocí B - reprezentace. Jak již bylo řečeno v kapitole \'\'Objemové modely\'\', jedna z možností definování objemového modelu je pomocí orientovaných stěn, které ohraničují modelované těleso. U mnohostěnů je orientace stěny určena pořadím vrcholů, které určují hraniční polygon této stěny.\n\nPlatí obecná konvence, že pokud se díváme na dané těleso z vnější strany, pak vrcholy každé stěny jsou uspořádány \'\'proti směru pohybu hodinových ručiček\'\'. Orientace stěn je demonstrována na následujícím obrázku.\n\n[[Image:model_05.png|Demonstrace orientace stěn]]\n\nPro objemové modelování se v poslední době nejvíce používá datová reprezentace \'\'okřídlená hrana\'\' (Winged Edge).\n\nWinged Edge reprezentace tělesa obsahuje tři seznamy - seznam stěn, seznam hran a seznam vrcholů.\n\nPro každou stěnu, hranu a vrchol přitom platí:\n*Stěna obsahuje ukazatel na jednu z hran, které tuto stěnu ohraničují.\n*Hrana nese nejvíce informací o topologii tělesa.\n\nKaždá hrana obsahuje ukazatele na:\n*Počáteční vrchol hrany (V1),\n*Koncový vrchol hrany (V2),\n*Levou přilehlou hranu ve vrcholu V1 (E1),\n*Pravou přilehlou hranu ve vrcholu V1 (E2),\n*Levou přilehlou hranu ve vrcholu V2 (E3),\n*Pravou přilehlou hranu ve vrcholu V2 (E4),\n*Levou přilehlou stěnu (F1),\n*Pravou přilehlou stěnu (F2).\n\nVrchol je nositelem geometrických informací, obsahuje souřadnice [x,y,z]. Z definice datové reprezentace okřídlené hrany je zřejmé, že má sice veliké nároky na kapacitu paměti, ale právě její topologie nám umožňuje rychle řešit problémy, které se vyskytují při objemovém modelování:\n#Je dán vrchol, nalezni incidující stěny.\n#Je dána hrana, nalezni koncové vrcholy této hrany.\n#Je dána hrana, nalezni přilehlé stěny.\n#Je dána stěna, nalezni obvodové vrcholy.\n#Je dána stěna, nalezni obvodové hrany.\n\n== Eulerovy operace ==\n\n=== Úvod do topologie ===\n\nV geometrickém modelování se většina algoritmů omezuje na tělesa typu \'\'manifold\'\'.\n\nTento pojem se definuje pomocí algebraické topologie a to pomocí topologické ekvivalence, kterou rozumíme spojité zobrazení euklidovských prostorů, pro které existuje i inverzní zobrazení.\n\n\'\'\'Manifold:\'\'\' Řekneme, že těleso v E3 je manifold, jestliže každý jeho bod má okolí topologicky ekvivalentní s otevřeným okruhem v E3.\n\nK tělesu lze vytvořit rovinný model - graf s možností přidělení orientace k hranám a i s možností jeho ohodnocení. Rovinné oblasti v grafické reprezentaci grafu odpovídají stěnám (plochám) popisovaného tělesa.\n\nPomocí rovinného modelu lze rozhodnout o orientovatelnosti povrchu tělesa.\n\n\'\'\'Orientovatelný model:\'\'\' Rovinný model tělesa je orientovatelný, jestliže pro stejné hrany, které se v modelu vyskytují vícekrát, neexistuje posloupnost hran rovinného modelu, v níž by stejně ohodnocená hrana byla v několika výskytech ve shodné orientaci.\n\n=== Eulerova charakteristika modelu ===\n\nEulerovy operace jsou elementární operace, které umožňují vytváření a modifikace modelů v B reprezentaci. Pomocí Eulerových operací můžeme postupně přidávat nebo odebírat vrcholy, hrany a stěny tělesa tak, aby byla neustále splněna \'\'Eulerova formule\'\'.\n\nPro konvexní tělesa (mnohostěny bez otvorů) platí následující Eulerova rovnost:\n\n:V + F - E = 2\n\nkde:\n\n:V (Vertex) je počet vrcholů\n:F (Face) je počet stěn\n:E (Edge) je počet hran\n\n[[Image:model_06.png|Příklad Eulerovy rovnosti]]\n\nPro mnohostěny s otvory platí zobecněná Eulerova formule:\n\n:V + F - E = H + 2(B - P)\n\nkde:\n\n:B (Body) je počet disjunktních částí tělesa\n:H (Hole) je počet otvorů ve stěnách a \n:P (Passage) je počet děr v tělese.\n\n[[Image:model_07.png|Příklad Eulerovy rovnosti]]\n\nMnožinu Eulerových operací můžeme sestavit různými způsoby. Pro vytváření a modifikaci mnohostěnů bez otvorů stačí následující tři operace:\n*MBFV - vytvoří degenerované těleso o jedné stěně a jednom vrcholu.\n*MEV - vytvoří vrchol a hranu.\n*MFE - vytvoří hranu a stěnu.\n\nKe všem Eulerovým operacím existují operace inverzní, které získáme tak, že v názvu zaměníme M (Make) za K (Kill), což znamená zrušit danou entitu.\n\nNa následujícím obrázku je ukázána podstata Eulerových operací.\n\n[[Image:model_08.png|Příklad Eulerových operací]]\n\nNa následujícím obrázku je příklad vytvoření trojbokého hranolu pomocí Eulerových operací.\n\n[[Image:model_09.png|Příklad Eulerových operací]]\n\nNapříklad po šesti operacích pro počty vrcholů, hran a stěn platí:\n\n:V=5, E=5, F=2.\n\nDosazením do Eulerovy formule snadno ověříme topologickou správnost vytvořené části modelu. Tímto způsobem můžeme ověřit správnost modelu po každé operaci.\n\n== Metody geometrického modelování ==\n\nMetody používané pro tvorbu geometrických modelů můžeme rozdělit do následujících skupin:\n\n\'\'\'Matematické modelování\'\'\'
\nObjekt je v tomto případě popsán \'\'matematickými vztahy\'\'. Například kružnice v rovině se středem v počátku a poloměrem r je určena parametrickými rovnicemi. Tato metoda se používá především při modelování křivek a ploch.\n\n\'\'\'Šablonování\'\'\'
\nV tomto případě je model vytvořen \'\'šablonováním\'\' (pohybem) křivky, plochy nebo tělesa po zvolené trajektorii. Nejčastěji se používá modelování translačních modelů (model vznikne translací šablony) a modelování rotačních modelů (model vznikne rotací šablony).\n\n\'\'\'Rozkladové modely\'\'\'
\nModelovaný objekt je rozložen na \'\'objemové elementy\'\', které pak umíme matematicky popsat. \n\n\'\'\'Konstruktivní geometrie těles\'\'\'
\nModel reálného objektu můžeme vytvořit \'\'kombinací z jednoduchých vzorových těles\'\' (primitiv). Pod pojmem kombinace budeme rozumět prostorové transformace (změna měřítka, posunutí a otočení) a množinové operace (sjednocení, průnik a rozdíl).\n\n\'\'\'Vzorování\'\'\'
\nTato metoda patří mezi nejjednodušší metody geometrického modelování. Metoda vychází ze \'\'zadání vzorů reálných objektů\'\', které jsou parametrizovány. Modely pak vytváříme s použitím transformací nebo modifikací určujících parametrů.\n\n==Autoři==\n\nTento text vypracovali studenti [http://www.inf.upol.cz Univerzity Palackého v Olomouci] katedry Matematické informatiky jako zápočtový úkol do předmětu Počítačová geometrie.','',4,'Lzap','20040921101440','',0,0,0,1,0.47787032578,'20040921101440','79959078898559'); INSERT INTO cur VALUES (22,6,'Model_01.png','Základní typy modelů','Základní typy modelů',4,'Lzap','20040921103518','',0,0,0,1,0.534249126477399,'20040921103518','79959078896481'); INSERT INTO cur VALUES (23,6,'Model_02.png','Nejednoznačný model','Nejednoznačný model',4,'Lzap','20040921103618','',0,0,0,1,0.0331864543568217,'20040921103618','79959078896381'); INSERT INTO cur VALUES (24,6,'Model_03.png','Geometrické modelování','Geometrické modelování',4,'Lzap','20040921103731','',0,0,0,1,0.563184923085556,'20040921103731','79959078896268'); INSERT INTO cur VALUES (25,6,'Model_04.png','Geometrické modelování','Geometrické modelování',4,'Lzap','20040921103740','',0,0,0,1,0.716365283090961,'20040921103740','79959078896259'); INSERT INTO cur VALUES (26,6,'Model_05.png','Geometrické modelování','Geometrické modelování',4,'Lzap','20040921103756','',0,0,0,1,0.892271676931783,'20040921103756','79959078896243'); INSERT INTO cur VALUES (27,6,'Model_06.png','Geometrické modelování','Geometrické modelování',4,'Lzap','20040921103805','',0,0,0,1,0.312262566119677,'20040921103805','79959078896194'); INSERT INTO cur VALUES (28,6,'Model_07.png','Geometrické modelování','Geometrické modelování',4,'Lzap','20040921103813','',0,0,0,1,0.88449783053668,'20040921103813','79959078896186'); INSERT INTO cur VALUES (29,6,'Model_08.png','Geometrické modelování','Geometrické modelování',4,'Lzap','20040921103833','',0,0,0,1,0.485701485058015,'20040921103833','79959078896166'); INSERT INTO cur VALUES (30,6,'Model_09.png','Geometrické modelování','Geometrické modelování',4,'Lzap','20040921103846','',0,0,0,1,0.775013964413678,'20040921103846','79959078896153'); INSERT INTO cur VALUES (31,0,'Lagrangeova_interpolace','==Popis==\n\nChceme-li aproximovat funkci, která je dána svými hodnotami v n+1\nbodech x_i , i = 0,1,...,n (body x_i nazýváme uzly interpolace), a požadujeme-li, aby aproximace procházela zadanými body, použijeme aproximaci interpolačním polynomem. Aproximace nám potom poslouží k získání přibližné hodnoty zadané funkce v libovolném bodě intervalu .\n\nMáme-li zadány hodnoty funkce f v n+1 různých bodech, tzn. máme zadáno n+1 tzv. interpolačních podmínek pro polynom, je zřejmé, že stupeň hledaného polynomu bude n.\nLze ukázat, že mezi všemi polynomy nejvýše n-tého stupně existuje právě jeden, který je interpolačním polynomem pro zadanou funkci. Pro určení interpolačního polynomu existuje několik postupů, ale je třeba si uvědomit, že pro zadanou funkci všechny postupy určí stejný polynom. \n\n\'\'\'Langrangeův interpolační polynom\'\'\' (čteme lagrándžův) je jedním ze známějších a také snadných způsobů interpolace funkce zadané pouze v diskrétních bodech.\n\nNechť tedy máme dáno n+1 bodů, přes které funkce prochází. Pak můžeme pomocí níže popsané rovnice nalézt interpolační funkci, která se původní rovnici snaží co nejvíce přiblížit.\n\n
\n[[Image:Lagrangeova krivka.png]]\n
\nPříklad užití Lagrangeova polynomu pro interpolaci čtyř bodů\n
\n\n==Vyjádření==\n\nLagrangeův interpolační polynom se dá zapsat rovnicí \n\n\nP_n(u) = \\sum_{i=0}^n P_i L_i^n(u),\n\n\nkde \n\n\nL_i^n(u) = \\prod_{j=0, j \\ne i}^n \\frac{u-u_j}{u_i-u_j}\n\n\nkde P_i jsou zadané funkční hodnoty.\n\n==Vlastnosti==\n\nLagrangeův interpolační vzorec má význam především pří teoretickém zkoumání vlastností interpolačních polynomů. Pro praktické počítání ale není příliš výhodný. Například když se rozhodneme přidat další uzlový bod, musíme znovu přepočítat všechny polynomy L_i . V takovém případě je výhodnější použít jiný interpolační algoritmus.\n\nNevýhodou interpolačních polynomů je, že neplatí čím více bodů máme zadáno, tím přesnější funkci dostáváme. Pro jakoukoliv volbu uzlů interpolace vždy existuje spojitá funkce, pro kterou interpolační proces nekonverguje stejnoměrně. Navíc se při větším počtu bodů interpolační funkce na koncích více „vlní“, což v řadě případů nemusí být pro interpolaci zrovna nejlepší.\n\n==Algoritimizace==\n\nMetoda Lagrange počítá hodnotu Lagrangova polynomu zadaného stupně pro daný index a nezávislý parametr t. Uveďme si ještě nějaké poznámky k proměnným a použitým metodám.\n\n; Vector : třída popisující vektor,\n; Richpoint : třída popisující bod,\n; ctrlPoly : body řídícího polygonu.\n\n private double Lagrange(int stupen,int index, double t) { \n double ret=1;\n for (int j=0;j\n[[Image:C1_kubicka_krivka.png]]\n
\nPříklad užití C1 kubické křivky.\n\n\n==Vyjádření==\n\nPro výpočet tečných vektorů opěrných bodů jsme použili metodu BESSEL. Vytvoříme interpolační parabolu G(u) = au^2 + bu + c určenou posloupností tří po sobě jdoucích opěrných bodů (P_{i-1}, P_{i}, P_{i+1}). Tečný vektor prostředního bodu P_{i} počítáme vždy jako derivaci interpolační paraboly tomto bodě. Zvolíme parametrizaci(obvykle G(0)=P_{i-1}, G(1)=P_{i}, G(2)=P_{i+1}) opěrných bodů paraboly, za levé strany těchto tří rovnic dosadíme konkrétní tvary (tj. po dosazení za parametr u) pravých stran paraboly a vypočítáme koeficienty a, b, c (a = {1 \\over 2} (P_{i-1} - 2P_{i} + P_{i+1}), b = {1 \\over 2} (-3P_{i-1} + 4P_{i} - P_{i+1}), c = P_{i-1}). Tyto koeficienty dosadíme do derivace paraboly G\'(u) = 2au + b. Tečný vektor je tedy roven P\'_i = G\'(u) = 2au + b, kde u=1. V případě prvního (resp. posledního) opěrného bodu vytvoříme parabolu z prvních (resp. posledních) tří opěrných bodů a parametr u volíme 0 (resp. 2).\n\n==Vlastnosti==\n\nPro výpočet tečných vektorů by měla být splněna podmínka uniformní parametrizace. \n\n==Algoritimizace==\n\nMetoda HermitovaKubika pro zadaný oblouk křivky (P0 a P1 a jejich tečné vektory P0C a P1C) a parametr vrátí polohový vektor bodu na křivce. Polohový vektor je spočítán pomocí Hermitových kubik. Oblouk je tvořen dvěma po sobě jdoucími body a parametr musí spadat mezi ně.\n\n; Vector : třída popisující vektor,\n; Richpoint : třída popisující bod,\n; ctrlPoly : body řídícího polygonu,\n; P0 : počáteční bod oblouku,\n; P1 : koncový bod oblouku,\n; P0C : derivace v počátečním bodu oblouku,\n; P1C : derivace v koncovém bodu oblouku,\n; t : parametr (musí náležet do daného oblouku).\n\nNejprve si popišme pomocnou funkci VratDerivace, jež vrací pole derivací v opěrných bodech.\n\n RichPoint[] VratDerivace(ArrayList Body) {\n RichPoint[] Derivace=new RichPoint[Body.Count];\n int n=Body.Count;\n int u, j;\n Vector a,b;\n for (int i=0; i<=n-1; i++) {\n // volba j - pro bod na 1. oblouku nutvo volit parabolu prvních\n // 3 bodů a pro poslední oblouk nutno volit parabolu poslední tří bodů\n if(i==0) {\n u=0; // zvolená parametrizace pro první bod paraboly\n j=i+1; // pro první bod počítám derivaci v prvním bodě paraboly\n } else if(i==n-1) {\n u=2; // zvolená parametrizace pro poslední bod paraboly\n j=i-1; // pro poslední bod počítám derivaci v posledním bodě dané paraboly\n } else {\n u=1; // zvolená parametrizace pro vrchol paraboly\n j=i; // jinak\n }\n a = 1f/2*( ((RichPoint)Body[j-1]).Locate -\n 2*((RichPoint)Body[j]).Locate + ((RichPoint)Body[j+1]).Locate );\n b = 1f/2*( -3*((RichPoint)Body[j-1]).Locate +\n 4*((RichPoint)Body[j]).Locate + (-1)*((RichPoint)Body[j+1]).Locate );\n Derivace[i]=new RichPoint(2*a*u+b);\n }\n return Derivace;\n }\n\nA nyní již k vlastnímu algoritmu.\n\n Vector HermitovaKubika(RichPoint P0, RichPoint P1, RichPoint P0C,\n RichPoint P1C, double t) {\n Vector a,b,c,d; //viz skripta - vzorec [J.DRDLA - Počítačová grafika, Olomouc 1991]\n double h,u0;\n h=P1.T-P0.T;\n if(h==0)\n throw new Exception(\"Two or more points cannot have the same parameter\");\n u0 = P0.T;\n a = P0.Locate;\n b = P0C.Locate;\n c = (3f/Math.Pow(h,2))*(P1.Locate+((-1)*P0.Locate)) \n +(-1f/h)*((2*P0C.Locate)+P1C.Locate));\n d = (2f/Math.Pow(h,3))*(P0.Locate+((-1)*P1.Locate)) +\n (1f/Math.Pow(h,2))*(P0C.Locate+P1C.Locate);\n Vector vVysledek;\n vVysledek=a+(t-u0)*b + Math.Pow((t-u0),2)*c + Math.Pow((t-u0),3)*d;\n return vVysledek;\n }\n\nMetoda Hermit pro daný parametr zvolí oblouk křivky a vrátí polohový vektor bodu pro zadaný parametr.\n\n Vector Hermit(double t) {\n this.prpDerivace=VratDerivace(this.ctrlPoly);\n // slouží pro výběr oblouku křivky\n RichPoint PredchoziBod, DalsiBod, DerivacePredchoziho \n DerivaceDalsiho;\n PredchoziBod=DalsiBod=DerivacePredchoziho=DerivaceDalsiho=null;\n // vyberu oblouk křivky pro daný parametr\n for (int i=0; i\n[[Image:C2_kubicka_krivka.png]]\n
\nInterpolační kubická spline přivka\n\n\n==Vyjádření==\n\n; Kubická spline křivka : Mějme dáno \'\'(n + 1)\'\' opěrných bodů \'\'P0,...,Pn\'\' a \'\'(n + 1)\'\' reálných parametrů \'\'u0 <...< un\'\'. Interpolační kubická spline křivka \'\'P(u)\'\' je složena z kubických polynomů \'\'Pi(u)\'\', které musí splňovat tyto podmínky:\n\n\nP_i(u_i) = P_{i-1}(u_i)\n\n\n\nP\'_i(u_i) = P\'_{i-i}(u_i)\n\n\n\nP\'\'_i(u_i) = P\'\'_{i-1}(u_i), i=1, \\dots ,n-1\n\n\nVolbou čísel \'\'u0,...,un\'\' se určuje parametrizace spline křivky. Pro parametrizaci obvykle volíme \'\'ui=i\'\' (Uniformní parametrizace).\n\nPro výpočet kubické spline křivky lze použít kubické polynomy ve tvaru:\n\n
\n\nP_i(u)=a_i + b_i(u - u_i) + c_i(u - u_i)^2 + d_i(u - u_i)^3 , i=0,...,n-1\n\n
\n\nTyto polynomy dosadíme do podmínek pro spline křivku a vyřešíme soustavu \'\'4 × n\'\' rovnic.\n\nSpline křivka je určena \'\'4 × n\'\' koeficienty \'\'ai , bi , ci\'\' a \'\'di\'\'. Ze zadání \'\'(n + 1)\'\' opěrných bodů a z podmínek pro kubický spline však dostáváme pouze \'\'(4×n - 2)\'\' podmínek. Aby byla soustava jednoznačně rešitelná, musíme ješte určit další dvě podmínky. Nejčastěji se volí jedna z následujících možností:\n\n# Vektory prvních derivací v krajních bodech \'\'P´0\'\' a \'\'P´n\'\'.\n# Vektory druhých derivací v krajních bodech \'\'P´´0\'\' a \'\'P´´n\'\'. Pokud použijete \'\'P´´0=0\'\' a \'\'P´´n=0\'\' hovoříme o přirozené spline křivce.\n# Křivka je uzavřená.\n\nPři výpočtu kubické spline křivky se obvykle postupuje tak, že nejdříve vypočteme tečné vektory \'\'P´0,...,P´n\'\'. Jednotlivé kubiky \'\'Pi(u)\'\' pak můžeme vyjádřit pomocí Hermitovy interpolace.\n\nJako ukázku implementace jsme zvolili druhou možnost (přirozený kubický splajn). Z podmínek \'\'P´´(u 0)=0\'\' a \'\'P´´(u n)=0\'\' dostaneme soustavu \'\'(n+1)\'\' rovnic pro výpočet tečných vektorů \'\'P´0,...,P´n\'\'. Zvolíme-li uniformní parametrizaci, pak platí:\n\n\n\\begin{bmatrix}\n2 & 1 & 0 & & & \\ldots & 0 \\\\\n1 & 4 & 1 & 0 & & \\ldots & 0 \\\\\n0 & 1 & 4 & 1 & 0 & \\ldots & 0 \\\\\n\\vdots & & & & & & \\vdots \\\\\n0 & \\ldots & & 0 & 1 & 4 & 1 \\\\\n0 & \\ldots & & & 0 & 1 & 2\n\\end{bmatrix}\n\\cdot\n\\begin{bmatrix}\n P\'_0 \\\\ P\'_1 \\\\ \\vdots \\\\ P\'_n \n\\end{bmatrix}\n=\n\\begin{bmatrix}\n 3 \\cdot (P_1 - P_0) \\\\ 3 \\cdot (P_2 - P_0) \\\\ \\vdots \\\\ 3 \\cdot (P_n - P_{n-2}) \\\\ 3 \\cdot (P_n - P_{n-1})\n\\end{bmatrix}\n\n\n==Vlastnosti==\n\nU C2 kubických splajnů je zajištěna spojitá derivace až do stupně 2. Používají se polynomy lichého stupně z důvodu vzniku pouze pásové matice s kterou se podstatně lépe pracuje, ale hlavně kvůli složitosti výpočtu.\n\n==Algoritimizace==\n\nUveďme si nejdříve nějaké poznámky k proměnným a použitým metodám.\n\n; Vector : třída popisující vektor,\n; Richpoint : třída popisující bod,\n; ctrlPoly : body řídícího polygonu.\n\nA nyní již k vlastnímu algoritmu.\n\n=== Metoda Vector GetPoint(double t) ===\n\nK zadanému parametru vrátí polohový vektor bodu na křivce.\n\n public override Vector GetPoint(double t) \n {\n // preventivně setřídím body\n ctrlPoly.Sort();\n // definice krajních bodů a tečných vektorů\n RichPoint b1, b2;\n Vector db1, db2;\n b1 = b2 = null;\n db1 = db2 = null;\n // předpočítání derivací\n Vector[] deriv = derivace();\n // zkoumání polohy parametru pro určení krajních bodů\n for (int i=0; i=0; j--)\n {\n deriv[j] = (f[j] - c[j] * deriv[j+1]) / e[j];\n }\n return deriv;\n }\n\n===Metoda Vector hermitovaKubika(...) ===\n\nSpočítá a do vnitřní proměnné (pole richpointů) uloží derivace v bodech křivky. Derivace jsou počítány pomocí FMILL a v krajních bodech pomocí BESSEL. Body musejí mít UNIFORMNÍ PARAMETIZACI.\n\n Vector hermitovaKubika(RichPoint P0, RichPoint P1, Vector P0C, Vector P1C, double t)\n {\n /// POZOR\n /// při násobení zlomkem (3/2) je nutno UVÉST TYP (3f/2), jinak celočíselné dělení\n /// POZOR\n /// definice koeficientů\n Vector a,b,c,d;\n double h,u0;\n // kontrola parametrů bodů\n h = P1.T - P0.T;\n if (h==0)\n throw new Exception(\"Two or more points cannot have the same parameter\");\n u0=P0.T;\n // koeficienty viz skripta - vzorec [J.DRDLA - Počítačová grafika, Olomouc 1991]\n a = P0.Locate;\n b = P0C;\n c = (3f/Math.Pow(h,2)) * (P1.Locate + ((-1)*P0.Locate)) + \n ((-1f/h) * ((2*P0C) + P1C));\n d = (2f/Math.Pow(h,3)) * (P0.Locate + ((-1)*P1.Locate)) +\n (1f/Math.Pow(h,2)) * (P0C + P1C);\n // dosazení koeficientů do rovnice\n Vector vysledek;\n vysledek = a+(t-u0)*b + Math.Pow((t-u0),2)*c + Math.Pow((t-u0),3)*d;\n return vysledek;\n }\n\n=== Metoda Vector GetPoint(double t) ===\n\nPřetěžovaná metoda třídy Curve. V zadaném parametru vrátí polohový vektor bodu na křivce.\n\n public override Vector GetPoint(double t) \n {\n double w = ((RichPoint) ctrlPoly[0]).T;\n double w1 = ((RichPoint) ctrlPoly[0]).T;\n for (int q=0; qw) w=((RichPoint) ctrlPoly[q]).T;\n if (((RichPoint) ctrlPoly[q]).Tw) w=((RichPoint) ctrlPoly[q]).T; \n }\n RichPoint tw = new RichPoint(new Vector(), w+0.1);\n return tw;\n }\n\n==Autoři==\n\nTento text vypracovali studenti [http://www.inf.upol.cz Univerzity Palackého v Olomouci] katedry Matematické informatiky jako zápočtový úkol do předmětu Počítačová geometrie.','',4,'Lzap','20040921110930','',0,0,0,1,0.205766673761,'20040921110930','79959078889069'); INSERT INTO cur VALUES (36,6,'C2_kubicka_krivka.png','Geometrické modelování','Geometrické modelování',4,'Lzap','20040921110943','',0,0,0,1,0.57002946601252,'20040921110943','79959078889056'); INSERT INTO cur VALUES (37,6,'Hermitova_kubika.png','Geometrické modelování','Geometrické modelování',4,'Lzap','20040921111039','',0,0,0,1,0.555791983898535,'20040921111057','79959078888960'); INSERT INTO cur VALUES (38,0,'Hermitova_kubika','==Popis==\n\nZnáme-li dva řídící body a jejich tečné vektory, můžeme použít Hermitovu interpolaci a nalézt tzv. Hermitovu kubiku. Poloha této křivky je tedy určena dvěma řídícími body a její tvar závísí na velikosti a směru jejich tečných vektorů. Této interpolace se využívá např. v [http://wikibooks.org/wiki/Cz:C1_kubick%C3%A1_interpolace C1 kubické interpolaci,]která je představitelem interpolace po obloucích.\n\n
\n[[Image:Hermitova_kubika.png]]\n
\nPříklad užití Hermitovy kubiky\n
\n\n==Vyjádření==\n\nHemitova kubika bývá nejčastěji vyjádřena ve tvaru\n\n\nP(u) = H_0^3(u)P_0 + H_1^3(u)P_0^\' + H_2^3(u)P_1 + H_3^3(u)P_1^\',\n\n\nkde\n\nP_0, P_1, P_0^\', P_1^\' jsou tzv. geometrické koeficienty,\n\nH_i^3(u) jsou kubické Hermitovy polynomy tvaru:\n\n\nH_0^3(u) = 2u^3 - 3u^2 + 1\n\n\n\nH_1^3(u) = u^3 - 2u^2 + u\n\n\n\nH_1^3(u) = - 2u^3 + 3u^2\n\n\n\nH_3^3(u) = u^3 - u^2\n\n\na u náleží do intervalu (0,1).\n\nZároveň platí:\n\nP (0) = P_0, P (1) = P_1, P^\'(0) = P_0^\', P^\'(1) = P_1^\'\n\n==Vlastnosti==\n\nČím je velikost vektoru větší, tím více se k němu křivka přimyká. Jsou-li oba vektory nulové, pak křivka degeneruje na úsečku mezi zadanými body.\n\n==Algoritmizace==\n\nImplementace se skládá ze dvou stěžejních funkcí:\n\n; hermituvPolynom(int m, double t) : implementace Hermitových polynomů,\n; GetPoint(double t) : vrací bod pro parametr t (z intervalu (0,1)) na Hermitově kubice.\n\nPopišme si některé třídy a metody, jež algoritmus využívá.\n\n; Vector : třída popisující vektor,\n; Math : objekt prostředí CLR nabízející matematické metody,\n; Math.Pow : mocnina,\n; Richpoint : třída popisující bod,\n; ctrlPoly : body řídícího polygonu.\n\n\n // Vraci kubicky hermituv polynom H^3_k\n private double hermituvPolynom(int m, double t)
\n {\n double result = 0;\n switch(m) // index hermitova polynomu\n {\n case(0): result=2*Math.Pow(t,3)-3*Math.Pow(t,2)+1; break;\n case(1): result=Math.Pow(t,3)-2*Math.Pow(t,2)+t; break;\n case(2): result=-2*Math.Pow(t,3)+3*Math.Pow(t,2); break;\n case(3): result=Math.Pow(t,3)-Math.Pow(t,2); break;\n }\n return result;\n }\n\n // vrací bod na Hermitove kubice\n public override Vector GetPoint(double t)
\n {\n Vector result=new Vector(); // vysledny vektor\n Vector v;\n int kubika = 4;\n for (int k = 0, ictr=0, ideriv=0 ; k < kubika; k++) // vypocitam hodnoty pro ridici body\n {\n v = k%2==0 ? \n ((RichPoint)ctrlPoly[ictr++]).Locate : // ridici body\n (Vector)tecneVektory[ideriv++]; // tecne vektory\n result+=hermituvPolynom(k, t)*v;\n }\n return result;\n }\n\n==Autoři==\n\nTento text vypracovali studenti [http://www.inf.upol.cz Univerzity Palackého v Olomouci] katedry Matematické informatiky jako zápočtový úkol do předmětu Počítačová geometrie.','',4,'Lzap','20040921111046','',0,0,0,1,0.629414716563,'20040921111046','79959078888953'); INSERT INTO cur VALUES (39,6,'Bezierova_krivka.png','Geometrické modelování','Geometrické modelování',4,'Lzap','20040921111116','',0,0,0,1,0.0688715521887611,'20040921111226','79959078888883'); INSERT INTO cur VALUES (40,0,'Bézierova_křivka','==Popis==\n\n\'\'\'Bézierova křivka\'\'\', nesprávným pravopisem \'\'Beziérova křivka\'\', je další metodou vytváření křivek. Tato metoda umožnuje interaktivní vytvárení a modifikaci krivek. Pomocí této metody mužete rovněž datově reprezentovat i interpolační křivky (existují například algoritmy na převod mezi\ninterpolačními spline kubikami a B-spline kubikami resp. Bézier kubikami).\n\n
\n[[Image:Bezierova_krivka.png]]\n
\nPříklad užití Bézierovy křivky\n
\n\n==Vyjádření==\n\nBézierova křivka stupně \'\'n\'\' je určena rovnicí:\n\n\nP(u) = \\sum_{i=0}^n P_i B_i^n(u),\n\n\nkde: \n\nu \\in <0, 1>,\n\nP_i jsou polohové vektory vrcholů řídícího polynomu (tzv. Bézierovy body)\n\nB_i^n(u) jsou tzv. Bernsteinovy polynomy \'\'n\'\'-tého stupně,\n\npro které platí:\n\n\nB_i^n(u) = {n \\choose i} u^i (1-u)^{n-i}, i = 0,1,...n\n\n\n==Vlastnosti==\n\n===Nezáporná hodnota===\n\nB_i^n(u) \\ge 0 pro všechny hodnoty i = 0,...,n a pro všechna u \\in <0, 1>.\nTato vlastnost plyne z toho, že pro u \\in <0, 1> jsou všechny součinitele v definici Bézierových polynomů nezáporné.\n\n===Jednotkový součet===\n\n\\sum_{i=0}^n P_i B_i^n(u) = 1 pro všechny hodnoty u \\in <0, 1>\n\nPlyne přímo z binomické věty. Platí totiž:\n\n1 = (u + (1 - u))^n = \\sum_{i=0}^n {n \\choose i} u^i (1 - u)^{n-i} = \\sum_{i=0}^n B_i^n (u)\n\n===Koncové podmínky===\n\nB_o^n(0)= B_n^n(1) = 1\n\n===Maximum===\n\nB_i^n(u) nabývá právě jednoho maxima na u \\in <0, 1>, a to pro u = {i \\over n}\n\n===Symetrie===\n\nPro libovolné n je množina polynomů B_i^n(u) symetrická podle u = {1 \\over 2}\n\n===Rekurentní vztah===\n\nB_i^n(u) = (1-u) \\cdot B_i^{n-i}(u) + u \\cdot B_{i-1}^{n-i}(u)\n\na:\n\nB_0^0(u) = 1\n\nRekurentní vztah vyplývá ze vztahu pro kombinační čísla:\n\n{n \\choose i} = {(n-1) \\choose i} + {(n-1) \\choose (i-1)}\n\n===Derivace===\n\n{dB_i^n(u) \\over du} = n(B_{i-1}^{n-i}(u) - B_i^{n-i}(u))\n\n==Algoritimizace==\n\n===Factorial(int a)===\n\nPomocná metoda pro výpočet faktoriálu pro kombinační číslo.\n\n\n int Factorial(int a)\n {\n if (a==0) return 1;\n else\n return (a* Factorial(a-1));\n }\n\n\n===Combin(int a, int b)===\n\nPomocná metoda pro výpočet kombinačního čísla pro výpočet bodů Bernsteinova polynomu.\n\n\n public int Combin(int a, int b)\n {\n return Factorial(a)/(Factorial(a-b)*Factorial(b));\n }\n\n\n===BernsteinPolynom(int k,int i,double t)===\n\nMetoda pro výpočet bodů polynomu.\n\n\n public double BernsteinPolynom(int k,int i,double t)\n {\n return Combin(k,i)*Math.Pow(t,i)*Math.Pow(1-t,k-i);\n }\n\n\n===Vector GetPoint(double t)===\n\nPřetěžovaná metoda třídy Curve. V zadaném parametru vrátí polohový vektor bodu na křivce.\n\n\n public override Vector GetPoint(double t) \n {\n Vector ret = new Vector();\n Vector v;\n for (int i = 0;i\n\n===RichPoint CreateRichPoint()===\n\nPřetěžovaná metoda třídy Curve. Vytvoření řídícího bodu pro křivku. Oproti rodiči má navíc rozšíření o váhový koeficient.\n\n\n public override RichPoint CreateRichPoint()\n {\n double w = ((RichPoint) ctrlPoly[0]).T; \n for (int q=0; qw) w=((RichPoint) ctrlPoly[q]).T; \n }\n RichPoint tw = new RichPoint(new Vector(), w+0.1);\n return tw;\n }\n\n\n== Podívejte se též na ==\n* [http://www.hyperkrychle.cz/curves/beziern.html Obecné Bézierovy křivky] CZ\n* [http://www.sunsite.ubc.ca/LivingMathematics/V001N01/UBCExamples/Bezier/bezier.html Living Math Bézier applet] EN\n\n==Autoři==\n\nTento text vypracovali studenti [http://www.inf.upol.cz Univerzity Palackého v Olomouci] katedry Matematické informatiky jako zápočtový úkol do předmětu Počítačová geometrie.','',4,'Lzap','20040921111144','',0,0,0,1,0.375486667443,'20040921111144','79959078888855'); INSERT INTO cur VALUES (41,6,'Racionalni_Bezierova_krivka.png','Geometrické modelování','Geometrické modelování',4,'Lzap','20040921111210','',0,0,0,1,0.676981839981844,'20040921111210','79959078888789'); INSERT INTO cur VALUES (42,0,'Racionální_Bézierova_křivka','==Popis==\n\n\'\'\'Bézierova křivka\'\'\', nesprávným pravopisem \'\'Beziérova křivka\'\', je další metodou vytváření křivek. Tato metoda umožnuje interaktivní vytvárení a modifikaci krivek. Pomocí této metody mužete rovněž datově reprezentovat i interpolační křivky (existují například algoritmy na převod mezi\ninterpolačními spline kubikami a B-spline kubikami resp. Bézier kubikami).\n\n
\n[[Image:Bezierova_krivka.png]]\n
\nPříklad užití Bézierovy křivky\n
\n\n==Vyjádření==\n\nBézierova křivka stupně \'\'n\'\' je určena rovnicí:\n\n\nP(u) = \\sum_{i=0}^n P_i B_i^n(u),\n\n\nkde: \n\nu \\in <0, 1>,\n\nP_i jsou polohové vektory vrcholů řídícího polynomu (tzv. Bézierovy body)\n\nB_i^n(u) jsou tzv. Bernsteinovy polynomy \'\'n\'\'-tého stupně,\n\npro které platí:\n\n\nB_i^n(u) = {n \\choose i} u^i (1-u)^{n-i}, i = 0,1,...n\n\n\n==Vlastnosti==\n\n===Nezáporná hodnota===\n\nB_i^n(u) \\ge 0 pro všechny hodnoty i = 0,...,n a pro všechna u \\in <0, 1>.\nTato vlastnost plyne z toho, že pro u \\in <0, 1> jsou všechny součinitele v definici Bézierových polynomů nezáporné.\n\n===Jednotkový součet===\n\n\\sum_{i=0}^n P_i B_i^n(u) = 1 pro všechny hodnoty u \\in <0, 1>\n\nPlyne přímo z binomické věty. Platí totiž:\n\n1 = (u + (1 - u))^n = \\sum_{i=0}^n {n \\choose i} u^i (1 - u)^{n-i} = \\sum_{i=0}^n B_i^n (u)\n\n===Koncové podmínky===\n\nB_o^n(0)= B_n^n(1) = 1\n\n===Maximum===\n\nB_i^n(u) nabývá právě jednoho maxima na u \\in <0, 1>, a to pro u = {i \\over n}\n\n===Symetrie===\n\nPro libovolné n je množina polynomů B_i^n(u) symetrická podle u = {1 \\over 2}\n\n===Rekurentní vztah===\n\nB_i^n(u) = (1-u) \\cdot B_i^{n-i}(u) + u \\cdot B_{i-1}^{n-i}(u)\n\na:\n\nB_0^0(u) = 1\n\nRekurentní vztah vyplývá ze vztahu pro kombinační čísla:\n\n{n \\choose i} = {(n-1) \\choose i} + {(n-1) \\choose (i-1)}\n\n===Derivace===\n\n{dB_i^n(u) \\over du} = n(B_{i-1}^{n-i}(u) - B_i^{n-i}(u))\n\n==Algoritimizace==\n\n===Factorial(int a)===\n\nPomocná metoda pro výpočet faktoriálu pro kombinační číslo.\n\n\n int Factorial(int a)\n {\n if (a==0) return 1;\n else\n return (a* Factorial(a-1));\n }\n\n\n===Combin(int a, int b)===\n\nPomocná metoda pro výpočet kombinačního čísla pro výpočet bodů Bernsteinova polynomu.\n\n\n public int Combin(int a, int b)\n {\n return Factorial(a)/(Factorial(a-b)*Factorial(b));\n }\n\n\n===BernsteinPolynom(int k,int i,double t)===\n\nMetoda pro výpočet bodů polynomu.\n\n\n public double BernsteinPolynom(int k,int i,double t)\n {\n return Combin(k,i)*Math.Pow(t,i)*Math.Pow(1-t,k-i);\n }\n\n\n===Vector GetPoint(double t)===\n\nPřetěžovaná metoda třídy Curve. V zadaném parametru vrátí polohový vektor bodu na křivce.\n\n\n public override Vector GetPoint(double t) \n {\n Vector ret = new Vector();\n Vector v;\n for (int i = 0;i\n\n===RichPoint CreateRichPoint()===\n\nPřetěžovaná metoda třídy Curve. Vytvoření řídícího bodu pro křivku. Oproti rodiči má navíc rozšíření o váhový koeficient.\n\n\n public override RichPoint CreateRichPoint()\n {\n double w = ((RichPoint) ctrlPoly[0]).T; \n for (int q=0; qw) w=((RichPoint) ctrlPoly[q]).T; \n }\n RichPoint tw = new RichPoint(new Vector(), w+0.1);\n return tw;\n }\n\n\n== Podívejte se též na ==\n* [http://www.hyperkrychle.cz/curves/beziern.html Obecné Bézierovy křivky] CZ\n* [http://www.sunsite.ubc.ca/LivingMathematics/V001N01/UBCExamples/Bezier/bezier.html Living Math Bézier applet] EN\n\n==Autoři==\n\nTento text vypracovali studenti [http://www.inf.upol.cz Univerzity Palackého v Olomouci] katedry Matematické informatiky jako zápočtový úkol do předmětu Počítačová geometrie.','',4,'Lzap','20040921111224','',0,0,0,1,0.032841449619,'20040921111224','79959078888775'); INSERT INTO cur VALUES (43,6,'SKladaniBeziera-Polygon.JPG','Geometrické modelování','Geometrické modelování',4,'Lzap','20040921111326','',0,0,0,1,0.178294574076584,'20040921111434','79959078888673'); INSERT INTO cur VALUES (44,6,'SkladaniiBeziera.JPG','Geometrické modelování','Geometrické modelování',4,'Lzap','20040921111333','',0,0,0,1,0.860527381171032,'20040921111434','79959078888666'); INSERT INTO cur VALUES (45,6,'Výpočet_bodu_na_Bézierově_kubice_pomocí_algoritmu_de_Casteljau.JPG','Geometrické modelování','Geometrické modelování',4,'Lzap','20040921111340','',0,0,0,1,0.767753214359054,'20040921111434','79959078888659'); INSERT INTO cur VALUES (46,6,'ZvyseniStupneCasteljau.JPG','Geometrické modelování','Geometrické modelování',4,'Lzap','20040921111351','',0,0,0,1,0.257183959015816,'20040921111434','79959078888648'); INSERT INTO cur VALUES (47,0,'Algoritmus_de_Casteljau','==Popis==\n\nPro řadu algoritmů s Bézierovou křivkou (výpočet bodu na křivce, zvýšení stupně Bézierovy křivky, rozdělení Bézierovy křivky atd.) bude základem \'\'\'algoritmus de Casteljau\'\'\'. Ukážeme si základní principy tohoto algoritmu.\n\n==Vyjádření==\n\nVýchozím algoritmem je rekurentní výpočet Bernsteinových polynomů.\n\n\nB_i^n (u)=(1-u)B_i^{n-1} + uB_{i-1}^{n-1}\n\n\nVlastní algoritmus de Casteljau vypadá takto:\n\n\nP_i^k = (1-u)P_{i-1}^{k-1} + uP_i^{n-1}\n\nkde k = 1,...,n; i = 0,...,n-k\n\n==Výpočet bodu na Bézierově křivce==\n\nPro výpočet bodu na Bézierově křivce můžeme použít algoritmus de Casteljau.\n\n
\n[[Image:Výpočet_bodu_na_Bézierově_kubice_pomocí_algoritmu_de_Casteljau.JPG|Výpočet bodu na Bézierově kubice pomocí algoritmu de Casteljau]]\n
\n\nKdyž si výpočet graficky znázorníme (viz obrázek), zjistíme, že se ve skutečnosti nejedná o nic jiného, než o postupné dělení úseček řídícího polygonu v zadaném poměru . Počet nově vzniklých bodů se v každém kroku zmenšuje o 1 a ve chvíli, kdy zůstane bod jediný, dostaneme hledaný bod křivky.\nBod na Bézierově křivce můžeme rovněž vypočítat přímo pomocí vektorové rovnice Bézierovy křivky, kdy použijeme algoritmus pro výpočet Bernsteinových polynomů\n\n==Rozdělení Bézierovy křivky==\n\nPro rozdělení Bézierovy křivky v daném bodě na dvě křivky použijeme modifikovaného algoritmu de Casteljau. Pokud chceme rozdělit Bézierovu kubiku, bude dělícím bodem bod P_3^3 a nově vytvořené kubiky budou určeny řídícími polygony:\n\n\nP^1 (u) : P_0^0,P_1^1,P_2^2,P_3^3,P_4^4,P_5^5\n \n\n\nP^2 (u) : P_5^5,P_5^4,P_5^3,P_5^2,P_5^1,P_5^0\n\n\n==Skládání Bézierových křivek==\n\nPodmínkou hladkého spojení Bézierových křivek je zajištění požadované spojitosti (parametrické nebo geometrické) ve společném bodě těchto křivek. \nMějme dánu Bézierovu křivku P = P(u), u ∈ <0,1> řídícím polygonem P_i (i=0,..,n) a Bézierovu křivku Q = Q(v), v ∈ <0,1> řídícím polygonem Q_j (j=0,...,n) . Předpokládejme, že platí:\n\n P(1) = Q(0) - počáteční bod křivky Q(v) je koncovým bodem křivky P(u).\n\nPro tečné vektory P\'(1), Q\'(0)platí:\n\n \n P\'(1) = m(P_m - P_{m-1})\n \n \n Q\'(1) = n(Q_1 - Q_0)\n \n\n
\n[[Image:SkladaniiBeziera.JPG|Skládání Bézierových křivek]]\n
\n\nPokud chceme pro Bézierovy křivky ve společném bodě zajistit C1 spojitost (totožné tečné vektory), musí platit:\n\n \n n(Q_1 - Q_0) = m(P_m - P_{m-1})\n \n\nPro P_m = Q_0 dostaneme z této rovnice vztah pro výpočet bodu Q_1:\n\n \n Q_1 = m/n (P_m - P_{m-1}) + P_m\n \n\nNa následujícím obrázku jsou ukázány dvě Bézierovy křivky, které jsou C1 spojité. Všimněte si závislosti velikosti první strany řídícího polygonu Gi na stupni této křivky.\n\n
\n[[Image:SKladaniBeziera-Polygon.JPG|Skládání Bézierových křivek]]\n
\n\nPokud nemají obě křivky stejnou parametrizaci, je výpočet vrcholů navazujícího polygonu (který má být C1 nebo C2 spojitý) závislý na poměru parametrizace: Δ u_0 : Δ u_1 .\nNa následujícím obrázku můžeme porovnat, jak vypadá grafické znázornění požadavku spojitosti C1 a C2. Stupeň spojitosti určuje počet definovaných vrcholů nově vytvořeného řídícího polygonu. Pro skládání křivek můžeme rovněž použít upraveného algoritmu de Casteljau.\n\n==Zvýšení stupně Bézierovy křivky==\n\nČastým technickým požadavkem při modelování křivek bývá přidání dalšího bodu do řídícího polygonu tak, aby se výsledný tvar křivky nezměnil (hovoříme o zvýšení stupně aproximační křivky). Pro vyřešení tohoto problému můžeme použít modifikovaný algoritmus de Casteljau.\n\nPokud si vrcholy původního řídícího polygonu označíme jako P_0^0,...,P_n^0, pak pro vrcholy nového řídícího polygonu platí:\n\n \n P_i^1 = u_i P_{i-1}^0 + (1 - u_i) P_i^0\n\n\nkde \n\n \n u_i = i/(n+1), i = 0,...,n+1\n\n\n
\n[[Image:ZvyseniStupneCasteljau.JPG|Zvýšení stupně Bézierovy křivky]]\n
\n\nPři bližším pohledu na uvedený postup zjistíme, že neděláme nic jiného, než že původní parametr u jakoby „rozsekáme“ na n . (n+1) částí, kdy původní body jsou umístěny vždy v násobcích (n+1) a nové body umístíme do násobků n. Graficky vzato, každou úsečku původního řídícího polygonu rozdělíme na (n+1) stejných částí a pak po každých n dílcích umístíme bod nový.\n\n==Algoritmizace==\n\nVrací bod na Bézierově křivce v obecném parametru s
\n
\n		public override Vector GetPoint(double s)\n		{\n			int n = ControlPoly.Count;\n			double t =  (s - StartParam)/(EndParam-StartParam);\n			Vector[] points = new Vector[n];\n			for (int i=0;i\nRozdělí Bézierovu křivku na dvě v bodě určeném prametrem s\n
\ns - parametr, ve kterém se má bod rozdělit\nc1 - první nová křivka\nc2 - druhá nová křivka\n		public override void Split(double s, out Curve c1, out Curve c2)\n		{\n			int n = ControlPoly.Count;\n			if (n>=2)\n			{\n				double t =  (s- StartParam)/(EndParam-StartParam);\n				Vector[] pointsc1 = new Vector[n];\n				Vector[] pointsc2 = new Vector[n];\n				Vector[] points= new Vector[n];\n				for (int i=0;i\nVrátí Bezierovu křivku o stupeň vyšší
\n
\n		public void IncreaseDegreeByOne()\n		{\n			double ti=0;\n			int n = ControlPoly.Count;\n			Vector[] points= new Vector[n];\n			for (int i=0;i\n\n==Autoři==\n\nTento text vypracovali studenti [http://www.inf.upol.cz Univerzity Palackého v Olomouci] katedry Matematické informatiky jako zápočtový úkol do předmětu Počítačová geometrie.','',4,'Lzap','20040921111414','',0,0,0,1,0.958553234562,'20040921111414','79959078888585');
INSERT INTO cur VALUES (48,6,'Bezier_koefs.jpg','Geometrické modelování','Geometrické modelování',4,'Lzap','20040921111435','',0,0,0,1,0.982660182735566,'20040921111505','79959078888564');
INSERT INTO cur VALUES (49,0,'Racionální_algoritmus_de_Casteljau','== Popis ==\n\nJestliže položíme \n\n P_i^0 = P_i  a  w_i^0 = w_i , pak pro každé \n i = 0,...,n  platí:\n\n P_i^k = (1-u) \\frac{w^{k-1}_{i-1}}{w_i^k}P_{i-1}^{k-1} +\nu \\frac{w_i^{k-1}}{w_i^k}P_i^{k-1} ,kde\n\nw_i^k = (1-u)w^{k-1}_{i-1} + uw_i^{k-1} \n\nJak je vidět, jediným rozdílem oproti klasickému algoritmu de Casteljau je fakt, že do výpočtu zahrnujeme váhové parametry, a pro každý nový bod\nspočítáme jeho poměrnou váhu vzhledem k bodům předešlým.\n\nPomocí váhových koeficientů lze měnit tvar Bézierovy křivky, s rostoucím\nváhovým koeficientem se křivka k danému bodu \"přibližuje\", jak je vidět na\nnasledujícím obrázku.\n\n
\n[[Image:bezier_koefs.jpg]]\n
\n\n== Algoritmizace ==\n\nSyntetické algoritmy nad racionálními bézierovými křivkami jsou téměř\ntotožné jako algorimy nad obyčejnými bézierovými křivkami, pouze se\npočítá v o jednu dimenzi vyšším prostoru. V naší implementaci není\ntakový vektor zahrnut, proto se v následujích metodách počítá\ns váhovou složkou zvlášť.\n\nNejprve si popišme pomocné metody a třídy:\n\n; Vector : třída pro vektor ve 2D,\n; RacionalRichPoint : třída pro racionální bod a jeho parametrizaci,\n; Vector.lerp : metoda pro lineární interpolaci dvou bodů,\n; ctrlPoly : řídící polygon.\n\n=== public override Vector GetPoint ===\n\nFunkce GetPoint slouží k výpočtu polohového vektoru příslušného k bodu\nna křivkce pro daný parametr.\n\n
\nublic override Vector GetPoint(double s)\n		{\n			int n = ControlPoly.Count;\n			double t =  (s - StartParam)/(EndParam-StartParam);\n			Vector[] points = new Vector[n];\n			double[] weights = new double[n];\n			for (int i=0;i\n\n=== public override void Split ===\n\nRozdělí Bézierovu křivku na dvě v bodě určeném prametrem s.\nPoužívá modifikovaný algoritmus de Casteljau pro výpočet\nbodu na křivce.\n\n
\n  public override void Split(double s, out Curve c1, out Curve c2)\n		{\n			int n = ControlPoly.Count;\n			if (n>=2)\n			{\n				double t =  (s- StartParam)/(EndParam-StartParam);\n				Vector[] points= new Vector[n];\n				double[] weights= new double[n];\n				Vector[] pointsc1 = new Vector[n];\n				Vector[] pointsc2 = new Vector[n];\n				double[] weightsc1 = new double[n];\n				double[] weightsc2 = new double[n];\n				for (int i=0;i\n\n=== public RationalBezierSynteticly IncreaseDegree ===\n\nFunkce vrací křivku se zvýšeným stupněm.\n\n
\n  public void  IncreaseDegree()\n		{\n			for (int i=0;i\n\n==Autoři==\n\nTento text vypracovali studenti [http://www.inf.upol.cz Univerzity Palackého v Olomouci] katedry Matematické informatiky jako zápočtový úkol do předmětu Počítačová geometrie.','',4,'Lzap','20040921111502','',0,0,0,1,0.184360571757,'20040921111502','79959078888497');
INSERT INTO cur VALUES (50,6,'Curves_bspline_basefce-opty.png','Geometrické modelování','Geometrické modelování',4,'Lzap','20040921111616','',0,0,0,1,0.141749067364027,'20050216104213','79959078888383');
INSERT INTO cur VALUES (51,6,'Curves_bspline_bezier-opty.png','Geometrické modelování','Geometrické modelování',4,'Lzap','20040921111629','',0,0,0,1,0.760764819347081,'20040921111801','79959078888370');
INSERT INTO cur VALUES (52,6,'Curves_bspline_convex-opty.png','Geometrické modelování','Geometrické modelování',4,'Lzap','20040921111635','',0,0,0,1,0.378576925376967,'20040921111801','79959078888364');
INSERT INTO cur VALUES (53,6,'Curves_bspline_degree-opty.png','Geometrické modelování','Geometrické modelování',4,'Lzap','20040921111646','',0,0,0,1,0.61059019957724,'20040921111801','79959078888353');
INSERT INTO cur VALUES (54,6,'Curves_bspline_doublepoint-opty.png','Geometrické modelování','Geometrické modelování',4,'Lzap','20040921111654','',0,0,0,1,0.917220252488945,'20040921111801','79959078888345');
INSERT INTO cur VALUES (55,6,'Curves_bspline_exampl-opty.png','Geometrické modelování','Geometrické modelování',4,'Lzap','20040921111700','',0,0,0,1,0.754330694446648,'20040921111801','79959078888299');
INSERT INTO cur VALUES (56,6,'Curves_bspline_exampl0-opty.png','Geometrické modelování','Geometrické modelování',4,'Lzap','20040921111707','',0,0,0,1,0.0199927455000512,'20040921111801','79959078888292');
INSERT INTO cur VALUES (57,6,'Curves_bspline_movepoint-opty.png','Geometrické modelování','Geometrické modelování',4,'Lzap','20040921111714','',0,0,0,1,0.836971674893956,'20040921111801','79959078888285');
INSERT INTO cur VALUES (58,0,'B–spline_křivka','== B-spline křivky ==\n\nB-spline křivky poprvé zavádí N. Lobanovský již v 19. století. V roce 1946 I. J. Schoenberg použil B-spline pro vyhlazování statistických dat a dává tím základy pro moderní teorii spline aproximací. M. Cox a C. de Boor objevili nezávisle na sobě v roce 1972 rekurentní vztah pro výpočet B-spline. Tato teorie byla poté použita pro výpočet parametrických B-spline křivek.\n\nObecná B-spline křivka stupně k je určena rovnicí:\n\n: P(u)=\\sum^n_{i=0}P_i\\cdot N^k_i(u),\n\nkde\n\n: P_i jsou polohové vektory vrcholů řídícího polygonu (de Boor body), \n\n: N^k_i(u) jsou normalizované bázové funkce stupně k (někdy se nazývají de Boor funkce).\n\n
[[Image:curves_bspline_basefce-opty.png]]
\n\n
Příklady bázových funkcí N^k_i(u) stupně 0, 1, 2.
\n\n=== Analytické vlastnosti de Boor bázových funkcí ===\n\nPro de Boor bázové funkce platí tyto analytické vlastnosti ([PIE 85]; [HOS 89]):\n\n\'\'\'Rekurentní vztah:\'\'\'\n\n: N^k_i\\left(u\\right)=\\frac{u-u_i}{u_{i+k}-u_i}\\cdot N^{k-1}_i\\left(u\\right)+\\frac{u_{i+k+1}-u}{u_{i+k+1}-u_{i+1}}\\cdot N^{k-1}_{i+1}\\left(u\\right),\n\nkde\n\n: N^0_i\\left(u\\right)=1, pro u\\in\\left\\langle u_i,u_{i+1}\\right\\rangle,\n\n: N^0_i\\left(u\\right)=0, pro u\\not\\in\\left\\langle u_i,u_{i+1}\\right\\rangle,\n\nHodnoty parametrů u_j se obvykle nazývají uzly. Pak hovoříme o tzv. uzlovém vektoru parametrů:\n\n: U=\\left(u_0,u_1,\\dots,u_k,u_{k+1},\\dots,u_{m-k},\\dots,u_m\\right),\n\nkde\n\n: u_i.\n\nUzlový vektor se nazývá neperiodický (neuniformní), jestliže platí:\n\n: u_0=\\dots=u_k a u_{m-k}=\\dots=u_m.\n\nPokud pro dva sousední parametry platí:\n\n: u_{i+1}-u_{i}=konst. pro k\\le i\\le m-k-1,\n\npak hovoříme o uniformní parametrizaci. Pokud nebude řečeno jinak, budeme dále uvažovat neperiodickou (neuniformní) parametrizaci.\n\nPro uzavřenou B-spline křivku bude pro uzlový vektor U platit:\n\n: U=\\left(u_0,u_1,\\dots,u_m\\right),\n\nkde\n\n: u_i.\n\n\'\'\'Nezáporná hodnota\'\'\'\n\n: N^k_i\\left(u\\right)\\ge 0 pro všechny hodnoty i,k,u.\n\n(Nerovnost lze dokázat matematickou indukcí z uvedeného rekurentního vztahu.)\n\n\'\'\'Jednotkový součet\'\'\'\n\n: \\sum^n_{i=0}N^k_i\\left(u\\right)=1 pro u\\in\\left\\langle u_0,u_m\\right\\rangle\n\n\'\'\'Lokální vlastnost\'\'\'\n\n: N^k_i\\left(u\\right)\\ne 0 pro u\\in\\left\\langle u_i,u_{i+k+1}\\right\\rangle\n\n\'\'\'Okrajový uzlový vektor\'\'\'\n\nPro uzlový vektor
(\\underbrace{u_0,\\dots,u_0},\\underbrace{u_m,\\dots,u_m})
k+1k+1
, tzv. okrajový uzlový vektor, platí:\n\n: N^k_i\\left(u\\right)=B^k_i\\left(u\\right)={k\\choose i}\\cdot u_i\\cdot{\\left(1-u\\right)}_{k-i}.\n\nNa následujícím obrázku je příklad periodické (uniformní) B-spline křivky - uzlový vektor U=\\left(0,1,2,3,4,5,6\\right).\n\n
[[Image:curves_bspline_exampl0-opty.png]]
\n\n
Příklad periodické (uniformní) B-spline křivky druhého stupně
\n\nNa následujícím obrázku je příklad neperiodické (neuniformní) B-spline křivky - uzlový vektor U=\\left(0,0,0,1,2,2,2\\right) a uzavřené B-spline křivky - uzlový vektor U=\\left(0,1,2,3\\right).\n\n
[[Image:curves_bspline_exampl-opty.png]]
\n\n
Příklad neperiodické (neuniformní) a uzavřené B-spline křivky
\n\n=== Geometrické vlastnosti B-spline křivek ===\n\nZ definice B-spline křivky a z analytických vlastností bázových funkcí vyplývají tyto základní geometrické vlastnosti B-spline křivek ([BÖH 77]; [COH 77]; [PIE 85]; [HOS 89]):\n\n==== Koncové podmínky ====\n\nPro neperiodický uzlový vektor platí, že B-spline křivka prochází počátečním a koncovým vrcholem řídícího polygonu a dotýká se počáteční a koncové hrany řídícího polygonu:\n\n: P\\left(u_0\\right)=P_0, P\\left(u_m\\right)=P_n\n\n: P\'\\left(u_0\\right)=\\frac{k\\cdot\\left(P_1-P_0\\right)}{u_{k+1}}, P\'\\left(u_m\\right)=\\frac{k\\cdot\\left(P_n-P_{n-1}\\right)}{1-u_{m-k-1}}.\n\n\'\'\'Konvexní obal\'\'\'\n\nVšechny body B-spline křivky leží v konvexním obalu množiny, která je určena de Boor body P_0,\\dots,P_n Přesněji řečeno, oblouk křivky P\\left(u\\right) pro u\\in\\left\\langle u_i,u_{i+1}\\right\\rangle,k\\le i\\le m-k-1 leží v konvexním obalu vrcholů P_{i-k},\\dots,P_i.\n\n
[[Image:curves_bspline_convex-opty.png]]
\n\n
Konvexní obal B-spline křivky
\n\n==== De Boor algoritmus ====\n\nViz [[Cz:Algoritmus de Boor|Algoritmus de Boor]]\n\n==== Volba stupně B-spline křivky ====\n\nStupeň Bézierovy křivky je pevně určen počtem vrcholů řídícího polygonu, zatímco obecná B-spline křivka umožňuje volbu stupně výsledné křivky. Na obrázku je zobrazeno několik B-spline křivek, které jsou určeny stejným řídícím polygonem. \n\nJe zvolena uniformní neperiodická parametrizace a pro k=0,\\dots,n platí:\n\n: pro k=0 dostáváme pouze body řídícího polygonu,\n\n: pro k=1 dostáváme právě řídící polygon,\n\n: pro zvyšující se stupeň se B-spline křivka vzdaluje od řídícího polygonu,\n\n: pro k=n dostaneme křivku stejného tvaru jako Bézierova křivka pro daný polygon.\n\n
[[Image:curves_bspline_degree-opty.png]]
\n\n
Volba stupně B- spline křivky
\n\n==== Význam uzlového vektoru ====\n\nVýsledná křivka je pro u\\in\\left\\langle u_i,u_{i+k+1}\\right\\rangle polynomem stupně k. Má tedy na tomto intervalu spojité všechny derivace. V uzlech u_i se mění reprezentace B-spline křivky -– vystupuje z ní jeden bázový spline a vstupuje jiný; uzly tedy působí jako \"přepínač\". \n\n==== Lokální změna tvaru ====\n\nLokální vlastnost je zajištěna tím, že bázové funkce N^k_i\\left(u\\right) nabývají nenulových hodnot jen na intervalu \\left\\langle u_i,u_{i+k+1}\\right\\rangle. To znamená, že změníme-li polohu jednoho de Boor bodu P_i, pak se změní pouze ta část B-spline křivky, pro kterou u\\in\\left\\langle u_i,u_{i+k+1}\\right\\rangle. Tato změna ovlivní k+1 segmentů křivky. Čím je tedy stupeň B-spline křivky vyšší, tím se změní při změně jednoho bodu řídícího polygonu větší část křivky, přičemž pro k=n dojde ke změně celé křivky.\n\n
[[Image:curves_bspline_movepoint-opty.png]]
\n\n
Změna tvaru B-spline křivky změnou polohy vrcholu řídícího polygonu
\n\n==== Výpočet Bézierových bodů z de Boor polygonu ====\n\nMějme dánu kubickou B-spline křivku de Boor polygonem D_0,\\dots , D_m. Pak pomocí podmínek C^2 spojitosti lze velice jednoduše z daných de Boor bodů určit Bézierovy body P_0,\\dots,P_n. Postup konstrukce je zobrazen na následujícím obrázku.\n\n
[[Image:curves_bspline_bezier-opty.png]]
\n\n
Převod B-spline křivky na Bézier křivky
\n\n==== Vícenásobné body ====\n\nTvar B-spline křivky ovlivňují tzv. vícenásobné body řídícího polygonu. Na následujícím obrázku je příklad B-spline kvadriky s dvojnásobným bodem.\n\n
[[Image:curves_bspline_doublepoint-opty.png]]
\n\n
B-spline neuniformní křivka druhého stupně s dvojnásobným bodem P_2=P_3, pro uzlový vektor platí U=\\left(0,0,0,\\frac{1}{4},\\frac{1}{2},\\frac{3}{4},1,1,1\\right)
\n\n==== Invariance ====\n\nMezi důležité vlastnosti B-spline křivek patří invariance vůči otáčení, posunutí a změně měřítka. Afinní transformaci křivky pak můžeme provést tak, že této transformaci podrobíme vrcholy řídícího polygonu a k nim pak sestrojíme novou křivku.\n\n=== Algoritimizace ===\n\n==== ComputeKnotVector(int n, int k) ====\n\nSpočítá uzlový vektor.\n\nParametry:\n\n* n - počet kontrolních bodů mínus 1\n* k - stupeň de Boor bázové funkce\n\n\n void ComputeKnotVector(int n, int k)\n {\n parametrization = new ParameterCollection();\n for(int i=0; i<=n+k+1; i++)\n {\n if(i<=k) parametrization.Insert(i,0);\n else\n if(i>n) parametrization.Insert(i,n-k+1);\n else\n parametrization.Insert(i,i-k);\n }\n }\n\n\n==== BasisFunction(int k, int i, ParameterCollection u, double t) ====\n\nSpočítá a vrátí hodnotu normalizované bázové funkce stupně k.\n\nParametry:\n\n* k - stupeň de Boor bázové funkce\n* i - index polohového vektoru vrcholu řídícího polygonu\n* u - uzlový vektor\n* t - parametr\n\n\n private double BasisFunction(int k, int i, ParameterCollection u, double t)\n {\n if(k==0)\n {\n if((u[i]<=t) && (t\n\n==== Vector GetPoint(double t) ====\n\nPřetížená metoda třídy Curve. Spočítá a vrátí bod na křivce.\n\nParametry:\n\n* t - parametr výpočtu\n\n\n public override Vector GetPoint(double t) \n {\n Vector ret = new Vector();\n for (int i = 0;i','',4,'Lzap','20040921111730','',0,0,0,1,0.687511471886,'20040921111730','79959078888269'); INSERT INTO cur VALUES (59,6,'Curves_rbespline_basefce-opty.png','Geometrické modelování','Geometrické modelování',4,'Lzap','20040921111828','',0,0,0,1,0.124880168703273,'20040921111949','79959078888171'); INSERT INTO cur VALUES (60,6,'Curves_rbespline_circle1-opty.png','Geometrické modelování','Geometrické modelování',4,'Lzap','20040921111859','',0,0,0,1,0.113485849568141,'20040921111949','79959078888140'); INSERT INTO cur VALUES (61,6,'Curves_rbespline_circle2-opty.png','Geometrické modelování','Geometrické modelování',4,'Lzap','20040921111912','',0,0,0,1,0.192788772464533,'20040921111949','79959078888087'); INSERT INTO cur VALUES (62,6,'Curves_rbespline_weight-opty.png','Geometrické modelování','Geometrické modelování',4,'Lzap','20040921111922','',0,0,0,1,0.623486344351886,'20040921111949','79959078888077'); INSERT INTO cur VALUES (63,0,'Racionální_B–spline_křivka','== Racionální B-spline křivky ==\n\nRacionální B-spline křivka stupně k je určena rovnicí:\n\n: P\\left(u\\right)=\\frac{\\sum^n_{i=0}P_i\\cdot\\omega_i\\cdot N^k_i\\left(u\\right)}{\\sum^n_{i=0} \\omega_i\\cdot N^k_i\\left(u\\right)},\n\nkde\n\n: P_i jsou body řídícího polygonu (tzv. de Boor body),\n\n: \\omega_i jsou váhové parametry jednotlivých bodů \\omega_i\\ge 0,\n\n: N^k_i\\left(u\\right) jsou normalizované B-spline bázové funkce stupně k.\n\nRovnici racionální B-spline křivky můžeme upravit na tvar:\n\n: P\\left(u\\right)=\\sum^n_{i=0}P_i\\cdot R^k_i\\left(u\\right),\n\nkde\n\n: R^k_i\\left(u\\right) jsou racionální B-spline bázové funkce definované:\n\n: R^k_i\\left(u\\right)=\\frac{\\omega_i\\cdot N^k_i\\left(u\\right)}{\\sum^n_{j=0} \\omega_j\\cdot N^k_j\\left(u\\right)}\n\nRacionální B-spline křivky jsou obvykle definovány na neuniformním uzlovém vektoru U=\\left(u_0,\\dots,u_m\\right). Takovým křivkám pak říkáme \'\'\'NURBS křivky\'\'\' (\'\'non uniform rational B-spline\'\'). Je-li tento vektor neperiodický, pak pro něj platí stejná pravidla jako pro neracionální B-spline křivky.\n\n=== Analytické vlastnosti racionálních bázových funkcí ===\n\nPro racionální bázové funkce R^k_i\\left(u\\right) platí podobné analytické vlastnosti jak pro bázové funkce N^k_i\\left(u\\right).\n\n\'\'\'Nezáporná hodnota\'\'\'\n\n: R^k_i\\left(u\\right)\\ge 0 pro \\forall u\\in\\left\\langle u_0,u_m\\right\\rangle\n\n\'\'\'Jednotkový součet\'\'\'\n\n: \\sum^n_{i=0} R^k_i\\left(u\\right)=1 pro u\\in \\left\\langle u_0,u_m\\right\\rangle\n\n\'\'\'Vlastnost krajních funkcí\'\'\'\n\n: R^k_0\\left(0\\right)=R^k_n\\left(1\\right)=1\n \n\'\'\'Extrémy\'\'\'\n\nKaždá bázová funkce R^k_i\\left(u\\right) má pro každé i na intervalu \\left\\langle 0,1\\right\\rangle právě jedno maximum.\n\n\'\'\'Lokální vlastnost\'\'\'\n\n: R^k_i\\left(u\\right)\\ne 0 pro u\\in\\left\\langle u_i,u_{i+k+1}\\right\\rangle\n\n\'\'\'Zobecnění\'\'\'\n\nFunkce R^k_i\\left(u\\right) jsou zobecněním funkcí N^k_i\\left(u\\right), pro i=0,\\dots,n a \\omega=1 platí\n\n: R^k_i\\left(u\\right)=N^k_i\\left(u\\right)\n\n
[[Image:curves_rbespline_basefce-opty.png]]
\n\n
Racionální kvadratické bázové funkce
\n\nPro uzlové vektory a váhy platí:\n\n: U=\\left(0,0,0,1,2,3,3,3\\right) \\left(\\omega_0,\\dots,\\omega_4\\right)=\\left(1,4,1,1,1\\right) pro obrázek vlevo\n\n: U=\\left(0,0,0,1,2,3,3,3\\right) \\left(\\omega_0,\\dots,\\omega_4\\right)=\\left(1,1,0.3,1,1\\right) pro obrázek vpravo\n\n=== Geometrické vlastnosti racionálních B-spline křivek ===\n\nGeometrické vlastnosti pro racionální B-spline křivky jsou zobecněním vlastností neracionálních B-spline křivek.\n\n==== Koncové podmínky ====\n\nPokud uvažujeme neperiodický uzlový vektor ve tvaru\n\n:
U=(\\underbrace{0,\\dots,0},u_{k+1},\\dots,u_{m-k-1},\\underbrace{1,\\dots,1}),
 k+1 k+1 
\n\npak platí, že racionální B-spline křivka stupně k prochází počátečním a koncovým bodem řídícího polygonu a dotýká se v těchto bodech jeho první a poslední hrany.\n\nMezi počtem uzlů m, stupněm křivky k a počtem bodů řídícího polygonu křivky \\left(n+1\\right) platí následující vztah:\n \n: m=n+k+1\n\n==== Konvexní obal ====\n\nJsou-li všechny váhové parametry nezáporné, pak pro u\\in\\left\\langle u_i,u_{i+1}\\right\\rangle,k\\le i\\le \\left(m-k-1\\right) leží bod P\\left(u\\right) v konvexním obalu množiny, která je určena body P_{i-k},\\dots,P_i.\n\n==== Invariance vůči transformacím ====\n\nRacionální B-spline křivky jsou invariantní vůči afinním transformacím, NURBS křivky jsou také invariantní vůči projektivnímu promítání.\n\n==== Průsečík přímky (ve 2D) nebo roviny (ve 3D) s křivkou ====\n\nŽádná přímka (rovina) nemá více průsečíků s křivkou než s jejím řídícím polygonem.\n\n==== De Boor algoritmus ====\n\nViz [[Cz:Racionální algoritmus de Boor|Racionální algoritmus de Boor]]\n\n==== Modifikace tvaru křivky pomocí váhových parametrů ====\n\nObdobně jako u racionálních Bézierových křivek můžeme využít změny hodnot váhových parametrů k modifikaci křivky bez potřeby měnit polohu bodů řídícího polygonu. Zvětšujeme-li hodnotu váhového parametru \\omega_i a ostatní váhové parametry zůstanou beze změny, křivka se více \"přimyká\" k odpovídajícímu bodu P_i, ovšem vliv změny na tvar křivky je omezen pouze pro u\\in\\left\\langle u_i,u_{i+k+1}\\right\\rangle, ostatní části zůstanou beze změny.\n\n
[[Image:curves_rbespline_weight-opty.png]]
\n\n
Změna racionální B-spline křivky pro různé hodnoty váhových parametrů
\n\n==== Vyjádření kružnice pomocí racionální B-spline křivky ====\n\nJak bylo řečeno v úvodu, některé kuželosečky, jako jsou elipsa nebo hyperbola, je možné pomocí neracionálních křivek popsat pouze přibližně, proto byly zavedeny křivky racionální. V tomto příkladě ukážeme, jak popsat kružnici pomocí racionální B-spline křivky.\n\nVektorová rovnice pro kružnici, která je určena sedmi vrcholy řídícího polygonu, je následující:\n\n: P\\left(u\\right)=\\frac{\\sum^6_{i=0}\\omega_i\\cdot P_i\\cdot N^2_i\\left(u\\right)}{\\sum^6_{i=0}\\omega_i\\cdot N^2_i\\left(u\\right)}=\\sum^6_{i=0} P_i\\cdot R^2_i \\left(u\\right),\n\nkde\n\n: uzlový vektor je U=\\left(0,0,0,\\frac{1}{3},\\frac{1}{3},\\frac{2}{3},\\frac{2}{3},1,1,1\\right)\n\n: a váhový vektor je \\left(\\omega_0,\\dots,\\omega_6\\right) = \\left(1,\\frac{1}{2},1,\\frac{1}{2},1,\\frac{1}{2},1\\right).\n\nNa následujícím obrázku je zobrazena daná kružnice a odpovídající bázové funkce.\n\n
[[Image:curves_rbespline_circle1-opty.png]]
\n\n
Příklad reprezentace kružnice pomocí NURBS křivky
\n\nVektorová rovnice pro kružnici, která je určena devíti vrcholy řídícího polygonu, je:\n\n: P\\left(u\\right)=\\frac{\\sum^8_{i=0}\\omega_i\\cdot P_i\\cdot N^2_i\\left(u\\right)}{\\sum^8_{i=0}\\omega_i\\cdot N^2_i\\left(u\\right)}=\\sum^8_{i=0} P_i\\cdot R^2_i\\left(u\\right),\n\nkde\n\n: uzlový vektor je U=\\left(0,0,0,\\frac{1}{4},\\frac{1}{4},\\frac{1}{2},\\frac{1}{2},\\frac{3}{4},\\frac{3}{4},1,1,1\\right)\n\n: a váhový vektor je \\left(\\omega_0,\\dots,\\omega_8\\right)=\\left(1,\\frac{\\sqrt{2}}{2},1,\\frac{\\sqrt{2}}{2},1,\\frac{\\sqrt{2}}{2},1,\\frac{\\sqrt{2}}{2},1\\right).\n\nNa následujícím obrázku je zobrazena daná kružnice.\n\n
[[Image:curves_rbespline_circle2-opty.png]]
\n\n
Příklad reprezentace kružnice pomocí NURBS křivky
\n\n=== Algoritmizace ===\n\n==== ComputeKnotVector(int n, int k) ====\n\nSpočítá uzlový vektor.\n\nParametry:\n\n* n - počet kontrolních bodů mínus 1\n* k - stupeň de Boor bázové funkce\n\n\n void ComputeKnotVector(int n, int k)\n {\n parametrization = new ParameterCollection();\n for(int i=0; i<=n+k+1; i++)\n {\n if(i<=k) parametrization.Insert(i,0);\n else\n if(i>n) parametrization.Insert(i,n-k+1);\n else\n parametrization.Insert(i,i-k);\n }\n }\n\n\n==== BasisFunction(int k, int i, ParameterCollection u, double t) ====\n\nSpočítá a vrátí hodnotu normalizované bázové funkce stupňe k.\n\nParametry:\n\n* k - stupeň de Boor bázové funkce\n* i - index polohového vektoru vrcholu řídícího polygonu\n* u - uzlový vektor\n* t - parametr\n\n\n private double BasisFunction(int k, int i, ParameterCollection u, double t)\n {\n if(k<=0)\n {\n if((u[i]<=t) && (t\n\n==== Vector GetPoint(double t) ====\n\nPřetížená metoda třídy Curve. Spočítá a vrátí bod na křivce.\n\nParametry:\n\n* t - parametr výpočtu\n\n\n public override Vector GetPoint(double t)\n {\n Vector ret = new Vector();\n double denom = 0;\n for (int i = 0;i\n\n==== RichPoint CreateRichPoint() ====\n\nPřetížená metoda třídy Curve. Spočítá a vrátí řídící bod pro křivku s váhovým koeficientem. RacionalRichPoint je jako RichPoint, ale počítá s váhou bodu.\n\n\n public override RichPoint CreateRichPoint()\n {\n double t=0;\n if (ctrlPoly.Count>0) t=((RacionalRichPoint)ctrlPoly[0]).T;\n foreach (RacionalRichPoint p in ctrlPoly)\n {\n if (p.T>t) t=p.T;\n }\n RacionalRichPoint rp=new RacionalRichPoint(new RichPoint(new Vector(0,0), t+1), 1);\n return rp;\n }\n','',4,'Lzap','20040921111935','',0,0,0,1,0.844291510919,'20040921111935','79959078888064'); INSERT INTO cur VALUES (64,6,'Curves_bspline_deboor-opty.png','Geometrické modelování','Geometrické modelování',4,'Lzap','20040921112046','',0,0,0,1,0.539065435099476,'20040921112117','79959078887953'); INSERT INTO cur VALUES (65,0,'Algoritmus_de_Boor','== De Boor algoritmus ==\n\nDe Boor algoritmus pro výpočet bodu B-spline křivky je zobecněním algoritmu de Casteljau pro Bézierovy křivky. Pro u\\in\\left\\langle u_l,u_{l+1}\\right\\rangle vypočítáme bod na B-spline křivce opakovanou lineární interpolací:\n\n: P^i_j\\left(u\\right)=\\left(1-\\alpha^j_i\\right)\\cdot P^{j-1}_{i-1}+\\alpha^j_i\\cdot P^{j-1}_i,\n\nkde \n\n: \\alpha^j_i=\\frac{u-u_i}{u_{i+k-j+1}}, i=l-k,\\dots,l a P^0_i=P_i.\n\nBod P^k_l=P\\left(u\\right) je hledaný bod na B-spline křivce.\n\n
[[Image:curves_bspline_deboor-opty.png]]
\n\n
de Boor algoritmus
\n\n=== Algoritmizace ===\n\n==== ComputeKnotVector(int n, int k) ====\n\nSpočítá uzlový vektor.\n\nParametry:\n\n* n - počet kontrolních bodů mínus 1\n* k - stupeň de Boor bázové funkce\n\n\n void ComputeKnotVector(int n, int k)\n {\n parametrization = new ParameterCollection();\n for(int i=0; i<=n+k+1; i++)\n {\n if(i<=k) parametrization.Insert(i,0);\n else\n if(i>n) parametrization.Insert(i,n-k+1);\n else\n parametrization.Insert(i,i-k);\n }\n }\n\n\n==== Vector GetPoint(double t) ====\n\nPřetížená metoda třídy Curve. Spočítá a vrátí bod na křivce.\n\nParametry:\n\n* t - parametr výpočtu\n\n\n public override Vector GetPoint(double t) \n {\n ParameterCollection u = parametrization;\n int n = ctrlPoly.Count;\n Vector[] points = new Vector[n];\n for (int i=0;iu[l]) l++;\n l--;\n if(l','',4,'Lzap','20040921112113','',0,0,0,1,0.62276989204,'20040921112113','79959078887886'); INSERT INTO cur VALUES (66,0,'Racionální_algoritmus_de_Boor','== De Boor algoritmus ==\n\nBod na racionální B-spline křivce můžeme stejně jako u racionálních Bézierových křivek spočítat hned dvěma způsoby.\n\n\'\'\'1. Pomocí algoritmu de Boor pro racionální křivky:\'\'\'\n\nZvolíme-li u\\in\\left\\langle u_i,u_{i+1}\\right\\rangle, pak bod na racionální B-spline křivce vypočteme opakovanou lineární interpolací:\n\n: P^j_i\\left(u\\right)=\\left(1-\\alpha^j_i\\right)\\cdot\\frac{\\omega^{j-1}_{i-1}}{\\omega^j_i}\\cdot P^{j-1}_{i-1}+\\alpha^j_i\\cdot\\frac{\\omega^{j-1}_i}{\\omega^j_i}\\cdot P^{j-1}_i,\n\nkde\n\n: \\omega^j_i\\left(u\\right)=\\left(1-\\alpha^j_i\\right)\\cdot\\omega^{j-1}_{i-1}+\\alpha^j_i\\cdot\\omega^{j-1}_i\n \na \n\n: \\alpha^j_i=\\frac{u-u_i}{u_{i+k-j+1}}, i=1-k,\\dots,1 a P^0_i=P_i.\n\nBod P^k_1\\left(u\\right)=P\\left(u\\right) je hledaný bod racionální B-spline křivky.\n\nToto rozšíření algoritmu de Boor vzniklo obdobným způsobem jako rozšíření algoritmu de Casteljau pro Bézierovy křivky.\n\n\'\'\'2. Převodem na neracionální křivku a zpětným promítnutím:\'\'\'\n\nPřevedeme racionální B-spline na neracionální (o jednu dimenzi výše), provedeme de Boor algoritmus pro neracionální křivku a výsledný bod převedeme (promítneme) zpět.\n\n\n\n=== Algoritmizace ===\n\n==== ComputeKnotVector(int n, int k) ====\n\nSpočítá uzlový vektor.\n\nParametry:\n\n* n - počet kontrolních bodů mínus 1\n* k - stupeň de Boor bázové funkce\n\n\n void ComputeKnotVector(int n, int k)\n {\n parametrization = new ParameterCollection();\n for(int i=0; i<=n+k+1; i++)\n {\n if(i<=k) parametrization.Insert(i,0);\n else\n if(i>n) parametrization.Insert(i,n-k+1);\n else\n parametrization.Insert(i,i-k);\n }\n }\n\n\n==== Vector GetPoint(double t) ====\n\nPřetížená metoda třídy Curve. Spočítá a vrátí bod na křivce.\n\nParametry:\n\n* t - parametr výpočtu\n\n\n public override Vector GetPoint(double t) \n {\n ParameterCollection u = parametrization;\n int n = ctrlPoly.Count;\n Vector[] points = new Vector[n];\n double[] weight = new double[n];\n for (int i=0;iu[l]) l++;\n l--;\n if(l','',4,'Lzap','20040921112252','',0,0,0,1,0.407147047299,'20040921112252','79959078887747'); INSERT INTO cur VALUES (67,0,'Výpočet_průsečíku_křivek','== Průsečík dvou křivek ==\n\n
\n[[Image:prusecik_krivek_16_2.png]]\n
\n\n=== Algoritmus ===\n\nPro nalezení průsečíku (nebo více průsečíků) dvou křivek v rovině je\npoužit následující jednoduchý algoritmus (implementovaný v souboru Intersection.cs, \nmetoda public void Find_Intersection()):\nMějme křivku C1 a křivku C2. Každou křivku si rozdělíme na jednotlivé\nbody - čím jich bude více, tím to bude přesnější. Počet bodů je uložen\nv proměnné int pocet.\n\n
\npar_c1_f = (double)((RichPoint)curve1.ControlPoly[0]).T;// první bod křivky C1\npar_c1_l = (double)((RichPoint)curve1.ControlPoly[curve1.ControlPoly.Count-1]).T;//poslední bod křivky C1\n\npar_c2_f = (double)((RichPoint)curve2.ControlPoly[0]).T;// první bod křivky C2\npar_c2_l = (double)((RichPoint)curve2.ControlPoly[curve2.ControlPoly.Count-1]).T;//poslední bod křivky C2\n\n// vzdál. mezi prvním a posledním bodem křivky C1 (resp. C2)\n// rozdělený na požadovaný počet bodů\nkrok_1 = (par_c1_l - par_c1_f) / pocet;\nkrok_2 = (par_c2_l - par_c2_f) / pocet;\n
\n\nJádrem algoritmu jsou dva vnořené cykly: v prvním beru postupně bod po bodu z křivky C1 a \npro každý tento bod změřím vzdálenost mezi ním a každým bodem z křivky C2 v druhém cyklu.\nPokud je vzdálenost bodů menší než hodnota proměnné double presnost (ta udává povolenou odchylku),\npotom jsem našel průsečík obou křivek. Vzdálenost bodů počítám podle vzorce:\n\n\n|AB|=\\sqrt{(A_{x}-B_{x})^2+(A_{y}-B_{y})^2}\n\n

\nTomu v programu odpovídá řádek:
\nSystem.Math.Sqrt(System.Math.Abs(((p1.X-p2.X)*(p1.X-p2.X))+((p1.Y-p2.Y)*(p1.Y-p2.Y))))
\nkde: \n
\n     p1.X - x-ová souřadnice bodu A\n     p1.Y - y-ová souřednice bodu A\n     p2.X - x-ová souřadnice bodu B\n     p2.Y - y-ová souřadnice bodu B\n
\n\n=== Find_Intersection() ===\n\nZde je kód hlavní metody.\n\n
\npublic void Find_Intersection()\n{\n  double par_c1_f,par_c1_l,par_c2_f,par_c2_l;\n  double f,g,krok_1,krok_2;\n\n  RichPoint drp;\n\n  par_c1_f = (double)((RichPoint)curve1.ControlPoly[0]).T;\n  par_c1_l = (double)((RichPoint)curve1.ControlPoly[curve1.ControlPoly.Count-1]).T;\n\n  par_c2_f = (double)((RichPoint)curve2.ControlPoly[0]).T;\n  par_c2_l = (double)((RichPoint)curve2.ControlPoly[curve2.ControlPoly.Count-1]).T;\n			\n  krok_1 = (par_c1_l - par_c1_f) / pocet;\n  krok_2 = (par_c2_l - par_c2_f) / pocet;\n\n  for (int i=0;i\n\n==Autoři==\n\nTento text vypracovali studenti [http://www.inf.upol.cz Univerzity Palackého v Olomouci] katedry Matematické informatiky jako zápočtový úkol do předmětu Počítačová geometrie.','',4,'Lzap','20040921112345','',0,0,0,1,0.275543853769,'20040921112345','79959078887654');
INSERT INTO cur VALUES (68,1,'Geometrie','\'\'Italic text\'\'sdfsdf\'\'Italic text\'\'sfsdfsdf\n== Headline text ==','sdf',0,'147.251.52.225','20040921140712','',0,0,0,1,0.993592601732,'20040921140712','79959078859287');
INSERT INTO cur VALUES (69,4,'Nápověda','#REDIRECT [[:en:Help:Wikibooks]]','#REDIRECT [[:en:Help:Wikibooks]]',0,'217.23.249.231','20041231002512','',0,1,0,0,0.449575224169,'20041231002512','79958768997487');
INSERT INTO cur VALUES (70,0,'Linux','\'\'\'Obsahy wikipedie i ostatních projektů lze stáhnout k offline prohlížení prostřednictví stránky http://download.wikimedia.org/\'\'\'\n\n*[[Úvod do OS Linux]] - historie UNIX/Linux, GNU/FSF, GNU GPL, filozofie systému, distribuce OS Linux, dokumentace a nápověda\n*[[Vlastnosti OS Linux]] - architektury, jádrem podporovaný HW, zavádění systému, procesy, meziprocesová komunikace, signály, init/inittab\n*[[Instalace OS Linux]] - příprava disku, instalace, konfigurace\n:: Kompilace [[ Linuxové jádro | linuxového jádra ]]\n*[[Plánování spouštění úloh]] syslog/logování cron/anacron, at\n*[[Start Linuxu]] na i386+ - od zapnutí PC do promptu shellu\n*[[Adresářová struktura]] OS Linux, soubory - druhy, vlastnosti, přístupová práva; konfigurační soubory, příkazy mount/umount\n*[[Uživatelská práva]], uživatelé, skupiny, přihlášení se do systému, shelly bash a mc, editory\n*[[Balíčkovací systémy]] linuxových distribucí\n* Balíček \"[[coreutils]]\"\n:: Programy pro práci se soubory\n:: Programy používané v shell scriptech\n:: Programy pro práci s textem\n* Některé nízkoúrovňové programy nutné pro fungování systému Linux - balík \"[[util-linux]]\"\n* GNU [[Bash]] - Bourne again shell\n:: Programování v bash shellu - [[script]]y\n* GNU [[awk]] - program pro zpracování a manipulaci s texty\n* GNU [[sed]] - neinteraktivní dávkový editor\n* \"[[find]]\" - vyhledávání souborů v adresářovém stromu\n* GNU [[grep]] - Výpis řádků odpovídajících danému vzoru\n* [[Regulární výrazy]] a programy, které je využívají\n* [[Lokalizace a internacionalizace]] Linux/Unix programů, kódové stránky\n\nSPŠD Plzeň\n\n=Další internetové zdroje=\n\nhttp://www.manualy.sk/seminar/RefKategorie.html\n\n[[Special:Whatlinkshere/Linux | Odkaz na stránky které sem odkazují]]','',0,'195.113.188.3','20050218115654','',0,0,0,0,0.45995311507,'20050218134000','79949781884345');
INSERT INTO cur VALUES (71,0,'Úvod_do_OS_Linux','[[Special:Whatlinkshere/Úvod do OS Linux | Odkaz na stránky které sem odkazují]]\n=Stručná historie UNIXu, LINUXu a GNU=\n* 1965-1969 : Bell Telephone Labs (BTL), AT&T, MIT, GE - Multics\n* 1969 Ken Thompson a Dennis Ritchie na PDP-7 vytvořili základ něčeho, co se později použilo jako základ systému na zpracování dokumentů v AT&T.\n* 1971 - 1. verze (V1), na PDP-11/70, v assembleru. Brian Kernighan navrhl název Unics -> UNIX\n* 1973 - V4. Přepis do jazyka C - jedna z nejvýzn. událostí v historii OS: portabilita systému na jiné architektury.\n* 1974 Ritchie s Thompsonem - zpráva o systému UNIX v CACM (Communications of the Association for Computing Machinery)\n* 1975 - V6 je první mimo BTL - systém bezplatně předán univerzitám. V tomto období vzniká také první univerzitní větev systému, 1.xBSD (Berkeley Software Distribution)\n* 1979 - V7: dnes známá základní sada příkazů - shell, překladač C, uucp,...\n* 1982 - 1. komerční systémem AT&T : UNIX System III\n* IBM, DEC, Hewlett-Packard a další - devadesátá léta - konsorcium OSF (Open Software Foundation)\n* 1983 Richard M. Stallman (autor EMACS a Lisp) začíná projekt GNU (= Gnu\'s Not Unix) na MIT. První GPL (General Public Licence) - přesně specifikuje podmínky, za jakých je možno šířit, používat a vyvíjet tzv. \"svobodný\" software - software, jenž uživateli zaručuje tato práva: \n::* spustit program za jakýmkoliv účelem.\n::* modifikování programu podle jeho potřeb. (Aby tato svoboda byla realizovatelná v praxi, je nutno mít přístup ke zdrojovému kódu, neboť vytváření změn v programu je nesmírně obtížné, není-li k dispozici zdrojový kód.)\n::* redistribuování kopií a to jak zadarmo, tak za poplatek.\n::* distribuci modifikovaných verzí programu, aby komunita mohla mít prospěch z jeho vylepšení.\n: Hlavní myšlenkou GPL je dát každému povolení ke spouštění, kopírování, modifikaci programu a šíření modifikovaných verzí - ne však povolení přidávat k nim vlastní omezení. Takto jsou rozhodující svobody, které definují \"svobodný software\" zaručeny pro každého, kdo má kopii; stávají se nezcizitelnými právy. Mj. to znamená, že co je vytvořeno GPL (nebo GNU) programem (tj. jakýkoli produkt vytvořený za využití software licencovaného podle GNU GPL licence), to na sebe automaticky převádí GPL\n* 1984 AT&T zveřejňuje System V Interface Definition (SVID) - standartizace Unixových rozhraní. Pět evropských výrobců počítačů zakládá X/Open: Bull, ICL, Siemens, Olivetti, a Nixdorf.\n* 1985   ------//----- Free Software Foundation (nadace pro vývoj volného SW) - EMACS, překladač C/C++/Objective C/Fortran/Pascal (50 platforem)\n* 1988 - IBM, DEC, HP, a další zakládají Open Software Foundation (OSF) jako soupeře sdružení AT&T/Sun, chtějí použít jádro AIX. Jako odpověď na OSF je založeno UNIX International (UI) jako mezinárodní consortium uživatelů Unix System V UNIX. Úzká spolupráce s AT&T s cílem podpory otevřených systémů a ovlivnění dalšího vývoje.\n* 1989 - Programovací jazyk C je standardizován ANSI pod označením X3.159.1989 jako mezinárodní standard ISO/IEC 9899:1990.\n* 1990 - UNIX International vydává System V Release 4 (SVR4) který je sjednocením Systemu V, BSD a XENIXu (SCO). \n* 25.8.1991 - neznámý finský student Linus Benedict Torvalds zaslal do diskuzní skupiny comp.os.minix příspěvek s předmětem \"What would you like to see most in minix?\". O tom, že vyrábí free operační systém - nic komerčního a velkého, pouze jen tak ze zábavy.\n* standard POSIX (Portable Operating System Interface)\n* 1994 - vydána verze 4.4BSD. Patrick Volkerding sestavuje distribuci Slackware. Linux je portován na ne-Intel platformy (MIPS, Alpha,...). Vydány verze FreeBSD and NetBSD, pod BSD licencí. Novell v červnu kupuje USL od AT&T, v říjnu přenechává ochrannou známku UNIX sdružení X/Open (mezinárodní organizace pro standardizaci takzvaných \"otevřených systémů\")\n* 1996 - X/OPEN a OSF se spojují v Open Group. Je dokončen Linux 2.0.\n* 1997 - Single Unix Specification, V2, vydána. Linux se začíná stávat operačním systémem ISP (Internet Service Provider).\n* 1998 - uveřejněno označení UNIX98, zahrnuje 3 kategorie UNIXů: základ, pracovní stanici (workstation), server. Open Source hnutí nabírá otáčky. Tisk objevuje Linux a Open Source hnutí. Oracle, Informix, IBM, Compaq a další ohlašují svou podporu Linuxu.\n* 1999 - Průmysl se začíná zajímat o Linux a UNIXové produkty. Hlavní komerční SW vývojáři začínají vydávat verze pro Linux (SAP oznamuje SAP/R3 pro Linux. Apple vydává Mac OS X založený na jádře Mach,..)\n* 2000 - Hlavní komerční prodejci HW (Compaq, IBM, Dell, SGI, Fujitsu) začínají prodávat desktop a laptop počítače s předinstalovaným Linuxem. Linux je portován na IBM S/390. Lockheed Martin Corp. užívá Linux NetworX clusterovou technologii na analýzu U.S. Navy letadel. IBM investuje více než 200 miliónů $ do řady Linuxových iniciativ v Evropě během následujících čtyř let. HP uveřejňuje HP-UX 11i, plně 64 bitový Unix kompatibilní s Linuxem.\n* 2001 - uveřejněn Linux v2.4. Sony oznamuje portaci Linuxu na PlayStation 2. Nokia adoptuje Linux pro vývoj aplikací pro svůj Media Terminal home entertainment system. HP adopts Debian as the selected development platform for Linux work at HP. IBM oznamuje nový supercluster na Linuxu, instalovaný v National Center for Supercomputing Applications (NCSA), s výkonem 1 trillion výpočtů za vteřinu, Cluster z 160 nových IBM na Itanium CPU založených systémech bude nejvýkonnější Linuxový supercluster na akademii.\n* 25.8.2001 - 10.-té výročí Linuxu. Za deset let vývoje je linux nyní v úplně jiných sférách, než byl na začátku - na linuxu si můžete pustit grafické rozhraní, přehrávat mp3 nebo video, funguje vám televizní karta, máte na výběr z několika browserů, vývojových prostředí, nepřeberné množství síťového softwaru, podporuje sambu, joliet a jiné microsoftí věci. Linux se stal úspěšným konkurentem jak na serverech, kde úspěšně nahrazuje starší a hlavně drahé unixy, tak na desktopových stanicích, kde začíná úspěšně vytlačovat MS Windows (je otázkou, jak rychle a zda vůbec, ale za předpokladu, že linux na svém domácím stroji má stále více a více lidí, je pravdivost této věty snad jen otázkou času ;-)), a jedním z hlavních faktorů, proč tomu tak je, je jeho nízká cena a velmi rychlý vývoj.\n* 9.9.2001 1:46:40 UTC - 1e9 (=miliarda) vteřin od 1.1.1970 0:0:0 - data považovaného za počátek éry Unixu a braného jako čítač hodin a \"časové razítko\" (timestamp) jevů v Un*x systémech. Viz příkaz:\n: date \'+%s\' -d \"9-Sep-2001 1:46:40 UTC\"\n* 2002 - Free Standards Group uveřejňuje LSB 1.1 (včetně plné množiny společných API a vývojového balíku), a Li18nux (internacionalizační příručku), dva nástroje pro zajištění toho, že všechny Linux aplikace mohou běžet na libovolné verzi která je kompatibilní s Linux Standard Base (LSB). IBM přijímá Red Hat Linux Advanced Server pro všechny své servery a mainframe.\n\n=Charakteristika operačního systému GNU/Linux=\n* \'\'\'OS Unixového typu\'\'\' - filozofie, procesy, uživatelé, souborový systém, základní programy a další věci jsou shodné s Unixovými standardy.\n* \'\'\'Čistě 32/64 bitový OS\'\'\' - Linux od počátku byl psán jako 32-bitový OS a dnes podporuje řadu 64-bitových architektur - první byly procesory DEC Alpha, nyní též Intel64, 64-bit procesory MIPS a SPARC a 64-bit z/Architektura na S390 fy Intel. Pozn.: GNU C knihovna (GLIBC) je již částečné portována i na 128-bitové architektury.\n* \'\'\'Víceúlohový OS\'\'\' - jeden člověk může mít spuštěno několik programů současně\n* \'\'\'Víceuživatelský OS\'\'\' - více lidí může současně pracovat na jednom fyzickém počítači. OS uživateli vytváří virtuální prostředí tvářící se, jako by měl počítač sám pro sebe: nikdo nebude bez jeho povolení číst jeho soubory, nikdo nebude zasahovat do běhu jeho programů, bude moci používat periferní jednotky počítače (tiskárny, vstupní jednotky,..) atd.\n* \'\'\'Víceprocesorový OS - SMP\'\'\' podle dané architektury - podporováno až 64 procesorů. OS zaručuje rovnoměrné využití procesorů jednotlivými procesy\n* \'\'\'Preemptivní OS\'\'\' - žádná úloha si nemůže \"přivlastnit\" a zablokovat systém; systém po určité době přidělení sám odebírá úlohám procesor(y). Úloha si vůbec nemusí uvědomovat existenci střídání se o procesor.\n* \'\'\'Real-time OS\'\'\' - kromě normálních typů procesů (-uloh) jsou podporovány i real-time procesy. Jsou jinak plánovány a mají vyšší prioritu než všechny ostatní procesy. \n* \'\'\'Všestrannost nasazení\'\'\' - používá se od tzv. zapouzdřených (angl. embedded) systémů (specializovaná nasazení většinou na mini HW a speciálních periferiích - řídící systémy, roboti, telefony ap. Díky své modularitě Linux pracuje v podmínkách, kde jiné OS bídně hynou) přes PDA (Personal Digital Assistent), servery (souborové, datové-SQL, síťové, tiskové aj.) po grafické pracovní stanice s X-Window systémy. Stejně dobře pracuje v jednouživatelském, víceuživatelském textovém i víceuživatelském grafickém režimu.\n* \'\'\'Svobodný SW\'\'\' - základem Linuxu je volně šiřitelný SW /vč. zdrojových kódů/. Kdokoliv může zdrojové kódy volně používat, upravovat a šířit - viz GNU GPL licence. Jádro i aplikační programy jsou vyvíjeny a spravovány tisíci nadšenci po celém světě komunikujícími po Internetu. Současně je ale na Linux portováno a pro něj vyvinuto mnoho komerčních programů, zpravidla za daleko nižší cenu než odpovídající verze pro komerční Unixové systémy.\n* \'\'\'Nejrychleji se rozvíjející OS\'\'\' - za 10 let existence GNU/Linux vyrostl od původní verze (na i386, se souborovým systémem Minix a z programů pouze překladač C a shell) k dnešnímu stavu (jádra 2.6.x, zdrojové soubory zabírají již přes 200MB) - podpora více než 20 HW architektur, SMP, několika desítek souborových systémů a řada dalších vlastností v hlavním vývojovém stromu jádra. K tomu je nepřeberná řada jádro obalujících GNU systémových, uživatelských a dalších programů, několik X-Window manažerů,...\n\n=Filozofie operačního systému Unix=\nUnix byl OS určený primárně na zpracování textu, a většina komponent pracuje s textovým vstupem a produkuje textový výstup. Od počátku byly programy psány s několika základními principy: \n::* provádět právě jednu věc a tu dělat dobře\n::* zaručit jejich vzájemnou spolupráci\n::* povely a data programy přijímají v textové podobě\n::* jejich výstupy jsou též v textové podobě a ve formě vhodné pro další zpracování jako vstup jiných programů.\nOd opuštění assembleru jsou programy psány již výhradně v jazyce C. I když je programování v C bez ohledu na platformu v mnoha směrech stejné, je třeba říci, že unixoví vývojáři nahlíží na vývoj programů a systémových nástrojů specifickým způsobem. Operační systém Unix/Linux podporuje určitý styl programování a Unixové programy a systémy sdílí následující charakteristiky: \n; \'\'\'Jednoduchost\'\'\' :Valná většina utilit pro operační systém Unix je velmi jednoduchých a v důsledku toho také malých a snadno pochopitelných. Je dobré si osvojit techniku zvanou KISS (Keep It Small and Simple - Snaž se to udržet malé a jednoduché). U větších a složitějších systémů je vyšší pravděpodobnost většího množství komplexních chyb jejichž ladění může být obtížné.\n; \'\'\'Zaměření\'\'\' : Vždy je lepší vytvořit program, který provádí dobře jen jeden úkol. Program přecpaný nejrůznějšími funkcemi se obtížně používá a udržuje. Jednoúčelové programy se snáze vylepšují, když se objeví lepší algoritmy nebo rozhraní. V systému Unix jsou v případě potřeby malé utility často kombinovány tak, aby prováděly náročnější úkoly, místo aby se programátoři snažili předvídat potřeby uživatelů za pomoci jednoho velkého programu.\n; \'\'\'Znovu použitelné komponenty\'\'\' : Je užitečné dát jádro aplikace k dispozici v podobě knihovny. Dobře dokumentované knihovny disponují jednoduchým ale flexibilním rozhraním, mohou ostatním lidem pomoci při vývoji různých variací nebo při aplikaci postupů v nových oblastech. Příkladem budiž databázová knihovna dbm, což je spíše než jeden program pro správu databáze sada znovu použitelných funkcí.\n; \'\'\'Filtry\'\'\' : Spoustu unixových aplikací lze využít jako filtry. To znamená, že mohou převádět vstup na výstup jiného typu. Systém Unix/Linux poskytuje nástroje, které umožňují vzájemnou kombinací jiných unixových programů novými a neotřelými způsoby vytvářet poměrně složité aplikace. Samozřejmě, že je tato možnost opětovného použití dána právě zmíněnými vývojovými metodami.\n; \'\'\'Otevřené formáty souborů\'\'\' : Nejúspěšnější a nejoblíbenější unixové programy používají konfigurační a datové soubory, které mají podobu textových ASCII souborů. Uživatelé tak totiž mohou měnit a prohledávat konfigurační nastavení pomocí standardních nástrojů a zároveň vyvíjet nástroje, které budou při práci s datovými soubory používat nové funkce. Hezkým příkladem je systém křížových odkazů ve zdrojových souborech ctags, který udržuje informace o umístění symbolů v podobě regulárních výrazů, které pak může využívat vyhledávací program.\n; \'\'\'Flexibilita\'\'\' : Nelze dopředu předvídat, jak důmyslní uživatelé budou program používat. Je proto dobré při programování zachovávat co největší flexibilitu. Dobří programátoři se vyhýbají svévolným omezením velikostí polí nebo počtu záznamů. Je-li to možné, jsou programy psány tak, aby mohli pracovat v síti stejně dobře, jako na lokálním počítači. Nikdy si nemyslete, že jste vzali do úvahy vše, do může uživatel chtít udělat.\n\n=Distribuce OS Linux, distribuce RedHat=\nDnes existuje řada firem, organizací, skupin i jedinců, kteří sestavují a nabízejí ucelené sestavy linuxového jádra, GNU programů a případně dalších komerčních programů ve formě vhodné pro snadnou uživatelskou instalaci. Typické pro ně je (s výjimkou minidistribucí ala \"Linux na jednom flopáči\" a jednoúčelových, hlavně síťových distribucí) to, že uživatel nedostane do ruky pouze \"holý\" operační systém, ale kompletní vybavení i s aplikačními programy. Většinou jsou k dispozici i zdrojové soubory programů. Tyto distribuce typicky zahrnují 2-10, i více, instalačních CD. Distribuce se liší podle: \n* \'\'\'účelu nasazení\'\'\' - jsou distribuce přímo zaměřené a určené pro: \n::* serverové aplikace (síťové a SQL servery), většinou placené a obsahující speciální i proprietární SW \n::* speciální síťové aplikace (routery, bridge aj.) - viz např. \"Linux firewall \n::* desktopová nasazení s GUI \n::* minidistribuce pro řešení havarijních stavů - např. PARTED, TOMSRTBT (floppy), KNOPPIX, SUPERRESCUE, COOL LINUX (CD-ROM) \n::* hackerské distribuce ap. \n\nMimo to je řada \"velkých\" všeobecně zaměřených distribucí, umožňujících uživateli aby si sám vybral komponenty, které chce v systému mít. Mívají komfortní instalační proces, nabízí několik variant instalace podle toho odkud instalujeme a co od systému očekáváme.\n::* \'\'\'ceny\'\'\' - distribuce mohou být volně bez poplatků staženy ze sítě Interfernetu, mohou být zakoupeny za nějaký mírný poplatek (pokud je stejná distribuce volně stažitelná, pak se zakoupená zpravidla liší v tom, že v ní jsou kromě instalačních médií také tištěné instalační příp. uživatelské příručky a kupující má po určitou dobu (1-3 měsíce) bezplatnou telefonickou podporu distributora). Konečně existují distribuce za vyšší ceny, v kterých jsou obsažené komerční SW produkty a mají většinou vyšší podporu distributora. \n::* \'\'\'lokalizace systému\'\'\' - jsou vydávány distribuce (hlavně jednotlivými národními organizacemi/sdruženími - typicky mají označení končící na -LUG /Linux User Group/, např. CZLUG je sdružení \"příznivců\" a uživatelů OS Linux), které jsou upraveny a určeny pro konkrétní národnostní oblast.
\'\'\'Pozn.:\'\'\' Většina větších programových balíků je internacionalizována, tj. jsou psány tak, že po jednoduchém nastavení komunikují s uživatelem v jeho přirozeném jazyce. Nicméně lokalizované distribuce se vyznačují např. i přidanými fonty písem pro daný jazyk, přeloženými manuály a dokumentací, dokumentací popisující specifika dané země či oblasti (např. druhy připojení k Internetu a popisem místních poskytovatelů připojení apod.) \nCharakteristiky většiny GNU/Linux distribucí jsou popsány v sekci doplňujících výukových dokumentů. \n==Distribuce RedHat==\nAmerická firma RedHat Inc. (v překladu \"Červený klobouk\") je jedním z největších a nejznámějších distributorů \"klasických, velkých\" GNU/Linux distribucí. Na české půdě je asi nejznámější spolu distribucemi Debian, SuSE, Mandrake Caldera OpenLinux a Slackware. \nJejími přednostmi jsou: \n:* volně stažitelná z Internetu - buď přímo ze serverů firmy nebo z mnoha \"zrcadel\" po světě, včetně čs. republiky\nnové distribuce jsou vydávány relativně často /cca po půl roce/ a pravidelně\n:* Je to \"velká\" distribuce, pokrývající potřeby serverové, uživatelské i vývojářské\n:* Je dobře lokalizovaná včetně instalačního procesu\n:* Nabízí distribuce pro rozšířené HW platformy Intel/i386+, Intel/I64, Alpha, IBM S390\n:* Velmi rychle reaguje na nalezené chyby v programech uveřejněním opravených verzí. Tyto opravy chyb (tzv. update) rychle uveřejňuje pro všechny své platformy a až pro 4 distribuce starší než je právě aktuální. V systémech je možné nainstalovat balíček SW zajišťující automatické stahování oprav a jejich instalaci. Přitom pokud zrovna není vydáno nové jádro, není třeba systém restartovat, maximálně je nutný restart příslušné služby. \n:* Díky vlastnímu správci programových balíků RPM (RPM = Redhat Package Manager = RedHatí správce balíků) je snadná správa, údržba, evidence, informace a upgrade programových balíků). Systém RPM eviduje a hlídá programové balíky, programy v nich, jejich verze, data modifikace a uveřejnění, kontrolní sumy souborů balíků, závislost na jiných balících a další souvislosti. Tímto způsobem je zaručena integrita a funkčnost systému jako celku. \nNevýhodou je že firma zatím nemá zastoupení v čs. republice (to má z výše jmenovaných pouze německá fy SuSE, jediná ne-americká společnost). Vzhledem k povaze GNU/Linux-u - jeho vývoj je umožněn a podnícen masovým rozšířením Internetu a existuje spousta expertů, programátorů a odborných konferencí - tato nevýhoda ztrácí na váze, protože jak začínající uživatel tak zkušený vývojář najde v \"síti sítí\" dokumentaci a pomoc pro své problémy. A samozřejmě profík má možnost nabídnout a poskytnout své znalosti a schopnosti ostatním. Určitou slabinou je to, že většina informací je v angličtině - uživatel neovládající tento jazyk je odkázán na lokální zájmovou skupinu Linuxu nebo na místní firmy poskytující služby v této oblasti. Je jen potěšující, že jejich počet utěšeně roste, takže tato slabina ztrácí na významu. Navíc podle posledních zpráv (jaro 2003) se zastoupení fy RedHat v ČR připravuje.\n\n\'\'\'Každopádně se podpora uvnitř Linuxové komunity nedá srovnat např. s podporou komerční firmy Micro$oft\'\'\', kde pomoc uživateli zpravidla končí větou \"Naformátujte disk(y), přeinstalujte všechno, proveďte upgrade na novou (=dražší) verzi OS. V případě, že uživatel nemá značkový počítač, není podpora žádná.\n\n=Kde hledat dokumentaci, nápovědu a pomoc=\nOS Linux a jeho programové vybavení je velice komplexní a rychle se vyvíjí. Dostupnost dokumentace k programům, k možnostem jejich konfigurace, k řešení možných problémů je velice důležitá. Je řada možností, jak nalézt pomoc a orientaci při řešení uživatelských, programátorských a správcovských problémů: \n:* Programy samy jsou většinou schopny poskytnout základní nápovědu - programy pracující v grafickém režimu pod X-Window mohou mít tlačítko \"Pomoc\"/\"Help\", programy pracující s příkazovou řádkou mají většinou přepínač \"-h\" nebo \"--help\", při kterém vypíší syntaxi jejich použití; někdy stačí spustit program bez parametrů. \n:* Programy pracující na příkazové řádce a popisy jejich konfiguračních souborů mají většinou dokumentaci ve formátu \"[[man]]\" (zkratka z manuál) stránek. Jsou rozděleny do několika sekcí označených jednou číslicí (nověji i písmenem). Nejznámější jsou: 1-uživatelské příkazy (bash,cat,du,find,grep,..), 2-systémová volání (fork(),open(), write(),..), 3-knihovní funkce (fopen(), malloc(), printf(),..), 5-formáty souborů (crontab, fstab, inittab,..), 8-nástroje pro údržbu systému (adduser, mount, pam, xinetd,..). Příkaz:\n::\'\'\'man -a jméno_programu\'\'\'\n:: nebo\n::\'\'\'man -a jméno_konfiguračního_souboru\'\'\'\n::vypíše na terminál všechny nápovědy k danému předmětu.\n::Pozn.: Fyzicky jsou man stránky typicky uloženy v \"/usr/share/man/manX\", kde X je označení sekce. Národní man stránky jsou v \"/usr/share/man/ŘEČ/manX\", kde ŘEČ je označení jazyka (např. \"cs\", \"pt_BR\").\n:*Pro nápovědu slouží i příkazy \'\'\'apropos\'\'\' a \'\'\'whatis\'\'\'. První prohledává informační databáze na zadané řetězce a druhý na zadané klíče.\n:* Některé programy příkazové řádky nemají dokumentaci ve formátu \"man\" stránek ale ve formátu novějších \"[[info]]\" stránek (mj. umožňují křížové odkazy a bohatší způsob manipulace a dokumentem nápovědy). Příkaz:\n::\'\'\'info jméno_programu\'\'\'\n::vypíše na terminál nápovědu k danému předmětu. Pokud zadáme jen příkaz \'\'\'info\'\'\' , dostaneme výpis hlavní nabídky systému \"info\" v kterém můžeme hledat a vybírat. \n:* V RedHat systémech jsou dokumentace k jednotlivým programovým balíkům uloženy v adresářích\n::\'\'\'/usr/share/doc/jméno_balíku\'\'\'.\n::Pozn.: Výpis souborů daného balíku včetně cesty (adresářů) získáme výpisem:\n::\'\'\'rpm -ql jméno_balíku\'\'\'\n::a jméno balíku, který obsahuje daný soubor získáme příkazem\n::\'\'\'rpm -qf plná_cesta_vč._jména_souboru\'\'\'\n::např.:\n::\'\'\'rpm -ql gpm\'\'\'\n::vypíše všechny soubory v balíku \"gpm\" - General Purpose Mouse = obecná podpora myši v textové konzoli\n::\'\'\'rpm -qf /usr/bin/bc\'\'\'\n::řekne v kterém balík je přesný kalkulátor pro příkazovou řádku \"bc\" \n:* Pro řadu činností, subsystémů a úkonů lidé po světě napsali tzv. \"\'\'\'HOWTO\'\'\'\" - v překladu asi něco jako \"\'\'\'JakNaTo\'\'\'\". Jsou to dokumenty (dnes je jich několik set), v nichž je popsáno jak co v Linuxu nakonfigurovat, jak co funguje, jakou má co strukturu apod. Jsou dokumenty, kde je popsáno, jak nastavit připojení k Internetu (Unix-and-Internet-Fundamentals-HOWTO, PPP-HOWTO), jakou strukturu mají souborové systémy (Filesystems-HOWTO) apod. \n:* Linux FAQ - (Frequently Asked Question = často kladené otázky) je soubor dotazů na nejčastější problémy okolo Linuxu a odpovědi na ně. Svoje FAQ mají často i jednotlivé programové balíky a jsou v dokumentaci balíku (tj. většinou v /usr/share/doc/jméno_balíku). \n:* LDP - (Linux Documentation Project = Dokumentační projekt systému Linux) - je projekt s cílem popisu jednotlivých částí systému\n:* Konference a mail-listy - řada větších projektů má na Internetu své domácí stránky a konference pro jejich uživatele, správce či vývojáře.\n\n=Slovníček běžných výrazů=\n* \'\'\'GNU\'\'\' - Rekurzivní akronym pro výraz \"GNU\'s Not Unix\", tedy GNU Není Unix. Američani ji nečtou jako \"géenú\" ale prostě jako \"gnu\". \'\'GNU je rozsáhlý projekt, který vytvárí volně šiřitelný software na profesionální úrovni. Na rozdíl od shareware produktů jsou ale programy úplně zdarma a jsou k dispozici i zdrojové kódy. Je možné i jejich komerční využití.\'\'\n* \'\'\'Free software\'\'\' - Programy, které jsou volně šiřitelné podle nějaké volné licence, obvykle GNU General Public License. POZOR ! \"free software\" se překládá jako \"svobodný software\"\n* \'\'\'Free Software Foundation, FSF\'\'\' - Nadace pro svobodný SW - nezisková společnost zastřešující vývoj GNU systému.\n* \'\'\'GNU General Public License, GNU GPL\'\'\' - Licence umožňující volné kopírování programů a modifikaci jejich zdrojových kódů za přesných podmínek, tak aby je nebylo možné zneužít komerčně, tedy prodat. License ovšem umožňuje používat software i v komerčních aplikacích a v celé komerční sféře, pouze účtované poplatky nesmí být za tento software ale za to co k tomu která firma dodá.\n* \'\'\'Open source\'\'\' - výraz definující software, jehož zdrojové kódy jsou volně přístupné\n* \'\'\'Kernel, jádro\'\'\' - část operačního systému zajišťující komunikaci s hardwarem a spouštění dalších částí\n* \'\'\'Linux\'\'\' - jádro operačních systémů na bázi UNIXu původně vyvinuté Linusem Torvaldsem, nyní je dále podporováno širokou základnou vývojářů. \'\'Používá většinu GNU programů. Je velmi výkoný a stabilní, podporuje mnoho platforem (například PC, Amiga, Atari, Sparc, Ultra-sparc, Alpha a další). Je ideální pro vývoj aplikací (i na jiné operační systémy), nebo jako síťový server, ale je velmi dobře použitelný i pro jiné účely.\'\'\n* \'\'\'RMS\'\'\' - Richard Matthew Stallman \n* \'\'\'GPL\'\'\' - General public licence \n* \'\'\'LPF\'\'\' - League for Programming freedom (organizace proti patentování algoritmů) \n* \'\'\'GCC\'\'\' - GNU C compiler \n* \'\'\'GPP(G++)\'\'\' - GNU C++ compiler \n* \'\'\'LDP\'\'\' - Linux documentation project \n* \'\'\'EMACS\'\'\' - editor. Zkratka znamená Editor MACroS. Má ale i mnoho dalších významů.\n* \'\'\'DJGPP\'\'\' - Port kompilátoru C do DOSu. DJ vychází z jména autora (Dj Delorie), GPP z názvu C++ kompilátoru. \n* \'\'\'HURD\'\'\' - Rekurzivní zkratka: Hird Of Unix Replacing Daemons, Hird zase znamená Hurd of Interafaces Representing Depth. \'\'Hurd je moderní operační systém založený na mikrojádře Mach (GNU implementace tohoto mikrojádra je také k dispozici). Je zatím ale stále ve vývoji a nehodí se pro běžné použití. Má však mnoho zajímavých vlastností. První verze jsou již přístupné.\'\'\n\n\nPoslední aktualizace původního autora: 27.4.2003\n\nTím byl: Fr. Hanzlík','/* Distribuce RedHat */',0,'193.204.114.67','20050125111546','',0,0,0,0,0.159648318384,'20050125111546','79949874888453'); INSERT INTO cur VALUES (72,0,'Vlastnosti','{{Smazat}} -- [[Wikipedista:Woodcraft|Woodcraft]] 08:01, 23. 10. 2004 (UTC)','',3,'Woodcraft','20041023080143','',0,0,0,0,0.977621276387,'20041023080143','79958976919856'); INSERT INTO cur VALUES (73,0,'Syslog','{{Smazat}} -- [[Wikipedista:Woodcraft|Woodcraft]] 08:11, 23. 10. 2004 (UTC)','',3,'Woodcraft','20041023081137','',0,0,0,0,0.930469696378,'20041023081137','79958976918862'); INSERT INTO cur VALUES (74,0,'Start_Linuxu','[[Special:Whatlinkshere/Start Linuxu | Odkaz na stránky které sem odkazují]]\n\nOd zapnutí do promptu bash-e: Krátký popis toho, co se stane v Linux systému na platformě Intel 386+ kompatibilních PC od zapnutí napájení do doby přihlášení a výpisu promptu bash-e (nejobvyklejšího Linux shell-u)\n \nPozn: Činnosti prováděné do vysokoúrovňové inicializační fáze (viz níže) jsou specifické pro platformu Intel i386 kompatibilní a na jiných architekturách se liší. \n\n=Základní kroky= \n#BIOS vybere zaváděcí zařízení\n#Ze zaváděcího zařízení BIOS zavede zaváděcí sektor (boot sektor)\n#Boot sektor zavede spouštěcí a dekompresní rutiny a komprimované jádro Linuxu\n#Jádro je dekomprimováno (v chráněném - protected módu)\n#Nízkoúrovňová (low-level) inicializace kódem v assembleru\n#Vysokoúrovňová (high-level) inicializace kódem v C\n#Spuštění procesu init\n#odpověď na přihlašovací prompt getty předána úloze login, ten spustí bash\n\n==Hardware==\nPo zapnutí se počítač sám testuje - to se nazývá \"Power On Self Test\" neboli POST. Běhen této fáze se detekuje HW, přidělují se zdroje PNP ISA a PCI zařízením, detekují se disky a aktivují se BIOSy některých periferií: Video karta, řadiče SCSI, ale i např. BOOT ROM síťové karty. Pak program zvaný bootstrap loader, umístěný v ROM BIOSu, hledá boot sector. Boot sector je první sektor na disku a obsahuje malý program, který může zavést operační systém. Boot sectory jsou označeny \"magickým číslem\" 0xAA55 = 43603 na offsetu 0x1FE = 510. To jsou poslední dva byte 512 B dlouhého sektoru. Touto značkou HW (disk) říká, zda sektor je boot sektor nebo ne.\n\nBootstrap loader má seznam míst, kde hledá boot sektory. U moderních PC je toto pořadí konfigurovatelné v SETUP programu BIOSu PC, typicky lze volit mezi floppy disketou (-ami), pevným (-i) diskem, CD-ROM a případně ZIP mechanikou, USB diskem a zavedením systému ze sítě např. Intel PXE protokolem. Pokud bootstrap loader nalezne boot sektor, zavede jej do paměti a předá mu řízení. Tento program pak zavede OS. Na typickém Linuxu sytému to bude první část programu LILO (Linux LOader) nebo novějšího GRUB (GRand Unified Bootloader) - viz např. \"LILO\", \"Multiboot-with-LILO\", \"Multiboot-with-GRUB\" mini-HOWTO. Může to ale být i boot sektor Linuxového jádra - tato varianta se většinou používá pouze při zavádění systému z diskety n. CD-ROM, protože použití specializovaného zavaděče (LILO,GRUB) má několik výhod:\n* Možnost výběru mezi různými Linuxovými jádry a/n. různými OS.\n* Možnost předat jádru parametry na příkazové řádce (až 2 kB).\n* Možnost počátečního RAM disku (initrd), takže jádro může být bez většiny ovladačů.\n* Možnost zavést větší komprimované (bzImage) jádro - až 2.5 MB oproti 1 MB.\n* Možmost použít počáteční RAMdisk (initrd) pro zavedení potřebných obladačů \n\n=LILO/GRUB=\nKdyž počítač zavede boot sektor na normálním Linux systému, to co zavede je pouze část z LILO/GRUB zavaděčů zvaná \"zavaděč první etapy\" (\"first stage boot loader\" to nazývají Amíci). Je to malý program jehož jediným úkolem je zavedení a spuštění \"zavaděče druhé etapy\" (\"second stage boot loader\"). Dělení na dvě části je proto, že zaváděcí jeden sektor disku je malý na uchování kódu celého zavaděče.\n\nZavaděč druhé etapy vypíše prompt (pokud tak byl nainstalován) a následně zavede vybraný/implicitní operační systém. Pokud je jím Linux, zavede přímo vybrané Linuxové jádro - obvykle soubor \"\'\'\'/boot/vmlinuz-x.y.z\'\'\'\", kde x.y.z je verze jádra. \"Z\" na konci vmlinuz znamená, že soubor obrazu jádra je komprimovaný /programem gzip/. LILO/GRUB také umožňují předat jádru \"příkazový řádek\" - seznam parametů např. o počtu a konfiguraci řadičů a portů, APM, rezervaci ISA PNP zdrojů (přerušení, DMA, I/O portů), zavedení počátečního RAM disku s ovladači nutnými pro start systému, max. počtu používaných procesorů u SMP systémů, umístění NFS souborového systému pro bezdiskové počítače, co má jádro provést v případě detekce neobnovitelné chyby, umístění a způsob připojení kořenového souborového systému (ro, rw), požadavek na start v jednouživatelském (single-user) módu apod.\n\nLILO příp. GRUB mají své konfigurační soubory na Linux filesystému, a sice \'\'\'/etc/lilo.conf\'\'\' resp. \'\'\'/boot/grub/menu.lst\'\'\' (u RedHat distribucí je /boot/grub/menu.lst symbolický link na /boot/grub/grub.conf).\n\nČinnost LILO/GRUB zavaděče končí předáním řízení na tzv. \"setup\" rutinu jádra. Ta připraví přechod na protected mód, dekomprimuje jádro a předá mu řízení.\nPo inicializaci registrů a kontrole typu procesoru následuje vysokoúrovňová inicializace. Během ní se mj. provádí inicializace poplatné architektuře, inicializace datových struktur, inicializuje se systémová konzole, podpora dynamického zavádění modulů, počítá BogoMips, inicializace VFS (Virtual File System), VM (Virtual Memory manager), vyrovnávací cache, IPC (InterProcess Communication), quota (SubSystém limit a využití disků uživateli), provádí se kontroly na chyby HW a dělají protiopatření (např. f00f chyba P5), připraví se start plánovače \"na příští chvíli\", odstartuje vlákno (thread) pro start procesu init a přejde do čekací smyčky (idle loop).\n\n\'\'\'Jádro Linuxu\'\'\' - stručně řečeno, pomocí HW dělá to, co programy potřebují a očekávají ke svému běhu, rychle a efektivně. Procesor může najednou provádět pouze jednu instrukci, ale Linux systém se chová jako by prováděl řadu věcí současně. Jádro to realizuje rychlým přepínáním a přidělováním procesoru mezi úlohami. Interval tiku hodin a tím i nejmenší interval přepínání se nazývá \"jiffie\" a je na i386+ systémech 1/100 sec (závisí na HW architektuře - např. na procesorech Alpha je to 1/1024 sec.) Nejlepší využití procesoru je dáno tím, že sleduje, co jaký program/proces provádí - který je připraven k běhu a který na něco čeká; např. na vstup z klávesnice nebo zapsání/přečtení záznamu z disku. Tato úloha jádra se nazývá plánování (scheduling). Pokud program nic nedělá, pak není nutno, aby byl v RAM. A také program, který něco dělá, může mít část/části, které nedělají nic. Adresní prostor každého procesu je dělen do stránek. Jádro si udržuje informace o tom, které stránky kterých procesů jsou nejvíce užívány. Stránky, které tak často užívány nejsou, mohou být přesunuty do odkládací (swap) diskové oblasti. Jiné nepoužité stránky mohou být vysunuty a udělají jim místo, když jsou opět potřeba v RAM. Tento mechanismus se nazývá \"správa virtuální paměti\" (virtual memory management, VM).\n\nJádro obsahuje ovladače (drivers) pro mnoho specifických zařízení. Jejich ovládání prezentuje v jednotné formě aplikačním programům. Jádro také spravuje systém souborů, interprocesové komunikace, a mnoho síťových věcí. Většina konfigurace jádra je dána při jeho sestavení - je možné nastavit architekturu, typ procesoru, podporované sběrnice, souborové systémy, periférie, APM, ACPI, PNP, SW RAID, typy sítí a síťových protokolů a další.\n\n=GNU C knihovna=\nNásledující věc, která se stane s počítačem při startování je, že je zatažen a spušten program init. Nicméně, program init, téměř jako všechny programy, používá funkce z knihoven. Jádro tedy musí být schopno před startem programu init potřebné knihovny zavést a připravit k použití, a to jak pro starý formát spustitelných programů, tzv. \'\'\'a.out\'\'\' (Assembler OUTput), tak pro nový \'\'\'ELF\'\'\' (Executable and Linking Format) formát. Nejznámější jsou standartní C knihovny - na GNU/Linux systémech se nazývá [[glibc]] (Gnu LIBrary C). Jsou v ní stovky standartních funkcí: matematické, práce s řetězci, datové/časové, alokace paměti atd. Všechno v Unixu (a Linuxu) je psáno v jazyce C, takže všechno užívá tyto funkce. Adresář \"/usr/lib\" obsahuje velké množství souborů většinou pojmenovaných lib\'\'něco\'\'.so nebo lib\'\'něco\'\'.a atd. Jsou to knihovny těchto funkcí. Glibc je jenom GNU implementace těchto funkcí.\n:Tyto knihovní funkce mohou programy použít dvěma způsoby. Jestliže je program sestavován staticky, knihovní funce jsou kopírovány z knihoven lib\'\'něco\'\'.a do vytvářeného spustitelného obrazu. Jestliže je program sestavován dynamicky (což je náhradní hodnota), pak když je program spušten a potřebuje knihovní kód, ten je volán ze souboru lib\'\'něco\'\'.so.\n:Program ldd vypíše jaké sdílné knihovny daný program ke svému běhu potřebuje. Například, zde jsou knihovny, které užívá program bash:\n\n
\nfranta:~$ ldd /bin/bash\n   libtermcap.so.2 => /lib/libtermcap.so.2 (0x4002c000)\n   libdl.so.2 => /lib/libdl.so.2 (0x40030000)\n   libc.so.6 => /lib/libc.so.6 (0x40034000)\n   /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)\n
\n\n==Program init==\nVětšina linuxových systémů používá způsob \"Systém V\" inicializace. Obecně jádro po dokončení svého zavedení a své inicializaci spustí program /sbin/init . Úkolem init-u je, aby vše dále bylo správně spuštěno. Zařizuje připojení (\"mountování\" - mount) a případnou kontrolu souborových systémů a swapovacích oblastí, nastavení hodin, jména systému, startuje systémové démony, síťové služby a procesy pro přihlášení do systémů (getty/mingetty/xdm). Základním konfiguračním souborem programu init je /etc/inittab. Tento soubor popisuje, které procesy jsou startovány během zavedení systému a během normalní činnosti.\n\nInit rozlišuje několik \'\'\'úrovní běhu\'\'\' (runlevel), každá úroveň může mít svojí množinu procesů, které v ní jsou startovány. Platné úrovně běhu jsou 0-6. Další povolené úrovně nejsou v systémech linux a unix využívány. Položky v souboru inittab mají formát:\n\n\'\'\'id:úrovně běhu:akce:proces\'\'\'\n\n\'\'\'id\'\'\' - je jednoznačná posloupnost 1-4 znaků, která definuje položku v inittab\n\n\'\'\'úrovně běhu\'\'\' - je seznam úrovní pro ktere se bude provádět specifikovaná akce.\n\n\'\'\'akce\'\'\' popisuje, která akce bude prováděna:\n:respawn - pokud proces skončí, bude restartován (např. [[getty]]).\n:wait - proces bude nastartován jednou při vstupu do dané úrovně běhu a init bude čekat na jeho ukončení.\n:once - proces bude spuštěn jednou při vstupu do dané úrovně běhu.\n:boot - proces bude spuštěn během zavádění systému, pole urovně běhu je ignorováno.\n:bootwait - proces bude spuštěn během zavádění systému a i čeká na jeho ukončení (\'\'\'/etc/rc\'\'\').Pole úrovně běhu je ignorováno.\n:off - nedělá nic.\n:ondemand - proces označen ondemand úrovní běhu bude spušten kdykoli je daná ondemand úrovně běhu (a,b,c) volána.\n:initdefault - specifikuje úroveň běhu, do které by měl systém vejít po startu. Pole proces je ignorováno.\n:sysinit - proces bude prováděn během zavádění systému, ještě před položkami boot nebo bootwait.\n:powerwait - proces byde spuštěn při výpadku napětí (init je o tom většinou informován programen komunikujícím s UPS).Init bude čekat na ukončení procesu. \n:powerfail - jako pro powerwait, ale init nečeká na ukončení procesu.\n:powerokwait - proces bude spuštěn, když je init informován o obnovení napájení.\n:powerfailno - proces bude spuštěn, když se init dozví, že záložní baterie na externí UPS jsou téměř vybité. \n:ctrlaltdel - proces bude spuštěn, když init přijme signál SIGINT - typicky stiskem kombinace kláves ctrl-alt-del na systémové konzoli\n:kbrequest - proces bude spuštěn, když init přijme signál od ovladače konzolové klávesnice, že byla stisknutá speciální kombinace kláves.\n\'\'\'proces\'\'\' specifikuje prováděný proces. Ukončení spuštěného procesu spolu s příčinou zastavení init zaznamenává do souborů \'\'\'/var/run/utmp\'\'\' a \'\'\'/var/log/wtmp\'\'\'. Pokud ale pole procesu začíná znakem \"+\", init účtování nebude zaznamenávat.\n\nPříklad souboru \'\'\'/etc/inittab\'\'\' :\n\n
\n# Default runlevel. The runlevels used by RHS are:\n#   0 - halt (Do NOT set initdefault to this)\n#   1 - Single user mode\n#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)\n#   3 - Full multiuser mode\n#   4 - unused\n#   5 - X11\n#   6 - reboot (Do NOT set initdefault to this)\n# \nid:3:initdefault:\n\n# System initialization.\nsi::sysinit:/etc/rc.d/rc.sysinit\nl0:0:wait:/etc/rc.d/rc 0\nl1:1:wait:/etc/rc.d/rc 1\nl2:2:wait:/etc/rc.d/rc 2\nl3:3:wait:/etc/rc.d/rc 3\nl4:4:wait:/etc/rc.d/rc 4\nl5:5:wait:/etc/rc.d/rc 5\nl6:6:wait:/etc/rc.d/rc 6\n\n# Things to run in every runlevel.\nud::once:/sbin/update\n\n# Trap CTRL-ALT-DELETE\nca::ctrlaltdel:/sbin/shutdown -t3 -h now\n\n# When our UPS tells us power has failed, assume we have a few minutes\n# of power left.  Schedule a shutdown for 2 minutes from now.\n# This does, of course, assume you have powerd installed and your\n# UPS connected and working correctly.  \npf::powerfail:/sbin/shutdown -f -h +2 \"Power Failure; System Shutting Down\"\n\n# If power was restored before the shutdown kicked in, cancel it.\npr:12345:powerokwait:/sbin/shutdown -c \"Power Restored; Shutdown Cancelled\"\n\n# Run gettys in standard runlevels\n1:2345:respawn:/sbin/mingetty --noclear tty1\n2:2345:respawn:/sbin/mingetty --noclear tty2\n\n# Run xdm/gdm/kdn in runlevel 5\n# xdm is now a separate service\nx:5:respawn:/etc/X11/prefdm -nodaemon\n
\n\n===Změna úrovně běhu===\nPoté co init spustil všechny specifikované procesy, čeká na ukončení některého svého spuštěného procesu, na signál výpadku napájení nebo na signál úlohy telinit ke změně úrovně běhu systému. Při výskytu jedné z těchto tří podmínek znovu načítá soubor \'\'\'/etc/inittab\'\'\'.\n\nZnovunačtení můžeme programu init vnutit příkazem telinit Q nebo q. Příkaz telinit také může říci programu init, abych přepnul do jiné úrovně běhu. Init pak vyšle signál SIGTERM všem procesům, které nejsou v nové úrovni běhu definovány, pak čeká 5 vteřin (dobu možno změnit příkazem telinit) a pak neukončené procesy zlikviduje signálem SIGKILL. V distribuci RedHat je inicializační script soubor \'\'\'/etc/rc.d/rc.sysinit\'\'\'. Následně je volán script, který spustí procesy pro defaultní úroveň běhu. Pro úrovně 0-6 existují adresáře \'\'\'/etc/rc.d/rcN.d\'\'\', kde N je 0-6. V nich jsou scripty s názvy standartně ve tvaru SnnJméno_Služby a KnnJméno_Služby, kde nn je dvouciferné číslo 00-99. Script \'\'\'/etc/rc.d/rc\'\'\' při změně úrovně běhu spustí všechny KnnJméno_Služby scripty s parametrem stop a následně všechny scripty s SnnJméno_Služby s parametrem start. \n\nPoslední důležitá věc, kterou init provede, je start několika getty/mingetty procesů. Jsou označeny akcí \'\'\'respawned\'\'\', což znamená, že pokud z nějakého důvodu skončí, inet je spustí znovu. Většina distribucí přichází s šesti virtuálními terminály, jejich počet je možný zmenšit i zvětšit. Je také možné mít textové terminály na sériových linkách nebo připojených modemech. Při startu v grafickém režimu (run-level 5) je ještě spuštěn proces [[xdm]] (X Display Manager), který provádí služby podobně jako getty a login na znakových terminálech: vyzve uživatele k zadání jména a hesla, ověří jej a spustí pro něj takzvaný \"správce sezení\" - session manager.\n\nPři přechodu systému do úrovně běhu 1 (jednouživatelský mód) init spustí rootův shell na zařízeni /dev/console, bez nutnosti zadání jména a hesla.\n\n=Systém souborů=\nV tomto článku bude užito slovo souborový systém ve dvou různých významech. Jako souborové systémy na diskových oblastech a jiných zařízeních a jako souborový systém tak jak je prezentován běžícím linuxovým systémem. Na Linuxu se připojují (\"mountují\" - viz povel [[mount]]) diskové souborové systémy do systémového souborového systému. Při startu jádro připojí kořenový souborový systém v read-only modu. Během startu je kořenový souborový systém zkontrolován programem fsck a následně znovu připojen (remount) v read-write modu. Po připojení root-fs v read-write módu jsou připojeny ostatní souborové systémy podle specifikace v \'\'\'/etc/fstab\'\'\' . \n\nPříklad souboru \'\'\'/etc/fstab\'\'\' :\n\n
\nLABEL=/           /                  ext3    defaults        1 1\nnone              /dev/pts           devpts  gid=5,mode=620  0 0\nnone              /proc              proc    defaults        0 0\nnone              /dev/shm           tmpfs   defaults        0 0\nLABEL=/var1       /var               ext3    defaults        1 2\n/dev/rd/c0d0p2    swap               swap    defaults        0 0\n/SWAP             swap               swap    defaults        0 0\n/dev/cdrom        /mnt/cdrom         iso9660 noauto,owner,kudzu,ro 0 0\n/dev/fd0          /mnt/floppy        auto    noauto,owner,kudzu 0 0\n/dev/cdrom1       /mnt/cdrom1        iso9660 noauto,owner,kudzu,ro 0 0\n/dev/hda1         /mnt/C             vfat    defaults        0 0\n/dev/hda5         /mnt/D             vfat    defaults        0 0\n
\n\n=Démoni jádra=\nPříkaz \"ps aux\" vypíše něco podobného následujícímu: \n
\nUSER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND\nroot         1  0.0  0.5  1384  368 ?        S    Mar20   0:03 init\nroot         2  0.0  0.0     0    0 ?        SW   Mar20   0:01 [keventd]\nroot         3  0.0  0.0     0    0 ?        SWN  Mar20   0:01 [ksoftirqd_CPU0]\nroot         4  0.0  0.0     0    0 ?        SW   Mar20   0:11 [kswapd]\nroot         5  0.0  0.0     0    0 ?        SW   Mar20   0:00 [bdflush]\nroot         6  0.0  0.0     0    0 ?        SW   Mar20   0:00 [kupdated]\nroot       467  0.0  0.0     0    0 ?        SW   Mar20   0:00 [eth1]\nroot       551  0.0  0.6  1444  408 ?        S    Mar20   0:00 syslogd -r -x\nroot       556  0.0  0.5  2056  344 ?        S    Mar20   0:01 klogd -2\nroot       818  0.0  0.6  1612  408 ?        S    Mar20   0:00 crond\nroot       901  0.0  0.6  5156  412 tty1     S    Mar20   0:00 login -- root    \nroot       905  0.0  3.4  5184 2148 tty4     S    Mar20   0:00 login -- franta  \nroot       906  0.0  0.4  1356  276 tty2     S    Mar20   0:00 /sbin/mingetty --\nroot       907  0.0  0.4  1356  276 tty3     S    Mar20   0:00 /sbin/mingetty --\nroot      2174  0.0  2.0  2476 1308 tty1     S    14:30   0:00 -bash2\nfranta    2587  0.0  2.0  2476 1308 tty4     S    16:43   0:00 -bash2\n
\n\nJe to seznam všech procesů běžících v systému. Proces init je vždy proces číslo 1. Procesy 2,3,4,5,6 (keventd, ksoftirqd_CPU0, kswapd, bdflush, kupdated) jsou uzavřeny v hranatých závorkách \"[]\" a jejich velikost v operační paměti (pole VSZ a RSS) je 0. Je to proto, že tyto procesy jsou démoni jádra, i když většina jádra se obyčejně neukazuje na seznamu procesů. Démoni jádra jsou startováni po initu, takže mají čísla procesů jako normální procesy. Ale jejich kód a data jsou součástí paměti jádra. Závorky \"[]\" okolo položek ve sloupci \"COMMAND\" jsou proto, že souborový systém /proc neobsahuje informaci o příkazové řádce pro tyto procesy.\n\nNěkteré činnosti jež \"jaderní\" démoni provádějí:\n\nkswapd - přesouvá nepotřebné části běžících programů na swapovací oblasti pevných disků v případě nedostatku volné operační paměti nebo naopak do operační paměti potřebné části programu z disku (zapínaní/ vypínání swapovacích oblasti(-í)se provádí programy swap on/off) \n\nbdflush a kupdated - vyprazdňují vyrovnávací paměti na disk(y) \n\n==Proces logování událostí systému (systém logger)==\nJedny z prvních služeb, které jsou startovány procesem init, jsou démoni syslogd a klogd. Zapisují zprávy do systémových logů - zprávy jádra jsou obsluhovány démonem klogd, zatímco syslogd provádí logování zpráv z jiných procesů, a případně přes síť i z jiných systémů. Hlavní logovací soubor bývá \'\'\'/var/log/messages\'\'\', ale konfigurace logovacího systému je řízena souborem \'\'\'/etc/syslog.conf\'\'\', který určuje co se bude logovat a kam. Zprávy jsou identifikovány podle toho, od které služby přichází a jakou mají úroveň priority. Kofigurační soubor sestává z řádek, které v podstatě říkají, že zprávy od služby \'\'\'\'\'x\'\'\'\'\' s prioritou \'\'\'\'\'y\'\'\'\'\' a vyšší mají jít do \'\'\'\'\'z\'\'\'\'\', kde \'\'\'\'\'z\'\'\'\'\' může být obyčejný soubor, pojmenovaná roura, terminál nebo konzole, vzdálený počítač nebo seznam uživatelů.\n\n==Getty a Login==\nGetty je program který umožňuje připojit se přes sériové zařízení jako je virtualní terminál, textový terminál, nebo modem. Zobrazí přihlášovací prompt a když zadáte vaše uživatelské jméno, getty jej předá programu login, který se zeptá na heslo, ověří to a spustí shell. Je dostupných několik variant programu getty. Některé distribuce, včetně RedHat používají velmi malou verzi zvanou mingetty, která pracuje pouze s virtuálními terminály. Login je program z balíku \'\'\'util-linux\'\'\' (mkswap, fdisk, passwd, kill, setterm, mount, swapon, rdev, renice, more a další), který také obsahuje dobře pracující getty zvané \'\'\'agetty\'\'\' (Alternative linux GETTY).\n\nGetty jsou obyčejně startovány v /etc/inittab procesem init. Zpráva která se vypíše na vrchu obrazovky před přihlašovacím promptem je ze souboru \'\'\'/etc/issue\'\'\'. Login kontroluje detaily ohledně přihlášení uživatele v \'\'\'/etc/passwd\'\'\', a jestliže systém podporuje stínování hesel též v \'\'\'/etc/shadow\'\'\'. Moderní Unixové systémy včetně Linuxu podporují používání tzv. \'\'\'PAM\'\'\' (Pluggable Autentication Module), které umožňují obecnou kontrolu ověřování identity a oprávnění např. ze vzdálených serverů, podle adresy stroje, z níž se uživatel přihlašuje, jména uživatele, doby přihlášení apod. To lze využít nejen k přihlašování, ale k autorizaci (oprávnění) uživatele/procesu vykonávat nějakou činnost.\n\n==Bash==\nPo zadání správné kombinace přihlašovacího jména a hesla úloha \'\'\'login\'\'\' ověří v
\'\'\'/etc/passwd\'\'\'
který shell má spustit. Ve většině případů to na Linuxových systémech bude \'\'\'bash\'\'\' (Bourne Again SHell - vylepšený sh). Jeho úkolem je čtení uživatelských příkazů a jejich provádění. Bash je zároveň uživatelské rozhraní a interpret programovacího jazyka:\n\n:* Jako uživatelské rozhraní čte příkazy uživatele a provádí je sám jestliže to jsou \"interní\" příkazy jako cd, pvd, kill nebo najde a provede program jestliže jsou to \"externí\" příkazy jako cp, dd nebo startx. Také poskytuje řadu vymožeností jako udržování historie příkazů, doplňování jmen (souborů, uživatelů,..), editaci příkazové řádky, klávesová makra apod.\n:*Jako interpret programujícího jazyka - scripty, které init při startu systému vykonává, jsou většinou scripty shellu, a jsou prováděny bash-em. Dobrá znalost kombinace programovacího jazyka spolu s obvyklými systémovými programy a utilitami pro příkazovou řádku vytváří velmi výkonný nástroj.\n\nSoubor \'\'\'/etc/bashrc\'\'\' řídí systémové chování bash-e. Příkazy zde napsané ovlivní každého kdo použije bash na tomto systému. Další globální soubor ovlivňující chování bash-e je \'\'\'/etc/profile\'\'\'. Když bash má po startu přečteny konfigurační soubory systémové úrovně (system-wide), hledá osobní konfigurační soubory. Ty jsou v domovském (home) adresáři pod jmény \'\'\'.bash_profile\'\'\' , \'\'\'.bash_login\'\'\', \'\'\'.profile\'\'\' a \'\'\'.bashrc\'\'\' (tečka na počátku znamená, že jsou skryté - pro jejich výpis musíme v příkazu \"ls\" použít přepínač \"-a\" n. \"-A\"). Úpravou těchto souborů je možné přizpůsobit chování bash-e potřebám uživatele, např. nastavit proměnné prostředí, implicitní editor, parametry národního prostředí, spuštění úloh po přihlášení apod. Detaily viz v \"man bash\".\nSoubor \'\'\'.bash_logout\'\'\' je bash-em čten a prováděn při ukončení přihlašovacího shellu - sem lze vložit příkazy, jež se mají provést při odhlášení uživatele ze systému.','',3,'Woodcraft','20041023094306','',0,0,1,0,0.325762780535,'20041023094306','79958976905693'); INSERT INTO cur VALUES (75,0,'Adresářová_struktura','[[Special:Whatlinkshere/Adresářová struktura | Odkaz na stránky které sem odkazují]]\n\n= Základní vlastnosti =\n* Je jen jedna velká stromová struktura začínající v kořenovém adresáři, Linux/Unix rozlišuje velká a malá písmena (standardně se u názvů souborů i adresářů používají malá písmena), jména souborů jsou dlouhá max. 255 znaků (ext2 fs), v názvu souboru se nesmí vyskytnout znak NUL (binární nula) a znak lomítko \"/\", celé jméno souboru včetně cesty je dlouhé max. 4 kB, a k oddělování adresářů a souborů používá normální lomítko \"/\". \n* Zhruba 8 nativních Unixových FS (tj. může na nich být OS Linux), z toho 4 žurnálovací: ext3 (Linux komunita, nástupce ext2, je s ním kompatibilní), ReiserFS (výkonný, zvlášť při velkém množství malých souborů v adresářích), JFS (IBM Journalling filesystem), XFS (SGI žurnálovací FS). Nežurnálovací jsou: ext2 (nativní Linux FS), Minix (prapůvodní FS Linuxu, dosti omezen - např. jména souborů max 14.-znakové ap.), UMSDOS (nad DOS FAT FS, přidává dlouhé názvy souborů, vlastnictví a práva). Podpora dalších cca 25 diskových FS (CD-ROM formáty ISO9660 a Macintosh HFS, FAT/VFAT/FAT32/NTFS Micro$oft, HPFS (IBM OS/2) a další) a 5 síťových FS (Novel Netware přes IPX i TCP/IP, MS/IBM Lanmanager a Windows, Unixový NFS aj.\n* Základní adresáře OS mají pevné názvy a použití - viz FHS - Filesystem Hierarchy Standard (norma hierarchie souborového systému) pro OS Unixového typu (Unix-like).\n* Každý nativní Unixový FS musí podporovat adresáře, obyčejné soubory, tvrdé a symbolické linky, blokové a znakové speciální soubory, pojmenované roury a sockety domény Unix. Dále musí podporovat vlastníka a skupinu souboru a základní přístupové bity pro vlastníka, skupinu a ostatní. A také musí podporovat tyto časové údaje souborů: čas posledního přístupu k souboru (označován jako atime - access time), čas poslední modifikace obsahu souboru (mtime - modification time) a čas poslední změny i-nodu souboru /= čas změny atributů souboru/ (ctime - change time). \n* Každý adresář obsahuje automaticky 2 položky: \".\" představuje běžný adresář, \"..\" představuje nadřazený adresář.\n* Rozlišujeme pojem relativní a absolutní cesty: absolutní začíná lomítkem, tj od kořenového adresáře; relativní začíná od aktuálního adresáře.\n* Soubory začínající tečkou \".\" jsou skryté a nevidíme je pokud je extra nevyžádáme (přepínač \"-a\" u přikazu ls ap.)\n* Speciální adresáře - výjimečné svým obsahem a použitím. Nejznámější jsou tyto: \n:; \'\'\'/etc\'\'\' : globální (systémová) konfigurace celého počítače (uživatelská nastavení jsou vždy v domácích adresářích jednotlivých uživatelů). Veškeré chování systému je řízeno konfiguračními soubory v tomto adresáři a jeho podadresářích. Vždy zálohovat alespoň tento adresář (komprimovaný se vejde na disketu). \n:; \'\'\'/dev\'\'\' : obsahuje soubory zařízení. Tyto speciální soubory představují tzv. bloková a znaková speciální zařízení. Na dlouhém výpisu příkazem \"ls -l\" mají jako první písmeno práv \"b\" (block - bloková zař.) nebo \"c\" (character - znaková zař.) a místo velikosti se zobrazuje jedinečná dvojice čísel (v rozsahu 0-255) - tzv. hlavní a vedlejší číslo zařízení. \n:; \'\'\'/proc\'\'\' : virtuální souborový systém, obsahuje soubory odrážející stav operačního systému. Většina souborů je jen pro čtení, některé soubory - typicky v adresáři \"/proc/sys\" - lze zapisovat - tak lze měnit charakteristiky a limity OS (např. max. počet otevřených souborů systému zápisem nové číselné hodnoty do \"/proc/sys/fs/file-max\", pro router povolit forwarding IP paketů napříč strojem zápisem jedničky do \"/proc/sys/net/ipv4/ip_forward\" apod.) \n\'\'\'Pozn.:\'\'\' Pro systém je velice důležitý adresář \"/etc\" - obsahuje globální (systémová) konfigurace celého počítače (uživatelská nastavení jsou vždy v domácích adresářích jednotlivých uživatelů). Veškeré chování systému je řízeno konfiguračními soubory v tomto adresáři a jeho podadresářích. Vždy zálohovat alespoň tento adresář (komprimovaný se vejde na disketu). \n\n= Struktura adresářů v Linuxu/Unixu - hierarchie souborového systému =\n\nBěhem let vývoje Unixu se vytvořily určité konvence pro rozvržení adresářů a souborů v rámci FS (např. umístění globálních konfigurací do adresáře \"/etc\", dočasných souborů\" do \"/tmp\" apod.). Projekt \"Filesystem Hierarchy Standard\" (FHS) se snaží tyto konvence uspořádat logickým způsobem a je široce užíván v Linuxových systémech. První na co asi narazil každý, kdo dosud pracoval jen s DOSem nebo Windows, je absence písmenek reprezentující jednotlivé disky. U Linuxu je pouze jedna velká stromová struktura. Veškeré další oddíly a disky (floppy, cdrom, síťové disky ...) se připojují do nějakého adresáře v této struktuře - viz příkazy mount a umount.\n\n== Popis základních adresářů ==\n(u jednotlivých distribucí se mohou objevovat různé odchylky, tento popis je podle distribuce RedHat 6.0 a výše)\n\n: \'\'\'/\'\'\' - kořen souborového systému, začátek stromové struktury\n: \'\'\'/bin\'\'\' - základní spustitelné soubory pro použití všemi uživateli\n: \'\'\'/boot\'\'\' - zde je umístěno jádro (kernel) systému a jeho mapa, initrd, soubory zavaděče (boot loader) GRUB\n: \'\'\'/dev\'\'\' - soubory v tomto adresáři reprezentují jednotlivá fyzická zařízení nebo psedozařízení systému. Také jsou zde další speciální soubory.\n: \'\'\'/etc\'\'\' - globální konfigurační soubory systému\n: \'\'\'/home\'\'\' - domovské adresáře uživatelů\n: \'\'\'/lib\'\'\' - základní sdílené knihovny systému, mapování klávesnice a konzolové fonty, moduly pro jádro systému (kernel)\n: \'\'\'/lost+found\'\'\' - ztracené a opravené soubory po chybách FS (ext2,ext3)\n: \'\'\'/mnt\'\'\' - do místních podadresářů se připojují další souborová zařízení, např. do \"/mnt/floppy\" disketa, do \"/mnt/cdrom\" CD ap.\n: \'\'\'/opt\'\'\' - zde bývají SW aplikace, které nejsou standardní součástí distribuce\n: \'\'\'/proc\'\'\' - soubory nastavení a stavu systému a jednotlivých procesů - dalo by se říci, že je to mapa stavu paměti RAM\n: \'\'\'/root\'\'\' - domovský adresář superuživatele (root)\n: \'\'\'/sbin\'\'\' - systémové privilegované spustitelné soubory, používané uživatelem root\n: \'\'\'/sys\'\'\' - virtuální adresář (jádra 2.6.x)\n: \'\'\'/tmp\'\'\' - adresář pro odkládací a pomocné soubory\n: \'\'\'/usr\'\'\' - další stromová struktura, obsahuje velké množství informací, jako knihovny, zdrojové kódy, spustitelné soubory, konfigurační soubory a další. Nejdůležitější z nich jsou: \n:: \'\'\'/usr/bin\'\'\' - jako v \"/bin\", pro systém méně důležité aplikace \n:: \'\'\'/usr/X11R6\'\'\' - kompletní soubory X Window systému (zkráceně X, nikdy ne X Windows!) \n:: \'\'\'/usr/include\'\'\' - hlavičkové soubory jádra a knihoven (v jazyce C) \n:: \'\'\'/usr/lib\'\'\' - další všeobecné a aplikační knihovny \n:: \'\'\'/usr/local\'\'\' - bod pro instalace aplikací, obsahuje mj. podadresáře \"/bin\", \"/etc/\", \"/lib/\", \"/sbin\", \n:: \'\'\'/usr/sbin\'\'\' - obdoba \"/sbin\", méně důležité \n:: \'\'\'/usr/share\'\'\' - soubory použitelné více aplikacemi/subsystémy (man a info stránky, dokumentace k prg. balíkům a jejich programům, pozadí a spořiče obrazovky, fonty, definice národních abeced a zvyklostí, měrných jednotek a časových zón, ikony, zvuky apod. \n:: \'\'\'/usr/src\'\'\' - zdrojové soubory jádra \n:: \'\'\'/var\'\'\' - soubory, jejichž obsah se běhěm chodu systému většinou mění; nejdůležitější: \n:: \'\'\'/var/named\'\'\' - databáze DNS démona named - popisyspravovaných domén \n:: \'\'\'/var/lock\'\'\' - \"zámky\" subsystémů a programů \n:: \'\'\'/var/log\'\'\' - systémové a aplikační logy, např: \n::: \'\'\'messages\'\'\' - log jádra a systému \n::: \'\'\'maillog\'\'\' - logy poštovních služeb \n::: \'\'\'cron\'\'\' - logy spouštění úloh v budoucnu démony crond a atd \n::: \'\'\'secure\'\'\' - logy související s bezpečností systému (přihlašování, autentikace pro poštu a další služby) \n::: \'\'\'httpd/*_log\'\'\' - logy WWW serveru (Apache) \n::: \'\'\'samba/*\'\'\' - logy emulátoru serveru M$ WinDOS \n::: \'\'\'squid/*\'\'\' - logy HTTP proxy cache squid \n:: \'\'\'/var/lib\'\'\' - databáze různých subsystémů, SQL serverů ap.: \n::: \'\'\'dhcp/*\'\'\' - DHCP démon - pronájmy IP adres \n::: \'\'\'nfs/*\'\'\' - stav NFS služeb \n::: \'\'\'rpm/*\'\'\' - databázeRPMsystému (RPM=RedHat Package Manager) \n:: \'\'\'/var/spool\'\'\' - různé systémové fronty: \n::: \'\'\'at/*\'\'\' - fronty spouštění úloh v budoucnu démonem atd \n::: \'\'\'cron/*\'\'\' - fronty opakovaného spoštění úloh v budoucnu démonem crond \n::: \'\'\'lpd/*\'\'\' - fronty různých tiskových služeb (lpr, LPRng, cups, ... \n::: \'\'\'mail/*\'\'\' - nevyzvednutá pošta lokálních uživatelů počítače. \n::: \'\'\'mqueue/*\'\'\' - fronta poštovních zpráv - e-mailů čekající na odeslání některým MTA (Mail Transport Agent - agent s teplou vodou /a poštou/) \n:: \'\'\'/var/www\'\'\' - data WWW serverů - adresáře vlastních HTML dokumentů, ikon, CGI scriptů, manuálových stránek.\n\n== Důležité soubory a/nebo adresáře ==\n=== Adresář /etc ===\n{| border=\"1\"\n| /X11 || Konfigurace X window systému, font serveru a správců přihlášení pro grafický mód\n|-\n| /default || Adresář implicitních parametrů programů (např. \"useradd\" - přidání uživatele do systému\n|-\n| /httpd || Konfigurační soubory WWW serveru Apache\n|-\n| /mail || Adresář cfg souborů pro transport pošty\n|-\n| /pam.d || Konfigrační soubory pro autentikaci (ověření identity) a autorizace (ověření oprávnění) k systému a jeho jednotlivým subsystémům\n|-\n| /ppp || konfigurace démona \"pppd\" - spojení přes PPP protokol (např. připojení do Internetu telef. linkou\n|-\n| /rc.d || Adresář se scripty definujícími start a ukončení systému a přechod mezi jednotlivými úrovněmi běhu (runlevels) systému\n|-\n| /samba || Adresář s konfigurací démona emulace služeb WinNT serveru\n|-\n| /ssh || Globální konfigurace SSH (šifrované síťové spojení) klienta a démona\n|-\n| /sysconfig || Konfigurační soubory sítě, startovací parametry jednotlivých systémových démonů\n|-\n| /xinetd.d || Adresář se soubory konfigurace síťových služeb spouštěných superdémonem \"xinetd\"\n|-\n| aliases || Soubor přezdívek poštovního démona sendmail\n|-\n| bashrc || Inicializační soubor shellu bash\n|-\n| crontab || Popis opakovaného spouštění procesů pro démon \"crond\"\n|-\n| exports || seznam řízení přístupu k NFS filesystému (sdílení disků v Unix systémech)\n|-\n| fstab || Statické informace o připojovaných filesystémech (zdroj, typ, bod připojení, charakteristiky)\n|-\n| host.conf, resolv.conf || DNS - konfigurační soubory\n|-\n| hosts || Statické informace o jménech počítačů a jejich IP adrese\n|-\n| hosts.allow, hosts.deny || soubory povolení/zákazu přístupu z jiných síťových zařízení k jednotlivým síťovým službám (tzv. TCP wrappers)\n|-\n| inittab || Konfigurační soubor praotce všech procesů - démona \"init\"\n|-\n| issue || Zpráva vypisovaná před přihlašovacím promptem v text módu\n|-\n| ld.so.conf || Seznam nestandardních adresářů pro hledání sdílených knihoven\n|-\n| logrotate.conf || Globální popis rotace logů systému a služeb\n|-\n| modules.conf || Konfigurační soubor pro zavádění modulů jádra (parametry ovladačů, přiřazení ovladačů k síťovým rozhraním,...)\n|-\n| motd || Message Of The Day - zpráva vypisovaná po přihlášení v text módu\n|-\n| mtools.conf || Konfigurační soubor balíku mtools - přístup k DOS jednotkám bez jejich \"montování\"\n|-\n| named.conf || Konf. soubor DNS démona \"named\" (Domain Name Services = služby doménových jmen)\n|-\n| passwd || Soubor založených uživatelů\n|-\n| shadow || Soubor uživatelských hesel a jejich vlastností\n|-\n| group || Soubor skupin uživatelů\n|-\n| gshadow || Soubor hesel skupin a jejich vlastností\n|-\n| profile || Systémový inicializační soubor přihlašovacího shell bash a sh\n|-\n| services || Standardní názvy portů jednotlivých síťových služeb\n|-\n| shells || Úplná specifikace (jméno vč. cesty) platných přihlašovacích shellů\n|-\n| syslog.conf || Konfigurační soubor pro logovací démon syslogd\n|}\n\n=== Adresář /dev ===\nV adresáři /dev a jeho podadresářích jsou soubory prostředků systému. Prostředkem (angl. device) se rozumí nějaké fyzické zařízení (nebo kód který zařízení emuluje) schopné provádět vstup nebo výstup (IO - Input/Output). Např. klávesnice je vstupní zařízení, hard disk je vstupní (čtení) i výstupní (zápis) zařízení. V Unixech a Linuxu je většina zařízení reprezentována jako soubory v souborovém systému. Tyto soubory jsou standardně uloženy v adresáři \"/dev\" a jeho podadresářích a tam jsou přístupné pro procesy které potřebují provádět IO operace. \n\nZařízení většinou spadají do dvou kategorií: znaková a bloková. Znaková provádí IO znak po znaku - např. klávesnice, myš, tiskárna. Bloková zařízení čtou/zapisují data ve větších kusech, tzv. blocích. Patří sem např. zařízení pro uchování dat - IDE/SCSI pevné disky, CD-ROM, floppy disky, páskové jednotky. Provádění IO interakce s blokovými zařízeními s velkými kusy dat dovoluje efektivnější přenosy velkých bloků dat. \n\n\'\'\'Jména prostředků:\'\'\' Často podle (anglického názvu) zařízení které reprezentují: \"/dev/fb\" = Frame Buffer grafické zařízení, \"/dev/hd\" = IDE pevný disk (Hard Disk), \"/dev/fd\" = floppy disk, \"/dev/ttyS\" terminálové zařízení na sériové lince. Někdy jsou pro snazší orientaci použity symbolické linky ukazující na skutečné fyzické zařízení - např. \"/dev/mouse\", zařízení představující myš, může být linkováno na sériový port, USB nebo PS/2 zařízení. Podobně \"/dev/cdrom\" může být symbolický link např. na \"/dev/hdc\" (IDE master na druhém řadiči), \"/dev/sda\" ap. \n\nV některých případech, např. u pevných disků je pojmenování zařízení trochu komplikovanější. Jméno zařízení je u pevného disku sestaveno z typu disku, pozice disku a diskové oblasti. Např. \"/dev/hda1\" je první disková oblast (1) na disku typu IDE (hd), který je zapojen jako \"master\" na prvním IDE řadiči systému (a). SCSI pevné disky mají označení \"/dev/sd\" místo \"/dev/hd\". \n\n\'\'\'Identifikace prostředků jádrem\'\'\' je podle tzv. \'\'\'hlavního\'\'\' (MAJOR) a \'\'\'vedlejšího\'\'\' (MINOR) čísla (0-255) příslušného speciálního souboru v adresáři \"/dev/\". Hlavní číslo udává typ zařízení a vedlejší pořadové číslo zařízení, v hlavním nebo vedlejším čísle může být zamontováno také pořadové číslo řadiče a/nebo pořadí jednotky na řadiči - např.: \n:* hdc s čísly (22,0) představuje master disk na druhém IDE/ATA řadiči (druhý řadič je daný hlavním číslem 22, vedlejší číslo 0 zde znamená celý disk);\n:* hdb7 /číslo (3,71) - hlavní číslo 3 určuje druhý (E)IDE řadič, 71 disk a oblast na něm: 0-63 je vyhrazeno pro hlavní (master) disk (0=celý a 1-63 jsou jeho oblasti (partitions), 64-127 je pro druhý (slave) disk/: 71-64=7 => je to sedmá (logická) oblast /partition/ na slave disku prvého IDE/ATA řadiče /musí to bý logická oblast - primární v MBR mají čísla 1-4/\n:* fd0H1440 je první floppy disk (první 0 za fh) formátovaný na 1.44MB=1440kB\n\n\'\'\'Speciální zařízení\'\'\' - několik pseudozařízení, jež se mohou občas hodit: /dev/null, /dev/zero, /dev/full, a /dev/random : \n\n; /dev/null : \"Nulové\" zařízení, je druh \"kontejneru na odpadky\" (\"trash\") zařízení, malá černá díra - co do něj zapíšeme už nikdy nedostaneme zpět a je to bezedné. Jakýkoliv zápis do něj je úspěšný a jakékoliv čtení z něj vrátí stav \"dosažen konec souboru\". Velice užitečná věc pro potlačení nežádoucích výpisů na obrazovku z některých programů, zvlášť ve scriptech pomocí přesměrování standardního výstupu nebo chybového výstupu do tohoto zařízení. Nebo k vymazání obsahu souboru a přitom zachování všech jeho přístupových (vlastnictví+práva) atributů (!). Příklady: \n\n
\n$ modprobe ipsec 2>&1 /dev/null# potlač chybový výstup if při zavádění modulu vznikne\n$ cat /dev/null > /var/log/messages# \"vyprázdni\" systémový log a nezměň práva souboru\n
\n\n; /dev/zero : Je podobné /dev/null. Na vstupu se chová stejně, ale čtení z \"/dev/zero\" vrátí znak(y) \\0 (binární nula). Proto se /dev/zero často užívá k vytvoření prázdných souborů: \n\n
\ndd if=/dev/zero of=~/mujfajl bs=1k count=100# vytvoř 100kB soubor v mém domácím adresáři, plný nul\n
\n\n; /dev/full : Simuluje zaplněné zařízení. Zápis do \"/dev/full\" skončí chybou. Užitečné pro testování chování aplikací na zaplněném zařízení: \n\n
\n$ cp test-file /dev/full\ncp: writing `/dev/full\': Na zařízení není volné místo\n
\n\n; /dev/stdin, /dev/stdout a /dev/stderr : Jsou zařízení standardního vstpu, výstupu a chybového výstupu. Jsou užitečné u programů, které požadují na příkazové řádce specifikaci(e) vstupnícho a/nebo výstupního souboru a my bychom je potřebovali zařadit spíše jako filtr, tzn. chceme, aby vstup byl ze stdin a/nebo výstup na stdout. Např. program dumb_program, vyžadující na příkazové řádce specifikaci nejprve vstupního a pak výstupního souboru můžeme zařadit jako filtr do roury takto: \n\n
\n$ cat \'\'\'file\'\'\' | dumb_program \'\'\'/dev/stdin /dev/stdout\'\'\' | sort\n
\n\n; /dev/random a /dev/urandom : Jsou zařízení, která generují \"náhodná\" data. \"/dev/random\" je kvalitnější než \"/dev/urandom\". Generace náhodných znaků v \"/dev/random\" je založena na \"šumu prostředí\", který je nedefinovatelný. V systému jsou pouze omezené zdroje tohoto náhodného šumu, proto je zařízení \"/dev/random\" pomalé a může se pozastavit a vyčkat až nasbírá další data. \"/dev/urandom\" užívá stejné zdroje šumu jako \"/dev/random\", ale generuje pseudonáhodná data pokud náhodná data nejsou k dispozici. Tzn. je rychlejší, ale méně přesné. \n\n\'\'\'Hlavní význam\'\'\' speciálních souborů v adresáři /dev je: \n\n* Dvojice hlavní/vedlejší číslo pro jádro jednoznačně definuje ovladač zařízení a případně řadič a jednotku na řadiči (v systému může být několik stejných řadičů (např. IDE/ATAPI, SCSI, USB) a každý řadič může obsluhovat více jednotek (na jednom SCSI řadiči může být např. současně disk, magnetická páska, CD-ROM, ZIP mechanika výměnných disků, scanner a osvitová jednotka) \n\n* Programy přistupují k zařízením jednotným způsobem stejně jako k souborům - čtení ze souboru /dev/st0 je vlastně čtení z magnetické pásky, zápis do souboru /dev/tty4 je výpis na čtvrtou virtuální konzoli počítače, přečtení prvních 512 Byte ze souboru /dev/hda je vlastně přečtení prvního sektoru z master disku na primárním IDE/ATA řadiči ( pro architekturu PC a DOS dělení disků je to MBR (Master Boot Record - hlavní zaváděcí záznam, obsahuje i Partition Table /tabulku rozdělení disku/) \n* Přístup k zařízením je řízen přístupovými právy k odpovídajícím speciálním souborům adresáře \"/dev\" - právem k zápisu do speciálního souboru v \"/dev\" je dáno právo zápisu za odpovídající zařízení\n\n\'\'\'Pozn.1:\'\'\' Síťová zařízení (LAN/WAN karty, PPP/SLIP/PLIP zařízení, různá síťová \"psedozařízení\" (regulátory šířky pásma/vyvažování zátěže, kryptovací zařízení, zařízení pro virtuální sítě /VPN/ ap.) nejsou mapovány na položky souborového systému - nemají položky v adresáři \"/dev\" jako ostatní zařízení. Je to dáno tím, že\n: komunikace se síťovým zařízením je zcela odlišná od komunikace užité pro práci se znakovými nebo blokovými zařízeními - namísto funkcí \"čtení\" a \"zápis\" je nutno volat funkce poplatné přenosu paketů.\n: \"síťování\" většinou není specifické pro nějaký proces, přicházející pakety a/n jejich fragmenty musí být sdruženy, identifikovány a redistribuovány před tím, než je proces dostane. Systém má na starost doručování paketů mezi programy a síťovými rozhraními (interface) a řídí provádění programů na základě jejich síťové aktivity. Také směrování (routing) paketů a identifikace adres (adres resolution) je implementována přímo v jádře.\nPro potřeby síťové komunikace mezi procesy mají systémy Unix/Linux implementován koncept tzv. \"\'\'\'[[soket]]ů\'\'\' (angl. \'\'\'sockets\'\'\') \n\n\'\'\'Pozn. 2:\'\'\' Podobně jako rozhraní SCSI (Small Computer Systems Interface - komnikační protokol mezi počítačem a periferními jednotkami; všechna SCSI zařízení \"rozumí\" stejnému protokolu bez ohledu na typ řadiče na nejž jsou připojena), byly v nových jádrech Linuxu implementovány další třídy zařízení: \'\'\'USB\'\'\', \'\'\'Bluetooth\'\'\' /Modrý zub/, \'\'\'IEEE 1394\'\'\' /FireWire/, \'\'\'I2O\'\'\'/Intelligent Input/Output/, \'\'\'Multimédia\'\'\' aj. Tyto skupiny mají shodný komunikační protokol a jeho implementace v jádře zbavuje vývojáře ovladačů příslušných zařízení programovat tuto pro celo třídu společnou vrstvu znovu. \n\n\'\'\'Pozn. 3:\'\'\' Nevýhodou speciálních souborů zařízení v adresáři \"/dev\" je to, že je \"velký\" - typicky obsahuje až několik desítek tisíc souborů. Je to proto, že obsahuje (a je jich naprostá většina) soubory i pro zařízení, která v systému (ještě) neexistují - jaksi \"do foroty\", až se zařízení přidá, už bude jeho soubor zařízení existovat a nemusí se vytvářet např. povelem \"mknod\". Např. pro pevné disky \"hd\" jsou připravena zařízení hda-hdt, pro každé 32 oblastí (partition), tj. celkem 16x32=512 speciálních souborů. Pro jiná zařízení je situace obdobná. \nVýchodiskem je [[devFS]] filesystém, implementovaný v jádrech Linux 2.4 : není to již součást normálního FS, ale kód pro nová zařízení je součástí jádra. \"/dev\" FS je vytvářen v RAM během zaváděcí (boot) fáze systému a odpovídající speciální sobor pro nové zařízení je jádrem automaticky přidán při jeho připojení. (V době psaní tohoto dokumentu ale devFS nebyl součástí žádné velké distribuce).\n\n\'\'\'Pozn. 4:\'\'\' Od jádra verze 2.6.x se začalo místo devFS filesystému používat systému [[Udev]], který umožňuje zařízení dynamicky vytvářet a rušit\n\n=== Adresář /proc ===\n\nJe virtuální souborový systém (typ, zadávaný např. v povel \"mount\", je \"proc\"), standardně připojovaný do bodu \"/proc\". Používá se k nastavování a čtení hodnot jednotlivých parametrů jádra i běžících procesů. Hodnoty a stavy jsou uchovávány v jednotlivých souborech, ale ve FS existují pro čitelnost a orientaci i adresáře. Ty základní přímo v \"/proc\": \n\n{| border=\"1\"\n| /číselné || hodnoty a stavy jednotlivých aktivních procesů. Název adresáře je PID (Program ID) číslo příslušného procesu.\n|-\n| /bus || sběrnice systému (PCI, PCMCIA, USB, MCA, EISA, ..), jejich ovladače a připojená zařízení.\n|-\n| /ide || IDE řadiče a zařízení na nich připojená. Obdobně i adresář /scsi.\n|-\n| /net || data okolo síťové vrstvy: zařízení, routovací tabulky a protokoly, ARP cache, statistiky aj.\n|-\n| /sysvipc || prostředky meziprocesové komunikace: zprávy, semafory a sdílená paměť\n|-\n| /sys || nastavené hodnoty a limity systému\n|}\n\nAdresář /sys se dělí na další podadresáře podle kategorie příslušných parametrů (dev, fs, kernel, net, vm aj.) Změnou hodnot v příslušných souborech můžeme měnit nastavení a chování systému. Např: \n
\n$ cat /proc/sys/net/ipv4/ip_forward# Je stroj koncový nód (0) nebo router (1) ?\n0\n$ echo \"1\" > /proc/sys/net/ipv4/ip_forward# povol routing IPv4 paketů\n\n
\n *) Kdo najde chybu? (kdo ne - viz konec článku)\n\n== Práva souborů a adresářů ==\n\nRůzné Unixové a Unixu podobné (Unix-like) OS podporují různé druhy souborových systémů (\"FS\" - File System). FS mohou mít trochu odlišnou množinu atributů řídících přístup a řízení přístupu může být ovlivněno volbami zadanými v době připojení (\"mount\") FS. Linux např. začal na FS \"[[Minix]]\", nyní je nejrozšířenější \"\'\'\'Extended 2 FS\'\'\'\" (zkráceně označovaný jako \"\'\'\'ext2\'\'\'\" nebo \"\'\'\'e2fs\'\'\'\", rychle nastupují [http://www.abclinuxu.cz/clanky/show/11662 žurnálovací FS] (\"Extended 3 FS\" = [http://www.abclinuxu.cz/clanky/show/12344 ext3]; \"Reiser FS\" = [http://www.abclinuxu.cz/clanky/show/12663 reiserfs] a \"Journaled FS\" = [http://www.abclinuxu.cz/clanky/show/19124 jfs] (IBM) jsou již součástí 2.4.x jader, další je možné přidat např. \"[http://www.abclinuxu.cz/clanky/show/13224 XFS]\" ). \n\nVětšina FS na Unix-like OS podporuje minimálně tyto atributy:\n\n:* Vlastnictví uživatelem a skupinou (tj. soubor má UID a GID). Uživatel může být členem více skupin, ale jedna je defaultní - a ta bude přidělena nově vytvářenému souboru (System V konvence, v BSD je skupina podle nadřazeného adresáře). Viz též dále SGID bit na adresáři.
V Linuxu pouze root může změnit vlastníka souboru, ne samotný vlastník\n:* Bity práv - čtení (r=read), zápis (w=write) a provádění(x=execute) - pro uživatele(vlastníka), skupinu a pro ostatní. Popis vlastností těchto a dalších bitů při jejich aplikaci na soubory a adresáře viz tabulka níže\n:* \"sticky\" bit (angl. přilnavý, lepkavý - \"\'\'\'lepí\'\'\' program do paměti) - ponechává kód programu v oper. paměti i po ukončení procesu\n:* SUID a SGID bity - viz tab. níže\n:* Časová razítka (timestamps, počet vteřin od 1.1.1970 0:0:0 UTC) - pro každý objekt FS jsou uloženy doby posledního přístupu a poslední modifikace. Poznamenejme, že vlastník souboru může tyto doby měnit - viz příkaz \'\'\'touch\'\'\'.\n\n\'\'\'Pozn1:\'\'\' Kromě těchto pro Unix-like FS společných bitů mohou mít konkrétní FS další atributy, viz např. příkaz \"chattr\" a \"lsattr\" - atributy \"ext2\" a \"ext3\" souborových systémů, speciálně atributy \"immutable (objekt nelze měnit) a append-only (objekt lze jen rozšiřovat) /nastavovatelné pouze uživatelem \"root\"/. \n\n\'\'\'Pozn2:\'\'\' U FS které nemají tyto společné přístupové bity je přístup a/nebo vlastnictví možné emulovat volbami příkazu \"mount\" v době připojení FS. \n\n\'\'\'Pozn3:\'\'\' Pro přidávání a výmaz souborů mají význam pouze přístupové bity a vlastník adresáře souboru (pokud Unix FS nepodporuje komplexnější schéma, jako např. POSIX ACL (ACL = ACcess List = přístupový seznam)). Tzn. i soubory, které nemají nastaveny nastaveny žádné přístupové bity mohou být smazány, pokud to povolí adresář v němž jsou umístěny. Stejně pokud nadřazený adresář povolí aby podřazené objekty mohly být změněny uživatelem nebo skupinou, pak jakýkoliv potomek může být nahražen/změněn tímto uživatelem nebo skupinou. \n\n=== Význam přístupových bitů ===\n{| border=\"1\"\n! Druh bitu || Obyčejný soubor || Adresář\n|-\n| read: r (4) || Obsah souboru lze číst || Je možné zobrazit obsah adresáře, tj. vidět jaké soubory a adresáře obsahuje.\n|-\n| write: w (2) || K souboru lze připisovat nebo jej měnit || Možnost vytváření, smazání nebo přejmenování/přesunu souborů v adresáři\n|-\n| execute: x (1) || Soubor lze spustit jako program || Povolí procházení adresářem a přístup k souborům a adresářům pod ním. Bez tohoto bitu není možné přidávání, mazání a přejmenování souborů v adresáři. Adresář nemající nastavený x-bit v žádné ze tří skupin (vlastník, skupina, ostatní) je nepoužitelný - může do něj pouze uživatel root.\nAdresář který má nastaven tento bit a nemá nastaven r bit nemůže být vypsán, tzn. uživatel musí znát jméno souboru, s nímž chce pracovat.\n|-\n| SUID (4000) || Je-li nastaven na spustitelném souboru, pak při jeho spuštení bude efektivní UID procesu nastaveno na UID vlastníka souboru. Na nespustitelném souboru způsobí v Linuxu a Systém V systémech uzamčení souboru při jeho přístupu. || Nemá vliv\n|-\n| SGID (2000) || Je-li nastaven na spustitelném souboru, pak při jeho spuštení bude efektivní GID procesu nastaveno na GID vlastníka souboru. Na nespustitelném souboru způsobí v Linuxu a Systém V systémech uzamčení souboru při jeho přístupu. || Pokud je SGID bit nastaven na adresáři, soubory v adresáři vytvořené budou mít jejich GID automaticky nastavené na GID adresáře - tzv. \"projekt adresáře\". Nestandardizováno, funguje v Linuxu a na Solarisu.\n|-\n| sticky: t (1000) || Staré Unixy jej nazývaly \"Save program text\" bit a indikoval, že kód spustitelných souborů má zůstat v oper. paměti po ukončení úlohy. Na Linuxu nemá význam - díky správě VM jej nepotřebuje || Bez ohledu na zápisové práva daného adresáře, smazání a přejmenování souboru v tomto adresáři může provést pouze vlastník souboru, vlastník adresáře nebo ten, kdo má explicitně povolena práva zápisu do souboru. Používané na veřejně zapisovatelné adresáře jako je \"/tmp\"\n|} \n\n\'\'\'Pozn.1:\'\'\' r,w,x práva na adresář jsou nezávislé na právech souborů a adresářů pod ním. Např. přístup na zápis do adresáře povoluje vytváření nových souborů v adresáři nebo výmaz existujících, ale nedává automaticky právo na zápis do existujících souborů.\n\n\'\'\'Pozn.2:\'\'\' SUID shell scripty představují vážnou bezpečnostní slabinu a mohou být crackery zneužity pro získání root přístupu do systému. Proto je jejich nastavení jádrem ignorováno a script běží vždy pod UID uživatele. \n\n *) Prompt \"$\" ukazuje, že uživatel zřejmě není \"root\" a tedy nemá právo zapisovat kamkoliv do \"/proc\" !\n\n== Reprezentace souborového systému na disku ==\n* Informace o souborech jsou soustředěny do seznamu i-uzlů (i-node). Při vytváření fs se na daném médiu pro i-uzly vytvoří prostor zadané velikosti. Tím je dán max. počet i-uzlů (tzn. i max. počet souborů), které se na daném médiu mohou vytvořit. \n* Soubor na souborovém systému je jednoznačně definován číslem i-uzlu (jsou číslovány od 1). I-uzel obsahuje mj. typ souboru (obyč, adresář, symlink, speciál, FIFO, ..), jeho velikost v bajtech, počet odkazů na soubor a diskovou adresu uložení dat na disku. Neobsahuje však jméno souboru - to je uloženo v adresáři.\n* Adresář je zvláštní případ souboru. Obsahuje pouze jméno souboru (příp. délku jména) a číslo i-uzlu. Prázdná položka má nulové číslo i-uzlu.\n* Superblok popisuje systém souborů - typ fs, velikost systému souborů, počet volných bloků fs, velikost seznamu i-uzlů, i-uzel kořenového adresáře apod.\n* Zaváděcí blok (volitelně)\n* Bitmapa i-uzlů\n* Bitmapa datových bloků\n\n= Odkazy a použitá literatura =\nsecurity/zabezpecujemelinux\njak_na_Unix.html\n* Secure-Programs-HOWTO\n* Security-HOWTO\n* Adv-Bash-Scr-HOWTO\n* Unix-and-Internet-Fundamentals-HOWTO\n\nVerze: 5.4.2003','/* Popis základních adresářů */',0,'147.229.222.135','20050125234836','',0,0,0,0,0.374866812199,'20050125234836','79949874765163'); INSERT INTO cur VALUES (76,0,'Fileutils','Balíček \"fileutils\"\n\ncp - kopíruje soubory \ndd - konvertuje soubor při kopírování \ndf - vypisuje celkové volné místo na disku \ndircolors - vypíše příkaz, kterým lze nastavit proměnnou prostředí LS_COLOR \ndir - vypíše obsah adresářů \ndu - vypisuje využití diskového prostoru \nchgrp - změní vyjmenovaným souborům skupinu vlastníků \nchmod - změní přístupová práva k souborům \nchown - změní vyjmenovaným souborům vlastníka, případně i skupinu \ninstall - kopíruje soubory a nastavuje jejich atributy \nln - vytvoří odkazy na soubory \nls - vypíše obsah adresářů \nmkdir - vytváří adresáře \nmkfifo - vytváří pojmenované roury FIFO \nmknod - vytváří speciální soubory \nmv - přejmenovává soubory \nrmdir - ruší prázdné adresáře \nrm - ruší soubory \nshred - bezpečné mazání souboru(ů) /nejdříve přepíše jejich obsah/ \nsync - vyprázdní buffery I/O cache filesystému \ntouch - změní časové údaje souborů \nvdir - vypíše obsah adresářů \nProgram \"chgrp\" :\nPoužití: chgrp [PŘEPÍNAČ]... SKUPINA SOUBOR... \n nebo chgrp [PŘEPÍNAČ]... --reference=RSOUBOR SOUBOR... \nMění skupinu zadaných SOUBORů na SKUPINU. \n\n -c, --changes vypíše soubory, jejichž skupina byla změněna\n --dereference působí na soubor, na nějž se odkazuje symbolický odkaz\n -h, --no-dereference působí na symbolický odkaz místo na soubor, na který odkaz odkazuje (funguje\n pouze na systémech, které mohou měnit vlastníky symbolických odkazů)\n -f, --silent, --quiet potlačí většinu chybových zpráv\n --reference=RSOUBOR místo hodnoty SKUPINA použije skupinu souboru RSOUBOR\n -R, --recursive vykoná se i v podadresářích\n -v, --verbose vypíše informaci o každém zpracovávaném souboru\n --help vypíše tuto nápovědu a skončí\n --version vypíše označení verze a skončí\nProgram \"chmod\" :\nPoužití: chmod [PŘEPÍNAČ]... PRÁVA[,PRÁVA]... SOUBOR... \n nebo chmod [PŘEPÍNAČ]... PRÁVA_OSMIČKOVĚ SOUBOR... \n nebo chmod [PŘEPÍNAČ]... --reference=RSOUBOR SOUBOR... \nZměna práv zadaných SOUBORů na PRÁVA. \n\n -c, --changes vypisuje pouze soubory, jejichž práva byla změněna\n -f, --silent, --quiet potlačí většinu chybových zpráv\n -v, --verbose vypisuje informaci o každém zpracovaném souboru\n --reference=RSOUBOR místo hodnoty PRÁVA použije práva souboru RSOUBOR\n -R, --recursive pracuje i se soubory a adresáři v podadresářích\n --help vypíše tuto nápovědu a skončí\n --version vypíše označení verze a skončí\n\nKaždá PRÁVA jsou složena z jednoho nebo více písmen z \'ugoa\' následovaného jedním ze symbolů \'+-=\' a jedním nebo více písmeny z \'rwxXstugo\'. \nProgram \"chown\" :\nPoužití: chown [PŘEPÍNAČ]... VLASTNÍK[:[SKUPINA]]... SOUBOR... \n nebo chown [PŘEPÍNAČ]... :SKUPINA SOUBOR... \n nebo chown [PŘEPÍNAČ]... --reference=RSOUBOR SOUBOR... \nZmění vlstníka a/nebo skupinu každého souboru SOUBOR na VLASTNÍK a/nebo SKUPINA \n\n -c, --changes vypíše soubory, jejichž skupina byla změněna\n --dereference působí na soubor, na nějž se odkazuje symbolický odkaz\n -h, --no-dereference působí na symbolický odkaz místo na soubor, na který odkaz odkazuje (funguje\n pouze na systémech, které mohou měnit vlastníky symbolických odkazů)\n --from=AKT_VLASTNIK:AKT_SKUPINA\n změní vlastníka a/nebo skupinu každého souboru pouze pokud se současný vlastník\n a/nebo skupina shodují s uvedenými zde. Libovolný z nich může být vynechán, pak\n není shoda na chybějícím atributu nutná\n -f, --silent, --quiet potlačí většinu chybových zpráv\n --reference=RSOUBOR místo hodnoty SKUPINA použije skupinu souboru RSOUBOR\n -R, --recursive vykoná se i v podadresářích\n -v, --verbose vypíše informaci o každém zpracovávaném souboru\n --help vypíše tuto nápovědu a skončí\n --version vypíše označení verze a skončí\n\nVlastník nezměněn pokud chybí. Stejně tak skupina, ale je změněna na přihlašovací skupinu vlastníka, pokud je zadána `:\'. Vlastník a skupina mohou být numerické i symbolické. \nProgram \"cp\" :\nPoužití: cp [PŘEPÍNAČ]... ZDROJ CÍL\n\n nebo: cp [PŘEPÍNAČ]... ZDROJ... ADRESÁŘ \n nebo: cp [PŘEPÍNAČ]... --target-directory=ADRESÁŘ... ZDROJ... \nKopíruje ZDROJ do CÍL nebo více ZDROJů do ADRESÁŘe. \n\n -a, --archive stejné jako -dpR\n --backup[=CONTROL] udělá zálohu všech existujících cílových souborů\n -b jako --backup ale bez argumentů\n -d, --no-dereference nikdy nenásleduj symbolické odkazy\n -f, --force pokud nemůže být existující cílový soubor otevřen, smaže jej a zkusí znovu\n -i, --interactive zeptá se před přepsáním\n -H následuj command-line symbolické linky\n -l, --link dělej hard linky namísto kopírování neadresářových souborů\n -L, --dereference vždy následuj symbolické odkazy\n -p, --preserve pokud je to možné, zachovej atributy souborů\n --parents přidej zdrojovou cestu do cílového ADRESÁŘe\n -r kopíruj rekurzivně, ne-adresáře jako soubory\n POZOR: užijte -R pokud kopírujete speciální soubory\n jako FIFO nebo /dev/zero\n --remove-destination smaž každý existující cílový soubor před jeho otevřením (kontrast s --force)\n --sparse=WHEN řídí vytvoření řídkých souborů\n -R, --recursive kopíruje adresáře rekurzivně\n --strip-trailing-slashes vyjme všechny zakončovací lomítka ze všech ZDROJ argumentů\n -s, --symbolic-link udělá symbolické linky namísto kopírování\n -S, --suffix=SUFFIX přepíše defaultní příponu zálohy\n --target-directory=DIR přesune všechny ZDROJ argumenty do DIR\n -u, --update kopíruje pouze pokud je ZDROJ soubor novější než cílový nebo pokud\n cílový soubor chybí\n -v, --verbose vypisuje co se zrovna provádí\n -x, --one-file-system zůstaň na aktuálním souborovém systému\n --help vypíše tuto nápovědu a skončí\n --version vypíše označení verze a skončí\n\nPokud není přípona záložních souborů nastavena přepínačem --suffix nebo proměnnou SIMPLE_BACKUP_SUFFIX, je používána přípona `~\'. Způsob vytváření záložních souborů lze ovlivnit nastavením proměnné VERSION_CONTROL, hodnoty mohou být: \n\n none, off záložní kopie nevytvářet (i když je zadán přepínač --backup)\n numbered, t číslované záložní kopie\n existing, nil číslované, jestliže již číslovaná záložní kopie existuje,\n jinak jednoduché\n\nsimple, never jednoduché záložní kopie \n\nSpeciálním případem je, má-li má cp tvořit záložní kopii ZDROJe, když jsou zadány přepínače --force a --backup, a ZDROJ a CÍL jsou stejného jména jednoho obyčejného souboru. \nProgram \"dd\" :\nPoužití: dd [PŘEPÍNAČ]...\n\nKopíruje soubor konvertovaný a formátovaný podle zadaných voleb. \n\n bs=BYTES nastav ibs=BYTES a obs=BYTES\n cbs=BYTES konvertuj BYTES bytů najednou\n conv=KEYWORDS konvertuj soubor podle čárkou odděleném seznamu klíčových slov\n (ascii,ebcdic,ibm,block,unblock,lcase,notrunc,ucase,swab,noerror)\n count=BLOCKS kopíruj pouze BLOCKS vstupních bloků\n ibs=BYTES čti BYTES bytů najednou\n if=FILE čti ze souboru FILE namísto ze stdin\n obs=BYTES zapiš BYTES bytů najednou\n of=FILE zapisuj do souboru FILE namísto na stdout\n seek=BLOCKS přeskoč BLOCKS obs-velkých bloků na začátku výstupu\n skip=BLOCKS přeskoč BLOCKS ibs-velkých bloků na začátku vstupu\n --help vypíše tuto nápovědu a skončí\n --version vypíše označení verze a skončí\n\nBLOCKS a BYTES mohou být následovány následujícími příponami: xM M, c 1, w 2, b 512, kD 1000, k 1024, MD 1,000,000, M 1,048,576, GD 1,000,000,000, G 1,073,741,824, atd pro T, P, E, Z, Y. \nProgram \"df\" :\nPoužití: df [PŘEPÍNAČ]... [SOUBOR]...\n\nVypíše informace o souborových systémech, ve kterých každý SOUBOR leží, nebo implicitně všech souborových systémech. \n\n -a, --all také souborové systémy mající 0 bloků\n --block-size=VELIKOST použije tuto velikost bloku\n -h, --human-readable velikosti ve formátu čitelném pro člověka\n (např. 1K 234M 2G)\n -H, --si podobně jako předchozí, ale násobky 1000 ne 1024\n -i, --inodes výpis informací o i-uzlech místo o blocích\n -k, --kilobytes jako --block-size=1024. Implicitně 512 bajtů,\n které odpovídají normě POSIX\n -l, --local omezení výpisu na lokální souborový systém\n -m, --megabytes jako --block-size=1048576. Implicitně 512 bajtů,\n které odpovídají normě POSIX\n --no-sync nevolá \'sync\' před získáním informací (implicitní)\n -P, --portability použije formát definovaný normou POSIX\n --sync zavolá \'sync\' před získáním informací\n -t, --type=TYP ve výstupu pouze souborové systémy typu TYP\n -T, --print-type vypisuje typ souborového systému\n -x, --exclude-type=TYP ve výstupu nebudou souborové systémy typu TYP\n --help vypíše tuto nápovědu a skončí\n --version vypíše označení verze a skončí\nProgram \"ln\" :\nPoužití: ln [PŘEPÍNAČ]... CÍL [NÁZEV_ODKAZU] \n nebo: ln [PŘEPÍNAČ]... CÍL... ADRESÁŘ \n nebo: ln [PŘEPÍNAČ]... --target-directory=ADRESÁŘ CÍL... \nTvoří odkaz na zadaný CÍL s volitelným NÁZVEM_ODKAZU. Jestliže NÁZEV_ODKAZU není zadán, je vytvořen odkaz v aktuálním adresáři, se stejným názvem jako má CÍL. Při použití druhé formy s více než jedním CÍLem, poslední argument musí být ADRESÁŘem; v tomto případě, jsou pak vytvořeny odkazy v adresáři ADRESÁŘ na CÍLe. Implicitně jsou tvořeny pevné odkazy, symbolické pomocí přepínače --symbolic. Při tvorbě pevného odkazu musí všechny CÍLe existovat. \n\n --backup=[TYP] vytvoří zálohu každého souboru, který má být\n odkazem přepsán\n -b jako --backup, ale bez argumentu\n -d, -F, --directory pevný odkaz na adresář (pouze superuživatel)\n -f, --force vytváří odkaz i tehdy, existuje-li soubor téhož\n názvu (soubor bude smazán)\n -n, --no-dereference má-li být přepsán symbolický odkaz na adresář,\n pak jej smaže a vytvoří požadovaný odkaz. Pokud\n by nebyl tento přepínač zadán, pak by byl odkaz\n vytvořen v adresáři, na který se odkaz odkazuje.\n -i, --interactive ptá se, zda smazat již existující soubor\n -s, --symbolic tvoří symbolický odkaz místo pevného\n -S, --suffix=PŘÍPONA mění obvyklou příponu pro záložní soubory\n --target-directory=ADRESÁŘ zadání ADRESÁŘe, ve kterém vytvořit odkazy\n -v, --verbose před vytvořením odkazu na soubor, vypíše název tohoto souboru\n --help vypíše tuto nápovědu a skončí\n --version vypíše označení verze a skončí\n\nPokud není přípona záložních souborů nastavena přepínačem --suffix nebo proměnnou SIMPLE_BACKUP_SUFFIX, je používána přípona `~\'. Způsob vytváření záložních souborů lze ovlivnit nastavením proměnné VERSION_CONTROL, hodnoty mohou být: \n\n none, off záložní kopie nevytvářet (i když je zadán přepínač --backup)\n numbered, t číslované záložní kopie\n existing, nil číslované, jestliže již číslovaná záložní kopie existuje,\n jinak jednoduché\n\nsimple, never jednoduché záložní kopie \nProgram \"ls\" :\nPoužití: ls [PŘEPÍNAČ]... [SOUBOR]...\n\nVypíše informace o souborech SOUBOR (defaultně aktuální adresář). Položky třídí abecedně, pokud není zadán některý z přepínačů -cftuSUX nebo --sort. \n\n -a, --all neskrývá položky začínající na .\n -A, --almost-all nevypisuje položky . and ..\n -b, --escape print octal escapes for nongraphic characters\n --block-size=SIZE use SIZE-byte blocks\n -B, --ignore-backups do not list implied entries ending with ~\n -c with -lt: sort by, and show, ctime (time of last\n modification of file status information)\n with -l: show ctime and sort by name\n otherwise: sort by ctime\n -C vypisuje položky po sloupcích\n --color[=WHEN] control whether color is used to distinguish file\n types. WHEN may be `never\', `always\', or `auto\'\n -d, --directory vypisuje položky adresářů namísto jejich obsahu\n -D, --dired generate output designed for Emacs\' dired mode\n -f netřídí, povolí -aU, zakáže -lst\n -F, --classify append indicator (one of */=@|) to entries\n --format=WORD across -x, commas -m, horizontal -x, long -l,\n single-column -1, verbose -l, vertical -C\n --full-time vypíše úplný datum a úplný čas\n -G, --no-group potlačí výpis informací o skupině\n -h, --human-readable print sizes in human readable format (e.g., 1K 234M 2G)\n --si likewise, but use powers of 1000 not 1024\n --indicator-style=WORD append indicator with style WORD to entry names:\n none (default), classify (-F), file-type (-p)\n -i, --inode vypisuje čísla inodů každého souboru\n -I, --ignore=PATTERN do not list implied entries matching shell PATTERN\n -k, --kilobytes jako --block-size=1024\n -l použije dlouhý formát výpisu\n -L, --dereference vypisuje položky odkazované symbolicým linkem\n -m fill width with a comma separated list of entries\n -n, --numeric-uid-gid vypisuje číselné hodnoty UIDs and GIDs namísto jmen\n -N, --literal print raw entry names (don\'t treat e.g. control\n characters specially)\n -o dlouhý formát výpisu bez info o skupině\n -p, --file-type append indicator (one of /=@|) to entries\n -q, --hide-control-chars print ? instead of non graphic characters\n --show-control-chars show non graphic characters as-is (default\n unless program is `ls\' and output is a terminal)\n -Q, --quote-name enclose entry names in double quotes\n --quoting-style=WORD use quoting style WORD for entry names:\n literal, locale, shell, shell-always, c, escape\n -r, --reverse převrátí pořadí třídění\n -R, --recursive vypíše podadresáře rekursivně\n -s, --size vypisuje velikost každého souboru v blocích\n -S výstup seřadí podle délky souborů\n --sort=SLOVO výstup seřadí podle SLOVA:\n extension (-X), none (-U), size (-S), time (-t)\n version (-v)\n status (-c), time (-t), atime (-u), access (-u),\n use (-u)\n --time=SLOVO vypisuje čas podle SLOVA:\n atime, access, use, ctime nebo status (-c);\n jestliže je zadán přepínač --sort=time, použije\n se tento čas jako řadící klíč\n -t výstup seřadí podle času poslední změny souboru\n -T, --tabsize=SLOUPCŮ pozice tabelátoru každých SLOUPCŮ znaků (impl. 8)\n -u s -lt: řadí podle atime a také jej vypisuje;\n s -l: vypisuje atime, ale řadí podle názvů souborů\n jinak: řadí podle atime\n -U zakáže seřazení výstupu, názvy souborů budou\n vypsány v tom pořadí v jakém jsou v adresáři\n -v seřadí výstup podle verzí souborů\n -w, --width=SLOUPCŮ použije tuto šířku obrazovky při vypisování\n -x jména souborů vypíše po řádcích místo po sloupcích\n -X výstup seřadí podle přípon souborů\n -1 vypíše jeden soubor na jeden řádek\n --help vypíše tuto nápovědu a skončí\n --version vypíše označení verze a skončí\n\nImplictně není k rozlišování typů souborů barva používána. To je rovnocenné s použitím přepínače --color=none. Použití přepínače --color bez argumentu KDY je rovnocenné s použitím přepínače --color=always. Přepínač --color=auto způsobí, že barvy budou použity pouze, je-li standardní výstup připojen k terminálu (tty). \nProgram \"mkdir\" :\nPoužití: mkdir [PŘEPÍNAČ] ADRESÁŘ... \nVytvoří ADRESÁŘ(e), jestliže ještě neexistuje(í). \n\n -m, --mode=PRÁVA nastaví přístupová práva (zadány jako příkazu \'chmod\'),\n místo toho, aby byla práva nastavena na rwxrwxrwx - umask\n -p, --parents vytvoří neexistující rodičovské adresáře zadaného adresáře\n -v, --verbose vypíše zprávu pro každý vytvořený adresář\n --help vypíše tuto nápovědu a skončí\n --version vypíše označení verze a skončí\nProgram \"mknod\" :\nPoužití: mknod [PŘEPÍNAČ]... JMÉNO TYP [HLAVNÍ VEDLEJŠÍ] \nVytvoří speciální soubor JMÉNO zadaného TYPu. \n\n -m, --mode=PRÁVA nastaví přístupová práva (zadána jako příkazu \'chmod\'),\n místo toho, aby byla nastavena na 0666 - umask\n --help vypíše tuto nápovědu a skončí\n --version vypíše označení verze a skončí\n\nHLAVNÍ a VEDLEJŠÍ číslo není dovoleno u TYPu p, jinak povinné. TYP může být: \n\n b blokový (bufferovaný) speciální soubor\n c, u znakový (nebufferovaný) speciální soubor\n p roura (FIFO)\nProgram \"mv\" :\nPoužití: mv [PŘEPÍNAČ]... ZDROJ CÍL\n\n nebo: mv [PŘEPÍNAČ]... ZDROJ... ADRESÁŘ \n nebo: mv [PŘEPÍNAČ]... --target-directory=ADRESÁŘ... ZDROJ... \nPřejmenuje ZDROJ na CÍL nebo přesune ZDROJ(e) do ADRESÁŘ \n\n --backup[=CONTROL] make a backup of each existing destination file\n -b like --backup but does not accept an argument\n -f, --force neptá se před přepsáním cílového souboru\n -i, --interactive zeptá se před přepsáním cílového souboru\n --strip-trailing-slashes vyjme všechny zakončovací lomítka ze všech ZDROJ argumentů\n -S, --suffix=SUFFIX přepíše defaultní příponu zálohy\n --target-directory=DIR přesune všechny ZDROJ argumenty do DIR\n -u, --update kopíruje pouze pokud je ZDROJ soubor novější než cílový nebo pokud\n -v, --verbose vypíše informaci o každém zpracovávaném souboru\n --help vypíše tuto nápovědu a skončí\n --version vypíše označení verze a skončí\n\nPokud není přípona záložních souborů nastavena přepínačem --suffix nebo proměnnou SIMPLE_BACKUP_SUFFIX, je používána přípona `~\'. Způsob vytváření záložních souborů lze ovlivnit nastavením proměnné VERSION_CONTROL, hodnoty mohou být: \n\n none, off záložní kopie nevytvářet (i když je zadán přepínač --backup)\n numbered, t číslované záložní kopie\n existing, nil číslované, jestliže již číslovaná záložní kopie existuje, jinak jednoduché\n simple, never jednoduché záložní kopie\nProgram \"rm\" :\nPoužití: rm [PŘEPÍNAČ]... SOUBOR...\nVyjme (unlink) SOUBOR(y). \n\n -d, --directory vyjmutí adresáře, i když je neprázdný (pouze super-user)\n -f, --force ignoruje neexistující soubory, nikdy se neptá\n -i, --interactive dotaz před každým vyjmutím\n -r, -R, --recursive vyjme obsah adresářů rekursivně\n -v, --verbose vypisuje co se dělá\n --help vypíše tuto nápovědu a skončí\n --version vypíše označení verze a skončí\n\nK vyjmutí souboru jehož jméno začíná `-\', např. `-foo\', užijte jeden z příkazů: \n rm -- -foo \n rm ./-foo \n\nPOZN: po použití rm k vyjmutí souboru je obecně možné obnovit obsah tohoto souboru. Pokud chcete jistotu že obsah souboru nebude obnovitelný, pak použijte program shred. \nProgram \"rmdir\" :\nPoužití: rmdir [PŘEPÍNAČ]... ADRESÁŘ... \nSmazání ADRESÁŘe(ů), pouze jsou-li prázdné. \n\n --ignore-fail-on-non-empty\n ignoruje všechny chyby způsobené neprázdností adresáře\n -p, --parents maže ADRESÁŘ a všechny rodičovské adresáře, ze zadané\n cesty. Např: `rmdir -p a/b/c\' je podobné \n `rmdir a/b/c a/b a\'\n -v, --verbose vypisuje oznámení o každém zpravovávaném adresáři\n --help vypíše tuto nápovědu a skončí\n --version vypíše označení verze a skončí\nProgram \"sync\" :\nPoužití: sync [PŘEPÍNAČ]\nUloží změněné bloky na disk a aktualizuje super blok. \n\n--help vypíše tuto nápovědu a skončí --version vypíše označení verze a skončí \nProgram \"touch\" :\nPoužití: touch [PŘEPÍNAČ]... SOUBOR...\nor: touch [-acm] MMDDhhmm[YY] FILE... (obsolescent) Nastaví čas posledního přístupu a poslední změny každého zadaného SOUBORU na aktuální čas. \n\n -a změní pouze čas posledního přístupu\n -c, --no-create nevytvoří nové soubory\n -d, --date=ŘETĚZEC analyzuje ŘETĚZEC a použije ho místo aktuálního času\n -f (ignorován)\n -m změní pouze čas poslední změny souboru\n -r, --reference=SOUBOR použije časy SOUBORu místo aktuálního času\n -t ČAS použije [[CC]YY]MMDDhhmm[.ss] místo aktuálního času\n --time=SLOVO nastaví ČAS zadaný SLOVEM: \n access, atime, use (jako -a)\n modify, mtime (jako -m)\n --help vypíše tuto nápovědu a skončí\n --version vypíše označení verze a skončí\n\nFormáty časů pro přepínače -d, -t a pro zastaralou syntaxi jsou různé. \nProgram \"dir\" :\nPoužití: dir [PŘEPÍNAČ]... [SOUBOR]...\nList information about the FILEs (the current directory by default). Sort entries alphabetically if none of -cftuSUX nor --sort. \n\n -a, --all do not hide entries starting with .\n -A, --almost-all do not list implied . and ..\n -b, --escape print octal escapes for nongraphic characters\n --block-size=SIZE use SIZE-byte blocks\n -B, --ignore-backups do not list implied entries ending with ~\n -c with -lt: sort by, and show, ctime (time of last\n modification of file status information)\n with -l: show ctime and sort by name\n otherwise: sort by ctime\n -C list entries by columns\n --color[=WHEN] control whether color is used to distinguish file\n types. WHEN may be `never\', `always\', or `auto\'\n -d, --directory list directory entries instead of contents\n -D, --dired generate output designed for Emacs\' dired mode\n -f do not sort, enable -aU, disable -lst\n -F, --classify append indicator (one of */=@|) to entries\n --format=WORD across -x, commas -m, horizontal -x, long -l,\n single-column -1, verbose -l, vertical -C\n --full-time list both full date and full time\n -g (ignored)\n -G, --no-group inhibit display of group information\n -h, --human-readable print sizes in human readable format (e.g., 1K 234M 2G)\n --si likewise, but use powers of 1000 not 1024\n -H same as `--si\' for now; soon to change\n to conform to POSIX\n --indicator-style=WORD append indicator with style WORD to entry names:\n none (default), classify (-F), file-type (-p)\n -i, --inode print index number of each file\n -I, --ignore=PATTERN do not list implied entries matching shell PATTERN\n -k, --kilobytes like --block-size=1024\n -l use a long listing format\n -L, --dereference list entries pointed to by symbolic links\n -m fill width with a comma separated list of entries\n -n, --numeric-uid-gid list numeric UIDs and GIDs instead of names\n -N, --literal print raw entry names (don\'t treat e.g. control\n characters specially)\n -o use long listing format without group info\n -p, --file-type append indicator (one of /=@|) to entries\n -q, --hide-control-chars print ? instead of non graphic characters\n --show-control-chars show non graphic characters as-is (default\n unless program is `ls\' and output is a terminal)\n -Q, --quote-name enclose entry names in double quotes\n --quoting-style=WORD use quoting style WORD for entry names:\n literal, locale, shell, shell-always, c, escape\n -r, --reverse reverse order while sorting\n -R, --recursive list subdirectories recursively\n -s, --size print size of each file, in blocks\n -S výstup seřadí podle délky souborů\n --sort=SLOVO výstup seřadí podle SLOVA:\n extension (-X), none (-U), size (-S), time (-t)\n version (-v)\n status (-c), time (-t), atime (-u), access (-u),\n use (-u)\n --time=SLOVO vypisuje čas podle SLOVA:\n atime, access, use, ctime nebo status (-c);\n jestliže je zadán přepínač --sort=time, použije\n se tento čas jako řadící klíč\n -t výstup seřadí podle času poslední změny souboru\n -T, --tabsize=SLOUPCŮ pozice tabelátoru každých SLOUPCŮ znaků (impl. 8)\n -u s -lt: řadí podle atime a také jej vypisuje;\n s -l: vypisuje atime, ale řadí podle názvů souborů\n jinak: řadí podle atime\n -U zakáže seřazení výstupu, názvy souborů budou\n vypsány v tom pořadí v jakém jsou v adresáři\n -v seřadí výstup podle verzí souborů\n -w, --width=SLOUPCŮ použije tuto šířku obrazovky při vypisování\n -x jména souborů vypíše po řádcích místo po sloupcích\n -X výstup seřadí podle přípon souborů\n -1 vypíše jeden soubor na jeden řádek\n --help vypíše tuto nápovědu a skončí\n --version vypíše označení verze a skončí\n\nImplictně není k rozlišování typů souborů barva používána. To je rovnocenné s použitím přepínače --color=none. Použití přepínače --color bez argumentu KDY je rovnocenné s použitím přepínače --color=always. Přepínač --color=auto způsobí, že barvy budou použity pouze, je-li standardní výstup připojen k terminálu (tty). \nProgram \"dircolors\" :\nPoužití: dircolors [PŘEPÍNAČ]... [SOUBOR] Výstupem jsou příkazy, které zajistí nastavení proměnné prostředí LS_COLOR. \n\nSpecifikace výstupního formátu:\n-b, --sh, --bourne-shell výstupem je Bourne shellový kód \n\n pro nastavení LS_COLORS\n -c, --csh, --c-shell výstupem je C shellový kód\n pro nastavení LS_COLORS\n -p, --print-database výstupem je vnitřní databáze\n --help vypíše tuto nápovědu a skončí\n --version vypíše označení verze a skončí\nProgram \"du\" :\nPoužití: du [PŘEPÍNAČ]... [SOUBOR]...\nSčítá diskový prostor zabraný každým SOUBORem, pro adresáře i s obsahem podadresářů. \n\n -a, --all vypíše součet velikosti všech souborů,\n ne pouze adresářů\n --block-size=VELIKOST použije tuto velikost bloku\n -b, --bytes velikosti vypíše v bajtech\n -c, --total vypíše i celkový součet\n -D, --dereference-args následuje symbolický odkaz, když jako argument zadán\n -h, --human-readable vypisuje velikosti ve formátu čitelném pro lidi\n (např. 1K 234M 2G)\n -H, --si jako předchozí, ale jednotky jsou násobkem 1000\n -k, --kilobytes jako --block-size=1024\n -l, --count-links jestliže jsou soubory pevnými odkazy na jeden soubor,\n sčítá velikosti, jako by to byly obyčejné soubory\n -L, --dereference následuje všechny symbolické odkazy\n -m, --megabytes jako --block-size=1048576\n -S, --separate-dirs nepočítá do velikosti adresářů velikosti jejich\n podadresářů\n -s, --summarize vypíše pouze celkový součet pro každý argument\n -x, --one-file-system přeskočí adresáře na jiných souborových systémech\n -X SOUBOR, --exclude-from=SOUBOR přeskočí soubory, které vyhovují libovolnému\n reg.výr. ze souboru SOUBOR\n --exclude=REGVÝR přeskočí soubory vyhovující REGVÝR\n --max-depth=N vypisuje názvy adresářů a celkové součty pouze\n do N-té úrovně adresářů. Argument --max-depth=0\n je rovnocenný se --sumarize.\n --help vypíše tuto nápovědu a skončí\n --version vypíše označení verze a skončí\nProgram \"install\" :\nPoužití: install [PŘEPÍNAČ]... ZDROJ CÍL (1-ní formát) \n nebo: install [PŘEPÍNAČ]... ZDROJ... ADRESÁŘ (2-hý formát) \n nebo: install -d [PŘEPÍNAČ]... ADRESÁŘ... (3-tí formát) \n\nV prvních dvou formátech kopírování ZDROJe do CÍLe nebo více ZDROJů do ADRESÁŘe, s nastavením uživatelských práv a uživatele/skupiny. Ve třetím formátu, vytvoření všech komponent zadaného ADRESÁŘE(ů). \n\n --backup=[TYP] vytvoří záložní kopii před smazáním\n -b jako --backup, ale bez argumentu\n -c (ignorován)\n -d, --directory všechny argumenty jsou brány jako názvy adresářů.\n Všechny neexistující komponenty těchto adresářů jsou vytvořeny.\n -D vytvoří všechy úvodní komponenty CÍLe, kromě poslední\n -g, --group=SKUPINA nastaví skupinu souboru na SKUPINU\n -m, --mode=PRÁVA nastaví přístupová práva souboru na PRÁVA (zadána jako\n pro chmod)\n -o, --owner=VLASTNÍK nastaví vlastníka souboru (pouze superuživatel - root)\n -p, --preserve-timestamps časy cílového souboru nastaví tak, jak byly\n nastaveny u zdrojového\n -s, --strip odstraní tabulky symbolů, pouze 1 a 2 formát\n -S, --suffix=PŘÍPONA nastaví novou příponu záložních souborů\n -v, --verbose vypisuje jména všech vytvářených adresářů\n --help vypíše tuto nápovědu a skončí\n --version vypíše označení verze a skončí\n\nPokud není přípona záložních souborů nastavena přepínačem --suffix nebo proměnnou SIMPLE_BACKUP_SUFFIX, je používána přípona `~\'. Způsob vytváření záložních souborů lze ovlivnit nastavením proměnné VERSION_CONTROL, hodnoty mohou být: \n\n none, off záložní kopie nevytvářet (i když je zadán přepínač --backup)\n numbered, t číslované záložní kopie\n existing, nil číslované, jestliže již číslovaná záložní kopie existuje, jinak jednoduché\n simple, never jednoduché záložní kopie\nProgram \"mkfifo\" :\nPoužití: mkfifo [PŘEPÍNAČ] JMÉNO...\nTvoří pojmenované roury (FIFO) se jmény JMÉNO. \n\n -m, --mode=PRÁVA nastaví přístupová práva (zadána jako příkazu \'chmod\'),\n místo toho, aby byla nastavena na 0666 - umask\n --help vypíše tuto nápovědu a skončí\n --version vypíše označení verze a skončí\nProgram \"shred\" :\nPoužití: shred [PŘEPÍNAČ] SOUBOR [...]\nOverwrite the specified FILE(s) repeatedly, in order to make it harder for even very expensive hardware probing to recover the data. \n\n -f, --force change permissions to allow writing if necessary\n -n, --iterations=N Overwrite N times instead of the default (25)\n -s, --size=N shred this many bytes (suffixes like k, M, G accepted)\n -u, --remove truncate and remove file after overwriting\n -v, --verbose show progress\n -x, --exact do not round file sizes up to the next full block\n -z, --zero add a final overwrite with zeros to hide shredding\n - shred standard output\n --help display this help and exit\n --version print version information and exit\n\nDelete FILE(s) if --remove (-u) is specified. The default is not to remove the files because it is common to operate on device files like /dev/hda, and those files usually should not be removed. When operating on regular files, most people use the --remove option. \n\nCAUTION: Note that shred relies on a very important assumption: that the filesystem overwrites data in place. This is the traditional way to do things, but many modern filesystem designs do not satisfy this assumption. The following are examples of filesystems on which shred is not effective: \nlog-structured or journaled filesystems, such as those supplied with AIX and Solaris (and JFS, ReiserFS, XFS, etc.) \nfilesystems that write redundant data and carry on even if some writes fail, such as RAID-based filesystems \nfilesystems that make snapshots, such as Network Appliance\'s NFS server \nfilesystems that cache in temporary locations, such as NFS version 3 clients \ncompressed filesystems \nProgram \"vdir\" :\nPoužití: vdir [PŘEPÍNAČ]... [SOUBOR]... \nList information about the FILEs (the current directory by default). Sort entries alphabetically if none of -cftuSUX nor --sort. \n\n -a, --all do not hide entries starting with .\n -A, --almost-all do not list implied . and ..\n -b, --escape print octal escapes for nongraphic characters\n --block-size=SIZE use SIZE-byte blocks\n -B, --ignore-backups do not list implied entries ending with ~\n -c with -lt: sort by, and show, ctime (time of last\n modification of file status information)\n with -l: show ctime and sort by name\n otherwise: sort by ctime\n -C list entries by columns\n --color[=WHEN] control whether color is used to distinguish file\n types. WHEN may be `never\', `always\', or `auto\'\n -d, --directory list directory entries instead of contents\n -D, --dired generate output designed for Emacs\' dired mode\n -f do not sort, enable -aU, disable -lst\n -F, --classify append indicator (one of */=@|) to entries\n --format=WORD across -x, commas -m, horizontal -x, long -l,\n single-column -1, verbose -l, vertical -C\n --full-time list both full date and full time\n -G, --no-group inhibit display of group information\n -h, --human-readable print sizes in human readable format (e.g., 1K 234M 2G)\n --si likewise, but use powers of 1000 not 1024\n -H same as `--si\' for now; soon to change\n to conform to POSIX\n --indicator-style=WORD append indicator with style WORD to entry names:\n none (default), classify (-F), file-type (-p)\n -i, --inode print index number of each file\n -I, --ignore=PATTERN do not list implied entries matching shell PATTERN\n -k, --kilobytes like --block-size=1024\n -l use a long listing format\n -L, --dereference list entries pointed to by symbolic links\n -m fill width with a comma separated list of entries\n -n, --numeric-uid-gid list numeric UIDs and GIDs instead of names\n -N, --literal print raw entry names (don\'t treat e.g. control\n characters specially)\n -o use long listing format without group info\n -p, --file-type append indicator (one of /=@|) to entries\n -q, --hide-control-chars print ? instead of non graphic characters\n --show-control-chars show non graphic characters as-is (default\n unless program is `ls\' and output is a terminal)\n -Q, --quote-name enclose entry names in double quotes\n --quoting-style=WORD use quoting style WORD for entry names:\n literal, locale, shell, shell-always, c, escape\n -r, --reverse reverse order while sorting\n -R, --recursive list subdirectories recursively\n -s, --size print size of each file, in blocks\n -S výstup seřadí podle délky souborů\n --sort=SLOVO výstup seřadí podle SLOVA:\n extension (-X), none (-U), size (-S), time (-t)\n version (-v)\n status (-c), time (-t), atime (-u), access (-u),\n use (-u)\n --time=SLOVO vypisuje čas podle SLOVA:\n atime, access, use, ctime nebo status (-c);\n jestliže je zadán přepínač --sort=time, použije\n se tento čas jako řadící klíč\n -t výstup seřadí podle času poslední změny souboru\n -T, --tabsize=SLOUPCŮ pozice tabelátoru každých SLOUPCŮ znaků (impl. 8)\n -u s -lt: řadí podle atime a také jej vypisuje;\n s -l: vypisuje atime, ale řadí podle názvů souborů\n jinak: řadí podle atime\n -U zakáže seřazení výstupu, názvy souborů budou\n vypsány v tom pořadí v jakém jsou v adresáři\n -v seřadí výstup podle verzí souborů\n -w, --width=SLOUPCŮ použije tuto šířku obrazovky při vypisování\n -x jména souborů vypíše po řádcích místo po sloupcích\n -X výstup seřadí podle přípon souborů\n -1 vypíše jeden soubor na jeden řádek\n --help vypíše tuto nápovědu a skončí\n --version vypíše označení verze a skončí\n\nImplictně není k rozlišování typů souborů barva používána. To je rovnocenné s použitím přepínače --color=none. Použití přepínače --color bez argumentu KDY je rovnocenné s použitím přepínače --color=always. Přepínač --color=auto způsobí, že barvy budou použity pouze, je-li standardní výstup připojen k terminálu (tty).','',3,'Woodcraft','20041022202753','',0,0,0,1,0.340706628906,'20041022202753','79958977797246'); INSERT INTO cur VALUES (77,0,'Lokalizace_a_internacionalizace','= Kódování znaků =\nVývoj od 7.-bit amerického ASCII přes 8.-bit kódové stránky jednotlivých abeced k 16.-ti bitovému Unicode (UCS-2)\n\nUTF-8 jako odvozenina UCS-2: odstraňuje nevýhody UCS-2\n\nISO 10646: definuje Universal Character Set (UCS) obsahující všechny znaky všech kódování znakových sad. UCS je 31-bitová znaková sada (tzv. UCS-4), ale dnes se z ní používá pouze prvních 65534 kódů (0x0000 to 0xfffd), označovaných jako UCS-2 UTF-8 zajišťuje: \nKompatibilitu se staršími souborovými systémy (zpravidla nepovolují v názvech souboru nulový byte ani (zpětné) lomítko).\nKompatibilitu s existujícími programy: zápis jakéhokoli znaku neobsahuje ASCII, pokud znak původně v ASCII nebyl.\nSnadnost konverzí z/do UCS.\nPrvní byte určuje počet bytů, které ve vícebytovém zápisu znaků následují.\nTransformační formát by neměl být zbytečně rozmařilý co do počtu bytů, použitých pro zápis.\nZ kterékoli pozice v proudu dat by mělo být možné najít začátek další znakové jednotky.\nUTF-8 zvládá zápis UCS hodnot v rozmezí 0-0x7ffffff za použití 1-6 bytů. Úvodní byte vždy prozrazuje počet použitých bytů a následující členy vícebytové posloupnosti mají nastaven nejvyšší bit. je nastaven. Jakýkoli byte, který nezačíná na 10xxxxxx je začátek zápisu dalšího znaku. \n\n= NLS, i18n, l10n =\n\nNLS (Native Language Support = podpora přirozeného jazyka): v podstaě zahrnuje internacionalizaci i lokalizaci (viz níže). Některé aspekty NLS: \n\nAčkoliv pro programy v C je dá se říci GNU gettext kompletní sada nástrojů pro podporu NLS, scriptovací jazyky (perl, shell, awk aj.) nejsou tak dobře podporované, i když je NLS možná \n\nNěkteré programy (autoconf, bison, ..) mohou produkovat jiné programy či scripty. Ačkoliv je generující program sám internacionalizován, nemusí produkovat internacionalizovaný program (nepřímá internacionalizace). Může se stát, že vygenerovaný program bude nutné nezávisle internacionalizovat. \n\nVolby a přepínače programů jsou často poplatné angličtině - je možné lokalizovat i toto. \n\nMnoho programů čte, překládá, interpretuje či je nějak řízeno vstupními soubory (může být i vstup z klávesnice). Ty jsou často textem obsahujícím klíčová slova, identifikátory nebo odpovědi které by mohly být překladatelné. Např. \"rm -i {}\" se dotazuje před smazáním, po internacionalizaci by mohlo očekávat něco jiného než \"y\"/\"n\". \n\nManuály přicházející s programovými balíky a soubory dokumentace by měly být také překládány. S tím úzce souvisí i otázky pozdějších update dokumentace, která se stejně jako doprovázené programy také vyvíjí. \n\nInternacionalizace (internationalization = i18n): stručně řečeno, operace, po které jsou možné následné další lokalizace. Je to operace (jednorázová!), po které program nebo množina programů začleněná do jednoho balíku je schopna podporovat více jazyků. Je to zevšeobecnění při kterém programy uživající pouze řetězce v jedné řeči (většinou v angličtině), jsou spojeny do obecných cest, jak provést to samé v jiných jazycích. Návrháři programů mohou užít pro interancionalizaci svých programů různé techniky, některé z nich byli standardizovány. Jeden z příkladů těchto standardů je GNU gettext. \n\nLokalizace je operace při které v již internacionalizovaných programech jsou poskytnuty informace takové, že mohou provádět své vstupy a výstupy ve tvaru, který je správný pro přirozené jazyky a kulturní zvyky. V podstatě intarnacionalizace je oblastí spíše programátorskou a lokalizace spíše překladatelskou. \n\nProgramátorské prostředí zavádí některé funkce pro použití dovolující konfiguraci za běhu. Vnější popis specifické množiny kulturních zvyklostí dané země spolu se všemi přiřazenými překlady do stejného přirozeného jazyka se nazývá \"locale\" pro tento jazyk nebo zemi. \nUživatelé dosáhnou lokalizace programů nastavením správných hodnot pro speciální proměnné prostředí, před spuštěním těchto programů. Tyto proměnné určují, které \"locale\" by měli být programy užity. Je několik hlavních oblastí, které se mohou lišit podle země a tyto odlišnosti musí locale také popsat. Následující seznam může pomoci dát vícejazyčné zprávy do správné souvislosti s jinými úkoly staženými k locales: \n\nZnaky a kódové stránky - kódová stránka užívaná v USA a většině anglicky mluvících částech světa je ASCII sada. Pro různé locale je ale potřeba mnoho znaků, které v této sadě nejsou. 8-mi bytová kódová stránka ISO 8859-1 má většinu speciálních znaků obsažených v hlavních evropských jazycích. Přesto v mnoha případech nejsou ani ISO 8859-1 fonty dostačující. Proto každé locale musí specifikovat kterou kódovou stránku chce použít a musí mít odpovídající rutiny pro zpracování této kódové sady. \nPozn.- některé častěji se vyskytující kódové stránky : \n\nDOS CP852 - kódová stránka s latin znaky pro střední a východní Evropu \n\nDOS CP437 - kódová stránka s latin znaky pro USA a Kanadu. Nemá diakritické znaky \n\nISO 8859-2 - standardizovaná kódová stránka s latin znaky pro střední a východní Evropu \n\nISO 8859-15 - v podstatě stejná jako ISO 8859-1, ale obsahuje znak Euro (€) \ncp1250, Mac OS Central European (MacCE) - nestandartizované kódové stránky používané v OS Windos (Microsoft) a MAC (Apple) \nKOI8-CS a čeština Bří Kamenických jsou \n\nMěna - používané symboly se liší mezi jednotlivými zeměmi včetně pozice na kterých jsou užívány. Programy musí být schopny transparentně zobrazovat měnové výstupy v přirozeném modu pro každé locale. \n\nDatumy - také formát datumu se liší pro jednotlivé lokality.Například vánoce v roce 1999 se píší jako 12/24/1999 v USA, 24/12/1999 v Austrálii a 24.12.1999 v ČR. Jiné země mohou používat ISO 8061 tvary datumu atd. Čas může být zapisován jako hh:mm, hh.mm, nebo jinak. Někde je čas specifikován v 24 hodinovém módu, někde jako AM, PM. Dále se může lišit rozšířením o korekci letního času mezi jednotlivými zeměmi. \n\nČísla - nejpoužívanější oblast v jazykové podpoře. Tady GNU gettext umožňuje návrhářům a uživatelúm snadnou změnu jazyka, který SW používá pro komunikaci s uživateli. \n\n\nProměnné prostředí ovlivňující nastavení locale:\n\nLC_MESSAGES - jazyk pro textové zprávy. \n\nLC_COLLATE - informace pro třídění a porovnávání textu tj. jak se různé znaky a/nebo skupiny znaků třídí v daném jazyce. \n\nLC_CTYPE - informace o typu znaků (písmena, číslice,malá nebo velká písmena atd.). Tato informace ]je přístupná přes třídy znaků POSIX v legurálních výrazech jako např. [[:alnum:]]. \n\nLC_MONETARY - informace o měně jako je symbol měny a zda se píše před a nebo za číslem. \n\nLC_NUMERIC - číselné informace jako je znak pro desetinou tečku (čárku) a oddělovač tisíců. \n\nLC_RESPONSE -informace o odpovědi např. výrazy pro ano a ne v místním jazyce, případně další informace. \n\nLC_TIME - informace o čase a datumu jako dvanácti nebo čtyřiadvacetihodinové hodiny, měsíc tištěný před nebo za dnem datumu, místní zkratky měsíců atd. \n\nLC_ALL - souhrn všeho opsaného výše. \n\n\n\n= Nastavení NLS v systému =\n\nNastavení na požadované locale (za předpokladu, že máme nainstalovány internacionalizované a lokalizované balíky/programy) se provede nastavením výše uvedených proměnných prostředí. Globální systémové nastavení je u GNU/Linux distribucí RedHat/Fedora v souboru \"/etc/sysconfig/i18n\". Typicky tento soubor obsahuje nastavení proměnných pro systémové locales, podporované další locales, použitý systémový font a znakovou sadu. Příklad souboru \"/etc/sysconfig/i18n\": \n\n
\n#\n# /etc/sysconfig/i18n\n#\n# localization == l, 10 znaku, n == l10n\n# l \\__  __/ n\n#      \\/\n#      10 znaku\n#\n# internationalization == \"i\" + 18 znaku + \"n\" ==> i18n\n# i \\______  ______/ n\n#          \\/\n#          18 znaku\n#\n#Used by the /sbin/setsysfont command (which is run by rc.sysinit at boot time):\n# SYSFONT= any font that is legal when used as consolechars -f $SYSFONT ...\nSYSFONT=\"lat2-sun16\"\n# SYSFONTACM= any ACM (application charset map - viz prg \"consolechars\")\nSYSFONTACM=\"iso02\"\n#  LANG - default value for all LC_* variables. Sets all the categories,\n# but can be overridden by the individual locale categories.\n# It is ISO 639 two-letter code identifying the  language.  Language codes\n# are NOT the same as the country codes given in ISO 3166 :\nLANG=cs_CZ\n#  LC_CTYPE - character types and encoding :\n#LC_CTYPE=\n#  LC_COLLATE - sorting rules :\n#LC_COLLATE=\n#  LC_MESSAGES - natural language messages:\nLC_MESSAGES=en\n#  LC_NUMERIC - number formatting :\n#LC_NUMERIC=\n#  LC_MONETARY - money amount formatting :\n#LC_MONETARY=\n#  LC_TIME - date and time display :\n#LC_TIME=\n\n#  LC_ALL - override for all other LC_* variables :\n# Nebudu nastavovat - mc pak spatne tridi jmena souboru (ignoruje tecky,\n#  nerozlisuje mala a velka pismena ap):\n#LC_ALL=cs_CZ.utf-8\n\n#  LANGUAGE - override for LC_MESSAGES, used by GNU gettext only; can be\n# a : separated list of ISO language codes.\n# This is a GNU extension that has higher priority for setting the message\n# catalog than LANG or LC_ALL :\n#LANGUAGE=cs\n#  LINGUAS - can be a \' \' separated list of ISO language codes :\n#LINGUAS=\"cs en\"\nCHARSET=\"8859-2\"\nSUPPORTED=\"cs_CZ:cs:fr_FR@euro:fr_FR:fr:de_DE@euro:de_DE:de:ru_RU.koi8r:ru_RU:ru:es_ES@euro:es_ES:es\"\n
\n\nKonkrétní nastavení individuálních uživatelů je asi nejjednodušší provést v jejich přihlašovacích souborech - např. \"~/.profile\" (shelly sh/bash/ksh), \"~/.bash_profile\" (bash), \"~/.tcshrc\"/\"~/.cshrc\" (tcsh/csh) podle druhu uživatelova shellu. \n\nPozn.: GNU gettext rozeznává následující proměnné prostředí, od největší po nejmenší prioritu: LANGUAGE, LC_ALL, LC_xxx, LANG. \n\n= GNU \"[[gettext]]\" =\nCíle GNU \"gettext\", přehled, soubory zařizující překlad, pohled ze strany uživatele, instalátora, programátora, překladatele a správce \n\nProgramy jsou obvykle psány a dokumentovány v angličtině a užívají angličtinu v době provádění pro interakci s uživately - nejen v GNU, ale také ve velké části komerčního a volného software. Užití společného jazyka je vhodné pro komunikaci mezi vývojáři, správci a uživately ze všech zemí. Na druhou stranu ale většina lidí je spokojená méně s angličtinou než se svým vlastním přirozeným jazykem, a bude spíše preferovat užití svého mateřského jazyka pro každodenní práci. \n\nGNU projekt překladu je zobecnění těchto snah do fungující struktury, a má dobré vyhlídky přinést dosažení skutečně vícejazykové sady programů.\n\nGNU gettext je důležitý krok pro GNU Translation Projekt, protože je to věc na které lze stavět mnoho jiných kroků. Tento balík poskytuje programátorům, překladatelům i uživatelům komplexní množinu nářadí a dokumentace. GNU gettext utility jsou souborem nářadí - programů, který poskytuje pracovní rámec pomáhající jiným GNU balíkům vytvářet vícejazyčné zprávy. Tyto nářadí zahrnují množinu konvencí jak by měly být programy psány, aby podporovaly katalogy zpráv, organizaci adresářů a pojmenovávání souborů pro katalogy zpráv samotné, runtime knihovnu podporující vracení přeložených zpráv a několik programů pro práci s již přeloženými a překládanými řetězci.\n\nGNU gettext je navržen tak, aby minimalizoval dopady internacionalizace ve zdrojích programů. Internacionalizace má větší šance na úspěch jestliže je to ve zdrojích co nejméně nápadná, tak aby byl zdrojový kód co nejsrozumitelnější.\nSoubory zařizující překlad\n\nPísmena PO v `.po\' souborech znamenají \"Portable Object\", pro odlišení od `.mo\' souborů, kde MO znamená Machine Object. Tento přístup i PO formát souboru, je inspirován NLS standardem navrženým skupinou Uniforum, a implementovaným firmou Sun v jejich operačním systému Solaris. \n\nPO soubory jsou navrženy tak, aby byly čitelné a editovatelné lidmi, a přiřazují každý původní přeložitelný řetězec daného balíku s jeho překladem v jednotlivém cílovém jazyce. Jeden PO soubor je vyhražen pro jeden cílový jazyk. Jestliže balík podporuje více jazyků, je v něm jeden takový PO soubor pro každý podporovaný jazyk a každý balík má jeho vlastní množinu PO souborů. Tyto PO soubory je nejlepší vytvářet programem xgettext, a jejich pozdější úpravy programem tupdate. Program xgettext extrahuje všechny označené zprávy z množiny C souborů a inicializuje PO soubor s prázdnými překlady. Program tupdate hlídá obsahy PO souborů mezi verzemi odpovídajících zdrojů, okomentuje zastaralé položky, inicializuje nové a aktualizuje všechny odkazy ve zdrojových řádcích.\n\nMO soubory jsou navrženy tak, aby byly čitelné programy, takže jsou binární. Několik systémů má také nářadí pro vytváření a práci s MO soubory jako část NLS (Native Language Support) systému, ale tvar těchto MO souborů je často odlišný od systému k systému a není přenositelný. \nPřehled GNU gettext-u\n\nNásledující diagram shrnuje vztah mezi soubory obsluhovanými GNU gettext-em a nástroji pracujícími nad těmito soubory. Dobré pochopení těchto vazeb je důležité a pomůže programátorům, překladatelům i správcům. \n\n
\nPůvodní C zdroje ---> PO mód ---> označené C zdroje -----.\n                                                         |\n              .---------<--- GNU gettext knihovna        |\n.--- make <---+                                          |\n|             `---------<--------------------+-----------\'\n|                                            |\n|   .-----<--- PACKAGE.pot <--- xgettext <---\'   .---<--- PO souhrn\n|   |                                            |             ^\n|   |                                            `---.         |\n|   `---.                                            +---> PO mód ----.\n|       +----> tupdate -------> LANG.pox --->--------\'                |\n|   .---\'                                                             |\n|   |                                                                 |\n|   `-------------<---------------.                                   |\n|                                 +--- LANG.po <--- nový LANG.pox <---\'\n|   .--- LANG.gmo <--- msgfmt <---\'\n|   |\n|   `---> install ---> /.../LANG/PACKAGE.mo ---.\n|                                              +---> \"Hello world!\"\n`-------> install ---> /.../bin/PROGRAM -------\'\n
\nOznačení `PO mód\' na dvou místech tohoto diagramu znamená \"ruční editaci\" za užití jakéhokoli editoru (kdo zná GNU Emacs - ten má speciální PO mód pro editaci nebo modifikaci PO souborů. Během editace PO souboru PO mód dovoluje snadné prohlížení pomocných a souhrnného PO souborů, tak i následných odkazů do množiny C programových zdrojů z kterých byly PO soubory odvozeny. Má i jiné zvláštní vlastnosti - interaktivní označení řetězců programu jako překladatelné, ověřování platnosti PO souborů se snadným přemístěním na řádky PO souboru vykazující chyby aj.\n\nPro programátora je první krok pro zařazení GNU gettext-u do jeho balíku identifikace, které řetězce v jeho C zdrojích by měly být přeložitelné a které přeložitelné nejsou. Tato únavná práce může být usnadněna užitím PO módu, ale pro modifikaci C zdrojů je možné použít kterýkoliv oblíbený editor. Dále je nutno provést ještě jednoduché, standardní úpravy pro správnou inicializaci překladové knihovny. \n\nPo modifikaci C zdrojů je použit program xgettext k nalezení a extrakci všech přeložitelných řetězců, a ten z nich vytvoří počáteční PO soubor. Tento `balík.pot\' soubor obsahuje všechny původní řetězce programu, má nastaveny ukazatele kde je přesně v C zdrojích každý řetězec použit, a všechny překlady jsou nastaveny na prázdné. Písmeno t v `.pot\' značí, že je dočasný (Template) PO soubor, zatím neorientovaný na nějaký jednotlivý jazyk. \n\nÚplně poprvé neexistuje žádný `lang.po\', takže může být přeskočen krok tupdate a nahražen jen překopírováním `package.pot\' do `lang.pox\', kde lang reprezentuje cílový jazyk. \n\nPak nastáva počáteční překlad zpráv a jejich přidávání do `lang.pox\'. Pokud se nepoužívá GNU Emacs, je nutné dodržovat formát PO souborů. Pokud již nějaké překlady byly uchovány v souhrnném PO souboru, překladatelé mohou užít PO mód pro inicializaci nepřeložených položek ze souhrnu a naopak do souhrnu uložit vybrané překlady. Souhrnné soubory jsou určeny k výměně mezi členy překladatelského týmu. \n\nProgramy nebo balíky programů jsou dynamické povahy: uživatelé napíší hlášení chyb a návrh vylepšení, správci reagují různou modifikací programů. To že balík již byl internacionalizován by nemělo správcům bránit v přidávání nových řetězců nebo modifikaci řetězců již přeložených. Ti dělají svou práci jak nejlépe mohou. Pro GNU Translation Project je důležité aby se správci nestarali o záležitosti překladu a překladatelé byli uchováni programátorských věcí. Jediná věc kterou by správci měli udělat je označení nových řetězců pro překlad (pokud by měly být přeloženy), ten ale nedělat. Následně, když jsou programy a jejich řetězce správci upraveny, by měl probram xgettext vytvořit soubory `package.pot\', které už pak jsou dále udržovány, takže překlady v počátečních `lang.po\' časem pomalu zastarávají. \n\nPro překladatele (a také správce) je důležité porozumět, že překlad balíku je nepřetržitý proces trvající celou dobu života balíku, ne něco co se udělá jednou provždy na počátku. Po prvotním překladu daného balíku jsou potřebné občasné zásahy, protože některé přeložené položky zastarají, nové nepřeložené se objeví a potřebují přeložit. \n\nProgram tupdate má za úkol obnovu již existujícího `lang.po\' souboru. Provede to porovnáním s novějším `balík.pot\' dočasným souborm, extrahovaným programem xgettext z nových C zdrojů. Obnovovací operace upraví všechny odkazy na řetězce do příslušných míst C zdrojů, protože se tyto tyto řetězce posunují, tak jak jsou programy modifikovány. tupdate také zakomentuje v `lang.pox\' jako zastaralé již přeložené položky které již nadále nejsou použité ve zdrojích programů. Nakonec zjistí nové řetězce a vloží je do výsledného PO souboru jako nepřeložené položky. Cílem je získání aktualizovaného `lang.pox\' souboru poskytujícího překlady pro všechny řetězce. Když je správně vytvořen, tento soubor `lang.pox\' může nahradit předchozí `lang.po\' soubor.\n\nDoba změn nebo pohybu PO souborů je nedílnou součástí \"hry\" překladu a měla by být pochopena a akceptována. Lidé kteří to odmítají budou mít problémy s podílením se na GNU Translation Project-u. \n\nPokud je PO soubor úplný a spolehlivý, je PO soubor programem \'\'\'msgfmt\'\'\' převeden do strojově orientovaného (machine-oriented - MO) formátu, který poskytuje efektivní získání překladů programy z balíku, když to za běhu potřebují. \n\nNakonec jsou modifikované C zdroje přeloženy a sestaveny s GNU gettext knihovnou (většinou pomocí \"[[make]]\") a výsledný spustitelný program je instalován někam kde jej uživatelé najdou. Také MO soubory samotné by měly být korektně instalovány. Nastavením odpovídajících proměnných prostředí by se měl program lokalizovat sám automaticky, kdykoliv se provádí.\n\n= Pohled ze strany uživatele, instalátora, programátora, překladatele a správce =\n\n* \'\'\'Uživatele\'\'\' - je (měl by být!) nejjednodušší - normální uživatel by měl vidět, že aplikace s ním komunikuje jeho přirozeným jazykem. Ostatní SW inženýři - programátoři, překladatelé a správci by měli spolupracovat, aby to tak skutečně bylo. Pro uživatele by mělo být postačující nastavení proměnné \'\'\'LANG\'\'\'. \n\n* \'\'\'Instalátora\'\'\' (nebo snad instalatéra ?) - balíky užívající GNU gettext se sami instalují tak, že povolují překlad zpráv. Při konfiguraci vlastností balíku před jeho překladem by měl konfigurační script (standardně má název \"[[configure]]\") sám zjistit, zda aktuální systém poskytuje gettext nebo catgets funkce. Pokud ne, měla by být automaticky vybrána GNU gettext knihovna. Instalátor může její použití vnutit - typicky volbou \'\'\'./configure --with-gnu-gettext\'\'\' obejde použití systémových gettext/catgets a vnutí použití GNU gettext. Naopak příkazem \'\'\'./configure --disable-nls\'\'\' se balík nakofiguruje tak, že není schopen vůbec překládat zprávy. \nLokalizované balíky mají obecně mnoho \"\'\'\'.po\'\'\'\" souborů, každý pro jedno locale. Pokud není překlad potlačen, nainstalují se všechny. Nastavením (před konfigurací) proměnné \'\'\'LINGUAS\'\'\' je možné omezit instalaci \'\'\'.po\'\'\' souborů jen pro některé jazyky. proměnná \'\'\'LINGUAS\'\'\' by měla obsahovat mezerou oddělené dvoupísmenné kódy požadovaných jazyků. \n\n* \'\'\'Programátora\'\'\' - měl by znát stávající možnosti překladu zpráv: [[catgets]] od X/OPEN a [[gettext]] od organizace Uniforum. A jejich programové interface. Také by měl určit umístění příslušných katalogů zpráv. Podrobnější popis viz GNU gettext. \n\n* \'\'\'Překladatel\'\'\' - sada nástrojů v GNU gettext umožňuje vytváření, údržbu a správu lokalizovaných zpráv. Jsou použitelné i pro týmovou práci (což je nejčastější případ - viz \"GNU translation project\"). Další info lze získat na http://www.li.org/. \n\n* \'\'\'Správce\'\'\' - má řadu odpovědností - jedna z hlavních je, aby bylo možné balík instalovat na celé řadě platforem. Vytváření a správa konfiguračních souborů balíku je důležitým prvkem.','/* GNU \"gettext\" */',3,'Woodcraft','20041220090324','',0,0,1,0,0.767930283569,'20041220090324','79958779909675'); INSERT INTO cur VALUES (78,0,'Vlastnosti_OS_Linux','[[Special:Whatlinkshere/Vlastnosti OS Linux | Odkaz na stránky které sem odkazují]]\n\n\'\'\'architektury\'\'\' - abecedně:\n:Alpha (DEC/Compaq 64-bit RISC),\n:ARM (RISC od ARM Holdings PLC),\n:CRIS (Code Reduced Instruction Set CPU fy Axis Communications /hlavně embedded zařízení/),\n:i386 (Intel a kompatibilní),\n:ia64 (Intel 64-bit s EPIC - Explicitly Parallel Instruction Computing),\n:M68000 (Motorola),\n:MIPS a MIPS64 (RISC CPU fy MIPS, SGI a IDT),\n:PARISC (RISC fy HP),\n:PPC (Motorola, IBM),\n:S390 (IBM),\n:SH (64-bit RISC CPU SuperH fy Hitachi),\n:SPARC,SPARC64 (32 a 64-bit CPU fy SUN)\n\n\'\'\'jádrem podporovaný HW\'\'\' - sběrnice, řadiče, rozšiřující karty\n\n\'\'\'zavádění systému\'\'\' - HW zavaděče, SW multiboot zavaděče, start jádra\n\n\'\'\'procesy a démoni\'\'\' - PID, další ID: UID a GID - spouštějícího uživatele, EUID a EGID - když se změní SUID/SGID bitem; jsou zkoumány jádrem při kontrole práv, FSUID a FSGID - normálně stejné jako EUID a EGID; užity při kontrole přístupových práv k souborům
Saved UID a GID - užity programy, které změní UID/GID pomocí volání systému, k uchování reálného UID/GID \n\n\'\'\'signály\'\'\' - události generované systémem (porušení ochrany paměti, chyby CPU, ilegální instrukce, ovladače vyvolávající přerušení), shellem i programy. Mohou být generovány, odchytávány a ignorovány (alespoň některé). Více viz \"man -a signal\"\n\n\'\'\'vlákna (threads)\'\'\' = více větví provádění jednoho programu. Rozdíl od volání fork(), které vytváří nový proces - potomka.\n\n\'\'\'meziprocesová komunikace\'\'\' (IPC=InterProcess Communication, objevila se v Unix System V). Známe 3 základní druhy komunikace mezi procesy: \n:*\'\'\'\'\'semafory\'\'\'\'\' (spec. proměnná /binární x obecný semafor/). Na rozdíl od normální proměnné je test i změna semaforu jediná operace - to zajistí že semafor nemůže mezi testem a změnou změnit jiný proces.\n:*\'\'\'\'\'fronty zpráv\'\'\'\'\' (podobné rourám; umožňují jednomu procesu poslat blok dat jinému procesu). Vhodné pro výměnu kratších bloků dat (Linux jádra v2.4 mají max. velikost zprávy 8kB).\n:*\'\'\'\'\'sdílená paměť\'\'\'\'\' (přístup nepříbuzných procesů ke stejné logické paměti). Využívaná např. v databázových strojích (DB engine) pro výměnu velkého množství dat mezi front-end procesem zajišťujícím styk s klienty a DB jádrem manipulujícím s daty na discích. Používá se k efektivnímu přístupu více procesů k velkým blokům dat (řádově MB a více).\n\n\'\'\'roury\'\'\' (propojení toku dat mezi dvěma procesy). Roura je obousměrné propojení dvou procesů (volání pipe() vrací pole 2 descriptorů souborů - první pro čtení, druhý pro zápis). Někdy se roura také nazývá FIFO (podle angl. First-In First-Out == první dovnitř první ven).\n\n\'\'\'sockety\'\'\' - další metoda komunikace mezi dvěma procesy - obdoba roury ale na rozdíl od předchozích metod není omezení na jeden počítač. Typicky pro klient/server aplikace\n\n\'\'\'init/inittab\'\'\' - stavy OS. Operační systém se může nacházet v několika základních stavech, standardně 0-6, S a s. Pevně definovány jsou stavy 0 (halt systému), 6 (reboot systému) a 1 (sjetí do jednouživatelského režimu).\nsyslog/logování - záznamy událostí jádra a procesů. dmesg x kruhový buffer jádra\n\n\'\'\'cron/anacron\'\'\' - opakované spouštění procesů v budoucnu\n\n\'\'\'at\'\'\' - spuštěni procesu v budoucím čase\n\nPoslední aktualizace původního autora: 20.5.2003\n\nPůvodní autor: Fr. Hanzlík - Linux systémy','',3,'Woodcraft','20041023080524','',0,0,1,0,0.162242881564,'20041023080524','79958976919475'); INSERT INTO cur VALUES (79,0,'Plánování_spouštění_úloh','[[Special:Whatlinkshere/Plánování spouštění úloh | Odkaz na stránky které sem odkazují]]\n\nŘešení spouštění programů ne okamžitě, ale někdy v budoucnu. Unix-like systémy používají dva způsoby řešení: \n\n:* \'\'\'periodicky/opakovaně \"někdy později\"\'\'\' - pomocí démonu \"crond\". Popis spouštění příkazů je uložen ve struktuře (souboru) zvané [[crontab]]. Globální systémový soubor popisu tohoto opakovaného spouštění je /etc/crontab, uživatelé mohou mít svůj popis - ten je pak uložen v souboru /var/spool/cron/jméno_uživatele. Globální specifikaci může ovlivnit pouze [[root]] a může ji tvořit/modifikovat přímo textovým editorem, uživatelská je přístupná pomocí příkazu \"crontab\". Prvních pět polí řádky popisu jsou specifikace času, kdy se má daný příkaz vykonat. V globální specifikaci je jako šestý parametr jméno uživatele, pod kterým je daný program (sedmý parametr) spuštěn, v uživatelské specifikaci není - šestý parametr je specifikace programu a program je vždy spuštěn s UID uživatele.
Root může povolit/zakázat uživatele, kteří mohou používat spouštění úloh pomocí [[cron]] démonu, jejich vyjmenováním v souborech /etc/cron.allow a /etc/cron.deny. Zbytek řádky struktury crontab jsou parametry programu (tento zbytek je celý předán shell-u k vykonání, tzn. může to být zřetězení příkazů vč. přesměrování vstupů/výstupů). Implicitní shell je \"\'\'\'/bin/sh\'\'\'\", je možné specifikovat jiný shell deklarací proměnné \'\'\'SHELL\'\'\'. Speciální znak \"\'\'\'%\'\'\'\" bude démonem \'\'\'crond\'\'\' změněn na a vše za ním bude posláno na standardní vstup příkazu.
Blíže viz manuálové stránky \'\'\'cron\'\'\' a \'\'\'crontab\'\'\'. \n\n:* \'\'\'jednorázově \"někdy později\"\'\'\' - pomocí démonu \"atd\". Úlohy (je možno je zadat jak ze stdin tak ze vstupního souboru) se zařadí do časové fronty démona - pomocí příkazu [[at]] nebo [[batch]]; je možné je kdykoliv vypsat příkazem [[atq]] nebo je z časové fronty smazat příkazem [[atrm]]. Příkaz at má řadu voleb specifikace data a času spuštění úlohy.
\'\'\'! Pokud je specifikace data i času v daném dnu, musí být specifikace času první !\'\'\'\nRoot může povolit/zakázat uživatele, kteří mohou zařadit do fronty spouštění úloh pomocí \'\'\'at\'\'\' démonu, jejich vyjmenováním v souborech /etc/at.allow a /etc/at.deny.
Blíže viz manuálové stránky \'\'\'at\'\'\', \'\'\'batch\'\'\', \'\'\'atq\'\'\', \'\'\'atrm\'\'\' a \'\'\'atd\'\'\'.\n
\n\n# /etc/crontab - strucny popis a priklady:\n#\n# Format crontab (5 poli casu; u systemoveho je 6-te pole jmeno uzivatele, pod\n#  jehoz UID prikaz pobezi a zbytek radky je spousteny prikaz) :\n# 1 - minuty (0-59)\n# 2 - hodiny (0-23)\n# 3 - dny v mesici (1-31)\n# 4 - mesic (1-12)\n# 5 - den v tydnu (0-7; 0 a 7 =nedele)\n#\n# Hvezdicka \'*\' znamena \'prvni-posledni\', tj. splnuje vzdy\n# Rozsahy jsou ve tvaru \'cislo1-cislo2\'; 8-11 v poli hodin znamena\n#   vykonavani v 8,9,10,11 hodin\n# Seznamy jsou ve tvaru posloupnosti cisel, oddelenych carkami:\n#   napr. 1,3,6,15. Seznamy a rozsahy mohou byt soucasne, napr. \'0-4,18-23\'\n# Rozsah muze zahrnovat inkrement (\"krok\"), takze hodnota \'1-9/2\' je\n#   stejna jako  1,3,5,7,9\n#\n# Komentar je radka zacinajici \'#\' (ev. po prazdnem znaku); nesmi byt za\n#   prikazem cronu ani za nastavenim promenne environmentu.\n# cron automaticky nastavuje tyto promenne prostredi: SHELL=\"/bin/sh\",\n#   HOME a LOGNAME (podle /etc/passwd). Dale jsou na e-mail adresu v MAILTO\n#   (implicitne vlastnik crontab-u) poslany vystupy (stdout + stderr)\n#   spustenych prikazu. Posilani muze byt potlaceno nastavenim MAILTO=\"\".\n# cron prohlizi polozky crontab kazdou minutu. Prikaz je spusten, pokud minuta,\n#   hodina, mesic v roce a alespon jeden z obou poli dne (den v tydnu nebo den\n#   v mesici) souhlasi s aktualnim casem.\n#-------------------------------------------------------------------------------\n# Priklad globalniho (System-wide) crontab-u \"/etc/crontab\". Od uzivatelskeho\n# se lisi tim, ze prikazova cast zacina jmenem uzivatele, pod kterym se prikaz\n# spousti.  Take jej neni treba editovat pres prikaz `crontab\'\n\nSHELL=/bin/bash\nPATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin\nMAILTO=root\nHOME=/\n\n# script \"run-parts\" spousti ulohy ulozene v adresari danem jako parametr :\n01 * * * * root run-parts /etc/cron.hourly\n02 4 * * * root run-parts /etc/cron.daily\n22 4 * * 0 root run-parts /etc/cron.weekly\n42 4 1 * * root run-parts /etc/cron.monthly\n\n# Testovaci blbost spoustena kazdou minutu:\n* * * * *               root    echo \"Test mail pro roota\"\n\n# Delej neco kazdou lichou hodinu kazdy sudy den:\n* 1-23/2 */2 * *        root    /usr/local/sbin/delej_neco\n\n# Zalohovani dat 1 x tydne v noci z patku na sobotu (v 0:42) :\n42 0 * * 6              root    /usr/local/sbin/zal_data_tyden\n\n# Zalohovani dat 1 x mesicne prvniho v 0:42 :\n42 0 1 * *              root    /usr/local/sbin/zal_data_mesic\n\n# Stazeni aktualizace neceho v Po-Pá v 5:45 a zaslani vystupu petrovi a pavlovi:\nMAILTO=petr,pavel\n45 5 * * 1-5            root    /usr/local/sbin/myDB_update\n#a MAILTO znovu nastavim na puvodni hodnotu (jinak bych tohle musel dat nakonec)\nMAILTO=root\n\n#upozorneni na obed (11:58 priprava, 12:00 odchod):\n58 11 * * *             root    /usr/local/bin/obed_priprava\n0 12 * * *              root    /usr/local/bin/obed_odchod\n\n#jakas synchronizace casu systemu denne v 5:58, 11:58 a 17:58, vystup potlacen:\n58 5,11,17 * * *        root    /usr/local/sbin/nastav_date >/dev/null\n\n# Monitorovani teploty a ventilatoru kazdych 5 minut:\n*/5 * * * *             root    /usr/local/sbin/test_teplota\n\n# Monitorovani prostoru na disku od 6:11 do 19:51 Pondeli-Patek:\n11,31,51 6-19 * * 1-5   root    /usr/local/sbin/test_disk_full\n\n\n# Priklad vybirani posty skolnim serverem:\n#       leden-cerven, zari-prosinec:    Po - Pa v 6:30 a 11:00\n#                                       So, Ne v 18:00\n30 6  * 1-6,9-12 1-5    root    /usr/local/sbin/inet_mail\n0 11 * 1-6,9-12 1-5     root    /usr/local/sbin/inet_mail\n0 18 * 1-6,9-12 6,7     root    /usr/local/sbin/inet_mail\n#\n#               a cervenec, srpen:      Po, St, Pa v 6:20\n20 6 * 7,8 1,3,5        root    /usr/local/sbin/inet_mail
','',3,'Woodcraft','20041023083430','',0,0,0,1,0.575971175253,'20041023083430','79958976916569'); INSERT INTO cur VALUES (80,0,'Scripty','ncv','bncbn',0,'62.168.107.34','20041024113258','',0,0,0,1,0.556269915568,'20041024113258','79958975886741'); INSERT INTO cur VALUES (81,0,'Regulární_výrazy','Žolíkové znaky a regulární výrazy\nMotto:\nZeptejte se jakéhokoliv relativně zkušeného *NIX uživatele na 10 nejlepších věcí okolo operačního systému, a téměř vždy v jeho mumlání, někde mezi \"99% spolehlivostí\" a \"vzdáleným rebootováním systému\", uslyšíte výraz \"REGULÁRNÍ VÝRAZY\".\n\nZeptejte se jakéhokoliv relativně zkušeného *NIX uživatele na 10 nejprotivnějších věcí okolo operačního systému, a někde mezi \"zombie procesy\" a \"instalací\" uslyšíte výraz \"REGULÁRNÍ VÝRAZY\".\n\nP.Satrapa: Unix bez regulárních výrazů je jako sex bez partnera/partnerky. Dá se to používat, ale člověk o cosi zásadního přichází. \n\nRegulárni výrazy (regex) stručně : \nje to předpis pro porovnávání textových řetězců podle určitých vzorků\nsestávají z \"normálních\" znaků a z metaznaků - znaků majících v regex zvláštní význam - viz dále\npředdefinované pojmenované třídy znaků je možné použít vnitř hranatých závorek pro specifikaci množiny znaků\nrozlišují malá a velká písmena, jsou \"žravé\", mají paměť\npoužívají se mj. v textových editorech (vi,ed,..), scriptovacích programech (awk,perl,Tcl,..), prostředcích pro práci s textem (grep,sed,..)\nZnalost regulárních výrazů nám dává do rukou mimořádně silný nástroj pro práci s textem\n\n\nJejich prostřednictvím můžete: \nvytahovat z textových dat údaje, které vás zajímají\npřetvářet je do podoby, kterou potřebujete\nvyhledávat a nahrazovat v textových editorech a dalších programech\nMetaznaky\nMeta-\nznak Jméno\noperátoru splňuje Příklad regulárního výrazu \n.\ntečka libovolný jeden znak s výjimkou NUL. r.t budou splňovat řetězce rat, rut, r t, ale ne root (dvě o) ani Rot v Rotava (velké R). \n*\nhvězdička nula nebo více výskytů bezprostředně předcházejícího znaku. .* znamená jakýkoliv počet jakýchkoliv znaků. \n$\nukotvení znakem dolar konec řetězce/řádky děj$ bude splňovat konec řetězce \"Je to zloděj\" ale ne řetězec \"také dějiny ukázaly\" nebo \"mělo to pěkný děj.\" \nPokud je operátor $ poslední operátor reg. výrazu nebo je bezprostředně za pravou kulatou závorkou, musí mu předcházet zpětné lomítko. \n^\nukotvení znakem šipka hore (stříška) začátek řetězce/řádky. ^pokud se bude splňovat začátek řetězce \"pokud se to povede\" ale nebude splňovat \"nevím, pokud se mi\" . \n[ ] \n[c1-c2] \n[^c1-c2]\nhranaté závorky libovolný ze znaků mezi závorkami. r[aou]t splňuje rat, rot, a rut, ale ne ret. Rozsah znaků může být specifikován užitím pomlčky (mínus). Například regulární výraz [0-9] znamená splnění jakoukoliv číslicí. Může být specifikováno i více rozsahů. Regulární výraz [A-Za-z] znamená splnění jakýmkoliv malým nebo velkým ASCII písmenem. Ke splnění jakéhokoliv znaku s výjimkou těch v rozsahu (doplněk rozsahu)je nutno použít znak stříěka jako první znak po otevírací závorce. Např. výraz [^269A-Z] splňují libovolné znaky mimo 2, 6, 9, a velkých ASCII písmen. \nPozn.: Uvnitř hranatých závorek možno též použít předdefinované pojmenované třídy znaků [:alnum:], [:alpha:], [:cntrl:], [:digit:], [:graph:], [:lower:], [:print:], [:punct:], [:space:], [:upper:] a [:xdigit:] \n[^c1-c2]\nstříška uvnitř hranatých závorek doplněk rozsahu -- libovolný znak mimo těch vyjmenovaných v rozsahu který následuje stříšku jako první znak po otevírací závorce. [^269A-Z] budou splňovat jakékoliv znaky s výjimkou 2, 6, 9, a velkých ASCII písmen. \n\nPokud je operátor ^ první operátor regulárního výrazu nebo první znak uvnitř závorek, musí mu předcházet zpětné lomítko.\n\\\nzpětné lomítko Je to uvozovací znak, používá se k označení že následující znak se má brát jako obyčejný znak. Např. \\$ je užit ke shodě se znakem dolar ($) místo s koncem řádku. Podobně výraz \\. je užit ke shodě s tečkou místo s libovolným znakem. \n\nOperátorům uvnitř hranatých závorek nemusí předcházet zpětné lomítko. \n\\< \\>\nlevá a pravá úhlová závorka, menší a větší začátek (\\<) nebo konec (\\>) slova nebo slovo. \\ , [:upper:] = velké písmeno, [:xdigit:] = [0123456789abcdefABCDEF]. \nNapříklad [[:alnum:]] znamená [0-9A-Za-z] pokud máme locales nastavené na C a ASCII znakovou sadu, ale první množina znaků představuje číslice a písmena nezávisle na národním prostředí a znakové sadě - tzn. pokud máme nastavenou češtinu a znakovou sadu ISO-8859-2 ( např. LANG=cs_CZ.ISO-8859-2 ), pak do této množiny budou patřit i všechna písmena s diakritikou (např. znak s hodnotou 0xC1 == velké A s čárkou). \n\n- Vyřazení speciálního významu některých znaků: v Unixu bývá zvykem, že pokud speciálnímu znaku předřadíte zpětné lomítko, vypnete tak jeho speciální chování (a v některých případech právě naopak :).\n\n\nUvnitř hranatých závorek panuje specifické prostředí. Tečka zde představuje obyčejnou tečku a význam ostatních dvou speciálních znaků lze potlačit prostým pořadím. Stříška představuje negaci jen pokud je uvedena na samotném začátku a pomlčka slouží jako oddělovač intervalu jen pokud má z obou stran jeho meze. Takže například výrazu [.^az-]vyhoví pouze jeden ze znaků \".\", \"^\", \"-\", \"a\" nebo \"z\".\n\nPokud má být jedním z povolených znaků pravá hranatá závorka, uveďte ji hned za otevírací. Takže například regulárnímu výrazu [][] vyhoví levá nebo pravá hranatá závorka. Pokud byste znaky uvnitř vnějších hranatých závorek zapsali v opačném pořadí ( [[]]), význam by se radikálně změnil: byl by interpretován jako [[] bezprostředně následované ]. Čili vyhověl by mu jedině řetězec \"[]\".\nShrnutí\nvýraz vyhovuje \nznak odpovídající znak \n. libovolný znak \n[znaky] jeden z uvedených znaků \n[^znaky] libovolný znak kromě uvedených \n\\x vyřadí/zapne speciální význam znaku x \n\nOpakování regulárních výrazů: hvězdička ( *). Znamená, že regulární výraz bezprostředně před ní se může zopakovat, kolikrát to jenom jde.\nPříklad:\nVýrazu A* tedy vyhoví libovolný počet písmen \"A\", zatímco [0-9]* ztělesňuje libovolně dlouhou posloupnost číslic (opakovaným regulárním výrazem je zde [0-9], tedy libovolná číslice). \n\nV řadě programovacích jazyků je identifikátor definován jako libovolně dlouhá posloupnost písmen a číslic začínající písmenem. Pomocí regulárního výrazu bychom jej zapsali jako [a-zA-Z][a-zA-Z0-9]*. Zdůrazňuji, že opakování se týká jen regulárního výrazu, který je uveden bezprostředně před hvězdičkou. Uvedený výraz tedy znamená \"právě jeden výskyt [a-zA-Z] (písmeno), za nímž následuje libovolný počet výskytů [a-zA-Z0-9] (písmeno nebo číslice)\".\n\nSnad nejběžnějším opakovaným výrazem je tečka, která v kombinaci s hvězdičkou ( .*) znamená \"libovolný řetězec znaků\". V souvislosti s opakováním si dobře zapamatujte tři důležité skutečnosti:\ndo libovolného počtu opakování se počítá i nula\nopakování se týká regulárního výrazu, nikoli řetězce, který je s ním porovnáván\nopakování je hladové - snaží se \"pozřít\" co nejvíc znaků\n\nPřípustnost nulového počtu opakování znamená, že opakovanému regulárnímu výrazu vždy může vyhovět i prázdný řetězec. Praktickým důsledkem je, že jen vzácně dává smysl vyhledávat samotný opakovaný výraz. Zpravidla je třeba jej alespoň z jedné strany ohraničit něčím povinným.\nPříklad:\nChcete-li vyhledat v textu všechna čísla, nemá smysl hledat \"libovolně dlouhou posloupnost číslic\" ( [0-9]*), protože posloupnost číslic nulové délky obsahuje každý řádek (vyzkoušejte grep \'[0-9]*\' soubor na libovolný soubor - uvidíte, že \"najde\" všechny jeho řádky). Správně je třeba hledat \"alespoň jednu číslici\", tedy použít regulární výraz [0-9][0-9]*. \n\nSkutečnost, že opakování se týká regulárního výrazu, nikoli srovnávaného řetězce, je velmi důležitá. Zapíšete-li .*, spojujete dva prvky: symbol pro libovolný znak a symbol opakování. Výslednou konstrukci lze chápat dvěma způsoby. Buď jako libovolný počet libovolných znaků (opakování regulárního výrazu) nebo že v textu může být libovolný znak a ten se pak může opakovat, kolikrát chce (opakování ve zkoumaném řetězci). Správný je první výklad, jinak bychom se z toho nejspíš zbláznili.\n\nHladovost opakování se projevuje tím, že opakovaný regulární výraz se vždy snaží roztáhnout na co největší délku - zahrnout do sebe co největší počet znaků zkoumaného řetězce. Proto když například řetězec \"brambora\" srovnáte s regulárním výrazem r.*a (libovolný řetězec znaků začínající \"r\" a končící \"a\"), bude vyhovujícím řetězcem \"rambora\" (od prvního \"r\" až po poslední \"a\").\nRegulární výrazy versus vzorky, žolíkové znaky ve vzorcích\n\nPro specifikaci souborů (např. v shellech sh, bash aj., v programu find) se používají tzv. vzorky (patterns). V těchto vzorcích se používají jednak normální znaky, které odpovídají samy sobě, a jednak speciální znaky (nazývané žolíkové /wildcards/ znaky), které mají zvláštní význam: \n*\n Splňuje jakýkoliv řetězec včetně prázdného \n?\n Splňuje jakýkoliv jeden znak \n[...]\n Splňuje jakýkoliv ze znaků v závorkách uzavřených. Dva znaky oddělené pomlčkou definují rozsah - bude jej splňovat jakýkoliv znak mezi těmito znaky včetně, za použití aktuální národní znakové sady a třídících pravidel. Pokud je první znak následující [ znak ! nebo ^ , pak tuto konstrukci splňuje jakýkoliv znak kromě uzavřených (negace). \n\nZačátečníci někdy zaměňují regulární výrazy s žolíkovými znaky. Jistá podobnost tu skutečně je - oba prostředky umožňují vytvářet jakési vzory, které jsou porovnávány se skutečnými daty. Existují mezi nimi dva zásadní rozdíly. Žolíkové znaky se týkají názvů souborů a zpracovává je interpret příkazů (shell). Naproti tomu regulární výrazy se zaobírají obsahem (textových) souborů a jejich interpretaci mají na starosti jednotlivé programy (editory, grep a podobně).\n\nPřípadným omylům ještě nahrává podobnost některých speciálních znaků mezi oběma konstrukcemi. V tomto směru je záhodno především mít na paměti, že zatímco v žolíkových znacích * představuje libovolný řetězec, v regulárních výrazech se libovolný řetězec zapisuje pomocí .*.\nMechanika srovnávání\n\nPojmem srovnávání (matching) se označuje proces, kdy program hledá, zda předložený řetězec znaků odpovídá regulárnímu výrazu či nikoli. Zároveň se program snaží stanovit, které části řetězce odpovídají jednotlivým částem regulárního výrazu.\n\nDokud se zabýváte pouze hledáním, je pro vás v podstatě nezajímavé, kde přesně byl daný vzor nalezen. Ovšem když používáte regulární výrazy k nahrazování (a právě v tom je jejich největší síla), je tato informace velmi důležitá.\n\nZákladní princip srovnávání je následující: začne se od začátku řetězce. Každému prvku regulárního výrazu se snaží přiřadit vždy co nejdelší posloupnost znaků ze zkoumaného textu a teprve pak pokračuje srovnáváním dalších částí. Pokud to později nevyjde, vrátí se zpět a zkusí přidělený řetězec o jeden znak zkrátit. Jestliže již zkrátil na minimum vše, co zkrátit šlo, a přesto se nepodařilo najít shodu, posune se na další znak zkoumaného textu a vše se rozjede znovu.\nPříliš hladové opakování\n\nNa hladovost opakování je třeba si dávat pozor. Díky ní se snadno může stát, že opakující se výraz pohltí i ty znaky, se kterými jste nepočítali. Klasickým příkladem tohoto chování je regulární výraz pro řetězec znaků v uvozovkách.\n\nZačátečníci mají často tendenci uvažovat následovně: řetězec v uvozovkách, to jsou otevírací uvozovky, pak cokoli a na konci druhé uvozovky. To vyjádříme regulárním výrazem \".*\". Problém je, že díky hladovosti hvězdičky se tento regulární výraz roztáhne od prvních uvozovek ve zkoumaném řetězci až po poslední. \n\nŘešením je nepřipouštět v uzavřeném řetězci libovolné znaky, ale pouze znaky jiné než koncový. V našem případě cokoli kromě uvozovek, takže tím správným regulárním výrazem bude \"[^\"]*\":\n\nMimochodem - kdybyste na řetězec aplikovali výraz .*\".*\", roztáhne se první .* na \'Volali \"Ahój\" a \' a druhé .* na \'Nazdár\'. Jelikož jsou v regulárním výrazu povinné uvozovky, nemůže první .* schramstnout všechno. Ukousne si však co nejvíc, čímž druhé .* omezí na minimum.\n\n\nOmezený počet opakování\n\nZákladním problémem klasické opakovací hvězdičky je, že je nekontrolovatelná. Pro některé situace potřebujete přesnější vyjadřování.\n\nVaše touhy uspokojí konstrukce \\{min,max\\} . Opět se vztahuje na bezprostředně předcházející regulární výraz a říká, že se má opakovat alespoň min-krát, nanejvýš však max-krát. Jako každé opakování i tohle je hladové, takže se snaží uplatnit vždy co největší z povoleného počtu opakování.\nPříklad:\nRegulárnímu výrazu i\\{1,3\\} vyhoví řetězce \"i\", \"ii\" nebo \"iii\". \n\nTvar tohoto opakovátka je velmi variabilní. Pokud chybí horní mez ( \\{min,\\}), znamená to, že maximální počet opakování je neomezený. Jestliže v konstrukci použijete jen samotné číslo ( \\{počet\\}), musí se regulární výraz opakovat přesně daný počet-krát.\nPříklad:\nRegulární výraz pro rodné číslo by vypadal takto: \n[0-9]\\{6\\}/[0-9]\\{3,4\\}\nŠest číslic, lomítko a ještě tři nebo čtyři číslice. \n\nA již tu máme první odlišnost. V některých verzích regulárních výrazů (například v Perlu) se při omezování počtu opakování před složenými závorkami nepíší zpětná lomítka. Zapíšete-li zde \\{ , znamená to, že zkoumaný text má obsahovat znak \"{\". Perl má pro tuto specialitu dobrou omluvu: zavedl pravidlo, že kombinace zpětného lomítka a znaku odlišného od písmena či číslice nikdy nemá speciální význam a vždy představuje dotyčný znak.\nNejpopulárnější opakovačky\n\nDva velmi populární případy opakování si vysloužily svůj vlastní speciální znak. Prvním je \"alespoň jeden výskyt\" - tedy cosi velmi podobného klasické opakovací hvězdičce, až na to, že opakovaný regulární výraz nelze vynechat. Stejného efektu dosáhnete konstrukcí \\{1,\\}, ale to je příliš složité psaní. Proto se alespoň jeden výskyt předchozího regulárního výrazu zapisuje znakem plus ( + ).\n\nDruhou populární situací je nepovinný (čili nanejvýš jeden) výskyt. Opět jej lze zapsat pomocí \\{0,1\\} , ale kratší je otazník (? ).\n\nDialekty regulárních výrazů se u této dvojice znaků opět silně rozcházejí. Programy používající klasické regulární výrazy (grep, sed, vi) jim předřazují zpětné lomítko (\\+ a \\?). Generace, která implementuje rozšířené regulární výrazy, (egrep, awk, Perl) je píše bez něj ( + a ?).\nPříklad:\nAlespoň jedna číslice se tedy v grep, sed a vi vyjádří pomocí [0-9]\\+, zatímco egrep, awk či Perl nabízí kratší [0-9]+. Zápis můžeme lehce rozšířit na regulární výraz pro celé číslo: nepovinné znaménko následované alespoň jednou číslici. V klasických regulárních výrazech to bude [-+]\\?[0-9]\\+ , zatímco v rozšířených [-+]?[0-9]+. \nPozice\n\nVýrok \"dejte mi pevný bod a pohnu zeměkoulí\" jistě znáte. Nahlíženo jeho optikou byly všechny naše dosavadní regulární výrazy poněkud neukotvené. Řetězec, který jim vyhovuje, se mohl vyskytovat kdekoli ve zkoumaném textu. Občas však člověk musí být přísnější.\n\nProto regulární výrazy nabízejí několik speciálních pozičních znaků. Těmi nejznámějšími jsou stříška ( ^), která ztělesňuje začátek řádku (resp. zkoumaného řetězce znaků), a dolar ( $) označující jeho konec.\nPříklad:\ngrep \'^#\' vám tedy najde řádky začínající znakem \'#\', grep \'[0-9]$\' řádky končící číslicí a konečně grep \'^-\\+$\' řádky složené pouze z pomlček (nikoli však prázdné). \n\nDalším významným místem je hranice slova. Ve většině regulárních dialektů máte k dispozici konstrukci \\< , která označuje začátek slova, a \\>, které vyhoví pouze jeho konec.\nPříklad:\nZajímají-li vás všechny řádky, na nichž se písmeno \'a\' vyskytuje v roli jednopísmenné spojky, nasaďte \ngrep \'\\\'\nShrnutí\nvýraz znamená \n* libovolný počet opakování předchůdce \n+ nebo \\+ alespoň jeden výskyt předchůdce \n? nebo \\? nanejvýš jeden výskyt předchůdce \n{min,max} nebo \\{min,max\\} alespoň min a nanejvýš max výskytů předchůdce \n^ začátek řádku \n$ konec řádku \n\\< nebo \\b začátek slova \n\\> nebo \\b konec slova \n\n\nV této části ukážeme snad nejsilnější prvek regulárních výrazů - jejich paměť. Regulární výraz si totiž dokáže zapamatovat řetězec, který vyhověl jeho části, a později jej použít. Největší služby tento mechanismus odvede při nahrazování. \nZapamatuj a vzpomeň si\n\nProstředky pro zapamatování jsou směšně jednoduché. Část, kterou si má regulární výraz podržet v paměti, prostě ohraničíte konstrukcemi \\( a \\). Takových úseků můžete v regulárním výrazu mít hned několik. Dokonce je lze i vzájemně vnořovat.\n\nKdyž později chcete použít zapamatovaný řetězec, napište \\číslo , kde číslo je pořadové číslo zapamatovaného úseku. Pořadová čísla začínají jedničkou a rozhoduje o nich pořadí levé (otevírací) závorky zapamatovávané sekvence.\nPříklad:\nPodrobíte-li řádek ze souboru /etc/passwd regulárnímu výrazu ^\\([^:]*\\):[^:]*:\\([^:]*\\) , bude \\1 obsahovat přihlašovací jméno a \\2 jemu odpovídající identifikátor (UID). \n\nO dobrodiní paměti jste ochuzeni u programů egrep a awk (U awk vzorků, ve řetězcových funkcích gensub, gsub, sub je paměť podporována). Jejich algoritmus pro srovnávání regulárních výrazů nepodporuje zapamatování (a z principiálních důvodů ani podporovat nemůže).\nPoužití při hledání\n\nPoužití zapamatovaných částí při vyhledávání je poměrně vzácné. Řečeno mluvou politiků: společenská potřeba takové služby je celkem malá. Příklady sice existují, nicméně bývají takové školometské. Tak si nějaké zkusíme.\nPříklad:\nHezkou a zcela neužitečnou ilustrací zapamatování je hledání palindromů (slov, která se nezmění, když je čtete pozadu). Tak například výrazu \n\\<\\(.\\)\\(.\\).\\2\\1\\>\nvyhoví právě a pouze pětiznakový palindrom (např. radar či rotor). První dva znaky slova si zapamatuje, za nimi následuje třetí libovolný znak, čtvrtý musí být stejný jako zapamatovaný druhý a pátý znak se musí shodovat s prvním. \nPříklad:\nZkusím něco, co by alespoň vzdáleně připomínalo reálný život. Řekněme, že máte výstupy z jakéhosi algoritmu - na každém řádku sadu čísel oddělených mezerami. Každý řádek zároveň končí správným výsledkem. Pokud algoritmus pracuje správně, poslední dvě čísla na řádku jsou totožná. Hledáme tedy řádky, ve kterých se poslední číslo liší od předposledního. K řešení poslouží grep s negovanou podmínkou (volba -v): \ngrep -v \' \\([^ ]\\+\\) \\+\\1$\'\nVzor začíná mezerou před předposledním číslem. Za ní následuje neprázdná posloupnost nemezerových znaků ([^ ]\\+ ), která se zapamatuje. Po ní následuje alespoň jedna mezera ( \\+) a znovu stejná posloupnost, za kterou už je jen konec řádku. \nPoužití při nahrazování\n\nDaleko častěji se zapamatované řetězce vyskytují v příkazech pro nahrazování. Díky nim si můžete ze vstupních dat vytáhnout informace, které vás zajímají, a poskládat si je do tvaru, který potřebujete.\nPříklad:\nBěžný problém všedního dne: potřebujete u skupiny souborů změnit příponu z .htm na .html. Pro podobné účely sice existují různá udělátka, ale je třeba si je doinstalovávat a práce s nimi nebývá úplně snadná. takže se podívejme, jak poslouží standardní nástroje, které najdete v každém Unixu. \n\nPostup je jednoduchý: obstaráte si seznam jmen souborů, každé jméno pak změníte na příkaz mv staré nové a tyto příkazy provedete. Popsaný postup lze realizovat třeba takto: \nls *.htm > seznam\nsed \'s/\\(.*\\)/mv \\1 \\1l/\' seznam > akce\nchmod a+x akce\n./akce\nrm seznam akce\nUznávám, že prosté připojení \"l\" na konec jména souboru je dosti snadnou modifikací. Složitější věci však znamenají jen úpravu příkazu s . Například změnu přípony z .doc na .txt by zajistilo s/\\(.*\\)\\.doc/mv \\1.doc \\1.txt/ - zapamatuje si jen vlastní jméno souboru a přípony jsou explicitně vyjmenovány. \nPříklad:\nA teď něco drsnějšího. Chtěl bych ze souboru /etc/passwd vyrobit seznam domácích stránek uživatelů. Takže potřebuji řádky transformovat z původní podoby \nuživatel:heslo:UID:GID: vlastní jméno :... \nna \n vlastní jméno \nKýženým substitučním příkazem, který to zařídí, je \ns/\\([^:]*\\):\\([^:]*:\\)\\{3\\}\\([^:]*\\).*/\\3<\\/A>/\nJak vidíte, prostřednictvím závorek lze předepsat počet opakování i rozsáhlejšímu úseku regulárního výrazu - zde se třikrát opakuje skupina [^:]*:. V takovýchto situacích závorky většinou neslouží k zapamatování (i když si pochopitelně něco zapamatují), ale čistě k vymezení opakované části. Ta má - bez ohledu na skutečný počet opakování - jen jediné pořadové číslo. Proto se závěrečné zapamatované jméno uloží jako \\3. \nShrnutí\nvýraz význam \n\\(výraz\\) zapamatuje si text vyhovující výrazu \n\\1 první zapamatovaný řetězec \n\nOd minula si umíte nalezené věci zapamatovat a později použít. To je v reálném životě šeredně nebezpečná vlastnost. Například jste teď nepoužitelní jako voliči. Abyste se opět stali politicky korektními, naučím vás pozměnit, co jste si zapamatovali.\n\nKlasické a rozšířené regulární výrazy\n\nProgramy grep a egrep rozštěpily regulární svět na dva proudy. Každý z nich používal poněkud jinou variantu regulárních výrazů a také jiný algoritmus pro jejich hledání. Regulární výrazy grepu představují klasickou variantu, zatímco odrůdě reprezentované egrepem se říká rozšířené regulární výrazy.\n\nZákladní rozdíly rozšířených regulárních výrazů proti klasickým byly následující: zavedly speciální znaky + a ? pro alespoň jeden a nanejvýš jeden výskyt, znak | pro \"nebo\" a nepodporovaly mechanismus zapamatování.\n\nPostupem času se však původní rozdíly smazávaly a obě odrůdy implementovaly konstrukce, které byly původně k dispozici jen u konkurence. Takže mezi současným GNU grepem a GNU egrepem je rozdíl pouze v tom, kde se píší zpětná lomítka.\n\nV předminulém odstavci jste možná zastříhali ušima, protože jsem se zmínil o dosud utajené konstrukci. Jedná se o \"nebo\", které se zapisuje v podobě svislé čáry (|). U klasických regulárních výrazů se před ni zapisuje zpětné lomítko (pokud je vůbec k dispozici).\n\n\"Nebo\" má nižší prioritu než zřetězení, takže například egrep \'raz|dva\' najde řádky obsahující řetězec \"raz\" nebo \"dva\". Pokud potřebujete účinek omezit, použijte závorky.\nPříklad:\nNásledující příkaz vyhledá řádky, které začínají řetězcem \"From:\" nebo \"Subject:\" (může se hodit například pro prohledávání vaší poštovní schránky): \negrep \'^(From|Subject):\'\nV podání grepu by příkaz vypadal takto: \ngrep \'^\\(From\\|Subject\\):\'\n\n\n\n\nPoslední aktualizace: 17.3.2004 Fr. Hanzlík','',0,'195.113.188.3','20041025054649','',0,0,0,1,0.656134049714,'20041025054649','79958974945350'); INSERT INTO cur VALUES (82,0,'Coreutils','[[Special:Whatlinkshere/coreutils | Odkaz na stránky které sem odkazují]]\n\n= Programy pro práci se soubory =\n\n{| border=\"1\"\n| /bin/[[cp]] || kopíruje soubory\n|-\n| /bin/[[dd]] || konvertuje soubor při kopírování\n|-\n| /bin/[[df]] || vypisuje celkové volné místo na disku\n|-\n| /usr/bin/[[dircolors]] || vypíše příkaz, kterým lze nastavit proměnnou prostředí LS_COLOR\n|-\n| /usr/bin/[[dir]] || vypíše obsah adresářů\n|-\n| /usr/bin/[[du]] || vypisuje využití diskového prostoru\n|-\n| /bin/[[chgrp]] || změní vyjmenovaným souborům skupinu vlastníků\n|-\n| /bin/[[chmod]] || změní přístupová práva k souborům\n|-\n| /bin/[[chown]] || změní vyjmenovaným souborům vlastníka, případně i skupinu\n|-\n| /usr/bin/[[install]] || kopíruje soubory a nastavuje jejich atributy\n|-\n| /bin/[[ln]] || vytvoří odkazy na soubory\n|-\n| /bin/[[link]] || vytvoří \"tvrdý\" odkaz na soubor \n|-\n| /bin/[[unlink]] || ruší odkazy na soubor\n|-\n| /usr/bin/[[readlink]] || vypíše na display kam míří symbolický link\n|-\n| /bin/[[ls]] || vypíše obsah adresářů\n|-\n| /bin/[[mkdir]] || vytváří adresáře\n|-\n| /usr/bin/[[mkfifo]] || vytváří pojmenované roury FIFO\n|-\n| /bin/[[mknod]] || vytváří speciální soubory\n|-\n| /bin/[[mv]] || přejmenovává a přesouvá soubory\n|-\n| /bin/[[rmdir]] || ruší prázdné adresáře\n|-\n| /bin/[[rm]] || ruší soubory\n|-\n| /usr/bin/[[shred]] || bezpečné mazání souboru(ů) (nejdříve přepíše jejich obsah)\n|-\n| /bin/[[sync]] || vyprázdní buffery I/O cache filesystému\n|-\n| /bin/[[touch]] || změní časové údaje souborů\n|-\n| /usr/bin/[[vdir]] || vypíše obsah adresářů\n|}\n\n\n= Programy používané v shell scriptech =\nkteré dříve tvořily samostatný balíček \"\'\'\'shell-utils\'\'\'\" jsou sadou užitečných nástrojů, které se často používají v shellových skriptech\n\n\n\n{| border=\"1\"\n| /bin/[[basename]] || pro odstranění adresářů se zadané cesty k souboru\n|-\n| /bin/[[date]] || výpis a nastavování systémového datumu a času\n|-\n| /bin/[[echo]] || výstup textu\n|-\n| /bin/[[false]] || vrací neúspěšnou návratovou hodnotu\n|-\n| /bin/[[id]] || zobrazení aktuálního reálného a efektivního UID/GID\n|-\n| /usr/bin/[[hostid]] || vypíše hexadecimální hodnotu numerického identifikátoru počítače\n|-\n| /usr/bin/[[kill]] || příkaz k ukončení běžícího procesu\n|-\n| /bin/[[nice]] || změna priority přidělování/plánování procesoru\n|-\n| /bin/[[pwd]] || vypíše aktuální adresář\n|-\n| /bin/[[sleep]] || čeká zadaný časový interval\n|-\n| /bin/[[stat]] || zobrazí aktuální stav souboru, nebo souborového systému\n|-\n| /bin/[[stty]] || výpis nebo změna nastavení terminálu\n|-\n| /bin/[[su]] || spuštění subshellu s jiným UID/GID nebo změna na superuživatele\n|-\n| /bin/[[true]] || vrací úspěšnou návratovou hodnotu\n|-\n| /bin/[[uname]] || tisk systémových informací\n|-\n| /usr/bin/[[dirname]] || odstranění poslední položky nebo jména souboru ze zadané cesty\n|-\n| /bin/[[env]] || zobrazení nebo modifikace proměnných prostředí\n|-\n| /usr/bin/[[expr]] || provedení výrazu\n|-\n| /usr/bin/[[factor]] || rozklad celého čísla na prvočinitele\n|-\n| /usr/bin/[[groups]] || výpis skupin, kterých je zadaný uživatel členem\n|-\n| /usr/bin/[[logname]] || zobrazení aktuálního jména přihlášeného uživatele\n|-\n| /usr/bin/[[nohup]] || spuštění příkazu tak, aby mohl pokračovat i po odhlášení uživatele\n|-\n| /usr/bin/[[pathchk]] || kontrola, zda jména zadané cesty a souborů jsou přenositelná\n|-\n| /usr/bin/[[printenv]] || tisk proměnných prostředí\n|-\n| /usr/bin/[[printf]] || formátování výstupních dat\n|-\n| /usr/bin/[[seq]] || tisk zadané numerické sekvence\n|-\n| /usr/bin/[[tee]] || kopírování vstupu na výstup a zároveň do jednoho či více souborů\n|-\n| /usr/bin/[[test]] || testování výrazu\n|-\n| /usr/bin/[[tty]] || tisk jména terminálu\n|-\n| /usr/bin/pinky || výpis přihlášených uživatelů\n|-\n| /usr/bin/[[users]] || výpis přihlášených uživatelů\n|-\n| /usr/bin/[[who]] || výpis přihlášených uživatelů\n|-\n| /usr/bin/[[whoami]] || výpis uživatelského jména asociovaného s aktuálním efektivním ID\n|-\n| /usr/bin/[[yes]] || nekonečný výstup zadaného řetězce - standardně \"y\"\n|-\n| /usr/sbin/[[chroot]] || změna kořenového adresáře\n|}\n\n\n= Programy pro práci s textem =\nDříve samostatný balíček \"\'\'\'textutils\'\'\'\"\n\n{| border=\"1\"\n| Výstup celých souborů || /bin/[[cat]]
/usr/bin/[[tac]]
/usr/bin/[[nl]]
/usr/bin/[[od]]
\n|-\n| Formátování obsahu souborů || /usr/bin/[[fmt]]
/usr/bin/[[pr]]
/usr/bin/[[fold]]
\n|-\n| Výstup částí souborů || /usr/bin/[[head]]
/usr/bin/[[tail]]
/usr/bin/[[split]]
/usr/bin/[[csplit]]
\n|-\n| Sumarizace souborů || /usr/bin/[[wc]]
/usr/bin/[[sum]]
/usr/bin/[[cksum]]
/usr/bin/[[sha1sum]]
/usr/bin/[[md5sum]]
\n|-\n| Operace na tříděných souborech || /usr/bin/[[uniq]]
/bin/[[sort]]
/usr/bin/[[ptx]]
/usr/bin/[[comm]]
/usr/bin/[[tsort]]
\n|-\n| Operace na polích řádky || /bin/[[cut]]
/usr/bin/[[paste]]
/usr/bin/[[join]]
\n|-\n| Operace na znacích || /usr/bin/[[tr]]
/usr/bin/[[expand]]
/usr/bin/[[unexpand]]
\n|}','',0,'195.113.188.3','20041025145054','',0,0,0,0,0.768299107332,'20041025145054','79958974854945'); INSERT INTO cur VALUES (83,0,'Bash','* \'\'\'B\'\'\'ourne-\'\'\'A\'\'\'gain \'\'\'SH\'\'\'ell, široce používaný příkazový interpreter (shell) na Unix systémech, implicitní shell v Linuxu\n* zdola kompatibilní se shellem sh, vyhovuje IEEE POSIX, užitečné vlastnosti z C shellu a Korn shellu\n* rozhraní mezi uživatelem a systémem – čte příkazy z klávesnice, interpretuje je a provádí\n* \'\'\'interaktivní\'\'\' (\'\'\'stdin/stdout\'\'\' napojen na terminál) x \'\'\'neinteraktivní\'\'\' (příkazy čteny ze souboru)\n* posloupnost příkazů čtená ze souboru je program – skript; => bash jako interpret příkazového jazyka.\n* editace příkazového řádku, historie příkazů, řízení běhu úloh\n* prostředí (environment) – oblast paměti programu(Linux:32kB) pro pole řetězců tvaru jméno=hodnota\n* Chování upravitelné pomocí startovacích souborů a proměnných prostředí:\n:: Přihlašovací shell: /etc/profile, ~/.bash_profile, ~/.bash_login, a ~/.profile\n:: Interaktivní shell: ~/.bashrc\n* na příkazové řádce používáme: přiřazení proměnných prostředí, řídící příkazy, interní příkazy, externí příkazy\n\n\n= Základní pojmy =\n\n; \'\'\'blank\'\'\' : mezera nebo tabelátor\n; \'\'\'bílé místo\'\'\' : posloupnost mezer a/nebo tabelátorů\n; \'\'\'slovo\'\'\' : posloupnost znaků považovaná shellem jako jednotka. Také známé jako známka (znamení, pešek, token)\n; \'\'\'jméno\'\'\' : slovo skládající se pouze z alfanumerických znaků a podtržítek, začínající písmenem nebo podtržítkem. Také nazývané jako identifikáto\n; \'\'\'metaznak\'\'\' : znak oddělující slova - jeden z následujících: \'\'\'| & ; ( ) < > mezera tabelátor\'\'\'\n; \'\'\'řídící operátor\'\'\' : slovo, které má určitou řídící funkci - je to jedno z následujích: \'\'\'|| & && ; ;; ( ) | \'\'\'\n; \'\'\'vyhrazená (rezervovaná) slova\'\'\' : slova která mají v shellu zvláštní význam. Následující slova jsou rozeznávána jako reservovaná (když nejsou v uvozovkách) a jsou první slovo jednoduchého příkazu (viz syntaxe shellu níže) nebo třetí slovo příkazu \'\'\'case\'\'\' nebo \'\'\'if\'\'\' : \'\'\'\n! case do done elif else esac fi for function if in select then until while { } time [[ ]]\'\'\'\n\n= Syntaxe shell-u =\n\n== Proměnné (variables) a jejich expanze ==\n\'\'\'Deklarace proměné\'\'\' - se provádí automaticky při prvním přiřazení hodnoty proměnné:\n\n\'\'\' Příklad :\'\'\'\n
\njmeno=hodnota\n
\n\n\'\'\'Pozn.:\'\'\' Bývá zvykem psát proměnné velkými písmeny. \'\'\'Na velikosti písmen, na rozdíl od jiných progr. jazyků záleží!\'\'\' Pokud má proměnná obsahovat speciální znaky, pak musí být buď hodnota proměnné uzávorkována, nebo musí být význam speciálních znaků neutralizován pomocí tzv. \"\'\'escape sekvence\'\'\" tj. musí být před něj vložen znak \'\'\'\\\'\'\'\n\n== Pole ==\n\nBash pracuje pouze s jednorozměrnými poli, vícerozměrná pole však lze simulovat vložením proměnné do položky pole, je však přitom třeba brát v úvahu vliv expanze proměnných a speciálních znaků, mezer a tabulátorů\n\nJednotlivé položky lze do pole přiřazovat buď přímo podle tzv. \"\'\'\'indexu\'\'\'\" nebo najednou pomocí kulaté závorky\n\n\'\'\' Příklad :\'\'\'\n
\n$ pole[1]=\"první položka\"\n$ pole[2]=\"druhá položka\"\n$ pole[3]=\"třetí položka\"\n$ echo ${pole}                # vypíše pouze první (nultou) položku pole\n\n$ echo ${pole[*]}             # vypíše všchny položky pole\nprvní položka druhá položka třetí položka\n$ pole=( \"čtvrtá položka\" \'$jmeno\' \"$jmeno\" ) # přenastaví pole na nové hodnoty\n$ echo ${pole[*]}\nčtvrtá položka $jmeno hodnota # třetí položky je proměnná, viz následující odstavec\n
\n\n== Uvozovky ==\n\' - \'\'\'jednoduché uvozovky\'\'\'\n\nJe-li řetězec při přiřazování do proměnné uzavřen do jednoduchých uvozovek, jsou speciální znaky interpretovány jako normální text, tzn. proměnné (řetězce začínající znakem \'\'\'$\'\'\') nejsou expandovány (tj. nahrazovány svým obsahem).\n\n\" - \'\'\'dvojité uvozovky\'\'\'\n\nNa rozdíl od jednoduchých uvozovek, neztrácí speciální znaky svůj význam, tedy proměnné (řetězce začínající znakem \"\'\'\'$\'\'\'\") jsou nahrazovány svým obsahem.\n\n\'\'\'Příklad :\'\'\'\n\n
\n$ jmeno=obsah proměnné                      # Do proměnné jmeno se přiřadí pouze řetězec obsah\nbash: proměnné: command not found\n$ jmeno=\"obsah proměnné\"                    # Do proměnné se přiřadí vše co je mezi uvozovkami\n$ echo zobrazí se následující text $jmeno   # Proměnná $jmeno je expandována\nzobrazí se následující text obsah proměnné\n$ echo \"zobrazí se následující text $jmeno\" # Proměnná $jmeno je expandována\nzobrazí se následující text obsah proměnné\n$ echo \'zobrazí se následující text $jmeno\' # $jmeno není interpretováno jako proměnná\nzobrazí se následující text $jmeno\n
\n\n== Závorky ==\n\n() - \'\'\'kulaté závorky\'\'\'\n\nObsah v kulatých závorkách je expandován jako jednotlivé položky pole\n\nPokud však je před první kulatou závorkou uveden znak \"\'\'\'$\'\'\'\" nejde o přiřazení jednotlivých položek pole, ale je spuštěn podproces shell-u (podobně jako když je výraz uzavřen mezi apostrofy (znak \'\'\'`\'\'\')\n\n\'\'\'Příklad :\'\'\'\n
\n$ pole=(echo \"obsah proměnné\")   # Před závorkou chybí \"$\" - jde o přiřazení položek do pole\n$ echo $pole                     # příkaz vrátí první položku pole\necho\n$ echo ${jmeno[@]}               # příkaz vrátí vypsané všechny položky pole\necho obsah proměnné\n$ echo ${pole[0]}                # příkaz vrátí první položku pole\necho\n$ echo ${pole[1]}                # příkaz druhou položku pole\nobsah\n$ echo ${pole[2]}                # příkaz vrátí třetí položku pole\nproměnné\n$ pole=$(echo \"obsah proměnné\")  # Před závorkou je znak \"$\" tudíž jde o podproces\n$ echo $pole                     # příkaz vrátí první položku pole\nobsah proměnné\n$ echo ${pole[@]}                # příkaz vrátí všechny položky pole\nobsah proměnné\n$ echo ${pole[1]}                # pole není polem, ale proměnnou\n\n$ pole=`echo \"obsah proměnné\"`   # Použijeme-li apostrofů,\nobsah proměnné\n$ echo ${pole[1]}                # ..je výsledek stejný\n\n
\n\n(()) - \'\'\'zdvojené kulaté závorky\'\'\'\n\nSe používají při výpočetních operacích, jako náhrada příkazu \'\'\'let\'\'\'\n\n\'\'\'Příklad :\'\'\'\n\n
\n$let a=a+5    # Proměnná a neexistuje, proto jí je přiřazena hodnota 5\n$ echo $a\n5\n$ let a=a+5   # ..teď už existuje tak k její původní hodnotě přičteme 5\n$ echo $a\n10\n$ a=$((a+5))  # ..a dalších 5, tentokrát už bez příkazu let\n$ echo $a\n15\n
\n\n\n{} - \'\'\'složené závorky\'\'\'\n\nPoužívají se pro vymezení bloku kódu u funkcí, při práci s poli a u substitucí.\n\nChybí-li před levou složenou závorkou znak \"$\" pak se snaží shell interpretovat tento blok kódu jako funkci\n\n\'\'\'Příklady substituce :\'\'\'\n\nVýpis parametru je-li parametr prázdný nevypíše nic, pokud ano, vrátí prázdnou hodnotu\n\n
\n$ echo ${parameter}\n
\n\nJe-li parametr je prázdný, ale deklarován použije se hodnota \"default\"\n\n
\n$ echo ${parameter-default}\n
\n\nJe-li parametr byl prázdný, pak je mu přiřazena hodnota default\n
\n$ echo ${parameter=default}\n
\n\nBYl-li parametr přenastaven, použije se jeho předchozí hodnota\n
\n$ echo ${parameter+předchozí_hodnota}\n
\n\n
\n${parameter?default}\n
\n\n
\n${promenna#vzorek}\n
\n\n
\n${promenna##vzorek}\n
\n\n
\n${promenna%vzorek}\n
\n\n
\n${promenna%%vzorek}\n
\n\n
\n${#promenna}\n
\n\n
\n${promenna:pozice}\n
\n\n
\n${promenna:pozice:delka}\n
\n\n
\n${promenna/pozice/nahrada}\n
\n\n
\n${promenna//pozice/nahrada}\n
\n\n
\n${promenna/#pozice/nahrada}\n
\n\n
\n${promenna/%pozice/nahrada}\n
\n\n
\n${!varprefix*}\n
\n\n
\n${!varprefix@}\n
\n\n\'\'\'Příklady práce s polem:\'\'\'\n\n
\n$ poleZ=( jedna dvě tři čtyři pět šest švestek )\n$ echo ${poleZ[@]:0}\njedna dvě tři čtyři pět šest švestek\n$ echo ${poleZ[@]:1}\ndvě tři čtyři pět šest švestek\n$ echo ${poleZ[@]:1:2}\ndvě tři\n$ echo ${poleZ[@]#t*i}\njedna dvě čtyři pět šest švestek\n$ echo ${poleZ[@]##š*t}\njedna dvě tři čtyři pět ek\n$ echo ${poleZ[@]%t*i}\njedna dvě č pět šest švestek\n$ echo ${poleZ[@]%%t*i}\njedna dvě č pět šest švestek\n$ echo ${poleZ[@]%%č*i}\njedna dvě tři pět šest švestek\n
\n\n\n[] - \'\'\'hranaté závorky\'\'\'\n\nJsou synonymem příkazu [[test]]\n\n[[]] - \'\'\'zdvojené hranaté závorky\'\'\'\n\nMohou být použity v podstatě jako jednoduché lomené závorky\n\n\'\'\'Pozn.:\'\'\' Tzv. \"lomené závorky\" bash nepoužívá, tyto znaky mají jiný speciální význam, viz níže\n\n\n== Další znaky ==\n\n= - \'\'\'rovnítko\'\'\'\n\n\n# - \'\'\'křížek\'\'\' (\"hash\")\n\nJak můžete vidět v předchozím příkladu, text kterému předchází znak \'\'\'#\'\'\' bash při interpretaci skriptu ignoruje\n\nNeplatí to však, v následujících případech:\n:* je-li znak \'\'\'#\'\'\' uzavřen v uvozovkách\n:* je-li znak \'\'\'#\'\'\' \"escapován\" (tj. předchází-li mu speciální znak \'\'\'\\\'\'\')\n:* je-li znak \'\'\'#\'\'\' součástí substituce (nahrazování řetězců) proměnné\n::: je-li znak \'\'\'#\'\'\' uveden \'\'\'před\'\'\' proměnnou, vrací počet znaků v proměnné\n::: je-li znak \'\'\'#\'\'\' uveden \'\'\'za\'\'\' proměnnou, ořezává počátek proměnné o řetězec který jej následuje\n:* je-li znak \'\'\'#\'\'\' součástí aritmetické úlohy\n\n\n\'\'\'Příklad :\'\'\'\n\n
\n$ echo \'Tady začíná # komentář\'\nTady začíná # komentář\n$ echo \"Tady začíná # komentář\"\n$ echo Tady začíná # komentář\nTady začíná # komentář\n$ echo Tady začíná # komentář\nTady začíná\n$ echo Tady začíná \\# komentář\nTady začíná # komentář\n\n$ echo $jmeno\nobsah proměnné\n$ echo ${jmeno}\nobsah proměnné\n$ echo ${#jmeno}\n14\n$ echo ${jmeno#o}   # Při substituci řetězců křížek ořezává od počátku\nbsah proměnné\n\n$ echo $(( 2#101011 )) # \n42\n
\n\n% - \'\'\'procenta\'\'\' (tzv. \"modulo\")\n\nOperátor při výpočetních operacích.\nSubstituce proměnných - ořezávají vzorek na konci řetězce\n\n\'\'\'Příklad :\'\'\'\n\n
\n$ echo ${jmeno%né}   # Při substituci řetězců procenta ořezávají od konce\nobsah proměn\n
\n\n\n* - \'\'\'hvězdička\'\'\'\n\nPři výpočetních operacích operátor pro \'\'\'násobení\'\'\'\n\nPři substitucích proměnných v regulárních výrazech, zastupuje \'\'\'libovolný počet výskytů\'\'\'\n\n. - \'\'\'tečka\'\'\'\n\nPři substitucích proměnných v regulárních výrazech, zastupuje \'\'\'libovolný jeden znak\'\'\'\n\n? - \'\'\'otazník\'\'\'\n\nPři výpočetních operacích se používá jako tzv. \"\'\'trinární operátor\'\'\" pro vyjádření podmínky\n\nPři substituci proměnných se používá znak \'\'\'?\'\'\' pro vyjádření vztahu: \'\'\'\'\'Nemá-li proměnná žádný obsah pak vyhoď hlášku\'\'\'\'\'\n\n
\n$ echo ${jmeno?tohle je chybová hláška} # Proměnná jmeno má stále obsah\nobsah proměnné\n$ jmeno=                                # Proměnná jmeno je vyprázdněna...\n$ echo ${jmeno?tohle je chybová hláška} # ...ale stále existuje...\n\n$ echo ${jmeno:?tohle je chybová hláška} # ...ovšem prázdná.\nbash: jmeno: tohle je chybová hláška\n$ unset jmeno                           # Proměnná jmeno je zrušena\n$ echo ${jmeno?tohle je chybová hláška} # Proměnná neexistuje, proto je vypsána chybová hláška\nbash: jmeno: tohle je chybová hláška\n
\n\n\'\'\'Pozn.:\'\'\' Je-li před otazníkem uvedena dvojtečka, je považováno za chybu i to že je proměnná prázdná\n\n: - \'\'\'dvojtečka\'\'\'\nJe synonymem pro podmínky a vrací hodnotu TRUE \n\n@ - \'\'\'zavináč\'\'\' (\"at\")\n\n$ - \'\'\'dolar\'\'\' (\"string\")\n\n== Substituce proměnných ==\n\n\n\n\\ - \'\'\'zpětné lomítko\'\'\' (\"backslash\")\n| - \'\'\'svislítko\'\'\'\n` - \'\'\'apostrof\'\'\'\n; - \'\'\'středník\'\'\'\n< - \"\'\'\'menší než..\'\'\'\"\n> - \"\'\'\'větší než..\'\'\'\"\n+ - \"plus\"\n\n== Pole (array) ==\nBash podporuje pouze jednorozměrná pole\n\'\'\'Deklarace pole\'\'\' - se provádí podobně jako přiřazení proměnné:\n:
jmeno[$index]=hodnota
\n\'\'\'Použití pole\'\'\' - ${jmeno[$index]}\n::
\n$ jmeno[1]=hodnota\n$ jmeno[99]=pokus\n$ jmeno[45]=13\n$ echo ${jmeno[*]}\nhodnota 13 pokus\n$ echo ${jmeno[45]}\n13\n$ echo ${jmeno[@]}\nhodnota 13 pokus\n
\n\nPozor: rozdíl mezi echo \"$CISLO\" a echo \'$CISLO\'. (V prvním případě se vypíše hodnota 12, ve druhém případě se zobrazí znak dolaru následované řetězcem CISLO, tj. $CISLO)\n\nExpanze proměnných\n\nExpanzí proměnné rozumíme její vyhodnocení, resp. vrácení její hodnoty ve výraze. Nejjednodušším případem je zapsání $PROMENNA, což způsobí, že ve výsledném výrazu se použije její hodnota. Shell umožňuje další různé volby a možnosti pro expanzi (vyčíslování) proměnných. \n$proměnná, ${proměnná} - nejjednodušší tvar \n${proměnná:-slovo} - pokud je proměnná dosud nedefinovaná, nebo prázdná, použije se expandované slovo \n${proměnná:=slovo} - pokud je proměnná dosud nedefinovaná, nebo prázdná, přiřadí se a použije se expandované slovo \n${#proměnná} - vrátí délku řetězce uloženého v proměnné \n${proměnná%slovo} - odstraní se z řetězcové proměnné nejkratší přípona \n\n příklad: ${POM%čoko*} a měla-li proměnná obsah: \n\'Nejčokoládovější čokoláda je čoko\',\n potom po provedení příkazu, \nbude proměnná POM obsahovat: \n\'Nejcokoladovejší čokoláda je \'\n${proměnná%%slovo} - odstraní se z řetězcové proměnné nejdelší vyhovující přípona \n\n příklad: ${POM%%čoko*} a měla-li proměnná obsah: \n\'Nejčokoládovější čokoláda je čoko\',\n potom po provedení příkazu, \nbude proměnná POM obsahovat: \n\'Nej\'\n${proměnná#slovo} - odstraní se z řetězcové proměnné nejkratší předpona \n\n příklad: ${POM#*čoko} a měla-li proměnná obsah: \n\'Nejčokoladovejší čokoláda je čoko\',\n potom po provedení příkazu, \nbude proměnná POM obsahovat: \n\'ladovejší čokoláda je čoko\'\n${proměnná##slovo} - odstraní se z řetězcové proměnné nejdelší vyhovující předpona \n\n příklad: ${POM##*čoko} a měla-li proměnná obsah: \n\'Nejčokoladovejší čokoláda je čoko\',\n potom po provedení příkazu, \nbude proměnná POM obsahovat: \'\'\nSpeciální znaky (masky)\n\nUrčitě, i z řady jiných systémů, víte, že * nahrazuje libovolný počet různých znaků, shell nabízí ještě další, které můžete v CGI programování hojně použít:\n* - je speciální znak, který vyhovuje libovolnému počtu znaků \n? - vyhovuje jednomu libovolnému znaku \n[abdhrjk] - vyhovuje jednomu znaku, takovému, který leží v této množině \n[a-zA-Z] - vyhovuje jednomu znaku za základní abecedy \n[!0-9] - vyhovuje jakémukoliv nečíselnému znaku, znak ! obrácí v [] význam\n\n== Jednoduché příkazy ==\nje posloupnost volitelného přiřazení hodnot proměnným následovaná slovy vzájemně oddělenými bílým místem a přesměrováními, a ukončená řídícím operátorem. První slovo specifikuje prováděný příkaz, a je posláno jako argument nula. Zbývající slova jsou poslána jako argumenty vyvolávanému příkazu. Návratová hodnota jednoduchého příkazu je jeho exit status, nebo 128+n jestliže příkaz je ukončen signálem n.\n\n== Roury (pípy, pipelines), také zřetězení ==\nroura (pipeline) je posloupnost jednoho nebo více příkazů oddělených znakem | (svislá čára). Tvar pro rouru je:\n[time [-p]] [ ! ] příkaz [ | příkaz2 ... ]\nstandardní výstup (stdin) z příkaz je připojený přes rouru k standardnímu vstupu příkazu příkaz2. Toto spojení je provedeno před jakýmikoliv přesměrováními specifikovanými příkazem (viz přesměrování níže).\nJestliže rouře předchází rezervované slovo ! , stav ukončení (exit status) této roury je \"\" logické NOT stavu ukončení (exit status) posledního příkazu. Jinak je exit status rourystav ukončení (exit status) posledního příkazu. Shell čeká na ukončení všech příkazů v rouře před návratem hodnoty.\n\n\nJestliže rouře předchází rezervované slovo time, po jejím skončení je vypsán celkový čas, čas systému a uživatelský čas spotřebovaný při jejím provádění. Každý příkaz r je prováděny jako a separate process (i.e., v a subshell). \n\n== Seznamy ==\n\nseznam je posloupnost jednoho nebo více zřetězení (pipelines) oddělených jedním z operátorů ;, &, &&, nebo ||, a volitelně ukončen jedním z metaznaků ;, &, nebo . Z těchto operátorů mají && a || stejnou prioritu, pak následují ; a &, které mají též stejnou prioritu. Namísto středníku se v seznamu může vyskytnout jedn nebo více znaků nová řádka. Pokud je příkaz ukončen řídícím operátorem &, shell provádí příkaz na pozadí v subshellu. shell nečeká na ukončení příkazu, a návratový stav je 0. Příkazy oddělené ; jsou prováděny sekvenčně; shell čeká na ukončení každého příkazu. Návratový stav je stav ukončení (exit status) posledního prováděného příkazu.\n\nŘídící operátory && a || označují AND seznamy resp. OR seznamy. AND seznam má tvar\ncommand1 && command2 \n\ncommand2 je prováděn právě tehdy, pokud command1 vrací stav ukončení (exit status) nula (=úspěsné ukončení). \n\nOR seznam má tvar\ncommand1 || command2 \n\ncommand2 je prováděn právě tehdy, když command1 vrací nenulový exit status. Návratový stav AND i OR seznamu je stav ukončení (exit status) posledního příkazu v seznamu prováděného.\n\n== Složené příkazy ==\n\'\'\'Složený příkaz\'\'\' je jeden z následujících:\n\n; (seznam) : seznam je prováděn v subshellu. přiřazení proměnných a vestavěné příkazy které ovlivňují prostředí shellu environment nezůstávají v účinnost po ukončení příkazu. Návratový stav je stav ukončení (exit status) seznamu iseznam. \n\n; { seznam; } : seznam je jednoduše prováděn v běžném prostředí shellu. seznam musí být ukončen novou řádkou nebo středníkem. Tato konstrukce je známá jako skupinový příkaz. Návratový stav je stav ukončení (exit status) seznamu seznam. Pozn.: Na rozdíl od metaznaků ( a ), jsou znaky { a } rezervovaná slova a musí se vyskytovat jen tam, kde jsou rezervovaná slova rozeznávána. Protože nezpůsobují rozdělení slov, musí být odděleny od seznam bílou mezerou (posl. mezer a/n tabelátorů).\n\n; ((expression)) : výraz expression je vyčíslen podle pravidel popsaných v man stránkách bash pod sekcí “ARITHMETIC EVALUATION”. jestliže hodnota výrazu je nenulová, návratový stav je 0; jinak návratový stav je 1. Tento zápis je přesně rovnocenný s let \"expression\". \n\n; [[ expression ]] : vrací stav z 0 nebo 1 v závislosti na vyčíslení podmíněného výrazu expression. Výrazy jsou složené z elementů popsaných v man stránkách bash pod sekcí “CONDITIONAL EXPRESSIONS”.\n\n; for name [ in word ] ; do list ; done : seznam slov následující in je expandován, generujíc seznam položek. Proměnná name je postupně nastavena na každý element tohoto seznamu, a je prováděnseznam příkazů list. Jestliže je vynecháno in word, příkaz for provádí seznam list jednou pro každý nastavený poziční parametr (viz parametry níže). Návratový stav je stav ukončení (exit status) posledního provedeného příkazu. Jestliže rozvoj položek následující in vyústí v prázdný seznam, nejsou provedeny žádné příkazy a návratový stav je 0.\n\n; for (( expr1 ; expr2 ; expr3 )) ; do list ; done : Nejprve je vyčíslen aritmetický výraz expr1 dle popsaných v sekci “ARITHMETIC EVALUATION. Pak je opakovaně vyčíslován aritmetický výraz expr2 dokud se nerovná nule. Pokaždé když je expr2 vyčíslen na nenulovou hodnotu je proveden seznam list a je vyčíslen aritmetický výraz expr3. Vynechání libovolného výrazu je stejné jako by byl roven 1. Návratová hodnota je exit status posledního provedeného příkazu v list, nebo nepravda jestliže libovolný z výrazů je nesprávný. \n\n; select name [ in word ] ; do list ; done : Seznam slov následujících in je expandován, generujíc seznam položek. Množina rozvinutých slov je vypsána na stderr, každé předcházené číslem. Jestliže in word je vynecháno, jsou vypsány poziční parametry. Pak je zobrazen PS3 prompt načtena řádka ze stdin. Jestliže řádka je číslo odpovídající jednomu ze zobrazených slov, pak hodnota name je nastavena na toto slovo. Jestliže je řádka prázdná, slova a prompt jsou zobrazeny znovu. Pokud je načten EOF, příkaz se ukončí. Kterákoliv jiná přečtená hodnota způsobí že name je nastaveny na prázdnou hodnotu. Načtená řádka je uchována v proměnné REPLY. Seznam list je prováděn po každé volbě dokud není proveden příkaz break. Stav ukončení select je stav ukončení posledního příkazu prováděného v seznamu list, nebo nula pokud nebyly provedeny žádné příkazy. \n\n; case word in [ [(] pattern [ | pattern ] : case příkaz nejprve expanduje word, pak zkouší postupně zda se shoduje s každým vzorkem pattern, s užitím stejných pravidel pro shodu jako pro rozvoj cesty. Když je nalezena shoda, je proveden odpovídající seznam list. Po první shodě nejsou zkoušeny žádné následující. Stav ukončení je nula pokud žádný vzorek nesouhlasil. Jinak je to stav ukončení posledního příkazu prováděného v seznamu list.\n\n; if list; then list; [ elif list; then list; ] ... [ else list; ] fi : Je proveden if seznam list. Pokud jeho stav ukončení (exit status) je nula, then list je proveden. Jinak je postupně proveden každý elif list, a pokud jeho stav ukončení je nula, je proveden odpovídající then list a příkaz skončí. Jinak je proveden else list, pokud je přítomný. Stav ukončení je stav ukončení posledního provedeného příkazu nebo nula, pokud žádná testovaná podmínka nebyla “true”. \n\n; while list; do list; done : stejný jako..\n\n; until list; do list; done : while příkaz opakovaně provádí do list tak dlouho dokud poslední příkaz v seznamu list vrací stav ukončení nula. until příkaz je identický k while, pouze test je negated; do list je prováděn tak dlouho dokud poslední příkaz v sezanmu list vrací nenulový exit status. Stav ukončení while a until příkazů je stav ukončení posledního provedeného do list příkazu, nebo nula pokud nebyl proveden žádný.\n\n; [ function ] name () { list; } : Definuje funkci pojmenovanou name. Tělo funkce je seznam list příkazů mezi “{“ a “}”. Tento seznam je prováděn kdykoliv je specifikováno slovo name jako jméno jednoduchého příkazu. Stav ukončení funkce je stav ukončení posledního příkazu prováděného v těle funkce.\n\n== Podmínky a testy ==\n\n= Poznámky =\n\nv neinteraktivním shellu slovo začínající znakem # (hash, zahrádka) způsobí že toto slovo a všechny zbývající znaky na řádce jsou ignorovány. Interaktivní shell bez zapnuté volby interactive_comments nepovoluje komentáře. Volba interactive_comments je v interaktivním shellu zapnuta implicitně.','',0,'195.113.188.3','20041025131650','',0,0,0,0,0.797406625374,'20041025131650','79958974868349'); INSERT INTO cur VALUES (84,0,'Util-linux','[[Special:Whatlinkshere/util-linux | Odkaz na stránky které sem odkazují]]\n\n= Obsah aktuální verze balíku util-linux 2.12a =\n\n{| border=\"1\"\n| /bin/[[arch]] || \n|-\n| /bin/[[dmesg]] || \n|-\n| /bin/[[kill]] || \n|-\n| /bin/[[login]] || \n|-\n| /bin/[[more]] || \n|-\n| /sbin/[[addpart]] || \n|-\n| /sbin/[[agetty]] || \n|-\n| /sbin/[[blockdev]] || \n|-\n| /sbin/[[clock]] || \n|-\n| /sbin/[[ctrlaltdel]] || \n|-\n| /sbin/[[delpart]] || \n|-\n| /sbin/[[elvtune]] || \n|-\n| /sbin/[[fdisk]] || \n|-\n| /sbin/[[fsck.cramfs]] || \n|-\n| /sbin/[[fsck.minix]] || \n|-\n| /sbin/[[hwclock]] || \n|-\n| /sbin/[[kbdrate]] || \n|-\n| /sbin/[[mkfs]] || \n|-\n| /sbin/[[mkfs.bfs]] || \n|-\n| /sbin/[[mkfs.cramfs]] || \n|-\n| /sbin/[[mkfs.minix]] || \n|-\n| /sbin/[[mkswap]] || \n|-\n| /sbin/[[nologin]] || \n|-\n| /sbin/[[partx]] || \n|-\n| /sbin/[[pivot_root]] || \n|-\n| /sbin/[[rescuept]] || \n|-\n| /sbin/[[sfdisk]] || \n|-\n| /usr/bin/[[cal]] || \n|-\n| /usr/bin/[[chfn]] || \n|-\n| /usr/bin/[[chsh]] || \n|-\n| /usr/bin/[[col]] || \n|-\n| /usr/bin/[[colcrt]] || \n|-\n| /usr/bin/[[colrm]] || \n|-\n| /usr/bin/[[column]] || \n|-\n| /usr/bin/[[cytune]] || \n|-\n| /usr/bin/[[ddate]] || \n|-\n| /usr/bin/[[fdformat]] || \n|-\n| /usr/bin/[[getopt]] || \n|-\n| /usr/bin/[[hexdump]] || \n|-\n| /usr/bin/[[ipcrm]] || \n|-\n| /usr/bin/[[ipcs]] || \n|-\n| /usr/bin/[[isosize]] || \n|-\n| /usr/bin/[[logger]] || \n|-\n| /usr/bin/[[look]] || \n|-\n| /usr/bin/[[mcookie]] || \n|-\n| /usr/bin/[[mkcramfs]] || \n|-\n| /usr/bin/[[namei]] || \n|-\n| /usr/bin/[[raw]] || \n|-\n| /usr/bin/[[rename]] || \n|-\n| /usr/bin/[[renice]] || \n|-\n| /usr/bin/[[rev]] || \n|-\n| /usr/bin/[[script]] || \n|-\n| /usr/bin/[[setfdprm]] || \n|-\n| /usr/bin/[[setsid]] || \n|-\n| /usr/bin/[[setterm]] || \n|-\n| /usr/bin/[[tailf]] || \n|-\n| /usr/bin/[[ul]] || \n|-\n| /usr/bin/[[whereis]] || \n|-\n| /usr/bin/[[write]] || \n|-\n| /usr/sbin/[[cfdisk]] || \n|-\n| /usr/sbin/[[clock]] || \n|-\n| /usr/sbin/[[hwclock]] || \n|-\n| /usr/sbin/[[ramsize]] || \n|-\n| /usr/sbin/[[rdev]] || \n|-\n| /usr/sbin/[[readprofile]] || \n|-\n| /usr/sbin/[[rootflags]] || \n|-\n| /usr/sbin/[[tunelp]] || \n|-\n| /usr/sbin/[[vidmode]] || \n|-\n| /usr/sbin/[[vigr]] || \n|-\n| /usr/sbin/[[vipw]]\n|}','',0,'195.113.188.3','20041025150326','',0,0,0,1,0.701765382524,'20041025150326','79958974849673'); INSERT INTO cur VALUES (85,0,'Man','= FUNKCE =\n; \'\'\'man\'\'\' : zformátuje a zobrazí on-line manuálové stránky\n\n; \'\'\'manpath\'\'\' : zobrazí manuálové cesty uživatele\n\n= SYNTAXE =\n\nman [-acdfhkKtwW] [-m systém] [-p řetězec] [-C konfigurační soubor] [-M cesta] [-P stránkovač] [-S seznam_sekcí] [sekce] jméno ...\n\n= POPIS =\n\nman zformátuje a zobrazí on-line manuálové stránky. Tato verze umí pracovat s proměnnými prostředí MANPATH a (MAN)PAGER, proto můžete mít i vlastní manuálové stránky a vlastní program určený ke stránkování zformátovaných manuálových stránek. Je-li specifikována sekce man hledá danou stránku pouze v této sekci. Samozřejmě můžete také specifikovat pořadí sekcí, které budou prohledávány a také můžete přímo na příkazové řádce nebo proměnnými prostředí určit, které preprocesory budou při formátování stránek použity. Obsahuje-li jméno znak /, je prvně vyzkoušeno jako jméno souboru, proto můžete udělat něco jako man ./něco.5 nebo man /cédéčko/něco/něco_jiného.1.gz.\n\n= VOLBY =\n\n; \'\'\'-C konfigurační_soubor\'\'\' : Specifikujete jiný konfigurační soubor. Standardní je /etc/man.config. (Viz též man.conf(5).)\n; \'\'\'-M\'\'\' cesta : Specifikuje seznam manuálový cest (zde jsou hledány manuálové stránky). Není-li tato volba specifikována, je použita proměnná prostředí MANPATH /etc/man.config.\n; \'\'\'-P\'\'\' stránkovač : Specifikuje stránkovač, kterým budou stránky prohlíženy. Tato volba má přednost před MANPAGER , která má přednost před PAGER . Standardní stránkovač je /usr/bin/less-isR.\n; \'\'\'-S\'\'\' seznam_sekcí : Seznam_sekcí je čárkami oddělený seznam sekcí manuálových stránek. Tato volba má přednost před proměnnou prostředí MANSECT .\n;\'\'\'-a\'\'\' : Standardní nastavení ukončí man poté, co zobrazí první nalezenou manuálovou stránku. Tato volba umožní zobrazit všechny nalezené stránky, které vyhovují zadaným kritériům.\n; \'\'\'-c\'\'\' : Zformátuj zdroj manuálové stránky i když existuje již zformátovaná verze. Tato volba je významná. je-li zformátovaná stránka prohlížena na obrazovce s jiným počtem sloupců.\n; \'\'\'-d\'\'\' : Nezobrazuj zformátovanou stránku, pouze vytiskni ladící informace.\n; \'\'\'-D\'\'\' : Zobraz ladící informace i zformátovanou stránku.\n; \'\'\'-f\'\'\' : Totéž co whatis.\n; \'\'\'-h\'\'\' : Vytiskni krátkou pomoc a skonči.\n; \'\'\'-k\'\'\' : Totéž co apropos.\n; \'\'\'-K\'\'\' : Hledej specifikovaný řetěze ve *všech* manuálových stránkách.\n::Varování: tato funkce je pravděpodobně velmi pomalá! Specifikujete-li sekci, bude to rychlejší. (Jen pro zajímavost, na mém počítači to trvá přibližně minutu na 500 stránek).\n; \'\'\'-m systém\'\'\' : Specifikuje jinou sadu manuálových stránek závislou na zadaném systému.\n; \'\'\'-p řetězec\'\'\' : Specifikuje pořadí preprocesorů před nroff nebo troff. Ne všechny instalace mají plnou sadu preprocesorů. Některé preprocesory a písmena používaná pro jejich spouštění: eqn (e), grap (g), pic (p), tbl (t), vgrind (v), refer (r). Tato volba má přednost před proměnnou prostředí MANROFFSEQ .\n; \'\'\'-t\'\'\' : Použij /usr/bin/groff -Tps -mandoc -c k formátování stránky a výstup zobraz na stdout. Výstup z /usr/bin/groff -Tps -mandoc -c je třeba před tiskem poslat přes nějaké filtry.\n; \'\'\'-w\'\'\' nebo \'\'\'--path\'\'\' : Nezobrazuj manuálové stránky, pouze vytiskni cestu(y) souborů, které bys zobrazil. Není-li zadán žádný argument: zobraz (na standardní výstup) seznam adresářů, které jsou programem man hledány. Je-li manpath link na man, potom je manpath totožné s \"man --path\".\n; \'\'\'-W\'\'\' : Podobné jako -w, ale tiskne jména souborů po jednom na řádek bez dalších informací. To je užitečné pro příkazy shellu jako např. man -aW man | xargs ls -l\n\n= ZFORMÁTOVANÉ STRÁNKY =\n\nMan se snaží ukládat již zformátované manuálové stránky, aby ušetřil při jejich příštím zobrazení čas. Tradičně se zformátované stránky z DIR/manX ukládají do DIR/catX, ale jiná mapování z manuálového adresáře na adresář zformátovaných stránek je možné specifikovat v souboru /etc/man.config. Neexistuje-li adresář zformátovaných stránek, nejsou ukládány žádné zformátované stránky. Je možné nechat man suid pro uživatele man. Potom, je-li majitel adresáře zformátovaných stránek man a mód je 0755 (zapisovat může pouze vlastník), a zformátované stránky mají mód 0644 nebo 0444 (zapisovat může buď jenom majitel nebo vůbec nikdo), nemůže normální uživatel změnit zformátované stránky nebo umístit do adresáře zformátovaných stránek jiné soubory. Není-li man suid, potom by měl mít adresář zformátovaných stránek mód 0777 aby zde mohli všichni uživatelé zanechat jiř zformátované stránky. Volba -c způsobí reformátování stránky i když již existuje zformátovaná stránka.\n\n\n= PROSTŘEDÍ =\n; MANPATH : Je-li nastavena proměnná MANPATH , její hodnota je využívána ke hledání zformátovaných stránek.\n; MANROFFSEQ : Je-li nastavena proměnná prostředí MANROFFSEQ je její hodnota využita pro určení pořadí spouštění preprocesorů před nroff nebo troff. Standardně jsou stránky formátovány prvně tabulkovým procesorem a teprve poté nroffem.\n; MANSECT : Je-li nastavena proměnná prostředí MANSECT je její hodnota využita k určení sekcí, které budou prohledávány.\n; MANWIDTH : Je-li nastavena proměnná prostředí MANWIDTH , tak její hodnota určuje počet sloupců, na které bude stránka zformátována. Jinak bude stránka zformátována na šířku obrazovky.\n; MANPAGER : Je-li nastavena proměnná prostředí MANPAGER její obsah určuje stránkovač, který bude použit při zobrazení zformátované stránky. Není-li nastavena, je použita proměnná PAGER . není-li ani tato proměnná nastavena, použije se /usr/bin/less -isR .\n; LANG : Je-li nastavena proměnná prostředí LANG její hodnota definuje podadresář, ve kterém budou hledány stránky. Potom příkaz \'LANG=cz man 1 manuálová_stránka\' zobrazí stránku .../cz/man1/manuálová_stránka.1, nebo\n; NLSPATH, LC_MESSAGES, LANG : Proměnné prostředí NLSPATH a LC_MESSAGES (nebo LANG jestliže předchozí neexistují) hrají roli při hledání katalogu zpráv. (Anglické zprávy jsou zkompilovány a není pro ně třeba katalogu.) Dejte pozor na to, že programy jako col (1) volané programem man používají např. LC_CTYPE.\n; PATH : je používána při sestavení starndardní manuálové cesty.\n; SYSTEM : je používána ke zjištění standardního jména systému (pro použití s volbou -m ).\n\n= VIZ TÉŽ =\n\n[[apropos]], [[whatis]], [[less]], [[groff]].\n\n= CHYBY =\n\nVolba -t je funkční pouze, je-li instalován program podobný programu troff.\n\nUvidíte-li blikající \\255 nebo místo oddělovátek, umístěte \'LESS-CHARSET=latin1\' do Vašeho prostředí.\n\n7. ledna, 1997 nobody','',0,'195.113.188.3','20041025152635','',0,0,0,1,0.783950013008,'20041025152635','79958974847364'); INSERT INTO cur VALUES (86,0,'Ořezávání','== Rovinné ořezávání ==\n\n\'\'\'Ořezávací (clipping) algoritmy\'\'\' umožňují vybrat z kresby pouze ty části, které jsou viditelné v určité oblasti. Ačkoli existují obecné algoritmy, které pracují nad nekonvexním mnohoúhelníkem, bývá ořezávací oblast nejčastěji definována jako \'\'\'obdelník\'\'\' (typickým příkladem je ořezání objektu oknem obrazovky), toto v dalším textu předpokládejme.\n\nV případě rovinného ořezávání bývá ořezávaným objektem polygon, úsečka. Výsledkem ořezání jsou opět tyto objekty. Pokud ořezáváme uzavřené polygony (oblasti), je žádoucí, aby i po ořezání byly uzavřené, tj. \"je možno je i po ořezání vyplnit\". Z tohoto důvodu je v některých případech potřeba zajistit přidání nových hran (\'\'viz níže popis algoritmu Sutherland-Hodgman\'\').\n\n
[[Image:Geom4-rezani-1-vp.png]]
\n
Příklad ořezání nekolika polygonů obdelníkovým oknem.
Všimněme si nově vzniklých hran, ohraničujících vyplněnou oblast (Sutherland-Hodgman).
\n\n\n=== Popis ===\n
    \n
  • \'\'\'Ořezávání úsečky\'\'\'
    \n\'\'Algoritmů na ořezávání úseček obdelníkovým oknem je několik -- Cohen-Sutherland, Cyrus-Back, Liang-Barsky. Popišme si první z nich, který je také použit v naší implementaci.\'\'

    \n\n\n\'\'\'Algoritmus Cohen-Sutherland\'\'\'
    \n\n\nZákladem algoritmu ořezávání úsečky Cohen-Sutherland je pojem \'\'\'ohodnocení bodu hraničními kódy\'\'\' (\'\'dále ohodnocení bodu \'\'). Každý z bodů úsečky získá své ohodnocení v závislosti jeho polohy vůči ořezávacímu oknu. Ohodnocení bodu je možné reprezentovat různě (bitové pole, objektem obsahující vlastnosti jako boolean hodnoty,...), podstatné je to, aby bylo pro každý bod určeno, zda se nachází vlevo, vpravo, dole či nahoře od ořezávacího okna. Nechť je dále ohodnocení definováno jako čtveřice 0/1,0/1,0/1,0/1 (LEVO, PRAVO, DOLE, NAHORE -- kde 0 není splněno a 1 je splněno), tj. například 0101 označuje polohu bodu vpravo nahoře od ořezávacího okna.\n\n
    \n[[Image:Geom4-rezani-3-vp.png]]
    \nOhodnocení bodu hraničními kódy\n
    \n\nOřezávací algoritmus postupně zkoumá \'\'\'tři polohy úsečky vůči ořezávacímu oknu\'\'\'. Polohu úsečky zjistíme porovnáním ohodnocení hraničních bodů úsečky. Označíme-li si hraniční body jako A a B a jejich ohodnocení Val(A) a Val(B), mohou nastat následující případy (pozn: operace průnik a sjednocení probíhají po jednotlivých bitech ohodnocení):\n\n
    \n[[Image:Geom4-rezani-2-vp.png]]
    \nPolohy úseček vůči ořezávacímu oknu\n
    \n\n
      \n
    1. Val(A)\\cup Val(B)= \\empty -- tj. úsečka je celá \'\'\'v\'\'\' ořezávacím okně a \'\'není potřeba ji proto ořezávat\'\'. Tj. pro obě ohodnocení bodů platí, že jsou 0000 (oba body jsou \"v ořezávacím okně\").
    2. \n\n
    3. Val(A)\\cap Val(B) \\neq \\empty -- tj. úsečka je celá \'\'\'mimo\'\'\' ořezávací okno a \'\'není potřeba ji proto ořezávat\'\'. Tento test ovšem některé případy úseček procházejících vnějšími oblastmi neodhalí.
    4. \n\n
    5. Val(A)\\cap Val(B) = \\empty -- tj. úsečka buď \'\'\'prochází ořezávacím oknem\'\'\' a nebo jde o \"neodhalený\" případ úsečky mimo okno. Úsečka prochází několika oblastmi a je nutné ji ořezat. Provedeme to tak, že zvolíme bod úsečky, který neleží uvnitř (tj. jeho hraniční kód není 0000) a podle nastavené jedničky vybereme hranici, podle které ho úsečku zkrátíme (přesněji algoritmizace níže).
    6. \n
    \n

    \n
  • \n
  • \'\'\'Ořezávání polygonu\'\'\'
    \n\n\'\'Ořezat polygon by bylo možné i pomocí postupného aplikování výše uvedeného algorimu Cohen-Sutherland. Problém však nastává při požadavku zachování uzavřenosti, tj. nesmí dojít k rozpadu hran. Po ořezání musí být případně polygon doplněn o další úsečky (viz. obrázek). Je tedy zřejmé, že algoritmy pro ořezání úsečky se pro ořezávání polygonu příliš nehodí.\'\'

    \n\n\'\'\'Algoritmus Sutherland-Hodgman \'\'\'
    \nVelice jednoduchý postup pro ořezávání polygonu zvolili Sutherland a Hogman. Jejich algoritmus postupně ořezává daný polygon jednotlivými hranicemi okna, při čemž v případě potřeby je k ořezanému polygonu přidána hrana.\nJestliže máme rovinou oblast ohraničenou polygonem, pak provedeme nejdřív ořezání podle levé strany okna. Výsledkem bude nový polygon. Tento polygon použijeme pro ořezání pravou stranou okna. Obdobně budeme pokračovat pro horní a dolní stranu okna. Tento postup je vidět na přiloženém obrázku.\n\n
    \n[[Image:geom4-rezani-polygon-vp.png]]
    \nPostup ořezání polygonu pomocí algoritmu Sutherland-Hodgman\n
    \n\nZ obrázku je patrné, že danou stranou okna ořezáváme postupně jednotlivé hrany polygonu. Polygon si zorientujeme, na vstupu do algoritmu máme posloupnost vrcholů tohoto\norientovaného polygonu a na výstupu na začátku prázdnou posloupnost. V i-tém\nkroku vezmeme vždy vrcholy U_i a U_{i+1} ze vstupní posloupnosti a do výstupní posloupnosti zapíšeme vrcholy podle následujících pravidel:\n
      \n
    1. Oba vrcholy této úsečky leží vně vůči dané hranici okna. Pak do výstupní posloupnosti nezapíšeme žádný bod.
    2. \n
    3. Počáteční vrchol U_i leží vně okna a koncový vrchol .U_{i+1} leží uvnitř okna, pak spočítáme průsečík B strany polygonu s hranicí okna a do výsledné posloupnosti zařadíme tento vypočítaný průsečík.
    4. \n
    5. Oba vrcholy leží uvnitř okna vzhledem k dané hranici okna, pak do výstupní\nposloupnosti zapíšeme počáteční bod U_i.
    6. \n
    7. Počáteční vrchol U_i leží uvnitř okna a koncový vrchol U_{i+1} leží vně okna, pak spočítáme průsečík B strany polygonu s hranicí okna a do výstupní posloupnosti přidáme počáteční vrchol U_i a bod průsečíku B.
    8. \n
    \nTento algoritmus použijeme postupně pro všechny strany ořezávacího okna, přičemž\nna vstupu pro první stranu okna je ořezávaný polygon a pro každou další stranu\nokna je již polygon oříznutý v předchozím kroku.\n\n
  • \n
\n\n=== Algoritmizace ===\n\n
    \n
  • \'\'\'Ořezávání úsečky, algoritmus Cohen-Sutherland\'\'\'
    \n\'\'VSTUP: úsečka, ořezávací okno\'\'
    \n\'\'VÝSTUP: ořezaná úsečka\'\'

    \n\nNechť je úsečka určena dvěma body \"A\" a \"B\". \'\'aktualniBod\'\' = \"A\"

    \n\n
      \n
    1. Urči hraniční kódy bodů vůči ořezávacímu oknu.
    2. \n\n
    3. Pokud nastal jeden z následujících případů, algoritmus ukonči (body \"A\" a \"B\" jsou hraničními body ořezané úsečky)\n\n
      • Oba body jsou uvnitř ořezávacího okna (\'\'prázdné sjednocení, viz výše popis algoritmu\'\').
      • Úsečka neprochází ořezávacím oknem (\'\'neprázdný průnik, viz výše popis algoritmu\'\').
    4. \n\n
    5. Je nutné úsečku ořezat\n
      • Pokud má \'\'aktualniBod\'\' hraniční kód 0000 (je uvnitř okna), zaměň \'\'aktualniBod\'\' za bod, který ještě nebyl uvažován (\'\'aktualniBod\'\'=\"B\")
    6. \n\n
    7. Podle nastavené jedničky hraničního kódu bodu ořež úsečku podle odpovídajíci hrany (tj. pokud 1001, začínáme řezat levou hranou).\n
      • \'\'aktualniBod\'\'=průsečík úsečky a zvolené hrany
      \n
    8. \n\n
    9. Pokračuj bodem 1.
    10. \n
    \n\n
    \n
  • \n\n
  • \'\'\'Ořezávání polygonu, algoritmus Sutherland-Hodgman\'\'\'
    \n\'\'VSTUP: polygon, ořezávací okno\'\'
    \n\'\'VÝSTUP: ořezaný polygon\'\'

    \n\nPolygon si zorientujeme, na začátku algoritmu máme tedy posloupnost bodů tohoto\norientovaného polygonu a na výstupu na začátku prázdnou posloupnost.
    \n\nV i-tém kroku vezmeme vždy body U_i a U_{i+1} ze vstupní posloupnosti a do výstupní posloupnosti zapíšeme body podle následujících pravidel:\n
      \n
    1. Oba body leží vně vůči dané hranici okna. Pak do výstupní posloupnosti nezapíšeme žádný bod.
    2. \n
    3. Počáteční bod U_i leží vně okna a koncový bod .U_{i+1} leží uvnitř okna, pak spočítáme průsečík B strany polygonu s hranicí okna a do výsledné posloupnosti zařadíme tento vypočítaný průsečík.
    4. \n
    5. Oba body leží uvnitř okna vzhledem k dané hranici okna, pak do výstupní\nposloupnosti zapíšeme počáteční bod U_i.
    6. \n
    7. Počáteční bod U_i leží uvnitř okna a koncový bod U_{i+1} leží vně okna, pak spočítáme průsečík B strany polygonu s hranicí okna a do výstupní posloupnosti přidáme počáteční vrchol U_i a bod průsečíku B.
    8. \n
    \n\nTento algoritmus použiji postupně pro všechny strany ořezávacího okna, přičemž\nna vstupu pro první stranu okna je ořezávaný polygon a pro každou další stranu\nokna je již polygon oříznutý v předchozím kroku.\n\nJe také možné každou ořezanou hranu ihned poslat k ořezání další hranicí -- tzv. \'\'reentrant polygon clipping\'\', tak si nemusíme pamatovat postupně ořezané polygon a jejich proměnlivý počet vrcholů. Tento způsob je použit v naší implementaci algoritmu.\n
\n\n\n\n\n=== Kód v jazyce C# ===\n
\n[[Image: Vp-orezavani-kod.jpg]]\n
\n\nProgram se skládá ze 2 komponent. Každou realizoval jeden z nás -- jedna je zodpovědná za prezentaci -- \'\'\'formular\'\'\', druhá je jádrem -- \'\'\'Kernel\'\'\', které provádí veškeré výpočty. Pro komunikaci jsme si definovali rozhranní \'\'IGeom\'\' vypadající následně:\n\n\n namespace Geom\n {\n public interface IGeom\n {\n bool PridejPolygon(ArrayList body); // prida polygon\n bool SmazPolygon(int ID); // smaze polygon daneho ID\n bool ZmenPolygon(object polygon); //object Polygon = objekt polygon z jadra\n ArrayList VratOrezanePolygony(); // vrati ke vsem polygonum s jadra orezane polygony\n ArrayList VratPolygony(); // vrati vsechny polygon, kt. jsou ulozene v jadre\n object VratOkno(); // vrati orezavaci okno\n bool ZmenOkno(object okno); //zmeni orezavaci okno\n bool SmazVsechnyPolygony(); // smaze vsechny polygony\n }\n }\n\n\nVeškeré polygony jsou uloženy v jádře v hash tabulce, která umožňuje rychlý přístup k požadovanému objektu podle jeho ID. Jádro si pouze o polygony žádá při zobrazování, případně žadá jejich modifikaci -- podle operací definovaných v \'\'IGeom\'\'. Popis níže se už týká jen komponenty \'\'Kernel\'\'.\n\n==== Pomocné objekty a metody ====\n\n
    \n
  • \'\'\'Sef\'\'\' -- implementuje rozhranní \'\'IGeom\'\', je fasádou k \'\'Kernel\'\'. Zodpovídá za veškerou funkčnost jádra.
  • \n
  • \'\'\'Bod2D\'\'\' -- objekt definující bod v 2D, obsahuje souřadnice
  • \n
  • \'\'\'OhodnoceniBodu\'\'\' -- ohodnocení bodu, váže se k bodu
  • \n
  • \'\'\'Polygon\'\'\' -- objekt reprezentující polygon (obsahuje seznam bodů)
  • \n
  • \'\'\'OrezavaciOkno\'\'\' -- speciální příklad obdelníkového polygonu. Definuje ořezávací okno
  • \n
\n\n==== Vlastní algoritmus ====\n\nOba algoritmy \'\'SutherlandHodgman\'\' a \'\'CohenSutherland\'\' jsou specializací abstraktní třídy \'\'OrezavacAbstract\'\' definující společnou metodu nabízející možnost ořezání:\n\n public abstract Polygon Orez( Polygon polygon );\n\n\nPři \'\'\'žádosti o ořezání polygonu\'\'\' je podle počtu bodů polygonu objektem \'\'Sef\'\' zvolen odpovídající algoritmus, pro úsečku \'\'CohenSutherland\'\', pro jiné polygony \'\'SutherlandHodgman\'\' a volána metoda algoritmu \'\'Orez( polygon )\'\'.\n\nNásleduje kód hlavních metod ořezávacích algoritmů.\n\n
\'\'\'Algoritmus Cohen-Sutherland\'\'\' -- ořezání úsečky
\n\n\n /// \n /// oreze usecku\n /// \n /// polygon\n /// orezany polygon\n public override Polygon Orez( Polygon polygon )\n {\n Polygon orezanyPolygon = new Polygon();\n bool orezano = false;\n Bod2D bod1 = (Bod2D)((Bod2D) polygon.Body[0]).Clone();\n Bod2D bod2 = (Bod2D)((Bod2D) polygon.Body[1]).Clone();\n while( !orezano ) // dokud neni orezano aplikuji algoritmus..\n {\n NastavOhodnoceniBodu( bod1 ) ;NastavOhodnoceniBodu( bod2 );\n // usecka je uvnitr -- konec
\n if( bod1.Ohodnoceni.JeUvnitr && bod2.Ohodnoceni.JeUvnitr ) // oba jsou uvnitr\n {\n // pridam orezane body
\n orezanyPolygon.Body.Add( bod1 ); orezanyPolygon.Body.Add( bod2 );\n orezano = true;\n } \n else // nejsou uplne mimo oblast? -- konec\n if( ( bod1.Ohodnoceni.NeprazdnyPrunik( bod2.Ohodnoceni ))) orezano = true;\n else { // existuje prusecik \n zamenPoradiBodu( ref bod1, ref bod2 ); // zamenim poradi -- pokud je uz jeden na miste\n \n // ZJISTENI SMERNICE\n double k; \n double jmenovatel = ((double)bod2.X - (double)bod1.X);\n k = (((double)bod2.Y - (double)bod1.Y)) / jmenovatel;\n // najdu pruseciky\n if( bod1.Ohodnoceni.Levo ){ // prusecik s levou hranici\n bod1.Y = (int) (bod1.Y + k * (orezavaciOkno.MinX - bod1.X ));\n bod1.X = orezavaciOkno.MinX;\n }\n else\n if( bod1.Ohodnoceni.Pravo ) // prusecik s pravou hranici\n {\n bod1.Y = (int) (bod1.Y + k * (orezavaciOkno.MaxX - bod1.X ));\n bod1.X = orezavaciOkno.MaxX;\n }\n else // DOLE\n if( bod1.Ohodnoceni.Dole ) // prusecik se spodni hranici\n {\n bod1.X = bod1.X ;\n bod1.X += (k == 0)? 0: (int)((orezavaciOkno.MinY - bod1.Y )/k);\n bod1.Y = orezavaciOkno.MinY;\n }\n else\n if( bod1.Ohodnoceni.Nahore ) // prusecik s pravou hranici\n {\n bod1.X = bod1.X;\n bod1.X += (k == 0)? 0: (int)((orezavaciOkno.MaxY - bod1.Y )/k);\n bod1.Y = orezavaciOkno.MaxY;\n }\n }\n }\n return orezanyPolygon;\n }\n
\n\n\'\'\'Algoritmus Sutherland-Hodgman\'\'\' -- ořezání polygonu
\nPozn.: v následujícím kódu je použita varianta algoritmu \'\'SutherlandHodgman\'\', kdy dochází k předávání ořezané hrany ihned k ořezání další hranou (tzv. \'\'reentrant polygon clipping\'\'), tj. nedochází k ukládání mezivýsledku \"polygonu ořezaného jednou hranou\", jak je popsáno v algoritmu výše. Použitý postup má výhodu i nevýhodu: \'\'je optimálnější, avšak jednotlivé kroky nejsou na první pohled tak pochopitelné\'\'.
\n\n /// \n /// oreze polygon\n /// \n /// polygon\n /// orezany polygon\n public override Polygon Orez( Polygon polygon )\n {\n orezanyPolygon = new Polygon();\n // nastavim\n nova_hranice = new bool[]{ true, true, true, true };\n foreach( Bod2D b in polygon.Body )\n orezVrchol( b, HRANICE.LEVA );\n // uzavreni mnohouhelniku\n ZaverecneOrezani();\n return orezanyPolygon;\n }\n\n\n\n /// \n /// oreze vrchol vzhledem k dane hranici\n /// \n /// \n /// \n private void orezVrchol( Bod2D bod, HRANICE hranice )\n {\n if( nova_hranice[ (int)hranice ] ) // pracuji s 1. bodem dane hranice, ulozim si ho == jako predchudce\n {\n prvni_bod[ (int)hranice ] = bod;\n nova_hranice[ (int)hranice ] = false;\n }\n else // uz mam predchudce, muzu porovnavat\n {\n if( protinaHranici( bod, predchazejiciBod[ (int)hranice ], hranice ) )\n {\n Bod2D prusecik = nalezeniPruseciku( bod, predchazejiciBod[ (int)hranice ], hranice ); // prusecik usecky s hranici, dle kt. orezavam\n if ( hranice < HRANICE.HORNI ) // muzu jeste orezat dalsi hranici\n orezVrchol( prusecik, hranice +1);\n }\n else \n orezanyPolygon.Body.Add( prusecik ); // mam ho orezany\n }\n }\n // ULOZIM BOD\n predchazejiciBod[ (int)hranice ] = bod;\n if( uvnitr( bod, hranice ) ) // je-li uvnitr, musim orezavat\n {\n if ( hranice < HRANICE.HORNI ) // neorezal jsem ho uz vsema?\n orezVrchol( bod, hranice +1);\n else \n {\n orezanyPolygon.Body.Add( bod ); // uz jsem ho orezal vs. hranicemi\n }\n } \n }\n\n\n\n /// \n /// uzavreni mnohouhelniku\n /// \n public void ZaverecneOrezani()\n {\n for( HRANICE hranice = HRANICE.LEVA; hranice <= HRANICE.HORNI; hranice++)\n {\n if( protinaHranici( predchazejiciBod[ (int)hranice ],\n prvni_bod[ (int)hranice ], hranice ))\n {\n Bod2D prusecik = nalezeniPruseciku( predchazejiciBod[ (int)hranice ], \n prvni_bod[ (int)hranice ], hranice);\n if ( hranice < HRANICE.HORNI )\n orezVrchol( prusecik, hranice +1);\n else orezanyPolygon.Body.Add( prusecik ); // mam ho orezany\n }\n }\n }\n\n==Autoři==\n\nTento text vypracovali studenti [http://www.inf.upol.cz Univerzity Palackého v Olomouci] katedry Matematické informatiky jako součást zápočtového úkolu do předmětu Počítačová geometrie.','/* Vlastní algoritmus */',0,'62.209.219.103','20050201235156','',0,0,0,0,0.811030208511,'20050201235156','79949798764843'); INSERT INTO cur VALUES (87,0,'Vyplňování','== Vyplňování oblastí ==\n\nCílem těchto algoritmů je vyplnit určitou uzavřenou oblast. Rozlišujeme dva základní způsobu popisu hranice oblasti:\n
    \n
  1. Geometricky určené hranice (pro vektorová zařízení)
  2. \n
  3. Hranice nakreslená v rastru (pro rastrová zařízení)
  4. \n
\n\nDruhy algoritmů pro vyplňování\n\n
  • řádkové vyplňování
  • \n
  • semínkové vyplňování
  • \n\n\n=== Popis ===\n\'\'\'Vyplňování geometricky určené hranice\'\'\'
    \n\nZákladní metodou je řádkové vyplňování. Každým řádkem rastru vedeme pomyslnou vodorovnou čáru a hledáme průsečíky s hranicí oblasti. Nalezené průsečíky se seřadí podle souřadnice x. Dvojice mezi lichým a sudým průsečíkem definují úsečku ležící uvnitř oblasti.\n
    [[Image:Linefill1.PNG]]
    \n\nNa jednoduché oblasti na obrázku si všimněte typických poloh rozkladového řádku a hraničních čar. Mnohoúhelník tvořící hranici je určen 7 vrcholy A až G. Hledání vnitřních úseček probíhá shora dolů. Vedle obrázku jsou vypsány hraniční úsečky, které daný řádek protíná.\n\nPrvní rozkladový řádek protíná celkem 4 hraniční čáry, takže dojde k nakreslení dvou úseček. Ty mají v tomto případě obě nulovou délku, neboť leží ve vrcholech C a G. Grafické systémy by měly nakreslit úsečku nulové délky jako jeden pixel.\n\nDruhý řádek je zpracován obdobně. Ve třetím řádku musí být vyloučena hrana DE, neboť má s rozkladovým řádkem nekonečně mnoho průsečíků. Zbylá čtveřice průsečíku opět určuje 2 vnitřní úsečky.\n\nProblém nastává na čtvrtém řádku, kde je nalezen lichý počet průsečíků. Tuto situaci způsobuje vrchol B. Standardním řešením tohoto problému je zkrácení hranice BC o jeden pixel zdola ve směru osy y. Toto zdánlivé rozpojení hranice nemá vliv na činnost algoritmu. Naopak se ukazuj, že systematické zkrácení všech hran vede ke snížení počtu průsečíků a nemá na funkčnost metody vliv. Další obrázek ukazuje, že po takové úpravě zbudou například na třetím řádku pouze dva průsečíky namísto nadbytečných čtyř.\n\n
    [[Image:Linefill2.PNG]]
    \n\nPokud se pracuje v rastru (snad vždy) a koncové body hraničních úseček jsou určeny celými čísly, může dojít k tomu, že při různých sklonech hraničních úseček nemusí při zkrácení zdola o jeden pixel vyjít x-ová souřadnice nového koncového bodu celočíselná. Proto není úplně vhodné úsečky při výpočtu zkracovat, ale při výpočtu průsečíků vynechávat ty, jež jsou v koncovém bodě hraniční úsečky. Řešení všech možných poloh řádků s hranicí tedy vyžaduje předzpracování jednotlivých hraničních úseček. Celkově popisuje metodu řádkového vyplňování algoritmus v sekci Algoritmizace.\n\nPro výpočet průsečíku lze použít parametrické rovnice úsečky. Úsečka mezi body A[xa,ya] a B[xb,yb] je X[x,y] = A + (B-A) • t, t je z <0,1>, x = ax + (bx-ax) • t, y = ay + (by-ay) • t.\nZ toho, že známe y (souřadnice zpracovávaného řádku) vypočítáme t = (y-ay)/(by-ay). \nDosazením t hned dostáváme x = ax + (bx-ax) (y-ay)/ (by-ay). Průsečík s úsečkou je platný pouze když t je z <0,1>, pokud vynecháváme průsečíky s koncovým bodem tak pouze když t je z <0,1).\n\nUvedená metoda lze použít i pro oblasti ohraničené libovolnou křivkou (nikoli jen mnohoúhelníkem), pouze se modifikuje část, jež počítá průsečíky. \n\n\'\'\'Rozšíření řádkového algoritmu – šrafování.\'\'\'
    \n\nŠrafování je rozšířeno především v technických aplikacích. Rozšíření algoritmu je poměrně jednoduché. V případě vodorovných šraf stačí změnit krok změny souřadnice z hodnoty 1 na m (m je přirozené číslo) a získáme oblast s vyplněnou vodorovnými šrafami s roztečí m. Při šrafování přerušovanou čarou je vhodné určit vztažný bod, vůči němu bude čárkování nanášeno, abychom docílili toho, že jednotlivé odpovídající si úseky čárkování na dvou čarách byly nad sebou. Za vztažný bod volíme buď počátek soustavy souřadnic, nebo jeden z vrcholů hranice.\n\nV praxi se však často uplatňuje šrafování pod obecným úhlem, než vodorovné. Metodu zkombinujeme ještě s transformací otáčení. Nejprve otočíme všechny hraniční úsečky oblasti o úhel -alfa. Na takto upravenou hranici použijeme běžný algoritmus vodorovného šrafování, s tím, že vy vypočítané vnitřní úseky před vykreslením otočíme zpět o úhel alfa.\n\n\n\'\'\'Semínkové vyplňování\'\'\'
    \n\nTento algoritmus se dá použít pouze pro rastrové zařízení.\nMějme dánu oblast ohraničenou nějakým uzavřeným polygonem. Pro určení této oblasti nám poté stačí určit jeden vnitřní bod této oblasti (tzv. startovací bod). Startovací bod může uživatel určit snadno pomocí myši.Ze znalosti vnitřního bodu pak snadno určíme, zda sousední body leží uvnitř oblasti nebo na hranici oblasti. Podle způsobu určování sousedních bodů máme dva způsoby vyplňování.\n\n
    [[Image:fill_48.PNG]]
    \n\nNa obrázku 1) je metoda používající čtyř sousedních bodů (tzv. čtyř-směrové vyplňování), na obrázku 2) je metoda používající osmi sousedních bodů (tzv. osmi-směrové vyplňování). Oblasti, které lze vyplnit čtyř-směrovým vyplňováním se nazývají čtyř-směrové oblasti. Oblasti, které lze vyplnit osmi-směrovým vyplňováním se nazývají osmi-směrové oblasti.\n\n=== Algoritmizace ===\n\nAlgoritmus semínkového vyplňování:\n
      \n
    1. Otestuj zda bod již nebyl vyplněn nebo neleží na hranici.\n
    2. Pokud ano skončí, pokud ne vyplň tento bod a urči všechny sousední body.\n
    3. Pro všechny sousední body znovu použij tento algoritmus.\n
    \nTento rekurzívní algoritmus není vhodný pro implementaci vzhledem k jeho paměťové náročnosti. Proto se používá modifikovaný algoritmus, který používá rekurze\npouze ve směrech nahoru a dolů a na řádcích používá sekvenční vyplnění pomocí\ncyklu dokud nenarazí na hranici.\n

    \n\nAlgoritmus řádkového vyplňování:\n
      \n
    1. Pro všechny hraniční úsečky ověř:\n
        \n
      1. je-li vodorovná, vynech ji (případně vykresli)\n
      2. uprav orientaci shora dolů\n
      3. aktualizuj mezní souřadnice hranice ymax a ymin\n
      \n
    2. Pro y od ymin do xmax proveď:\n
        \n
      1. nalezni průsečíky hraničních úseček s řádkem y, vynech ty, jež prochází koncovým bodem hraniční úsečky\n
      2. uspořádej všechny průsečíky podle souřadnice x.\n
      3. vykresli úseky mezi lichými a sudými průsečíky.\n
      \n
    3. Vykresli hranici oblasti je-li třeba.\n
    \n\n=== Kód v jazyce C# ===\n==== Pomocné objekty a metody ====\n\nRaster \n\n- třída pro uchování dat o rastru.\n\n- metody:\n
      \n
    • void SetPixel(int x,int y,Color c) - nastaví barvu pixelu na pozici x, y\n
    • Color GetPixel(int x,int y) - vrátí barvu pixelu na pozici x, y\n
    • void DrawLine(Point p1, Point p2,Color c) - nakreslí čáru do rastru\n
    • void DrawPoly(Point[] p,Color c) - nakreslí uzavřený polygon do rastru\n
    \nPomocná třída\n\n public class PointComparer: IComparer\n {\n int IComparer.Compare(object p1, object p2)\n {\n return Compare((Point)p1,(Point)p2);\n }\n public int Compare(Point p1, Point p2)\n {\n return p1.X.CompareTo(p2.X);\n }\n }\n\nPomocná metoda \n\n Point[] Rotate(Point[] p,double angle)\n {\n Point[] ret = new Point[p.Length];\n double c = Math.Cos(angle);\n double s = Math.Sin(angle);\n for (int i=0;i\n==== Vlastní algoritmy ====\n\n\'\'\'Semínkové vyplňování 4-směrové\'\'\'
    \n\n void SeedFill4(Point point, Color c)\n { \n if(point.X < 0 || point.Y < 0 || point.X >= raster.Width || point.Y >= raster.Height) return;\n Color barva = raster.GetPixel(point.X,point.Y);\n if(barva.R == c.R && barva.G == c.G && barva.B == c.B ) return;\n raster.SetPixel(point.X,point.Y,c);\n SeedFill4(new Point(point.X+1,point.Y),c);\n SeedFill4(new Point(point.X-1,point.Y),c);\n SeedFill4(new Point(point.X,point.Y+1),c);\n SeedFill4(new Point(point.X,point.Y-1),c);\n }\n\n\'\'\'Semínkové vyplňování 8-směrové\'\'\'
    \n\n void SeedFill8(Point point, Color c)\n { \n if(point.X < 0 || point.Y < 0 || point.X >= raster.Width || point.Y >= raster.Height) return;\n Color barva = raster.GetPixel(point.X,point.Y);\n if(barva.R == c.R && barva.G == c.G && barva.B == c.B ) return;\n raster.SetPixel(point.X,point.Y,c);\n SeedFill8(new Point(point.X+1,point.Y),c);\n SeedFill8(new Point(point.X-1,point.Y),c);\n SeedFill8(new Point(point.X,point.Y+1),c);\n SeedFill8(new Point(point.X,point.Y-1),c);\n SeedFill8(new Point(point.X+1,point.Y+1));\n SeedFill8(new Point(point.X-1,point.Y-1));\n SeedFill8(new Point(point.X-1,point.Y+1));\n SeedFill8(new Point(point.X+1,point.Y-1));\n }\n\n\nPoznámka: V našem programu je algoritmus řešen pomocí fronty, jelikož umožňuje lepší animaci vyplňování a zejména nedochází k přetečení programového zásobníku u vyplňování velkých oblastí.\n\n\'\'\'Řádkové vyplňování\'\'\'
    \n\n\n void FillPolygon(Point[] points, Color c, int hatchStep, double angle)\n {\n if (points.Length<2) return;\n int ymax = points[0].Y-1; // nastaveni pocatecnich hodnot\n int ymin = points[0].Y+1;\n int pointsCount = 0;\n Point[] p = new Point[points.Length*2+2];\n points = Rotate(points,-angle); // rotace bodu pro srafovani\n for (int i=0;ipoints[j].Y)\n {\n p[pointsCount++] = points[j];\n p[pointsCount++] = points[i];\n ymax = Math.Max(ymax,points[j].Y);\n ymin = Math.Min(ymin,points[i].Y);\n }\n else\n {\n p[pointsCount++] = points[i];\n p[pointsCount++] = points[j];\n ymax = Math.Max(ymax,points[i].Y);\n ymin = Math.Min(ymin,points[j].Y);\n }\n }\n int intersCount;\n Point[] inters = new Point[points.Length+1];\n for (int y=ymin;y<=ymax;y+=hatchStep)\n {\n intersCount=0;\n inters = new Point[points.Length+1];\n for (int l=0;l=0 && t<1)\n {\n float f = (p[l].X+(p[l+1].X-p[l].X)*t);\n int x = (int)Math.Round(f);\n inters[intersCount++] = new Point(x,y);\n }\n }\n inters = Rotate(inters,angle);\n Array.Sort(inters,0,intersCount,new PointComparer());\n for (int k = 0;k\n\n==Autoři==\n\nTento text vypracovali studenti [http://www.inf.upol.cz Univerzity Palackého v Olomouci] katedry Matematické informatiky jako součást zápočtového úkolu do předmětu Počítačová geometrie.','/* Vlastní algoritmy */',0,'158.194.92.42','20050111082705','',0,0,0,0,0.782249651282,'20050111082705','79949888917294'); INSERT INTO cur VALUES (88,0,'Promítání','== Základní promítání ==\n\nPromítání je transformace, která charakterizuje převod trojrozměrného objektu do dvojrozměrné reprezentace. Při promítání dochází ke ztrátě prostorové informace a tím i k možnému zkreslení názoru pozorovatele na skutečný tvar objektu. Proto jsou pro určité obory vybírány rùzné způsoby promítání a jsou doplňovány dalšími pravidly a postupy pro zvýšení reálného vjemu promítnutého objektu.\n\nObecně je promítání určeno středem (směrem) promítání a průmětnou. \nPro oba druhy promítání lze volit umístění (obvykle) rovinné průmětny v prostoru.\nRovinné projekce dělíme na dvě základní třídy - rovnoběžné(paralelní) a perspektivní.\n\n=== Rovnoběžné promítání === \n\nPokud je střed promítání nevlastní, mluvíme o rovnoběžném promítání a promítací přímky jsou určeny směrem promítání (všechny promítací paprsky mají stejný směr). Rovnoběžné promítání zachovává relativní velikost modelu. \n\n
    [[Image: promitani_rovnobezne.png]]
    \n\n=== Axonometrie === \n\nPatří mezi rovnoběžné promítání. Axonometrické promítání používá projekční roviny, které nejsou rovnoběžné s hlavními osami. \n\n
    [[Image: promitani_axonometrie.png]]
    \n\n=== Perspektivní promítání ===\n\nPokud je střed promítání vlastní, mluvíme o perspektivním promítání a promítací přímky procházejí tímto středem promítání (promítací paprsky vycházejí z jediného bodu). Perspektivní promítání respektuje optický model, který vyjadřuje lidské vidění reálného světa. Modeluje proporcionální změnu předmětů při vzrůstající vzdálenosti od pozorovatele. Poskytuje dobrý prostorový vjem na rovinné průmětně.\n\n
    [[Image: promitani_stredove.png]]
    \n\nRozlišujeme tři základní druhy perspektivního promítání:\n\nJednoúběžníková perspektiva – je určena jedním středem promítání.\n\n
    [[Image: promitani_perspektiva_1bodova.png]]
    \n\nDvouúběžníková perspektiva – je určena dvěma středy promítání.\n\n
    [[Image: promitani_perspektiva_2bodova.png]]
    \n\nTříúběžníková perspektiva – je určena třemi středy promítání.\n\n
    [[Image: promitani_perspektiva_3bodova.png]]
    \n\n=== Algoritmizace ===\nKaždý druh rovinného promítání charakterizuje určitá transformační matice 4 x 4 pro transformaci bodů [xs; ys; zs; 1] ve scéně na body [xp; yp; zp; 1] v projekční rovině (v homogenních souřadnicích). \n\nVlastní rovnoběžné a perspektivní promítání lze jednotně popsat dále uvedeným postupem:\n- posunutí počátku soustavy souřadnic do bodu scény\n- projekce bodu scény do projekční roviny\n- zpětné posunutí soustavy souřadnic do původní pozice\n\nPříslušné transformační matice:\n\n- matice posunutí soustavy souřadnic\n
    [[Image: Promitani_matice_posunuti.png]]
    \n\n- matice středového promítání\n
    [[Image: Promitani_matice_stredove.png]]
    \n\n- matice axonometrie\n
    [[Image: promitani_matice_axonometrie.png]]
    \n\n- matice jednoúběžníkové,dvouúběžníkové,tříúběžníkové projekce vzniknou vynásobením příslušné úbežníkové matice s promítací maticí (v programu použita matice středového promítání).Jednoúběžníková,dvouúběžníková a tříúběžníková matice \n
    [[Image: promitani_matice_perspektivy.png]]
    \n\n=== Kód v jazyce C# ===\n==== Pomocné objekty a metody ====\n\nVýpisy metod a objektů, které byly detailně popsány výše.\n\n\n public class Bod3D\n {\n private float[] souradnice; //pole pro uložení souřadnic\n public Bod3D()\n { souradnice=new float[3]{0,0,0}; }\n public Bod3D(float x,float y, float z)\n { souradnice=new float[3]{x,y,z}; }\n public float x {\n get { return this.souradnice[0]; }\n }\n public float y {\n get { return this.souradnice[1]; }\n }\n public float z {\n get { return this.souradnice[2]; }\n }\n public float[] Souradnice {\n get { return this.souradnice; }\n }\n public Bod3D NasobeniSkalarem (float f) {\n return new Bod3D(this.x*f,this.y*f,this.z*f); \n }\n public void Pricti(Bod3D b) {\n this.souradnice[0]+=b.x;this.souradnice[1]+=b.y;this.souradnice[2]+=b.z;\n }\n public float SkalarniSoucin(Bod3D vektor) {\n return souradnice[0]*vektor.souradnice[0]+\n souradnice[1]*vektor.souradnice[1]+\n souradnice[2]*vektor.souradnice[2]; \n }\n public Bod3D VektorovySoucin(Bod3D v) {\n return new Bod3D(souradnice[1]*v.souradnice[2]-souradnice[2]*v.souradnice[1],\n souradnice[2]*v.souradnice[0]-souradnice[0]*v.souradnice[2],\n souradnice[0]*v.souradnice[1]-souradnice[1]*v.souradnice[0]);\n }\n public Bod3D Normalizovany() {\n float len=(float)Math.Sqrt(this.SkalarniSoucin(this));\n return new Bod3D(souradnice[0]/len,souradnice[1]/len,souradnice[2]/len);\n }\n public static Bod3D operator + (Bod3D a,Bod3D b) {\n return new Bod3D(a.souradnice[0]+b.souradnice[0],\n a.souradnice[1]+b.souradnice[1],a.souradnice[2]+b.souradnice[2]);\n }\n public static Bod3D operator - (Bod3D a,Bod3D b) {\n return new Bod3D(a.souradnice[0]-b.souradnice[0],\n a.souradnice[1]-b.souradnice[1],a.souradnice[2]-b.souradnice[2]);\n }\n }\n\n\n\n public class Hrana\n {\n private int ibod1;private int ibod2;\n private bool orientace;\n public Hrana() {\n ibod1=0;ibod2=0;orientace=true;\n }\n public Hrana(int indexbodu1,int indexbodu2) {\n ibod1=indexbodu1;ibod2=indexbodu2;orientace=true;\n }\n public Hrana(int indexbodu1,int indexbodu2,bool klasickaorientace) {\n ibod1=indexbodu1;ibod2=indexbodu2;orientace=klasickaorientace;\n }\n public int indexbod1 {\n get { return ibod1; }\n set { ibod1=value; }\n }\n public int indexbod2 {\n get { return ibod2; }\n set { ibod2=value; }\n }\n public bool klasickaorientace {\n get { return orientace; }\n set { orientace=value; }\n }\n }\n\n\n\n public class Stena\n {\n public ArrayList hrany;\n public Stena(){\n hrany=new ArrayList(); \n }\n }\n\n\n\n\n public class Matice\n {\n private float [,] hodnoty;\n private int radku;private int sloupcu;\n public Matice(int pocetRadku,int pocetSloupcu){\n hodnoty=new float [pocetRadku,pocetSloupcu];\n radku=pocetRadku;\n sloupcu=pocetSloupcu;\n for(int i=1;i<=radku;i++)\n for(int j=1;j<=sloupcu;j++)\n hodnoty[i-1,j-1]=0f;\n }\n public void NastavRS(int radek,int sloupec,float hodnota){\n hodnoty[radek-1,sloupec-1]=hodnota; }\n public float VratRS(int radek,int sloupec){ \n return hodnoty[radek-1,sloupec-1]; }\n public int PocetRadku(){\n return radku; }\n public int PocetSloupcu(){\n return sloupcu; }\n public static Matice operator *(Matice m1, Matice m2)\n { if(m1.PocetSloupcu()==m2.PocetRadku())\n {\n Matice ret;\n ret=new Matice(m1.PocetRadku(),m2.PocetSloupcu());\n for (int i=1;i<=m1.PocetRadku();i++)\n for(int j=1;j<=m2.PocetSloupcu();j++){\n float x;x=0;\n for (int k=1;k<=m1.PocetSloupcu();k++)\n x+=m1.VratRS(i,k)*m2.VratRS(k,j);\n ret.NastavRS(i,j,x); \n }\n return ret;\n }else return null;\n }\n public static Bod3D operator *(Bod3D bod, Matice m2){\n Matice m1=new Matice(1,4);\n m1.NastavRS(1,1,(float)(bod.x));m1.NastavRS(1,2,(float)(bod.y));\n m1.NastavRS(1,3,(float)(bod.z));m1.NastavRS(1,4,1f);\n Matice x=m1*m2;\n return new Bod3D(x.VratRS(1,1)/x.VratRS(1,4),\n x.VratRS(1,2)/x.VratRS(1,4),x.VratRS(1,3)/x.VratRS(1,4)); \n }\n }\n\n\n==== Matice promítání ====\nPromítací matice pro popsané typy promítání.\n\n\n public class MaticePromitani\n {\n public MaticePromitani(){\n }\n private double StupenNaRadian(int stupen){\n return (double)(stupen*Math.PI/180);\n }\n public Matice Axonometrie(int azimut,int zenit){\n Matice pom;\n pom=new Matice(4,4);\n pom.NastavRS(1,1,(float)(-1f*(float)(Math.Sin(StupenNaRadian(azimut))))); \n pom.NastavRS(2,1,(float)((float)(Math.Cos(StupenNaRadian(azimut))))); \n pom.NastavRS(1,2,(-1f*(float)(Math.Cos(StupenNaRadian(azimut))) *\n (float)(Math.Cos(StupenNaRadian(zenit))) )); \n pom.NastavRS(2,2,(float)(-1f*(float)(Math.Sin(StupenNaRadian(azimut)))*\n (float)(Math.Cos(StupenNaRadian(zenit))))); \n pom.NastavRS(3,2,(float)((float)(Math.Sin(StupenNaRadian(zenit))))); \n pom.NastavRS(1,3,(float)((float)(Math.Cos(StupenNaRadian(azimut)))*\n (float)(Math.Sin(StupenNaRadian(zenit))))); \n pom.NastavRS(2,3,(float)((float)(Math.Sin(StupenNaRadian(azimut)))*\n (float)(Math.Sin(StupenNaRadian(zenit))))); \n pom.NastavRS(3,3,(float)((float) Math.Cos(StupenNaRadian(zenit))));\n pom.NastavRS(4,4,(float)(1f)); \n return pom; //puvodni\n /* Matice pom; pom=new Matice(4,4);//zjednodušená verze\n pom.NastavRS(1,1,(float)(-(Math.Cos(StupenNaRadian(azimut))))); \n pom.NastavRS(2,1,(float)(Math.Sin(StupenNaRadian(azimut)))); \n pom.NastavRS(1,2,(float)(-(Math.Sin(StupenNaRadian(azimut))))*\n (float)(Math.Sin(StupenNaRadian(zenit))));\n pom.NastavRS(2,2,(float)(-(Math.Cos(StupenNaRadian(azimut))))*\n (float)(Math.Sin(StupenNaRadian(zenit))));\n pom.NastavRS(3,2,(float)(Math.Cos(StupenNaRadian(zenit))));\n pom.NastavRS(4,4,(float)(1f)); \n return pom; */\n }\n public Matice Posunuti(Bod3D vektor){\n Matice pom;pom=new Matice(4,4);\n pom.NastavRS(1,1,1f);pom.NastavRS(2,2,1f);\n pom.NastavRS(3,3,1f);pom.NastavRS(4,4,1f);\n pom.NastavRS(4,1,-1f*vektor.x);\n pom.NastavRS(4,2,-1f*vektor.y);\n pom.NastavRS(4,3,-1f*vektor.z);\n return pom;\n }\n public Matice Stredove(float distance){\n Matice pom;pom=new Matice(4,4);\n pom.NastavRS(1,1,distance);pom.NastavRS(2,2,distance);\n pom.NastavRS(3,4,1f);pom.NastavRS(4,4,distance);\n return pom;\n }\n public Matice Pespektiva1(float distancez){\n Matice pom;pom=new Matice(4,4);\n pom.NastavRS(1,1,1f);pom.NastavRS(2,2,1f); \n pom.NastavRS(3,3,1f);pom.NastavRS(4,4,1f); \n pom.NastavRS(3,4,1/distancez); \n return pom;\n }\n public Matice Pespektiva2(float distancey,float distancez){\n Matice pom;pom=new Matice(4,4);\n pom.NastavRS(1,1,1f);pom.NastavRS(2,2,1f); \n pom.NastavRS(3,3,1f);pom.NastavRS(4,4,1f); \n pom.NastavRS(2,4,1/distancey); \n pom.NastavRS(3,4,1/distancez);\n return pom;\n }\n public Matice Pespektiva3(float distancex,float distancey,float distancez){\n Matice pom;pom=new Matice(4,4);\n pom.NastavRS(1,1,1f);pom.NastavRS(2,2,1f); \n pom.NastavRS(3,3,1f);pom.NastavRS(4,4,1f); \n pom.NastavRS(1,4,1/distancex); \n pom.NastavRS(2,4,1/distancey); \n pom.NastavRS(3,4,1/distancez); \n return pom;\n \n } \n }\n\n\n== Středové promítání na válcovou plochu ==\n\n=== Popis ===\n\nJde vlastně o středové promítání na válcovou plochu se středem v počátku soustavy souřadnic. \nBodem je proložena přímka procházející počátkem soustavy souřadnic a její průsečík s válcovou plochou je hledaným obrazem.\n\nPro vzor v o souřadnicích (x_1,y_1,z_1) platí tedy následující rovnice\n\nZ částečných rovnic přímky procházející počátkem soustavy souřadnic:\n\nx=t \\cdot x_1\n\ny=t \\cdot y_1\n\nz=t \\cdot z_1 (1)\n\na rovnice válcové plochy se středem v počátku soustavy souřadnic:\n\n\nx^2+y^2=r^2\n\n\nspočítáme parametr t\n\nt=\\frac{r}{\\sqrt{x_1^2+y_1^2}}\n\na po dosazení za parametr t do (1) dostáváme výsledný bod na válcové ploše.\n\n=== Algoritmizace ===\n\nPro každý bod zobrazovaného objektu najdeme pomocí jeho průsečík s válcovou plochou. Nově nalezený bod (obraz) nahradí svůj vzor a vazby mezi body, hranami a stěnami zůstávají zachovány. \nTakto získaný model poté můžeme libovolnou metodou promítnout na zobrazovací plochu.\n\n;Bod3D : Třída popisující bod\n;Cylinder : Třída popisující Válec a poskytující metody nutné k promítnutí modelu na plochu válce.\n;Model : Třída reprezentující stěnový model geometrického objektu\n\n=== Kód v jazyce C# ===\n\nPříklad řešení v jazyce C#.\n\n==== Pomocné objekty a metody ====\n\nUkázka možné implementace třídy Bod3D (pro naše potřeby postačí následující torzo)\n\n public class Bod3D\n {\n private float[] souradnice; //pole pro uložení souřadnic\n public Bod3D(float x,float y, float z)\n {\n this.souradnice= new float[3]{x,y,z};\n }\n ...\n }\n\n\nUkázka možné implementace třídy Cylinder (pro naše potřeby postačí následující torzo)\n\n public class Cylinder\n {\n private float radius;\n public Cylinder(float initRadius)\n {\n this.radius = initRadius;\n }\n ...\n }\n\n\nUkázka možné implementace metody Recording\n\n public Bod3D Recording(Bod3D mapped)\n {\n float x,y,z;\n x = this.radius*mapped.x/(float)(Math.Sqrt(Math.Pow(mapped.x,2)+Math.Pow(mapped.z,2)));\n y = this.radius*mapped.y/(float)(Math.Sqrt(Math.Pow(mapped.x,2)+Math.Pow(mapped.z,2)));\n z = this.radius*mapped.z/(float)(Math.Sqrt(Math.Pow(mapped.x,2)+Math.Pow(mapped.z,2)));\n return new Bod3D(x,y,z);\n }\n\n\n==== Vlastní algoritmus ====\n\nUkázka možné implementace metody CylindricalProjection\n\n public static Model CylindricalProjection(Cylinder c, Model model)\n {\n Model ret = new Model();\n for(int i=1;i<=model.body.Count;i++)\n {\n Bod3D vzor = (Bod3D)model.body[i];\n Bod3D obraz;\n obraz = c.Recording(vzor);\n ret.body.Add(i,obraz); \n }\n ret.hrany = model.hrany;\n ret.steny = model.steny;\n return ret;\n }\n\n\n== Středové promítání na kulovou plochu ==\n\n=== Popis ===\n\nJde vlastně o středové promítání na kulovou plochu se středem v počátku soustavy souřadnic. \nBodem je proložena přímka procházející počátkem soustavy souřadnic a její průsečík s kulovou plochou je hledaným obrazem.\n\nPro vzor v o souřadnicích (x_1,y_1,z_1) platí tedy následující rovnice\n\nZ částečných rovnic přímky procházející počátkem soustavy souřadnic:\n\nx=t \\cdot x_1\n\ny=t \\cdot y_1\n\nz=t \\cdot z_1 (1)\n\na rovnice kulové plochy se středem v počátku soustavy souřadnic:\n\n\nx^2+y^2+z^2=r^2\n\n\nspočítáme parametr t\n\nt=\\frac{r}{\\sqrt{x_1^2+y_1^2+z_1^2}}\n\na po dosazení za parametr t do (1) dostáváme výsledný bod na kulové ploše.\n\n=== Algoritmizace ===\n\nPro každý bod zobrazovaného objektu najdeme pomocí jeho průsečík s kulovou plochou. Nově nalezený bod (obraz) nahradí svůj vzor a vazby mezi body, hranami a stěnami zůstávají zachovány. \nTakto získaný model poté můžeme libovolnou metodou promítnout na zobrazovací plochu.\n\n;Bod3D : Třída popisující bod\n\n;Sphere : Třída popisující kouli a poskytující metody nutné k promítnutí modelu na kulovou plochu.\n;Model : Třída reprezentující stěnový model geometrického objektu\n\n=== Kód v jazyce C# ===\n\nPříklad řešení v jazyce C#.\n\n==== Pomocné objekty a metody ====\n\nUkázka možné implementace třídy Bod3D (pro naše potřeby postačí následující torzo)\n\n public class Bod3D\n {\n private float[] souradnice; //pole pro uložení souřadnic\n public Bod3D(float x,float y, float z)\n {\n this.souradnice= new float[3]{x,y,z};\n }\n ...\n }\n\n\nUkázka možné implementace třídy Sphere (pro naše potřeby postačí následující torzo)\n\n public class Sphere\n {\n private float radius;\n public Sphere(float initRadius)\n {\n this.radius = initRadius;\n }\n ...\n }\n\n \nUkázka možné implementace metody Recording\n\n public Bod3D Recording(Bod3D mapped)\n {\n float aux = this.radius/(float)(Math.Sqrt(Math.Pow(mapped.x,2)+Math.Pow(mapped.y,2)+\n Math.Pow(mapped.z,2))); \n float x,y,z;\n x = mapped.x*aux;\n y = mapped.y*aux;\n z = mapped.z*aux;\n return new Bod3D(x,y,z);\n }\n\n\n==== Vlastní algoritmus ====\n\nUkázka možné implementace metody SphericalProjection\n\n public static Model SphericalProjection(Sphere s, Model model)\n {\n Model ret = new Model();\n for(int i=1;i<=model.body.Count;i++)\n {\n Bod3D vzor = (Bod3D)model.body[i];\n Bod3D obraz;\n obraz = s.Recording(vzor);\n ret.body.Add(i,obraz); \n }\n ret.hrany = model.hrany;\n ret.steny = model.steny;\n return ret;\n }\n\n\n==Autoři==\n\nTento text vypracovali studenti [http://www.inf.upol.cz Univerzity Palackého v Olomouci] katedry Matematické informatiky jako součást zápočtového úkolu do předmětu Počítačová geometrie.','',20,'XLojzax','20050218093001','',0,0,0,0,0.946961455022,'20050218093001','79949781906998'); INSERT INTO cur VALUES (89,0,'Viditelnost','== Rastrové algoritmy viditelnosti ==\n\nCílem článku je podat informační povídání o \nnejpoužívanějších algoritmech pro řešení viditelnosti objektů při\njejich rasterizaci.\n\nČlánek pojednává o postupech nazývaných \"Z-Buffer\" a \"Malířův Algoritmus\"\n\nUkázky algoritmů jsou napsány v jazyce C#\n\n=== Popis ===\n\n==== Z-BUFFER ====\n\nZákladem metody je použití paměti hloubky (z-buffer) která tvoří dvojrozměrné pole , jehož rozměry jsou totožné s rozměry zobrazovacího okna.Každá položka paměti obsahuje z toho bodu který leží nejblíže pozorovateli a jehož průmět leží v odpovídajícím pixelu v rastru\n\n===== ALGORITMUS =====\n\n1. Vyplň obrazovou paměť barvou pozadí\n\n2. Vyplň paměť hloubky hodnotou (-\\infty)\n\n3. Každou plochu rozlož na pixely a pro každý její pixel [x_i,y_i] stanov hloubku z_i\n\n4. Má li zi větší hodnotu než položka [x_i,y_i] v z-bufferu pak\n a)obarvi pixel [x_i,y_i] v obrazové paměti barvou této plochy\n b)u položky [x_i,y_i] v z-bufferu aktualizuj hodnotu z_i\n\nVýhody:\n- Vysoká rychlost\n- Snadná implementace\n- Správné řešení najde v každém případě\n- hardwarová implementace\n\nNevýhody\n- Nároky na paměť jež algoritmus klade\n \n
    [[Image:Zbmin.PNG]]
    \n
    Princip fungování algoritmu Z-BUFFER
    \n\n==== Malířův Algoritmus ====\nZaloženo na myšlence vykreslování všech ploch postupně odzadu dopředu, přes objekty v pozadí se kreslí objekty v pozadí.\nInspirováno představou práce malíře který na podkladovou barevnou vrstvu nanáší dal\nNejprve nalezneme pro každou plochu její nejmenší souřadnici z_min , a podle této plochy iniciálně uspořádám.\nprvní plocha v seznamu je označena jako aktivní a je podrobena několika testům překrývání s ostatními plochami a pokud lze po nich rozhodnout že leží za všemi ostatními je vykreslena a vyřazena ze seznamu.\nV opačném případě dojde v seznamu k výměně aktivní plochy s plochou u které dopadly všechny testy negativně.\n\n===== Nejpužívanější testy překrývání =====\n\n1.z1_max[[Image:Nehodicisemalir.PNG]]\n
    Ukázka konfliktni pozice při níž může dojít u malířova algoritmu ke špatnému zobrazení
    \n
    [[Image:Zacyklenimalir.PNG]]
    \n
    Ukázka situace která může vést k zacyklení malířova algoritmu
    \nNa tyto situace se můžemě pokusit reagovat rozdělením ploch na menší části,tímto ale klesá efektivita algoritmu.\n\n=== Algoritmizace ===\n\nPopis vlastního algoritmu. Veškeré objekty, metody a pochody \'\'\'musí\'\'\' být do detailu popsány.\n\n==== Aspekty naši implementace ====\n===== Malířův algoritmus =====\nV naši implementaci není ošetřen případ kdy dochází k protnutí dvou ploch ,ani případ vzájemného zacyklení ploch\n\n===== ZBuffer algoritmus =====\nAlgoritmus by si měl poradit se všemi vzájemnými polohami ploch nicméně se může doppouštět chybného zobrazování v případech, kdy jsou zobrazované plochy dosti blízko sebe.\nToto je způsobeno numerickou chybou jež vzniká při zaokrouhlování výpočtu vzdálenosti vykreslovaných bodů od pozorovatele.\n\n==== Kód v jazyce C# ====\n\nPříklad řešení v jazyce C#.\n===== Z-Buffer =====\nŘešení algoritmu Z-Buffer se skrývá v třídě ZBuffering.\nNejprve se inicializuje pole představující jednotlivé vykreslované body na implicitní hodnotu\n\n\n\n public void InicilizujPole()\n {\n // inicializuji pole a vyplni jej pocatecni hodnotou\n barva = new Color[sirka, vyska];\n hloubka = new float[sirka, vyska];\n Color c = new Color();\n c = Color.White;//Color.WhiteSmoke;\n for(int indX = 0; indX < barva.GetLength(0); indX++)\n {\n for(int indY = 0; indY < barva.GetLength(1); indY++)\n {\n barva[indX,indY] = c;\n hloubka[indX,indY] = maxReal;\n }\n }\n }\n\n\nPoté tyto inicializované barvy přebarvím barvami bodů jež mají nejmenší vzdálenost od pozorovatele\n\n public void Vypocitej(Model model)\n {\n float dzx, dzy, zxx;\n PointF horniBod, dolniBod;\n Point horniBodP, dolniBodP;\n float[] normV;\n Color c = new Color();\n Bod3D[] polynom;\n // pro kazdou stenu testuji pixel a nastavuji jeho barvu a hloubku\n for(int stena = 1; stena <= model.steny.Count; stena++) \n {\n // mixuji barvu\n c = Color.FromArgb((100+stena*10)%255, (50+stena*33)%255,stena*50)%255);\n polynom = this.DejPolynomSteny(stena, model);\n normV = ZjistiNormalVektor((Bod3D)polynom.GetValue(0), (Bod3D) polynom.GetValue(1),(Bod3D)polynom.GetValue(2));\n dzx = - (normV[0]/normV[2]); \n dzy = - (normV[1]/normV[2]); //pro bod [x + 1,y ]\n // zjistim si rohy testovane plochy\n horniBod = new PointF(polynom[0].x, polynom[0].y);\n dolniBod = new PointF(polynom[0].x, polynom[0].y);\n for(int i = 1; i < polynom.Length; i++)\n {\n if(polynom[i].x < horniBod.X)\n { \n horniBod.X = (polynom[i]).x;\n }\n if(polynom[i].y > horniBod.Y)\n { \n horniBod.Y = polynom[i].y;\n }\n if(polynom[i].x > dolniBod.X)\n { \n dolniBod.X = polynom[i].x;\n }\n if(polynom[i].y < dolniBod.Y)\n { \n dolniBod.Y = polynom[i].y;\n }\n }\n //zacinam projizdet zjistenou miniplosku\n // vypocitam hloubku (zi) pro bod [indX,indY]\n // a to pomoci bodu A = [x, y, z] a norm. vektoru\n horniBodP = this.PrevedBodNaPixel(horniBod.X, horniBod.Y);\n dolniBodP = this.PrevedBodNaPixel(dolniBod.X, dolniBod.Y);\n Point[] points;\n PointF[] pointsF;\n for(int y = horniBodP.Y; y >= dolniBodP.Y; y--)\n {\n pointsF = this.DejPrunikyVBodech(model, stena, PrevedPixelNaBod(0, y).Y);\n points = this.PrevedBodyNaPixely(pointsF);\n for(int p = 0; p < points.Length -1; p+=2)\n {\n for(int x = points[p].X; x <= points[p+1].X; x++)\n {\n zxx = VypocitejZ2(polynom[0], normV, this.PrevedPixelNaBod(x, 0).X, pointsF[p].Y);\n if(zxx < hloubka[x,y])\n {\n hloubka[x,y] = zxx;\n barva[x,y] = c;\n }\n }\n }\n }\n }\n}\n\n\n===== Malířův Algoritmus =====\nAlgoritmus k setřídění stěn používaný malířovým algoritmem\n\n public void SetridSteny(Model model)\n {\n int looping, internal_looping;\n float aktualni_stena_zmin, porovnavana_stena_zmin;\n int pocet_setridenych_sten, index_porovnavane_steny;\n bool vysledek_testu, stena_vlozena, zamena_poradi;\n Stena aktualni_stena, porovnavana_stena;\n ArrayList looping_check;\n looping_check=new ArrayList();\n // setrideni sten podle jejich minimalni Z souradnice\n setridene_steny.Add(model.steny[1]);\n pocet_setridenych_sten=1;\n index_porovnavane_steny=2;\n if (model.steny.Count > 1)\n {\n // vkladani dalsich sten dle jejich Z-min\n for (looping=0; looping < model.steny.Count; looping++)\n {\n // resetovani looping checku (nastaveni na 0)\n looping_check.Add((int)0);\n // pro kazdou stenu najdi jeji Z-min\n aktualni_stena=((Stena)model.steny[index_porovnavane_steny]);\n aktualni_stena_zmin=MinimalniZSouradnice(model,aktualni_stena);\n // vlozeni/pridani na konec\n stena_vlozena=false;\n for (internal_looping=0; internal_looping < pocet_setridenych_sten; internal_looping++)\n {\n // zjisti Z-min dane zarazene steny \n porovnavana_stena=((Stena)setridene_steny[internal_looping]);\n porovnavana_stena_zmin=MinimalniZSouradnice(model,porovnavana_stena);\n if (aktualni_stena_zmin < porovnavana_stena_zmin)\n {\n // vlozeni do seznamu\n stena_vlozena=true;\n setridene_steny.Insert(internal_looping,model.steny[index_porovnavane_steny]);\n }\n }\n if (!(stena_vlozena))\n {\n // pridani na konec\n setridene_steny.Add(model.steny[index_porovnavane_steny]);\n }\n pocet_setridenych_sten++;\n index_porovnavane_steny++;\n if (index_porovnavane_steny > model.steny.Count) break;\n }\n }\n // nyni jsou steny v \"setridene_steny\" srovnany dle jejich rostouci z-min\n if (pocet_setridenych_sten > 1)\n {\n for (looping=0; looping+1 < pocet_setridenych_sten; looping++)\n {\n zamena_poradi=false;\n aktualni_stena=((Stena)setridene_steny[looping]);\n porovnavana_stena=((Stena)setridene_steny[looping+1]);\n //porovnavaci testy na pripadnou zmenu poradi sten\n // nejprve porovname Z souradnice\n vysledek_testu=PorovnaniZSouradnic(model,aktualni_stena,porovnavana_stena);\n if (!(vysledek_testu))\n {\n // porovnavame X a Y souradnice -- TEST [A]\n vysledek_testu=PorovnaniXSouradnic(model,aktualni_stena,porovnavana_stena);\n if (!(vysledek_testu))\n {\n vysledek_testu=PorovnaniYSouradnic(model,aktualni_stena,porovnavana_stena);\n if (!(vysledek_testu))\n {\n // vsechny vrcholy jedne steny lezi POD stenou druhe -- TEST [B]\n vysledek_testu=PorovnaniStena1PodStenou2(model,aktualni_stena,porovnavana_stena);\n if (!(vysledek_testu))\n {\n // vsechny vrcholy druhe steny lezi NAD stenou prvni -- TEST [C]\n vysledek_testu=PorovnaniStena2NadStenou1(model,aktualni_stena,porovnavana_stena);\n if (!(vysledek_testu))\n {\n // TEST [D] - prumet\n zamena_poradi=true;\n } \n }\n } \n }\n }\n if (zamena_poradi)\n {\n /* porovnani looping_check - porovnavana stena nemuze byt\n posunovana vpred (pred aktualni), pokud byla jiz nekdy posunovana dozadu\n */\n if (((int)looping_check[looping+1]) == 1) zamena_poradi=false;\n if (zamena_poradi)\n {\n setridene_steny[looping]=porovnavana_stena;\n setridene_steny[looping+1]=aktualni_stena;\n looping=((int)looping_check[looping]);\n looping_check[looping]=looping_check[looping+1];\n looping_check[looping+1]=looping;\n looping=-1;\n }\n }\n }\n\n\n==Autoři==\n\nTento text vypracovali studenti [http://www.inf.upol.cz Univerzity Palackého v Olomouci] katedry Matematické informatiky jako součást zápočtového úkolu do předmětu Počítačová geometrie.','/* Algoritmizace */',0,'213.235.83.56','20050301173453','',0,0,0,0,0.124700499291,'20050301173453','79949698826546'); INSERT INTO cur VALUES (90,0,'Stínování','== Stínování ==\n\nPod pojmem stínování rozumíme vykreslování barevných objektů různými odstíny barev. Stínování pomahá člověku ve vnímání\nkřivosti a zaoblení ploch a snaží se dosáhnout co nejvěrnějšího vzhledu prostorových objektů. \nSamotnou barvu bodu lze vypočítat na základě znalosti směru paprsku, normál plochy, umístění zdrojů světla a dalších faktorů.\n\nExistuje několik neznámějších algoritmů stínování\n\n
  • konstantní stínování
  • \n
  • Gouraudovo stínování
  • \n
  • Phongovo stínování
  • \n\n\n\n=== Popis ===\n\n\'\'\'Konstatní stínování\'\'\'
    \n\nNejjednodušší a zároveň velmi rychlá metoda, jak vystínovat prostorový objekt. Převážně se používá pro zobrazování rovinných\nploch, nebo - v případě potřeby velmi rychlého vystínování - obecných ploch aproximovaných rovinnými záplatami. \n\nSamotný algoritmus počítá s tím, že každá plocha má pouze jednu normálu. Podle normály je vypočítána barva, která je následně\npřiřazena všem pixelům dané plochy. \n\nNevýhodou tohoto stínování je zjevná vlastnost, že celá plocha má naprosto stejnou barvu. Navíc pak není do světelného modelu \nzahrnuto zrcadlové osvětlení (odlesky na zobrazovaném objektu, které mohou mít jinou barvu než jaké má objekt).\n\n
    [[Image:cutconst.png]]
    \n\nPro tvorbu mnohostěnů je však toto stínovaní ve většině případů postačující. \n \n
    [[Image:teeconst.png]]
    \n\nU obecnějších těles ale konstantní stínování\nspíše kazí celkový dojem objektu, protože spíše ukazuje, že celý jeho povrch je aproximován skupinou plošek.\n\n\n\'\'\'Gouraudovo stínování\'\'\'
    \n\nTato metoda byla navržena pro objekty, které jsou tvořeny množinou rovinných ploch a byla poprvé uvedena H. Gouraudem.\n\nJejí princip spočívá v tom, že pokud budeme znát barevné odstíny všech vrcholů ploch tohoto objektu (tj. normál, ze kterých\nse pak dá barva dopočítat), pak lze tyto vrcholy propojit a barvy jednotlivých pixelů této úsečky pak vypočítat interpolací.\nVe chvíli, kdy máme obarvené všechny hrany, které ohraničují danou plochu, pak stačí vybrat jednu z os, po které budeme \ntuto plochu procházet a linearní interpolací zjistíme barvu pixelů, které se nachazejí na úsečce ležící mezi dvěma body na hranách plochy.\nTím jsme celou plochu pokryli barvou. \n\n
    [[Image:cutgoraund.png]]
    \n\nGouraudova metoda zajišťuje plynulé stínování křivých povrchů tak, že aproximace povrchů ploškami není zřetelná. \n\n
    [[Image:teegoraund.png]]
    \n\nPřesto ani tento způsob stínování neposkytuje zcela věrný obraz reálných objektů - interpolace samotného odstínu barvy totiž nemůže způsobit\nmístní zvýšení jasu na plošce, která nahrazuje oblinu kolmou na dopadající světelný paprsek, stejně jako nemůže kvalitně vytvořit\nodlesky způsobené odraženým světlem. \nDá se říci, že tato metoda zahlazuje barevné rozdíly u místních nerovností povrchu.\n\n\n\'\'\'Phongovo stínování\'\'\'
    \n\nTato metoda je určena ke spojitému stínování těles, jejichž povrch je tvořen množinou rovinných ploch. \nJejím autorem je Bui-Tuong Phong.\n\nPro daný výpočet je třeba, stejně jako u Gouraudova stínování, nejprve určit normálové vektory ve vrcholech stínované plochy.\nZde však nejsou vypočteny barevné odstíny v těchto vrcholech, ale jsou použity k interpolaci normálových vektorů v ostatním bodech plošky.\nSoučasně s rozkladem plochy na pixely jsou vypočítávány normály ve vnitřních bodech plochy a pomocí nich je ze světelného modelu určen\nodstín barvy každého pixelu.\n\n\n
    [[Image:cutphong.png]]
    \n\nOproti Gouraudovu stínování jsou zřetelné barevné odlesky světel na plochách.\n\n
    [[Image:teephong.png]]
    \n\nTento způsob zajišťuje hladké vystínování ploch s korektně vykreslenými odlesky od světel\n\n\n\n=== Algoritmizace ===\n\nAlgoritmus konstantního stínování:\n
      \n
    1. Vypočteme normálové vektory pro všechny plošky ze kterých je objekt složen\n
    2. Pro každou plošku určíme odchylku normálového vektoru a vektoru paprsků světelného zdroje. Čím více je ploška ke světelnému zdroji přivrácena, tím více ji světelný zdroj osvětluje\n
    3. Podle odchylky přiřadíme každé plošce jednu barvu se kterou bude vyplněna\n
    \nTento algoritmus je vhodný pro rychlé zobrazování objektů (např. pro náhled při tvorbě objektů), ale nehodí se pro\nvytvoření efektivně vystínovaného a vyhlazeného objektu.\n

    \n\nAlgoritmus Gouraudova stínování:\n
      \n
    1. Vypočteme normálové vektory pro všechny plošky ze kterých je objekt složený\n
    2. Pro každý vrchol spočítáme normálový vektor v tomto vrcholu jako průměr normálových vektorů plošek, které se v tomto vrcholu stýkají\n
    3. Určíme odchylku normálových vektorů ve vrcholech a vektoru paprsků světelného zdroje\n
    4. Podle této odchylky přiřadíme bodům ve vrcholech plošek barvu\n
    5. Nyní provedeme interpolaci barvy pro body jednotlivých plošek takto:\n
        \n
      1. Nejprve provedu interpolaci barvy po hranách V_1V_2 a V_4V_3. Dostanu barvu v bodech V_A a V_B\n
      2. Nyní provedu interpolaci barvy na hraně V_AV_B a dostanu výslednou barvu v bodě V_P\n
      \n
    \n\n
    [[Image:gouraud.png]]
    \nTento algoritmus je pomalejší než konstantní stínování, ale umožňuje dobře zobrazit i hladké objekty. \nVzhledem k tomu, že je v dnešní době již dobře zpracován a není příliš složitý, používá se dnes jako nejčastější\nmetoda stínování.\nBohužel si nedokáže korektně poradit s odlesky světla.\n

    \n\nAlgoritmus Phongova stínování:\n
      \n
    1. Provedu výpočet normál pro všechny plošky, ze kterých je objekt složen a stejně jako v Gouraudově stínování výpočet normál ve vrcholech\n
    2. Podobně jako jsme v Gouraudově stínování prováděli interpolaci barev pro jednotlivé body plošky, nyní provádíme interpolaci normály pro jednotlivé body plošky\n
    3. Jakmile mám pro všechny body na plošce určeny normály, určím odchylky těchto normál od vektoru světelných paprsků\n
    4. Podle těchto odchylek přiřadím každému bodu jeho příslušnou barvu\n
    \nTento algoritmus je početně náročnější a také nejpomalejší. Dosahuje však nejlepšího zobrazení daného objektu. \n

    \n\n=== Kód v jazyce C# ===\n==== Pomocné objekty a metody ====\n\n== InterpolVals ==\n\n- struktura pro uchování dat o vektorech a jejich vlastnostech.\n\n== Face ==\n\n- třída uchovávající informaci o jednom trojúhelníku.\n\n== LinearInterpolator ==\n\n- třída provádějící lineární interpolaci seznamu hodnot přes plochu trojúhelníku.\n\n- metody:\n
      \n
    • void Init(InterpolVals[] triple) // Inicializuje interpolátor.Vypočítá potřebné přírustky atd.
    • \n
    • static InterpolVals[] SortByY(InterpolVals[] tripl) // Setřídí tři vektory podle y-nové souřadnice.
    • \n
    • static void Draw(SetPixelDelegate setPixel, object tag) //Vykreslit trojúhelník. Bod se nekreslí přímo, ale pro každý získaný bod je vyvolán delegát.
    • \n
    \n\n== ShadingRenderSystem ==\n\n- třída starající se o samotné stínovaní zmíněnými metodami\n\n- Pomocná metoda:\n\n\nVypočíta barvu bodu podle jeho polohy, normály a polohy světel (a vlastností povrchu). Phongův osvětlovací model.\n /// Polohový vektor bodu (v prostoru), ve kterém se má určit barva.\n /// Normálový vektor (plochy) v bodě pos.\n /// Barva povrchu.\n /// Intenzita zrcadlové složky.\n /// Barvu v zadaném bodě.\n\n Color PhongLit(Vector pos, Vector normal, Color materialDifuse, double specular)\n {\n double jas=0;//Jas aktualniho svetla\n double[] celkovyJas=new double[3];//RGB, soucet pres vsechny svetla\n celkovyJas.Initialize();//Vynulovat\n double scalar;\n Vector litDir;//Vektor, urcujici smer ze svetla do zadaneho bodu\n Vector reflxDir;//Vektor odrazeneho paprsku\n foreach (Light l in Scene.Lights)//Pro vsechny svetla\n {\n if (l.IsOff) continue;\n litDir= (pos - l.Position*transform);\n litDir.Normalize();\n //litdir je smer paprsku ze svetla (jednotkovy vektor) dopadajici na pozici vertexu\n scalar=litDir*normal;//Skalarni soucin vektoru svetla a normaly\n if (scalar<0) jas-=scalar;//Difuzni slozka je primo umerna cosinu odchylky L a N\n else jas=0;//Odvracena face \n reflxDir= normal * (2*scalar) - litDir;\n //Vektor symetricky podle normaly povrch. Odrazeny paprsek\n scalar=-reflxDir.Z; \n //Skalarni soucin odrazeneho paprsku s vektorem pohledu, ktery je [0,0,1]\n //Vektor pohledu je [0,0,1], protoze se cela scena transformuje podle polohy \n //kamery a prumetna je rovina XY\n if (scalar<0) jas+=Math.Pow(-scalar, specularExp)*specular;\n //Intenzita zrcadlove slozky roste exponencionalne \n celkovyJas[0]+=jas* (l.Color.R + materialDifuse.R) * 0.5; \n //Pricte prumer barvy svetla a povrchu vynasobeneho \n celkovyJas[1]+=jas* (l.Color.G + materialDifuse.G)* 0.5; \n //intenzitou k celkovemu souctu \n celkovyJas[2]+=jas* (l.Color.B + materialDifuse.B)* 0.5;\n }\n for (int f=0; f<3; f++)\n {\n if (celkovyJas[f]>255) celkovyJas[f]=255;//Ohlida preteceni\n }\n return Color.FromArgb((int)celkovyJas[0], (int)celkovyJas[1], \n (int)celkovyJas[2]); \n }\n\n\n==== Vlastní algoritmy ====\n\n\'\'\'Konstantní stínování\'\'\'
    \n \n\nVykreslí jednu Face. \n /// Kam se má kreslit.\n /// Vektory plošky transformované a promítnuté. \n // Jsou to souřadnice na obr. Z je původní po transformaci.\n /// Vektory plošky transformované (ale ještě ne promítnuté).\n /// Transformované normálové vektory.\n /// Původní ploška.\n\n void DrawTripleConst(Graphics g, Vector[] v2d, Vector[] tPos, Vector[] tNormals, Face face)\n {\n mat=face.Material;\n Vector normala=(tNormals[0] + tNormals[1] + tNormals[2]) * 0.333;\n //Vezme se prumerna normala vsech tri normal torjuhelnicku.\n Vector stred=(tPos[0] + tPos[1] + tPos[2]) * 0.333;\n //Stejne tak se vezme stred plosky\n Color c=PhongLit(stred, normala, face.Material.Difuse, face.Material.SpecularDouble);\n //Vypocita se barva\n Brush br=new SolidBrush(c);\n g.FillPolygon(br, new Point[] { (Point)v2d[0], (Point)v2d[1], (Point)v2d[2]});\n br.Dispose();\n }\n\n\n\n\n\'\'\'Gouraudovo stínování\'\'\'
    \n\n\nVykreslí jeden bod.\n /// Souřadnice na obrazovce.\n /// Souřadnice na obrazovce.\n /// Aktuální hodnoty interpolovaných hodnot.\n /// Pomocná proměnná (nepoužívá se).\n\n void GouraudSetPixel(double x, double y, InterpolVals actualVals, object tag)\n {\n int r=(int)actualVals.Vals[0];//Prevede RGB z double na inty\n int g=(int)actualVals.Vals[1];\n int b=(int)actualVals.Vals[2];\n if (r<0) r=0;if (r>255) r=255;//Osetreni preteceni\n if (g<0) g=0;if (g>255) g=255;\n if (b<0) b=0;if (b>255) b=255;\n int ix=(int)x;\n int iy=(int)y;\n if (ix>=0 && iy>=0 && ixKam se má kreslit.\n /// Vektory plošky transformované a promítnuté. \n // Jsou to souřadnice na obr. Z je původní po transformaci.\n /// Vektory plošky transformované (ale ještě ne promítnuté).\n /// Transformované normálové vektory.\n /// Původní ploška.\n\n void DrawTripleGouraud(Graphics g, Vector[] v2d, Vector[] tPos, Vector[] tNormals, Face face)\n {\n mat=face.Material;\n double[] colors;//Barva ve vrcholu plosky (face). \n Color c;\n InterpolVals[] vals=new InterpolVals[3];\n for (int i=0; i<3; i++)//Pro vsechny tri vrcholy\n {\n c=PhongLit(tPos[i],tNormals[i],face.Material.Difuse,face.Material.SpecularDouble);\n //Vypocte se svetlo\n colors=new double[3];\n colors[0]=c.R;\n colors[1]=c.G;\n colors[2]=c.B;\n vals[i]=new InterpolVals(v2d[i], colors);//Interpoluji se tri cisla (R,G,B)\n }\n LinearInterpolator.Init(vals);\n LinearInterpolator.Draw(new SetPixelDelegate(GouraudSetPixel), g); \n }\n\n\n\n\'\'\'Phongovo stínování\'\'\'
    \n\n\n\nVykreslí jeden bod.\n /// Souřadnice na obrazovce.\n /// Souřadnice na obrazovce.\n /// Aktuální hodnoty interpolovaných hodnot.\n /// Pomocná proměnná (nepoužívá se).\n\n void PhongSetPixel(double x, double y, InterpolVals actualVals, object tag)\n {\n Vector pos=new Vector(actualVals.Vals[0], actualVals.Vals[1] , actualVals.Vals[2]);\n //Bod, ve kterem se ma vypocita barva\n Vector nrm=new Vector(actualVals.Vals[3], actualVals.Vals[4] , actualVals.Vals[5]);\n //Normala v tomto bode\n Color c=PhongLit(pos, nrm, mat.Difuse, mat.SpecularDouble);//Vypocita svetlo\n int ix=(int)x;\n int iy=(int)y;\n if (ix>=0 && iy>=0 && ixKam se má kreslit.\n /// Vektory plošky transformované a promítnuté. \n // Jsou to souřadnice na obr. Z je původní po transformaci.\n /// Vektory plošky transformované (ale ještě ne promítnuté).\n /// Transformované normálové vektory.\n /// Původní ploška.\n\n void DrawTriplePhong(Graphics g, Vector[] v2d, Vector[] tPos, Vector[] tNormals, Face face)\n {\n mat=face.Material;//PhongSetPixel potrebuje material, tak se pradava pres glob. \n // promennou (slo by to i pres Tag, ale tohe je rychlejsi\n InterpolVals[] vals=new InterpolVals[3];\n for (int i=0; i<3; i++)\n {\n //Interpoluje se 6 cisel. Souradnice trojuhelnicku a souradnice normaly.\n vals[i]=new InterpolVals(v2d[i], \n new double[] {tPos[i].X, tPos[i].Y, tPos[i].Z, tNormals[i].X, \n tNormals[i].Y, tNormals[i].Z});\n }\n LinearInterpolator.Init(vals);\n LinearInterpolator.Draw(new SetPixelDelegate(PhongSetPixel), g);\n }\n\n\n\n\n==Autoři==\n\nTento text vypracovali studenti [http://www.inf.upol.cz Univerzity Palackého v Olomouci] katedry Matematické informatiky jako součást zápočtového úkolu do předmětu Počítačová geometrie.','/* LinearInterpolator */',16,'Pavelk','20050113174129','',0,0,0,0,0.831895919904,'20050113174129','79949886825870'); INSERT INTO cur VALUES (91,0,'Raytracing','== Ray-tracing ==\n\nJedná se o vysoce výpočetně náročnou metodu počítačové vizualizace, pomocí které lze dosáhnout velmi realistického zobrazení modelu. Spočívá v postupném stopování paprsků odrážených modelem směrem k uživateli. Umožňuje zobrazení jevů, pomocí jiných technik vůbec, či jen stěží dosažitelných, jako jsou např. odrazy a odlesky objektů, lom světla v objektech, atd.\n\nNa začátku máme:\n
  • Popis 3D scény skládající se z\n
      \n
    1. objektů (pozice, tvar, barva a další vlastnosti materiálu)\n
    2. světelných zdrojů (pozice, barva)\n
    3. (případně: barva pozadí scény, vlastnosti prostředí)\n
    \n
    • Pozici pozorovatele
    \n\nSledujeme paprsky, které se šíří od světelných zdrojů do scény. Některé paprsky zasáhnou objekty,\nkde se podle jejich vlastností lomí, odrážejí a rozptylují. Obraz scény tvoří paprsky dopadlé na projekční plochu.\n\nTato metoda zahrnuje efekty vznikající vzájemnou interakcí objektů ve scéně (tj. například odrazy ostatních těles na povrchu \nlesklého objektu a lom světla při průchodu průhledným tělesem). Dokáže určit stíny vržené různými tělesy (tyto stíny jsou však ostře ohraničeny).\nProtože je nereálné sledovat všechny paprsky ze zdrojů světla, postupujeme v praxi naopak. Paprsek je sledován zpětně, tzn. ve směru od pozorovatele. Projekční paprsky vysíláme přes pixely obrazu scény. Hledáme, co je vidět v daném pixelu, jakou světelnou energii paprsek přináší.\n\n\'\'\'Typy paprsků:\'\'\'
    \n
      \n
    • Primární paprsek - vyslaný od pozorovatele scény.\n
    • Sekundární paprsek - vzniká odrazem nebo lomem paprsku.\n
    • Stínový paprsek - vyslaný z místa dopadu paprsku na objekt ke zdrojům světla pro zjištění , leží-li ve stínu. Není-li objekt ve stínu, je pro něj vyhodnocen osvětlovací model. Zanedbává se jejich lom.\n
    \n\n\n=== Popis ===\n\nPři sledování paprsků musíme vlastně hledat jejich průsečíky s objekty scény. Naivní algoritmus testuje navzájem každý paprsek s každým objektem scény \n(a se všemi polygony v každém objektu), což vede ke značně časově náročnému výpočtu. Každý průsečík paprsku s objektem generuje další dva paprsky + stínový paprsek. \nV každém takovém průsečíku je zapotřebí provést ty samé výpočty, je tedy vhodné využít pro implementaci ray-tracingu rekurzi.
    \nPro ukončení rekurze je možné použít následující kritéria:\n
      \n
    1. paprsek narazí na difúzní povrch\n
    2. je dosažena předem stanovená maximální hloubka rekurze\n
    3. energie paprsku klesne pod určitý práh\n
    \n\nV každém průsečíku \'\'\'P\'\'\' paprsku a objektu platí:
    \n\n
    \\mathcal I(P) = I_{local}(P) + I_{global}(P) = I_{local}(P) + k_{rg}I(P_r) + k_{tg}I(P_t)

    \n\n
      P - průsečík
    \n
      P_r - další průsečík odraženého paprsku
    \n
      P_t - další průsečík propuštěného paprsku
    \n
      k_{rg} - globální koeficient odrazivosti (reflexe)
    \n
      k_{tg} - globální koeficient propouštění (lomu, transmise, refrakce)
    \n\nRekurzivní charakter této rovnice potvrzuje vhodnost tohoto přístupu pro implementaci ray-tracingu. Pro reprezentaci hierarchie paprsků a průsečíků bývá použita stromová struktura.\n\n\'\'\'Nevýhody ray-tracingu\'\'\'
    \n\n
      \n
    • ostré stíny\n
    • bodové zdroje světla\n
    • zrcadla (lesklé plochy) sice odrážejí okolí, ale neodrážejí světlo do okolí, nejsou sekundárnímidroji světla\n
    • při změně ve scéně (místo pozorovatele, nové světlo, nový objekt, odebrání něčeho, ...) se musí vyhodnotit celá scéna\n
    • není adpativní, zobrazení probíhá se stejným vzorkováním, nezávisle na situaci ve scéně (velké monotónní plochy)\n
    \n\n\'\'\'Urychlování ray-tracingu\'\'\'
    \n\nProstý ray-tracing je velmi náročný na čas, urychlovací metody ho mohou urychlit o jeden až dva řády.\nNejčastější urychlovací metody:\n
      \n
    • Urychlení výpočtu průsečíků\n
        \n
      1. speciální funkce na výpočet průsečíků s každým typem objektu (pre testy potenciálních průsečíků před vlastními výpočty s tělesem)\n
      2. snížení počtu výpočtů průsečíků - obálky, hierarchie obálek - dělení scény (BSP, Octal-tree) - paměť překážek - koherence paprsků (válcové nebo kuželové obálky paprsků)\n
      \n
    • Snížení počtu paprsků\n
        \n
      1. adaptivní antialiasing (zředěné vysílání paprsků, interpolace při malé změně)\n
      2. řízení hloubky rekurze (útlum intenzity paprsků při odrazech a lomech -> stupeň rekurze při útlumu pod daný limit)\n
      \n
    • Svazky paprsků (svazek paprsků se vysílá jako jeden - kvalita)\n
    • Distribuce výpočtů na dvě části (procesů, procesorů)\n
    \n\n\'\'\'Reprezentace objektů\'\'\'
    \n\nObjekty jsou v počítačové grafice zpravidla reprezentovány pomocí \"množiny\ntrojúhelníčků\", které se snaží vystihnout jejich tvar. Pro metodu raytracing\nje proto mimo jiné potřeba vyřešit problém, jak získat průsečík paprsku s určitým trojúhelníkem.\n\nPaprsek je zřejmě přímkou a trojúhelník chápeme jako množinu bodů v rovině, které leží uvnitř nebo na trojúhelníku v běžném smyslu.\n\nPaprsek \\mathcal{R} je možno popsat (například) parametrickou rovnicí
    \n\n
    \\mathcal{R}:R(t)=R_0+t(R_1-R_0),

    \n\nkde R_0 a R_1 jsou body ležící na této přímce\na t\\in\\mathbb{R} je parametr. Trojúhelník \\mathcal{T} určený\nbody T_0, T_1 a T_2 můžeme také popsat parametrickou rovnicí. Stačí si uvědomit, že nedegerovaný trojúhelník (pro nedegerovaný trojúhelník musí platit,\nže body T_0, T_1, T_2 jsou v obecné poloze; trojúhelník tedy \'\'nezdegeneruje\'\' do bodu nebo úsečky) \nje dvourozměrným simplexem, tzn., že body trojúhelníku leží v konvexním obalu bodů T_0, T_1 a T_2
    \n\n
    \\mathcal{T}(T_0,T_1,T_2)=\\left\\{t_0T_0+t_1T_1+t_2T_2;\\sum_{i=0}^{2} t_i=1,t_i\\ge 0\\right\\}.

    \n\nS tímto tvarem by se nám ale špatně počítalo, proto si z podmínky \\sum_{i=0}^{2} t_i=1\nvyjádříme např. t_0. Pro bod T trojúhelníku pak musí platit
    \n\n
    \\mathcal T(t_1,t_2)=(1-t_1-t_2)T_0+t_1T_1+t_2T_2=T_0+(T_1-T_0)t_1+(T_2-T_0)t_2.

    \n\nOznačíme-li navíc \\vec{u}=T_1-T_0 a \\vec{v}=T_2-T_0, můžeme psát
    \n\n
    \\mathcal\nT(t_1,t_2)=T_0+t_1\\vec{u}+t_2\\vec{v},

    \n\nkde t_1+t_2\\le 1, t_1,t_2\\ge 0.\n\n\n\'\'\'Průnik paprsku a plochy\'\'\'
    \n\nNejprve si rozebereme obecnější úlohu, tzn. průnik paprsku s plochou. Nechť trojúhelník\n\\mathcal{T} leží v rovině \\varrho, která je určená bodem T_0 a normálovým vektorem\n\\vec{n}. Pro libovolný bod X\\in\\varrho (X\\neq T_0) platí, že vektory\n\\overrightarrow{XT_0} a \\vec{n} jsou kolmé. Platí tedy
    \n\n
    \n (X-T_0) \\cdot \\vec{n}=0\n.

    \n\nDosazením parametrické rovnice paprsku\n(\\ref{param_rce_primky}) do rovnice (\\ref{norm_rce_roviny}) získáme
    \n\n
    \n \\left(R_0+t(R_1-R_0)-T_0\\right) \\cdot \\vec{n} = 0\n,

    \n\nodtud
    \n\n
    \n t = \\frac{(T_0-R_0) \\cdot \\vec{n}}{(R_1-R_0) \\cdot \\vec{n}}\n.

    \n\nPrůsečík I paprsku s rovinou \\varrho je proto roven
    \n\n
    \n I = R\\left( \\frac{(T_0-R_0) \\cdot \\vec{n}}{(R_1-R_0) \\cdot \\vec{n}} \\right)\n.

    \n\nJe-li trojúhelník určen body T_0, T_1 a T_2, můžeme normálový vektor \\vec{n}\nroviny \\varrho zapsat ve tvaru
    \n\n
    \n \\vec{n} = (T_1-T_0) \\times (T_2-T_0) = \\vec{u}\\times\\vec{v}\n.

    \n\n\'\'\'Průnik paprsku a trojúhelníku\'\'\'
    \n\nPro výpočet průsečíku paprsku s trojúhelníkem nejprve pomocí (\\ref{I}) zjistíme průsečík I\ntohoto paprsku s rovinou, ve které daný trojúhelník leží. Protne-li paprsek rovinu, pak zbývá určit,\njestli průsečík leží v daném trojúhelníku či nikoliv. Pokud vyjádříme souřadnice tohoto průsečíku\nvzhledem k bodu T_0 (těmito souřadnicemi jsou parametry t_1 a t_2 v rovnici\n(\\ref{param_rce_troj})), pak jsou-li splněny podmínky
    \n\n
    \n t_1+t_2\\le 1,t_1\\ge 0,t_2\\ge 0,\n

    \n\nprůsečík leží v trojúhelníku.\n\n\nDále pro libovolný vektor \\vec{u} roviny \\varrho s normálovým vektorem \\vec{n}\ndefinujeme operátor * jako vektorový součin vektorů \\vec{n} a \\vec{u}. Platí tedy\n\\vec{u}^* = \\vec{n}\\times\\vec{u}. Tento operátor je zřejmě lineární, tzn., že platí
    \n\n
    \n \\left(a\\vec{u}+b\\vec{v}\\right)^*=a\\vec{u}^*+b\\vec{v}^*\n

    \n\npro všechny skaláry a, b a vektory \\vec{u}, \\vec{v}.\nZ vlastností vektorového součinu navíc plyne, že \\vec{a}^{**}\\vec{a}, neboli
    \n\n
    \n \\vec{a}^* \\cdot \\vec{a}=0\n.

    \n\nIdentity a využijeme\nk výpočtu rovnice \\vec{w}=t_1\\vec{u}+t_2\\vec{v}, kde \\vec{w}=I-T_0, která vznikla\nz rovnice (\\ref{param_rce_troj}) dosazením I za T(t_1,t_2). Vynásobíme-li\nji skalárně vektorem \\vec{v}^* dostaneme\n\\vec{w}\\cdot\\vec{v}^* = t_1\\vec{u}\\cdot\\vec{v}^*+t_2\\vec{v}\\cdot\\vec{v}^*,\ntzn. \\vec{w}\\cdot\\vec{v}^* = t_1\\vec{u}\\cdot\\vec{v}^*. Odtud můžeme vyjádřit t_1.\nAnalogicky získáme skalárním vynásobením rovnice vektorem \\vec{u}^* parametr t_2.\nDostaneme tedy
    \n\n
    \n t_1 = \\frac{\\vec{w}\\cdot\\vec{v}^*}{\\vec{u}\\cdot\\vec{v}^*}\n = \\frac{\\vec{w}\\cdot\\left(\\vec{n}\\times\\vec{v}\\right)}{\\vec{u}\\cdot\\left(\\vec{n}\\times\\vec{v}\\right)},\n\n
    \n\n t_2 = \\frac{\\vec{w}\\cdot\\vec{u}^*}{\\vec{v}\\cdot\\vec{u}^*} \n = \\frac{\\vec{w}\\cdot\\left(\\vec{n}\\times\\vec{u}\\right)}{\\vec{v}\\cdot\\left(\\vec{n}\\times\\vec{u}\\right)}.\n
    \n\n=== Algoritmizace ===\n\nRekurzivní funkce Sleduj_paprsek (R, H - hloubka rekurze):\n
      \n
    1. Najdi průsečík P mezi R a objektem.\n
    2. Jestliže P neexistuje - R jde mimo scénu - pixel má barvu pozadí.\n
    3. Z P pošli ke zdrojům světla stínové paprsky.\n
    4. Vyhodnoť součet osvětlovacích modelů v P pro nezakryté zdroje světla.\n
    5. Pokud není překročena hloubka rekurse H, vyšli z P:\n
        \n
      1. Odražený sekundární paprsek voláním Sleduj_paprsek (R_r, H+1).\n
      2. Lomený paprsek Sleduj_paprsek (R_t, H+1).\n
      \n
    6. Paprsek má barvu danou součtem barvy od osvětlení, odraženého paprsku R_r a lomeného paprsku R_t.\n
    \n\nPočet rekurzivních volání procedury Sleduj_paprsek je řízen parametrem H. Je-li roven 1, jedná se o tzv. \'\'\'ray-casting\'\'\' – vyhodnocují se pouze primární paprsky a jejich dopady na nejbližší objekt, \npři použití stínových paprsků jsou vyhodnoceny stíny. Pro zobrazení odrazů musí mít hodnotu minimálně 2 a pro řešení průhledných těles je minimum 3.\n\n\n==Autoři==\n\nTento text vypracovali studenti [http://www.inf.upol.cz Univerzity Palackého v Olomouci] katedry Matematické informatiky jako součást zápočtového úkolu do předmětu Počítačová geometrie.','/* Ray-tracing */',0,'158.194.92.22','20050217070747','',0,0,0,0,0.039137135744,'20050217070747','79949782929252'); INSERT INTO cur VALUES (92,0,'Rasterizace','== Rasterizace ==\n\nPři zobrazení reálného modelu ve světových souřadnicích na výstupní zařízení (rasrové, vektorové) potřebujeme zajistit co nejvěrnější podobnost reálného a zobrazovaného modelu. Omezíme se v tomto textu na rastrové výstupní zařízení, jehož nejjednodušším grafickým prvkem je bod. Protože složitější objekty jsou jen skládankou jednodušších objektů, potřebujeme mít k dispzici algoritmy na výpočet polohy bodů jednoduchých objektů jako úsečky, kružnice, elipsy, oblouků, atd... Ukážeme si některé algoritmy pro výpočet bodů úsečky a kružnice.\n\n=== Popis algoritmů ===\n\n
    [[Image:usecka1.png]]
    \n
    Úsečka tvořena body [X1,Y1] a [X2,Y2]. Nezávislá osa (s větším přírustkem) je osa X.
    \n\n==== DDA algoritmus ====\n\nJedonduchý algoritmus pro výpočet bodů úsečky. Ve směru jedné osy s větším přírustkem inkrementuje o krok 1 a ve směru druhé osy o krok menší jak 1 podle poměru délky úsečky ve směru x a ve směru y.\nAlgoritmus je jednoduchý, ale relativně pomalý protože pracuje v oboru reálných čísel.\n\nOznačme \\Delta x = x_2-x_1, \\Delta y = y_2-y_1, k = \\frac{\\Delta y}{\\Delta x} , potom
    \n\'\'\'a)\'\'\' když k \\in <-1,1> (osa s větším přírustkem je X) zvolíme tedy \\mathcal{} dx=1, dostáváme \\mathcal{}dy=k \\cdot dx=k.
    \nSouřadnice dalšího bodu \\mathcal{}[x_{i+1},y_{i+1}] vypočítáme:
    \n\\mathcal{}x_{i+1} = x_i + dx = x_i + 1
    \n\\mathcal{}y_{i+1} = y_i + dy = y_i + k
    \n\'\'\'b)\'\'\' když \\mathcal{}k < -1 nebo \\mathcal{}k > 1 (osa s větším přírustkem je Y) zvolíme tedy \\mathcal{} dy=1, dostáváme \\mathcal{}dx=dy/k=1/k.
    \nA souřadnice dalšího bodu \\mathcal{}[x_{i+1},y_{i+1}] vypočítáme:
    \n\\mathcal{}x_{i+1} = x_i + dx = x_i + 1/k
    \n\\mathcal{}y_{i+1} = y_i + dy = y_i + 1
    \n\n==== Bresenhamův algoritmus pro úsečku ====\n\nMnohem rychlejší algoritmus pro generování bodů úsečky poskytuje tento algoritmus, používající pouze celočíselnou aritmetiku. Ve směru osy s větším přírustkem (nezávislé) inkremtentuje opět s krokem 1, ale ve směru druhé osy (závislé) vypočte chybový člen a podle něj určí bližší pixel k úsečce.\n\nPředpokládejme že nezávislá souřadnice je souřadnice X, tedy k \\in <0,1> (v opačeném případě by se postupovalo analogicky).\n\nOznačme \\Delta x = x_2-x_1, \\Delta y = y_2-y_1, k = \\frac{\\Delta y}{\\Delta x}
    \nChybový člen \\mathcal{}e_1=2\\Delta y-\\Delta x
    \nRekurzivní výpočet \\mathcal{}i+1. kroku (poslední vykreslený bod \\mathcal{}[x_i,y_i]), pro pozici dalšího bodu jsou dvě možnosti:
    \n\'\'\'1)\'\'\' \\mathcal{}e_i<0 - jako další bod zobrazíme bod \\mathcal{}[x_i+1,y_i] a chybový člen \\mathcal{}e_{i+1}=e_i+2\\Delta y
    \n\'\'\'2)\'\'\' \\mathcal{}e_i>=0 - jako další bod zobrazíme bod \\mathcal{}[x_i+1,y_i+1] a chybový člen \\mathcal{}e_{i+1}=e_i+2(\\Delta y-\\Delta x)
    \n\n==== Kresba kružnice pomocí otáčení bodu ====\n\nJednoduchá metoda pro výpočet bodů kružnice spočívá v tom, že vezmeme jeden bod ležící na kružnici (dána středem a poloměrem) a otačíme jej o zadaný úhel proti směru hodinových ručiček. Body postupně spojujeme úsečkami (např. DDA). Je vidět, že kružnice je v tomto případě pouze aproximována nějakým pravidelným mnohoúhelníkem. Čím menší úhel, o který otačíme, tím \"věrnější\" kružnici dostaneme.\n
    \n\nBody na kružnici splňují v polárních souřadnicích rovnice
    \nx = r \\cdot \\cos(\\alpha) a y = r \\cdot \\sin(\\alpha)
    \nZvolíme libovolný bod na kružnici, \\mathcal{}[x_1,y_1], další bod otočený o úhel \\mathcal{}\\alpha vypočteme rekurzivně:
    \nx_{i+1} = x_i \\cdot \\cos(\\alpha) - y_i \\cdot \\sin(\\alpha),
    \ny_{i+1} = x_i \\cdot \\sin(\\alpha) - y_i \\cdot \\cos(\\alpha)
    \nStačí zvolit krok \\mathcal{}\\alpha a postupně spojovat vypočítané body nějakým úsečkovým algoritmem.\n\n
    [[Image:kruznice1.png]]
    \n\n==== Bresenhamův algoritmus pro kružnici ====\n\nOpět rychlejší algoritmus pracující podobně jako pro úsečku a jen v celočíselné aritmetice. Počítáme body pouze jednoho oktantu (zbylých 7 oktantů stačí vykreslit pomocí symetrie).\n\nAlgoritmus vypočte body na kružnici se středem v počátku a zadaným poloměrem pouze ve druhém oktantu. Body ostatních oktantů vykreslí symetricky a všechny posune o souřadnice středu kružnice.\n\nOznačme r - poloměr kružnice.
    \nChybový člen \\mathcal{}p_1=3-2r
    \nRekurzivní výpočet \\mathcal{}i+1. kroku (poslední vykreslený bod \\mathcal{}[x_i,y_i]), pro pozici dalšího bodu jsou dvě možnosti:
    \n\'\'\'1)\'\'\' \\mathcal{}p_i<0 - jako další bod zobrazíme bod \\mathcal{}[x_i+1,y_i] a chybový člen \\mathcal{}p_{i+1}=p_i+4x_i+6
    \n\'\'\'2)\'\'\' \\mathcal{}p_i>=0 - jako další bod zobrazíme bod \\mathcal{}[x_i+1,y_i-1] a chybový člen \\mathcal{}p_{i+1}=p_i+4(x_i-y_i)+10
    \n\n=== Kód v jazyce C# ===\n\nPříklad řešení v jazyce C#.\n\n==Autoři==\n\nTento text vypracovali studenti [http://www.inf.upol.cz Univerzity Palackého v Olomouci] katedry Matematické informatiky jako součást zápočtového úkolu do předmětu Počítačová geometrie.','/* Bresenhamův algoritmus pro kružnici */',22,'Fitik','20050210193714','',0,0,0,0,0.567980855968,'20050210193714','79949789806285'); INSERT INTO cur VALUES (93,2,'Lichtkind','Ahoj Soudruhu,\nnojo ja jsem němec a mam moji stranku zde: [http://de.wikipedia.org/wiki/Benutzer:Lichtkind].\n\n[[de:Benutzer:Lichtkind]]\n[[en:User:Lichtkind]]\n[[it:Utente:Lichtkind]]','',0,'217.85.118.132','20041118005552','',0,0,0,0,0.963641399035,'20041118005552','79958881994447'); INSERT INTO cur VALUES (94,0,'Balíčkovací_systémy','[[Special:Whatlinkshere/Linux | Odkaz na stránky které sem odkazují]]\n\nSystémy pro správu nainstalovaného software jsou nezbytnou součástí všech distribucí. Ty lze rozdělit na:\n\n== Distribuce instalované ze zdrojových kódů ==\nTypickými představiteli je Source Mage nebo LSB. Distribuce Gentoo má hybridní (což neznamená že horší) systém, který používá i binární balíčky\n\n== Distribuce binární ==\nLze v podstatě rozdělit do několika skupin podle typu používaných balíčků\n\n=== TGZ balíčky ===\nTypickým představitelem je Slackware nebo Arch linux\n\nInstalační balíčky jsou tzv. \"tarbally\" a jejich struktura je jednoduchá. Tvoří ji infosoubor + instalované soubory\n\n=== DEB balíčky ===\nTypickým představitelem je Debian a z něj vycházející distribuce\n\nBalíček tvoří dva soubory zabalené programem ar a to soubor s instalačním scénářem a \"tarball\" který obsahuje buď zdrojový kód, nebo již zkompilované soubory\n\n=== RPM balíčky ===\nTypickým představitelem je Mandrakelinux, Suse, Fedora\n\nStruktura balíčku je podobná jako u deb balíčků, jen pro zabalení souborů je použit program cpio a např. Mandrake používá \"tarball\" zabalený přes bzip2','',3,'Woodcraft','20041206121824','',0,0,1,0,0.748335741343,'20041206121824','79958793878175'); INSERT INTO cur VALUES (95,0,'Instalace_OS_Linux','= Instalace OS Linux =\nMůže být realizovaná několika způsoby. V případě tzv. \"live\" distribucí jako je např. \"Knoppix\" (a řada jiných) dokonce není vůbec nutná.\n\n== Z diskety ==\n== Z CD nebo DVD ==\n== Z USB klíčenky ==\n\n== Ze síťě ==\n== Z live CD distribuce ==','/* Z live CD */',0,'62.245.84.142','20050108164118','',0,0,0,0,0.770308812042,'20050108164118','79949891835881'); INSERT INTO cur VALUES (96,6,'Fill_48.PNG','semínkové vyplňovaní 4/8','semínkové vyplňovaní 4/8',11,'Ran','20041213111004','',0,0,0,1,0,'20050111082717','79958786888995'); INSERT INTO cur VALUES (97,6,'Filler1.gif','','',11,'Ran','20041215103146','',0,0,0,1,0,'20041215105002','79958784896853'); INSERT INTO cur VALUES (98,6,'Filler2.gif','','',11,'Ran','20041215103224','',0,0,0,1,0,'20041215105002','79958784896775'); INSERT INTO cur VALUES (99,6,'Linefill2.JPG','','',11,'Ran','20041215105610','',0,0,0,1,0,'20041215105610','79958784894389'); INSERT INTO cur VALUES (100,6,'Linefill2.PNG','','',11,'Ran','20041215110326','',0,0,0,1,0,'20050111082717','79958784889673'); INSERT INTO cur VALUES (101,6,'Linefill1.PNG','','',11,'Ran','20041215110349','',0,0,0,1,0,'20050111082717','79958784889650'); INSERT INTO cur VALUES (102,6,'Linefill1.png','Vyplňování 1','Vyplňování 1',4,'Lzap','20041216063834','',0,0,0,1,0,'20041216063834','79958783936165'); INSERT INTO cur VALUES (103,6,'Linefill2.png','Vyplňování 2','Vyplňování 2',4,'Lzap','20041216063845','',0,0,0,1,0,'20041216063845','79958783936154'); INSERT INTO cur VALUES (104,0,'Gaussova_křivost','Gaussova krivost je...','',0,'158.194.190.35','20041220121145','',0,0,0,1,0.425064756267,'20041220121145','79958779878854'); INSERT INTO cur VALUES (105,8,'1movedto2','$1 moved to $2','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (106,8,'1movedto2_redir','$1 moved to $2 over redirect','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (107,8,'Monobook.css','/* edit this file to customize the monobook skin for the entire site */','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (108,8,'Monobook.js','/* tooltips and access keys */\nta = new Object();\nta[\'pt-userpage\'] = new Array(\'.\',\'My user page\');\nta[\'pt-anonuserpage\'] = new Array(\'.\',\'The user page for the ip you\\\'re editing as\');\nta[\'pt-mytalk\'] = new Array(\'n\',\'My talk page\');\nta[\'pt-anontalk\'] = new Array(\'n\',\'Discussion about edits from this ip address\');\nta[\'pt-preferences\'] = new Array(\'\',\'My preferences\');\nta[\'pt-watchlist\'] = new Array(\'l\',\'The list of pages you\\\'re monitoring for changes.\');\nta[\'pt-mycontris\'] = new Array(\'y\',\'List of my contributions\');\nta[\'pt-login\'] = new Array(\'o\',\'You are encouraged to log in, it is not mandatory however.\');\nta[\'pt-anonlogin\'] = new Array(\'o\',\'You are encouraged to log in, it is not mandatory however.\');\nta[\'pt-logout\'] = new Array(\'o\',\'Log out\');\nta[\'ca-talk\'] = new Array(\'t\',\'Discussion about the content page\');\nta[\'ca-edit\'] = new Array(\'e\',\'You can edit this page. Please use the preview button before saving.\');\nta[\'ca-addsection\'] = new Array(\'+\',\'Add a comment to this discussion.\');\nta[\'ca-viewsource\'] = new Array(\'e\',\'This page is protected. You can view its source.\');\nta[\'ca-history\'] = new Array(\'h\',\'Past versions of this page.\');\nta[\'ca-protect\'] = new Array(\'=\',\'Protect this page\');\nta[\'ca-delete\'] = new Array(\'d\',\'Delete this page\');\nta[\'ca-undelete\'] = new Array(\'d\',\'Restore the edits done to this page before it was deleted\');\nta[\'ca-move\'] = new Array(\'m\',\'Move this page\');\nta[\'ca-nomove\'] = new Array(\'\',\'You don\\\'t have the permissions to move this page\');\nta[\'ca-watch\'] = new Array(\'w\',\'Add this page to your watchlist\');\nta[\'ca-unwatch\'] = new Array(\'w\',\'Remove this page from your watchlist\');\nta[\'search\'] = new Array(\'f\',\'Search this wiki\');\nta[\'p-logo\'] = new Array(\'\',\'Main Page\');\nta[\'n-mainpage\'] = new Array(\'z\',\'Visit the Main Page\');\nta[\'n-portal\'] = new Array(\'\',\'About the project, what you can do, where to find things\');\nta[\'n-currentevents\'] = new Array(\'\',\'Find background information on current events\');\nta[\'n-recentchanges\'] = new Array(\'r\',\'The list of recent changes in the wiki.\');\nta[\'n-randompage\'] = new Array(\'x\',\'Load a random page\');\nta[\'n-help\'] = new Array(\'\',\'The place to find out.\');\nta[\'n-sitesupport\'] = new Array(\'\',\'Support us\');\nta[\'t-whatlinkshere\'] = new Array(\'j\',\'List of all wiki pages that link here\');\nta[\'t-recentchangeslinked\'] = new Array(\'k\',\'Recent changes in pages linked from this page\');\nta[\'feed-rss\'] = new Array(\'\',\'RSS feed for this page\');\nta[\'feed-atom\'] = new Array(\'\',\'Atom feed for this page\');\nta[\'t-contributions\'] = new Array(\'\',\'View the list of contributions of this user\');\nta[\'t-emailuser\'] = new Array(\'\',\'Send a mail to this user\');\nta[\'t-upload\'] = new Array(\'u\',\'Upload images or media files\');\nta[\'t-specialpages\'] = new Array(\'q\',\'List of all special pages\');\nta[\'ca-nstab-main\'] = new Array(\'c\',\'View the content page\');\nta[\'ca-nstab-user\'] = new Array(\'c\',\'View the user page\');\nta[\'ca-nstab-media\'] = new Array(\'c\',\'View the media page\');\nta[\'ca-nstab-special\'] = new Array(\'\',\'This is a special page, you can\\\'t edit the page itself.\');\nta[\'ca-nstab-wp\'] = new Array(\'a\',\'View the project page\');\nta[\'ca-nstab-image\'] = new Array(\'c\',\'View the image page\');\nta[\'ca-nstab-mediawiki\'] = new Array(\'c\',\'View the system message\');\nta[\'ca-nstab-template\'] = new Array(\'c\',\'View the template\');\nta[\'ca-nstab-help\'] = new Array(\'c\',\'View the help page\');\nta[\'ca-nstab-category\'] = new Array(\'c\',\'View the category page\');\n','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (109,8,'About','Úvod','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (110,8,'Aboutpage','Wikipedie:Úvod','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (111,8,'Aboutsite','O Wikipedii','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (112,8,'Accesskey-compareselectedversions','v','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (113,8,'Accesskey-minoredit','i','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (114,8,'Accesskey-preview','p','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (115,8,'Accesskey-save','s','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (116,8,'Accesskey-search','f','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (117,8,'Accmailtext','The Password for \'$1\' has been sent to $2.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (118,8,'Accmailtitle','Password sent.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (119,8,'Acct_creation_throttle_hit','Sorry, you have already created $1 accounts. You can\'t make any more.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (120,8,'Actioncomplete','Provedeno','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (121,8,'Addedwatch','Přidáno k oblíbeným','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (122,8,'Addedwatchtext','Stránka \"$1\" je přidána k tvým
    oblíbeným.\nBudoucí změny této stránky se objeví tučně v seznamu Poslední Změny ,\na bude počítány v seznamu tvých Oblíbených.\n\n

    Pokud později budeš chtít odstranit stránku ze seznamu Oblíbených, klikni na \"Ignoruj stránku \" v liště nástrojů.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (123,8,'Addgroup','Add Group','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (124,8,'Addsection','+','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (125,8,'Administrators','Wikipedie:Správci','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (126,8,'Affirmation','Potvrzuji, že zákonný vlastník copyrightu na tento soubor souhlasí se zveřejněním podle $1.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (127,8,'All','všichni','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (128,8,'Allarticles','All articles','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (129,8,'Alllogstext','Combined display of upload, deletion, protection, blocking, and sysop logs.\nYou can narrow down the view by selecting a log type, the user name, or the affected page.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (130,8,'Allmessages','All system messages','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (131,8,'AllmessagesnotsupportedDB','Special:AllMessages not supported because wgUseDatabaseMessages is off.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (132,8,'AllmessagesnotsupportedUI','Your current interface language $1 is not supported by Special:AllMessages at this site. ','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (133,8,'Allmessagestext','This is a list of all system messages available in the MediaWiki: namespace.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (134,8,'Allpages','Celý komplex stran','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (135,8,'Allpagesformtext1','Display pages starting at: $1','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (136,8,'Allpagesformtext2','Choose namespace: $1 $2','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (137,8,'Allpagesnamespace','All pages ($1 namespace)','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (138,8,'Allpagesnext','Next','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (139,8,'Allpagesprev','Previous','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (140,8,'Allpagessubmit','Go','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (141,8,'Alphaindexline','$1 to $2','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (142,8,'Alreadyloggedin','Uživateli $1, již jste přihlášen!
    \n','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (143,8,'Alreadyrolled','Cannot rollback last edit of [[$1]]\nby [[User:$2|$2]] ([[User talk:$2|Talk]]); someone else has edited or rolled back the page already.\n\nLast edit was by [[User:$3|$3]] ([[User talk:$3|Talk]]). ','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (144,8,'Ancientpages','Oldest pages','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (145,8,'And','and','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (146,8,'Anontalk','Talk for this IP','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (147,8,'Anontalkpagetext','----\'\'This is the discussion page for an anonymous user who has not created an account yet or who does not use it. We therefore have to use the numerical [[IP address]] to identify him/her. Such an IP address can be shared by several users. If you are an anonymous user and feel that irrelevant comments have been directed at you, please [[Special:Userlogin|create an account or log in]] to avoid future confusion with other anonymous users.\'\' ','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (148,8,'Anonymous','Anonymous user(s) of Wikibooks','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (149,8,'Apr','4.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (150,8,'April','duben','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (151,8,'Article','Content page','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (152,8,'Articleexists','Takto nazvaná stránky již existuje nebo tebou zvolený název je neplatný. Zvol jiný název.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (153,8,'Articlenamespace','(articles)','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (154,8,'Articlepage','View content page','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (155,8,'Asksql','Žádost o informace SQL','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (156,8,'Asksqlpheading','asksql level','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (157,8,'Asksqltext','Tímto formulářem můžeš přímo požádat databázi o informaci SQL.\nToto může velmi otřást serverem, proto používěj málo a opatrně.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (158,8,'Aug','8.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (159,8,'August','srpen','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (160,8,'Autoblocker','Autoblocked because you share an IP address with \"$1\". Reason \"$2\".','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (161,8,'Badarticleerror','Tento úkon nelze použít u tohoto článku.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (162,8,'Badfilename','Jméno souboru bylo změněno na \"$1\".','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (163,8,'Badfiletype','\".$1\" jedná se o nedoporučený typ souboru.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (164,8,'Badipaddress','Adresa IP je překroucena.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (165,8,'Badquery','Zkreslené zadání pro vyhledávání','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (166,8,'Badquerytext','Via sercmendo ne estis Vaše zadání pro vyhledávání není splnitelné. Může to být tím, že hledáte slovo kratší než tři písmena, nebo jste zadání napsal nesprávně. Bonvolu reserci per alia mendo.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (167,8,'Badretype','Vámi napsaná hesla nesouhlasí.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (168,8,'Badtitle','Neplatný titul','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (169,8,'Badtitletext','Požadovaný titul stránky byl neplatný, prázdný nebo nesprávně adresovaný na jinojazyčný titul nebo jiný článek Wikipedie.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (170,8,'Blanknamespace','(Main)','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (171,8,'Block_compress_delete','Can\'t delete this article because it contains block-compressed revisions. \nThis is a temporary situation which the developers are well aware of, and should be fixed within a month or two. \nPlease mark the article for deletion and wait for a developer to fix our buggy software.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (172,8,'Blockedtext','Váš účet nebo IP-adresa byly odblokovány osobou ,\nkterá popsala příčinu takto:

    Máte právo se spojit se správcem systému a prodiskutovat odblokování.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (173,8,'Blockedtitle','Uživatel odblokován','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (174,8,'Blockip','Zablokuj adresu IP','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (175,8,'Blockipsuccesssub','Úspěšné zablokování','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (176,8,'Blockipsuccesstext','Adresa IP \"$1\" je zablokována.\n
    Viz [[Special:Ipblocklist|seznam zablokování IP]].','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (177,8,'Blockiptext','Tímto formulářem můžeš zablokovat adresu IP a zbavit ji práva přispívat do wikie. To lze učinit \'\'pouze\'\' v případě vandalizmu, a při dodržení [[Wikipedie:Pravidla pro zablokování|pravidel pro zablokování]].\nNíže objasni přesný důvod (např. uveď stránku, která se stala terčem vandalského útoku).','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (178,8,'Blocklink','zablokuj','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (179,8,'Blocklistline','Dne , zablokováno ','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (180,8,'Blocklogentry','blocked \"$1\" with an expiry time of $2','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (181,8,'Blocklogpage','Block_log','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (182,8,'Blocklogtext','This is a log of user blocking and unblocking actions. Automatically\nblocked IP addresses are not listed. See the [[Special:Ipblocklist|IP block list]] for\nthe list of currently operational bans and blocks.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (183,8,'Blockpheading','block level','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (184,8,'Bold_sample','Bold text','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (185,8,'Bold_tip','Bold text','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (186,8,'Booksources','Knižní služby','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (187,8,'Booksourcetext','Odkazy na jiné WWW-stránky, které prodávají knihy a/nebo informují o knize, na níž je odkaz. Wikipedie není na tyto prodejny obchodně vázána, takže odkazy nelze chápat jako doporučení nebo reklamu.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (188,8,'Brokenredirects','Přerušené přesměrování','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (189,8,'Brokenredirectstext','Tato přesměrování se vztahují na neexistující články.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (190,8,'Bugreports','Oznam mouchy','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (191,8,'Bugreportspage','Wikipedie:Oznam_mouchy','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (192,8,'Bureaucratlog','Bureaucrat_log','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (193,8,'Bureaucratlogentry','Rights for user \"$1\" set \"$2\"','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (194,8,'Bureaucrattext','The action you have requested can only be\nperformed by sysops with \"bureaucrat\" status.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (195,8,'Bureaucrattitle','Bureaucrat access required','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (196,8,'Bydate','datum','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (197,8,'Byname','jméno','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (198,8,'Bysize','velikost','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (199,8,'Cachederror','The following is a cached copy of the requested page, and may not be up to date.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (200,8,'Cancel','Rezignuj','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (201,8,'Cannotdelete','Nebylo možné odstranit zvolenou stránku ani soubor.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (202,8,'Cantrollback','Cannot revert edit; last contributor is only author of this page.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (203,8,'Categories','Categories','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (204,8,'Categoriespagetext','The following categories exists in the wiki.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (205,8,'Category','category','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (206,8,'Category_header','Articles in category \"$1\"','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (207,8,'Categoryarticlecount','There are $1 articles in this category.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (208,8,'Categoryarticlecount1','There is $1 article in this category.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (209,8,'Changepassword','Změňte heslo','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (210,8,'Changes','changes','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (211,8,'Clearyourcache','\'\'\'Note:\'\'\' After saving, you have to clear your browser cache to see the changes: \'\'\'Mozilla:\'\'\' click \'\'Reload\'\' (or \'\'Ctrl-R\'\'), \'\'\'IE / Opera:\'\'\' \'\'Ctrl-F5\'\', \'\'\'Safari:\'\'\' \'\'Cmd-R\'\', \'\'\'Konqueror\'\'\' \'\'Ctrl-R\'\'.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (212,8,'Columns','Sloupce','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (213,8,'Compareselectedversions','Compare selected versions','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (214,8,'Confirm','Potvrdit','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (215,8,'Confirmcheck','Ano, jsem naprosto jist, že chci toto odstranit.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (216,8,'Confirmdelete','Potvrdit odstranění','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (217,8,'Confirmdeletetext','Odstraníš článek nebo soubor a smažeš celou jeho historii z databáze.
    \nPotvrď prosím, že to opravdu chceš, že si uvědomuješ důsledky a že dodržuješ [[Wikipedie:Pravidla o odstraňování]].','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (218,8,'Confirmprotect','Confirm protection','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (219,8,'Confirmprotecttext','Do you really want to protect this page?','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (220,8,'Confirmunprotect','Confirm unprotection','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (221,8,'Confirmunprotecttext','Do you really want to unprotect this page?','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (222,8,'Contextchars','Ukázat písmena z linií až po','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (223,8,'Contextlines','Ukázat linie ze stránek po','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (224,8,'Contribslink','příspěvky','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (225,8,'Contribsub','Od ','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (226,8,'Contributions','Příspěvky wikipediisty','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (227,8,'Copyright','Content is available under $1.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (228,8,'Copyrightpage','Wikipedie:Copyright','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (229,8,'Copyrightpagename','povolenka GFDL používaná ve Wikipedii ','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (230,8,'Copyrightwarning','Pamatujte, že každý příspěvek pro Wikipedii je považován jako zveřejněný dle GNU Free Documentation License (viz ). Pokud chcete, aby váš příspěvek nebyl redigován a rozšiřován, ne klikejte na \"Uložit\". Zároveň tím přísaháte, že příspěvek je vaším dílem nebo jste ho opsal(a) ze zdroje, na který se nevztahuje copyright.. NE POUŹÍVEJTE BEZ DOVOLENÍ DÍLA VÁZANÁ COPYRIGHTem!','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (231,8,'Copyrightwarning2','Please note that all contributions to {{SITENAME}}\nmay be edited, altered, or removed by other contributors.\nIf you don\'t want your writing to be edited mercilessly, then don\'t submit it here.
    \nYou are also promising us that you wrote this yourself, or copied it from a\npublic domain or similar free resource (see $1 for details).\nDO NOT SUBMIT COPYRIGHTED WORK WITHOUT PERMISSION!','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (232,8,'Couldntremove','Couldn\'t remove item \'$1\'...','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (233,8,'Createaccount','Vytvořte nový účet','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (234,8,'Createaccountmail','by email','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (235,8,'Createaccountpheading','createaccount level','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (236,8,'Creditspage','Page credits','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (237,8,'Cur','teď','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (238,8,'Currentevents','Aktuality','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (239,8,'Currentevents-url','Current events','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (240,8,'Currentrev','Aktuální revize','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (241,8,'Currentrevisionlink','view current revision','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (242,8,'Data','Data','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (243,8,'Databaseerror','Databázová chyba','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (244,8,'Dateformat','Date format','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (245,8,'Dberrortext','Syntaktická chyba se stala při dotazu na databázi. Jako poslední jste volil(a) otázku:\n

    $1
    \nz funkce \"$2\". \nMySQL vrátil chybu \"$3: $4\".','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (246,8,'Dberrortextcl','A database query syntax error has occurred.\nThe last attempted database query was:\n\"$1\"\nfrom within function \"$2\".\nMySQL returned error \"$3: $4\".\n','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (247,8,'Deadendpages','Dead-end pages','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (248,8,'Debug','Proti mouchám','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (249,8,'Dec','12.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (250,8,'December','prosinec','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (251,8,'Default','default','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (252,8,'Defaultns','Search in these namespaces by default:','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (253,8,'Defemailsubject','{{SITENAME}} e-mail','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (254,8,'Delete','Delete','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (255,8,'Deletecomment','Důvod odstranění','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (256,8,'Deletedarticle','odstraněno \"$1\"','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (257,8,'Deletedrevision','Deleted old revision $1.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (258,8,'Deletedtext','\"$1\" je odstraněno.\nPohleď na záznam posledních odstranění.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (259,8,'Deleteimg','for','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (260,8,'Deleteimgcompletely','for','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (261,8,'Deletepage','Odstranit stránku','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (262,8,'Deletepheading','delete level','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (263,8,'Deletesub','(Odstraňuje se \"$1\")','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (264,8,'Deletethispage','Odstraň stránku','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (265,8,'Deletionlog','kniha odstranění','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (266,8,'Dellogpage','Kniha_odstraněných_souborů','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (267,8,'Dellogpagetext','Zde je seznam posledních odstranění z databáze.\nVšechny časové údaje uvedeny podle časového pásma serveru. (UTC)\n
      \n
    \n','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (268,8,'Developertext','Žádaný úkonLa je proveditelný pouze programátory projekty, aby se zabránilo poškození dat.\nČtěte prosím $1.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (269,8,'Developertitle','Účet správce nutný','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (270,8,'Diff','rozdíl','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (271,8,'Difference','(Rozdíly mezi revizemi)','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (272,8,'Disambiguations','Špatně odkázané oddělovače ','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (273,8,'Disambiguationspage','Wikipedie:Oddělovače','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (274,8,'Disambiguationstext','Tyto stránky odkazují na stránkový oddělovač. Měly by místo toho odkazovat na správný subjekt.
    Bereme do úvahy stránky, které odkazují na oddělovač.
    Odkazy na sekci nečlánkových souborů ne se zapisují zde.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (275,8,'Disclaimerpage','Project:General_disclaimer','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (276,8,'Disclaimers','Disclaimers','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (277,8,'Doubleredirects','Dvojité přesměrování','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (278,8,'Doubleredirectstext','Pozor: Může se stát, že tento seznam bude obsahovat falešné pozitivy. Všeobecně to znamená, že existuje další text s odkazy po #REDIERCT.
    \nKaždý řádek ukazuje odkaz k prvnímu a druhému přesměrování, plus první řádek textu druhého přesměrování, který všeobecně ukazuje \"skutečný\" hlavní článek, na který odkazuje první přesměrování.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (279,8,'Edit','Edit','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (280,8,'Editcomment','The edit comment was: \"$1\".','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (281,8,'Editconflict','Redakční konflikt: ','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (282,8,'Editcurrent','Zrediguj současnou verzi stránky','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (283,8,'Editgroup','Edit Group','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (284,8,'Edithelp','Pomoc při redigování','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (285,8,'Edithelppage','Wikipedie:Jak_redigovat_stránku','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (286,8,'Editing','Redakce stránky $1','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (287,8,'Editingcomment','Editing $1 (comment)','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (288,8,'Editingold','VAROVÁNÍ: nyní redigujete starou verzi tohoto článku. Když ji uložíte, všechny změny provedené po zmíněné revizi se ztratí.\n','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (289,8,'Editingsection','Editing $1 (section)','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (290,8,'Editsection','edit','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (291,8,'Editthispage','Rediguj stránku','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (292,8,'Editusergroup','Edit User Groups','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (293,8,'Emailflag','Přijměte mailovou poštu od jiných wikipediistů','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (294,8,'Emailforlost','Pokud zapomenete své heslo, můžeme vám zaslat nové na vaši mailovou adresu.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (295,8,'Emailfrom','Od','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (296,8,'Emailmessage','Zpráva','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (297,8,'Emailpage','Pošli mail','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (298,8,'Emailpagetext','Pokud wikipediista-adresát uvedl platnou e-mailovou adresu v preferencích, můžeš mu poslat zprávu tímto formulářem. \nMailová adresa tebou uvedená v preferencích se objeví jako \"Od\"-adresa\npošty, aby adresát mohl odpovědět.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (299,8,'Emailsend','Odeslat','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (300,8,'Emailsent','Odeslaná pošta','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (301,8,'Emailsenttext','Tvá pošta byla odeslána.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (302,8,'Emailsubject','Předmět','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (303,8,'Emailto','Komu','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (304,8,'Emailuser','Pošli mail','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (305,8,'Emptyfile','The file you uploaded seems to be empty. This might be due to a typo in the file name. Please check whether you really want to upload this file.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (306,8,'Enterlockreason','Enter a reason for the lock, including an estimate\nof when the lock will be released','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (307,8,'Error','Chyba','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (308,8,'Errorpagetitle','Chyba','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (309,8,'Exbeforeblank','content before blanking was:','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (310,8,'Exblank','page was empty','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (311,8,'Excontent','content was:','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (312,8,'Explainconflict','Někdo změnil stránku poté, co jste ji napsal(a). Výše vidíte aktuální text článku. Vaše změny jsou uvedeny dole. Musíte sloučit své změny se stávajícím článkem.\nPoue výše uvedený text zůstane uchováná po kliknutí na \"Uložit\".\n

    ','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (313,8,'Export','Export pages','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (314,8,'Exportcuronly','Include only the current revision, not the full history','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (315,8,'Exporttext','You can export the text and editing history of a particular page or\nset of pages wrapped in some XML. In the future, this may then be imported into another\nwiki running MediaWiki software, although there is no support for this feature in the\ncurrent version.\n\nTo export article pages, enter the titles in the text box below, one title per line, and\nselect whether you want the current version as well as all old versions, with the page\nhistory lines, or just the current version with the info about the last edit.\n\nIn the latter case you can also use a link, e.g. [[{{ns:Special}}:Export/Train]] for the\narticle [[Train]].\n','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (316,8,'Extlink_sample','http://www.example.com link title','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (317,8,'Extlink_tip','External link (remember http:// prefix)','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (318,8,'Faq','Časté otázky','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (319,8,'Faqpage','Wikipedie:Časté otázky','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (320,8,'Feb','2.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (321,8,'February','únor','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (322,8,'Feedlinks','Feed:','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (323,8,'Filecopyerror','Nebylo možné zkopírovat soubor \"$1\" na \"$2\".','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (324,8,'Filedeleteerror','Nebylo možné odstranit soubor \"$1\".','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (325,8,'Filedesc','Popis','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (326,8,'Fileexists','A file with this name exists already, please check $1 if you are not sure if you want to change it.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (327,8,'Filemissing','File missing','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (328,8,'Filename','Soubor','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (329,8,'Filenotfound','Nebylo možné najít soubor \"$1\".','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (330,8,'Filerenameerror','Nebylo možné přejmenovat soubor \"$1\" na \"$2\".','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (331,8,'Filesource','Source','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (332,8,'Filestatus','Copyright status','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (333,8,'Fileuploaded','Úspěšně jsi načetl soubor \"$1\".\nVěnuj pozornost následujícímu odkazu: ($2) na stránku popisu a napiš pár informací o souboru. Např. odkud pochází, kdy a kdo ho vytvořil či cokoliv dalšího, co o něm víš..','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (334,8,'Formerror','Chyba: nebylo možné dotat formulář','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (335,8,'Friday','pátek','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (336,8,'Geo','GEO coordinates','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (337,8,'Getimagelist','získává seznam souborů ','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (338,8,'Go','Do toho!','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (339,8,'Googlesearch','\n\n

    \n\n
    \n\n\"Google\"\n\n\n\n\n
    WWW {{SERVER}}
    \n\n\n
    \n
    \n
    \n','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (340,8,'Guesstimezone','Fill in from browser','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (341,8,'Headline_sample','Headline text','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (342,8,'Headline_tip','Level 2 headline','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (343,8,'Help','Nápověda','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (344,8,'Helppage','Wikipedie:Nápověda','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (345,8,'Hide','skrýt','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (346,8,'Hidetoc','hide','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (347,8,'Hist','historie','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (348,8,'Histlegend','Vysvětlení: (teď) = viz rozdíly oproti nynější verzi,\n(předch) = rozdíly oproti předchozí verzi, M = malá redakční změna','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (349,8,'History','Historie','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (350,8,'History_copyright','-','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (351,8,'History_short','History','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (352,8,'Historywarning','Warning: The page you are about to delete has a history: ','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (353,8,'Hr_tip','Horizontal line (use sparingly)','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (354,8,'Ignorewarning','Ignoruj varování a ulož soubor.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (355,8,'Illegalfilename','The filename \"$1\" contains characters that are not allowed in page titles. Please rename the file and try uploading it again.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (356,8,'Ilshowmatch','Ukaž soubory, jejich jména vyhovují','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (357,8,'Ilsubmit','Hledej','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (358,8,'Image_sample','Example.jpg','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (359,8,'Image_tip','Embedded image','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (360,8,'Imagelinks','Odkazy k souboru ','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (361,8,'Imagelist','Seznam načtených souborů ','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (362,8,'Imagelisttext','Seznam souborů, seřazených dle .','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (363,8,'Imagemaxsize','Limit images on image description pages to: ','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (364,8,'Imagepage','View image page','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (365,8,'Imagereverted','Obnovení předchozí verze úspěšně provedeno.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (366,8,'Imgdelete','odstranit','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (367,8,'Imgdesc','pri','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (368,8,'Imghistlegend','(nun) = toto je současná verze souboru, (for) = odstranit tuto starou verzi, (res) = obnovit starou verzi.\n
    Click on date to see image uploaded on that date.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (369,8,'Imghistory','Historie načtených souborů','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (370,8,'Imglegend','(pri) = ukaž/zrediguj popis souboru.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (371,8,'Import','Import pages','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (372,8,'Importfailed','Import failed: $1','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (373,8,'Importhistoryconflict','Conflicting history revision exists (may have imported this page before)','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (374,8,'Importnotext','Empty or no text','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (375,8,'Importsuccess','Import succeeded!','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (376,8,'Importtext','Please export the file from the source wiki using the Special:Export utility, save it to your disk and upload it here.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (377,8,'Info_short','Information','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (378,8,'Infobox','Click a button to get an example text','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (379,8,'Infobox_alert','Please enter the text you want to be formatted.\\n It will be shown in the infobox for copy and pasting.\\nExample:\\n$1\\nwill become:\\n$2','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (380,8,'Infosubtitle','Information for page','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (381,8,'Internalerror','Vnitřní chyba','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (382,8,'Intl','Interlanguage links','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (383,8,'Ip_range_invalid','Invalid IP range.\n','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (384,8,'Ipaddress','Adresa IP','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (385,8,'Ipb_expiry_invalid','Expiry time invalid.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (386,8,'Ipbexpiry','Expiry','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (387,8,'Ipblocklist','Seznam blokovaných adres IP','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (388,8,'Ipbreason','Důvod','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (389,8,'Ipbsubmit','Zablokuj adresu','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (390,8,'Ipusubmit','Zrušit blokování adresy','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (391,8,'Ipusuccess','Adresa IP \"$1\" byla uvolněna z blokování','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (392,8,'Isbn','ISBN','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (393,8,'Isredirect','přesměrovač','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (394,8,'Italic_sample','Italic text','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (395,8,'Italic_tip','Italic text','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (396,8,'Iteminvalidname','Problem with item \'$1\', invalid name...','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (397,8,'Jan','1.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (398,8,'January','leden','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (399,8,'Jul','7.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (400,8,'July','červenec','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (401,8,'Jun','6.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (402,8,'June','červen','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (403,8,'Largefile','Doporučuje se, aby soubor nepřesahoval 100 kbytů.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (404,8,'Last','předch','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (405,8,'Lastmodified','Stránka byla naposledy redigována $1.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (406,8,'Lastmodifiedby','This page was last modified $1 by $2.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (407,8,'Lineno','Linie :','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (408,8,'Link_sample','Link title','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (409,8,'Link_tip','Internal link','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (410,8,'Linklistsub','(Seznam odkazů)','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (411,8,'Linkshere','Tyto stránky odkazují sem:','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (412,8,'Linkstoimage','K souboru odkazují tyto stránky:','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (413,8,'Linktrail','/^([a-z]+)(.*)$/sD','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (414,8,'Listadmins','Admins list','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (415,8,'Listform','seznam','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (416,8,'Listingcontinuesabbrev',' cont.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (417,8,'Listusers','Uživatelé','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (418,8,'Loadhist','Načítání stránky historie redakcí','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (419,8,'Loadingrev','načíst revize pro rozdíly','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (420,8,'Localtime','Místní časové pásmo','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (421,8,'Lockbtn','Zamknout databázi','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (422,8,'Lockconfirm','Ano, opravdu chci uzamknout databázi.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (423,8,'Lockdb','Uzamčít databázi','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (424,8,'Lockdbsuccesssub','Databáze uzamknuta','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (425,8,'Lockdbsuccesstext','Databáze wikipedie je uzamknuta.\n
    Nezapomeň ji odemknout po opravách.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (426,8,'Lockdbtext','Pokud uzamčeš databázi, znemožníš odstatním provádět redakce, volit preference, oblíbené a jiné věci. Potvrď, že to opravdu chceš udělat a že odemčeš databázi hned po opravách.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (427,8,'Locknoconfirm','Ne potvrdil jsi.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (428,8,'Log','Logs','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (429,8,'Login','Přihlašte se','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (430,8,'Loginend',' ','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (431,8,'Loginerror','Chyba při přihlašování','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (432,8,'Loginpagetitle','Přihlaste se','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (433,8,'Loginproblem','Nastal problém při vašem přihlášení.
    Zkuste to znovu!','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (434,8,'Loginprompt','You must have cookies enabled to log in to {{SITENAME}}.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (435,8,'Loginreqtext','You must [[special:Userlogin|login]] to view other pages.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (436,8,'Loginreqtitle','Login Required','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (437,8,'Loginsuccess','Nyní jste přihlášen ve Wikipedii jako uživatel \"$1\".','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (438,8,'Loginsuccesstitle','Přihlášení uspělo','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (439,8,'Logout','Na shledanou','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (440,8,'Logouttext','Skončil jste svou seanci.\nMůžete pracovat ve Wikipedii anonymně, nebo se přihlásit znovu jako stejný nebo jiný uživatel..\n','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (441,8,'Logouttitle','Na shledanou!','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (442,8,'Lonelypages','Sirotci','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (443,8,'Longpages','Dlouhé stránky','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (444,8,'Longpagewarning','WARNING: This page is $1 kilobytes long; some\nbrowsers may have problems editing pages approaching or longer than 32kb.\nPlease consider breaking the page into smaller sections.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (445,8,'Mailerror','Error sending mail: $1','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (446,8,'Mailmypassword','Zašlete mi mailem nové heslo','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (447,8,'Mailnologin','Žádná adresa k zaslání','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (448,8,'Mailnologintext','Určitě uveď jméno\na měj platnou e-mailovou adresu ve svých preferencích\nabys mohl mailovat jiným wikipediistům.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (449,8,'Mainpage','Hlavní strana','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (450,8,'Mainpagedocfooter','Please see [http://meta.wikipedia.org/wiki/MediaWiki_i18n documentation on customizing the interface]\nand the [http://meta.wikipedia.org/wiki/MediaWiki_User%27s_Guide User\'s Guide] for usage and configuration help.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (451,8,'Mainpagetext','Wiki software successfully installed.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (452,8,'Maintenance','Nástroje pro opravy a údržbu','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (453,8,'Maintenancebacklink','Návrat k nástrojům','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (454,8,'Maintnancepagetext','Zde jsou různé nástroje pro opravy a všeobecnou údržbu dat. Některé funkce mohou otřást databází, nenačítejte proto po každé drobné opravě!','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (455,8,'Makesysop','Make a user into a sysop','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (456,8,'Makesysopfail','User \"$1\" could not be made into a sysop. (Did you enter the name correctly?)','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (457,8,'Makesysopname','Name of the user:','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (458,8,'Makesysopok','User \"$1\" is now a sysop','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (459,8,'Makesysopsubmit','Make this user into a sysop','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (460,8,'Makesysoptext','This form is used by bureaucrats to turn ordinary users into administrators.\nType the name of the user in the box and press the button to make the user an administrator','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (461,8,'Makesysoptitle','Make a user into a sysop','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (462,8,'Mar','3.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (463,8,'March','březen','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (464,8,'Markaspatrolleddiff','Mark as patrolled','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (465,8,'Markaspatrolledlink','
    [$1]
    ','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (466,8,'Markaspatrolledtext','Mark this article as patrolled','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (467,8,'Markedaspatrolled','Marked as patrolled','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (468,8,'Markedaspatrolledtext','The selected revision has been marked as patrolled.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (469,8,'Matchtotals','The query \"$1\" matched $2 page titles\nand the text of $3 pages.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (470,8,'Math','Rendering math','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (471,8,'Math_bad_output','Can\'t write to or create math output directory','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (472,8,'Math_bad_tmpdir','Can\'t write to or create math temp directory','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (473,8,'Math_failure','Failed to parse','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (474,8,'Math_image_error','PNG conversion failed; check for correct installation of latex, dvips, gs, and convert','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (475,8,'Math_lexing_error','lexing error','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (476,8,'Math_notexvc','Missing texvc executable; please see math/README to configure.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (477,8,'Math_sample','Insert formula here','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (478,8,'Math_syntax_error','syntax error','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (479,8,'Math_tip','Mathematical formula (LaTeX)','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (480,8,'Math_unknown_error','unknown error','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (481,8,'Math_unknown_function','unknown function ','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (482,8,'May','5.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (483,8,'May_long','květen','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (484,8,'Media_sample','Example.mp3','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (485,8,'Media_tip','Media file link','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (486,8,'Minlength','Jméno souboru se musí skládat nejméně ze tří písmen.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (487,8,'Minoredit','Tato změna je malá redakční úpravu.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (488,8,'Minoreditletter','M','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (489,8,'Mispeelings','Stránky se špatnou výslovností','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (490,8,'Mispeelingspage','Seznam častých chyb výslovnosti','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (491,8,'Mispeelingstext','Tyto stránky obsahují jednu z nesprávných výslovností uvedených v . Správná výslovnost se ukáže (takto).','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (492,8,'Missingarticle','Databázo nenašla text článku, který měla najít, nazvaný \"$1\".\nToto není chyba databáze, ale patrně chyba v programu. Oznamte to správci systému a upozorněte na URL.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (493,8,'Missingimage','Missing image
    $1\n','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (494,8,'Missinglanguagelinks','Chybějící mezijazykové odkazy','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (495,8,'Missinglanguagelinksbutton','Ukaž chybějící mezijazykové odkazy pro','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (496,8,'Missinglanguagelinkstext','Tyto články ne odkazují na svůj ekvivalent v jazyce . Přesměrování a podstránky se ne ukazují.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (497,8,'Monday','pondělí','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (498,8,'Moredotdotdot','More...','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (499,8,'Move','Move','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (500,8,'Movearticle','Přesuň stránku','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (501,8,'Movedto','přesunuto na','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (502,8,'Movenologin','Neuvedeno přihlašovací jméno','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (503,8,'Movenologintext','Musíš být přihlášeným uživatelem a uveď přihlašovací jméno\nabys mohl stránku přesunout.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (504,8,'Movepage','Přesuň stránku','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (505,8,'Movepagebtn','Přesuň stránku','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (506,8,'Movepagetalktext','The associated talk page, if any, will be automatically moved along with it \'\'\'unless:\'\'\'\n*You are moving the page across namespaces,\n*A non-empty talk page already exists under the new name, or\n*You uncheck the box below.\n\nIn those cases, you will have to move or merge the page manually if desired.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (507,8,'Movepagetext','Touto formulí můžeš změnit název stránky a přenést i seznam její historie na nový název. Původní název se stane přesměrovačem na nový název.\nOdkazy na předchozí název nebudou změněny.\nVAROVÁNÍ!\nMůže to být drastická a nečekaná změna pro oblíbené stránky. Ujisti se, že si uvědomuješ důsledky, než změnu provedeš.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (508,8,'Movetalk','Přesuň také \"diskusní\" stránku, pokud existuje.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (509,8,'Movethispage','Přemístit stránku','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (510,8,'Mw_math_html','HTML if possible or else PNG','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (511,8,'Mw_math_mathml','MathML if possible (experimental)','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (512,8,'Mw_math_modern','Recommended for modern browsers','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (513,8,'Mw_math_png','Always render PNG','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (514,8,'Mw_math_simple','HTML if very simple or else PNG','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (515,8,'Mw_math_source','Leave it as TeX (for text browsers)','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (516,8,'Mycontris','My contributions','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (517,8,'Mypage','Moje stránka','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (518,8,'Mytalk','Moje diskuse','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (519,8,'Navigation','Navigation','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (520,8,'Nbytes','$1 bajty','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (521,8,'Nchanges','změny','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (522,8,'Newarticle','(Nový)','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (523,8,'Newarticletext','Vložte sem text nového článku.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (524,8,'Newbies','newbies','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (525,8,'Newimages','New images gallery','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (526,8,'Newmessages','You have $1.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (527,8,'Newmessageslink','new messages','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (528,8,'Newpage','New page','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (529,8,'Newpageletter','N','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (530,8,'Newpages','Nové stránky','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (531,8,'Newpassword','Nové heslo','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (532,8,'Newtitle','Na nový název','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (533,8,'Newusersonly',' (pouze noví uživatelé)','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (534,8,'Newwindow','(opens in new window)','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (535,8,'Next','násl','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (536,8,'Nextdiff','Go to next diff →','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (537,8,'Nextn','$1 následující','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (538,8,'Nextpage','Next page ($1)','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (539,8,'Nextrevision','Newer revision→','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (540,8,'Nlinks',' odkazy','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (541,8,'Noaffirmation','Bezpodmínečně musíte potvrdit, že váš příspěvek neporušuje zákony o copyrightu.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (542,8,'Noarticletext','(Článek zatím neobsahuje text)','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (543,8,'Noblockreason','Nutno uvést důvod zablokování.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (544,8,'Noconnect','Nebylo možné se připojit k databázi $1','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (545,8,'Nocontribs','Nenalezeny žádné redakce podle těchto kritérií.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (546,8,'Nocookieslogin','{{SITENAME}} uses cookies to log in users. You have cookies disabled. Please enable them and try again.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (547,8,'Nocookiesnew','The user account was created, but you are not logged in. {{SITENAME}} uses cookies to log in users. You have cookies disabled. Please enable them, then log in with your new username and password.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (548,8,'Nocreativecommons','Creative Commons RDF metadata disabled for this server.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (549,8,'Nocredits','There is no credits info available for this page.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (550,8,'Nodb','Nebylo možné vybrat databázi $1','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (551,8,'Nodublincore','Dublin Core RDF metadata disabled for this server.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (552,8,'Noemail','E-mailová adresa není zaregistrována pro uživatele \"$1\".','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (553,8,'Noemailtext','Tento wikipediista buď nedal platnou adresu nebo zvolil režim nepřijímat zprávy od jiných wikipediistů.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (554,8,'Noemailtitle','Žádná mailová adresa ','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (555,8,'Nogomatch','No page with this exact title exists, trying full text search.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (556,8,'Nohistory','O této stránce neexistuje historie redakcí.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (557,8,'Noimages','Nothing to see.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (558,8,'Nolinkshere','Žádná stránka sem neodkazuje.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (559,8,'Nolinkstoimage','Žádná stránka neodkazuje na tento soubor.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (560,8,'Noname','Je nutné úvést jméno svého účtu.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (561,8,'Nonefound','Poznámka: neúspěšné hledání zaviňuje často zadání slov, které nejsou v indexu, nebo mnoha slov najednou (jen stránky, které obsahují všechna zadaná slova, se objeví ve výsledku).','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (562,8,'Nonunicodebrowser','WARNING: Your browser is not unicode compliant, please change it before editing an article.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (563,8,'Nospecialpagetext','Žádal jsi speciální stránku podporovanou Wikipedií','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (564,8,'Nosuchaction','Žádný podobný úkon','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (565,8,'Nosuchactiontext','Úkon (\'action\') specifikovaný pomocí nepodporuje programové vybavení Wikipedie','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (566,8,'Nosuchspecialpage','Žádná taková speciální stránka','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (567,8,'Nosuchuser','Žádný uživatel nemá jméno \"$1\".\nZkontrolujte prosím správnost zápisu nebo vytvořte účet dle níže uvedeného formuláře.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (568,8,'Nosuchusershort','There is no user by the name \"$1\". Check your spelling.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (569,8,'Notacceptable','The wiki server can\'t provide data in a format your client can read.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (570,8,'Notanarticle','Toto není článek','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (571,8,'Notargettext','Neupřesnil jsi, kterou stránku nebo kterého uživatele zamýšlíš.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (572,8,'Notargettitle','Bez cílové stránky','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (573,8,'Note','Noto: ','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (574,8,'Notextmatches','Nic nebylo nalezeno podle obsahu','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (575,8,'Notitlematches','Nic nebylo nalezeno dle názvu','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (576,8,'Notloggedin','Not logged in','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (577,8,'Nov','11.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (578,8,'November','listopad','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (579,8,'Nowatchlist','Zatím jsi neuvedl žádné oblíbené stránky.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (580,8,'Nowiki_sample','Insert non-formatted text here','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (581,8,'Nowiki_tip','Ignore wiki formatting','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (582,8,'Nstab-category','Category','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (583,8,'Nstab-help','Help','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (584,8,'Nstab-image','Image','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (585,8,'Nstab-main','Article','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (586,8,'Nstab-media','Media','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (587,8,'Nstab-mediawiki','Message','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (588,8,'Nstab-special','Special','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (589,8,'Nstab-template','Template','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (590,8,'Nstab-user','User page','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (591,8,'Nstab-wp','About','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (592,8,'Numauthors','Number of distinct authors (article): $1','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (593,8,'Numedits','Number of edits (article): $1','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (594,8,'Numtalkauthors','Number of distinct authors (discussion page): $1','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (595,8,'Numtalkedits','Number of edits (discussion page): $1','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (596,8,'Numwatchers','Number of watchers: $1','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (597,8,'Nviews',' jednou','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (598,8,'Oct','10.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (599,8,'October','říjen','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (600,8,'Ok','OK','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (601,8,'Oldpassword','Staré hesle','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (602,8,'Orig','orig','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (603,8,'Orphans','Sirotci','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (604,8,'Othercontribs','Based on work by $1.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (605,8,'Otherlanguages','Jiné jazyky','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (606,8,'Others','others','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (607,8,'Pagemovedsub','Úspěšně přesunuto','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (608,8,'Pagemovedtext','Stránka \"[[$1]]\" přesunuta na \"[[$2]]\".','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (609,8,'Pagetitle','$1 - {{SITENAME}}','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (610,8,'Passwordremindertext','Někdo (patrně vy, z IP-adresy $1) žádal, abychom vám poslali nové heslo pro přihlášení do Wikipedie. Heslo pro uživatele \"$2\" je nyní \"$3\".\nDoporučujeme, abyste se nyní přihlásil a raději změnil heslo.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (611,8,'Passwordremindertitle','Připomenutí ztraceného hesla z Wikipedie','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (612,8,'Passwordsent','A new password has been sent to the e-mail address\nregistered for \"$1\".\nPlease log in again after you receive it.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (613,8,'Perfcached','The following data is cached and may not be completely up to date:','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (614,8,'Perfdisabled','Sorry! This feature has been temporarily disabled\nbecause it slows the database down to the point that no one can use\nthe wiki.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (615,8,'Perfdisabledsub','Here\'s a saved copy from $1:','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (616,8,'Personaltools','Personal tools','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (617,8,'Popularpages','Nejvíce navštěvované stránky','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (618,8,'Portal','Community portal','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (619,8,'Portal-url','Project:Community Portal','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (620,8,'Postcomment','Post a comment','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (621,8,'Poweredby','{{SITENAME}} is powered by [http://www.mediawiki.org/ MediaWiki], an open source wiki engine.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (622,8,'Powersearch','Sercu','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (623,8,'Powersearchtext','\nSearch in namespaces :
    \n$1
    \n$2 List redirects   Search for $3 $9','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (624,8,'Preferences','Preference','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (625,8,'Prefs-help-userdata','* Real name (optional): if you choose to provide it this will be used for giving you attribution for your work.
    \n* Email (optional): Enables people to contact you through the website without you having to reveal your\nemail address to them, and it can be used to send you a new password if you forget it.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (626,8,'Prefs-misc','Misc settings','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (627,8,'Prefs-personal','User data','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (628,8,'Prefs-rc','Recent changes and stub display','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (629,8,'Prefslogintext','Přihlásil jste se \"$1\".\nVaše interní identifikační číslo je .','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (630,8,'Prefsnologin','Dosud nepřihlášen!','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (631,8,'Prefsnologintext','Určite se přihlaste\ndříve než je možno měnit priority.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (632,8,'Prefsreset','Priority odstraněny z registru.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (633,8,'Preview','Náhled','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (634,8,'Previewconflict','Tento náhled ukazuje výše uvedený text, jak bude vypadat po uložení stránky.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (635,8,'Previewnote','Pamatujte, že toto je pouze náhled, ne uložení!','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (636,8,'Previousdiff','← Go to previous diff','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (637,8,'Previousrevision','←Older revision','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (638,8,'Prevn','$1 předchozí','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (639,8,'Printableversion','Verze k tisku','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (640,8,'Printsubtitle','(Z http://cs.wikipedia.org)','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (641,8,'Protect','Protect','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (642,8,'Protectcomment','Reason for protecting','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (643,8,'Protectedarticle','protected $1','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (644,8,'Protectedpage','Chráněná stránka','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (645,8,'Protectedpagewarning','WARNING: This page has been locked so that only\nusers with sysop privileges can edit it. Be sure you are following the\nprotected page\nguidelines.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (646,8,'Protectedtext','This page has been locked to prevent editing; there are\na number of reasons why this may be so, please see\n[[Project:Protected page]].\n\nYou can view and copy the source of this page:','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (647,8,'Protectlogpage','Protection_log','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (648,8,'Protectlogtext','Below is a list of page locks/unlocks.\nSee [[Project:Protected page]] for more information.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (649,8,'Protectmoveonly','Protect from moves only','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (650,8,'Protectpage','Ochrana stránky','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (651,8,'Protectreason','(give a reason)','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (652,8,'Protectsub','(Protecting \"$1\")','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (653,8,'Protectthispage','Chraň stránku','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (654,8,'Proxyblocker','Proxy blocker','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (655,8,'Proxyblockreason','Your IP address has been blocked because it is an open proxy. Please contact your Internet service provider or tech support and inform them of this serious security problem.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (656,8,'Proxyblocksuccess','Done.\n','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (657,8,'Pubmedurl','http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=$1','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (658,8,'Qbbrowse','Listování','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (659,8,'Qbedit','Redigování','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (660,8,'Qbfind','Hledej','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (661,8,'Qbmyoptions','Osobní údaje','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (662,8,'Qbpageinfo','Info stránky','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (663,8,'Qbpageoptions','Parametra stránky','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (664,8,'Qbsettings','Priority na liště nástrojů','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (665,8,'Qbsettingsnote','This preference only works in the \'Standard\' and the \'CologneBlue\' skin.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (666,8,'Qbspecialpages','Special pages','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (667,8,'Querybtn','Žádej!','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (668,8,'Querysuccessful','Žádost o inforaci byla úspěšná','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (669,8,'Randompage','Náhodná stránka','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (670,8,'Randompage-url','Special:Randompage','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (671,8,'Range_block_disabled','The sysop ability to create range blocks is disabled.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (672,8,'Rchide','in $4 form; $1 minor edits; $2 secondary namespaces; $3 multiple edits.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (673,8,'Rclinks','Ukázat poslední změny; ukázat změny během posledních dní.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (674,8,'Rclistfrom','Show new changes starting from $1','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (675,8,'Rcliu','; $1 edits from logged in users','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (676,8,'Rcloaderr','Načti poslední změny','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (677,8,'Rclsub','(ke stráncej odkazy z \"$1\")','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (678,8,'Rcnote','Poslední změny během posledních dní.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (679,8,'Rcnotefrom','Below are the changes since $2 (up to $1 shown).','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (680,8,'Rcpatroldisabled','Recent Changes Patrol disabled','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (681,8,'Rcpatroldisabledtext','The Recent Changes Patrol feature is currently disabled.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (682,8,'Readonly','Database locked','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (683,8,'Readonlytext','Data Wikipedie jsou nyní uzavřena pro nové doplňky a změny, pravděpodobně kvůli pravidelné údržbě dat. Zkuste se připojit znovu po malé době. Uzamykatel zanechal následující zprávu:\n

    $1\n','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (684,8,'Readonlywarning','WARNING: The database has been locked for maintenance,\nso you will not be able to save your edits right now. You may wish to cut-n-paste\nthe text into a text file and save it for later.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (685,8,'Recentchanges','Poslední změny','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (686,8,'Recentchanges-url','Special:Recentchanges','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (687,8,'Recentchangescount','Ukázat množství názvů v Posledních Změnách','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (688,8,'Recentchangeslinked','Ukaž odkazy','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (689,8,'Recentchangestext','Sledujte poslední změny ve Wikipedii na této stránce.\n[[Vítejte, nováčci]]!\nPřečtěte prosím tuto stránku: [[wikipedie:Časté otázky|Časté otázky]],\n[[wikipedie:Drobné rady|Drobné rady]]\n(zvláště [[wikipedie:Názvy titulů|Názvy titulů]]\na [[wikipedie:Neutrální hledisko|Neutrální hledisko]]),\na [[wikipedie:Časté chyby|Časté chyby ve Wikipedii]].\n\nPokud chcete, aby Wikipedie uspěla, je velice důležité, abyste nevkládali články vázané na [[copyright]] někoho jiného. Zákonná odpovědnost by skutečně mohla ohrozit celý projekt, proto to prosím nedělejte.\n\nTaké se podívejte na \n[http://meta.wikipedia.org/wiki/Special:Recentchanges poslední diskusi o Wikipedii]\n(plurlingve)','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (690,8,'Redirectedfrom','(Přesměrováno z $1)','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (691,8,'Remembermypassword','Pamatuj si mé heslo od seance k seanci.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (692,8,'Removechecked','Remove checked items from watchlist','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (693,8,'Removedwatch','Vytaženo z Oblíbených','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (694,8,'Removedwatchtext','Stránka \"$1\" vytažena z tvých Oblíbených.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (695,8,'Removingchecked','Removing requested items from watchlist...','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (696,8,'Resetprefs','Obnovit předchozí priority','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (697,8,'Restorelink','$1 deleted edits','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (698,8,'Resultsperpage','Ukázat nalezené po','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (699,8,'Retrievedfrom','Citováno z \"$1\"','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (700,8,'Returnto','Vrať se na $1.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (701,8,'Retypenew','Napište znovu nové heslo','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (702,8,'Reupload','Načti znovu','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (703,8,'Reuploaddesc','Vrať se k načtení.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (704,8,'Reverted','Obnovení předchozí verze','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (705,8,'Revertimg','res','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (706,8,'Revertpage','Reverted edit of $2, changed back to last version by $1','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (707,8,'Revhistory','Historie redakcí','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (708,8,'Revisionasof','Jak zaregistrováno na ','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (709,8,'Revisionasofwithlink','Revision as of $1; $2
    $3 | $4','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (710,8,'Revnotfound','Revize nenalezena','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (711,8,'Revnotfoundtext','Nelze najít starou revizi, kterou hledáte. Zkuste prosím zkontrolovat URL hledané stránky.\\b','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (712,8,'Rfcurl','http://www.faqs.org/rfcs/rfc$1.html','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (713,8,'Rights','Rights:','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (714,8,'Rollback','Roll back edits','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (715,8,'Rollback_short','Rollback','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (716,8,'Rollbackfailed','Rollback failed','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (717,8,'Rollbacklink','rollback','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (718,8,'Rows','Linie','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (719,8,'Saturday','sobota','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (720,8,'Savearticle','Uchovej změny','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (721,8,'Savedprefs','Vaše priority jsou zaregistrovány.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (722,8,'Savefile','Ulož soubor $1','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (723,8,'Savegroup','Save Group','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (724,8,'Saveprefs','Uložit priority','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (725,8,'Saveusergroups','Save User Groups','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (726,8,'Search','Hledej','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (727,8,'Searchdisabled','

    {{SITENAME}} search is disabled for performance reasons. You can search via Google in the meantime.\nNote that their indexes of {{SITENAME}} content may be out of date.

    ','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (728,8,'Searchquery','Zadání pro vyhledávání \"$1\"','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (729,8,'Searchresults','Výsledek hledání','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (730,8,'Searchresultshead','Sladění výsledku hledání','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (731,8,'Searchresulttext','Nápovědu, jak účinně hledat ve Wikipedii, čtěte na .','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (732,8,'Sectionlink','→','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (733,8,'Selectnewerversionfordiff','Select a newer version for comparison','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (734,8,'Selectolderversionfordiff','Select an older version for comparison','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (735,8,'Selectonly','Žádosti o informace kromě \"SELECT\" jsou omzeny pouze na programátory wikipedie.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (736,8,'Selflinks','Stránky samoodkazující','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (737,8,'Selflinkstext','Tyto stránky obsahují neužitečný odkaz samy na sebe.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (738,8,'Sep','9.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (739,8,'September','září','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (740,8,'Seriousxhtmlerrors','There were serious xhtml markup errors detected by tidy.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (741,8,'Servertime','Server time is now','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (742,8,'Set_rights_fail','User rights for \"$1\" could not be set. (Did you enter the name correctly?)','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (743,8,'Set_user_rights','Set user rights','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (744,8,'Setbureaucratflag','Set bureaucrat flag','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (745,8,'Sharedupload','This file is a shared upload and may be used by other projects.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (746,8,'Shortpages','Drobné stránky','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (747,8,'Show','ukázat','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (748,8,'Showbigimage','Download high resolution version ($1x$2, $3 KB)','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (749,8,'Showhideminor','$1 minor edits | $2 bots | $3 logged in users | $4 patrolled edits ','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (750,8,'Showingresults','Ukazuje nalezené od -a.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (751,8,'Showingresultsnum','Showing below $3 results starting with #$2.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (752,8,'Showlast','Ukaž poslední soubor dle .','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (753,8,'Showpreview','Ukaž náhled','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (754,8,'Showtoc','show','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (755,8,'Sig_tip','Your signature with timestamp','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (756,8,'Siteadminpheading','siteadmin level','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (757,8,'Sitenotice','','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (758,8,'Sitesettings','Site Settings','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (759,8,'Sitesettings-caching','Page caching','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (760,8,'Sitesettings-cookies','Cookies','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (761,8,'Sitesettings-debugging','Debugging','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (762,8,'Sitesettings-features','Features','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (763,8,'Sitesettings-images','Images','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (764,8,'Sitesettings-memcached','Memcache Daemon','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (765,8,'Sitesettings-performance','Performance','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (766,8,'Sitesettings-permissions','Permissions','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (767,8,'Sitesettings-permissions-banning','User banning','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (768,8,'Sitesettings-permissions-miser','Performance settings','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (769,8,'Sitesettings-permissions-readonly','Maintenance mode: Disable write access','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (770,8,'Sitesettings-permissions-whitelist','Whitelist mode','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (771,8,'Sitesettings-wgAllowExternalImages','Allow to include external images into articles','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (772,8,'Sitesettings-wgDefaultBlockExpiry','By default, blocks expire after:','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (773,8,'Sitesettings-wgDisableQueryPages','When in miser mode, disable all query pages, not only \"expensive\" ones','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (774,8,'Sitesettings-wgHitcounterUpdateFreq','Hit counter update frequency','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (775,8,'Sitesettings-wgMiserMode','Enable miser mode, which disables most \"expensive\" features','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (776,8,'Sitesettings-wgReadOnly','Readonly mode','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (777,8,'Sitesettings-wgReadOnlyFile','Readonly message file','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (778,8,'Sitesettings-wgShowIPinHeader','Show IP in header (for non-logged in users)','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (779,8,'Sitesettings-wgSysopRangeBans','Sysops may block IP-ranges','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (780,8,'Sitesettings-wgSysopUserBans','Sysops may block logged-in users','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (781,8,'Sitesettings-wgUseCategoryBrowser','Enable experimental dmoz-like category browsing. Outputs things like: Encyclopedia > Music > Style of Music > Jazz','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (782,8,'Sitesettings-wgUseCategoryMagic','Enable categories','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (783,8,'Sitesettings-wgUseDatabaseMessages','Use database messages for user interface labels','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (784,8,'Sitesettings-wgUseWatchlistCache','Generate a watchlist once every hour or so','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (785,8,'Sitesettings-wgWLCacheTimeout','The hour or so mentioned above (in seconds):','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (786,8,'Sitesettings-wgWhitelistAccount-developer','Developers may create accounts for users','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (787,8,'Sitesettings-wgWhitelistAccount-sysop','Sysops may create accounts for users','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (788,8,'Sitesettings-wgWhitelistAccount-user','Users may create accounts themself','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (789,8,'Sitesettings-wgWhitelistEdit','Users must be logged in to edit','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (790,8,'Sitesettings-wgWhitelistRead','Anonymous users may only read these pages:','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (791,8,'Sitestats','O síti ','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (792,8,'Sitestatstext','V naší sbírce souborů se nachází celkem stránek.\nToto číslo obsahuje \"diskusní stránky\", stránky o Wikipedii, droboučké\n\"podčlánky\", přesměrování, a další, které nejsou články v pravém slova smyslu. Pomineme-li je, zbývá skutečných článků.

    \n\n

    Bylo navštíveno celkem stránek, a zredigováno celkem stránek od zavedení tohoto programu Wikipedie (Listopad 2002).\nTo je v průměru jedna stránka na návštěv, a na redakcí.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (793,8,'Sitesubtitle','Wikipedie: Otevřená Encyklopedie','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (794,8,'Sitesupport','-','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (795,8,'Sitesupport-url','Project:Site support','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (796,8,'Sitetitle','Wikipedie','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (797,8,'Siteuser','Wikibooks user $1','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (798,8,'Siteusers','Wikibooks user(s) $1','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (799,8,'Skin','Etos','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (800,8,'Spamprotectionmatch','The following text is what triggered our spam filter: $1','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (801,8,'Spamprotectiontext','The page you wanted to save was blocked by the spam filter. This is probably caused by a link to an external site.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (802,8,'Spamprotectiontitle','Spam protection filter','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (803,8,'Special_version_postfix','','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (804,8,'Special_version_prefix','','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (805,8,'Specialpage','Special Page','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (806,8,'Specialpages','Speciální stránky','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (807,8,'Spheading','Speciální stránky','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (808,8,'Sqlislogged','Please note that all queries are logged.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (809,8,'Sqlquery','Napiš žádost o informaci','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (810,8,'Statistics','Statistika','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (811,8,'Storedversion','Registrovaná verze','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (812,8,'Stubthreshold','Threshold for stub display','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (813,8,'Subcategories','Subcategories','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (814,8,'Subcategorycount','There are $1 subcategories to this category.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (815,8,'Subcategorycount1','There is $1 subcategory to this category.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (816,8,'Subject','Subject/headline','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (817,8,'Subjectpage','Stránka námětu','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (818,8,'Successfulupload','Načtení úspěšně provedeno!','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (819,8,'Summary','Resumé','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (820,8,'Sunday','neděle','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (821,8,'Sysoptext','Žádaný úkon je proveditelný pouze \"správci\".\nČtěte prosím $1.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (822,8,'Sysoptitle','Účet správce nutný','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (823,8,'Tableform','tabulka','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (824,8,'Tagline','Z Wikipedie, otevřené encyklopedie.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (825,8,'Talk','Discussion','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (826,8,'Talkexists','The page itself was moved successfully, but the\ntalk page could not be moved because one already exists at the new\ntitle. Please merge them manually.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (827,8,'Talkpage','Diskusní stránka','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (828,8,'Talkpagemoved','Diskusní stránka také přesunuta.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (829,8,'Talkpagenotmoved','Diskusní stránka není přesunuta.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (830,8,'Talkpagetext','','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (831,8,'Templatesused','Templates used on this page:','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (832,8,'Textboxsize','Velikost redakčního okna','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (833,8,'Textmatches','Nalezeno podle obsahu','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (834,8,'Thisisdeleted','View or restore $1?','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (835,8,'Thumbnail-more','Enlarge','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (836,8,'Thursday','čtvrtek','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (837,8,'Timezonelegend','Time zone','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (838,8,'Timezoneoffset','Rozdíl','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (839,8,'Timezonetext','Označte, o kolik se vaše časové pásmo liší od serveru (UTC).\nNapříklad, pro Střední Evropu Časové pásmo, označte \"1\" v zimě nebo \"2\" v létě.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (840,8,'Titlematches','Nalezeno dle názvů','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (841,8,'Toc','Table of contents','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (842,8,'Tog-editondblclick','Redigovat dvojím kliknutím (JavaScript)','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (843,8,'Tog-editsection','Enable section editing via [edit] links','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (844,8,'Tog-editsectiononrightclick','Enable section editing by right clicking
    on section titles (JavaScript)','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (845,8,'Tog-editwidth','Redakční okno roztáhnout na celou šíři.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (846,8,'Tog-hideminor','Ukrýt malé redakční úpravy Poslední změny','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (847,8,'Tog-highlightbroken','Začervenit odkazy na neexistující stránky','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (848,8,'Tog-hover','Ukázat odkazovou adresu (hoverbox) nad wikiovými odkazy','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (849,8,'Tog-justify','Zarámovat řádky','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (850,8,'Tog-minordefault','Mark all edits minor by default','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (851,8,'Tog-nocache','Disable page caching','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (852,8,'Tog-numberheadings','Automaticky spočítat sekce','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (853,8,'Tog-previewonfirst','Show preview on first edit','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (854,8,'Tog-previewontop','Show preview before edit box and not after it','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (855,8,'Tog-rememberpassword','Pamatovat si mé heslo od návštěvy k návětěvě','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (856,8,'Tog-showtoc','Show table of contents
    (for pages with more than 3 headings)','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (857,8,'Tog-showtoolbar','Show edit toolbar','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (858,8,'Tog-underline','Podtrhnout odkazy','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (859,8,'Tog-usenewrc','Enhanced recent changes (not for all browsers)','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (860,8,'Tog-watchdefault','Náhled na nové a modifikované články','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (861,8,'Toolbox','Toolbox','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (862,8,'Tooltip-compareselectedversions','See the differences between the two selected versions of this page. [alt-v]','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (863,8,'Tooltip-minoredit','Mark this as a minor edit [alt-i]','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (864,8,'Tooltip-preview','Preview your changes, please use this before saving! [alt-p]','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (865,8,'Tooltip-save','Save your changes [alt-s]','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (866,8,'Tooltip-search','Search this wiki [alt-f]','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (867,8,'Tuesday','úterý','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (868,8,'Uclinks','Ukaž poslední redakce; ukaž poslední dny.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (869,8,'Ucnote','Zde jsou poslední redakce tohoto wikipediisty během posledních dní.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (870,8,'Uctop',' (top)','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (871,8,'Unblockip','Zrušit blokování adresy IP','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (872,8,'Unblockiptext','Tímto formulářem možno obnovit právo blokované adresy IP opět přispívat do wikipedie.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (873,8,'Unblocklink','uvolni','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (874,8,'Unblocklogentry','unblocked \"$1\"','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (875,8,'Uncategorizedcategories','Uncategorized categories','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (876,8,'Uncategorizedpages','Uncategorized pages','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (877,8,'Undelete','Obnov odstraněnou stránku','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (878,8,'Undelete_short','Undelete $1 edits','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (879,8,'Undeletearticle','Obnovit odstraněný článek','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (880,8,'Undeletebtn','Obnovit!','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (881,8,'Undeletedarticle','obnoveno \"$1\"','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (882,8,'Undeletedrevisions','$1 revisions restored','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (883,8,'Undeletedtext','Článek [[]] je úspěšně obnoven.\nPohleď do [[Wikipedie:Kniha odstranění]] pro záznam posledních odstranění a obnovení.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (884,8,'Undeletehistory','Pokud stránku obnovíš, všechny revize budou v historii obnoveny. Pokud byla vytvořena nová stránka se stejným jménem jako odstraněná, obnovené revize se zapíší na starší místo v historii a nová stránka nebude nahrazena.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (885,8,'Undeletepage','Ukaž a obnov odstraněnou stránku','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (886,8,'Undeletepagetext','Tyto stránky jsou odstraněny, avšak dosud archivovány, je možno je obnovit. Archiv se vyprazdňuje pravidelně.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (887,8,'Undeleterevision','Odstraněná revize z ','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (888,8,'Undeleterevisions',' revize archivovány','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (889,8,'Unexpected','Neočekávaná hodnota: \"$1\"=\"$2\".','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (890,8,'Unlockbtn','Odemknout databázi','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (891,8,'Unlockconfirm','Ano, opravdu chci odemknout databázi.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (892,8,'Unlockdb','Odemčít databázi','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (893,8,'Unlockdbsuccesssub','Databáze odemknuta','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (894,8,'Unlockdbsuccesstext','Databáze wikipedie je odemknuta.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (895,8,'Unlockdbtext',' Pokud odemčeš databázi, umožníš odstatním provádět redakce, volit preference, oblíbené a jiné věci. Potvrď, že to opravdu chceš udělat.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (896,8,'Unprotect','Unprotect','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (897,8,'Unprotectcomment','Reason for unprotecting','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (898,8,'Unprotectedarticle','unprotected $1','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (899,8,'Unprotectsub','(Unprotecting \"$1\")','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (900,8,'Unprotectthispage','Neochraňuj stránku','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (901,8,'Unusedimages','Nepoužívané obrázky a soubory','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (902,8,'Unusedimagestext','

    Ostatní WWW-stránky, např. jinojazyčné Wikipedie, mohou udělat přímé odkazy pomocí URL, ty se nezapočítávají do tohoto seznamu.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (903,8,'Unwatch','Unwatch','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (904,8,'Unwatchthispage','Ignorovat tuto stránku','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (905,8,'Updated','(Změna zaregistrována)','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (906,8,'Upload','Načti','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (907,8,'Uploadbtn','Načti soubor','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (908,8,'Uploadcorrupt','The file is corrupt or has an incorrect extension. Please check the file and upload again.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (909,8,'Uploaddisabled','Sorry, uploading is disabled.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (910,8,'Uploadedfiles','Načtené soubory ','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (911,8,'Uploadedimage','načetl \"$1\"','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (912,8,'Uploaderror','Při načítání došlo k chybě','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (913,8,'Uploadfile','Načti soubor','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (914,8,'Uploadlink','Načti obrázek','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (915,8,'Uploadlog','kniha nahrávek','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (916,8,'Uploadlogpage','kniha_nahrávek','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (917,8,'Uploadlogpagetext','Přehled naposledy načtených souborů. Všechny časové údaje se ukazují podle časového pásma UTC.\n

      \n
    \n','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (918,8,'Uploadnologin','Nepřihlášený','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (919,8,'Uploadnologintext','Musíte mít účet a přihlaste se\npro načtení souboru.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (920,8,'Uploadtext','Pro prohlížení a hledání již načtených souborů, jděte na\n[[Special:Imagelist|seznam načteného]].\nKaždé načtení a odstranění je registrováno u\n[[Project:Načtení_log|Načtení_log]].\n\nPoužij tento formulář pro načtení nového obrázku nebo jiných souborů jako ilustrací ke svým článkům. U běžných prohlížečů se dole objeví buton \"Procházet...\" apod; tím se otevřou adresáře tvého pevného disku, kde si vybereš svůj soubor, jehož název vyplní pole vedle butonu; musíš také potvrdit prohlášení, že neporušuješ ničí copyright. Vlastní načtení provedeš kliknutím na buton \"Načti\". Může to trvat i delší dobu, pokud je soubor velký a počítač pomalý.\n\nWikipedie upřednostňuje formát JPEG pro fotografie,\nPNG pro grafiku, diagramy, apod.; a OGG pro zvukové nahrávky.\nPojmenuj svůj soubor informativním způsobem, aby se vyloučila nedorozumění.\nPro vložení obrázku do článku napiš odkaz ve formě\n\'\'\'[[obrázek:soubor.jpg]]\'\'\' nebo\n\'\'\'[[obrázek:obraz.png|text pro prohlížeče bez grafiky]]\'\'\', nebo\n\'\'\'[[soubor:soubor.ogg]]\'\'\' por sounds.\n\nVšimni si, že články ve Wikipedii mohou redigovat i ostatní wikipediisté. Mohou přidávat, nahrazovat, i odstraňovat, pokud to prospěje encyklopedii. Pokud někdo bude zlomyslně poškozovat soubory jiných autorů,\nmůže mu být zablokován přístup k redigování.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (921,8,'Uploadwarning','Varování','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (922,8,'Usenewcategorypage','1\n\nSet first character to \"0\" to disable the new category page layout.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (923,8,'User_rights_set','User rights for \"$1\" updated','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (924,8,'Usercssjsyoucanpreview','Tip: Use the \'Show preview\' button to test your new CSS/JS before saving.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (925,8,'Usercsspreview','\'\'\'Remember that you are only previewing your user CSS, it has not yet been saved!\'\'\'','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (926,8,'Userexists','Uživatel se stejným jménem je už registrován. Zvolte jiné jméno.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (927,8,'Userjspreview','\'\'\'Remember that you are only testing/previewing your user JavaScript, it has not yet been saved!\'\'\'','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (928,8,'Userlevels','User levels management','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (929,8,'Userlevels-addgroup','Add group','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (930,8,'Userlevels-editgroup','Edit group','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (931,8,'Userlevels-editgroup-description','Group description (max 255 characters):
    ','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (932,8,'Userlevels-editgroup-name','Group name: ','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (933,8,'Userlevels-editusergroup','Edit user groups','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (934,8,'Userlevels-group-edit','Existent groups: ','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (935,8,'Userlevels-groupsavailable','Available groups:','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (936,8,'Userlevels-groupshelp','Select groups you want the user to be removed from or added to.\nUnselected groups will not be changed. You can unselect a group by using CTRL + Left Click','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (937,8,'Userlevels-groupsmember','Member of:','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (938,8,'Userlevels-lookup-group','Manage group rights','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (939,8,'Userlevels-lookup-user','Manage user groups','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (940,8,'Userlevels-user-editname','Enter a username: ','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (941,8,'Userlogin','Přihlašte se','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (942,8,'Userlogout','Na shledanou','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (943,8,'Usermailererror','Mail object returned error: ','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (944,8,'Userpage','View user page','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (945,8,'Userrightspheading','userrights level','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (946,8,'Userstats','O uživatelích ','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (947,8,'Userstatstext','Zapsalo se uživatelů. Z nich, jsou spoluvedoucí \n(viz ).','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (948,8,'Val_article_lists','List of validated articles','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (949,8,'Val_clear_old','Clear my other validation data for $1','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (950,8,'Val_form_note','Hint: Merging your data means that for the article\nrevision you select, all options where you have specified no opinion\nwill be set to the value and comment of the most recent revision for which you\nhave expressed an opinion. For example, if you want to change a single option\nfor a newer revision, but also keep your other settings for this article in\nthis revision, just select which option you intend to change, and\nmerging will fill in the other options with your previous settings.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (951,8,'Val_merge_old','Use my previous assessment where selected \'No opinion\'','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (952,8,'Val_no_anon_validation','You have to be logged in to validate an article.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (953,8,'Val_noop','No opinion','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (954,8,'Val_page_validation_statistics','Page validation statistics for $1','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (955,8,'Val_percent','$1%
    ($2 of $3 points
    by $4 users)','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (956,8,'Val_percent_single','$1%
    ($2 of $3 points
    by one user)','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (957,8,'Val_stat_link_text','Validation statistics for this article','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (958,8,'Val_tab','Validate','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (959,8,'Val_table_header','Class$1Opinion$1Comment\n','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (960,8,'Val_this_is_current_version','this is the latest version','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (961,8,'Val_total','Total','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (962,8,'Val_user_validations','This user has validated $1 pages.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (963,8,'Val_validate_article_namespace_only','Only articles can be validated. This page is not in the article namespace.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (964,8,'Val_validate_version','Validate this version','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (965,8,'Val_validated','Validation done.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (966,8,'Val_version','Version','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (967,8,'Val_version_of','Version of $1','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (968,8,'Val_view_version','View this version','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (969,8,'Validate','Validate page','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (970,8,'Variantname-zh','zh','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (971,8,'Variantname-zh-cn','cn','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (972,8,'Variantname-zh-hk','hk','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (973,8,'Variantname-zh-sg','sg','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (974,8,'Variantname-zh-tw','tw','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (975,8,'Version','Version','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (976,8,'Viewcount','Stránka se ukázala $1-krát.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (977,8,'Viewprevnext','Ukaž ($1) ($2) ($3).','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (978,8,'Viewsource','View source','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (979,8,'Viewtalkpage','View discussion','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (980,8,'Wantedpages','Žádoucí stránky ','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (981,8,'Watch','Watch','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (982,8,'Watchdetails','($1 pages watched not counting talk pages;\n$2 total pages edited since cutoff;\n$3...\nshow and edit complete list.)','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (983,8,'Watcheditlist','Here\'s an alphabetical list of your\nwatched pages. Check the boxes of pages you want to remove\nfrom your watchlist and click the \'remove checked\' button\nat the bottom of the screen.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (984,8,'Watchlist','Oblíbené stránky','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (985,8,'Watchlistcontains','Your watchlist contains $1 pages.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (986,8,'Watchlistsub','(uživatele \"$1\")','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (987,8,'Watchmethod-list','checking watched pages for recent edits','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (988,8,'Watchmethod-recent','checking recent edits for watched pages','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (989,8,'Watchnochange','None of your watched items were edited in the time period displayed.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (990,8,'Watchnologin','Neuvedeno jméno','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (991,8,'Watchnologintext','Nutno uvést jméno\npro aktivaci tvých oblíbených stránek.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (992,8,'Watchthis','Watch this page','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (993,8,'Watchthispage','Věnovat pozornost této stránce','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (994,8,'Wednesday','středa','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (995,8,'Welcomecreation','

    Vítejte, $1!

    Váš účet je vytvořen.\nNezapomeňte uvést své preference ve Wikipedii!','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (996,8,'Whatlinkshere','Přihlašovaní sem','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (997,8,'Whitelistacctext','To be allowed to create accounts in this Wiki you have to [[Special:Userlogin|log]] in and have the appropriate permissions.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (998,8,'Whitelistacctitle','You are not allowed to create an account','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (999,8,'Whitelistedittext','You have to [[Special:Userlogin|login]] to edit pages.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (1000,8,'Whitelistedittitle','Login required to edit','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (1001,8,'Whitelistreadtext','You have to [[Special:Userlogin|login]] to read pages.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (1002,8,'Whitelistreadtitle','Login required to read','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (1003,8,'Wikipediapage','View project page','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (1004,8,'Wikititlesuffix','Wikipedie','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (1005,8,'Wlnote','Below are the last $1 changes in the last $2 hours.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (1006,8,'Wlsaved','This is a saved version of your watchlist.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (1007,8,'Wlshowlast','Show last $1 hours $2 days $3','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (1008,8,'Wrong_wfQuery_params','Incorrect parameters to wfQuery()
    \nFunction: $1
    \nQuery: $2\n','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (1009,8,'Wrongpassword','Heslo vámi uvedené nesouhlasí. Zkuste to znovu.','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (1010,8,'Yourdiff','Rozdíly','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (1011,8,'Youremail','Vaše e-mailová adresa','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (1012,8,'Yourlanguage','Interface language','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (1013,8,'Yourname','Název vašeho účtu','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (1014,8,'Yournick','Zdrobnělina vašho jména (pro podpisy)','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (1015,8,'Yourpassword','Vaše heslo','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (1016,8,'Yourpasswordagain','Napište heslo znovu','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (1017,8,'Yourrealname','Your real name*','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (1018,8,'Yourtext','Váš text','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (1019,8,'Yourvariant','Language variant','',0,'MediaWiki default','20041221075642','sysop',0,0,0,1,0,'20041221075642','79958778924357'); INSERT INTO cur VALUES (1020,0,'Humanitní_obory','\'\'Lenka Klímková\n\'\'\n\n\'\'\'Herman Hesse, jeho Stepní vlk aneb filosofická interpretace hry v literárním díle pojatá okuláry Eugena Finka (a Lenky Klímkové)\n\n\'\'\' \n\n \n\nNastínění problému:\n\nHarry, ústřední hrdina knihy, žije v iluzi, že on sám je složen ze člověka a vlka (nebo-li, že je rozdělen na pudy a ducha), kteří se navzájem nemohou snést. Tento fakt dokládá celá první polovina knihy, kde jsou na mnoha příkladech popsány Harryho nesnáze a jeho chuť skončit svůj život.\n\nJiž první náznak vyřešení Harryho problémů přináší „Traktát o stepním vlku“, který částečně odkrývá Harryho iluzi, Harryho „hru“ na člověka a vlka. Poukazuje na to, že rozdělení na člověka a vlka je pouhé Harryho zjednodušení, a že se člověk skládá z mnoha bytostí. Upozorňuje také na vrozenou a nutkavou potřebu lidí představovat si své já jako jednotu. Ve skutečnosti však žádné já není jednotou, ale neobyčejně mnohostranným světem, světem nespočetných možností, říká traktát.\n\n \n\nHra z pohledu Eugena Finka:\n\nPohled Eugena Finka na hru vykládám z knihy Hra jako symbol světa. Nebudu se však obšírně zabývat světem, který chce Fink s pomocí hry uchopit (což je také jeho první plán), nýbrž hrou samotnou a tím, jak ji Fink vidí.\n\nHru každý z nás zná, každý z nás byl jednou dítě, které si hrálo. Hra jako fenomén je podle Finka něco známého, je nenápadná a běžná. Nemusíme ji vymaňovat ze skrytosti, nepotřebujeme ji odhalovat jako nějaké odlehlé a cizí věci. Představuje pro nás uvolnění. Ve hře vidíme nespoutanou volnost.\n\nFink se na hru dívá jako na něco, co dospělý člověk již moc často nedělá, je to pro něj jen jakýsi „relax“, a závidí dětem jejich hravost a bezstarostnost. Fink také dává hru do protikladu s vážnosti lidského života. Mezi hru, kterou dospělý člověk vnímá, řadí Fink různé podoby rozptylování (masová zábava): flirt, sport, všechny typy odvážných a riskantních činů, nebo zábavy, které jsou přímo jako hra definovány: divadlo, kino, rozhlas, televize (přidávám internet, to Fink ještě neznal ;-). Tak je vidět, že fenomén hry je široký a mnohotvárný, zahrnuje bohatství nejrůznějších forem a struktur.\n\nTak jako u Heideggera pobyt rozumí světu, tak člověk u Finka hře vždy již nějak rozumí, vlastní jakési již předchůdné porozumění.\n\nUvažování o hře však samo o sobě není hrou a rovněž tak jej není za potřebí k tomu , abychom cítili radost ze hry. Myšlením se ke hře neskláníme, nýbrž naopak se od ní odkláníme, pozbýváme bezstarostnou životní naivitu, impulzivní vzmach a uvolněnost, radost z nereflektovaného a nenalomeného žití.\n\nDále Fink soudí, že jen děti si hrají s ničím nerušenou potěchou, a že dospělí se věnují hře často již se špatným svědomím, berou hru spíše jako zotavující vyplňování volného času , které uvolňuje ducha a na okamžik odlehčuje břímě povinností .\n\nFink proto také rozlišuje mezi myšlením a hrou. Myšlením se podle něj od hry odkláníme, pozbýváme onu bezstarostnou životní naivitu, impresivní vzmach, uvolněnost, nereflektovanou radost žití. Napětí nejistého hledání štěstí u člověka vrhá svůj stín na všechna jeho díla a jeho dny a v hlubokém smyslu stojí za tím, co nazýváme „vážností života“. Tuto vážnost pociťujeme v tvrdém zápase o každodenní chléb, v konfrontaci s přírodou, v krocení vášní a žádostí i tam, kde pracujeme a kde se učíme.\n\nOproti tomu je hravé počínání o sobě ne-vážné, nemá závažný a tíživý ráz lidské skutečnosti jakožto úkolu sebeuskutečňování , je vážnosti zbaveno a svou odpoutanou lehkostí je s to člověka svést. A tak je konání v modu „jakoby“ bez závazností a povinnosti.\n\nVýhodou hry je to, že z ní je možno vystoupit a samotné pravidlo hry zrušit. Oproti hře každé lidské jednání vyjevuje účel, jenž je v něm zamýšlen. Tak téměř každé jednání člověka je smysluplné gesto, poukazující k celku pozemského bytí a konečného účelu, který mu vládne. Hra je jednání, jemuž tento poukaz ke smyslu chybí, které spíše proti něčemu takovému kontrastuje a vydává se za něco nevážného a zdánlivého. Konání ve hře nic závažného nerozhoduje, nesvazuje nás a nezavazuje, je jakýmsi pouhým zkoušením možností, které nemá žádné nevyhnutelné následky. Hra kontrastuje k vážnosti lidského bytí a je povzneseným způsobem vyžívání.\n\nBýti vším to můžeme jen ve hře. Mimo hru jsme pevně vázáni historií našeho životního vývoje, jsme v situaci kterou nelze volit, jsme výtvorem toho, co jsme dříve vykonali a od čeho jsme upustili, volili jsme mnohokrát a ztratili jsme tímto způsobem nesčetné možnosti. Skutečnými se totiž stáváme pouze tím, že neustále ztrácíme možnosti. Fink říká, že „dítě je neurčitě vším, stařec je určitě jen nemnohým.“ (str.94) (Rodíme se jako mnohost a umíráme jako jeden). A právě hořkost nezadržitelného ochuzování našich možností je zmírňována hrou.\n\nV proudu neskutečnosti (ve hře) tak můžeme, nezatíženi dějinami, takřka začít znovu, můžeme volit v imaginárním prostoru a imaginárním čase. Nevážnost hry záleží v tom, že iluzivním způsobem napodobuje vážnost života, hra je imitace v prostoru imaginarity, ve hře jsou nové možnosti, které v životě neznáme.\n\n \nVyřešení problému:\n\nV magickém divadle se Harry dozvídá o důležitosti smíchu, ten je také jedním z aspektů HRY: člověk, který se směje, ví, že věc není vážná, a ani život jako HRA není vážný. S pomocí smíchu lze Harryho vyléčit: „“To byl dobrý smích, Harry,“ zvolal Pablo, „ještě se naučíš smát jako nesmrtelní. Tak jsi konečně zabil stepního vlka…““(str. 163)\n\nZde také narazí na místnost se zrcadlem, které vytvoří bezpočet Harryů, tato zkušenost se Harrymu bude hodit v místnosti s názvem „Úvod do vytváření osobnosti“. Zde se setkává s hráčem šachu. Figurky představují jednotlivé Harryho části (u mě masky), se kterými se dá utvořit nespočetně mnoho kombinací. Hráč mu dává návod, který jej může zachránit před iluzí rozdvjenosti člověka a stepního vlka: „ „Chybný a neštěstí vyvolávající názor, že člověk je setrvalá jednota, je nám znám. Je vám rovněž známo, že se člověk skládá z řady duší, ze spousty já…““(str. 175) Tomuto rozštěpení věda říká schizofrenie, ale hráč ukazuje, jak je mylná a nešťastná představa jediného a celistvého já: „“…Tomu, kdo prožil rozpad svého já, ukazujeme, že může jednotlivé kousky kdykoli a v libovolném řazení znovu sestavovat a tím docilovat nekonečné rozmanitosti hry života…““(str.175/176) a dále mu hráč praví a blíže vysvětluje: „Tak jako pomatenost ve vyšším smyslu je počátkem veškeré moudrosti, je i schizofrenie počátkem veškerého umění, veškeré fantazie“ (str.176).\n\nPřes to, že Harry dostane tak skvělý návod na vyřešení svého problému, nebere si jej ,moc k srdci a v závěru knihy opět upadá do původní iluze rozdvojenosti své osobnosti a nad člověkem zvítězí vlk.\n\n \nMůj osobní závěr:\n\nOsobně s Finkovým pojetím hry souhlasím. HRA je něco nevážného, jedině ve HŘE můžeme býti vším. Jedině HRA ním dává nespočetné množství možností a popírá vážnost, tíhu a nesnesitelnost vrženosti lidského pobytu. HRA je volba, díky níž máme nespočet možností, jak se svým životem naložit, protože nejsme vázáni svou historií.\n\nHRA by však neměla kontrastovat s vážností lidského života, protože lidský život sám o sobě je nevážný. Člověk má snahu utvořit něco celistvého a nezničitelného a doufá, že to vydrží navždy, avšak ve skrytu duše ví, že celá konstrukce jedné osobnosti (nebo dvou: člověka a vlka u Harryho) se jednou nevyhnutelně zbourá a nepřetrvá. Proto je nutné vidět lidskou existenci a celý lidský život jako HRU. Myslet si, že je člověk nějaká pevná osobnost, která je něčím omezena je iluzí.\n\nŽivot jako HRA je řešením celého Harryho problému. Harry se totiž celou dobu cítí být svázán svou historií, má představu, že on je něco a tím se nesmírně omezuje, je tím strnulý a zkostnatělý. Jeho historie mu nedovolí volit.\n\nJako pomůcka v životě jako HŘE slouží masky. Člověk může podle situace volit, jakou masku nasadí. Čím je člověk v životě jako HŘE sběhlejší, tím má na výběr více masek. Masky slouží potom jako vytvořené osobnosti, které však ve svém konání nikdy nejsou vážné. Je tu stále vědomí, že to, co člověk činí, je stále HRA.\n\nNebezpečí v životě každého člověka nastává tehdy, jakmile začne věřit, že maska, kterou nosí nejčastěji, je jeho plná a nezničitelná osobnost. Potom ho tato mylná iluze svazuje a omezuje jeho jinak neomezené možnosti. Harry tímto způsobem věřil, že masky člověka a vlka jsou skutečné.\n\nMasky jsou maskami od toho, aby se daly sundat, pod nimi není nic, je tu jen absolutní a neomezená mysl a neomezený prostor, který je plný možností.','',0,'212.158.134.54','20041221214803','',0,0,0,1,0.137538618157,'20041221214803','79958778785196'); INSERT INTO cur VALUES (1021,0,'.cs','\nVítejte v projektu .CS.\n\n\n\n\n== 1. O projektu ==\n\nZ důvodu malého rozsahu informací České mutace projektu Wikipedia, Wikibooks a spol.\njsem se rozhodl vytvořit tento projekt. Tímto všechny návštěvníky žádám, aby zde\npublikovali s mírou a chovali se rozumně. Dále také připomínám základní pravidlo\na tím je, že zde nesmí být publikovány žádné zákonem chráněné texty.\n\n\n\n== 2. Odkazy ==\n\nObsah projektu: [http://cs.wikibooks.org/wiki/.cs/system.content Obsah]','Oprava stránky',13,'Tom','20050101170900','',0,0,1,0,0.021381719608,'20050101170900','79949898829099'); INSERT INTO cur VALUES (1022,0,'.cs/system.content','Zde naleznete seznam materiálů dostupných v projektu.\n\n\n== Časopisy ==\n\n\n\n== Knihy ==\n\n\n\n== Ostatní dokumenty ==','',13,'Tom','20050101171300','',0,0,0,1,0.705330997411,'20050101171300','79949898828699'); INSERT INTO cur VALUES (1023,12,'Contents','','',0,'194.212.136.17','20050110214018','',0,0,0,0,0.429708087942,'20050110214018','79949889785981'); INSERT INTO cur VALUES (1024,0,'Věda','\'\'\'Kovy ve stomatologické protetice\'\'\' \n\n\nSložení slitin se obvykle udává ve \'\'\'váhových procentech\'\'\', ale existuje i udávání v \'\'\'atomových procentech\'\'\'. Au -slitiny také v \'\'\'karátech\'\'\' (100% = 24k)\n\nSlitiny se pojmenovávají podle nejvíc zastoupených kovů, názvosloví se liší v různých zemích, u nás je obvyklé pořadí prvků podle \'\'\'abecedy\'\'\', jinde podle \'\'\'procentuálního zastoupení\'\'\' (ČR: chromkobalt, správně chemicky kobalt-chrom).\n\nDůležitý je obsah \'\'\'ušlechtilých kovů\'\'\', tzn. \'\'\'Au\'\'\' a kovů \'\'\'Pt-skupiny\'\'\' (Pt, Pd, Ir, ev. Ru, Rh) - z hlediska stomatologie se mezi ušlechtilé kovy nepočítá Ag (v ústech koroduje).\n\n Au: měkké, odolné proti korozi\n Ag: pevnost a tvrdost (vytváří kovové sloučeniny), v něk. desítkách váh.% bílá barva slitiny\n Cu: pevnost a tvrdost (vytváří kovové sloučeniny)\n Pt,Pd: menší zrna slitiny (krystalizují nejdřív-hodně kryst. center), zvyšují pevnost a tvrdost, už od něk. váh.% bílá barva slitiny, odolné proti korozi\n\n\n\n \n \'\'\'Dělení\'\'\':\n\n 1. \'\'\'Slitiny ušlechtilých kovů\'\'\'\n a/ slitiny pro běžné použití\n I. Au slitiny - s vysokým, redukovaným, nízkým obsahem Au\n II. Ag slitiny (stříbropalládiové)\n b/ slitiny pro kovokeramiku\n I. Au slitiny - s vysokým, redukovaným, nízkým obsahem Au\n II. Pd slitiny \n\n 2. \'\'\'Slitiny obecných kovů\'\'\'\n a/ Co-Cr slitiny (chromkobaltové)\n I. pro skelety\n II. pro metalokeramiku\n b/ Ni-Cr slitiny (chromniklové) \n c/Titan \n (d/ hliníkové bronzy)\n\n\n\nAd 1. \'\'\'Slitiny ušlechtilých kovů\'\'\'\n a/ slitiny pro běžné použití\n\n I. Au slitiny = drahé dentální kovy\n \n Dříve se používalo dělení na skupinu A (obsah Au více než 75%) a skupinu B (méně než 75%).\n\n aa/\'\'\' s vysokým obsahem Au\'\'\'\n\n• Ušlechtilé kovy - min. 75%, Au - min. 65%(tj. min. 16 karátů),\n• velmi biokompatibilní, příp.koroze je způsobená hrubými chybami při zpracování, \n• snadno tavitelné a odlévatelné, \n• hustota 16 g/cm3, \n• teplotní kontrakce 1,4%, tavná teplota 870-1050°C. \n• Dělení je čistě podle tvrdosti, chemické složení není podstatné.\n \n 1. \'\'\'měkké\'\'\' - málo namáhané inlaye (např. Au85 Ag10 Cu3 Zn 1) Tvrdost podle Brinella je 45-70 HB - např. Au 22 kar (Safina)\n 2. \'\'\'středně tvrdé\'\'\' - rozsáhlé inlaye, onlaye, jednotlivé korunky (např. Au75 Ag 12 Cu 10 Pt/Pd2 Zn1) Tvrdost je 80-90 HB.\n 3. \'\'\'tvrdé\'\'\' - onlaye, korunky, gracilní můstky (např. Au70 Ag14 Cu 10 Pt/Pd5 Zn1) Tvrdost 95-115 HB -např. Au 20 kar(Safina)\n 4. \'\'\'velmi tvrdé\'\'\' - můstky, konstrukce ČSN, opěrné třmeny, kořenové nástavby (např. Au 65 Ag9 Cu15 Pt/Pd10 Zn1) Tvrdost je 130-160 HB - např. Au 18 kar Pt (Safina)\n\nOd 1. po 4. stoupá tvrdost a tuhost (rigidita), klesá tavná teplota\nZn funguje jako scavenger - při tavení vychytává oxidy a sám je preferenčně oxidován)\nCu může vytvářet v ústech černé oxidy - lépe slitiny bez Cu\n\n\n \n \n bb/ \'\'\'s redukovaným obsahem Au\'\'\'\n\n• Ušlechtilé kovy - 60%-75%, Au- 50%-55% (12-14kar), \n• odolné proti korozi, ale už náchylnější na chyby při zpracování, \n• více Pd -bělejší barva. \n• tavná teplota 1150-1250°C, \n• hustota 14 g/cm3, teplotní kontrakce 1,4%, \n\nNapř. Aurix L, Aurix L60 (Safina)\n\n cc/ \'\'\'s nízkým obsahem Au\'\'\'\n\n• Ušlechtilé kovy - méně než 60%, Au asi 40% (i méně), \n• menší odolnost proti korozi, \n• někdy je k vylepšení estetiky přidáno In nebo Cu, ale to odolnost proti korozi ještě dále snižuje\n\n- např. Aurosa (Safina)\n \n\n II. \'\'\'Ag slitiny \'\'\' (stříbropalládiové) = náhradní dentální kovy\n\n• Ušlechtilé kovy - 30%-40%, složení: hl. Ag a Pd, \n• hustota 11-12 g/cm3 - je nižší, může ovlivnit odlévatelnost;\n• menší odolnost proti korozi (Ag se navíc působením síry může barvit černě), \n \n aa/ \'\'\'vysokotavitelné\'\'\' (dříve skupina C)\n• Hodně Pd, \n• např. Palargen (Safina) - pro korunky a můstky, má hrubší zrna - nižší přesnost odlévání - ne na inlaye, polokorunky a skelety, tavná teplota 1250°C\n\n bb/ \'\'\'nízkotavitelné\'\'\' (dříve skupina D)\n \n• Hrubozrnná struktura, \n• měkké, \n• nízká odolnost proti korozi, \n• tavná teplota 700-900°C, \n• hl. na kořenové inlaye (lepší jiné biokompatibilnější slitiny)\n\n - např. Koldan (Safina)\n\n\n\n\n\n\n \n b/ \'\'\'slitiny pro kovokeramiku \'\'\' \n\nPožadavky: \n• tavná teplota min. o 150°C vyšší než teplota napalování keramiky,\n• srovnatelná teplotní expanze s keramikou \n• obsah obecných kovů (např. Zn,In,Sn, do 10%), jejichž oxidy jsou schpné chem. vazby na keramiku, žádná měď - tvoří barevné oxidy - špatná estetika\n\n I. \'\'\'Au slitiny\'\'\' \n\n aa/ \'\'\'s vysokým obsahem Au\'\'\'\n\n• Ušlechtilé kovy - min. 95%, hodně Pt a Pd (zvyšují tavnou teplotu, snižují teplotní expanzi, stříbrná barva slitiny), \n• vynikající odolnost proti korozi, \n• hustota 18 g/cm3\n \nNevýhody: \n• nízká odolnost proti creepu (tečení) při napalování (hl. bioslitiny), neboť mají přece jen nižší tavnou teplotu (1100-1250°C), \n• nižší rigidita - nutná silnější modelace\n\nNapř. Safibond Plus - extra tvrdá.\n \nProtože v naší populaci je často zkřížená alergie na Ni a Pd (alergiií na Ni trpí 1/3 populace), vyrábí se slitiny bez Pd (tzv. bioslitiny)- např. Safibond Gold (tvrdá), Safibond Bio (extra tvrdá) - nízká stabilita při napalování - max. 4(5)-členné můstky\n\n bb/ \'\'\'s redukovaným obsahem Au\'\'\'\n\n• Ušlechtilé kovy - 75%-95%, Au okolo 50%,\n• mají vyšší tavnou teplotu a jsou rigidnější (než aa/), \n• jsou levnější.\n• Výborná biokompatibilita\n\n Vyšší obsah Ag má neg. vliv na barvu keramiky (platí i pro Pd slitiny) - řešení: 1.použít spec. keramiky necitivé na Ag nebo 2. použít slitiny bez Ag (Pd: cca 40%)\n\n\n\n\n\n\n\n\n \'\'\'II. Pd slitiny\'\'\'\n\n• Pd 50%-60%, Ag 30%-40%; \n• mají vyšší tavnou teplotu a jsou rigidnější (než aa/), \n• bílá barva slitiny, \n• musí být taveny el.-mag. indukcí (jsou náchylné na kontaminaci uhlíkem),\n• jsou drahé. \n\n Vyšší obsah Ag má neg. vliv na barvu keramiky - řešení: 1.použít spec. keramiky necitivé na Ag nebo 2. použít slitiny bez Ag (Pd: cca 70%-80%)\n\n• Slitiny s Ag - dostačující biokompatibita, např. Safibond\n• Slitiny bez Ag - nižší biokompatibita (hl. slitiny s Cu), vysoká náchylnost k laboratorním chybám\n\n\n\n\n\n\nAd 2. \'\'\'Slitiny obecných kovů\'\'\'\n \n a/ \'\'\'Co-Cr slitiny\'\'\' (chromkobaltové)\n \n• Tavná teplota 1250-1450°C, nutné tavení acetylénovým hořákem (méně kontrolovatelné podmínky) nebo el.-mag. indukcí,\n• křehké, rigidní, nižší limit elasticity (retenční ramena ČSN ne do velkých podsekřivin), \n• velmi odolné proti korozi - pasivační efekt chromu (vytváří na povrchu vrstvu oxidů) - asi od 20 váh.%, \n• hustota 8 g/cm3 (velmi nízká - horší odlévatelnost),velmi tvrdé\n• teplotní kontrakce 2.3% (vysoká - menší přesnost odlévání - nevýhoda hl. u korunek a můstků)\nCr: pasivační efekt, tvrdost\nMo: menší velikost zrn (totéž Be, ale to je toxické - nebezpečí hl. pro laboranta)\nC: tvrdost\n\n\n I. \'\'\'slitiny pro skelety ČSN\'\'\'\n\nNapř. Co 65%, Cr 25%, Mo 5%, Fe 1%, C 0,2-0,35%\n\n• Jsou velmi náchylné na chyby při zpracování (jako všechny slitiny obecných kovů) - častá porozita - oslabení - fraktura náhrady. \n• Nízká duktilita - nemožnost oprav spon\n• velmi tvrdé - výhodné je elektrolytické leštění (opak galvanického pokovování)\n Např. Oralium, Kdynium K1 (Safina)\n\n\n II. \'\'\'slitiny pro metalokeramiku\'\'\'\n\nNapř. Co 65%, Cr 20%, Mo & Ti 5%, C 0,04%, Ni 0,05%\n\n• mají silnější povrchovou vrstvu oxidů (než ušlechtilé slitiny) - častější uvolnění keramiky od kovu (až po delší době - měsíce)\n• levné\n• velmi tvrdé - vysoká spotřeba brusného a leštícího materiálu (elektrolyt. leštění není vhodné - přesnost okrajového uzávěru!) , čímž se nízká cena slitiny relativizuje\n• vesmés velmi dobře odolné proti korozi\n• neměly by být pájeny - klesá pak odolnost proti korozi\n• Jsou velmi náchylné na chyby při zpracování - používat pouze slitiny renomovaného výrobce a s touto slitinou seznámenou laboratoř - pak srovnatelné klinické vlastnosti s ušlechtilými slitinami\n\nNapř. Remanium 2000 (Dentaurum)\n\n\n b/ \'\'\'Ni-Cr slitiny\'\'\' (chromniklové) \n\nNi 60-80%, Cr 10-25% (lépe min 20%), Mo 0-13%(lépe min 5%), W 0-6%, Mn 0-6%, Be 0-2%, C 0,1-0,2%\n\n• vhodné pro metalokeramiku\n• lépe bez Be (toxické)\n• teplotní kontrakce 1,5-2,0% - větší přesnost než Co-Cr, ale menší než ušlechtilé slitiny\n• hustota 8 g/cm3 - obtížnější odlévání než ušlechtilé slitiny\n• tvrdost přibližně mezi Co-Cr a Au-slitinami (během leštění se nepoškodí okrajový uzávěr, ale ev. obtížnější úpravy okluze)\n• tavná teplota 1200-1350°C, taveny el.-mag. indukcí\n• síla vazby na keramiku není tak velká jako u ušlechtilých slitin\n• rigidnější než Au-slitiny (výhoda pro můstky a metalokeramiku)\n• nejsou tak biologicky inertní jako Co-Cr (alergie na Ni!)\n• Jsou velmi náchylné na chyby při zpracování - používat pouze slitiny renomovaného výrobce a s touto slitinou seznámenou laboratoř - pak srovnatelné klinické vlastnosti s ušlechtilými slitinami\n\nNapř. Wiron NT (Bego)\n\n\n c/ \'\'\'Titan\'\'\' \n\n• Většinou se používá čistý (slitina např. Ti 90%, Al 16% V4%)\n• hl. pro implantáty a suprakonstrukce pro implantáty\n• povrchový pasivační efekt\n• hustota 4,5 g/cm3 \n• tavná teplota 1720°C (nutné odlévání v ochranné Ar-atmosféře nebo ve vakuu)\n• tavení těžko proveditelné (Ti ihned oxiduje a velmi snadno se kontaminuje) -voskové předtvary musí být větší, po odlití se povrchová křehká vrstva odstraní - nízká přesnost, navíc časté defekty) \n• větš. se neodlévá, hl. metoda opracování je frézování\n• vynikající biokompatibilita, ovšem ne v podmínkách ústní dutiny!\n• Nad 882°C mění krystalickou strukturu a expanduje - pokud pro metalokeramiku, nutné spec. nízkotavitelné keramiky, kt. mají navíc titanu odpovídající nízkou teplotní expanzi\n• vazba na keramiku je dostačující ale o dost nižší než u jiných slitin, \n• nelze pájet (nutné laserové svařování)\n\n\n (d/ \'\'\'hliníkové bronzy\'\'\'\n\nCu 80%, Al 8-9%, Ni 4-5%, Fe 4-5%\n\n• Tvrdost obvykle odpovídající skupině 2-3\n• zlatá barva\n• snadná zpracovatelnost\n• obrovsky nízká odolnost proti korozi!!! (100 krát nižší než Co-Cr)\n\nNapř. Orgast, Orgast Plus, NPG )\n\n\n--[[Wikipedista:194.212.136.17|194.212.136.17]] 21:42, 10. 1. 2005 (UTC)Richard Suda','',0,'194.212.136.17','20050110214209','',0,0,0,1,0.058384062356,'20050110214209','79949889785790'); INSERT INTO cur VALUES (1025,6,'Cutconst.png','Konstantovaní stíhnování trojbokého hranolu','Konstantovaní stíhnování trojbokého hranolu',16,'Pavelk','20050113111006','',0,0,0,1,0,'20050113174141','79949886888993'); INSERT INTO cur VALUES (1026,6,'Cutgoraund.png','Gouraudovo stíhnování trojbokého hranolu','Gouraudovo stíhnování trojbokého hranolu',16,'Pavelk','20050113111045','',0,0,0,1,0,'20050113174141','79949886888954'); INSERT INTO cur VALUES (1027,6,'Cutphong.png','Phongovo stíhnování trojbokého hranolu','Phongovo stíhnování trojbokého hranolu',16,'Pavelk','20050113111103','',0,0,0,1,0,'20050113174141','79949886888896'); INSERT INTO cur VALUES (1028,6,'Teeconst.png','Konstantovaní stíhnování čajové konvice','Konstantovaní stíhnování čajové konvice',16,'Pavelk','20050113111209','',0,0,0,1,0,'20050113174141','79949886888790'); INSERT INTO cur VALUES (1029,6,'Teegoraund.png','Gouraudovo stíhnování čajové konvice','Gouraudovo stíhnování čajové konvice',16,'Pavelk','20050113111247','',0,0,0,1,0,'20050113174141','79949886888752'); INSERT INTO cur VALUES (1030,6,'Teephong.png','Phongovo stíhnování čajové konvice','Phongovo stíhnování čajové konvice',16,'Pavelk','20050113111313','',0,0,0,1,0,'20050113174141','79949886888686'); INSERT INTO cur VALUES (1031,6,'Gouraud.png','Postup při Gouraudově stínovaní','Postup při Gouraudově stínovaní',16,'Pavelk','20050113130355','',0,0,0,1,0,'20050113174141','79949886869644'); INSERT INTO cur VALUES (1032,6,'Geom4-rezani-1-vp.png','Priklad orezanych polygonu','Priklad orezanych polygonu',17,'Laka','20050125221205','',0,0,0,1,0,'20050125222105','79949874778794'); INSERT INTO cur VALUES (1033,0,'Linuxové_emulátory','= Využití emulátorů =\n\n* Když je nutné pracovat s programy, které nejsou portovány pro linux\n\n* Když vyvíjíte na Linuxu software určený pro jinou platformu\n\n* Chcete bezpečně vyzkoušet jinou distribuci nebo operační systém\n\n= Rozdělení emulátorů =\n\n\'\'Softwarové emulátory\'\' - které emulují prostředí operačního systému\n\n\'\'Hardwarové emulátory\'\' - které fungují jako virtuální stroj \n\nMezi softwarové emulátory patří \'\'Dosemu\'\' nebo \'\'Wine\'\'.\n\nHardwarové emulátory lze rozdělit ještě na dvě skupiny a to \n\n* Hardwarové emulátory co částečně využívají architektury procesoru počítače - \'\'Win4Lin\'\', \'\'Basilisk II\'\', \'\'Executor\'\', \'\'MOL\'\'\n\n* Hardwarové emulátory, které emulují CPU počítače - \'\'Bochs\'\', \'\'Qemu\'\', \'\'VMware\'\'\n\nhttp://nlp.fi.muni.cz/projekty/emuwin/\n\n== Dosemu ==\n\'\'\'Emuluje :\'\'\' prostředí DOSu\n\nhttp://www.dosemu.org/\n\nPoslední aktualizace v březnu 2004\n\n== Plex86 ==\n\'\'\'Emuluje :\'\'\' stroj s procesorem PC (x86), využívá instrukcí procesoru x86\n\nhttp://plex86.sourceforge.net/\n\nMomentálně nevyvíjený, poslední aktualizace v prosinci 2003\n\n== Bochs ==\n\n\'\'\'Emuluje :\'\'\' virtuální stroj s jedním, nebo i více procesory PC (x86), využívá instrukcí procesoru x86\n\nhttp://bochs.sourceforge.net/\n\nPoslední aktualizace v únoru 2004\n\n\'\'Subjektivní hodnocení\'\'\n\nBochs je emulátor virtuálního stroje, tudíž pro instalaci jiného OS je nutno mít i příslušnou licenci. Testoval jsem jej s Windows98se. Instalace systému Trvala cca dvakrát tak dlouho jako u Qemu. Ze všech emulátorů PC které jsem zkoušel měl tento nejkomplikovanější nastavení konfiguračního souboru. Co do funkčnosti a uživatelského rozhraní se dá srovnávat s komerčním emulátorem VMware, ale pro vlastní provoz mi přišel trochu ponmalý.\n\n== Qemu ==\n\n\'\'\'Emuluje :\'\'\' virtuální stroj s jedním, nebo i více procesory PC (x86), PPC (PowerPC), Sparc. Na platformě PC využívá instrukcí procesoru x86\n\nhttp://fabrice.bellard.free.fr/qemu/\n\nPoslední aktualizace 10. března 2005\n\n\'\'Subjektivní hodnocení\'\'\n\nQemu je emulátor virtuálního stroje, tudíž pro instalaci jiného OS je nutno mít i příslušnou licenci. Testoval jsem jej s Windows98se. Instalace systému proběhla cca za 50 minut, ale funkčnost mne mile překvapila. Ze všech emulátorů PC které jsem zkoušel byl tento nejsvižnější.Uživatelské rozhraní je poněkud nezvyklé, co však mi přišlo jako hodně dobré, tak byla uživatelská jednoduchost při vlastním spouštění a provozu.\n\n\'\'\'Qemu akcelerátor\'\'\'\n\nOd února 2005 je možné použít pro Qemu jaderný akcelerátor, který by měl údajně zrychlit virtuální stroj z 5 - 10 násobného zpomalení oproti skutečnému stroji na 1 až 2 násobné. Použití tohoto akcelerátoru však má několik háčků:\n\n* Akcelerátor není pod GPL, tudíž nemůže být kompilován do volně šiřitelných binárních verzí qemu\n\n* Akcelerátor je možné přidat pouze do verze kompilované z cvs\n\n* Pro kompilaci jaderného modulu je nutno mít stejnou verzi překladače gcc, jakou bylo kompilováno jádro\n\n\'\'\'Připojení obrazu disku z qemu\'\'\'\n\nmount -o loop,offset=32256 obraz_disku.img /pripojny/bod/\n\n\'\'\'Nejjednodušší spuštění qemu\'\'\'\n\nqemu obraz_disku.img -m 256 -nics 0\n\n\'\'(Vypnuto používání sítě a velikost používané paměti zvětšena na 250MB)\'\'\n\n\'\'\'Otestování vypáleného LiveCD pomocí Qemu\'\'\'\n\nqemu -cdrom /dev/cdrom -boot d\n\n\'\'(Pokud chcete otestovat obraz LiveCD ještě před vypálením napište místo cesty k zařízení cdrom cestu ke staženému iso obrazu)\'\'\n\n\'\'\'Problémy\'\'\'\n\n*\'\'\'Win98 jako guest na Linuxu\'\'\'\n\nVůbec první doporučená věc je nainstalovat do Windows patch, který jim \"vysvětlí\" že CPU nemají jen pro sebe. Jinak procesor pojede neustále na 100%\n\n:\'\'Po rebootu se nainstalované Windows zakousnou\'\' - nedbat na to, zabít qemu, spustit znova do normálního režimu\n\n:\'\'Po spuštění se grafika Windows rozhasí a zatuhnou\'\' - nedbat na to, zabít qemu, spustit znova do normálního režimu\n\n:\'\'Po startu grafika Windows najede ve 256 barvách\'\' - nevím, nepřišel jsem zatím na to proč to, ale pomohlo odebrání grafických ovladačů, ukončit bez restartu a po spuštění je doinstalovat znova - ovšem POZOR! nepomohlo vždy.\n\n== VMware ==\n\n\'\'\'Emuluje :\'\'\' virtuální PC\n\n\nhttp://www.vmware.com/\n\nKomerční aplikace\n\n\'\'Subjektivní hodnocení\'\'\nVMware je emulátor virtuálního stroje, tudíž pro instalaci jiného OS je nutno mít i příslušnou licenci. Testoval jsem jej s Windows98se. Instalace systému proběhla poměrně rychle, ale vlastním během jsem byl zklamán. Vykreslování bylo pomalejší než u Qemu, který je k dispozici zdarma. Velice kladně lze hodnotit uživatelské rozhraní a jeho možnosti které nabízí.\n\n== Win4Lin ==\n\n\'\'\'Emuluje :\'\'\' virtuální PC, využívá instrukcí procesoru x86\n\nhttp://www.netraverse.com/downloads/\n\nKomerční aplikace\n\n\'\'Subjektivní hodnocení\'\'\n\nWin4Lin má jednu nepříjemnou vlastnost, že vyžaduje opatchované jádro. To učinit sice není žádný problém, nicméně na Debianu se mi to (zatím) nepodařilo. Takže mám zkušenosti pouze z Mandrakelinuxu.\n\nTam není s Win4Lin (téměř) problém. To téměř je zcela na místě, neboť aby bylo možné nainstalovat úpravu jádra pro spouštění Win4Lin, je nutné mít i odpovídající jádro. Paradoxně bylo téměř pravidlem, že zatímco byl balík pro Win4Lin pro jádro např. 2.6.8-10mdk tak na webu už bylo jádro verze 2.6.8-10mdk nahrazeno jádrem 2.6.8-12mdk, takže instalace selhala kvůli závislostem. Nicméně, občas se to podařilo. Pak však ztroskotalo spouštění, neboť patch nebyl zkompilován s podporou filesystému Reiserfs který používám. Takže usmálo-li se na mne štěstí a vše najelo, pak proběhla instalace Win4Lin bez problému. Stáhla se i aktualizovaná verze (v instalačním rpm balíku) a mohu konstatovat, že takhle švihat pak pod Win4Lin jsem Windows98se na žádném stroji nikdy neviděl.\n\nRadost mi však zkalila omezená podpora DirectX, ovšem musím poznamenat, že s běžnými aplikacemi MS Office, Photoshop a jiné nebyl žádný problém a vše fungovalo super. Příjemné také bylo, že Win4Lin využívá přímo souborový systém Linuxu (nikoliv tedy obraz disku, jako virtualizéry), takže bylo možno k souborům přistupovat přímo z linuxových aplikací.\n\n== PearPC ==\n\n\'\'\'Emuluje :\'\'\' stroj s procesorem PowerPC\n\nhttp://pearpc.sourceforge.net/\n\nPoslední aktualizace 5. července 2004\n\n== Wine ==\n\n\'\'\'Emuluje :\'\'\' prostředí OS Windows\n\nhttp://www.winehq.com/\n\n== Cedega (WineX) ==\n\n\'\'\'Emuluje :\'\'\' prostředí OS Windows, se specializací na hry\n\n\n== CrossOver Office ==\n\n\'\'\'Emuluje :\'\'\' prostředí OS Windows, se specializací na kancelářský balík MS Office\n\n== Executor ==\n\'\'\'Emuluje :\'\'\' prostředí MACu\n\nhttp://www.ardi.com/executor.php\n\n== MOL - Mac-On-Linux ==\n\n\'\'\'Emuluje :\'\'\' prostředí DOSu\n\nhttp://www.maconlinux.org/\n\n== ec64 ==\n\n\'\'\'Emuluje :\'\'\' prostředí počítače Commodore 64\n\nEmulátor počítače Commodore 64\n\nhttp://unusedino.de/ec64/\n\n== xzx ==\n\n\'\'\'Emuluje :\'\'\' prostředí počítače ZX-spectrum\n\nEmulátor počítače ZX-spectrum\n\nhttp://www.zx-spectrum.net/xzx/\n\nOdkazy na další emulátory pro Linux\n\nhttp://www.linux.org/apps/all/System/Emulators.html','/* Qemu */',0,'195.113.188.3','20050310140607','',0,0,0,0,0.109380056628,'20050310140607','79949689859392'); INSERT INTO cur VALUES (1034,6,'Geom4-rezani-2-vp.png','Ohodnoceni bodu pri orezani','Ohodnoceni bodu pri orezani',17,'Laka','20050130175939','',0,0,0,1,0,'20050130175939','79949869824060'); INSERT INTO cur VALUES (1035,6,'Geom4-rezani-3-vp.png','Priklady usecek k orezani','Priklady usecek k orezani',17,'Laka','20050130180013','',0,0,0,1,0,'20050130180013','79949869819986'); INSERT INTO cur VALUES (1036,6,'Promitani_axonometrie.png','Axonometrie','Axonometrie',20,'XLojzax','20050131083226','',0,0,0,1,0,'20050218093002','79949868916773'); INSERT INTO cur VALUES (1037,6,'Promitani_matice_1bodova.png','1bodová','1bodová',20,'XLojzax','20050131083254','',0,0,0,1,0,'20050218091622','79949868916745'); INSERT INTO cur VALUES (1038,6,'Promitani_matice_2bodova.png','2 bodová','2 bodová',20,'XLojzax','20050131083307','',0,0,0,1,0,'20050218091622','79949868916692'); INSERT INTO cur VALUES (1039,6,'Promitani_matice_3bodova.png','3 bodová','3 bodová',20,'XLojzax','20050131083321','',0,0,0,1,0,'20050218091622','79949868916678'); INSERT INTO cur VALUES (1040,6,'Promitani_matice_axonometrie.png','Matice axonometrie','Matice axonometrie',20,'XLojzax','20050131083337','',0,0,0,1,0,'20050218093002','79949868916662'); INSERT INTO cur VALUES (1041,6,'Promitani_matice_stredove.png','Matice středové','Matice středové',20,'XLojzax','20050131083352','',0,0,0,1,0,'20050218093002','79949868916647'); INSERT INTO cur VALUES (1042,6,'Promitani_perspektiva_1bodova.png','1 bodová','1 bodová',20,'XLojzax','20050131083408','',0,0,0,1,0,'20050218093002','79949868916591'); INSERT INTO cur VALUES (1043,6,'Promitani_perspektiva_2bodova.png','2 bodová','2 bodová',20,'XLojzax','20050131083429','',0,0,0,1,0,'20050218093002','79949868916570'); INSERT INTO cur VALUES (1044,6,'Promitani_perspektiva_3bodova.png','3 bodová','3 bodová',20,'XLojzax','20050131083442','',0,0,0,1,0,'20050218093002','79949868916557'); INSERT INTO cur VALUES (1045,6,'Promitani_rovnobezne.png','Rovnoběžné','Rovnoběžné',20,'XLojzax','20050131083457','',0,0,0,1,0,'20050218093002','79949868916542'); INSERT INTO cur VALUES (1046,6,'Promitani_stredove.png','Středové','Středové',20,'XLojzax','20050131083509','',0,0,0,1,0,'20050218093002','79949868916490'); INSERT INTO cur VALUES (1047,6,'Promitani_matice_posunuti.PNG','Posunutí','Posunutí',20,'XLojzax','20050131084048','',0,0,0,1,0,'20050131084048','79949868915951'); INSERT INTO cur VALUES (1048,6,'Promitani_matice_posunuti.png','Posunutí','Posunutí',20,'XLojzax','20050131084213','',0,0,0,1,0,'20050218093002','79949868915786'); INSERT INTO cur VALUES (1049,6,'Z-Buffer.PNG','Obrazek s ukazkou fungovani algoritmu','Obrazek s ukazkou fungovani algoritmu',21,'Pacrt','20050131221330','',0,0,0,1,0,'20050214221316','79949868778669'); INSERT INTO cur VALUES (1050,6,'Geom4-rezani-polygon-vp.png','Postu rezani polygonu','Postu rezani polygonu',17,'Laka','20050201182120','',0,0,0,1,0,'20050201182120','79949798817879'); INSERT INTO cur VALUES (1051,6,'Vp-orezavani-kod.jpg','orezavani kod','orezavani kod',17,'Laka','20050201211515','',0,0,0,1,0,'20050201211515','79949798788484'); INSERT INTO cur VALUES (1052,6,'Usecka1.png','usecka1','usecka1',22,'Fitik','20050209140520','',0,0,0,1,0,'20050210193728','79949790859479'); INSERT INTO cur VALUES (1053,6,'Kruznice1.png','Ukazka kruznicovych algoritmu','Ukazka kruznicovych algoritmu',22,'Fitik','20050209152018','',0,0,0,1,0,'20050210193728','79949790847981'); INSERT INTO cur VALUES (1054,6,'Nehodicisemalir.PNG','','',21,'Pacrt','20050214220017','',0,0,0,1,0,'20050301173511','79949785779982'); INSERT INTO cur VALUES (1055,6,'Zacyklenimalir.PNG','','',21,'Pacrt','20050214215954','',0,0,0,1,0,'20050301173511','79949785784045'); INSERT INTO cur VALUES (1056,6,'Z-Buffermin.PNG','','',21,'Pacrt','20050214221416','',0,0,0,1,0,'20050214221500','79949785778583'); INSERT INTO cur VALUES (1057,6,'Zbmin.PNG','','',21,'Pacrt','20050214221616','',0,0,0,1,0,'20050301173511','79949785778383'); INSERT INTO cur VALUES (1058,6,'Promitani_matice_perspektivy.PNG','','',20,'XLojzax','20050218091954','',0,0,0,1,0,'20050218091954','79949781908045'); INSERT INTO cur VALUES (1059,6,'Promitani_matice_perspektivy.png','','',20,'XLojzax','20050218092609','',0,0,0,1,0,'20050218093002','79949781907390'); INSERT INTO cur VALUES (1060,0,'Linuxové_jádro','[[Special:Whatlinkshere/Linuxové jádro | Odkaz na stránky které sem odkazují]]\n\n=Postup kompilace linuxového jádra=\n\n== Nástroje pro kompilaci jádra ==\n\n=== fakeroot ===\n\n=== ncurses-dev ===\n\n\n== Příprava zdrojového kódu ==\n\nZdrojový kód linuxového jádra je obvykolu součástí distribuce, zpravidla však obsahuje zdrojový kód již upravený. Čisté linuxové jádro se nazývá vanilla a je ke stažení prostřednictvím internetu z adresy http://www.kernel.org\n\nPokud již máte staženou některou ze starších verzí jádra, pak není nezbytně nutné stahovat celý zdroják znovu, ale stačí pouze stáhnout příslušný patch, jehož aplikací získáte zdrojový kód vámi požadované verze jádra.\n\nAplikace patche - záplaty\n\n\n== Rozpoznávání hardware ==\n\nNež se pustíte do vlastní konfigurace jádra, je nutné zjistit, pro jaký hardware bude jádro určeno. To lze provést pomocí několika nástrojů:\n\n=== lshw ===\n\nUkázka výpisu..\n\n
    \n     *-cpu\n          description: CPU\n          product: Intel(R) Celeron(R) CPU 2.40GHz\n          vendor: Intel Corp.\n          physical id: 4\n          version: 15.2.9\n          slot: FC-478\n          size: 2400MHz\n          capacity: 4GHz\n          clock: 100MHz\n          capabilities: fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic sep mtrr\npge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe cid xtpr\n
    \n\n=== lspci ===\n\nVypisuje údaje o PCI rozhraní\n\n
    \n0000:00:00.0 Host bridge: Intel Corp. 82845G/GL[Brookdale-G]/GE/PE DRAM Controller/Host-Hub Interface (rev 03)\n0000:00:01.0 PCI bridge: Intel Corp. 82845G/GL[Brookdale-G]/GE/PE Host-to-AGP Bridge (rev 03)\n0000:00:1d.0 USB Controller: Intel Corp. 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #1 (rev 02)\n0000:00:1d.1 USB Controller: Intel Corp. 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #2 (rev 02)\n0000:00:1d.2 USB Controller: Intel Corp. 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #3 (rev 02)\n0000:00:1d.7 USB Controller: Intel Corp. 82801DB/DBM (ICH4/ICH4-M) USB 2.0 EHCI Controller (rev 02)\n0000:00:1e.0 PCI bridge: Intel Corp. 82801 PCI Bridge (rev 82)\n0000:00:1f.0 ISA bridge: Intel Corp. 82801DB/DBL (ICH4/ICH4-L) LPC Bridge (rev 02)\n0000:00:1f.1 IDE interface: Intel Corp. 82801DB/DBL (ICH4/ICH4-L) UltraATA-100 IDE Controller (rev 02)\n0000:00:1f.3 SMBus: Intel Corp. 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) SMBus Controller (rev 02)\n0000:00:1f.5 Multimedia audio controller: Intel Corp. 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC\'97 Audio Controller (rev 02)\n0000:01:00.0 VGA compatible controller: ATI Technologies Inc RV280 [Radeon 9200 PRO] (rev 01)\n0000:01:00.1 Display controller: ATI Technologies Inc: Unknown device 5940 (rev 01)\n0000:02:08.0 Ethernet controller: Intel Corp. 82801BD PRO/100 VE (CNR) Ethernet Controller (rev 82)\n
    \n\n=== lsusb ===\n\nPodobně jako lspci vám lsusb vypíše všechna zařízení připojená přes USB\n\n
    \nBus 004 Device 002: ID 03f0:6602 Hewlett-Packard PhotoSmart 320\nBus 004 Device 001: ID 0000:0000  \nBus 003 Device 001: ID 0000:0000  \nBus 002 Device 003: ID 0c76:0005 JMTek, LLC. USBdisk\nBus 002 Device 002: ID 055f:0219 Mustek Systems, Inc. BearPaw 2400 TA Plus\nBus 002 Device 001: ID 0000:0000  \nBus 001 Device 001: ID 0000:0000  \n
    \n\nZ výše uvedeného lze vyčíst, že lze jádro kompilovat pro procesor Pentium4 Intel(R) Celeron(R). Ten je na desce s chipsetem Intel(R) 82845G PCI a ISA rozhraním Intel(R) 82801. IDE rozhraní podporuje UltraATA-100, zvuková karta je integrovaná AC\'97, grafická karta je ATI Radeon 9200 PRO a síťová karta integrovaná na desce je rovněž Intelovské provenience.\n\nZ USB zařízení je používán fotoaparát, flash disk a skener. V případě že by se mohly připojovat i jiná zařízení, zahrneme při konfiguraci jádra raději podporu i pro ně.\n\n== Konfigurace jádra ==\n\nJádro lze konfigurovat několika způsoby. Nejpohodlnější je použít k tomu grafické nástroje.\n\n\'\'\'make menuconfig\'\'\'\n\nvyužívá knihovny ncurses\n\n\'\'\'make xconfig\'\'\'\n\nvyužívá qt knihovny\n\n\'\'\'make gconfig\'\'\'\n\nvyužívá GTK knihovny\n\nNebo také můžete nakonfigurovat jádro ručně.\n\n== Kompilace jádra ==\n\n=== Jádro verze 2.4 ===\n\n
    \n$make dep && make bzImage modules modules_install\n
    \n\n=== Jádro verze 2.6 ===\n\n
    \n$make && make modules_install\n
    \n\nNa Debianu lze přímo zkompilovat balíček takto\n\n
    \n$fakeroot make-kpkg --revision=revize.1.0 kernel_image\n
    \n\n== Nástroje pro kompilaci jádra ==\n\n=== module-init-tools ===\n\n=== initrd-tools ===\n\n=== procps ===\n\n\n== Instalace jádra ==\n\n
    \n# mount /boot\n# cp arch/i386/boot/bzImage /boot/kernel-2.4.25-gentoo\n# cp System.map /boot/System.map-2.4.25-gentoo\n# cp .config /boot/config-2.4.25-gentoo\n
    \n\ncd ../\ndpkg -i kernel-image-2.6.8.1_revize.1.0_i386.deb\n\n== Vytvoření ramdisku ==\n\n
    \n#cd /boot/\n#mkinitrd -o initrd.img-2.6.8.1 2.6.8.1\n
    \n\nnejde-li to po dobrém, zpracujte to po zlém..\n\n
    \n#mkinitrd -f /boot/initrd-.img /lib/\n
    \n\n== Nastavení zavaděče ==\n\n=== Grub ===\n\n=== Lilo ===','',0,'195.113.188.3','20050218133951','',0,0,0,1,0.859556952058,'20050218133951','79949781866048'); INSERT INTO cur VALUES (1061,0,'Počítače','Vítejte v internetové knize o počítačích.\nJeště než se začtete do jejích článku, chtěl bych dodat pár upozornění.\nVšechny materiály zde zveřejněné smí být šířeny i upravovány bez jakýchkoli omezení.\nPokud zde budete nějaký článek publikovat, předem se s tím smiřte protože údaje zde publikované již pravděpodobně nikdy neutajíte. Vám, co zde budete publikovat články, bych chtěl připomenout že zde nesmíte publikovat díla chráněna autorskými právy!','Maked new book called \"Počítače\" /cz/',0,'83.208.61.201','20050313181249','',0,0,0,1,0.20491580944,'20050313181249','79949686818750');