<!--{{{-->
<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]];}

#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 0em 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0em 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:0em 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 .3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

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

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

.tiddlerPopupButton {padding:0.2em 0.2em 0.2em 0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em 1em 1em 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 0em;}
.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 0em 0em 0.5em;}
.tab {margin:0em 0em 0em 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 0em 14em;}

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

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

.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:0em 0.25em; padding:0em 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 0em; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}

.fieldsetFix {border:0; padding:0; margin:1px 0px 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 0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em 0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0em; right:0em;}
#backstageButton a {padding:0.1em 0.4em 0.1em 0.4em; margin:0.1em 0.1em 0.1em 0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin:0em 3em 0em 3em; padding:1em 1em 1em 1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em 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 1em;}
/* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
noscript {display:none;}
}
/*}}}*/
<!--{{{-->
<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'></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>>
[[Back to Front Page|B a b e l]]
[[Back to GALLERY INDEX|Gallery]]
!!RUNNING WITH SCISSORS
This is a larger image (120x90) that was started on 04FEB and is still processing (generation 382,443). Doesn't appear that it will finish until mid-March. Clear development of regional color organization around the background foci. The background is generally biased toward the G channel, but the mottled appearance of localized magenta domains is puzzling. It is a spontaneous color emergence.  (download the movie files below):<br>
<html>
<u><a href="02/MDH-090204.m4v" target="_blank"> LINK  iPod *.m4v M O V I E </a></u><br>
<u><a href="02/MDH-090204.mov" target="_blank"> LINK QuickTime *.mov M O V I E </a></u>)<br>
<img src="02/MDH-090204-120x090-05877-01039-000382443.png" style="height:200px"><br>
</html>
!!!
''Here's the image 26MAR at 982460 generations:'' 
//~MDH-090204-120x090-10093-01463-000982460//
<html>
<img src="03/biowolf03.png" style="height:200px">
</html>
!

[[Back to Front Page|B a b e l]]
[[Back to GALLERY INDEX|Gallery]]

!!2009 26MAR 
Foci area within the image have been muted in their effect. Much more subtle. Work more now to "disturb" local area color organization rather than "focus" it in any one direction. It's a biasing function, but implemented at random. Some of the foci areas are evident in the final image, others are not. They do provide a function to break up the otherwise homogeneous background interactions. 
!!!
<html>
<b>01: DELTA box</b> Mutation rate was higher at 7% and the initial color fields of organization become swamped by the background disorganization (download the movie files below):<br>
<u><a href="03/Delta-090302.m4v" target="_blank"> LINK iPod *.m4v M O V I E </a></u><br>
<u><a href="03/Delta-090302.mov" target="_blank"> LINK QuickTime *.mov M O V I E </a></u>)<br>
<b>Starting Image:<br>
<img src="03/Delta-090302-080x060-00000-00000-000000000.png" style="height:250px"><br>
Ending Image:<br>
<img src="03/Delta-090302-080x060-10816-02535-001055431.png" style="height:250px"><br>
</html>
!
//amarsh.sk@gmail.com//
^^//pages optimized for your iPhone//^^
!
[[Back to Front Page|B a b e l]]
[[Back to GALLERY INDEX|Gallery]]
!!2009 26APR 
Two 80x60 studies with no coding edits. Program development is over. Tweaking remains, but the runs appear to be well balanced and reach a near equilibrium by 1 million generations. Foci areas emerge as color disturbances against the background distribution. Color information in the superimposed square at the start persists throughout . . . . but now seems to be disruptive to the evolution process that is developing across the image. 
!!!
<html>
<b>01: Streblospio Server</b>  (download the movie files below):<br>
<u><a href="04/090311-Streb.m4v" target="_blank"> LINK iPod *.m4v M O V I E </a></u><br>
<u><a href="04/090311-Streb.mov" target="_blank"> LINK QuickTime *.mov M O V I E </a></u>)<br>
<b>Starting Image:<br>
<img src="04/Streblospio-090310-080x060-00000-00000-000000000.png" style="height:250px"><br>
Ending Image:<br>
<img src="04/Streblospio-090310-080x060-08519-02051-001240247.png" style="height:250px"><br>
</html>
!
<html>
<b>02: Icewater server</b> (download the movie files below):<br>
<u><a href="03/090326-Icedive.m4v" target="_blank"> LINK iPod *.m4v M O V I E </a></u><br>
<u><a href="03/090326-Icedive.mov" target="_blank"> LINK QuickTime *.mov M O V I E </a></u>)<br>
<b>Starting Image:<br>
<img src="04/Icedive-090326-080x060-00001-00298-000000000.png" style="height:250px"><br>
Ending Image:<br>
<img src="04/Icedive-090326-080x060-11565-02848-001013164.png" style="height:250px"><br>
</html>
!
//amarsh.sk@gmail.com//
^^//pages optimized for your iPhone//^^
!
[[Back to Gallery Index|Gallery]]
!!!
 <html>
<img src="00/Boxes-081130-080x060-02850-00820-000429723.png" style="height:300px"><br>
Working with a larger grid (80x60) results in an exponential increase in processing time. This image started as a random tile grid with two larger boxes on top. Run is still going as this image is only generation # 429,723. Color balance is better and edge effects are not present. Download the evolution QT movie file: <br>
<u><a href="00/BabelImage-Boxes-12DEC.mov"> B O X E S </a></u>
</html>
!
//amarsh.sk@gmail.com//
^^//pages optimized for iPhone//^^
!
[[Back to Gallery Index|Gallery]]
!!!30NOV:
 <html><table><tr>
<td><img src="00/Babel-081128-040x030-008070-02526-0000956045.png" style="height:200px"></td></tr>
<tr><td> This image started as a random 30x40 tile grid. I stopped the run after 956,000 generations. Download the evolution QT movie file: <u><a href="00/BabelImage-29NOV-Random.mov"> R A N D O M </a></u></td></tr>
<tr><tr></tr>
<td><img src="00/RedSquare-081128-040x030-007820-02458-0000933148.png" style="height:200px"></td></tr>
<tr><td> <b>Red Square:</b> As a test for the selection criteria applied at each generation, I started this run with a small red square in the middle of the grid to see how "stable" it would be and whether or not it would influence the organization of color tiles around it. Download evolution QT movie file: <u><a href="00/BabelImage-29NOV-RedSquare.mov"> R e d S q u a r e </a></u></td></tr>
<tr><tr></tr>
<td><img src="00/BlueSquare1-081128-040x030-005650-01935-0000661053.png" style="height:200px"></td></tr>
<tr><td><b>BlueSquare1:</b> Same idea as Red Square, but I tweaked with some of the rate processes to see if I could keep the image from going so gray (i.e. equal r,g and b values). Download evolution QT movie file: <u><a href="00/BabelImage-29NOV-BlueSquare1.mov"> B   l u e S q u a r e 1 </a></u></td></tr>
<tr><tr></tr>
<td><img src="00/BlueSquare2-081128-040x030-004100-01318-0000592764.png" style="height:200px"></td></tr>
<tr><td> <b>BlueSquare2:</b> BS1 still turned out fairly gray. More tweaks for color selection to add a score penalty for when rgb values were within 10% of each other.  Download evolution QT movie file: <u><a href="color/BabelImage-29NOV-BlueSquare2.mov"> B  l u e S q u a r e 2 </a></u></td>
</tr></table></html>
[[Back to Gallery Index|Gallery]]
!!!2009 03JAN 
''Exponential organization in color maps: ''  The babel script seems to have developed a "sweet spot" where once a organization threshold is reached, there is a synergistic feedback such that the score evolution rate becomes exponential rather than hyperbolic. The "05" run (''Fuscia Field'') reached this point early on. But now, it's sibling runs 03 and 04 also appear to have reached this dynamic state . . . . (see score plot below). One of the key determinants of this behavior appears to be an unequal representation of each r g b value. Somehow, by skewing the values for one channel over the others (think unequal %GC composition in genomes), a point is reached in the further evolution of the image where there is a positive feedback of the existing color distribution on the color distribution in ancestors.  (These script runs were all started on 30DEC08 and have reached +400,000 generations.)

<html>
<b>05: Fuscia Field</b> This image started with two strips and a square against a random color field. The max Mute Rate was 10% and so these color elements were rapidly lost (download the movie file: <u><a href="01/090103-Babel-03Jan-fusciafield.m4v" target="_blank"> iPod *.m4v M O V I E </a></u> . . . or . . . <u><a href="01/090103-Babel-03Jan-fusciafield.mov" target="_blank"> QuickTime *.mov M O V I E </a></u>)<br>
<img src="01/090103-Babel05-081230-040x030-06480-04993-000387733.png" style="height:300px"><br>
<b>03</b> This image started with a small green rectangle against a random field. What is intriguing is that this color shape was rapidly lost (10% max MR), but it later reappears as a defined area (download the m4v movie file: <u><a href="01/090103-Babel-03JAN-greenbox.m4v" target="_blank"> iPod *.m4v M O V I E </a></u> . . . or . . .  <u><a href="01/090103-Babel-03JAN-greenbox.mov" target="_blank"> QuickTime *.mov M O V I E </a></u>)<br>
<img src="01/090103-Babel03-081230-040x030-05010-02092-000506730.png" style="height:300px"><br>
<b>04</b><br><img src="01/090103-Babel04-081230-040x030-05280-02259-000506770.png" style="height:300px"><br>
<b>Score Plots:</b> The 05 run showed an exponential surge toward organization. The 03 and 04 runs are only just now (+400,000 generations) exhibiting that synergistic organization.<br><img src="01/090103-PlotData-MuteScores.png" style="height:400px">
</html>
!
//amarsh.sk@gmail.com//
^^//pages optimized for iPhone//^^
!
[[Back to Front Page|B a b e l]]
!!!2009 08JAN 
''How does order interact with disorder? ''  These runs seed the random field with a single color square. By keeping the max mute rate at 5%, the rgb data of the squares persists throughout the course of evolution, although the information itself is transformed. These runs were started on 31 DEC 2008 and required 216 h of cpu time to reach 1 million generations.   

<html>
<b>01: Square alpha</b> This image started with a single green square against a random color field. The max Mute Rate was 5% and so the color elements of the square still persist in some form at the end of 1 million generations (download the movie files below):<br>
<u><a href="01/090108-Babel01-081231.m4v" target="_blank"> LINK iPod *.m4v M O V I E </a></u><br>
<u><a href="01/090108-Babel01-081231.mov" target="_blank"> LINK QuickTime *.mov M O V I E </a></u>)<br>
<img src="01/090108-Babel01-081231-040x030-18260-08716-001098088.png" style="height:250px"><br>

<b>02: Square beta</b> This image started with a purple square against a random field. Across 1 million generations the Blue channel values persist, but the red is lost so that at the end, the purple square is now a blue smudge  (download the movie files below):<br>
<u><a href="01/090108-Babel02-081231.m4v" target="_blank"> LINK  iPod *.m4v M O V I E </a></u><br>
<u><a href="01/090108-Babel02-081231.mov" target="_blank"> LINK QuickTime *.mov M O V I E </a></u>)<br>
<img src="01/090108-Babel02-081231-040x030-16230-07893-001060214.png" style="height:250px"><br>

<b>Score Plots:</b> The 01 and 02 runs show a rapid exponential surge toward organization at the end of the run. The sudden up-tick at the 1 million generation mark for both is suspicious . . . . need to check code about what control loops may be activated at that generation point. You can easily scroll the movies arounf that generation number (last number in file id string).<br>
<img src="01/090108-PlotData-ColorScore.png" style="height:350px">
</html>
!
//amarsh.sk@gmail.com//
^^//pages optimized for iPhone//^^
!
[[Back to Front Page|B a b e l]]
!!''How does order interact with disorder? ''  
These runs seed the random field with a single color square. By keeping the max mute rate at 5%, the rgb data of the squares persists throughout the course of evolution, although the information itself is transformed. These runs were started near the end of January and required about 1 month of CPU time to reach 1 million generations.   
!!!
<html>
<b>01: GAMMA box</b> Mutation rate was higher at 7% and the initial color fields of organization become swamped by the background disorganization (download the movie files below):<br>
<u><a href="02/Gamma-090122.m4v" target="_blank"> LINK iPod *.m4v M O V I E </a></u><br>
<u><a href="02/Gamma-090122.mov" target="_blank"> LINK QuickTime *.mov M O V I E </a></u>)<br>
<img src="02/Gamma-090122-040x030-10053-02462-001245252.png" style="height:250px"><br>

<b>02: Alpha stripes</b> The initial color stripes could not persist again the stochastic disorder of the developing background color field. Patterns are quickly swamped, but in the end, organization emerges  (download the movie files below):<br>
<u><a href="02/Alpha-090115.m4v" target="_blank"> LINK  iPod *.m4v M O V I E </a></u><br>
<u><a href="02/Alpha-090115.mov" target="_blank"> LINK QuickTime *.mov M O V I E </a></u>)<br>
<img src="02/Alpha-090115-040x030-07805-03810-000940891.png" style="height:250px"><br>

<b>03: Red Sea</b> Working with larger image scales (120x90). Much greater computational time requirement. Here a routine was added to the script to provide some subtle areas of color bias across the background. Those "foci" areas were too focused/dominant in this run. But the idea is to breakup the selection drive towards a homogeneous background  (download the movie files below):<br>
<u><a href="02/Babel06r-090102.m4v" target="_blank"> LINK  iPod *.m4v M O V I E </a></u><br>
<u><a href="02/Babel06r-090102.mov" target="_blank"> LINK QuickTime *.mov M O V I E </a></u>)<br>
<img src="02/Babel06r-090102-120x090-14790-02027-000653851.png" style="height:250px"><br>
</html>
!
//amarsh.sk@gmail.com//
^^//pages optimized for your iPhone//^^
!
[[Back to GALLERY INDEX|Gallery]]
!!2009 Fall
''The Capitella run below is the first BIG (120x090) image to be fully completed.'' It required 2.5 months of CPU time AND didn't equilibrate until after 1.5 million generations. Fairly apparent now that larger images will require longer evolution times because they are inherently more complex given the greater number of interacting pixels. Each pixel's score at each generation is effectively reduced (here each only exerts a 1/108000 influence on the total image score). So it just requires more mutations for the total image score to reach (or nearly reach equilibrium).
!!!
<html>
<b>01: Capitella server</b> This is a 120x090 image. (download the movie files below):<br>
<u><a href="05/090310-Capitella.m4v" target="_blank"> LINK iPod *.m4v M O V I E </a></u><br>
<u><a href="05/090310-Capitella.mov" target="_blank"> LINK QuickTime *.mov M O V I E </a></u>)<br>
<b>Starting Image:<br>
<img src="05/Capitella-090310-120x090-00000-00000-000000000.png" style="height:250px"><br>
Ending Image:<br>
<img src="05/Capitella-090310-120x090-15259-02636-01510278.png" style="height:250px"><br>
</html>
|! Babel Image Evolution: Run Parameters |
|      MaxMuteRate = 0.0825 |
|      RED = 0.4940 |
|      GRN = 0.4970 |
|      BLU = 0.4980 |
!
//amarsh.sk@gmail.com//
^^//pages optimized for your iPhone//^^
!
[[Back to Front Page|B a b e l]]
!!2010-Fall
Two objectives: 
# Adjust the selection criteria so that pixels are asymmetrically affected by their local neighborhood, ie some neighbors have a greater effect than others. What happens is that 'a wave' of color information develops and slowly moves in the direction of the asymmetry.
# Work on larger scales by using virtual computational resources in a computing cloud environment. The computational overhead of working with just a 360x240 image grid requires more serious CPU architectures. The AWS offers a variety of configurations so that without having to purchase a $14k server, I can at least use one for a month of two at a small fraction of that cost.

!!!
<html>
<b>01: Moving to the cloud:</b> This is a 360x240 image in progress currently running on a virtual server in Amazon's cloud services (download the movie files below):<br>
<u><a href="06/100823-BigRun.mov" target="_blank"> LINK QuickTime *.mov M O V I E </a></u>)<br>
<b>Starting Image:<br>
<img src="06/Babel-100823-360x240-00000-00000-00000000.png" style="height:250px"><br>
Image Progress:<br>
<img src="06/Babel-100823-360x240-05569-00766-00098276.png" style="height:250px"><br>
</html>

!
<html>
<b>02: Streblospio Server</b> This is an 80x60 image.  (download the movie files below):<br>
<u><a href="06/100821-BlockSnow.m4v" target="_blank"> LINK iPod *.m4v M O V I E </a></u><br>
<u><a href="06/100821-BlockSnow.mov" target="_blank"> LINK QuickTime *.mov M O V I E </a></u>)<br>
<b>Starting Image:<br>
<img src="06/Babel-100821-120x090-00000-00000-00000000.png" style="height:250px"><br>
Ending Image:<br>
<img src="06/Babel-100821-120x090-09349-00824-00382997.png" style="height:250px"><br>
</html>

!
//amarsh.sk@gmail.com//
^^//pages optimized for your iPhone//^^
!
[[Back to GALLERY INDEX|Gallery]]
!!2010 Spring

This current runs were focusing on how to "anticipate" the final color fields based on the input variables controlling the color channel mutation rates. No problem finding the settings so that either R, G or B become the dominant color. Much harder to find the settings that would lead to a dominant yellow, orange or purple color fields. May need to edit the color code to allow more channel-to-channel interaction [?].
!!!
<html>
<b>02: Streblospio Server</b> This is an 80x60 image.  (download the movie files below):<br>
<u><a href="05/090413-Streb.m4v" target="_blank"> LINK iPod *.m4v M O V I E </a></u><br>
<u><a href="05/090413-Streb.mov" target="_blank"> LINK QuickTime *.mov M O V I E </a></u>)<br>
<b>Starting Image:<br>
<img src="05/Streb-090413-080x060-00000-00000-000000000.png" style="height:250px"><br>
Ending Image:<br>
<img src="05/Streb-090413-080x060-12345-02468-01646829.png" style="height:250px"><br>
</html>
|! Babel Image Evolution: Run Parameters |
|      MaxMuteRate = 0.0725 |
|      RED = 0.4960 |
|      GRN = 0.4950 |
|      BLU = 0.4940 |
!
//amarsh.sk@gmail.com//
^^//pages optimized for your iPhone//^^
!
//only for generate an <<tag Menu>> item
^^//(This site is designed for handheld cerebral gelatinizing devices)//^^
!!!
''Where does order come from? 
Given a system in disorder, what does it take for order to emerge?''
<html><img src="05/Streb-090413-080x060-12345-02468-01646829.png" style="height:200px"></html>
!Evolutionary Model of Emergence: simple color tiles organizing into complex images
Luis Borges wrote a simple essay [["The Library of Babel"|BabelLibrary]] describing a universal library composed of books written with random alphabet letters, but in which every possible random recombination was present. Thus, the library would contain every book that had ever been written and that would ever be written in that alphabet.  

Using the idea of a Borges' [[Babel Library|BabelLibrary]], one can envision a "Babel Gallery" by fixing a standard screen size and then generating all the possible color combinations at each pixel position in that image size. It would contain a representation of every painting that had been made and every painting that would be made. It is not an infinite gallery, but it might as well be. However, the final size/scope of the gallery can be significantly reduced if a few simple aesthetic rules were used to "filter" the output for acceptance into the gallery. 

That is what is attempted here. A 2D pixel grid starts as a random color map of tiles (pixels). A [[genetic algorithm|http://en.wikipedia.org/wiki/Genetic_algorithm]] is applied so that the image evolves across generations toward an endpoint defined only by a simple aesthetic that rewards descendants for increasingly greater degrees of color organization. Specifically, the variance in each R, G, B color channel is minimized for every possible 3x3 grouping of contiguous pixels. 

The process is iterated across a million generations and the color image evolves from a state of random disorder to one of highly organized color information. All the examples posted here include "movies" of the evolution process. Most of these runs start with a fixed geometric shape of uniform color placed on the random color tile map to look at how the "edges" interact between highly organized color information and highly disorganized color distributions. Which way does information flow at these junctures between order and disorder?

//The purpose of this work is to better understand a simple aesthetic rule set by which local color blocks interact in a 2D space to produce a visual pattern that we recognize as having some meaningfulness or complexity in its composition.//
!
__[[C U R R E N T : in progress|Current]]__ 
Working on scaling up to larger formats: 360x240; working on an asymmetric evolution algorithm.
<html><img src="06/Babel-100823-360x240-05569-00766-00098276.png" style="height:100px"></html>
__[[G A L L E R Y :  past postings|Gallery]]__
<html><img src="04/Icedive-090326-080x060-11565-02848-001013164.png" style="height:100px"></html>
!
//amarsh.sk@gmail.com//
^^//Pages Optimized for your iPhone//^^
!
Copyright (c) 2005-2008, BidiX (http://BidiX.info)

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
*Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 
*Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 
*Neither the name of BidiX nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. 

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
^^[[(BACK)|B a b e l]]^^
!"Ars Combinatoria" of Color Information:
Jorge Luis Borge wrote about a [[Library of Babel|http://en.wikipedia.org/wiki/Jorge_Luis_Borges]] in which books were randomly filled with letters and punctuation in all possible combinations and the task of the librarians were to wander through this infinite library flipping through pages looking for passages that made any sense at all. The stunning paradox here is that in that library there would exist ALL the great literary works of past, present and future cultures using that alphabet . . . all one had to do was find them on the shelves. [[William Bloch||http://wheatoncollege.edu/Faculty/BillGoldbloomBloch.html]] (//The Unimaginable Mathematics of Borges' Library of Babel//) makes an excellent presentation of how vast the size of such a babel library would be based solely on the [[combinometrics|http://en.wikipedia.org/wiki/Combinatorics]] of large systems ---- and how rare it would be in wandering through such a library to come across anything more meaningful than just randomized text. 

Well why not create a Babel Gallery of images? Why not take a standard image size, then chug through all the possible randomized color combinations for every pixel. That gallery would contain a representation of every possible painting, print, lithograph, drawing, photograph that has been and could be produced. Absolutely ALL inclusive of all 2D art that could exist in our universe. To get around the problem of having to then wander through a universe of random images just looking for any color patterns that didn't look quite so random, we could execute a simple set of aesthetic rules when the color pixels were being randomly generated so that the images that were really really random would be dropped from the library and only those images with some "aesthetic potential" would be retained for consideration of inclusion in a ''//Babel Gallery of Flat Art//''. 
!
^^[[(BACK)|B a b e l]]^^
!
Contact : [[BidiX @ bidix . info|mailto:BidiX@BidiX.info]]
URL : [[BidiX.info|http://BidiX.info/]]
Donation : [[Donation via Paypal|https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=BidiX%40bidix%2einfo&item_name=TiddlyWikiHacking%20Donations&item_number=Donations&no_shipping=2&no_note=1&tax=0&currency_code=EUR&bn=PP%2dDonationsBF&charset=UTF%2d8]]
[[Back to Front Page|B a b e l]]
!!Color Grid Test
The idea is "what is a pixel?" The answer becomes one of scale. So I'm looking at trying to integrate smaller compositions (shorter computational time and complexity) into larger images and allowing those higher-level architecture scales develop image complexity without necessarily increasing image information. 
 
I was running some color tests with small grids (20x15) and very short times (only 100k generations) just to get a feel for how changing the RGB mutation bias settings would effect the background distribution of color. As these maps were being generated I wrote a quick python script to assemble them into an organized grid. And then the program got a little more complex, and the overall image of the grids starting looking like more than just a color wheel test. So I'm going to restart the attempt (actually, it took 3 weeks to run those 128 images . . . and I had originally setup the program to do 512) and use larger grids (40x30) and let them run to equilibrium (+800k generations).   
!!!
<html>
<big><b>Each image is a 15x20 tile array that evolved from a random array with varying mutation bias ratios for the R, G, and B channels:</b><br>
<small>(large image, wait while it loads . . . )</small><br>
<img src="04/ColorTestGrid-03.jpg" style="height:300px">
</html>
!

<<search>>

----

<<newTiddler>>

<<saveChanges>>

<<upload>>

----

ImportTiddlers

[[Sync]]

SideBarOptions

[[Indexes]]

[[Back to Front Page|B a b e l]]
!!2011-Fall
Two objectives: 
# Working at a 300 x 240 grid scale is a daunting computational task. Looks like it will take over 1 year of cpu time in order for 1 image to reach the 1 million descendant threshold. 
# Divergence? I've started 15 different runs all with the same initial color map, but have slightly adjusted the probability distributions for each channel (R,G,B). Want to assess the degree of pattern similarity among the final 15 with a particular interest in the appearance of organization clusters (areas within an image) that are outliers in terms of higher color structure.

@@PECO Crown Lights:@@  A small rectangular segment of the compiled animation for ''02-Streblospio Server'' ([[see 2010-Fall|2010-Fall]]) has been selected to be displayed on the Crown Lights system of the PECO building in downtown February. The clip will run on a loop on Friday Night's through the month of October. Here's the the video clip submitted (a long slice to wrap around the building):
<html>
<img src="07/movienail.png" style="height:75px"><br>
<u><a href="07/Marsh-100821-evolution.mov" target="_blank"> LINK QuickTime *.mov M O V I E </a></u>)<br><br>
<b>14 OCT 2011:</b><br>
We had an incredible dinner at BISTRO ST. TROPEZ (23rd and Market) with a view of the Schullykill River and the PECO Crown Lights Display. Very cool to see BABEL running in the Air.
<img src="08/peco-display.png" style="height:200px"><br>
<u><a href="08/BabelInAir.mov" target="_blank"> LINK QuickTime *.mov M O V I E </a></u>)<br>
</html>

!Divergence
These images are still cranking away. They are only at +200k descendants, so about 1/5 of the way done. I do not have 16 dedicated cores for 24/7 processing. I can only run these in spurts when I do not have molecular gene sequence data to process and have idle cpu's. But the larger scale very interesting. There is an exponential increase in possible system complexity with scale. That larger set of possible outcomes alters the trajectory/path of the system toward a stable state. More diversions. More back-tracking. All of these images started from the same 'seed' image as shown on the gallery page under [[2010-Fall]]. 
 
<html>
<table>
<tr>
     <td><img src="07/zHen-A.png" style="height:100px"></td>
     <td><img src="07/zHen-B.png" style="height:100px"></td>
     <td><img src="07/zHen-C.png" style="height:100px"></td>
</tr>
<tr>
     <td><img src="07/zHen-D.png" style="height:100px"></td>
     <td><img src="07/zHen-E.png" style="height:100px"></td>
     <td><img src="07/zHen-F.png" style="height:100px"></td>
</tr>
<tr>
     <td><img src="07/zHen-G.png" style="height:100px"></td>
     <td><img src="07/zHen-H.png" style="height:100px"></td>
     <td><img src="07/zHen-I.png" style="height:100px"></td>
</tr>
<tr>
     <td><img src="07/zHen-J.png" style="height:100px"></td>
     <td><img src="07/zHen-K.png" style="height:100px"></td>
     <td><img src="07/zHen-L.png" style="height:100px"></td>
</tr>
<tr>
     <td><img src="07/zHen-M.png" style="height:100px"></td>
     <td><img src="07/zHen-N.png" style="height:100px"></td>
     <td><img src="07/zHen-O.png" style="height:100px"></td>
</tr>
</table>
</html>

!
//amarsh.sk@gmail.com//
^^//pages optimized for your iPhone//^^
!
[[B a b e l]]
[[(Back to Front Page)|B a b e l]]
!!!
//Small 40x30 tile test image used to test code over a million generations//
<html><img src="05/Color-20MAY-R49400-G49000-B49125.png" style="height:200px"></html>
!!!
@@''Project Results:''@@ Where does order come from? A genetic algorithm is developed through these postings to assess a performance criteria for an image with the corresponding movie files of how those images evolved. 
!!!
__[[2011-Spring : color evolution laboratory|ColorLab]]__ 
in progress . . . . working at different image scales 
<html><img src="04/ColorGridThumbnail.png" style="height:100px"></html>
!!!
__[[2010-Fall LINK|2010-Fall]]__: 
<html><img src="06/Babel-100823-360x240-05569-00766-00098276.png" style="height:100px"></html>
!!!
__[[2010-Spring LINK|2010-Spring]]__: 
<html><img src="05/Streb-090413-080x060-12345-02468-01646829.png" style="height:100px"></html>
!!!
__[[2009 Fall LINK|2009-Fall]]__:  2.5 months of CPU run time
<html><img src="05/Capitella-090310-120x090-15259-02636-01510278.png" style="height:100px"></html>
!!!
__[[2009 02MAY LINK|0904-Streb-Ice]]__: 
<html><img src="04/Icedive-090326-080x060-11565-02848-001013164.png" style="height:100px"></html>
!!!
__[[2009 26MAR LINK|090326-DELTA]]__: 
<html><img src="03/Delta-090302-080x060-10816-02535-001055431.png" style="height:100px"></html>
!!!
__[[2009 10MAR LINK|090204-MDH]]__: 120x90 color study
<html><img src="03/biowolf03.png" style="height:100px"></html>
!!!
__[[2009 20FEB LINK|2009 20FEB]]__: color interaction optimization
<html><img src="02/Gamma-090122-040x030-10053-02462-001245252.png" style="height:100px"></html>
!!!
__[[2009 08JAN LINK|2009 08JAN]]__: balancing mutation rates = stability vs instability . . . . chaos?
<html><img src="01/090108-Babel02-081231-040x030-16230-07893-001060214.png" style="height:100px"></html>
!!!
__[[2009 03JAN LINK|2009 03JAN]]__: more RGB control is introduced to influence the color histogram distribution
<html><img src="01/090103-Babel05-081230-040x030-06480-04993-000387733.png" style="height:100px"></html>
!!!
__[[2008 12DEC LINK|2008 12DEC]]__: next generation looked like rugs
<html><img src="00/0000-Mute05-081208-040x030-09340-01363-002052043.png" style="height:100px"></html>
!!!
__[[2008 30NOV LINK|2008 30NOV]]__: first generation tended toward gray
<html><img src="00/RedSquare-081128-040x030-007820-02458-0000933148.png" style="height:100px"></html>

!
//amarsh.sk@gmail.com//
^^//pages optimized for iPhone//^^
!

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)
* SiteUrl: The home URL of the site (used in the RSSFeed)
* Set [[Options]] and [[iTWTweaks]]
* Tiddlers tagged [[Menu]] are displaid in <<tag Menu>>
* Tiddlers tagged with [[Home]] are displaid in the Home page when the TiddlyWiki is opened.

*For additionnal informations : http://iTW.BidiX.info/
*iTW is available with a [[BSD Open Source License]] feel free to send comments and suggestions to BidiX
/***
|Name:|HideWhenPlugin|
|Description:|Allows conditional inclusion/exclusion in templates|
|Version:|3.1 ($Rev: 3919 $)|
|Date:|$Date: 2008-03-13 02:03:12 +1000 (Thu, 13 Mar 2008) $|
|Source:|http://mptw.tiddlyspot.com/#HideWhenPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
For use in ViewTemplate and EditTemplate. Example usage:
{{{<div macro="showWhenTagged Task">[[TaskToolbar]]</div>}}}
{{{<div macro="showWhen tiddler.modifier == 'BartSimpson'"><img src="bart.gif"/></div>}}}
***/
//{{{

window.hideWhenLastTest = false;

window.removeElementWhen = function(test,place) {
	window.hideWhenLastTest = test;
	if (test) {
		removeChildren(place);
		place.parentNode.removeChild(place);
	}
};


merge(config.macros,{

	hideWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( eval(paramString), place);
	}},

	showWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !eval(paramString), place);
	}},

	hideWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.tags.containsAll(params), place);
	}},

	showWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !tiddler.tags.containsAll(params), place);
	}},

	hideWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.tags.containsAny(params), place);
	}},

	showWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !tiddler.tags.containsAny(params), place);
	}},

	hideWhenTaggedAll: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.tags.containsAll(params), place);
	}},

	showWhenTaggedAll: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !tiddler.tags.containsAll(params), place);
	}},

	hideWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0]), place);
	}},

	showWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !(store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0])), place);
	}},

	hideWhenTitleIs: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.title == params[0], place);
	}},

	showWhenTitleIs: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.title != params[0], place);
	}},

	'else': { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !window.hideWhenLastTest, place);
	}}

});

//}}}

/***
|''Name:''|HistoryPlugin|
|''Description:''|Limits to only one tiddler open. Manages an history stack and provides macro to navigate in this history (<<history>><<back>><<forward>>).|
|''Version:''|1.0.0|
|''Date:''|2008-03-23|
|''Source:''|http://tiddlywiki.bidix.info/#HistoryPlugin|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''[[License]]:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.3.0|
***/
//{{{
	Story.prototype.tiddlerHistory = [];
	Story.prototype.historyCurrentPos = -1;
	Story.prototype.currentTiddler = null;
	Story.prototype.maxPos = 11;

	Story.prototype.old_history_displayTiddler = Story.prototype.displayTiddler;
	Story.prototype.displayTiddler = function(srcElement,title,template,animate,slowly)
	{
		title = ((typeof title === "string") ? title : title.title);
		//SinglePageMode
		if (this.currentTiddler) this.closeTiddler(this.currentTiddler);
		if (template == 2) {
			//switch to Edit mode : don't manage
			story.old_history_displayTiddler(null,title,template,animate,slowly);
			return; 
		}
		// if same tiddler no change
		if (this.tiddlerHistory[this.historyCurrentPos] == title) {
			this.currentTiddler = title;
			story.old_history_displayTiddler(null,title,template,animate,slowly);
			return;
		}
		if (this.historyCurrentPos == this.tiddlerHistory.length -1) {
			// bottom of stack
	    	this.tiddlerHistory.push(title);
		   	if (this.tiddlerHistory.length > 11) {
	                 this.tiddlerHistory.shift();
	       	} else {
		    this.historyCurrentPos += 1;
	            }

		} else {
			// middle of stack
		    this.historyCurrentPos += 1;
			if (this.tiddlerHistory[this.historyCurrentPos] != title) {
				// path change => cut history
				this.tiddlerHistory[this.historyCurrentPos] = title;
				var a = [];
				for(var i = 0; i <= this.historyCurrentPos;i++) {
					a[i] = this.tiddlerHistory[i];
				}
				this.tiddlerHistory = a;
			}
		}
		this.currentTiddler = title;
		story.old_history_displayTiddler(null,title,template,animate,true);
	        scrollTo(0, 1);
	}

	Story.prototype.old_history_closeTiddler = Story.prototype.closeTiddler;
	Story.prototype.closeTiddler = function(title,animate,slowly)
	{
		this.currentTiddler = null;
	    story.old_history_closeTiddler.apply(this,arguments);
	}

	config.macros.history = {};
	config.macros.history.action = function(event) {
	var popup = Popup.create(this);
		if(popup)
			{
	        if (!story.tiddlerHistory.length)
	            createTiddlyText(popup,"No history");
	        else
	           {
	           var c = story.tiddlerHistory.length;
			   for (i=0; i<c;i++ )
	               {
					var elmt = createTiddlyElement(popup,"li");
				   	var btn = createTiddlyButton(elmt,story.tiddlerHistory[i],story.tiddlerHistory[i],config.macros.history.onClick);
					btn.setAttribute("historyPos",i);
			       }
	           }
	        }
		Popup.show(popup,false);
		event.cancelBubble = true;
		if (event.stopPropagation) event.stopPropagation();
		return false;
	}
	config.macros.history.handler = function(place,macroName,params)
	{
		createTiddlyButton(place, 'history', 'history', config.macros.history.action);
	}

	config.macros.history.onClick = function(ev)
	{
		var e = ev ? ev : window.event;
		var historyPos = this.getAttribute("historyPos");
		story.historyCurrentPos = historyPos -1;
		story.displayTiddler(null,story.tiddlerHistory[historyPos]);
		return false;
	};

	config.macros.back = {};
	config.macros.back.action = function() {
	       if (story.historyCurrentPos > 0) {
				if (story.currentTiddler) story.closeTiddler(story.currentTiddler);
				story.historyCurrentPos = story.historyCurrentPos -2;
				story.displayTiddler(null,story.tiddlerHistory[story.historyCurrentPos+1]);
			} else {
				//if (story.currentTiddler) story.old_history_displayTiddler(null,story.currentTiddler);
				};
		return false;
	}
	config.macros.back.handler = function(place,macroName,params)
	{
		createTiddlyButton(place, '<', 'back', config.macros.back.action,"backButton");
	}

	config.macros.forward = {};
	config.macros.forward.action = function() {
	       if (story.historyCurrentPos < story.tiddlerHistory.length -1) {
				if (story.currentTiddler) story.closeTiddler(story.currentTiddler);
				//story.historyCurrentPos = story.historyCurrentPos;
				story.displayTiddler(null,story.tiddlerHistory[story.historyCurrentPos+1]);
			} else {
				//if (story.currentTiddler) story.old_history_displayTiddler(null,story.currentTiddler);
			}
		return false;
	}
	config.macros.forward.handler = function(place,macroName,params)
	{
		createTiddlyButton(place, '>', 'forward', config.macros.forward.action, "ibutton");
	}
//}}}
{{homeTitle{AGM}}}
<<tabs txtMainTab "Timeline" "Timeline" TabTimeline "All" "All tiddlers" TabAll "Tags" "All tags" TabTags "More" "More lists" TabMore>>
//{{{
/*
 * ListByTag
 */

Array.prototype.tiddlerList = function(listFormat,max) {
		var output = "";
		if (!listFormat) 
			listFormat = "'\\n{{tiddlerListItem{{{tiddlerListItemTitle{[[' + tiddler.title + ']]}}} - ' + tiddler.created.formatString('0DD/0MM/YY') + ' - ' + tiddler.modifier + '\\n{{tiddlerExcerpt{' + text + ' ... \\n}}}}}}'";        
		if (!max) 
			max = this.length;
		if (this.length > 0 && this[0] instanceof Tiddler) {
			for (var i=0;i<max;i++) {
				var tiddler = this[i];
				var text = "{{{"+wikifyPlain(tiddler.title, store, 100)+"}}}";
				output += eval(listFormat);
			}
		}
		output += "\n----\n";
		return output;
	};

// tag, sorted, listformat, max(0), noReverse(true)
config.macros.listByTag = {};
config.macros.listByTag.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{
    	params[0]  = (params[0] ? params[0] : tiddler.title);
    	var tiddlers = store.getTaggedTiddlers(params[0],params[1]);
    	if (params[3] == 0) params[3] = null;
    	if (! params[4])
    	    	tiddlers = tiddlers.reverse();
 	wikify(tiddlers.tiddlerList(params[2],params[3]),place,null,tiddler.tiddler);

	var tiddlerElem = document.getElementById(story.idPrefix + tiddler.title);
	var e = null;
	if(tiddlerElem != null) {
		var children = tiddlerElem.getElementsByTagName("span");
		for(var t=0; t<children.length; t++) {
			var c = children[t];
			if(c.className == 'tiddlerListItem') {
				c.addEventListener('mousedown', function(event) {
					var tiddlyLink = event.currentTarget.firstChild.firstChild;
					var tiddlerTitle = tiddlyLink.getAttribute("tiddlyLink");
					story.displayTiddler(null, tiddlerTitle);
					event.preventDefault();
				}, true);
			}
		}
	}
	
};
//}}}

/***
|''Name:''|LoadRemoteFileThroughProxy (previous LoadRemoteFileHijack)|
|''Description:''|When the TiddlyWiki file is located on the web (view over http) the content of [[SiteProxy]] tiddler is added in front of the file url. If [[SiteProxy]] does not exist "/proxy/" is added. |
|''Version:''|1.1.0|
|''Date:''|mar 17, 2007|
|''Source:''|http://tiddlywiki.bidix.info/#LoadRemoteFileHijack|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0|
***/
//{{{
version.extensions.LoadRemoteFileThroughProxy = {
 major: 1, minor: 1, revision: 0, 
 date: new Date("mar 17, 2007"), 
 source: "http://tiddlywiki.bidix.info/#LoadRemoteFileThroughProxy"};

if (!window.bidix) window.bidix = {}; // bidix namespace
if (!bidix.core) bidix.core = {};

bidix.core.loadRemoteFile = loadRemoteFile;
loadRemoteFile = function(url,callback,params)
{
 if ((document.location.toString().substr(0,4) == "http") && (url.substr(0,4) == "http")){ 
 url = store.getTiddlerText("SiteProxy", "/proxy/") + url;
 }
 return bidix.core.loadRemoteFile(url,callback,params);
}
//}}}
[[GettingStarted]]
[[HOME]]
<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml'/>
<link rel="shortcut icon" href="data:;base64,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" type="image/vnd.microsoft.icon" />
<link rel="icon" href="data:;base64,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" type="image/vnd.microsoft.icon" /> 
<link rel="apple-touch-icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAACXBIWXMAAAsTAAALEwEAmpwYAAAYeUlEQVR4nO2daY8jy5Wen4jITO5k7V3dt+8iwRjYEGYAD2zABgx/8Wf/Ndu/xcZgDBiwMSN5DGik8ehqbMmai3tv77WyuDO3iOMPkUmyernqTrLVKFW+QC/FSgaDESfO8p4TEeo//Mf/JNS4twj+6Z/+80/dhxqfEMHJwy8/dR9qfEIEk2n8qftQ4xMiGE9nn7oPNT4hAqldwHuNQOtP3YUanxJBrQDuNwKpbcC9RuBqAbjXCPiY868Uav3DR/ygP1ZIMT3Cx5qnwFVuuHzjepIFQSmFUqCVRmsNWqOVohQAVTxcK57beNu4iAgignMO5xwibuMBtRaO4ucqCLYXLdloQRUdFjKXkecWa3PEudWXqef9h6HAa06l0EqhtcEEAcYYv6BQ+Dl7fSSrjezWAiBSCKWCwBicOJI4ZjIZcXV2xnB4yWI+J05i8jTFWevfWFuENyECShOEIVGjQbPZot8fcPTglIPDYzqdLmEYrTSCUmvNURU7I4LECWmeEidLRjfXXF2cc/bqBVcXF8znM+J4SZYm2EIAVC0Bb8Dh0CsBaNJutRns7REnCWmScnh0QrfXIzAhKFBKbW1KtxCAte3R2pClKTfDKy7OXvH8+VNGoyFaB7R7e3T6hyhtUNqrtltvr+GxdqQQ53DiELE4m/P86VMuzs44ffiIh48ec3RySrfXRylwzr7WwIchcBW9wLXq8U7KMl5ycXbG0yffcXlxTpZbDo5POTh6QLvdI2q2iBpNTBD4d9UC8AaUAhFHlqakcUwcL5hOhlyePWd6fY3NLc45okaTZquNMXo1jlX5nMo+gIhfzc5ZkiTmZjjk1dkLbsY39PdPGBwc0+nv0+50iRpNgiDChAFam7KBSp/7R4uNMMDanLyd0coSWt0+nd4Bs/GQ8fCcs7OXdPsDWp0unU4HY4KigYoC4FzV/gpKafLcMhoNubw8Zzqbgg44PH3M6Wc/IogilNYYbVBKo/Q6HKzxbmgTYMIGoWvT7PTZOzhhOh6SZAmzyTXDm2s63R5aPaDb6wOKqpp8aw2QZxkXZy85e/WCoNHhwdHnDA5PiVptlDaIOERpBFBOQNUr//dCQFCogkNRgabV2+Pk0VdEjRaz6YxnT76j0WjS7Q3Wb6qAyrmAUmNZaxmPRkxGY44/+zHHp1/Q7vRAefvkBJCKaqbGSl8GQYP9o4doE/D8299wfX3FZ8sFfuJVdR9AKk+ORnAFDaTBRISNDo1mF21CnBUEeXvHCt6gxmt4y7goFEo5BEUYNmk2uwRBkzRPCw5GUEqoOo/BNtNfMns6CAmjFmHUxAQh4sBWdS5qvAa/gJQCbQwmaBBETZxNvYlFvKat2HpQ1Rt3gCsEQAUhJoxAG8T511wtALuFUoX/pNBBhIkaoAxuHQdWanaLZBA4J4gotAnQQQSoYuUrpBaA3aLgfZ2IjxKCEKU1zvkEXNV5rEwEac3KBChlUNp7+rawRVJZKdV4K0QhTuHEgfKLzjt/4Mm4ymFgxf44QTSFiVKAxhWsIOA7WmNnUCgEhRXBFeMtpfe/hRYPqtpqrZSP8cWnep2As5AX1HRN9O0WfvoFawXnAMdq/D0RVDEKqNqh0vssY33nBOs2NMBH8gFUUVziefPXf/lh0eVmKUWpStdhq9rId6jXCjbe9tzGh4usntsVlPI6wDrx2lfW478NuRZIVe9Bq3WRR1nw4dzaFu1o/suqlzJ9LBq01iit8UvBe8Z+EvR758fX4ya+AEMEa23hvAoKjWhflKG0WWUxfS7e4sfN0+Hg+6OKGnuxFhFbMHpFGLcl8SFKAAdOvOe/IQje6a5KBFXtkICWIhSUcmC8BlAfIQooaCVc7sgzX1dgTOAHvSibKs3R+7TmhUatVr/SiiBsEATeuXJicbnDWYu12UqjaW0Io6hIwvhkmLUpzuZYm4NAEIbeS1dqLbjbagMFGj/O4hyIW439Nq1XTweXUUAhBKUJsM7bqp2agELfO+eYT254/v1vmYyuGRyc0OntkcYLlosZ8XJGlqZsaox3N6kJowitNVma0mi1efzjf8bx6ecopcmSlNl0zOTmkuHFC+bTMUoruoNDHn/5Jxw++AylNdkyYXxzxc3wnJuLVzjnePj5jzg6/Zyo0UIb4xfEtk6RUmgRcidY51BOVuZXQfUooDITWDp+xeQ7EZw43znYoQbwoi/OIc6C5EQktPSSkBjtYozERCxBLQl1snqn3G7l1utaabTKUWg0CaEANiHLLdp4PsNmS1w6JXBzmmrhV7dr4ornTPlcvoR0SsgMpUFLinPWT4oq6vd2IABo7+z5ZqXQAL7d6kxgRclx2kuk5wIKYXCsiImduT8iSO75boCHp8f8u3/57znsh7y6XjCcJrQiRb8d0mtHtBrer7VOsNYhTtBaeb+hKKPSSpFbxyJOybKcwMA8cfzjqyUvb2aYICIKFPu9Jl8efcGPH/85R/s90jTlehzz3VXG5XSJ0gGNUPPoZJ+ffDngq0f/hla7y9PLhOfDlDj1GhFf6rf1OFBMunOCknXVMEDVeQxcxanSThCtEec7JG7duQ23emv4ZKKgtW+22+3yZ3/2E/7J4yO+/t1Tnr4ccrjf47MHB5we79HvNt+p/FeOuQJrhelsTpZlDHptRpMFs//2S7579S0YR7Pf4mDQ4U8+3+Pf/us/57OHD7A25/tn5/yXv/oHnl08Q3SDVtTm9OiAn3x1wL/6F39Kq9Pnv//8H7n8u29YpvEqJ6LdttkvtVpoK+f7lgaoSgRVVNVS8gCFA2KlDAMB9Y4sYEUIIFZALDejKX/39W94+n2DFxdjxnPLbJkTZ5qrSUa7GaKV0GkGPH6wT7MRsIwThuM543nGMvX90ghISrcVsj/o0W41aRiFshlWAkAz6Hc5ORzQaTcBMCZgb9Aj1IJNY5xWQJt+p83BXo9mI8I6x3SeMJolxKktogdBts5+er/GOsGKrLVvwQNUncetsoGlafN2SVZRAGrXTKB3AsU55osFT54tuYoco2nKMjfMEriaZkRhSGjAYDneb9OMDI9O9ri4vOabZxe8vI4ZzSxOhEao6bc1j497nB7toZQiDCA0QpplOGvZ63c4PBhgrY9wtFYEgSEKFIHKWeYpzjk6nRaDfpc8zxgvEq7HM6aLBOcgigrdv+WCUAUX6AqNW4aDKyq4YrvViSDxdr4kI6RwAn016w683jfgw58oCvnysyNO9hs8P7/hxcWM6TJhuBj5CdIQkJGmfZbxY0SExTLm6nrE01dzLsY51jrazYAHew26zZAks7SbIZ1mSKdhmCxj0mTJfr/H6ckxuXVc30w4POhjtKbXDum1AhaTlCxNGPQ7HB4ekOeOq+GI+SL2th/Bba3619C4VbitSiIO2Ea9VM4GalV2YG2LfDQA2yQn3o7Sk3Y0o5AvHp/y48/2MeYZk4VleJVwM5tjHYTGC0C3FZAWvHSaZUznS27GC66GKblzdJoBBsfxfkKSWrrtiG47ot+JuBwtQFL6vTaDfp+XFzeMZxMazQZGQb/bYL/fZDibIC6l027S73W5vhlzNZyyXCZQ5ul3NA5KeWFyrnC63ToMR0lVH5CgarlWmYiQIh6VwttdOYE7QqlhFAIOjDb0+10OD/bpXdzQiEIU2ZqIUt4hupUkWZmqtdrMrTBdZoxmGXHmipXtJ7Y71LQj6LRCTBBwPlzw6mLE/qDH8X6LXqfJ0V6H8+GShoFmFGBMwGyRcjWas0gyPzE7XAPlRPuFRuEDbJSDV60Iql4RtslHbxBCIqgdmwAnngVDfIjZiCJarSaNKMJoU2w+Zb0xFY1CrwVRKV+VvNpz5wd0vswZzRKWSeYjjHaTw70uB/0JzWZAq+Gj5MvRgidnIx4/3KffNnTbTU4OB7y8nKKNJgq8nZ8uUoaTJXEhALvUAPhv5KMAJxtCLkWkVK3V6ieEbNj+cvLLDjnYqQD4xe+KL7tu18/7ZkhU9Ec57xatHlWrBE1ZO+ecY5HljGdxYbMd3U6Lk8MBw9EUEwS0GiHOCZNFyvnNjFeXIw57Ia1mk4cnhzw/G5Jmlijwqnm+zBnPU5LMFv0UnOzqDJ7S6XYbiThZMYHVqeCKE6XLuBTBFgxgbh1ZbqEIEXcFXwMhKLGeeStWVan2rXNk1vrnAKV8f1bCUmimso8iYB0sk5zpImY0WbBcxrRaDR4cHzKezXFWCI0iTjIms5jr0ZKXF2MeHrQ4Oehx+uCQB0fnTGcLGqEmd8JonnA9XjJfZtjcesZxZwtBoQVy678DeEZQEBBF1Xncqiaw9AHy3JKkOSbOMI3c/36XYWBh/7TLSNN8I+XsByROc5ZxhnNCFCistqTZOjPpRFbPLWKvnrWCOM2ZLxIuhyOuR30GvTYPT4+Jk5T5YoF1luvRhOF4zs10ydn1lKtRn0cPjnjQ6/DZg0OGjZBOq4G1jqvRkheXM2bLdJ0O3nb7bgEFKG3I04w4yYh0ji2zkprKYWZQtXpXKb1KAOXWC0GaW5IsZ/c1gQV5I44sd6vvKkV+PMsdaWqx4lcDxpFb2XjOU8N5bknTYmVqyHJHnORcDWdc3kwZDLoc7u+TZzk34wl57rgcjxlPF8yXGVejBZejGIdmb9Dj8aMT2s0GjUbIIk4YThYMJ0uyzBIEZoffH58MUpBnljy3aON8cYgIaosq7MCrkyr9kYJSLVOwPv+2Sn/uSPJ9Y4UJAG/OX+9L8VfZgzf6uvlqYTAVCq296hzPl1yP5nyR5hzuRTx6eEK73eJqOOHiesIy9it6Os+4nsQskhxjAr54/Ii9QR9jAi6uJ8zmS3LrPCmzy++/8R3ZaNs5R24toLAV5zGwtqIPoMHZIg8PoJXf+6d8ZYzeIQ8gZcFHsR2tdP4An20rkjxllLA6OGFjDrxvoFbUrNIKozVOYDIvvPc0RylFFEUMBn2enY25uJmRpDkomMU51+OYxTIFoNPp0Gg0uRlPuBxOWCwTwK9U/RE2vpT9L6uinPichlK+VKwKttgbWBZpwE4D3h/+1FXYU/78ZlHk7SSJf6lwCDde8wLhw7TpImM4TUnS9SpyjoLWXXqvXoTpImE4XjBfJjjn0EUl9Hi64HLoNYW6tVQ/Joo4Q8rah6rO/BYdKAm6TXzM/b9Ka1AaU6wAY4J1VdBGD7T2B1TpouJHv/U5X9jqxAvAzTQlydcCYJ1jPEu5nsTEmfc7kjRntkyZL1Oy4qQTJz75MxwvCg2yc+2/gdcGW8rlV30BVhaAUgOUgrCa+A8szHzPT/MEjgn82TmNCGMM3W6PTndAGEaU0qg0BGFEo9mm2WygjaHb69Hu9QnK54oOau3j98k84WayvFXFpLUqHD9P7OjCzFjnmC0zlrGPdgJtiHNhtMhJc7fSLLtGYVlfa7sQgC0U8Ba7gzfONGHDP1n9vnqn3v55vhg0s3BxM+Nwr8vVOGWZKeymAKJAG1ILF8MZ+702l+OERaqwot7on4gQp5bRbMnLiwk/erQgigwXwxkXwxmTeUqeO+8zGE1uHWdXU3735IovH+2R544XVzOuxglx5lbVuzsXArX+c7vpUggq+gDbMHYlE/XxoQryRjgfTvnLn/2W//WrJ0xmMVejOaNZjNZrBy9NLc/PR/zFT3/Dz/73d0wXCdejOTeTBfoN70wRGM1klvA/fvENv/3+giAwzBYJ378crogtBUSBJklzfv3NK86up/TaESLC+XDG5c3cU8qve58fGVJWYFUmgqp/9FtUz8f54uVqck4YTZb84uY5Ig6ltC/3UuvoQATS3HI1mnN+PcOJ8+ftqbIsTL3RtjGaOM359Tdn/P3vXhZhp8IYHymUbwkCTWYdT14O+e7F9Sr89SVnPmP/8ew/vM3D2tYJ36IeYKMHAh/R9dv4oI0sZMm0SakTbz9HmSkrfdXVzLy7YMxnNf3zvuBF336Pd7v9f6WsyJWi/oHXIoBdq0Z1+/+iVpWgW/oAFbvz1shjc5A/hhH08XUUGuBdTFtBB2lF9AGXIfiKIEP4AwyeUGoGg/m9RN/HcgLKH4vCW6+EKgvBVgdFlps1Nvq06uMfzgreH6wjgdtb1RRbCEB1VfWWnanl5G8hkTV+GLdD7c0FWNEJrFwWvuKB6pn+FCinfpUOrioAVedPyprA15lY/nDEcA1WpWJVB30LHkBtVOjUU/4HxyrKkVVkVAXVcwGyqf7XO21rfHxsRps+EtiCB9hm7ZaVr+sESOkY1Brh40BWlIsq+I/tXMCtfIDyfwqjDUG5Ddq54kzgGruFFJW/DqMVgTK+Trg0/5XDwC1zAQBhaIhCg1aCczlaBW9QrjW2hz+ZxBEaQyNQxXHxRaVU5WRQxc6ooiBUKWi1GnS7TeLcYfMUlMKYsHiyNgfbw1dZ2zxDbEazGdJrGqIwoDyqr7IJqBrHC4DzO2oO9/tEYcCLyynj+YxmRxc5+nLTai0E1VCU1ymNtZYkXqAl5eSww/FBlyhq+KJQqvMxW90b6MTX1nU7bYLAcDNZMlskiM3I86w4QGkzSVKbhfdDOSnOn7uMxeYZSEZohH63xV6/R+4gs9tRcdWdwOJf740awjDi6KAHwM0sZjqOCaMmUdREG4PWpsgV1LdV/z5IceCVc37ik3iJkoxeO+Cg36XTaYMOiufKS7iqYbswsPiTW0ErzV6/g9YK60bYyRItKWIVTgIc9Y0h74vygkgRCy7HkBIFcDhoc3TQJ2pE5I7VbqCtNMC2e/icCFkmGKOIogZHBxHtRpPJdMFotmA6j1kucrLcbuwhqPE2+DoEX/waBpooDOi0Igb7ewx6bXrdFlEUklkhy3O/82lLIdjJ9fHOWQRNFAU0o4h2s0Gv0yQaaoyyhNqRJJY83/HxcX9kEHy9gzaKKFK0GoZBr8HJ0R79ftdfz5c7kiwhz/0OrG3D7R1cHQtlajhJcpwVAqPR2nB0sMf+oO/tWc0Qvj9Wm1t8KZsxAXku5C4ly4sNuDuqPNqiJvA2RCDNvKoPjKERBbSbTVrNiCA0BNqs6vf8G3b1yX9EUGWp2Xq3dZrmLJb+DIMsy1f3MeyKZ9vZ1bGwLt60zpFkOU6EOM0xRq8KN2u8G2WVnbA+ds9aR5bnZLk/iOv1Idx2/namATyKOhUR8jwny/zmiVUf61X//tis/1dlpWPxww6x1d5AeHMDyK0teau/anwwNmo8Npm+d413VeW6tQn4offfqpKusRO8a7w/SVVwjbuPmpe956gF4J4jqG30/UagzY4jwRp3CsF0NPzUfajxCRH86ud/9an7UOMTImgH2afuQ41PCPWf/+K/1kzAPYaSukLjXqPmAe45agG456gF4J6jFoB7jloA7jlqAbjnqAXgnqPOBN1BrMrD/DGVpJm/sifLLM6Wl3euL/GiePptqAXgjkEQcslRSggIyF3O/31yyT/87oKXL4ZcDycsFzOSZIHN/DX25WGSb0MtAHcQSgkZGXGW8uJyyt/86gn/8xdP+fbJmPPLKYvZlDRZkGcx4nyu510nONVU8F3CaiUL82zBz/7+gp/+/Cm//Pobvn1+w8zuY/U+qIDAKELjCPQPb8WrNcBdgvImIHMpzy4n/PRvn/OXf/2U8/MxqTM09o/p7n9Jq9On1WzSaWqiYobftcprAbhjSNKc//PdBX/z9VN++evvubie0hh8zsnhKZ3ePu1Oj2ajQSMKCANFefb1u/R8LQB3DElq+fr/nfPXf/uMJ69mELQ5PP2Kh4+/ohVBZCyRURhtUfr3b8uoBeCOIcssz54P+fbJmMw84ODhYw4Oj+i3FYEubhArrxJ4j534tQDcMVgnDEcJVyNL+/iYo9MvGfQ0kS6v7PX3Ir8vagG4c1Bk0sTqDp1Wg72uJgy8YJR7MV+39z9AA9QCcPegEdNGBX0ajZBW5FAKio3YH4xaAO4cFKIbiG4iyhQ3pKvVTekfuhu3FoC7BqVQOkR0AyuG3PpDI9Z2/8N4vVoA7iCUMigd4Bz4y8OlODGMD96OXwvAXYTWgMKJIl+ZgGpN1QJwJ+E9fuf8IZ0oNnyAD0MtAHcS/igpJ1LY/rfd4vp+qAXgLsI5xFl/nFxxhYjUGuA+oRAAJyvbX/sA9wZSXHBscVbIcn9fgKtoA2oBuGsoj9wVh7WOPPc8QC0A9wr+vkYr4n2AsgC0AmoBuHMoDpN1ftJtMe9S+wD3COJA8ltOYC0A9wnir49zTlY5gFoA7hX8dTLWeScQpT40B7RCLQB3EVJeKlVkAVXtBN4/FDe3O8Tf41szgfcFBRGEX/VSaICqqAXgjsJfLed8XlBUZS64FoA7B0EkB5fjrL9L2L9cC8C9gdgMly9R2RyXTvB7xmyltmoBuGsQ8ZNtU8TGiI3967UJuEe45fMV1/FWPOvl/wPNNCWzuKmehwAAAABJRU5ErkJggg=="/>
<meta name="viewport" content="width=320; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"/>
<!--}}}-->


!Basic
These Interface Options for customising TiddlyWiki are saved in your browser

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

UserName: <<option txtUserName>>
<<option chkAutoSave>> AutoSave
<<option chkRegExpSearch>> RegExpSearch
<<option chkCaseSensitiveSearch>> CaseSensitiveSearch
!Upload
UploadUserName : <<option txtUploadUserName>>
UploadPassword : <<option pasUploadPassword>>
UploadFilename : <<option txtUploadFilename>>
UploadStoreUrl :<<option txtUploadStoreUrl>>
UploadDir :<<option txtUploadDir>>
UploadFilename : <<option txtUploadFilename>>
UploadBackupDir : <<option txtUploadBackupDir>>
UploadLog : <<option chkUploadLog>>
UploadLogMaxLine : <<option txtUploadLogMaxLine>>
!~UploadTiddler
UploadTiddler: <<option chkUploadTiddler>>
UploadTiddlerStoreUrl : <<option txtUploadTiddlerStoreUrl>>

----
see also AdvancedOptions and [[iTWTweaks]] 


<<search>>

----

<<newTiddler>>

<<saveChanges>>


----

ImportTiddlers

[[Sync]]

SideBarOptions

[[Indexes]]

<!--{{{-->
<div id='displayArea'>
<div id='topMenu' refresh='content' tiddler='TopMenu'></div>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
/***
|''Name:''|PasswordOptionPlugin|
|''Description:''|Extends TiddlyWiki options with non encrypted password option.|
|''Version:''|1.0.2|
|''Date:''|Apr 19, 2007|
|''Source:''|http://tiddlywiki.bidix.info/#PasswordOptionPlugin|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0 (Beta 5)|
***/
//{{{
version.extensions.PasswordOptionPlugin = {
	major: 1, minor: 0, revision: 2, 
	date: new Date("Apr 19, 2007"),
	source: 'http://tiddlywiki.bidix.info/#PasswordOptionPlugin',
	author: 'BidiX (BidiX (at) bidix (dot) info',
	license: '[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D]]',
	coreVersion: '2.2.0 (Beta 5)'
};

config.macros.option.passwordCheckboxLabel = "Save this password on this computer";
config.macros.option.passwordInputType = "password"; // password | text
setStylesheet(".pasOptionInput {width: 11em;}\n","passwordInputTypeStyle");

merge(config.macros.option.types, {
	'pas': {
		elementType: "input",
		valueField: "value",
		eventName: "onkeyup",
		className: "pasOptionInput",
		typeValue: config.macros.option.passwordInputType,
		create: function(place,type,opt,className,desc) {
			// password field
			config.macros.option.genericCreate(place,'pas',opt,className,desc);
			// checkbox linked with this password "save this password on this computer"
			config.macros.option.genericCreate(place,'chk','chk'+opt,className,desc);			
			// text savePasswordCheckboxLabel
			place.appendChild(document.createTextNode(config.macros.option.passwordCheckboxLabel));
		},
		onChange: config.macros.option.genericOnChange
	}
});

merge(config.optionHandlers['chk'], {
	get: function(name) {
		// is there an option linked with this chk ?
		var opt = name.substr(3);
		if (config.options[opt]) 
			saveOptionCookie(opt);
		return config.options[name] ? "true" : "false";
	}
});

merge(config.optionHandlers, {
	'pas': {
 		get: function(name) {
			if (config.options["chk"+name]) {
				return encodeCookie(config.options[name].toString());
			} else {
				return "";
			}
		},
		set: function(name,value) {config.options[name] = decodeCookie(value);}
	}
});

// need to reload options to load passwordOptions
loadOptionsCookie();

/*
if (!config.options['pasPassword'])
	config.options['pasPassword'] = '';

merge(config.optionsDesc,{
		pasPassword: "Test password"
	});
*/
//}}}
proxy.php?url=
iPhony
Babel
/*{{{*/
body {font-size:12px; font-family:arial,helvetica; margin:0; padding:0;	min-height: 418px; width: 100%}
#messageArea {position:fixed; top:28px; right:0em; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
#displayArea {margin:0em 0em 0em 0em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0em; left:0em;}

#topMenu { 
 positon:relative;
 padding-top:0.5em;
 padding-left:0.5em;
 }


#topMenu br {display:none; }

#topMenu {
	background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAArCAIAAAA2QHWOAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFJJREFUeNpcjjsOgDAMQy3f/2qMzAwMbOwg6pCPSisGy8+2FAXLunE/TgJGmUvl1jkl78Q2Z/f2ceyYevG6n7wxhLr5y52jjx9G747akYxXgAEA9FZw6HEbDVoAAAAASUVORK5CYII=) #6d84a2 repeat-x;
	box-sizing: border-box;
	border-bottom: 1px solid #2d3642;	
	margin: 0;
	line-height: 20px;
        height: 30px;
	font-size: 12px;
	font-weight: bold;
	padding: 1px 10px 10px 10px;
	text-align: center;
	color: #FFFFFF;
	text-shadow: rgba(0, 0, 0, 0.6) 0px -1px 0;
	text-overflow: ellipsis;
	box-sizing: border-box;
	overflow: hidden;
	white-space: nowrap;
	
}


.backButton, .ibutton, #topMenu .button, .toolbar .button {
	top: 6px;
	-webkit-border-radius: 0;
	padding: 0 1px 2px 1px;
	height: 28px;
	line-height: 28px;
	font-weight: bold;
	color: #FFFFFF;
	text-shadow: rgba(0, 0, 0, 0.6) 0px -1px 0;
	text-decoration: none;
	background: #4A6C9B;
	border-color: #4A6C9B;
}


 #topMenu .backButton {
	position: absolute;
	left: 6px;
	right: auto;
	font-size: 20px;
	-webkit-border-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACsAAAAeCAIAAAA6iHCJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAtJJREFUeNrEV21P01AYbbtubNExBnXDbYjjZYI4BMdgEANDQoTElw/+Rw0mBs0UiSGaoJFEQEPwjRhFCW/JxrZ2Xdu1fe71bpAhCHzqupPnS5ObPOeec+5zb+lHLxao05HPiwvzr3/++J7N7FFGgaaDLe034+O+wCXyxSKET1u5+Wc98XTK39zeOzjudLmNIoAR2tlaf/Zkqm9gKNI/RBigE9dtb23MJKZj8fvuC16b3WGxsJRxOFfHeQOtH+ZnOI+XRfgEBoLAzz6fjo7ebfD4GYYhMiEdDGRAW6xOt6d7YGzl4xIL/7mgyPL044edkVt19T4EFAJEVQYud+MvOCkHc7MJ3+VrXGOzXrHeZS1s9trjOVj7tiqpONTWBRgD6BVmQFls9iMaSHnx/bu3ffEHgC2gVVqAIojKR3Iw9zLRcjVmtTnA0NydxQDg0IWvq59kYIOeZtWs9gQkagcMcgK/vLjYNXQHcEkas0AcYPdNIPr7Q/0M69B089ofavB5ZVm3OJ2cTwegzAUgxGbSe8tLS52xewjRZGabzAABZt+8mvGHBsiYNF+AAw1cXEBGNUiQqWpAlArM5MSYBXgEOl0NkLcCkxak28MRKbuDMa6KDAwAUnU8HO2Q+N0SJ3OLMCA7V1S9vt7d3tSg5LNV0ACXwOekcGfreVbVVYUqMjOvyPsH71cqkxsZ7NHFJIXBTCMONMAlEryoxAfDucyOmaOpmINyaTowrK23IyDxKbNzUIYoKU3+i37OXpCESvfGCOw11uMMcCkQke4rDlrS1coOSk2VOXftERfKtZsURmLXQUqBVqiUABgrQirc0Xp4Fv4t8kxN8dLkaJQupOVcGnTN0PuQHHlRSG1Eu9tUTLOnxZ5clclsfmK078va7/WN7axomCN2e42Xc/VEIoiiM0KePeM20DTY3M22BZtuhENW1rC/NrI3WVGTmZxSKEr7V4ABAJ+53J1I3nPjAAAAAElFTkSuQmCC) 0 8 0 14;
	border-width: 0 8px 0 14px;
}

 #topMenu .backButton .pressed {
	-webkit-border-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACsAAAAeCAIAAAA6iHCJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAsJJREFUeNrEV9tP01AYP6eXrZddyoAtDGkRHnwUjdEHEUKCaJyQIT4Y/z9jYgJE0QgENYjRRB+JZIMxCco2iQ4YdO3annM8XAJhgE9t98v30pyTfr/v991a+PzNF3AxdH1v7vV46Xdpe6sM3AKEqqr1D6aSl9T9p2dTny+6OT8zuZTJtrQmREEICqJbBAghhlEtFQtaR/v99FMOY3zuvYW5l9nlvKp1SXKY5XkIGeAeAoIsiHKh8PPD9ASHyTkMvi7MruTy7VqnHIpACAmhxLGLDCDDBKVQPNH2t7zNIUzqjk3DWMost8STohShfql34A0EMVzZqdAs1DuYfvUiqrTK4aazR24DsixfXwfzMxOmDeIx5SB4BLwGw5zSoKrv5deLqtZNAESIAO9Bwz9VB7NT4/F4G8Py3ut/BMc2TrKwMDtp2igshhDGwC/QUI8Y7GyV135tJju0g8Yj/jEglMGBu/czU02xZsjwCPvn/kSDb5/mHMJG5Aj2Uf8TDTbWV5eyqx3qZUIgAX6DTjyWCSpRReGCImkELEPnJDFoYc6gY6gRMBHHjIw9gcTcXzwQNsIIU9r8kxoetYxdQEhDZKADUDBr9rWeq7a5C+mu8N0YGrmFgNZ9pUWRHctogAaHNVksbPQNpgIswsjxmwGdCdSEkLK29uNeahRbe7RL/SvEYw0opEhzsVjs7RuoGRWfswCOjRcjXEBUk62WqftdB8cwHdJzsz8qc45d83wkE8IzmDk7KfO57MDQME9bxOOqRMiWxMCpLBxaOJZczmSGHqSJpWOEPBMAOKZ+/cbto16oMznWls/nHqbHgFO1a4a7W5u+zXEss7rd3dWpmwYHLvgdkJTEam5l5NHjj+/elrcqhgPdYkBzH5KF3rtpB6Edvcb9ZxuI0cT3xcVbd4YiIZHnONe+ThEyTIuOH1aI0sd/AgwAlqkuN/kCJYwAAAAASUVORK5CYII=) 0 8 0 14;
}
 #topMenu .ibutton{
	position: absolute;
	padding : 0px 7px 2px 6px;
	right: 6px;
	-webkit-border-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAeCAIAAACqmwlGAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAbVJREFUeNqUlEtLw0AUhSfJTRpTk5Za1FAfxS5sBVtfC7tQdOcv8C+6FURx50JBEUGwG0HrA5EqtlRtTNM0d+KtrqyCk8NAmJnzce7AzZW2do8ZY/d31bPjw1rt8aP1zn4qblq2nVkqr0xmc7QFzsOTw4PKxXkuX8xOLxqDZh/gOq1m42l/Z3u2OL+8sg63N9dXN1erG5sDg5aqarKi9AFWCofsiUw2f3q0Z49PKFZquLCwlkyPSrISMkaBfYsO6UrTDTORrpwdgazGreRw0OXsP5FNAgM0w0TOkCMTUCxugQxaFwMmJjIDIvMF6vkWmQlADFAYQAiQ+8IAmQF5SB/RBB72EroBj5TAAxR+A+fAMUQMBQEyR09w3I723hYEyAxM6kkQILPMIgqkHiYcQO0UOeELE45gElA9Ud4cvaTogApAv7qINQw5gCInE0bQ9YRa1fdSSVMuzuTcVoP4fwPIVipMyQroc/mxt5cH33P4X9OADumKDGRjEAPX62TskdF0qnJZfa6/eF6nD9D12Eg6MTtXUlS18eoATbZ60zF0rbxUHNA1+DUqqfnbnk9W13Fo+ynAAB714wGw06ZOAAAAAElFTkSuQmCC) 0 5 0 5;
	border-width: 0 5px 0 5px;
}


#topMenu .button {
	position: relative;
	// height: 28px;
        padding : 8px 8px 8px 8px;
        // margin-top: 16px;
	// line-height: 28px;
	-webkit-border-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAeCAIAAACqmwlGAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAbVJREFUeNqUlEtLw0AUhSfJTRpTk5Za1FAfxS5sBVtfC7tQdOcv8C+6FURx50JBEUGwG0HrA5EqtlRtTNM0d+KtrqyCk8NAmJnzce7AzZW2do8ZY/d31bPjw1rt8aP1zn4qblq2nVkqr0xmc7QFzsOTw4PKxXkuX8xOLxqDZh/gOq1m42l/Z3u2OL+8sg63N9dXN1erG5sDg5aqarKi9AFWCofsiUw2f3q0Z49PKFZquLCwlkyPSrISMkaBfYsO6UrTDTORrpwdgazGreRw0OXsP5FNAgM0w0TOkCMTUCxugQxaFwMmJjIDIvMF6vkWmQlADFAYQAiQ+8IAmQF5SB/RBB72EroBj5TAAxR+A+fAMUQMBQEyR09w3I723hYEyAxM6kkQILPMIgqkHiYcQO0UOeELE45gElA9Ud4cvaTogApAv7qINQw5gCInE0bQ9YRa1fdSSVMuzuTcVoP4fwPIVipMyQroc/mxt5cH33P4X9OADumKDGRjEAPX62TskdF0qnJZfa6/eF6nD9D12Eg6MTtXUlS18eoATbZ60zF0rbxUHNA1+DUqqfnbnk9W13Fo+ynAAB714wGw06ZOAAAAAElFTkSuQmCC) 0 5 0 5;
	border-width: 0 5px 0 5px;
}

.toolbar .button {
	position: relative;
	height: 28px;
        padding : 8px 8px 8px 8px;
        margin-top: 16px;
	line-height: 28px;
	-webkit-border-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAeCAIAAACqmwlGAAACJWlDQ1BJQ0MgUHJvZmlsZQAAeJyVkstrE1EUh7+ZIJFSgsqYhSiMqCAYSx4Ws0yaPkibNtMkJQ+6SWbSJDqZDJNJrOKif4Erd65cCMGdImhdudSF4AOkCzduRHDlg65i08U4ExBC8cCF7xzOPY/fveD7XTVNXQTahm3llubkUrki+/fwIXGaE0xV1a6ZVJQME23/EwLAx6tV09Ql/V7659krxrXd79sz4pfNyfcACFilcgWEECA1HE4AUs3hAiDdsk0bhCYgqc2qBsJdIGQVcikQBkCg4fALIFBz+DUQ6KsNG4Q9IGxoLQPE40Bcq3dVEBPAltZV2yAOgIN2u6OBbwBcVk3LBt874GKpXJGdkXt/IPEMxK/j2OZnGOzAuTfj2IUhBH/B09449mMZARCguxWLAiBM9eHY8mi03wB/AIZPRqPh49HooAjiI/hwRu1Z/b96CcJbOMp3dnZ8eG+7NIkdXQAIw8MElHcg8wru78Cl5xB8ADmgCGIs5h5HQwCmU9lVJbkuR+LR2SOe/P+trffcPqeAaaO2lgWCwDfTVgoud/v5BZe3Wotpl7Xq/IrLd5qpNS/HWsy5fKO6rLhcNzbyXn1dyYx7zXn59e5CflyzUHTZ6uU2XL7ZWfHytfq8N5uhr3k1W3bam58UWVZRSLKOTIQ4UWbB+ZMAgZMgKUuxyPWXu/7z/+pk17dtgFTHvG21Gk1bTpqmXg/JaUOdCcnRcDjOIYF5rvXkqWSvAAABuklEQVQ4jZ2UMWtUQRDHZ3ZnffjuDOrlvEsMHAqCIgQDIqeNCF4hYmGs/AoWksLWKqUWqfwQgmnE6gQRRFIEIrFQEATRUw45TcK9Z97bNzMWp4LPIvsctvz/Zn+zLIOpjgHg7srz/rO3wy8fd5Mt+Lvs/ubc0Xbv0snlpYsAgKmOF2/11zc2a53eocZsY8qWgNEOfx99Tj70zy7Mrz7o4e17jx8+eT9/YbExZWuRseU8MEOSyWiHN1+u3rx23G65c7Onrx9rO7IoCizlIwpk8UBsOD7xev0F/TAznZbzhZY7/1Odlhu8a5O6wwVrwXvmAQB03zShjTK/d/tJoY0IQMMBACXl3If5AIByTiB+N5NQQjypcs6hSqpMyrkvqiip+PChVTyBCkvwK6mQihcOdVLxJNk2p8NAQLJtAgBAE6oEUCH6G0CsEEc0sU3D8zVKJjNUuKSqkvmPoasChiLQsK+hisYZFzfFJyF58UlUnzFXz7c4GYQAnAyudJuY6vjG0tqrN58obiHFaF1ZhL0WaZEOz5yae7TSxV+79f7a043xt9HXPM9KgHH1I9MHLy/Ul+90YbJbQ3z+1E898dPExYV7UAAAAABJRU5ErkJggg==) 0 5 0 5;
	border-width: 0 5px 0 5px;
}

#topMenu .txtOptionInput  {
vertical-align: baseline;
}

.popup li a {display:block; padding:1em; font-weight:bold; cursor:pointer;}
.toolbar {height: 34px;}
.selected .toolbar a {color:#FFF;}
.selected .toolbar a:hover {color:#FFF;}


.tagged { float:left; }
.tagged li { display:inline; }  
.tagged { background:transparent  !important; border:0  !important; }
.tagged .button {color: [[ColorPalette::TiertiaryPale]] !important; }
.tiddler {padding:0em 1em 0em 1em;}

.tiddlerListItem .tiddlerListItemTitle, .tiddlerListItem  .tiddlerListItemTitle a {
line-height: 28px;
    font-size: 1.35em;
    color: #000;
    background: #FFF;
    text-decoration: none;
}

.tiddlerListItem {
   display: block;
   background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAUCAYAAAB4d5a9AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1woZERcgh0frmgAAALVJREFUeNrt1TEKAjEQheH/qZWNxd7GSmQX8QpewDN5BS8ggoiVt9nCZkufTXaJCxbirIU41YTAfCSZJLLN0DHiC/GjiKRSUhmNTHIAqFKO7dMQKxlneSVpGY7YPgLnbG4VBT2dSYIuPWgR3l22Dz1o/Sn0qoWvQJON55KmYYikGbAF2qI3YGe7ibonLVD0gDpku4YCOkTSCNgMAXSI7TuwT8VDAQDl/4mkIqF15Nul/6f1TjwAO6BGddCkxQkAAAAASUVORK5CYII=) no-repeat right center;
   padding-right: 24px;
   border:0; 
   border-top:dashed 1px [[ColorPalette::TertiaryDark]];
}

.tiddlerListItem a, .tiddlerListItem code {
    font-family: Arial;
    font-size: 1em;
    color: #333;
    background: #FFF;
    text-decoration: none;
}

.homeTitle {
    line-height: 28px;
    font-family: Arial;
    font-size: 2em;
    font-weight: bold;
    color:[[ColorPalette::SecondaryDark]];
    background: #FFF;
    text-decoration: none;
}
 
/*}}}*/
/*{{{*/
@media print {
   #topMenu {display: none ! important;}
}
/*}}}*/
<<sync>>
{{{
// Create a button for a tag with a popup listing all the tiddlers that it tags
//# title and tooltip arguments are optional
createTagButton  = function(place,tag,excludeTiddler,title,tooltip)
{
	if (tag == "Menu")
		var onClick = onClickMenuTag;
	else
		var onClick = onClickTag;
	var btn = createTiddlyButton(place,title||tag,(tooltip||config.views.wikified.tag.tooltip).format([tag]), onClick);
	btn.setAttribute("tag",tag);
	if(excludeTiddler)
		btn.setAttribute("tiddler",excludeTiddler);
	return btn;
}


// Event handler for clicking on a tiddler tag
function onClickMenuTag(ev)
{
	var e = ev || window.event;
	var popup = Popup.create(this);
	var tag = this.getAttribute("tag");
	var title = this.getAttribute("tiddler");
	if(popup && tag) {
		var tagged = store.getTaggedTiddlers(tag);
		var titles = [];
		var li,r;
		for(r=0;r<tagged.length;r++) {
			if(tagged[r].title != title)
				titles.push(tagged[r].title);
		}
		var lingo = config.views.wikified.tag;
		if(titles.length > 0) {
			for(r=0; r<titles.length; r++) {
				//function(place,title,params,label,prompt,accessKey,newFocus,isJournal)
				if (titles[r] == "<<newTiddler>>")
					config.macros.newTiddler.createNewTiddlerButton(createTiddlyElement(popup,"li"),"New Tiddler ","","New Tiddler", "create a new tiddler");
				else
					createTiddlyLink(createTiddlyElement(popup,"li"),titles[r],true);
			}
			
		} else {
			createTiddlyText(createTiddlyElement(popup,"li",null,"disabled"),lingo.popupNone.format([tag]));
		}
	}
	Popup.show();
	e.cancelBubble = true;
	if(e.stopPropagation) e.stopPropagation();
	return false;
}


}}}
TiddlyWiki is a powerful [[wiki|http://en.wikipedia.org/wiki/Wiki]] in a single html file which possesses all the features needed to manage and to outline personal notes in an efficient way.

No facility is required. You only need to download an empty TiddlyWiki on your desktop to start to use it. It can be stored on USB stick. To send it  just attached it to mail. You can also upload it on web server to publish a whole site.

TiddlyWiki was created by Jeremy Ruston. TiddlyWiki is distributed under a BSD Open Source License (see the source of this page).

For details visit [[www.TiddlyWiki.com|http://www.tiddlywiki.com]].

Current Version: <<version>>
<<back>>
<<tag Menu>>
<<history>>
<<forward>>
<<search>>
/***
|''Name:''|UploadPlugin|
|''Description:''|Save to web a TiddlyWiki|
|''Version:''|4.1.4|
|''Date:''|2008-08-11|
|''Source:''|http://tiddlywiki.bidix.info/#UploadPlugin|
|''Documentation:''|http://tiddlywiki.bidix.info/#UploadPluginDoc|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0|
|''Requires:''|PasswordOptionPlugin|
***/
//{{{
version.extensions.UploadPlugin = {
	major: 4, minor: 1, revision: 4,
	date: new Date("2008-08-11"),
	source: 'http://tiddlywiki.bidix.info/#UploadPlugin',
	author: 'BidiX (BidiX (at) bidix (dot) info',
	coreVersion: '2.2.0'
};

//
// Environment
//

if (!window.bidix) window.bidix = {}; // bidix namespace
bidix.debugMode = false;	// true to activate both in Plugin and UploadService
	
//
// Upload Macro
//

config.macros.upload = {
// default values
	defaultBackupDir: '',	//no backup
	defaultStoreScript: "store.php",
	defaultToFilename: "index.html",
	defaultUploadDir: ".",
	authenticateUser: true	// UploadService Authenticate User
};
	
config.macros.upload.label = {
	promptOption: "Save and Upload this TiddlyWiki with UploadOptions",
	promptParamMacro: "Save and Upload this TiddlyWiki in %0",
	saveLabel: "save to web", 
	saveToDisk: "save to disk",
	uploadLabel: "upload"	
};

config.macros.upload.messages = {
	noStoreUrl: "No store URL in parmeters or options",
	usernameOrPasswordMissing: "Username or password missing"
};

config.macros.upload.handler = function(place,macroName,params) {
	if (readOnly)
		return;
	var label;
	if (document.location.toString().substr(0,4) == "http") 
		label = this.label.saveLabel;
	else
		label = this.label.uploadLabel;
	var prompt;
	if (params[0]) {
		prompt = this.label.promptParamMacro.toString().format([this.destFile(params[0], 
			(params[1] ? params[1]:bidix.basename(window.location.toString())), params[3])]);
	} else {
		prompt = this.label.promptOption;
	}
	createTiddlyButton(place, label, prompt, function() {config.macros.upload.action(params);}, null, null, this.accessKey);
};

config.macros.upload.action = function(params)
{
		// for missing macro parameter set value from options
		if (!params) params = {};
		var storeUrl = params[0] ? params[0] : config.options.txtUploadStoreUrl;
		var toFilename = params[1] ? params[1] : config.options.txtUploadFilename;
		var backupDir = params[2] ? params[2] : config.options.txtUploadBackupDir;
		var uploadDir = params[3] ? params[3] : config.options.txtUploadDir;
		var username = params[4] ? params[4] : config.options.txtUploadUserName;
		var password = config.options.pasUploadPassword; // for security reason no password as macro parameter	
		// for still missing parameter set default value
		if ((!storeUrl) && (document.location.toString().substr(0,4) == "http")) 
			storeUrl = bidix.dirname(document.location.toString())+'/'+config.macros.upload.defaultStoreScript;
		if (storeUrl.substr(0,4) != "http")
			storeUrl = bidix.dirname(document.location.toString()) +'/'+ storeUrl;
		if (!toFilename)
			toFilename = bidix.basename(window.location.toString());
		if (!toFilename)
			toFilename = config.macros.upload.defaultToFilename;
		if (!uploadDir)
			uploadDir = config.macros.upload.defaultUploadDir;
		if (!backupDir)
			backupDir = config.macros.upload.defaultBackupDir;
		// report error if still missing
		if (!storeUrl) {
			alert(config.macros.upload.messages.noStoreUrl);
			clearMessage();
			return false;
		}
		if (config.macros.upload.authenticateUser && (!username || !password)) {
			alert(config.macros.upload.messages.usernameOrPasswordMissing);
			clearMessage();
			return false;
		}
		bidix.upload.uploadChanges(false,null,storeUrl, toFilename, uploadDir, backupDir, username, password); 
		return false; 
};

config.macros.upload.destFile = function(storeUrl, toFilename, uploadDir) 
{
	if (!storeUrl)
		return null;
		var dest = bidix.dirname(storeUrl);
		if (uploadDir && uploadDir != '.')
			dest = dest + '/' + uploadDir;
		dest = dest + '/' + toFilename;
	return dest;
};

//
// uploadOptions Macro
//

config.macros.uploadOptions = {
	handler: function(place,macroName,params) {
		var wizard = new Wizard();
		wizard.createWizard(place,this.wizardTitle);
		wizard.addStep(this.step1Title,this.step1Html);
		var markList = wizard.getElement("markList");
		var listWrapper = document.createElement("div");
		markList.parentNode.insertBefore(listWrapper,markList);
		wizard.setValue("listWrapper",listWrapper);
		this.refreshOptions(listWrapper,false);
		var uploadCaption;
		if (document.location.toString().substr(0,4) == "http") 
			uploadCaption = config.macros.upload.label.saveLabel;
		else
			uploadCaption = config.macros.upload.label.uploadLabel;
		
		wizard.setButtons([
				{caption: uploadCaption, tooltip: config.macros.upload.label.promptOption, 
					onClick: config.macros.upload.action},
				{caption: this.cancelButton, tooltip: this.cancelButtonPrompt, onClick: this.onCancel}
				
			]);
	},
	options: [
		"txtUploadUserName",
		"pasUploadPassword",
		"txtUploadStoreUrl",
		"txtUploadDir",
		"txtUploadFilename",
		"txtUploadBackupDir",
		"chkUploadLog",
		"txtUploadLogMaxLine"		
	],
	refreshOptions: function(listWrapper) {
		var opts = [];
		for(i=0; i<this.options.length; i++) {
			var opt = {};
			opts.push();
			opt.option = "";
			n = this.options[i];
			opt.name = n;
			opt.lowlight = !config.optionsDesc[n];
			opt.description = opt.lowlight ? this.unknownDescription : config.optionsDesc[n];
			opts.push(opt);
		}
		var listview = ListView.create(listWrapper,opts,this.listViewTemplate);
		for(n=0; n<opts.length; n++) {
			var type = opts[n].name.substr(0,3);
			var h = config.macros.option.types[type];
			if (h && h.create) {
				h.create(opts[n].colElements['option'],type,opts[n].name,opts[n].name,"no");
			}
		}
		
	},
	onCancel: function(e)
	{
		backstage.switchTab(null);
		return false;
	},
	
	wizardTitle: "Upload with options",
	step1Title: "These options are saved in cookies in your browser",
	step1Html: "<input type='hidden' name='markList'></input><br>",
	cancelButton: "Cancel",
	cancelButtonPrompt: "Cancel prompt",
	listViewTemplate: {
		columns: [
			{name: 'Description', field: 'description', title: "Description", type: 'WikiText'},
			{name: 'Option', field: 'option', title: "Option", type: 'String'},
			{name: 'Name', field: 'name', title: "Name", type: 'String'}
			],
		rowClasses: [
			{className: 'lowlight', field: 'lowlight'} 
			]}
};

//
// upload functions
//

if (!bidix.upload) bidix.upload = {};

if (!bidix.upload.messages) bidix.upload.messages = {
	//from saving
	invalidFileError: "The original file '%0' does not appear to be a valid TiddlyWiki",
	backupSaved: "Backup saved",
	backupFailed: "Failed to upload backup file",
	rssSaved: "RSS feed uploaded",
	rssFailed: "Failed to upload RSS feed file",
	emptySaved: "Empty template uploaded",
	emptyFailed: "Failed to upload empty template file",
	mainSaved: "Main TiddlyWiki file uploaded",
	mainFailed: "Failed to upload main TiddlyWiki file. Your changes have not been saved",
	//specific upload
	loadOriginalHttpPostError: "Can't get original file",
	aboutToSaveOnHttpPost: 'About to upload on %0 ...',
	storePhpNotFound: "The store script '%0' was not found."
};

bidix.upload.uploadChanges = function(onlyIfDirty,tiddlers,storeUrl,toFilename,uploadDir,backupDir,username,password)
{
	var callback = function(status,uploadParams,original,url,xhr) {
		if (!status) {
			displayMessage(bidix.upload.messages.loadOriginalHttpPostError);
			return;
		}
		if (bidix.debugMode) 
			alert(original.substr(0,500)+"\n...");
		// Locate the storeArea div's 
		var posDiv = locateStoreArea(original);
		if((posDiv[0] == -1) || (posDiv[1] == -1)) {
			alert(config.messages.invalidFileError.format([localPath]));
			return;
		}
		bidix.upload.uploadRss(uploadParams,original,posDiv);
	};
	
	if(onlyIfDirty && !store.isDirty())
		return;
	clearMessage();
	// save on localdisk ?
	if (document.location.toString().substr(0,4) == "file") {
		var path = document.location.toString();
		var localPath = getLocalPath(path);
		saveChanges();
	}
	// get original
	var uploadParams = new Array(storeUrl,toFilename,uploadDir,backupDir,username,password);
	var originalPath = document.location.toString();
	// If url is a directory : add index.html
	if (originalPath.charAt(originalPath.length-1) == "/")
		originalPath = originalPath + "index.html";
	var dest = config.macros.upload.destFile(storeUrl,toFilename,uploadDir);
	var log = new bidix.UploadLog();
	log.startUpload(storeUrl, dest, uploadDir,  backupDir);
	displayMessage(bidix.upload.messages.aboutToSaveOnHttpPost.format([dest]));
	if (bidix.debugMode) 
		alert("about to execute Http - GET on "+originalPath);
	var r = doHttp("GET",originalPath,null,null,username,password,callback,uploadParams,null);
	if (typeof r == "string")
		displayMessage(r);
	return r;
};

bidix.upload.uploadRss = function(uploadParams,original,posDiv) 
{
	var callback = function(status,params,responseText,url,xhr) {
		if(status) {
			var destfile = responseText.substring(responseText.indexOf("destfile:")+9,responseText.indexOf("\n", responseText.indexOf("destfile:")));
			displayMessage(bidix.upload.messages.rssSaved,bidix.dirname(url)+'/'+destfile);
			bidix.upload.uploadMain(params[0],params[1],params[2]);
		} else {
			displayMessage(bidix.upload.messages.rssFailed);			
		}
	};
	// do uploadRss
	if(config.options.chkGenerateAnRssFeed) {
		var rssPath = uploadParams[1].substr(0,uploadParams[1].lastIndexOf(".")) + ".xml";
		var rssUploadParams = new Array(uploadParams[0],rssPath,uploadParams[2],'',uploadParams[4],uploadParams[5]);
		var rssString = generateRss();
		// no UnicodeToUTF8 conversion needed when location is "file" !!!
		if (document.location.toString().substr(0,4) != "file")
			rssString = convertUnicodeToUTF8(rssString);	
		bidix.upload.httpUpload(rssUploadParams,rssString,callback,Array(uploadParams,original,posDiv));
	} else {
		bidix.upload.uploadMain(uploadParams,original,posDiv);
	}
};

bidix.upload.uploadMain = function(uploadParams,original,posDiv) 
{
	var callback = function(status,params,responseText,url,xhr) {
		var log = new bidix.UploadLog();
		if(status) {
			// if backupDir specified
			if ((params[3]) && (responseText.indexOf("backupfile:") > -1))  {
				var backupfile = responseText.substring(responseText.indexOf("backupfile:")+11,responseText.indexOf("\n", responseText.indexOf("backupfile:")));
				displayMessage(bidix.upload.messages.backupSaved,bidix.dirname(url)+'/'+backupfile);
			}
			var destfile = responseText.substring(responseText.indexOf("destfile:")+9,responseText.indexOf("\n", responseText.indexOf("destfile:")));
			displayMessage(bidix.upload.messages.mainSaved,bidix.dirname(url)+'/'+destfile);
			store.setDirty(false);
			log.endUpload("ok");
		} else {
			alert(bidix.upload.messages.mainFailed);
			displayMessage(bidix.upload.messages.mainFailed);
			log.endUpload("failed");			
		}
	};
	// do uploadMain
	var revised = bidix.upload.updateOriginal(original,posDiv);
	bidix.upload.httpUpload(uploadParams,revised,callback,uploadParams);
};

bidix.upload.httpUpload = function(uploadParams,data,callback,params)
{
	var localCallback = function(status,params,responseText,url,xhr) {
		url = (url.indexOf("nocache=") < 0 ? url : url.substring(0,url.indexOf("nocache=")-1));
		if (xhr.status == 404)
			alert(bidix.upload.messages.storePhpNotFound.format([url]));
		if ((bidix.debugMode) || (responseText.indexOf("Debug mode") >= 0 )) {
			alert(responseText);
			if (responseText.indexOf("Debug mode") >= 0 )
				responseText = responseText.substring(responseText.indexOf("\n\n")+2);
		} else if (responseText.charAt(0) != '0') 
			alert(responseText);
		if (responseText.charAt(0) != '0')
			status = null;
		callback(status,params,responseText,url,xhr);
	};
	// do httpUpload
	var boundary = "---------------------------"+"AaB03x";	
	var uploadFormName = "UploadPlugin";
	// compose headers data
	var sheader = "";
	sheader += "--" + boundary + "\r\nContent-disposition: form-data; name=\"";
	sheader += uploadFormName +"\"\r\n\r\n";
	sheader += "backupDir="+uploadParams[3] +
				";user=" + uploadParams[4] +
				";password=" + uploadParams[5] +
				";uploaddir=" + uploadParams[2];
	if (bidix.debugMode)
		sheader += ";debug=1";
	sheader += ";;\r\n"; 
	sheader += "\r\n" + "--" + boundary + "\r\n";
	sheader += "Content-disposition: form-data; name=\"userfile\"; filename=\""+uploadParams[1]+"\"\r\n";
	sheader += "Content-Type: text/html;charset=UTF-8" + "\r\n";
	sheader += "Content-Length: " + data.length + "\r\n\r\n";
	// compose trailer data
	var strailer = new String();
	strailer = "\r\n--" + boundary + "--\r\n";
	data = sheader + data + strailer;
	if (bidix.debugMode) alert("about to execute Http - POST on "+uploadParams[0]+"\n with \n"+data.substr(0,500)+ " ... ");
	var r = doHttp("POST",uploadParams[0],data,"multipart/form-data; ;charset=UTF-8; boundary="+boundary,uploadParams[4],uploadParams[5],localCallback,params,null);
	if (typeof r == "string")
		displayMessage(r);
	return r;
};

// same as Saving's updateOriginal but without convertUnicodeToUTF8 calls
bidix.upload.updateOriginal = function(original, posDiv)
{
	if (!posDiv)
		posDiv = locateStoreArea(original);
	if((posDiv[0] == -1) || (posDiv[1] == -1)) {
		alert(config.messages.invalidFileError.format([localPath]));
		return;
	}
	var revised = original.substr(0,posDiv[0] + startSaveArea.length) + "\n" +
				store.allTiddlersAsHtml() + "\n" +
				original.substr(posDiv[1]);
	var newSiteTitle = getPageTitle().htmlEncode();
	revised = revised.replaceChunk("<title"+">","</title"+">"," " + newSiteTitle + " ");
	revised = updateMarkupBlock(revised,"PRE-HEAD","MarkupPreHead");
	revised = updateMarkupBlock(revised,"POST-HEAD","MarkupPostHead");
	revised = updateMarkupBlock(revised,"PRE-BODY","MarkupPreBody");
	revised = updateMarkupBlock(revised,"POST-SCRIPT","MarkupPostBody");
	return revised;
};

//
// UploadLog
// 
// config.options.chkUploadLog :
//		false : no logging
//		true : logging
// config.options.txtUploadLogMaxLine :
//		-1 : no limit
//      0 :  no Log lines but UploadLog is still in place
//		n :  the last n lines are only kept
//		NaN : no limit (-1)

bidix.UploadLog = function() {
	if (!config.options.chkUploadLog) 
		return; // this.tiddler = null
	this.tiddler = store.getTiddler("UploadLog");
	if (!this.tiddler) {
		this.tiddler = new Tiddler();
		this.tiddler.title = "UploadLog";
		this.tiddler.text = "| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |";
		this.tiddler.created = new Date();
		this.tiddler.modifier = config.options.txtUserName;
		this.tiddler.modified = new Date();
		store.addTiddler(this.tiddler);
	}
	return this;
};

bidix.UploadLog.prototype.addText = function(text) {
	if (!this.tiddler)
		return;
	// retrieve maxLine when we need it
	var maxLine = parseInt(config.options.txtUploadLogMaxLine,10);
	if (isNaN(maxLine))
		maxLine = -1;
	// add text
	if (maxLine != 0) 
		this.tiddler.text = this.tiddler.text + text;
	// Trunck to maxLine
	if (maxLine >= 0) {
		var textArray = this.tiddler.text.split('\n');
		if (textArray.length > maxLine + 1)
			textArray.splice(1,textArray.length-1-maxLine);
			this.tiddler.text = textArray.join('\n');		
	}
	// update tiddler fields
	this.tiddler.modifier = config.options.txtUserName;
	this.tiddler.modified = new Date();
	store.addTiddler(this.tiddler);
	// refresh and notifiy for immediate update
	story.refreshTiddler(this.tiddler.title);
	store.notify(this.tiddler.title, true);
};

bidix.UploadLog.prototype.startUpload = function(storeUrl, toFilename, uploadDir,  backupDir) {
	if (!this.tiddler)
		return;
	var now = new Date();
	var text = "\n| ";
	var filename = bidix.basename(document.location.toString());
	if (!filename) filename = '/';
	text += now.formatString("0DD/0MM/YYYY 0hh:0mm:0ss") +" | ";
	text += config.options.txtUserName + " | ";
	text += "[["+filename+"|"+location + "]] |";
	text += " [[" + bidix.basename(storeUrl) + "|" + storeUrl + "]] | ";
	text += uploadDir + " | ";
	text += "[[" + bidix.basename(toFilename) + " | " +toFilename + "]] | ";
	text += backupDir + " |";
	this.addText(text);
};

bidix.UploadLog.prototype.endUpload = function(status) {
	if (!this.tiddler)
		return;
	this.addText(" "+status+" |");
};

//
// Utilities
// 

bidix.checkPlugin = function(plugin, major, minor, revision) {
	var ext = version.extensions[plugin];
	if (!
		(ext  && 
			((ext.major > major) || 
			((ext.major == major) && (ext.minor > minor))  ||
			((ext.major == major) && (ext.minor == minor) && (ext.revision >= revision))))) {
			// write error in PluginManager
			if (pluginInfo)
				pluginInfo.log.push("Requires " + plugin + " " + major + "." + minor + "." + revision);
			eval(plugin); // generate an error : "Error: ReferenceError: xxxx is not defined"
	}
};

bidix.dirname = function(filePath) {
	if (!filePath) 
		return;
	var lastpos;
	if ((lastpos = filePath.lastIndexOf("/")) != -1) {
		return filePath.substring(0, lastpos);
	} else {
		return filePath.substring(0, filePath.lastIndexOf("\\"));
	}
};

bidix.basename = function(filePath) {
	if (!filePath) 
		return;
	var lastpos;
	if ((lastpos = filePath.lastIndexOf("#")) != -1) 
		filePath = filePath.substring(0, lastpos);
	if ((lastpos = filePath.lastIndexOf("/")) != -1) {
		return filePath.substring(lastpos + 1);
	} else
		return filePath.substring(filePath.lastIndexOf("\\")+1);
};

bidix.initOption = function(name,value) {
	if (!config.options[name])
		config.options[name] = value;
};

//
// Initializations
//

// require PasswordOptionPlugin 1.0.1 or better
bidix.checkPlugin("PasswordOptionPlugin", 1, 0, 1);

// styleSheet
setStylesheet('.txtUploadStoreUrl, .txtUploadBackupDir, .txtUploadDir {width: 22em;}',"uploadPluginStyles");

//optionsDesc
merge(config.optionsDesc,{
	txtUploadStoreUrl: "Url of the UploadService script (default: store.php)",
	txtUploadFilename: "Filename of the uploaded file (default: in index.html)",
	txtUploadDir: "Relative Directory where to store the file (default: . (downloadService directory))",
	txtUploadBackupDir: "Relative Directory where to backup the file. If empty no backup. (default: ''(empty))",
	txtUploadUserName: "Upload Username",
	pasUploadPassword: "Upload Password",
	chkUploadLog: "do Logging in UploadLog (default: true)",
	txtUploadLogMaxLine: "Maximum of lines in UploadLog (default: 10)"
});

// Options Initializations
bidix.initOption('txtUploadStoreUrl','');
bidix.initOption('txtUploadFilename','');
bidix.initOption('txtUploadDir','');
bidix.initOption('txtUploadBackupDir','');
bidix.initOption('txtUploadUserName','');
bidix.initOption('pasUploadPassword','');
bidix.initOption('chkUploadLog',true);
bidix.initOption('txtUploadLogMaxLine','10');


// Backstage
merge(config.tasks,{
	uploadOptions: {text: "upload", tooltip: "Change UploadOptions and Upload", content: '<<uploadOptions>>'}
});
config.backstageTasks.push("uploadOptions");


//}}}

/***
|''Name:''|UploadTiddlerPlugin|
|''Description:''|Upload a tiddler and Update a remote TiddlyWiki |
|''Version:''|1.2.1|
|''Date:''|2008-08-19|
|''Source:''|http://tiddlywiki.bidix.info/#UploadTiddlerPlugin|
|''Usage:''|Uses {{{uploadOptions>>}}}<br>with those UploadTiddler Options : <br>chkUploadTiddler: <<option chkUploadTiddler>><br>txtUploadTiddlerStoreUrl: <<option txtUploadTiddlerStoreUrl>>|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''[[License]]:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''CoreVersion:''|2.3.0|
***/
//{{{
version.extensions.UploadTiddlerPlugin = {
	major: 1, minor: 2, revision: 1, 
	date: new Date("2008-08-11"),
	source: 'http://tiddlywiki.bidix.info/#UploadTiddlerPlugin',
	author: 'BidiX (BidiX (at) bidix (dot) info',
	coreVersion: '2.3.0'
};

if (!window.bidix) window.bidix = {}; // bidix namespace
bidix.debugMode = false;
bidix.uploadTiddler = {
	messages: {
		aboutToSaveTiddler: "About to update tiddler '%0'...",
		storeTiddlerNotFound: "Script store tiddler '%0' not found",
		tiddlerSaved: "Tiddler '%0' updated in '%1'"
	},
	upload: function(title,tiddler,oldTitle) {
		var callback = function(status,params,responseText,url,xhr) {
			if (xhr.status == 404) {
				alert(bidix.uploadTiddler.messages.storeTiddlerNotFound.format([url]));
				return;
			}
			if ((bidix.debugMode) || (responseText.indexOf("Debug mode") >= 0 )) {
				alert(responseText);
				if (responseText.indexOf("Debug mode") >= 0 )
					responseText = responseText.substring(responseText.indexOf("\n\n")+2);
			} else if (responseText.charAt(0) != '0') 
				alert(responseText);
			else 
				displayMessage(bidix.uploadTiddler.messages.tiddlerSaved.format([params[0], params[1]]));
				store.setDirty(false);
			}

		if ((config.options['chkUploadTiddler']) && (document.location.toString().substr(0,4) == "http")){
			displayMessage(bidix.uploadTiddler.messages.aboutToSaveTiddler.format([title]));
			var ExtTiddler = null;
			var html = null;
			if (tiddler) {
				ExtTiddler = store.getSaver().externalizeTiddler(store,tiddler);
				html = wikifyStatic(tiddler.text,null,tiddler).htmlEncode();
			}
			var form = "title="+encodeURIComponent(title);
			form = form + "&tiddler="+(ExtTiddler?encodeURIComponent(ExtTiddler):'');
			form = form + "&html="+(html?encodeURIComponent(html):'');
			var filename = (config.options['txtUploadFilename']?config.options['txtUploadFilename']:'index.html');
			form = form +"&oldTitle="+encodeURIComponent(oldTitle);
			form = form +"&fileName="+encodeURIComponent(filename);
			form = form +"&backupDir="+encodeURIComponent(config.options['txtUploadBackupDir']);
			form = form +"&user="+encodeURIComponent(config.options['txtUploadUserName']);
			form = form +"&password="+encodeURIComponent(config.options['pasUploadPassword']);
			form = form +"&uploadir="+encodeURIComponent(config.options['txtUploadDir']);
			form = form +"&debug="+encodeURIComponent(0);
			var storeScript = (config.options.txtUploadTiddlerStoreUrl 
								? config.options.txtUploadTiddlerStoreUrl : 'storeTiddler.php');
			var r = doHttp("POST",storeScript,form+"\n",'application/x-www-form-urlencoded',
				config.options['txtUploadUserName'],config.options['pasUploadPassword'],callback,Array(title,filename),null);
		}
	}
}
TiddlyWiki.prototype.saveTiddler_bidix = TiddlyWiki.prototype.saveTiddler;
TiddlyWiki.prototype.saveTiddler = function(oldTitle,newTitle,newBody,modifier,modified,tags,fields,clearChangeCount,created) {
	var tiddler = TiddlyWiki.prototype.saveTiddler_bidix.apply(this,arguments);
	var title = (newTitle?newTitle:oldTitle);
	if (oldTitle == title)
		oldTitle = '';
	bidix.uploadTiddler.upload(title, tiddler, oldTitle);
}
TiddlyWiki.prototype.removeTiddler_bidix =TiddlyWiki.prototype.removeTiddler;
TiddlyWiki.prototype.removeTiddler = function(title) {
	TiddlyWiki.prototype.removeTiddler_bidix.apply(this,arguments);
	bidix.uploadTiddler.upload(title, null);
}

//
// Initializations
//

bidix.initOption = function(name,value) {
	if (!config.options[name])
		config.options[name] = value;
};

// styleSheet
setStylesheet('.txtUploadTiddlerStoreUrl {width: 22em;}',"uploadTiddlerPluginStyles");

//optionsDesc
merge(config.optionsDesc,{
	txtUploadTiddlerStoreUrl: "Url of the UploadTiddlerService script (default: storeTiddler.php)",
	chkUploadTiddler: "Do per Tiddler upload using txtUploadTiddlerStoreUrl (default: false)"
});

// Options Initializations
bidix.initOption('txtUploadTiddlerStoreUrl','');
bidix.initOption('chkUploadTiddler','');

// add options in backstage UploadOptions
if (config.macros.uploadOptions) {
	if (config.macros.uploadOptions.options) {
		config.macros.uploadOptions.options.push("txtUploadTiddlerStoreUrl","chkUploadTiddler");
	}
}

//}}}

<!--{{{-->
<div class='toolbar' macro='toolbar +editTiddler > closeTiddler permalink references'></div>
<div macro="hideWhenTaggedAny noTitle">
    <div class='title' macro='view title'></div>
</div>
<div macro="hideWhenTaggedAny systemTool systemList">
    <div class='tagged' macro='tags'></div>
</div>
<div class='tagClear'></div>
<div class='viewer' macro='view text wikified'></div>
<div macro="showWhenTagged [[systemList]]">
<div class='viewer' macro="listByTag '' modified  ''"></div>
</div>
<div class='tagClear'></div>
<!--}}}-->
|''Type:''|file|
|''URL:''|http://itw.bidix.info/iTWRepository/index.html|
|''Workspace:''|(default)|

//// iTW specific tweaks :

//// This settings always overwrite core defaults or previous cookies,
//// but they can be changed temporarily using [[Options]] or AdvancedOptions
//// Edit this to fix your default values for this iTW

//{{{

// UserName : 
config.options.txtUserName = "YourName";

// save policy
config.options.chkAutosave = true;
config.options.chkSaveBackups = true;
config.options.txtBackupFolder = "backup";

// upload policy
config.options.txtUploadUserName = "YourName";
config.options.txtUploadFilename = "index.html";
config.options.txtUploadStoreUrl = "http://itw.bidix.info/YourSite/store.php";
config.options.txtUploadDir = ".";
config.options.txtUploadBackupDir = "backup";
config.options.chkUploadLog = true;
config.options.txtUploadLogMaxLine = 3;
config.options. chkUploadTiddler = true;
config.options.txtUploadTiddlerStoreUrl = "storeTiddler.php";

// Always editable
config.options.chkHttpReadOnly = false;
readOnly = false;

// no backstage
showBackstage = false;
backstage.init = {};
//}}}
////iTW presentation tweaks
//{{{
// some label tweaks
merge(config.views.wikified.tag,{
 labelNoTags: "",
 labelTags: ""});
config.macros.search.label = "";
config.macros.toolbar.moreLabel = "+";

// some shadow initializations
merge(config.shadowTiddlers,{
	SiteTitle: "iTW",
	SiteSubtitle: "a TiddlyWiki for iPhone",
	SiteUrl: "http:/itw.bidix.info/YourSite",
	});

//}}}

<html>
<table>
<tr>
     <td><img src="07/zHen-A.png" style="height:250px"></td>
     <td><img src="07/zHen-B.png" style="height:250px"></td>
     <td><img src="07/zHen-C.png" style="height:250px"></td>
</tr>
<tr>
     <td><img src="07/zHen-D.png" style="height:250px"></td>
     <td><img src="07/zHen-E.png" style="height:250px"></td>
     <td><img src="07/zHen-F.png" style="height:250px"></td>
</tr>
<tr>
     <td><img src="07/zHen-G.png" style="height:250px"></td>
     <td><img src="07/zHen-H.png" style="height:250px"></td>
     <td><img src="07/zHen-I.png" style="height:250px"></td>
</tr>
<tr>
     <td><img src="07/zHen-J.png" style="height:250px"></td>
     <td><img src="07/zHen-K.png" style="height:250px"></td>
     <td><img src="07/zHen-L.png" style="height:250px"></td>
</tr>
<tr>
     <td><img src="07/zHen-M.png" style="height:250px"></td>
     <td><img src="07/zHen-N.png" style="height:250px"></td>
     <td><img src="07/zHen-O.png" style="height:250px"></td>
</tr>
</table>
</html>