<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<!--}}}-->
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}

h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

.tabSelected{color:[[ColorPalette::PrimaryDark]];
	background:[[ColorPalette::TertiaryPale]];
	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
	border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}

.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
.sparktick {background:[[ColorPalette::PrimaryDark]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}
.readOnly {background:[[ColorPalette::TertiaryPale]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity=60)';}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}

body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0 1em 1em; left:0px; top:0px;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {padding:0.1em 1em 0 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0 0; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0;}
.wizardFooter .status {padding:0 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em;}

#messageArea {position:fixed; top:2em; right:0; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0 0 0.5em;}
.tab {margin:0 0 0 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler {padding:1em 1em 0;}

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0 0.25em; padding:0 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}

.fieldsetFix {border:0; padding:0; margin:1px 0px;}

.sparkline {line-height:1em;}
.sparktick {outline:0;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;}
#backstageButton a {padding:0.1em 0.4em; margin:0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none !important;}
#displayArea {margin: 1em 1em 0em;}
noscript {display:none;} /* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
}
/*}}}*/
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
<!--}}}-->
To get started with this blank [[TiddlyWiki]], you'll need to modify the following tiddlers:
* [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* [[MainMenu]]: The menu (usually on the left)
* [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
These [[InterfaceOptions]] for customising [[TiddlyWiki]] are saved in your browser

Your username for signing your edits. Write it as a [[WikiWord]] (eg [[JoeBloggs]])

<<option txtUserName>>
<<option chkSaveBackups>> [[SaveBackups]]
<<option chkAutoSave>> [[AutoSave]]
<<option chkRegExpSearch>> [[RegExpSearch]]
<<option chkCaseSensitiveSearch>> [[CaseSensitiveSearch]]
<<option chkAnimate>> [[EnableAnimations]]

----
Also see [[AdvancedOptions]]
<<importTiddlers>>
[img[obrazky/airflow_desktop/ad_scr_web.png]]
''Airflow Desktop'' je softwarová aplikace, kterou jsem napsal v jazyce Java pro usnadnění a zrychlení zpracování a vizualizace naměřených dat. /%Nyní její výhody můžete využívat i vy.%/

/%''Airflow Desktop'' je od dubna roku 2010 možné stahovat z těchto stránek. Naleznete zde i návod k použití aplikace. %/
!Seznámení s Airflow Desktop
Návod bude postupně dopisován. 
*[[Začínáme s Airflow Desktop]]
*[[Jak na data z REXu]]
*[[Ukládání grafů]]
/%!Stažení programu
!!Aktuální verze
[[Airflow Desktop|pool/airflow_desktop/airflow_desktop.zip]] (verze ze 13. července 2010, .zip, cca 5 MB)
!!Přehled oprav a vylepšení v programu:
!!!12. července 2010:
*Zvýšena robustnost při čtení dat ze souborů uložených pomocí programu ~REXTrend (Testováno pro soubory z verze ~REXTrendu z roku 2009 a 2010).
*Opraven popisek dialogového okna pro přidání výpočetních operací
*Zamezeno "nafukování" seznamu historie otevřených profilů
*Přidána možnost exportovat data z číselných řad
!!!7. dubna 2010:
*Opravena chyba v exportu dat s časovými řadami
*Přidána možnost kreslit schodový graf%/
config.options.txtUserName = "Michal Široký";
config.options.chkAutoSave = true;
config.options.chkSaveBackups = false;
config.options.chkInsertTabs = true;
config.options.chkSinglePageMode= true; 
config.options.chkShowRightSidebar=false; 
*[[Plaský klášter|http://www.klaster-plasy.cz]]
*[[Katedra kybernetiky Západočeské univerzity v Plzni|http://www.kky.zcu.cz]]
*[[TZB-info - Internetový portál pro stavebnictví, technická zařízení budov a úspory energií|http://www.tzb-info.cz/]]
!!Počasí
*[[Předpověď - Český hydrometeorologický ústav|http://www.chmi.cz/meteo/om/predpoved.html]]
*[[Předpověď - Wolfram Alpha|http://www40.wolframalpha.com/input/?i=weather+forecast]]
*[[Hodnota rosného bodu pro Plasy - Wolfram Alpha|http://www91.wolframalpha.com/input/?i=dewpoint+in+plasy]]
[[Hlavní stránka]]
Tento pojem jsem si vypůjčil z filmu [[IronMan2|http://www.ironmanmovie.com]].
Projekt Airflow vznikl jako moje studentská práce na Katedře kybernetiky Západočeské univerzitě v Plzni. Airflow je zaměřen na výzkum a řízení větracího systému v budově konventu v bývalém cisterciáckém [[klášteře v Plasích|http://www.klaster-plasy.cz]]. Cílem je zvýšit teplotu a snížit vlhkost v interiéru budovy během letní sezóny.

[img[obrazky/konvent_dvur.jpg]]

Během trvání projektu jsem také navázal spolupráci s firmou [[Josef Řehák - SPELEO]], která se zabývá výzkumem vodního systému plaského konventu.

Na jaře roku 2010 jsem do konventu nainstaloval automatický měřicí a poradní systém pro správné větrání a úspěšně dokončil navazující studium na FAV ZČU.

Tímto také ''děkuji hudební skupině [[Brutus|http://www.brutus.cz/]]'' za skutečnost, že umístili všechna svá alba na internet a jejich poslech mi mohl sloužit jako inspirace při psaní diplomové práce a odreagování při učení se na státnice. Ou jé!

Od léta roku 2010 pracuji pro firmu [[Fiedler|http://www.fiedler-magr.cz]].
!Aktuálně
!!14. června 2011
Školní měřicí a poradní systém, jehož vylepšení má na starosti Bc. Roman Gerhát, se do konventu letos ještě nevrátil a tak jsem vytvořil jednoduchý program v Javě, který činnost poradního systému částečně zastoupí. Data o počasí bere ze serveru [[WolframAlpha|http://www.wolframalpha.com/input/?i=weather+in+plasy]] a v konventu do programu ručně zadávají teplotu v přízemí a ta je programem porovnávána s rosným bodem vnějšího vzduchu. Podle doporučení programu se větrá a ručně zaznamenaný stav teploty a větrání se automaticky posílá na [[můj Twitter|http://twitter.com/intent/user?screen_name=michal_siroky]] a z něj na tyhle stránky. Pravidelnost zadávání dat závisí na lidech v konventu a mám jen omezenou možnost ji ovlivnit, nicméně můžete informace použít k volbě správného oblečení, pokud se rozhodnete plaský klášter navštívit.

<html>
<iframe src="twitter.html" marginheight="0" marginwidth="0" frameborder="0" style="border:0;height:300px;width:500px;"></iframe>
</html>

Pro přístup k datům z //Wolframu// používám knihovnu //~WolframAlpha Java Binding (v1.0) By Todd Gayley// a pro obsluhu //Twitteru// pak [[Twitter4J|http://twitter4j.org/en/index.html]].

!!20. srpna 2010
O minulém víkendu (14. až 15. srpna) probíhaly v plaském klášteře každoroční //netradiční prohlídky//, při kterých se návštěvníkům prezentovala běžně nepřístupná místa budovy konventu včetně podzemních vzdušníkových chodeb. Vizualizace měření ze systému Airflow byla v reálném čase zobrazována na notebooku umístěném v této netradiční prohlídkové trase a fungování systému bylo návštěvníkům vysvětlováno. Vzhledem k tomu, že jsem také sám provázel, setkával jsem se u návštěvníku často s otázkou, ''proč dnes musí být v konventu nějaký (relativně složitý) měřicí systém, když si cisterciáčtí mniši dokázali s obsluhou budovy poradit již před bezmála 300 lety.''

''Moje odpověď je následující:'' Cisterciáci před téměř 300 lety měli k dispozici dost peněz na to, aby v budově v zimě topili do (dnes již nefunkčních či neexistujících) kamen a nestávalo se tedy, že by druhé patro promrzalo a v přízemí bylo na začátku května 6 stupňů nad nulou. Nemuseli tedy dávat tak velký pozor na vlhkost vnějšího vzduchu. A navíc na rajském dvoře tenkrát stál komín protahující vzduch skrz vzdušníkové chodby a okna v rizalitech se schodišti šla otevírat.

''Konvent je po stavebních zásazích z minulosti pozměněný a původní větrací režim nelze dnes aplikovat. Současný měřicí systém je tedy [[Hi-Tech protéza]], která umožňuje, aby konvent mohl správně dýchat. Za cenu toho, že je budova napojena na přístroje, může alespoň na první pohled fungovat jako dřív.''
!!25. července 2010
''V noci mezi 22. a 23. červencem:'' Při bouřce se silným deštěm došlo ke zvýšení hladiny ve vodním systému konventu z obvyklých hodnot, pohybujících se kolem 40 cm, až na výšku hladiny přesahující 70 cm. Postupným odčerpáváním se vodní hladina dostala na současných cca 50 cm.
/%!!13. července 2010
Zveřejnil jsem novou verzi programu [[Airflow Desktop]] pro vizualizaci a analýzu dat.%/
Pokud máte program spuštěný a editor profilů otevřený tak, jak je uvedeno v předchozím návodu, můžeme se pustit do práce.
!Vytvoření profilu
#V okně editoru klepněte na tlačítko //Nový//.
#V dialogu který se objeví vyberte Číselné řady
#V následném dialogu pro uložení vyberte umístění a název nového profilu. {{block{
<<<
Profil je .xml soubor, který v sobě nese informace o zdrojích dat, výpočetních operacích, které se mají nad těmito daty provést a způsobu vizuální reprezentace dat a výsledků výpočtů. 
<<<
Pro demonstrační účely vytvoříme profil rex2 ve složce profiles (viz předchozí část návodu).

[img[obrazky/airflow_desktop/ulozeni.PNG]]

}}}
#Po potvrzení uložení souboru bude okno editoru profilu vypadat následovně: {{block{

[img[obrazky/airflow_desktop/editor_s_profilem1.PNG]]

}}}
#Ve stromu vlevo klepneme na položku Datové zdroje a na panelu vpravo klepneme na tlačítko Přidat soubor jako datový zdroj. V dialogu, která se objeví vybereme typ rex. {{block{

[img[obrazky/airflow_desktop/editor_s_profilem2.PNG]]

}}}
#Ve stromu se pod položkou Datové zdroje objeví položka Nový zdroj. Na tuto položku klepneme a na panelu vpravo zvolíme Vybrat soubor v dialogu pro otevření, který se objeví, vybereme soubor trend2_spike_filtrace.csv. Tento soubor se nachází ve složce airflow_desktop/data/rex/. Je to soubor, který byl uložen programem REX trend {{block{

[img[obrazky/airflow_desktop/editor_s_profilem3.PNG]]

}}}
#Nyní vybereme položku Podgrafy a panelu vpravo klepneme na tlačítko Přidat podgraf Ve stromu se objeví nové položky. 
#V Nastavení svislých os přidáme osu a pojmenujeme ji "Napětí (V)" {{block{

[img[obrazky/airflow_desktop/editor_s_profilem4.PNG]]

}}}
#V datových vláknech přidáme nové datové vlákno (tlačítkem v panelu vpravo) Pak vybereme ve stromu položku Nové datové vlákno a v panelu nastavíme název vlákna na "u1". Tento název musí odpovídat buď názvu sloupce ve vstupních datových souborech (v našem případě u1, u2, u3 nebo u4) nebo názvu výstupního datového vlákna nějaké výpočetní operace. O výpočetních operacích budeme hovořit až později.{{block{

[img[obrazky/airflow_desktop/editor_s_profilem5.PNG]]

}}}
#Profil uložíme klepnutím na tlačítko Uložit v horní liště editoru, nebo klávesovou kombinací ~Ctrl-S. {{block{

[img[obrazky/airflow_desktop/vykresleni_rex1.PNG]]

}}}
!Vykreslení dat
Data vykreslíme klepnutím na tlačítko Vykreslit v horní liště editoru. Vykreslená data vypadají následovně:
!Další experimentování s programem
Ve složce data_explorer/profiles se nachází profil rex.xml, který můžete v editoru profilů otevřít po klepnutí na tlačítko Otevřít a vybráním tohoto profilu v následném dialogu. Tento profil je o něco komplexnější, než rex2.xml, který jsme vytvořili před chvílí a můžete jej použít k prozkoumávání funkcí programu.

Vykreslení dat podle profilu rex.xml vypadá následovně:

[img[obrazky/airflow_desktop/vykresleni_rex2.PNG]]

[img[obrazky/speleo_logo.png]]
Josef Řehák jun. ''SPELEO''
!Rok 2010
[[Větrací systém 2010]]
[[Vodní systém 2010]]
!Rok 2009
[[Vodní systém 2009]]
!Rok 2008
!!Větrací systém
[[Výsledky bakalářské práce 2008]]
[[Pokračování měření 2008]]
/%!Rok 2007
[[Větrací systém 2007]]
!Rok 2006
[[Větrací systém 2006]]%/
<html>
<a rel="license" target="_blank" href="http://creativecommons.org/licenses/by-nc-sa/3.0/cz/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/cz/88x31.png" /></a><br>

<br /><span xmlns:dc="http://purl.org/dc/elements/1.1/" property="dc:title">Webov&#233; str&#225;nky projektu Airflow</span>, jejichž autorem je <a xmlns:cc="http://creativecommons.org/ns#" target="_blank" href="http://www.michalsiroky.com/" property="cc:attributionName" rel="cc:attributionURL">Michal &#352;irok&#253;</a>, podléhají licenci <a rel="license" target="_blank" href="http://creativecommons.org/licenses/by-nc-sa/3.0/cz/">Creative Commons Uve&#271;te autora-Neu&#382;&#237;vejte d&#237;lo komer&#269;n&#283;-Zachovejte licenci 3.0 &#268;esk&#225; republika</a>.

<br><br />Vytvo&#345;eno na z&#225;klad&#283; tohoto d&#237;la: <a xmlns:dc="http://purl.org/dc/elements/1.1/" target="_blank" href="http://www.michalsiroky.com/airflow" rel="dc:source">www.michalsiroky.com</a>
</html>

Stránky jsou provozovány na platformě [[TiddlyWiki|http://www.tiddlywiki.com/]]. Tato platforma podléhá své vlastní licenci. 

<<tiddler ToggleRightSidebar##show
	with: {{config.options.chkShowRightSidebar?'Rozšířené menu':'Rozšířené menu'}}>>
----
[[Hlavní stránka]]
[[O projektu]]
[[Popularizace tématu]]
----
''Meření:''
[[Klášter Plasy]]
----
[[Airflow Desktop|Airflow Desktop]]
----
[[Další odkazy]]
----
[[Michal Široký 2011|http://michalsiroky.com]]
[img[obrazky/email.png]]
<html>
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/cz/"target = "_blank"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-nc-sa/3.0/cz/88x31.png" /></a>
</html>
[[Licenční podmínky]]
!Úvod
Projekt Airflow vznikl jako moje studentská práce na Katedře kybernetiky Západočeské univerzitě v Plzni. Airflow je zaměřen na výzkum a řízení větracího systému v budově konventu v bývalém cisterciáckém klášteře v Plasích. Cílem je zvýšit teplotu a snížit vlhkost v interiéru budovy během letní sezóny.

Konvent (budova, která v 18. století sloužila jako centrum plaského kláštera) byl vybudován v letech 1713 až 1739 podle plánů architekta Jana Blažeje Santiniho v meandru řeky Střely. Z důvodů stability stojí konvent na 5100 dubových pilířích (tzv. pilotách) a na nich položeném dubovém roštu. Tato dřevěná konstrukce je z důvodu konzervace uměle zaplavena vodou. Voda ke dřevu nepouští vzduch, a dřevo tedy nemůže hnít a zůstává pevné.

Přítomnost vody v základech je nutná a užitečná. Voda se však nesmí dostávat (ve formě kondenzující vodní páry) do zdí a dřevěných schodišť. Cílem mé práce je nalézt co možná nejlepší způsob odvětrávání vlhkosti.

!Historie projektu
!!2006
Projekt Airflow začíná jako semestrální práce z předmětu KKY/SIMUL pod vedením Ing. Martina Čecha. V létě 2006 pokračuji vlastními měřeními prováděnými pomocí upraveného počítače RCX od firmy LEGO a dataloggeru ~MicroLog PRO ~EC750.

V následujícím zimním semestru konzultuji možnosti a postupy zpracování naměřených dat s Ing. Ivo Punčochářem. Moje snaha je zaměřena na použití naměřených dat k získání matematických modelů popisujících chování větracího systému a umožňujících předvídání tohoto chování za různých povětrnostních podmínek.
!2007
V letní sezóně pokračuji dalším měřením. Tentokrát je navíc sledován pohyb vzduchu v Modré štole, která je součástí vodního systému konventu. K měření teploty v jednotlivých patrech budovy se přidává i sledování vlhkosti vzduchu a osvětlení.

Díky počítačovému programu Sysquake mohu vyhodnocovat data ihned po jejich stažení z měřicích přístrojů přímo v klášteře.

Navazuji spolupráci s firmou Josef Řehák SPELEO, která se již léta zabývá výzkumem a opatrováním vodního systému konventu.
!2008
Projekt Airflow byl zadán jako téma mé bakalářské práce. Vedoucím práce je Doc. Ing. Eduard JANEČEK ~CSc. Na jaře jsem do budovy konventu instaloval sadu přístrojů pro měření teploty a vlhkosti vzduchu. Soustava pracovala téměř nepřetržitě po dobu dvou měsíců a poskytla velmi cenné informace o chování vzduchu a tím i klimatických podmínkách v budově

Pro účely měření jsem navrhl a realizoval software (v jazyce C#) pro průmyslový počítač ~WinCon, který shromažďoval údaje z prvního patra budovy. Dále jsem implementoval řadu zpracovávacích, výpočetních a vyhodnocovacích algoritmů v jazycích Java a Octave.

Získaná data byla využita pro vytipování kritických míst budovy konventu, podle kterých by se mělo řídit větrání budovy a byla vytvořena pravidla pro správné větrání.

Pro vydání novin MF DNES 21. července jsem poskytl rozhovor o projektu Airflow.

V září jsem projekt prezentoval jako součást expozice Katedry kybernetiky na Dnech vědy a techniky v Plzni.
!2009
Navazuji spolupráci s s Ing. Ondřejem Ježkem, který pracuje na společném projektu Katedry kybernetiky a Fakulty elektrotechnické Západočeské univerzity, jehož cílem je vytvoření samostatného měřicího a řídicího mikropočítače s velkými možnostmi komunikace s jinými zařízeními.

Tento mikropočítač s názvem Emboard se po dokončení jeví jako velmi perspektivní zařízení vhodné k umístění do budovy konventu a umožňující sledování a vyhodnocování klimatických podmínek v reálném čase a zobrazování informací obsluze, která bude podle situace regulovat větrání v budově.

Projekt Airflow v květnu vyhrál na Studentské vědecké konferenci FAV 2009

Pro budoucí vyhodnocování, zobrazování a archivaci dat a komunikaci s Emboardem vytvářím aplikaci v jazyce Java. Aplikace je nazvána [[Airflow Desktop]]. Vizualizační část aplikace je nyní testována na počítačích v konventu.
!2010
Od 1. května je dokončené trvalé měřicí zařízení umístěno v budově konventu plaského kláštera. Funguje bez poruch. personál v kanceláři správy objektu může sledovat vývoj parametrů vzduchu v reálném čase na obrazovce PC a adekvátně reagovat změnou režimu ventilace. Větrání či nevětrání budovy doporučuje měřicí systém na základě vestavěných pravidel.

21. května jsem odevzdal diplomovou práci.

1. června jsem prezentoval projekt na Studentské vědecké konferenci FAV. Příspěvek byl oceněn jako druhý nejzajímavější v magisterské kategorii sekce kybernetika - informatika.

V polovině června byla vysoká teplota vzduchu doprovázena jeho velkým nasycením vodou. Riziko kondenzace nelze v takových případech odhalit bez patřičných měřicích přístrojů. V této situaci se naplno ukázala užitečnost instalovaného měřicího systému Airflow, který nebezpečí pro budovu rozpoznal a zakázal v konventu větrat. Vlhký vzduch se tak podařilo udržet v maximální možné míře mimo budovu.

22. června jsem úspěšně obhájil svoji diplomovou práci a složil státní závěrečnou zkoušku.
Měřicí zařízení v konventu stále pracuje a mělo by v objektu zůstat až do září, kdy bude demontováno a převezeno na Katedru kybernetiky, kde bude do dalšího jara uskladněno, případně využíváno k prezentaci a výuce. Předpokládá se, že po seřízení a případném vylepšení bude na jaře 2011 systém opět instalován do budovy. 

''Od akademického roku 2010/2011 přebírá práci na projektu na FAV ZČU student Bc. Roman Gerhát a já pokračuji ve vlastním výzkumu větrání ve svém volném čase.''
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<!-- horizontal MainMenu -->
<!--<div id='topMenu' refresh='content' tiddler='MainMenu'></div>-->
<!--original MainMenu menu-->
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
!Souhrn
Prázdninová měření mají za cíl podrobněji prozkoumat klimatické podmínky u jižního vodního zrcadla. Zkoumán bude především vliv odkrytí mříže nad vnějším vchodem do zimního refektáře a účinnost odvětrávání prostoru vodního zrcadla pomocí komínu vedoucího z podzemní místnosti u zrcadla nad povrch rajského dvora. 
!Časy větrání
<html>
<table>
	<tr>
		<td>datum</td><td>čas otevření</td><td>čas zavření</td><td>poznámka k oknům</td><td>dveře</td>

	</tr>
	<tr>
		<td>2. 7. 2008</td><td>ráno</td><td>18:00</td><td>1.p, 2.p. SV</td><td>otevřeny</td>
	</tr>
	<tr>
		<td>3. 7. 2008</td><td>ráno</td><td>15:25</td><td>2.p. SV</td><td>otevřeny</td>

	</tr>
	<tr>
		<td>29. 7. 2008</td><td>ráno</td><td>18:00</td><td>1.p, 2.p. SV</td><td>otevřeny</td>
	</tr>
	<tr>
		<td>30. 7. 2008</td><td>12:00</td><td>18:00</td><td>2.p. SV</td><td>otevřeny</td>

	</tr>
</table>
</html>
!Měření ve větrací místnosti
V pokračujícím měření jsem se zaměřil na větrací místnost u jižního zrcadla. Měří se teplota termistory na těchto třech místech:

#S2 je umístěn ve válečku na severní straně větracího komínu zvenku asi 10 cm pod jeho okrajem. (zapojeno na portu 1)
#3N je uchycen na kabel vedoucí od S2 a je umístěn asi 25 cm pod okrajem uvniř komína. V době instalace byl úspěšně distancován od stěny na asi 5 cm. (zapojeno na portu 2)
#1N je nahozen do vzdušníku. Z větrací místnosti není přesně poznat, jak daleko termistor je, ani zda se nedotýká stěny. Předpokládám, že je asi tak půl metru pod otvorem, kterým byl dovnitř vhozen. (zapojeno na portu 3)
!!Časy otevření / zavření větracího komína
<html>
<table>
	<tr>
		<td>datum</td><td>čas</td><td>stav</td>
	</tr>
	<tr>
		<td>2. 7. 08</td><td>13:30</td><td>otevřeno</td>

	</tr>
	<tr>
		<td>3. 7. 08</td><td>15:20</td><td>zavřeno</td>
	</tr>
	<tr>
		<td>18. 7. 08</td><td>13:14</td><td>otevřeno</td>

	</tr>
	<tr>
		<td>19. 7. 08</td><td>15:30</td><td>zavřeno</td>
	</tr>
	<tr>
		<td>20. 7. 08</td><td>11:12</td><td>otevřeno</td>

	</tr>
	<tr>
		<td>20. 7. 08</td><td>17:09</td><td>zavřeno</td>
	</tr>
	<tr>
		<td>1. 8. 08</td><td>15:43</td><td>otevřeno</td>

	</tr>
	<tr>
		<td>1. 8. 08</td><td>17:02</td><td>zavřeno</td>
	</tr>
	<tr>
		<td>2. 8. 08</td><td>13:20</td><td>otevřeno</td>

	</tr>
</table>
</html>
!!Výsledky měření m08r01
*Měření probíhalo od 2. července 15:40 do 3. července 15:30
[img[grafy/08/r/m08r01.png]]
!!Výsledky měření m08r02
*Měření probíhalo od 7. července 10:30 do 8. července 11:13
[img[grafy/08/r/m08r02.png]]
!!Výsledky měření m08r03
*Měření probíhalo od 18. července 13:10 do 19. července 13:15
[img[grafy/08/r/m08r03.png]]
!Měření u jižního zrcadla
!!Výsledky měření m08kp01
*Měření probíhalo od 12. července 12:00 do 20. července 11:10
*Měřicí zařízení Microlog bylo zavěšeno na trámu asi 2m nad schodištěm k vodnímu zrcadlu
*rb moje představuje hodnotu rosného bodu získanou vlastní metodou výpočtu, rb microlog pak hodnotu vypočtenou softwarem dodávaným k zařízení Microlog.
[img[grafy/08/k/m08kp01_t_rb.png]]
[img[grafy/08/k/m08kp01_rh.png]]
!!Výsledky měření m08kp02
*Měření probíhalo od 30. července 14:30 do 3. srpna 15:40
*Měřicí zařízení Microlog bylo zavěšeno na trámu u vchodu do větrací místnosti u jižního zrcadla. Microlog byl ve výšce asi 1,2 m na straně trámu přivrácené k větrací místnosti.
*rb moje představuje hodnotu rosného bodu získanou vlastní metodou výpočtu, rb microlog pak hodnotu vypočtenou softwarem dodávaným k zařízení Microlog.
*Zvýšení teploty a snížení vlhkosti mezi 2. a 3. srpnem bylo způsobeno přenesením Micrologu v 17:31 (2. srpna) do kanceláře na vysušení. Na místo se vrátil v 10:31 (3. srpna).
[img[grafy/08/k/m08kp02_t_rb.png]]
[img[grafy/08/k/m08kp02_rh.png]]
[[Povídání o vodě a vzduchu]]
V našem povídání se budeme zabývat dvěma živly - vzduchem a vodou. Jako dávní alchymisté budeme zkoumat jejich vlastnosti a budeme je podrobovat myšlenkovým pokusům.

Budeme sledovat oba dva živly současně, protože se tak i vyskytují v přírodě. Vzduch, který dýcháme, v sobě vždy obsahuje určité množství vodní páry a voda, kterou pijeme, obsahuje rozpuštěný vzduch. Díky tomu se mohou na obloze vytvářet mraky, ze kterých prší a ryby a další tvorové žijící ve vodě mohou dýchat.

Většinu povrchu naší planety tvoří vodní plocha. Voda se neustále odpařuje do ovzduší. Dokonce i led se odpařuje, říkáme tomu sublimace. Když vzduch s vodní párou vystoupá do větších výšek, kde je chladno, pára se ze vzduchu srazí (vykondenzuje). Následkem sražení vodní páry v kapičky je pak déšť.

Množství vodní páry, které může být obsaženo ve vzduchu, aniž by se pára srážela v kapičky, závisí na teplotě tohoto vzduchu, lépe řečeno na teplotě směsi vzduchu a vodní páry. Čím je vzduch teplejší, tím může "beztrestně" obsahovat větší množství páry.

!Děláme mlhu
Nyní provedeme náš první myšlenkový pokus: Sestavíme si uzavíratelnou krabici, která bude mít všechny hrany dlouhé jeden metr. Krabici postavíme do místnosti a zavřeme ji. Pokud je vše provedeno dobře, obsahuje nyní naše krabice jeden metr krychlový pokojového vzduchu. Odhadem mohu říci, že vzduch v naší krabici bude vážit něco kolem 1,2 kilogramu a bude obsahovat zhruba 10 gramů vodní páry.

Řekněme, že si chceme v naší krabici vyrobit mlhu. - Obláček mlhy, který by se v ní vznášel. Abychom toho dosáhli, bude stačit, když vzduch ochladíme. Nemusíme se zabývat technickou realizací chlazení, zkrátka řekneme, že se vzduch má ochladit. V krabici máme pokojový vzduch s pokojovou teplotou, tak asi 21 stupňů Celsia. Poručíme, aby teplota uvnitř krabice, ale ne jejích stěn, klesla na 17 stupňů. Nic se nestane. Pokračujeme tedy dál na 14. Také nic. Co třeba 11 stupňů? To už se začíná něco dít. Necháme stěny krabice zprůhlednět...

[img[obrazky/o_vzduchu/o_vzduchu.png]]

...a sledujeme, že náš pohled je již trochu zamlžen. Necháme teplotu spadnout ještě o 6 stupňů a můžeme pozorovat obláček mlhy obsahující asi 3 gramy, tedy 3 mililitry vody. Zbylých 7 gramů se stále statečně drží ve směsi se vzduchem a jsou pro nás neviditelné.

Pokud bychom vzduch nechali takto chladný a nějakou chvíli si počkali, mlha by klesla na dno krabice a vytvořila by rosu. Stejné je to i když se ráno po chladné noci procházíme travou. Na stéblech jsou malé třpytivé kapičky vody, které v tomto případě nemají původ v dešťových srážkách, ale ve vodě, která se vysrážela ze vzduchu relativně nízko nad zemí během nočního ochlazení.

Možná si kladete otázku, jak jsem věděl, že při určité teplotě se ze vzduchu vysráží určité množství vody. Odpověď je taková, že jsem uvažoval takový vzduch, který při pokojové teplotě bude mít relativní vlhkost 50%, což je ostatně doporučená hodnota pro zdravé bydlení. Relativní vlhkost udává, kolik vodní páry, vzhledem k jejímu maximálnímu množství ve vzduchu při dané teplotě obsažitelném, ten který konkrétní vzduch obsahuje. Do toho našeho pokusného by se při 21 stupních schovalo ještě jednou tolik vody (tedy asi 20 gramů), než by se z něj začala srážet v kapičky. Pak už stačí vzít to, čemu se říká tabulka vlhkého vzduchu a z nich zjistit, na kolik vzduch ochladit, abych z něj dostal určité množství vody. Dotyčnou tabulkou se však budeme zabývat až později.

!Sušíme vzduch
Před chvílí jsme zjistili, že vzduch v sobě může obsahovat vodu. Pokud jej ochladíme, části této vody se zbaví. Nyní si ukážeme, jak dostat vodu ze vzduchu pryč a tím ho vysušit.

V prvním vysoušecím pokusu nebudeme ochlazovat vzduch přímo, jako jsme dělali v předchozím případě. Nyní budeme ochlazovat stěny krabice. Vraťme se tedy na počátek, kdy má vzduch v krabici pokojovou teplotu. Nyní ochlaďme stěny krabice na 11 stupňů. To, co se prve stávalo uprostřed krabice, se nyní stává na jejích stěnách. Vzduch uprostřed krabice má stále kolem 20 °C, vzduch, který je v kontaktu se stěnami se ale ochlazuje na 5 °C a voda z něj kondenzuje v malé kapičky a na ulpívá na stěnách. Zkondenzované kapičky tedy již nezůstávají v prostoru, ale jsou odklizeny jaksi stranou. Pokud by se nám povedlo vzduch v krabici promíchat tak, aby se všechen tento vzduch dostal ke stěnám, podařilo by se nám ho vysušit. Jeho absolutní vlhkost klesla ze zhruba 10 gramů vody na zhruba 7 gramů v jednom metru krychlovém. Vzduch v krabici je nyní ochlazen na 5 stupňů a jeho relativní vlhkost je 100%. Těch 7 gramů vodní páry je maximum, které je schopen při této teplotě udržet.

!Praktická ukázka
Na výše uvedeném principu fungují například vysoušeče vzduchu. Takový vysoušeč je vlastně lednička, skrz kterou je ventilátorem proháněn vzduch. Vzduch se ochladí a přebytečná vlhkost ze vzduchu se vysráží a ve formě kapiček pak steče do zásobníku. Vzduch, který z vysoušeče odchází je opět ohříván na pokojovou teplotu. Pokud bychom tedy náš původní vzduch, o teplotě 20 stupňů a relativní vlhkosti 50%, pustili do vysoušeče, který by v lednicové části chladil na 5 stupňů a na výstupu ohříval na 20, měl by výstupní vzduch absolutní vlhkost opět něco kolem 7 gramů na metr krychlový a díky zvýšení teploty by se zvýšila i rezerva pro udržení vodní páry a relativní vlhkost by pak byla kolem 40% (A ne 100%, jako by to bylo, kdyby zůstal vzduch studený).
<<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal "DD MMM YYYY" "journal">><<saveChanges>><<snapshot id:ask>><<slider chkSliderOptionsPanel OptionsPanel "options »" "Change TiddlyWiki advanced options">>
/***
|''Name''|SimpleSearchPlugin|
|''Description''|displays search results as a simple list of matching tiddlers|
|''Authors''|FND|
|''Version''|0.4.1|
|''Status''|stable|
|''Source''|http://devpad.tiddlyspot.com/#SimpleSearchPlugin|
|''CodeRepository''|http://svn.tiddlywiki.org/Trunk/contributors/FND/plugins/SimpleSearchPlugin.js|
|''License''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''Keywords''|search|
!Revision History
!!v0.2.0 (2008-08-18)
* initial release
!!v0.3.0 (2008-08-19)
* added Open All button (renders Classic Search option obsolete)
* sorting by relevance (title matches before content matches)
!!v0.4.0 (2008-08-26)
* added tag matching
!To Do
* tag matching optional
* animations for container creation and removal
* when clicking on search results, do not scroll to the respective tiddler (optional)
* use template for search results
!Code
***/
//{{{
if(!version.extensions.SimpleSearchPlugin) { //# ensure that the plugin is only installed once
version.extensions.SimpleSearchPlugin = { installed: true };

if(!config.extensions) { config.extensions = {}; }

config.extensions.SimpleSearchPlugin = {
	heading: "Search Results",
	containerId: "searchResults",
	btnCloseLabel: "close",
	btnCloseTooltip: "dismiss search results",
	btnCloseId: "search_close",
	btnOpenLabel: "Open all",
	btnOpenTooltip: "open all search results",
	btnOpenId: "search_open",

	displayResults: function(matches, query) {
		story.refreshAllTiddlers(true); // update highlighting within story tiddlers
		var el = document.getElementById(this.containerId);
		query = '"""' + query + '"""'; // prevent WikiLinks
		if(el) {
			removeChildren(el);
		} else { //# fallback: use displayArea as parent
			var container = document.getElementById("displayArea");
			el = document.createElement("div");
			el.id = this.containerId;
			el = container.insertBefore(el, container.firstChild);
		}
		var msg = "!" + this.heading + "\n";
		if(matches.length > 0) {
			msg += "''" + config.macros.search.successMsg.format([matches.length.toString(), query]) + ":''\n";
			this.results = [];
			for(var i = 0 ; i < matches.length; i++) {
				this.results.push(matches[i].title);
				msg += "* [[" + matches[i].title + "]]\n";
			}
		} else {
			msg += "''" + config.macros.search.failureMsg.format([query]) + "''"; // XXX: do not use bold here!?
		}
		createTiddlyButton(el, this.btnCloseLabel, this.btnCloseTooltip, config.extensions.SimpleSearchPlugin.closeResults, "button", this.btnCloseId);
		wikify(msg, el);
		if(matches.length > 0) { // XXX: redundant!?
			createTiddlyButton(el, this.btnOpenLabel, this.btnOpenTooltip, config.extensions.SimpleSearchPlugin.openAll, "button", this.btnOpenId);
		}
	},

	closeResults: function() {
		var el = document.getElementById(config.extensions.SimpleSearchPlugin.containerId);
		removeNode(el);
		config.extensions.SimpleSearchPlugin.results = null;
		highlightHack = null;
	},

	openAll: function(ev) {
		story.displayTiddlers(null, config.extensions.SimpleSearchPlugin.results);
		return false;
	}
};

config.shadowTiddlers.StyleSheetSimpleSearch = "/*{{{*/\n" +
	"#" + config.extensions.SimpleSearchPlugin.containerId + " {\n" +
	"\toverflow: auto;\n" +
	"\tpadding: 5px 1em 10px;\n" +
	"\tbackground-color: [[ColorPalette::TertiaryPale]];\n" +
	"}\n\n" +
	"#" + config.extensions.SimpleSearchPlugin.containerId + " h1 {\n" +
	"\tmargin-top: 0;\n" +
	"\tborder: none;\n" +
	"}\n\n" +
	"#" + config.extensions.SimpleSearchPlugin.containerId + " ul {\n" +
	"\tmargin: 0.5em;\n" +
	"\tpadding-left: 1.5em;\n" +
	"}\n\n" +
	"#" + config.extensions.SimpleSearchPlugin.containerId + " .button {\n" +
	"\tdisplay: block;\n" +
	"\tborder-color: [[ColorPalette::TertiaryDark]];\n" +
	"\tpadding: 5px;\n" +
	"\tbackground-color: [[ColorPalette::TertiaryLight]];\n" +
	"}\n\n" +
	"#" + config.extensions.SimpleSearchPlugin.containerId + " .button:hover {\n" +
	"\tborder-color: [[ColorPalette::SecondaryMid]];\n" +
	"\tbackground-color: [[ColorPalette::SecondaryLight]];\n" +
	"}\n\n" +
	"#" + config.extensions.SimpleSearchPlugin.btnCloseId + " {\n" +
	"\tfloat: right;\n" +
	"\tmargin: -5px -1em 5px 5px;\n" +
	"}\n\n" +
	"#" + config.extensions.SimpleSearchPlugin.btnOpenId + " {\n" +
	"\tfloat: left;\n" +
	"\tmargin-top: 5px;\n" +
	"}\n" +
	"/*}}}*/";
store.addNotification("StyleSheetSimpleSearch", refreshStyles);

// override Story.search()
Story.prototype.search = function(text, useCaseSensitive, useRegExp) {
	highlightHack = new RegExp(useRegExp ? text : text.escapeRegExp(), useCaseSensitive ? "mg" : "img");
	var matches = store.search(highlightHack, null, "excludeSearch");
	var q = useRegExp ? "/" : "'";
	config.extensions.SimpleSearchPlugin.displayResults(matches, q + text + q);
};

// override TiddlyWiki.search() to sort by relevance
TiddlyWiki.prototype.search = function(searchRegExp, sortField, excludeTag, match) {
	var candidates = this.reverseLookup("tags", excludeTag, !!match);
	var primary = [];
	var secondary = [];
	var tertiary = [];
	for(var t = 0; t < candidates.length; t++) {
		if(candidates[t].title.search(searchRegExp) != -1) {
			primary.push(candidates[t]);
		} else if(candidates[t].tags.join(" ").search(searchRegExp) != -1) {
			secondary.push(candidates[t]);
		} else if(candidates[t].text.search(searchRegExp) != -1) {
			tertiary.push(candidates[t]);
		}
	}
	var results = primary.concat(secondary).concat(tertiary);
	if(sortField) {
		results.sort(function(a, b) {
			return a[sortField] < b[sortField] ? -1 : (a[sortField] == b[sortField] ? 0 : +1);
		});
	}
	return results;
};

} //# end of "install only once"
//}}}
/***
|Name|SinglePageModePlugin|
|Source|http://www.TiddlyTools.com/#SinglePageModePlugin|
|Documentation|http://www.TiddlyTools.com/#SinglePageModePluginInfo|
|Version|2.9.6|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|Show tiddlers one at a time with automatic permalink, or always open tiddlers at top/bottom of page.|
This plugin allows you to configure TiddlyWiki to navigate more like a traditional multipage web site with only one tiddler displayed at a time.
!!!!!Documentation
>see [[SinglePageModePluginInfo]]
!!!!!Configuration
<<<
<<option chkSinglePageMode>> Display one tiddler at a time
><<option chkSinglePagePermalink>> Automatically permalink current tiddler
><<option chkSinglePageKeepFoldedTiddlers>> Don't close tiddlers that are folded
><<option chkSinglePageKeepEditedTiddlers>> Don't close tiddlers that are being edited
<<option chkTopOfPageMode>> Open tiddlers at the top of the page
<<option chkBottomOfPageMode>> Open tiddlers at the bottom of the page
<<option chkSinglePageAutoScroll>> Automatically scroll tiddler into view (if needed)

Notes:
* The "display one tiddler at a time" option can also be //temporarily// set/reset by including a 'paramifier' in the document URL: {{{#SPM:true}}} or {{{#SPM:false}}}.
* If more than one display mode is selected, 'one at a time' display takes precedence over both 'top' and 'bottom' settings, and if 'one at a time' setting is not used, 'top of page' takes precedence over 'bottom of page'.
* When using Apple's Safari browser, automatically setting the permalink causes an error and is disabled.
<<<
!!!!!Revisions
<<<
2008.10.17 [2.9.6] changed chkSinglePageAutoScroll default to false
| Please see [[SinglePageModePluginInfo]] for previous revision details |
2005.08.15 [1.0.0] Initial Release.  Support for BACK/FORWARD buttons adapted from code developed by Clint Checketts.
<<<
!!!!!Code
***/
//{{{
version.extensions.SinglePageModePlugin= {major: 2, minor: 9, revision: 6, date: new Date(2008,10,17)};
//}}}
//{{{
config.paramifiers.SPM = { onstart: function(v) {
	config.options.chkSinglePageMode=eval(v);
	if (config.options.chkSinglePageMode && config.options.chkSinglePagePermalink && !config.browser.isSafari) {
		config.lastURL = window.location.hash;
		if (!config.SPMTimer) config.SPMTimer=window.setInterval(function() {checkLastURL();},1000);
	}
} };
//}}}
//{{{
if (config.options.chkSinglePageMode==undefined)
	config.options.chkSinglePageMode=false;
if (config.options.chkSinglePagePermalink==undefined)
	config.options.chkSinglePagePermalink=true;
if (config.options.chkSinglePageKeepFoldedTiddlers==undefined)
	config.options.chkSinglePageKeepFoldedTiddlers=false;
if (config.options.chkSinglePageKeepEditedTiddlers==undefined)
	config.options.chkSinglePageKeepEditedTiddlers=false;
if (config.options.chkTopOfPageMode==undefined)
	config.options.chkTopOfPageMode=false;
if (config.options.chkBottomOfPageMode==undefined)
	config.options.chkBottomOfPageMode=false;
if (config.options.chkSinglePageAutoScroll==undefined)
	config.options.chkSinglePageAutoScroll=false;
//}}}
//{{{
config.SPMTimer = 0;
config.lastURL = window.location.hash;
function checkLastURL()
{
	if (!config.options.chkSinglePageMode)
		{ window.clearInterval(config.SPMTimer); config.SPMTimer=0; return; }
	if (config.lastURL == window.location.hash) return; // no change in hash
	var tids=decodeURIComponent(window.location.hash.substr(1)).readBracketedList();
	if (tids.length==1) // permalink (single tiddler in URL)
		story.displayTiddler(null,tids[0]);
	else { // restore permaview or default view
		config.lastURL = window.location.hash;
		if (!tids.length) tids=store.getTiddlerText("DefaultTiddlers").readBracketedList();
		story.closeAllTiddlers();
		story.displayTiddlers(null,tids);
	}
}


if (Story.prototype.SPM_coreDisplayTiddler==undefined)
	Story.prototype.SPM_coreDisplayTiddler=Story.prototype.displayTiddler;
Story.prototype.displayTiddler = function(srcElement,tiddler,template,animate,slowly)
{
	var title=(tiddler instanceof Tiddler)?tiddler.title:tiddler;
	var tiddlerElem=document.getElementById(story.idPrefix+title); // ==null unless tiddler is already displayed
	var opt=config.options;
	var single=opt.chkSinglePageMode && !startingUp;
	var top=opt.chkTopOfPageMode && !startingUp;
	var bottom=opt.chkBottomOfPageMode && !startingUp;
	if (single) {
		story.forEachTiddler(function(tid,elem) {
			// skip current tiddler and, optionally, tiddlers that are folded.
			if (	tid==title
				|| (opt.chkSinglePageKeepFoldedTiddlers && elem.getAttribute("folded")=="true"))
				return;
			// if a tiddler is being edited, ask before closing
			if (elem.getAttribute("dirty")=="true") {
				if (opt.chkSinglePageKeepEditedTiddlers) return;
				// if tiddler to be displayed is already shown, then leave active tiddler editor as is
				// (occurs when switching between view and edit modes)
				if (tiddlerElem) return;
				// otherwise, ask for permission
				var msg="'"+tid+"' is currently being edited.\n\n";
				msg+="Press OK to save and close this tiddler\nor press Cancel to leave it opened";
				if (!confirm(msg)) return; else story.saveTiddler(tid);
			}
			story.closeTiddler(tid);
		});
	}
	else if (top)
		arguments[0]=null;
	else if (bottom)
		arguments[0]="bottom";
	if (single && opt.chkSinglePagePermalink && !config.browser.isSafari) {
		window.location.hash = encodeURIComponent(String.encodeTiddlyLink(title));
		config.lastURL = window.location.hash;
		document.title = wikifyPlain("SiteTitle") + " - " + title;
		if (!config.SPMTimer) config.SPMTimer=window.setInterval(function() {checkLastURL();},1000);
	}
	if (tiddlerElem && tiddlerElem.getAttribute("dirty")=="true") { // editing... move tiddler without re-rendering
		var isTopTiddler=(tiddlerElem.previousSibling==null);
		if (!isTopTiddler && (single || top))
			tiddlerElem.parentNode.insertBefore(tiddlerElem,tiddlerElem.parentNode.firstChild);
		else if (bottom)
			tiddlerElem.parentNode.insertBefore(tiddlerElem,null);
		else this.SPM_coreDisplayTiddler.apply(this,arguments); // let CORE render tiddler
	} else
		this.SPM_coreDisplayTiddler.apply(this,arguments); // let CORE render tiddler
	var tiddlerElem=document.getElementById(story.idPrefix+title);
	if (tiddlerElem&&opt.chkSinglePageAutoScroll) {
		// scroll to top of page or top of tiddler
		var isTopTiddler=(tiddlerElem.previousSibling==null);
		var yPos=isTopTiddler?0:ensureVisible(tiddlerElem);
		// if animating, defer scroll until after animation completes
		var delay=opt.chkAnimate?config.animDuration+10:0;
		setTimeout("window.scrollTo(0,"+yPos+")",delay); 
	}
}

if (Story.prototype.SPM_coreDisplayTiddlers==undefined)
	Story.prototype.SPM_coreDisplayTiddlers=Story.prototype.displayTiddlers;
Story.prototype.displayTiddlers = function() {
	// suspend single/top/bottom modes when showing multiple tiddlers
	var opt=config.options;
	var saveSPM=opt.chkSinglePageMode; opt.chkSinglePageMode=false;
	var saveTPM=opt.chkTopOfPageMode; opt.chkTopOfPageMode=false;
	var saveBPM=opt.chkBottomOfPageMode; opt.chkBottomOfPageMode=false;
	this.SPM_coreDisplayTiddlers.apply(this,arguments);
	opt.chkBottomOfPageMode=saveBPM;
	opt.chkTopOfPageMode=saveTPM;
	opt.chkSinglePageMode=saveSPM;
}
//}}}
/***
|Name|SinglePageModePluginInfo|
|Source|http://www.TiddlyTools.com/#SinglePageModePlugin|
|Documentation|http://www.TiddlyTools.com/#SinglePageModePluginInfo|
|Version|2.9.6|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|documentation|
|Description|Documentation for SinglePageModePlugin|
Normally, as you click on the links in TiddlyWiki, more and more tiddlers are displayed on the page. The order of this tiddler display depends upon when and where you have clicked. Some people like this non-linear method of reading the document, while others have reported that when many tiddlers have been opened, it can get somewhat confusing.  SinglePageModePlugin allows you to configure TiddlyWiki to navigate more like a traditional multipage web site with only one item displayed at a time.
!!!!!Usage
<<<
When the plugin is enabled, only one tiddler will be displayed at a time and the browser window's titlebar is updated to include the current tiddler title.  The browser's location URL is also updated with a 'permalink' for the current tiddler so that it is easier to create a browser 'bookmark' for the current tiddler.  Alternatively, even when displaying multiple tiddlers //is// permitted, you can still reduce the potential for confusion by forcing  tiddlers to always open at the top (or bottom) of the page instead of being displayed following the tiddler containing the link that was clicked.
<<<
!!!!!Configuration
<<<
<<option chkSinglePageMode>> Display one tiddler at a time
><<option chkSinglePagePermalink>> Automatically permalink current tiddler
><<option chkSinglePageKeepFoldedTiddlers>> Don't close tiddlers that are folded
><<option chkSinglePageKeepEditedTiddlers>> Don't close tiddlers that are being edited
<<option chkTopOfPageMode>> Open tiddlers at the top of the page
<<option chkBottomOfPageMode>> Open tiddlers at the bottom of the page
<<option chkSinglePageAutoScroll>> Automatically scroll tiddler into view (if needed)

Notes:
* {{block{
The "display one tiddler at a time" option can also be //temporarily// set/reset by including a 'paramifier' in the document URL: {{{#SPM:true}}} or {{{#SPM:false}}}. You can also use {{{SPM:expression}}}, where 'expression' is any javascript statement that evaluates to true or false.  This allows you to create hard-coded links in other documents that can selectively enable/disable the use of this option based on various programmatic conditions, such as the current username. For example, using
&nbsp;&nbsp;&nbsp;{{{#SPM:config.options.txtUserName!="SomeName"}}}
enables 'one tiddler at a time' display for all users //other than// "~SomeName")}}}
* If more than one display mode is selected, 'one at a time' display takes precedence over both 'top' and 'bottom' settings, and if 'one at a time' setting is not used, 'top of page' takes precedence over 'bottom of page'.
* When using Apple's Safari browser, automatically setting the permalink causes an error and is disabled.
<<<
!!!!!Revisions
<<<
2008.10.17 2.9.6 changed chkSinglePageAutoScroll default to false
2008.06.12 2.9.5 corrected 'scroll to top of page' logic in auto-scroll handling
2008.06.11 2.9.4 added chkSinglePageKeepEditedTiddlers option
2008.06.05 2.9.3 in displayTiddler(), bypass single/top/bottom mode handling if startingUp.  Allows multiple tiddlers to be displayed during startup processing (e.g., #story:DefaultTiddlers), even if single/top/bottom mode is enabled.
2008.04.18 2.9.2 in displayTiddler() and checkLastURL(), handling for Unicode in tiddler titles (remove explicit conversion between Unicode and UTF, as this is apparently done automatically by encode/decodeURIComponent, resulting in double-encoding!
2008.04.08 2.9.1 don't automatically add options to AdvancedOptions shadow tiddler
2008.04.02 2.9.0 in displayTiddler(), when single-page mode is in use and a tiddler is being edited, ask for permission to save-and-close that tiddler, instead of just leaving it open.
2008.03.29 2.8.3 in displayTiddler(), get title from tiddler object (if needed).  Fixes errors caused when calling function passes a tiddler *object* instead of a tiddler *title*
2008.03.14 2.8.2 in displayTiddler(), if editing specified tiddler, just move it to top/bottom of story *without* re-rendering (prevents discard of partial edits).
2008.03.06 2.8.1 in paramifier handler, start 'checkURL' timer if chkSinglePageMode is enabled
2008.03.06 2.8.0 added option, {{{config.options.chkSinglePageKeepFoldedTiddlers}}}, so folded tiddlers won't be closed when using single-page mode.  Also, in checkURL(), if hash is a ''permaview'' (e.g., "#foo bar baz"), then display multiple tiddlers rather than attempting to display "foo bar baz" as a single tiddler
2008.03.05 2.7.0 added support for "SPM:" URL paramifier
2008.03.01 2.6.0 in hijack of displayTiddler(), added 'title' argument to closeAllTiddlers() so that target tiddler isn't closed-and-reopened if it was already displayed.  Also, added config.options.chkSinglePageAutoScrolloption to bypass automatic 'scroll into view' logic (note: core still does it's own ensureVisible() handling)
2007.12.22 2.5.3 in checkLastURL(), use decodeURIComponent() instead of decodeURI so that tiddler titles with commas (and/or other punctuation) are correctly handled.
2007.10.26 2.5.2 documentation cleanup
2007.10.08 2.5.1 in displayTiddler(), when using single-page or top-of-page mode, scrollTo(0,0) to ensure that page header is in view.
2007.09.13 2.5.0 for TPM/BPM modes, don't force tiddler to redisplay if already shown.  Allows transition between view/edit or collapsed/view templates, without repositioning displayed tiddler.
2007.09.12 2.4.0 added option to disable automatic permalink feature.  Also, Safari is now excluded from permalinking action to avoid bug where tiddlers don't display after hash is updated.
2007.03.03 2.3.1 fix typo when adding BPM option to AdvancedOptions (prevented checkbox from appearing)
2007.03.03 2.3.0 added support for BottomOfPageMode (BPM) based on request from DaveGarbutt
2007.02.06 2.2.3 in Story.prototype.displayTiddler(), use convertUnicodeToUTF8() for correct I18N string handling when creating URL hash string from tiddler title (based on bug report from BidiX)
2007.01.08 2.2.2 use apply() to invoke hijacked core functions
2006.07.04 2.2.1 in hijack for displayTiddlers(), suspend TPM as well as SPM so that DefaultTiddlers displays in the correct order.
2006.06.01 2.2.0 added chkTopOfPageMode (TPM) handling
2006.02.04 2.1.1 moved global variable declarations to config.* to avoid FireFox 1.5.0.1 crash bug when assigning to globals
2005.12.27 2.1.0 hijack displayTiddlers() so that SPM can be suspended during startup while displaying the DefaultTiddlers (or #hash list).  Also, corrected initialization for undefined SPM flag to "false", so default behavior is to display multiple tiddlers
2005.12.27 2.0.0 Update for TW2.0
2005.11.24 1.1.2 When the back and forward buttons are used, the page now changes to match the URL.  Based on code added by Clint Checketts
2005.10.14 1.1.1 permalink creation now calls encodeTiddlyLink() to handle tiddler titles with spaces in them
2005.10.14 1.1.0 added automatic setting of window title and location bar ('auto-permalink').  feature suggestion by David Dickens.
2005.10.09 1.0.1 combined documentation and code in a single tiddler
2005.08.15 1.0.0 Initial Release
<<<
-- voda a vzduch z pohledu vědy a techniky
Airflow
/***
|Name|SnapshotPlugin|
|Source|http://www.TiddlyTools.com/#SnapshotPlugin|
|Documentation|http://www.TiddlyTools.com/#SnapshotPluginInfo|
|Version|1.3.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|save or print HTML+CSS image of rendered document content|
This plugin provides a macro as well as tiddler toolbar commands to create a file or browser window containing the //rendered// CSS-and-HTML that is currently being displayed for selected elements of the current document.
!!!!!Documentation
>see [[SnapshotPluginInfo]]
!!!!!Configuration
<<<
<<option chkSnapshotHTMLOnly>> output HTML only (omit CSS)
<<<
!!!!!Revisions
<<<
2009.10.12 1.3.0 added multi-file story snapshot
|please see [[SnapshotPluginInfo]] for additional revision details|
2008.04.21 1.0.0 initial release - derived from [[NewDocumentPlugin]] with many improvements...
<<<
!!!!!Code
***/
//{{{
version.extensions.SnapshotPlugin= {major: 1, minor: 3, revision: 0, date: new Date(2009,10,12)};

if (config.options.chkSnapshotHTMLOnly===undefined)
	config.options.chkSnapshotHTMLOnly=false;

config.macros.snapshot = {
	snapLabel: "save a snapshot",
	printLabel: "print a snapshot",
	snapPrompt: "save an HTML image",
	printPrompt: "print an HTML image",
	hereID: "here",
	viewerID: "viewer",
	storyID: "story",
	allID: "all",
	askID: "ask",
	askTiddlerID: "askTiddler",
	askDOMID: "askDOM",
	askMsg: "select an element...",
	hereItem: "tiddler: '%0'",
	viewerItem: "tiddler: '%0' (content only)",
	storyItem: "story column (one file)",
	storyFilesItem: "story column (multiple files)",
	allItem: "entire document",
	tiddlerItem: "select a tiddler...",
	IDItem: "select a DOM element by ID...",
	HTMLItem: "[%0] output HTML only (omit CSS)",
	fileMsg: "select or enter a target path/filename",
	defaultFilename: "snapshot.html",
	okmsg: "snapshot written to %0",
	failmsg: "An error occurred while creating %0",
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var printing=params[0]&&params[0]=="print"; if (printing) params.shift();
		params = paramString.parseParams("anon",null,true,false,false);
		var id=getParam(params,"id","here");
		var label=getParam(params,"label",printing?this.printLabel:this.snapLabel);
		var prompt=getParam(params,"prompt",printing?this.printPrompt:this.snapPrompt);
		var btn=createTiddlyButton(place,label,prompt, function(ev){
			this.setAttribute("snapID",this.getAttribute("startID"));
			config.macros.snapshot.go(this,ev)
		});
		btn.setAttribute("startID",id);
		btn.setAttribute("snapID",id);
		btn.setAttribute("printing",printing?"true":"false");
		btn.setAttribute("HTMLOnly",config.options.chkSnapshotHTMLOnly?"true":"false");
	},
	go: function(here,ev) {
		var cms=config.macros.snapshot; // abbreviation
		var id=here.getAttribute("snapID");
		var printing=here.getAttribute("printing")=="true";
		var HTMLOnly=here.getAttribute("HTMLOnly")=="true";

		if (id==cms.askID||id==cms.askTiddlerID||id==cms.askDOMID) {
			cms.askForID(here,ev);
		} else if (id==cms.storyID) {
			story.forEachTiddler(function(t,e) {
				var out=cms.getsnap(e,e.id,printing,HTMLOnly);
				if (printing) cms.printsnap(out);
				else cms.savesnap(out,e.getAttribute('tiddler')+'.html');
			});
		} else {
			if (id==cms.allID) id="contentWrapper";
			var snapElem=document.getElementById(id);
			if (id==cms.hereID || id==cms.viewerID)
				var snapElem=story.findContainingTiddler(here);
			if (snapElem && hasClass(snapElem,"tiddler") && (id==cms.viewerID || HTMLOnly)) {
				// find viewer class element within tiddler element
				var nodes=snapElem.getElementsByTagName("*");
				for (var i=0; i<nodes.length; i++)
					if (hasClass(nodes[i],"viewer")) { snapElem=nodes[i]; break; }
			}
			if (!snapElem) // not in a tiddler or no viewer element or unknown ID
				{ e.cancelBubble=true; if(e.stopPropagation)e.stopPropagation(); return(false); }
			// write or print snapshot
			var out=cms.getsnap(snapElem,id,printing,HTMLOnly);
			if (printing) cms.printsnap(out); else cms.savesnap(out);
		}
		return false;
	},
	askForID: function(here,ev) {
		var ev = ev ? ev : window.event; 
		var cms=config.macros.snapshot; // abbreviation
		var id=here.getAttribute("snapID");
		var indent='\xa0\xa0\xa0\xa0';
		var p=Popup.create(here); if (!p) return false; p.className+=' sticky smallform';
		var s=createTiddlyElement(p,'select'); s.button=here;
		if (id==cms.askID) {
			s.options[s.length]=new Option(cms.askMsg,cms.askID);
			var tid=story.findContainingTiddler(here);
			if(tid) { 
				var title=tid.getAttribute("tiddler");
				if (here.getAttribute("HTMLOnly")!="true")
					s.options[s.length]=new Option(indent+cms.hereItem.format([title]),cms.hereID);
				s.options[s.length]=new Option(indent+cms.viewerItem.format([title]),cms.viewerID);
			}
			s.options[s.length]=new Option(indent+cms.tiddlerItem,cms.askTiddlerID);
			s.options[s.length]=new Option(indent+cms.IDItem,cms.askDOMID);
			s.options[s.length]=new Option(indent+cms.storyItem,"tiddlerDisplay");
			s.options[s.length]=new Option(indent+cms.storyFilesItem,cms.storyID);
			s.options[s.length]=new Option(indent+cms.allItem,"contentWrapper");
		}
		if (id==cms.askDOMID) {
			s.options[s.length]=new Option(cms.IDItem,cms.askDOMID);
			var elems=document.getElementsByTagName("*");
			var ids=[];
			for (var i=0;i<elems.length;i++)
				if (elems[i].id.length && elems[i].className!="animationContainer")
					ids.push(elems[i].id);
			ids.sort();
			for (var i=0;i<ids.length;i++) s.options[s.length]=new Option(indent+ids[i],ids[i]);
		}
		if (id==cms.askTiddlerID) {
			s.options[s.length]=new Option(cms.tiddlerItem,cms.askTiddlerID);
			var elems=document.getElementsByTagName("div");
			var ids=[];
			for (var i=0;i<elems.length;i++) { var id=elems[i].id;
				if (id.length && id.substr(0,story.idPrefix.length)==story.idPrefix && id!="tiddlerDisplay")
					ids.push(id);
			}
			ids.sort();
			for (var i=0;i<ids.length;i++) s.options[s.length]=new Option(indent+ids[i].substr(story.idPrefix.length),ids[i]);
		}
		s.options[s.length]=new Option(cms.HTMLItem.format([here.getAttribute("HTMLOnly")=="true"?"\u221a":"_"]),cms.HTMLItem);
		s.onchange=function(ev){
			var ev = ev ? ev : window.event; 
			var cms=config.macros.snapshot; // abbreviation
			var here=this.button;
			if (this.value==cms.HTMLItem) {
				config.options.chkSnapshotHTMLOnly=!config.options.chkSnapshotHTMLOnly;
				here.setAttribute("HTMLOnly",config.options.chkSnapshotHTMLOnly?"true":"false");
				config.macros.option.propagateOption("chkSnapshotHTMLOnly","checked",
					config.options.chkSnapshotHTMLOnly,"input");
			} else
				here.setAttribute("snapID",this.value);
			config.macros.snapshot.go(here,ev);
			return false;
		};
		Popup.show();
		ev.cancelBubble=true;
		if(ev.stopPropagation)ev.stopPropagation();
		return false;
	},
	getpath: function() {
		// get current path
		var path=getLocalPath(window.location.href);
		var slashpos=path.lastIndexOf("/");
		if (slashpos==-1) slashpos=path.lastIndexOf("\\"); 
		if (slashpos!=-1) path=path.substr(0,slashpos+1); // trim filename
		return path;
	},
	getsnap: function(snapElem,id,printing,HTMLOnly) {
		var cms=config.macros.snapshot; // abbreviation
		var out='<head><meta http-equiv="Content-Type" content="text/html;charset=utf-8" />';
		if (printing)
			out+='<base href="file:///'+cms.getpath().replace(/\\/g,'/')+'"></base>\n';
		if (!HTMLOnly) {
			var styles=document.getElementsByTagName('style');
			var fmt='<style>\n/* stylesheet=%0 */\n%1\n\n</style>\n';
			for(var i=0; i < styles.length; i++)
				out+=fmt.format([styles[i].getAttribute('id'),styles[i].innerHTML]);
		}
		out+='</head>\n';

		var elems=snapElem.getElementsByTagName('input');
		for (var i=0; i<elems.length; i++) { var e=elems[i];
			if (e.type=='text')		e.defaultValue=e.value;
			if (e.type=='checkbox')	 	e.defaultChecked=e.checked;
			if (e.type=='radiobutton')	e.defaultChecked=e.checked;
		}
		var elems=snapElem.getElementsByTagName('textarea');
		for (var i=0; i<elems.length; i++)	elems[i].defaultValue=elems[i].value;

		var fmt='<body>\n\n<div class="%0">%1</div>\n\n</body>\n';
		out+=fmt.format([(id==cms.viewerID?'tiddler viewer':''),snapElem.innerHTML]);

		return '<html>\n'+out+'</html>';
	},
	printsnap: function(out) {
		var win=window.open("","_blank","");
		win.document.open();
		win.document.writeln(out);
		win.document.close();
		win.focus(); // bring to front
		win.print(); // trigger print dialog
	},
	savesnap: function(out,target) {
		var cms=config.macros.snapshot; // abbreviation
		// make sure we are local
		if (window.location.protocol!="file:")
			{ alert(config.messages.notFileUrlError); return; }
		var target=target||cms.askForFilename(cms.fileMsg,cms.getpath(),cms.defaultFilename);
		if (!target) return; // cancelled by user
		// if specified file does not include a path, assemble fully qualified path and filename
		var slashpos=target.lastIndexOf("/"); if (slashpos==-1) slashpos=target.lastIndexOf("\\");
		if (slashpos==-1) {
			var h=document.location.href;
			var cwd=getLocalPath(decodeURIComponent(h.substr(0,h.lastIndexOf('/')+1)));
			target=cwd+target;
		}
		var link="file:///"+target.replace(/\\/g,'/'); // link for message text
		var ok=saveFile(target,convertUnicodeToUTF8(out));
		var msg=ok?cms.okmsg.format([target]):cms.failmsg.format([target]);
		displayMessage(msg,link);
	},
	askForFilename: function(msg,path,file) {
		if(window.Components) { // moz
			try {
				netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
				var nsIFilePicker = window.Components.interfaces.nsIFilePicker;
				var picker = Components.classes['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);
				picker.init(window, msg, nsIFilePicker.modeSave);
				var thispath = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
				thispath.initWithPath(path);
				picker.displayDirectory=thispath;
				picker.defaultExtension='html';
				picker.defaultString=file;
				picker.appendFilters(nsIFilePicker.filterAll|nsIFilePicker.filterText|nsIFilePicker.filterHTML);
				if (picker.show()!=nsIFilePicker.returnCancel) var result=picker.file.persistentDescriptor;
			}
			catch(e) { alert('error during local file access: '+e.toString()) }
		}
		else { // IE
			try { // XP/Vista only
				var s = new ActiveXObject('UserAccounts.CommonDialog');
				s.Filter='All files|*.*|Text files|*.txt|HTML files|*.htm;*.html|';
				s.FilterIndex=3; // default to HTML files;
				s.InitialDir=path;
				s.FileName=file;
				if (s.showOpen()) var result=s.FileName;
			}
			catch(e) { var result=prompt(msg,path+file); } // fallback for non-XP IE
		}
		return result;
	}
};
//}}}

// // TOOLBAR DEFINITIONS
//{{{
config.commands.snapshotSave = {
	text: "snap",
	tooltip: config.macros.snapshot.snapPrompt,
	handler: function(ev,src,title) {
		src.setAttribute("snapID","ask");
		src.setAttribute("printing","false");
		src.setAttribute("HTMLOnly",config.options.chkSnapshotHTMLOnly?"true":"false");
		config.macros.snapshot.go(src,ev);
		return false;
	}
};
config.commands.snapshotPrint = {
	text: "print",
	tooltip: config.macros.snapshot.printPrompt,
	handler: function(ev,src,title) {
		src.setAttribute("snapID","ask");
		src.setAttribute("printing","true");
		src.setAttribute("HTMLOnly",config.options.chkSnapshotHTMLOnly?"true":"false");
		config.macros.snapshot.go(src,ev);
		return false;
	}
};
//}}}

// // COPIED FROM [[StickyPopupPlugin]] TO ELIMINATE PLUGIN DEPENDENCY
//{{{
if (config.options.chkStickyPopups==undefined) config.options.chkStickyPopups=false;
Popup.stickyPopup_onDocumentClick = function(ev)
{
	// if click is in a sticky popup, ignore it so popup will remain visible
	var e = ev ? ev : window.event; var target = resolveTarget(e);
	var p=target; while (p) {
		if (hasClass(p,"popup") && (hasClass(p,"sticky")||config.options.chkStickyPopups)) break;
		else p=p.parentNode;
	}
	if (!p) // not in sticky popup (or sticky popups disabled)... use normal click handling
		Popup.onDocumentClick(ev);
	return true;
};
try{removeEvent(document,"click",Popup.onDocumentClick);}catch(e){};
try{addEvent(document,"click",Popup.stickyPopup_onDocumentClick);}catch(e){};
//}}}
!!!!!Examples:
{{{<<snapshot>>}}}: <<snapshot>>
{{{<<snapshot id:mainMenu>>}}}: <<snapshot id:mainMenu>>
{{{<<snapshot print id:story>>}}}: <<snapshot print id:story>>
{{{<<snapshot print id:ask>>}}}: <<snapshot print id:ask>>
{{{<<snapshot print noCSS id:viewer>>}}}: <<snapshot print noCSS id:viewer>>
!!!!!Configuration
<<option chkSnapshotHTMLOnly>> output HTML only (omit CSS)

/*{{{*/
* html .tiddler {height:1%;}

body {font-size:0.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0 1em 1em; left:0px; top:0px;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {padding:0.1em 1em 0 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0 0; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0;}
.wizardFooter .status {padding:0 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em;}

#messageArea {position:fixed; top:2em; right:0; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0 0 0.5em;}
.tab {margin:0 0 0 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler {padding:1em 1em 0;}

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0 0.25em; padding:0 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}

.fieldsetFix {border:0; padding:0; margin:1px 0px;}

.sparkline {line-height:1em;}
.sparktick {outline:0;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;}
#backstageButton a {padding:0.1em 0.4em; margin:0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/%
!info
|Name|ToggleRightSidebar|
|Source|http://www.TiddlyTools.com/#ToggleRightSidebar|
|Version|2.0.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|transclusion|
|Description|show/hide right sidebar (SideBarOptions)|
Usage
<<<
{{{
<<tiddler ToggleRightSidebar>>
<<tiddler ToggleRightSidebar with: label tooltip>>
}}}
Try it: <<tiddler ToggleRightSidebar##show
	with: {{config.options.chkShowRightSidebar?'►':'◄'}}>>
<<<
Configuration:
<<<
{{{
config.options.chkShowRightSidebar (true)
config.options.txtToggleRightSideBarLabelShow (◄)
config.options.txtToggleRightSideBarLabelHide (►)
}}}
<<<
!end
!show
<<tiddler {{
	var co=config.options;
	if (co.chkShowRightSidebar===undefined) co.chkShowRightSidebar=true;
	var sb=document.getElementById('sidebar');
	var da=document.getElementById('displayArea');
	if (sb) {
		sb.style.display=co.chkShowRightSidebar?'block':'none';
		da.style.marginRight=co.chkShowRightSidebar?'':'1em';
	}
'';}}>><html><nowiki><a href='javascript:;' title="$2"
onmouseover="
	this.href='javascript:void(eval(decodeURIComponent(%22(function(){try{('
	+encodeURIComponent(encodeURIComponent(this.onclick))
	+')()}catch(e){alert(e.description?e.description:e.toString())}})()%22)))';"
onclick="
	var co=config.options;
	var opt='chkShowRightSidebar';
	var show=co[opt]=!co[opt];
	var sb=document.getElementById('sidebar');
	var da=document.getElementById('displayArea');
	if (sb) {
		sb.style.display=show?'block':'none';
		da.style.marginRight=show?'':'1em';
	}
	saveOptionCookie(opt);
	var labelShow=co.txtToggleRightSideBarLabelShow||'&#x25C4;';
	var labelHide=co.txtToggleRightSideBarLabelHide||'&#x25BA;';
	if (this.innerHTML==labelShow||this.innerHTML==labelHide) 
		this.innerHTML=show?labelHide:labelShow;
	this.title=(show?'hide':'show')+' right sidebar';
	var sm=document.getElementById('storyMenu');
	if (sm) config.refreshers.content(sm);
	return false;
">$1</a></html>
!end
%/<<tiddler {{
	var src='ToggleRightSidebar';
	src+(tiddler&&tiddler.title==src?'##info':'##show');
}} with: {{
	var co=config.options;
	var labelShow=co.txtToggleRightSideBarLabelShow||'&#x25C4;';
	var labelHide=co.txtToggleRightSideBarLabelHide||'&#x25BA;';
	'$1'!='$'+'1'?'$1':(co.chkShowRightSidebar?labelHide:labelShow);
}} {{
	var tip=(config.options.chkShowRightSidebar?'hide':'show')+' right sidebar';
	'$2'!='$'+'2'?'$2':tip;
}}>>
|~ViewToolbar|closeTiddler closeOthers +editTiddler > fields syncing permalink references jump|
|~EditToolbar|+saveTiddler -cancelTiddler deleteTiddler|
<html>
<iframe src="twitter.html" marginheight="0" marginwidth="0" frameborder="0" style="border:0;height:300px;width:400px;"></iframe>
</html>
!Formáty
Vykreslené grafy je možno ukládat do 3 formátů:
*PNG
*SVG
*PDF
!Nastavení ukládání
Velikost ukládaného grafu lze nastavit v hlavním okně programu //Airflow Desktop// na kartě //Nastavení//. Po změně rozlišení je nutné klepnout na //Uložit nastavení//

[img[obrazky/airflow_desktop/nastaveni.png]]

!Ukládání
Graf se ukládá přímo ze zobrazovacího okna. Na horní liště tohoto okna se nachází textové pole pro název uloženého souboru a tlačítko:

[img[obrazky/airflow_desktop/ulozeni_tlacitko.png]]
*Pokud je název výstupního souboru uveden bez přípony, bude se automaticky ukládat ve formátu PNG.
*Pro název ve tvaru "cokoliv.svg" bude graf uložen ve formátu SVG (Vektorový formát editovatelný například v editoru Inkscape).
*Pro název ve tvaru "cokoliv.pdf" bude graf uložen ve formátu PDF.
Pokud již soubor se zadaným názvem a příponou existuje, program se ptá na jeho přepsání. 
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<!--<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>-->
<div class='tagging' macro='tagging'></div>
<!--<div class='tagged' macro='tags'></div>-->
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
O vodním systému konventu a jeho významu si můžete podrobněji přečíst na stránkách kláštera (www.klaster-plasy.cz) nebo v mé bakalářské práci. Zde uvedu jen pro úplnost to, že budova konventu plaského kláštera je postavena na písečných říčních náplavách a z důvodu stability je pod zdmi budovy zatlučeno přes 5000 dubových pilot.

Zde cituji pana Josefa Řeháka z firmy SPELEO:
<<<
Pilota je opracovaná kláda nebo hraněný trám zbavený kůry s opálenou, někdy i okovanou špicí. Pilota se do podloží zatlouká, tedy beraní beranidlem na stojato svisle dolů až na pevnější podklad. Přečnívající část se odřízne a hlava se z důvodu ochrany proti hnilobě opálí.
<<<
Na pilotách je dubový rošt a teprve na roštu začíná zdivo. Aby byly tyto dřevěné základy trvanlivé, byly již při stavbě ( v letech 1713 až 1739) uměle zaplaveny vodou, která ke dřevu nepouští vzduch a piloty i rošt jsou do dneška v dobré kondici. Konvent je zásobován vodou z okolních pramenů a do základů se prosakuje i voda dešťová.

Voda se má správně udržovat na výšce 40 cm nad dřevěným roštem a aby se tedy pod budovou nehromadila, jsou ve vodním systému zabudovány přepady, které přebytečnou vodu odvádějí do řeky.
!O tom, jak v říjnu voda stoupla a jak se to řešilo
Během letošního října začala voda stoupat. Nejprve docela nenápadně, ale o víkendu 25. října byla výška hladiny již 65 cm nad roštem, což je téměř kritická výška. Pokud by vody bylo o 5 centimetrů víc, hrozilo by zamokření stěn, což před zimou není vůbec nic dobrého.

V konventu je pro účely monitorování vodního systému umístěna meteostanice firmy SPELEO. Stanice měří a zaznamenává, mimo jiné, dešťové srážky a hladiny vody v takzvaných vodních zrcadlech (bazéncích, kterými je "vidět" do vodního systému). Ačkoli čidla hladin na stanici neměřila po předchozích servisních zásazích přesně (Po výměně kabelu přes rajský dvůr nebyla ještě provedena pečlivá kalibrace), podle záznamů bylo vidět, že stoupání hladin bylo vždy v návaznosti na déšť. Nejednalo se tedy například o odklonění nějakého pramene při stavebních pracích na nedalekém silničním mostu.

Jak jsem napsal výše, stanice ještě neměřila přesně, ale před výměnou poškozeného kabelu a hladinového čidla nebylo možné měřit hladinu v severním vodním zrcadle vůbec. Shodou okolností jsme s panem Josefem Řehákem z firmy SPELEO opravu provedli jen dva týdny před začátkem růstu hladin, takže bylo možné problém ze záznamu poměrně snadno určit.

Viníkem hromadění vody pod konventem se ukázalo být ucpání centrálního přepadu v blízkosti budovy. Po víkendu byl přepad vyčištěn a hladina vody pod budovou se velmi rychle vrátila do normálu. K identifikování zdroje problému přispělo také to, že kastelán Pavel Duchoň má, díky výzkumu firmy SPELEO, dobré znalosti o budově.

Díky mému vlastnímu vizualizačnímu počítačovému programu můžete průběh těchto události vidět na grafu pod tímto textem. U záznamu výšek hladin jsou uvedeny popisky pro snazší orientaci. V blízké době plánuji vybavit program funkcí, která umožní zpětně přepočítat výšky hladin měřené před kalibrací čidel. Potom bude zobrazena správná výška v celém rozsahu měření. Události z října dokazují, že konvent a jeho vodní systém je skutečně "živý" a že je nutné s ním neustále pracovat.
[img[grafy/09/vysoke_hladiny_web_popisky.png]]
!Korigovaná a vyčištěná data

(Přidáno 13. ledna 2010)

Pokud jste již četli předchozí text, dozvěděli jste se, že na výše publikovaném grafu nejsou údaje o hladinách vodních zrcadel v průběhu října zcela korektní. Od té doby však uplynul nějaký čas, během kterého jsem pracoval na dalším vývoji software pro zobrazování dat. Program je nyní vybaven i funkcí pro přepočet hladin na správné hodnoty na základě znalosti statické charakteristiky hladinových čidel.

A pod tímto odstavcem se nachází výsledek:
[img[grafy/09/graf_web_rijen.png]]

----
Michal Široký 2009, 2010

Se zvláštním poděkováním pro firmu ''[[Josef Řehák - SPELEO]]'', díky které se dnes ví, jak vodní systém funguje, protože jej zachránili a i nadále se o něj starají. 
V noci mezi čtvrtkem 22. a pátkem 23. července: Při bouřce se silným deštěm došlo ke zvýšení hladiny ve vodním systému z obvyklých hodnot, pohybujících se kolem 40 cm, až na výšku hladiny přesahující 70 cm.

Od pátku do neděle probíhalo postupné odčerpávání vody ze severního i jižního vodního zrcadla. Záznam průběhu hladin vidíte na obrázku níže. Záznam vydatnosti dešťových srážek je nepřesný, protože trychtýř srážkoměru byl ucpaný ptačím trusem. Nyní je již vyčištěn.

Data jsou uveřejněna se souhlasem firmy [[Josef Řehák - SPELEO]].

[img[grafy/10/vysoka_voda_cervenec_2010.png]]
!Materiály ke stažení
*[[Bakalářská práce|dokumenty/bpkrt/bpkrt.pdf]] (.pdf, cca 0.6 MB)
*[[Prezentace k obhajobě|dokumenty/bpkrt/prezentace.pdf]] (.pdf, cca 0.9 MB)

!Exkurze studentů Gymnázia Plasy s prohlídkou měřicího systému

Ve dnech 16. a 21. dubna v konventu proběhly exkurze studentů Gymnázia Plasy. Při těchto exkurzích jsem prezentoval své měření, technickou stránku budovy a studium na Katedře kybernetiky / Fakultě aplikovaných věd.

Ze druhé exkurze vznikla audionahrávka, kterou je možno stáhnout zde: [[konvent_prednaska_08-04-21.mp3|audio/konvent_prednaska_08-04-21.mp3]] (cca 20 MB).
Několik poznámek k nahrávce:

* Hlavní jižní schodiště bylo poškozeno při koncertě skupiny Blackmore's Night již v roce 2004, tedy před téměř čtyřmi lety. - Ne před třemi, jak jsem říkal na přednášce. (osmá minuta nahrávky)
* Firma Speleo Řehák provádí výzkum a údržbu vodního systému konventu od počátku 90. let.
* Nahrávka byla zkrácena o pasáž s vyprávěním o studiu na vysoké škole.
!Časy větrání
<html>
<table>
	<tr><td>den č. </td><td>datum</td> <td>čas otevření</td> <td>čas zavření</td> <td>poznámka k oknům</td> <td>dveře</td></tr>

	<tr><td>6 </td><td>20.04.2008</td><td>14:30</td><td>15:25</td><td>1. a 2. patro (SV)</td><td>Dveře byly otevřené již předtím, zůstávají otevřené i po zavření oken</td></tr>
	<tr><td>7 </td><td>21.04.2008 </td><td>13:40 </td><td>15:30 </td><td>2. p. SV </td><td>Dveře byly otevřeny po stejnou dobu jako okna </td></tr>
	<tr><td>10 </td><td>24.04.2008</td><td>14:15</td><td>18:00</td><td>celé křídlo (resp 10 oken), 2. Patro (SV křídlo)</td></tr>

	<tr><td>12 </td><td>26.04.2008</td><td>13:05</td><td>18:00</td><td>2. Patro (15 oken)</td><td>devře ven 12:50</td></tr>
	<tr><td>13 </td><td>27.04.2008</td><td>14:20</td><td>18:00</td><td>2. Patro (15 oken)</td><td>dveře ven v cca 11:30</td></tr>
	<!--<tr><td>28.04.2008</td><td>14:30</td><td>18:00</td><td>14 oken; 2. Patro</td></tr>-->

	<tr><td>14 </td><td>28/4</td><td>14:30</td><td>18:00</td><td>14 oken / 2.p.</td></tr>
	<tr><td>19 </td><td>3/5</td><td>11:30</td><td>18:00</td><td>10 oken / 2.p.</td></tr>
	<tr><td>20 </td><td>4/5</td><td>10:10</td><td>18:00</td><td>15 oken / 2.p.</td></tr>

	<tr><td>23 </td><td>7/5</td><td>11:20</td><td>18:00</td><td>14 oken / 1.p. SV, SZ</td></tr>
	<tr><td>24 </td><td>8/5 </td><td>10:00 </td><td>18:00 </td><td>všude </td><td> </td></tr>
	<tr><td>25 </td><td>9/5 </td><td>14:00 </td><td>18:00 </td><td>1. + 2. patro - slunná strana </td><td> </td></tr>

	<tr><td>26 </td><td>10/5 </td><td>9:00 </td><td>18:00 </td><td>1. + 2. patro, všechna </td><td> </td></tr>
	<tr><td>27 </td><td>11/5 </td><td>9:00 </td><td>18:00 </td><td>1. + 2. patro, všechna </td><td> </td></tr>
	<tr><td>28 </td><td>12/5 </td><td>9:00 </td><td>18:00 </td><td>všechna </td><td> </td></tr>

	<tr><td>29 </td><td>13/5 </td><td>13:05 </td><td>18:00 </td><td>2. p + chodba nem. kř. </td><td> </td></tr>
	<tr><td>30 </td><td>14/5 </td><td>12:50 </td><td>16:15 </td><td>2. p + východ 1. p</td><td> </td></tr>
	<tr><td>42 </td><td>26/5 </td><td>14:30 (+ 10:00 2x rohové okno 1.p) </td><td> </td><td>1/2 chodby u knihovny 1. patro </td><td> </td></tr>

	<tr><td>43 </td><td>27/5 </td><td>11:30 (13:00) </td><td>18:00 </td><td>křídlo u kapituly - 1.p (všechno 1. + 2. p) </td><td> </td></tr>
	<tr><td>44 </td><td>28/5 </td><td>8:00 </td><td>18:00 </td><td>všechno </td><td> </td></tr>
	<tr><td>46 </td><td>30/5 </td><td>8:00 </td><td>18:00 </td><td>- rám - vyndána mříž v zimním refektáři, 10:30 okna v 1. p u kapituly </td><td> </td></tr>

	<tr><td>47 </td><td>31/5 </td><td>už před 9. hod </td><td>18:00 </td><td>okna všude, hl vchod až v 9 hodin - 1. patro </td><td> </td></tr>
	<tr><td>48 </td><td>1/6 </td><td>-//- </td><td>18:00 </td><td>-//- </td><td> </td></tr>
	<tr><td>49 </td><td>2/6 </td><td>9:00 </td><td>18:00 </td><td>1. patro - celé + malá okna z rajského dvora </td><td> </td></tr>
	</table>

</html>
!Grafy
!!Přízemí u jižního vodního zrcadla
[img[grafy/08/souhrn_bpkrt/m08kxx_t_rb.png]]
[img[grafy/08/souhrn_bpkrt/m08kxx_rh.png]]
!!První patro v ambitové chodbě
[img[grafy/08/souhrn_bpkrt/m08wxxi_t_rb.png]]
[img[grafy/08/souhrn_bpkrt/m08wxxi_rh.png]]
!!První patro, obvod budovy, venku
[img[grafy/08/souhrn_bpkrt/m08wxxe_t_rb.png]]
[img[grafy/08/souhrn_bpkrt/m08wxxe_rh.png]]
!!Druhé patro v ambitové chodbě
[img[grafy/08/souhrn_bpkrt/m08zxx_t_rb.png]]
[img[grafy/08/souhrn_bpkrt/m08zxx_rh.png]]
Na jaře roku 2010 jsem dokončil svojí diplomovou práci týkající se vývoje automatického měřicího a poradního systému pro sledování teploty a vlhkosti vzduchu. Tento systém, který jsem nainstaloval do konventu nyní sbírá data o vývoji klimatických veličin a doporučuje správný způsob větrání v budově.

Více o měřicím systému si můžete přečíst v [[diplomové práci|dokumenty/dpkrt/dpkrt.pdf]] (PDF, cca 7MB) a můžete si také prohlédnout [[prezentaci|dokumenty/dpkrt/siroky_michal_obhajoba_dp_2010.pdf]] vytvořenou k obhajobě práce (PDF, cca 4MB) při skládání státní závěrečné zkoušky.
<<tiddler SiteTitle>>
/%!Získání programu
Nejlepším způsobem je stáhnout nejnovější verzi programu [[Airflow Desktop]] (AD) z těchto stránek. Odkaz ke stažení se nachází na hlavní stránce.%/
!Zprovoznění
Program ke svému běhu vyžaduje, aby na počítači byl nainstalován Java Runtime Environment (JRE), který lze zdarma získat na http://www.java.com Pokud na počítači, kde chcete AD spouštět JRE nainstalován je, pokračujte následujícími kroky:
#.zip soubor, který jste stáhli z těchto stránek rozbalte do libovolné složky. V OS Windows k rozbalení bohatě postačí Průzkumník a volba Extrahovat vše.
#Po rozbalení se objeví složka airflow_desktop a v ní následující soubory a podsložky:
[img[obrazky/airflow_desktop/soubory.PNG]]

Význam souborů a podsložek je následující:
*data: Uchovává vzorová data pro účely zaškolení
*grafy: Základní umístění pro export vykreslených grafů (V nastavení lze změnit)
*lib: .jar Knihovny programu
*profiles: Základní umístění pro profily s instrukcemi pro zpracování a vizualizaci dat
*settings: Umístění pro nastavení programu, jazykové řetězce a vestavěnou nápovědu.
*data_explorer pro hodne dat: Zástupce spouštějící Airflow Desktop s parametry umožňujícími rezervovat větší množství operační paměti
*data_explorer (.jar soubor), dvojklikem myší spouští Program pro vizualizaci a zpracování dat (stejně jako výše uvedený zástupce). Využití operační paměti je pak ale limitováno na cca 120 MB, což bohatě stačí pro práci s měřeními do 100 000 vzorků včetně ukládání grafů do .png nebo .pdf. Ukládání do .svg potřebuje více paměti.

!Ovládání
Po spuštění programu se objeví následující okno:

[img[obrazky/airflow_desktop/hlavni_okno.PNG]]

Klepnutím na tlačítko Spustit editor profilů se otevře další okno - okno pro editaci zobrazovacích profilů:

[img[obrazky/airflow_desktop/editor.PNG]]

!Data z ~REXu
Pro popis zobrazování a zpracování dat získaných pomocí měřicího a řídicího systému REX prosím pokračujte [[zde|Jak na data z REXu]].
/***
|''Name:''|CzechTranslationPlugin|
|''Description:''|Překlad TiddlyWiki do češtiny|
|''Author:''|Pitel (pitel (at) nomi (dot) cz)|
|''Source:''|http://svn.tiddlywiki.org/Trunk/association/locales/core/en/locale.en.js|
|''CodeRepository:''|https://dl.getdropbox.com/u/1117903/TiddlyWiki.html#Čeština |
|''Version:''|0.4.0|
|''Date:''|Jul 03, 2009|
|''Comments:''|Please send comments directly to author of this translation |
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]] |
|''~CoreVersion:''|2.5.2|
***/

//{{{
//--
//-- Translateable strings
//--

// Strings in "double quotes" should be translated; strings in 'single quotes' should be left alone

config.locale = "cs"; // W3C language tag

if (config.options.txtUserName == 'YourName') // do not translate this line, but do translate the next line
	merge(config.options,{txtUserName: "TvojeJméno"});

/*merge(config.macros.snapshot,{
	snapLabel: "uložit zobrazený obsah",
	printLabel: "vytisknout zobrazený obsah",
	snapPrompt: "uložit jako HTML stránku",
	printPrompt: "vytisknout stránku",
});*/

merge(config.tasks,{
	save: {text: "uložit", tooltip: "Uloží tvoje změny do této TiddlyWiki", action: saveChanges},
	sync: {text: "synchronizace", tooltip: "Synchronizuje změny s dalšími TiddlyWiki soubory a servery", content: '<<sync>>'},
	importTask: {text: "import", tooltip: "Importuje tiddlery a pluginy z jiných TiddlyWiki souborů a serverů", content: '<<importTiddlers>>'},
	tweak: {text: "ladit", tooltip: "Vyladí vzhled a chování TiddlyWiki", content: '<<options>>'},
	upgrade: {text: "aktualizace", tooltip: "Aktulazuje kód jádra TiddlyWiki", content: '<<upgrade>>'},
	plugins: {text: "pluginy", tooltip: "Spravuje nainstalované pluginy", content: '<<plugins>>'}
});

// Options that can be set in the options panel and/or cookies
merge(config.optionsDesc,{
	txtUserName: "Jméno pro podepisování tvých editací",
	chkRegExpSearch: "Povolit regulární výrazy při vyhledávání",
	chkCaseSensitiveSearch: "Vyhledávaní podle velikosti písmen",
	chkIncrementalSearch: "Inkrementální vyhledávání po klávesách",
	chkAnimate: "Povolit animace",
	chkSaveBackups: "Ponechat záložní soubory při ukládání změn",
	chkAutoSave: "Automaticky ukládat změny",
	chkGenerateAnRssFeed: "Generovat RSS při ukládání změn",
	chkSaveEmptyTemplate: "Generovat prázdnou šablonu při ukládání změn",
	chkOpenInNewWindow: "Otevírat odkazy vedoucí ven v novém okně",
	chkToggleLinks: "Klikání na odkazy pro otevření tiddlerů způsobí jejich zavření",
	chkHttpReadOnly: "Skrýt možnosti úprav při prohlížení přes HTTP",
	chkForceMinorUpdate: "Neaktualizovat jméno upravujícího a datum při úpravách tiddlerů",
	chkConfirmDelete: "Vyžadovat potvrzení před mazáním tiddlerů",
	chkInsertTabs: "Použít klávesu Tab pro vložení znaku odsazení namísto přechodu mezi položkami",
	txtBackupFolder: "Jméno adresáře pro zálohy",
	txtMaxEditRows: "Maximální počet řádků v editačních polích",
	txtTheme: "Jméno použitého motivu",
	txtFileSystemCharSet: "Standardní znaková sada pro ukládání změn (pouze Firefox/Mozilla)"});

merge(config.messages,{
	customConfigError: "Nastaly problémy při nahrávání pluginu. Navštivte PluginManager pro více informací",
	pluginError: "Chyba: %0",
	pluginDisabled: "Neprovedeno, protože zakázáno štítkem 'systemConfigDisable'",
	pluginForced: "Provedeno, protože vynuceno štítkem 'systemConfigForce'",
	pluginVersionError: "Neprovedeno, protože plugin vyžaduje novější verzi TiddlyWiki",
	nothingSelected: "Nic není vybráno. Musíš označit alespoň jednu položku",
	savedSnapshotError: "Zdá se, že tato TiddlyWiki nebyla správně uložena. Prosím navštivte http://www.tiddlywiki.com/#Download pro více informací",
	subtitleUnknown: "(neznámé)",
	undefinedTiddlerToolTip: "Tiddler '%0' ještě neexistuje",
	shadowedTiddlerToolTip: "Tiddler '%0' ještě neexistuje, ale má přednastavenou zastíněnou hodnotu.",
	tiddlerLinkTooltip: "%0 - %1, %2",
	externalLinkTooltip: "Odkaz ven na %0",
	noTags: "Tady nejsou žádné tiddlery se štítky",
	notFileUrlError: "Musíš tuto TiddlyWiki nejdříve uložit do souboru než budeš moct ukládat změny",
	cantSaveError: "Není možné uložit změny. Možné příčiny jsou:\n- tvůj prohlížeč nepodporuje ukládání (Firefox, Internet Explorer, Safari a Opera to umí při správném nastavení)\n- cesta k tvému TiddlyWiki souboru obsahuje nepovolené znaky\n- HTML soubor TiddlyWiki byl přesunut nebo smazán",
	invalidFileError: "Původní soubor '%0' nevypadá jako platná TiddlyWiki",
	backupSaved: "Záloha uložena",
	backupFailed: "Selhalo uložení zálohy",
	rssSaved: "RSS uloženo",
	rssFailed: "Selhalo uložení RSS",
	emptySaved: "Prázdná šablona uložena",
	emptyFailed: "Selhalo uložení souboru s prázdnou šablonou",
	mainSaved: "Hlavní soubor TiddlyWiki uložen",
	mainFailed: "Selhalo uložení hlavního TiddlyWiki souboru. Tvoje změny nebyly uloženy",
	macroError: "Chyba v makru <<\%0>>",
	macroErrorDetails: "Chyba při provádění makra <<\%0>>:\n%1",
	missingMacro: "Žádné takové makro neexistuje",
	overwriteWarning: "Tiddler jménem '%0' již existuje. Zvol OK pro jeho přepsání",
	unsavedChangesWarning: "VAROVÁNÍ! Jsou tu neuložené změny v TiddlyWiki\n\nZvol OK pro uložení\nZvol STORNO pro zahození",
	confirmExit: "--------------------------------\n\nJsou tu neuložené změny v TiddlyWiki. Pokud budeš pokračovat, ztratíš tyto změny\n\n--------------------------------",
	saveInstructions: "UložitZměny",
	unsupportedTWFormat: "Neplatný TiddlyWiki formát '%0'",
	tiddlerSaveError: "Chyba při ukládání tiddleru '%0'",
	tiddlerLoadError: "Chyba při nahrávání tiddleru '%0'",
	wrongSaveFormat: "Nelze ukládat s formátem úložiště '%0'. Použiji standardní formát pro uložení.",
	invalidFieldName: "Neplatné jméno souboru %0",
	fieldCannotBeChanged: "Pole '%0' nelze měnit",
	loadingMissingTiddler: "Pokouším se získat the tiddler '%0' z '%1' serveru na:\n\n'%2' v pracovním prostoru '%3'",
	upgradeDone: "Aktualizace na verzi %0 je hotova\n\nKlikni na 'OK' pro načtení nově aktualizované TiddlyWiki"});

merge(config.messages.messageClose,{
	text: "zavřít",
	tooltip: "zavře tuto zprávu"});

config.messages.backstage = {
	open: {text: "zákulisí", tooltip: "Otevře zákulisí pro provádění autorských a upravovacích úloh"},
	close: {text: "zavřít", tooltip: "Zavře zákulisí"},
	prompt: "zákulisí: ",
	decal: {
		edit: {text: "upravit", tooltip: "Upraví tiddler '%0'"}
	}
};

config.messages.listView = {
	tiddlerTooltip: "Klikni pro zobrazení celého tiddleru",
	previewUnavailable: "(náhled není dostupný)"
};

config.messages.dates.months = ["leden", "únor", "březen", "duben", "květen", "červen", "červenec", "srpen", "září", "říjen", "listopad","prosinec"];
config.messages.dates.days = ["neděle", "pondělí", "úterý", "středa", "čtvrtek", "pátek", "sobota"];
config.messages.dates.shortMonths = ["led", "úno", "bře", "dub", "kvě", "čer", "čec", "srp", "zář", "říj", "lis", "pro"];
config.messages.dates.shortDays = ["ne", "po", "út", "st", "čt", "pá", "so"];
// suffixes for dates, eg "1st","2nd","3rd"..."30th","31st"
config.messages.dates.daySuffixes = [".",".",".",".",".",".",".",".",".",".",
		".",".",".",".",".",".",".",".",".",".",
		".",".",".",".",".",".",".",".",".",".",
		"."];
config.messages.dates.am = "dop";
config.messages.dates.pm = "odp";

merge(config.messages.tiddlerPopup,{
	});

merge(config.views.wikified.tag,{
	labelNoTags: "žádné štítky",
	labelTags: "štítky: ",
	openTag: "Otevřít štítek '%0'",
	tooltip: "Zobrazí tiddlery označené štítkem '%0'",
	openAllText: "Otevřít všechny",
	openAllTooltip: "Otevře všechny tyto tiddlery",
	popupNone: "Žádné další tiddlery označené štítkem '%0'"});

merge(config.views.wikified,{
	defaultText: "Tiddler '%0' ještě neexistuje. Dvojklikem ho vytvoříš",
	defaultModifier: "(chybí)",
	shadowModifier: "(vestavěný zastíněný tiddler)",
	dateFormat: "DD MMM YYYY", // use this to change the date format for your locale, eg "YYYY MMM DD", do not translate the Y, M or D
	createdPrompt: "vytvořen"});

merge(config.views.editor,{
	tagPrompt: "Zadej štítky oddělené mezerami, [[použij dvojité hranaté závorky]] pokud je to třeba, nebo přidej již existující",
	defaultText: "Napiš text pro '%0'"});

merge(config.views.editor.tagChooser,{
	text: "štítky",
	tooltip: "Přidá existující štítky tomuto tiddleru",
	popupNone: "Nejsou určeny žádné štítky",
	tagTooltip: "Přidá štítek '%0'"});

merge(config.messages,{
	sizeTemplates:
		[
		{unit: 1024*1024*1024, template: "%0\u00a0GB"},
		{unit: 1024*1024, template: "%0\u00a0MB"},
		{unit: 1024, template: "%0\u00a0KB"},
		{unit: 1, template: "%0\u00a0B"}
		]});

merge(config.macros.search,{
	label: "vyhledávání",
	prompt: "Prohledá tuto TiddlyWiki",
	accessKey: "F",
	successMsg: "nalezeno %0 tiddlerů odpovídající %1",
	failureMsg: "Nenalezeny žádné tiddlery odpovídající %0"});

merge(config.macros.tagging,{
	label: "štítkování: ",
	labelNotTag: "žádné štítkování",
	tooltip: "Seznam tiddlerů se štítkem '%0'"});

merge(config.macros.timeline,{
	dateFormat: "DD MMM YYYY"});// use this to change the date format for your locale, eg "YYYY MMM DD", do not translate the Y, M or D

merge(config.macros.allTags,{
	tooltip: "zobrazí tiddlery se štítkem '%0'",
	noTags: "Zde nejsou žádné oštítkované toddlery"});

config.macros.list.all.prompt = "Všechny tiddlery v abecedním pořadí";
config.macros.list.missing.prompt = "Tiddlery na které vedou odkazy ale nejsou definovány";
config.macros.list.orphans.prompt = "Tiddlery na které nevedou žádné odkazy";
config.macros.list.shadowed.prompt = "Tiddlery zastíněné standardním obsahem";
config.macros.list.touched.prompt = "Tiddlery které byly nedávno upraveny";

merge(config.macros.closeAll,{
	label: "zavřít vše",
	prompt: "Zavře všechny otevřené tiddlery (kromě momentálně upravovaných)"});

merge(config.macros.permaview,{
	label: "trvalý odkaz",
	prompt: "Odkaz na URL, která zobrazí všechny právě otevřené tiddlery"});

merge(config.macros.saveChanges,{
	label: "uložit změny",
	prompt: "Uloží všechny tiddlery a vytvoří novou TiddlyWiki",
	accessKey: "S"});

merge(config.macros.newTiddler,{
	label: "nový tiddler",
	prompt: "Vytvoří nový tiddler",
	title: "Nový Tiddler",
	accessKey: "N"});

merge(config.macros.newJournal,{
	label: "nový deník",
	prompt: "Vytvoří nový tiddler z aktuálního data a času",
	accessKey: "J"});

merge(config.macros.options,{
	wizardTitle: "Vylazení pokročilých nastavení",
	step1Title: "Tato nastavení jsou uložena jako cookies ve tvém prohlížeči",
	step1Html: "<input type='hidden' name='markList'></input><br><input type='checkbox' checked='false' name='chkUnknown'>Zobrazit neznámé volby</input>",
	unknownDescription: "//(neznámý)//",
	listViewTemplate: {
		columns: [
			{name: 'Option', field: 'option', title: "Volba", type: 'String'},
			{name: 'Description', field: 'description', title: "Popis", type: 'WikiText'},
			{name: 'Name', field: 'name', title: "Jméno", type: 'String'}
			],
		rowClasses: [
			{className: 'lowlight', field: 'lowlight'}
			]}
	});

merge(config.macros.plugins,{
	wizardTitle: "Správa pluginů",
	step1Title: "Aktuálně nahrané pluginy",
	step1Html: "<input type='hidden' name='markList'></input>", // DO NOT TRANSLATE
	skippedText: "(Tento plugin nebyl spuštěn protože byl přidán až po startu)",
	noPluginText: "Nejsou tu žádné nainstalované pluginy",
	confirmDeleteText: "Jsi si jistý že chceš smazat tyto pluginy:\n\n%0",
	removeLabel: "odstranit štítek systemConfig",
	removePrompt: "Odstraní štítek systemConfig",
	deleteLabel: "smazat",
	deletePrompt: "Smaže tyto tiddlery navždy",
	listViewTemplate: {
		columns: [
			{name: 'Selected', field: 'Selected', rowName: 'title', type: 'Selector'},
			{name: 'Tiddler', field: 'tiddler', title: "Tiddler", type: 'Tiddler'},
			{name: 'Description', field: 'Description', title: "Popis", type: 'String'},
			{name: 'Version', field: 'Version', title: "Verze", type: 'String'},
			{name: 'Size', field: 'size', tiddlerLink: 'size', title: "Velikost", type: 'Size'},
			{name: 'Forced', field: 'forced', title: "Vynuceno", tag: 'systemConfigForce', type: 'TagCheckbox'},
			{name: 'Disabled', field: 'disabled', title: "Zakázáno", tag: 'systemConfigDisable', type: 'TagCheckbox'},
			{name: 'Executed', field: 'executed', title: "Nahráno", type: 'Boolean', trueText: "Yes", falseText: "No"},
			{name: 'Startup Time', field: 'startupTime', title: "Doba startu", type: 'String'},
			{name: 'Error', field: 'error', title: "Stav", type: 'Boolean', trueText: "Chyba", falseText: "OK"},
			{name: 'Log', field: 'log', title: "Záznam", type: 'StringList'}
			],
		rowClasses: [
			{className: 'error', field: 'error'},
			{className: 'warning', field: 'warning'}
			]}
	});

merge(config.macros.toolbar,{
	moreLabel: "více",
	morePrompt: "Zobrazí více příkazů",
	lessLabel: "méně",
	lessPrompt: "Skryje více příkazů",
	separator: "|"
	});

merge(config.macros.refreshDisplay,{
	label: "obnovit",
	prompt: "Překreslí celou TiddlyWiki"
	});

merge(config.macros.importTiddlers,{
	readOnlyWarning: "Nemůžeš importovat do souboru TiddlyWiki pouze pro čtení. Zkus ji otevřít z file:// URL",
	wizardTitle: "Import tiddlerů z jiného souboru nebo serveru",
	step1Title: "Krok 1: Najdi server nebo TiddlyWiki soubor",
	step1Html: "Urči typ serveru: <select name='selTypes'><option value=''>Vyber...</option></select><br>Sem zadej URL nebo cestu: <input type='text' size=50 name='txtPath'><br>...nebo se porozhlédni po souboru: <input type='file' size=50 name='txtBrowse'><br><hr>...nebo vyber připravený feed: <select name='selFeeds'><option value=''>Vyber...</option></select>",
	openLabel: "otevřít",
	openPrompt: "Otevře spojení k souboru nebo serveru",
	openError: "Nastal problém při získávání tiddlywiki souboru",
	statusOpenHost: "Otevírám hostitele",
	statusGetWorkspaceList: "Získávám seznam dostupných pracovních míst",
	step2Title: "Krok 2: Vyber pracovní místo",
	step2Html: "Zadej jméno pracovního místa: <input type='text' size=50 name='txtWorkspace'><br>...nebo vyber pracovní místo: <select name='selWorkspace'><option value=''>Vyber...</option></select>",
	cancelLabel: "zrušit",
	cancelPrompt: "Zruší tento import",
	statusOpenWorkspace: "Otevírám pracovní místo",
	statusGetTiddlerList: "Získávám seznam dostupných tiddlerů",
	errorGettingTiddlerList: "Chyba při získávání seznamu tiddlerů, klikni na Zrušit a zkusí se to znovu",
	step3Title: "Krok 3: Vyber tiddlery k importu",
	step3Html: "<input type='hidden' name='markList'></input><br><input type='checkbox' checked='true' name='chkSync'>Ponechat tyto tiddlery napojené na tento server takže bude možné synchronizovat následné změny</input><br><input type='checkbox' name='chkSave'>Uložit detaily o tomto serveru do 'systemServer' tiddleru jménem:</input> <input type='text' size=25 name='txtSaveTiddler'>",
	importLabel: "import",
	importPrompt: "Importuje tyto tiddlery",
	confirmOverwriteText: "Jsi si jistý že chceš přepsat tyto tiddlery:\n\n%0",
	step4Title: "Krok 4: Importování %0 tiddler(ů)",
	step4Html: "<input type='hidden' name='markReport'></input>", // DO NOT TRANSLATE
	doneLabel: "dokončit",
	donePrompt: "Zavře tohoto průvodce",
	statusDoingImport: "Importuji tiddlery",
	statusDoneImport: "Všechny tiddlery importovány",
	systemServerNamePattern: "%2 na %1",
	systemServerNamePatternNoWorkspace: "%1",
	confirmOverwriteSaveTiddler: "Tiddler '%0' již existuje. Klikni na 'OK' pro jeho přepsání detaily tohoto serveru, nebo 'Storno' pro zamezení jeho změny",
	serverSaveTemplate: "|''Typ:''|%0|\n|''URL:''|%1|\n|''Pracovní místo:''|%2|\n\nTento tiddler byl automaticky vytvořen pro zaznamenání detailů o tomto serveru",
	serverSaveModifier: "(System)",
	listViewTemplate: {
		columns: [
			{name: 'Selected', field: 'Selected', rowName: 'title', type: 'Selector'},
			{name: 'Tiddler', field: 'tiddler', title: "Tiddler", type: 'Tiddler'},
			{name: 'Size', field: 'size', tiddlerLink: 'size', title: "Velikost", type: 'Size'},
			{name: 'Tags', field: 'tags', title: "Štítky", type: 'Tags'}
			],
		rowClasses: [
			]}
	});

merge(config.macros.upgrade,{
	wizardTitle: "Aktualizace kódu jádra TiddlyWiki",
	step1Title: "Aktualizace nebo oprava této TiddlyWiki na poslední verzi",
	step1Html: "Chystáš se aktualizovat na poslední verzi kódu jádra TiddlyWiki (z <a href='%0' class='externalLink' target='_blank'>%1</a>). Tvůj obsah bude zachován mezi aktualizacemi.<br><br>Věz že aktualizace jádra kolidují s postaršimi pluginy. Pokud narazíš na problémy s aktualizačním souborem, navštiv <a href='http://www.tiddlywiki.org/wiki/CoreUpgrades' class='externalLink' target='_blank'>http://www.tiddlywiki.org/wiki/CoreUpgrades</a>",
	errorCantUpgrade: "Nelze aktualizovat tuto TiddlyWiki. Aktualizovat lze jen lokálně uložené soubory TiddlyWiki",
	errorNotSaved: "Musíš uložit změny před provedením aktualizace",
	step2Title: "Potvrzení detailů aktualizace",
	step2Html_downgrade: "Chystáš se snížit verzi TiddlyWiki na %0 z %1.<br><br>Snížení na předchozí vezi kódu jádra se nedoporučuje",
	step2Html_restore: "Tato TiddlyWiki už používá nejnovější verzi kódu jádra (%0).<br><br>Přesto můžeš pokračovat v aktualizace aby ses ujistil že kód jádra nebyl narušen či poškozen",
	step2Html_upgrade: "Chystáš se aktualizovat TiddlyWiki na verzi %0 z %1",
	upgradeLabel: "aktualizace",
	upgradePrompt: "Příprava na proces aktualizace",
	statusPreparingBackup: "Připravuji zálohy",
	statusSavingBackup: "ukládám záložní soubor",
	errorSavingBackup: "Nastal problém při ukládání záložního souboru",
	statusLoadingCore: "Nahrávám kód jádra",
	errorLoadingCore: "Chyba při nahrávání kódu jádra",
	errorCoreFormat: "Chyba s novým kódem jádra",
	statusSavingCore: "Ukládám nový kód jádra",
	statusReloadingCore: "Znovu nahrávám kód jádra",
	startLabel: "start",
	startPrompt: "Začne proces aktualizace",
	cancelLabel: "zrušit",
	cancelPrompt: "Zruší proces aktualizace",
	step3Title: "Aktualizace zrušena",
	step3Html: "Zrušil jsi proces aktualizace"
	});

merge(config.macros.sync,{
	listViewTemplate: {
		columns: [
			{name: 'Selected', field: 'selected', rowName: 'title', type: 'Selector'},
			{name: 'Tiddler', field: 'tiddler', title: "Tiddler", type: 'Tiddler'},
			{name: 'Server Type', field: 'serverType', title: "Typ serveru", type: 'String'},
			{name: 'Server Host', field: 'serverHost', title: "Hostitel serveru", type: 'String'},
			{name: 'Server Workspace', field: 'serverWorkspace', title: "Pracovní místo serveru", type: 'String'},
			{name: 'Status', field: 'status', title: "Stav synchronizace", type: 'String'},
			{name: 'Server URL', field: 'serverUrl', title: "URL serveru", text: "View", type: 'Link'}
			],
		rowClasses: [
			],
		buttons: [
			{caption: "Synchronizovat tyto tiddlery", name: 'sync'}
			]},
	wizardTitle: "Synchronizace s externím serverem nebo soubory",
	step1Title: "Vyber tiddlery které chceš synchronizovat",
	step1Html: "<input type='hidden' name='markList'></input>", // DO NOT TRANSLATE
	syncLabel: "synchronizace",
	syncPrompt: "Synchronizovat tyto tiddlery",
	hasChanged: "Změněny při odpojení",
	hasNotChanged: "Nezměněny při odpojení",
	syncStatusList: {
		none: {text: "...", display:null, className:'notChanged'},
		changedServer: {text: "Změněny na serveru", display:null, className:'changedServer'},
		changedLocally: {text: "Změněny při odpojení", display:null, className:'changedLocally'},
		changedBoth: {text: "Změněny při odpojení a na serveru", display:null, className:'changedBoth'},
		notFound: {text: "Nenalezeny na serveru", display:null, className:'notFound'},
		putToServer: {text: "Stav uložen na serveru", display:null, className:'putToServer'},
		gotFromServer: {text: "Aktualizace získána ze serveru", display:null, className:'gotFromServer'}
		}
	});

merge(config.commands.closeTiddler,{
	text: "zavřít",
	tooltip: "Zavře tento tiddler"});

merge(config.commands.closeOthers,{
	text: "zavřít ostatní",
	tooltip: "Zavře všechny ostatní tiddlery"});

merge(config.commands.editTiddler,{
	text: "upravit",
	tooltip: "Upraví tento tiddler",
	readOnlyText: "zobrazit",
	readOnlyTooltip: "Zobrazí zdroj tohoto tiddleru"});

merge(config.commands.saveTiddler,{
	text: "hotovo",
	tooltip: "Uloží změny tohoto tiddleru"});

merge(config.commands.cancelTiddler,{
	text: "zrušit",
	tooltip: "Zruší změny tohoto tiddleru",
	warning: "Jsi si jistý že chceš zrušit změny v '%0'?",
	readOnlyText: "hotovo",
	readOnlyTooltip: "Zobrazí tento tiddler běžným způsobem"});

merge(config.commands.deleteTiddler,{
	text: "smazat",
	tooltip: "Smaže tento tiddler",
	warning: "Jsi si jistý že chceš smazat '%0'?"});

merge(config.commands.permalink,{
	text: "trvalý odkaz",
	tooltip: "Trvalý odkaz na tento tiddler"});

merge(config.commands.references,{
	text: "odkazy",
	tooltip: "Zobrazí tiddlery které sem odkazují",
	popupNone: "Žádné odkazy"});

merge(config.commands.jump,{
	text: "skočit",
	tooltip: "skočí na další otevřený tiddler"});

merge(config.commands.syncing,{
	text: "synchronizace",
	tooltip: "Řídí synchronizaci tohoto tiddleru se serverem nebo externím souborem",
	currentlySyncing: "<div>Aktuálně synchronizováno přes <span class='popupHighlight'>'%0'</span> do:</"+"div><div>hostitel: <span class='popupHighlight'>%1</span></"+"div><div>pracovní místo: <span class='popupHighlight'>%2</span></"+"div>", // Note escaping of closing <div> tag
	notCurrentlySyncing: "Momentálně nesynchronizováno",
	captionUnSync: "Zastavit synchronizaci tohoto tiddleru",
	chooseServer: "Synchronizovat tento tiddler s dalším serverem:",
	currServerMarker: "\u25cf ",
	notCurrServerMarker: "  "});

merge(config.commands.fields,{
	text: "pole",
	tooltip: "Zobrazí rozšířená pole tohoto tiddleru",
	emptyText: "Tento tiddler nemá žádná rozšířená pole",
	listViewTemplate: {
		columns: [
			{name: 'Field', field: 'field', title: "Pole", type: 'String'},
			{name: 'Value', field: 'value', title: "Hodnota", type: 'String'}
			],
		rowClasses: [
			],
		buttons: [
			]}});

merge(config.shadowTiddlers,{
	DefaultTiddlers: "[[TranslatedGettingStarted]]",
	MainMenu: "[[TranslatedGettingStarted]]\n\n\n^^~TiddlyWiki verze <<version>>\n� 2009 [[UnaMesa|http://www.unamesa.org/]]^^",
	TranslatedGettingStarted: "Pro zahájení práce s touto prázdnou TiddlyWiki budeš muset upravit následující tiddlery:\n* SiteTitle & SiteSubtitle: Titul a podtitul těchto stránek, to co vidíš nahoře (po uložení se také zobrazí v titulku okna prohlížeče)\n* MainMenu: Nabídka (vetšinou nalevo)\n* DefaultTiddlers: Obsahuje jména tiddlerů které se mají zobrazit po otevření TiddlyWiki\nTaké budeš muset zadat tvé uživatelské jméno pro podepisování tvých úprav: <<option txtUserName>>",
	SiteTitle: "Moje TiddlyWiki",
	SiteSubtitle: "znovu použitelný nelineární osobní webový poznámkový blok",
	SiteUrl: "http://www.tiddlywiki.com/",
	OptionsPanel: "Tyto možnosti pro přizpůsobení rozhraní TiddlyWiki jsou uloženy ve tvém prohlížeči\n\nTvoje uživatelské jméno pro podepisování tvých úprav. Napiš ho jako WikiSlovo (např KarelBláha)\n<<option txtUserName>>\n\n<<option chkSaveBackups>> Ukládat zálohy\n<<option chkAutoSave>> Automaticky ukládat\n<<option chkRegExpSearch>> Vyhledáváni regulárními výrazy\n<<option chkCaseSensitiveSearch>> Rozlišovat velikost písmen při vyhledávání\n<<option chkAnimate>> Povolit animace\n\n----\nViz také [[TranslatedAdvancedOptions|AdvancedOptions]]",
	SideBarOptions: '<<search>><<closeAll>><<permaview>><<newTiddler>><<newJournal "DD MMM YYYY" "journal">><<saveChanges>><<slider chkSliderOptionsPanel OptionsPanel "možnosti \u00bb" "Změní rozšířené možnosti TiddlyWiki">>',
	SideBarTabs: '<<tabs txtMainTab "Časová osa" "Časová osa" TabTimeline "Vše" "Všechny tiddlery" TabAll "Štítky" "Všechny štítky" TabTags "Více" "Více seznamů" TabMore>>',
	TabMore: '<<tabs txtMoreTab "Chybí" "Chybějící tiddlery" TabMoreMissing "Sirotci" "Osiřelé tiddlery" TabMoreOrphans "Zastíněné" "Zastíněné tiddlery" TabMoreShadowed>>'
	});

merge(config.annotations,{
	AdvancedOptions: "Tento zastíněný tiddler poskytuje přístup k několika pokročilým možnostem",
	ColorPalette: "Hodnoty v tomto zastíněném tiddleru určují barevné schéma uživatelského prostředí ~TiddlyWiki",
	DefaultTiddlers: "Tiddlery v tomto zastíněném tiddleru budou automaticky zobrazeny po startu ~TiddlyWiki",
	EditTemplate: "HTML šablona v tomto zastíněném tiddleru určují jak tiddlery vypadají když jsou upravovány",
	GettingStarted: "Tento zastíněný tiddler poskytuje základní instrukce k použití",
	ImportTiddlers: "Tento zastíněný tiddler poskytuje přístup k importu tiddlerů",
	MainMenu: "Tento zastíněný tiddler se používá jako obsah hlavního menu v levém sloupci obrazovky",
	MarkupPreHead: "Tento tiddler je vložen na vrchol <head> sekce TiddlyWiki HTML souboru",
	MarkupPostHead: "Tento tiddler je vložen na spodek <head> sekce TiddlyWiki HTML souboru",
	MarkupPreBody: "Tento tiddler je vložen na začátek <body> sekce TiddlyWiki HTML souboru",
	MarkupPostBody: "Tento tiddler je vložen na konec <body> sekce TiddlyWiki HTML souboru hned za blok skriptů",
	OptionsPanel: "Tento zastíněný tiddler je použit jako obsah panelu možností v pravém sloupci",
	PageTemplate: "HTML šablona v tomto zastíněném tiddleru určuje celkový layout ~TiddlyWiki",
	PluginManager: "Tento zastíněný tiddler poskytuje přístup ke správci pluginů",
	SideBarOptions: "Tento zastíněný tiddler je použit jako obsah panelu možností v pravém sloupci",
	SideBarTabs: "Tento zastíněný tiddler je použit jako obsah panelu se záložkami v pravém sloupci",
	SiteSubtitle: "Tento zastíněný tiddler je použit jako druhá část titulku stránky",
	SiteTitle: "Tento zastíněný tiddler je použit jako první část titulku stránky",
	SiteUrl: "Tento zastíněný tiddler by měl být nastaven na plnou cílovou URL pro publikacin",
	StyleSheetColors: "Tento zastíněný tiddler obsahuje CSS definice barev prvků stránky. ''NEUPRAVUJ TENTO TIDDLER'', místo toho proáděj změny v zastíněném tiddleru StyleSheet",
	StyleSheet: "Tento tiddler obsahuje vlastní CSS definice",
	StyleSheetLayout: "Tento zastíněný tiddler obsahuje CSS definice rozmístění prvků na stránce. ''NEUPRAVUJ TENTO TIDDLER'', místo toho proáděj změny v zastíněném tiddleru StyleSheet",
	StyleSheetLocale: "Tento zastíněný tiddler obsahuje CSS definice o překládáném jazyku",
	StyleSheetPrint: "Tento zastíněný tiddler obsahuje CSS definice pro tisk",
	TabAll: "Tento zastíněný tiddler obsahuje obsah záložky 'Vše' v pravém sloupci",
	TabMore: "Tento zastíněný tiddler obsahuje obsah záložky 'Více' v pravém sloupci",
	TabMoreMissing: "Tento zastíněný tiddler obsahuje obsah záložky 'Chybí' v pravém sloupci",
	TabMoreOrphans: "Tento zastíněný tiddler obsahuje obsah záložky 'Sirotci' v pravém sloupci",
	TabMoreShadowed: "Tento zastíněný tiddler obsahuje obsah záložky 'Zastíněné' v pravém sloupci",
	TabTags: "Tento zastíněný tiddler obsahuje obsah záložky 'Štítky' v pravém sloupci",
	TabTimeline: "Tento zastíněný tiddler obsahuje obsah záložky 'Časová osa' v pravém sloupci",
	ToolbarCommands: "Tento zastíněný tiddler určuje které příkazy jsou zobrazeny v nástrojových lištách tiddlerů",
	ViewTemplate: "HTML šablona v tomto zastíněném tiddleru určuje jak tiddlery vypadají"
	});

//}}}