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>>
/*{{{*/

window.saveChanges = function(){};

setStylesheet(
	"label {width:8em; float:left; text-align:right; width:9em; font-size:1.1em; padding:3px;  height:1.5em: top:-20px; margin: 0px -2px 0 0;}"+ 
//	"div.wizardFooter {padding-left:0em}"+ 
	"div.wizardStep > input {display:fixed; padding:3px; margin-bottom:5px; margin-top:0px; margin-right:0px}",
'labelStyles');

merge(config.macros.importTiddlers, {
	wizardTitle: "Import tiddlers",
	step1Title: "Step 1: Locate the server or TiddlyWiki file",
	step1Html: "Specify the type of the server: <select name='selTypes'><option value=''>Choose...</option></select><br>Enter the URL here: <input type='text' size=50 name='txtPath'><br><input type='hidden' size=50 name='txtBrowse'><br><hr>...or select a pre-defined feed: <select name='selFeeds'><option value=''>Choose...</option></select>"
});

merge(config.optionsDesc,{
	txtUserName: "",
	chkRegExpSearch: "Enable regular expressions for searches",
	chkCaseSensitiveSearch: "Case-sensitive searching",
	chkIncrementalSearch: "Incremental key-by-key searching",
	chkAnimate: "Enable animations",
	chkSaveBackups: "",
	chkAutoSave: "",
	txtTheme: "Change the TiddlyWiki theme being used",
	chkGenerateAnRssFeed: "",
	chkSaveEmptyTemplate: "",
	chkOpenInNewWindow: "Open external links in a new window",
	chkToggleLinks: "Clicking on links to open tiddlers causes them to close",
	chkHttpReadOnly: "",
	chkForceMinorUpdate: "",
	chkConfirmDelete: "Require confirmation before deleting tiddlers",
	chkInsertTabs: "Use the tab key to insert tab characters instead of moving between fields",
	txtBackupFolder: "",
	txtMaxEditRows: "Maximum number of rows in edit boxes",
	txtFileSystemCharSet: "Default character set for saving changes (Firefox/Mozilla only)"});

merge(config.macros.options,{
	wizardTitle: "Change Settings",
	step1Title: "",
	step1Html: '
These options are saved in a cookie.' }); merge(config.macros.options,{ wizardTitle:"Advanced settings", step1Title:null, unknownDescription: "//(unknown)//", listViewTemplate: { columns: [ {name: 'Option', field: 'option', title: "", type: 'String'}, {name: 'Description', field: 'description', title: "", type: 'WikiText'} ], rowClasses: [ {className: 'lowlight', field: 'lowlight'} ] } }); window.ccTiddlyVersion = '1.7.6'; window.workspacePermission= {}; window.url = "http://rhubarbtech.com/august23"; window.url= 'http://rhubarbtech.com/august23/'; window.workspace = ""; window.fullUrl = window.url; if (config.options.txtTheme == "") config.options.txtTheme = 'Blackicity'; workspacePermission.create = 1; workspacePermission.upload = 1;workspacePermission.owner = 1;workspacePermission.anonC = 0 ; workspacePermission.anonR = 1; workspacePermission.anonU = 0; workspacePermission.anonD = 0; workspacePermission.userC = 1 ; workspacePermission.userR = 1; workspacePermission.userU = 1; workspacePermission.userD = 1; workspacePermission.canCreateWorkspace = 1; window.workspace_delete = "A"; window.workspace_udate = "A"; var serverside={ url:"http://rhubarbtech.com/august23", //server url, for use in local TW or TW hosted elsewhere workspace:"", queryString:"standalone=1", debug:0, //debug mode, display alert box for each action passwordTime:0, //defines how long password variable store in cookie. 0 = indefinite messageDuration:5000, //displayMessage autoclose duration (in milliseconds), 0=leave open loggedIn:0, can_create_account:"0", openId:"0" }; config.defaultCustomFields = {"server.host":window.url, "server.type":"cctiddly", "server.workspace":window.workspace}; config.shadowTiddlers.OptionsPanel = "[[help|Help]] <br />[[settings|AdvancedOptions]]<br /><<ccOptions>>"; readOnly =false; config.options.chkHttpReadOnly = false; //make it HTTP writable by default config.options.chkSaveBackups = false; //disable save backup //config.options.chkAutoSave = false; //disable autosave config.options.chkUsePreForStorage = false; /*}}}*/
/***
|''Name:''|smmTheme|
|''Author:''|Saq Imtiaz and Simon McManus|
|''Source''|http://svn.tiddlywiki.org/Trunk/association/serversides/cctiddly/Trunk/tiddlers/themes/smmTheme.tiddler|
|''~CodeRepository:''|http://svn.tiddlywiki.org/Trunk/association/serversides/cctiddly/Trunk/tiddlers/themes/smmTheme.tiddler|
|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]] |
|''~CoreVersion:''|2.4.1|
|''~PageTemplate:''|##PageTemplate|
|''~tabs:''|##tabs|
|''~OptionsPanel:''|##OptionsPanel|
|''~StyleSheet:''|##StyleSheet|
|''~taskViewTemplate:''|##taskViewTemplate|
|''~taskEditTemplate:''|##taskEditTemplate|
|''~EditTemplate:''|##EditTemplate|
|''~ViewTemplate:''|##ViewTemplate|
***/


!PageTemplate
<!--{{{-->
<div class='header' macro='gradient vert #111 #222'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span><div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
</div>
<div id='bodywrapper'>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' force='true' tiddler='smmTheme##SideBarOptions'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<div id='contentFooter'  macro='gradient vert #222 #111'></div>
</div>
<!--}}}-->

!taskViewTemplate
<!--{{{-->
<div class='toolbar' macro='toolbar closeTiddler closeOthers +editTiddler > fields syncing permalink references jump'></div>
<div class='title' macro='view title'>Task : </div>
<div class='task'>
	<table>
	<tr>
		<td class='taskbody' width=100%><div class='viewer' macro='view text wikified'></div></td>
		<td class='taskControls' valign='top'><div class='taskControls' macro='tiddler TaskTiddlerControls'></td>
	</tr>
	</table>
</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='tagClear'></div>
<!--}}}-->

!taskEditTemplate
<!--{{{-->
<div class="editor">
<div class='toolbar' macro='toolbar[[ToolbarCommands::EditToolbar]]'></div>
<div class='title edit' macro='edit title'></div>
<div class='task'>
	<table>
	<tr>
		<td class='taskbody' width=100% height=100%><div class='viewer edit' macro='edit text wikified'></div></div></td>
		<td class='taskControls' valign=top><div class='taskControls' macro='tiddler TaskTiddlerControls'></td>
	</tr>
	</table>
</div>
<div class='subtitle'>Last edited by: <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='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div>
<div class='tagClear'></div>
</div>
<!--}}}-->

!EditTemplate
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></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>
<!--}}}-->

!ViewTemplate
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='subtitle'>Last edited by: <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='tagClear'></div>
<!--}}}-->

!wizardViewTemplate
<!--{{{-->
<div class='toolbar' macro='toolbar closeTiddler closeOthers'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
!OptionsPanel
[[help|Help]] <br />[[settings|AdvancedOptions]]<br /><<ccOptions>>

!tabs
<<tabs txtMainTab "Timeline" "Timeline" TabTimeline "All" "All tiddlers" TabAll "Tags" "All tags" TabTags "More" "More lists" TabMore>>

!SideBarOptions
<<search "search...">><<closeAll>><<newTiddler label:"new task" text:"New Task" title:"New Task" tag:"task">><<newTiddler>><<slider chkSliderOptionsPanel smmTheme##OptionsPanel 'options »' 'change TiddlyWiki Options'>><<saveChanges>><<slider 'chkLoginStatus' 'LoginStatus' '  status »' 'Login to make changes'>><<slider chkSliderTabs smmTheme##tabs 'contents »' 'View TiddlyWiki Tabs'>>

!StyleSheet
/***
General
***/
/*{{{*/
.tiddler .button:hover {
	background-color:#222;
}
.tiddler .button {
	border:1px solid black;
	line-height:2;
	margin:5px;
	padding:8px;
}

#contentWrapper .tiddler .button {
	margin-left:20px;
}
body .chkOptionInput {
	width:auto;
	float:right;
}

#contentWrapper .wizard .txtOptionInput {
	width:7em;
}

body{
	background: #111;
	color:white;
//	 background-image:url(http://friendster.bigoo.ws/content/layout/film-cartoon/film-cartoon_111.jpg);
//	 background-image:url(http://g.editingmyspace.com/shay773/halloweenbackgrounds/BG1.gif);
}

#backstageCloak {
	opacity:0.9; filter:'alpha(opacity:90)';
	background:#222;
}

#messageArea {
	border:0px;
	color:white;
	background-color:#222;
}

#messageArea .button{
	background:none;
}

#mainMenu br {
	display:none;
}

h1 {
	color:white;
}

#contentWrapper{
	position:relative;
	margin: 2.5em auto;
	width:780px;
	line-height: 1.6em;
	border:1px solid #111;
	font-size: 11px;
	font-family: Lucida Grande, Tahoma, Arial, Helvetica, sans-serif;
	height:1%;
	background-color:#222;
}

.clearAll{
	clear:both;
}

.tagClear{
	clear:none;
}
/*}}}*/

/*{{{*/

.siteTitle {
	font-family: 'Trebuchet MS' sans-serif;
	font-weight: bold;
	position:relative;
	top:20px;
	left :20px;
	font-size: 32px;
	color:#eee;
}

.siteSubtitle {
	padding-top:15px;
	font-size: 1.0em;
	display:block; 
	color: #999; margin-top:0.5em !important; margin-top:1em; margin-left:3em;
}

#displayArea {
	margin-left:1.35em;
	margin-right:16.3em;
	margin-top:0;
	padding-top:1em;
	padding-bottom:10px;
}

.tabUnselected {
	background:#222 none repeat scroll 0%;
	color:#999;
}

#sidebar {
	position:inherit;
	float:right;
	display:inline;
}

#tiddlerDisplay .tagging, #tiddlerDisplay .tagged {
	background-color:#222;
	border:none;
	float:none;
}

.sliderPanel .tabsetWrapper .tabContents {
	border-right:none;
	border-color:#999;
	background-color:#111;
}

#sidebarOptions .sliderPanel a{
	padding:3px;
	margin:0px;
	border:2px;
	background-color:#111;
}

.tabsetWrapper {
	position :relative;
}

#sidebar {
	padding-left:0.5em;
	background-color:#222;
	padding-top:1em;
}

#sidebarOptions a {
	margin:17px;
	display:block;
	margin:0.5em 0em;
	padding:0.3em 0.6em;
}

.popup li a {
	padding:12px;
}

#tiddlerDisplay .toolbar a.button, #sidebarOptions a, .toolbar .popup li a, #mainMenu a, #sidebarOptions .sliderPanel input {
	background-color:#111;
	color:#999;
	border:1px solid #111;
}

.wizard  .txtOptionInput {
	text-align:right;
}

a:hover {
	background-color:#222;
	color:#eee
}

#tiddlerDisplay .toolbar a.button:hover, #sidebarOptions a:hover, #mainMenu a:hover, #sidebarOptions .sliderPanel input:hover {
	border:1px dotted #000;
	background-color:#222;
	color:white;
}

#mainMenu a {
	padding:8px 15px 8px 15px;
	margin:10px;
	line-height:40px;
	border:0px solid #eee;
}

#contentWrapper #mainMenu { 
	position:static;
	width:100%;
	float:left;
	text-align:left;
	padding-top:20px;

}
.editor textarea, .editor input,  input, body select {
	border:1px solid #222;
	background-color:#333;
	color:#999;
	padding:3px;
	margin:3px;
}

#sidebarOptions input {
	border:1px solid #999;
	background-color:#00000;
	width:10em;
}

#sidebarTabs {
	margin:0px;
	padding:0px
}

#sidebarTabs .tabContents {
	color:#eee;
	background:#111;
}
.tagged li
{
	display: inline;
}

.tiddler .button {
	color:white;
	padding:0.4em 0.9em 0.4em 0.9em;
	margin:0px 0px 0px 7px;
}

#sideBarOptions .searchButton {
	display:none;
}

#sidebar .sliderPanel {
	border-color:-moz-use-text-color #222 -moz-use-text-color -moz-use-text-color;
	border-style:none solid none none;
	border-width:0 1px 0 0;
	margin-bottom:0.8em;
	margin-left:5px;
	padding:0;
	margin-left:0px;
}

#sidebarOptions .searchButton {
	display:none;
}

.title {
	color:#C0C0C0;
}

.subtitle, .subtitle a {
	color: #999;
	font-size: 1em;margin:0.2em;
	font-variant: small-caps;
}

.wizard .button:hover{
	background-color:#333;
	border:1px solid #444;
	color:white;
}
.selected .toolbar a {
	color:#999;
}

.selected .toolbar a:hover {
	color:#222;
	background:transparent;
	border:1px solid #fff;
}

.viewer pre {
	background:#111111 none repeat scroll 0 0;
	border:1px solid #FFEE88;
}

* html .viewer pre {
	margin-left: 0em;
}

* html .editor textarea, * html .editor input {
	width: 98%;
}

a,#sidebarOptions .sliderPanel a, #topMenu a, #topMenu .button {
	color:green;
	background-color:transparent;
}

#sidebarOptions .sliderPanel a:hover, #topMenu a, #topMenu .button:hover {
	color:white;
	background-color:transparent;
	border:0px;
}

#topMenu a, #topMenu .button, .wizard .button {
	padding: 5px 15px;
	margin:9px;
	border:1px solid #999;
	font-weight:bold;
	line-height:40px;
	top:1em;
	color:#eee;
	background-color:#222;
}

#topMenu br {
	display:none;
}

#topMenu a:hover, #topMenu .button:hover {
	background-color:#222;
}

.tagging, .tagged {
	border: 1px solid #eee;
}

.highlight, .marked {
	background:transparent;
	color:#111;
	border:none;
	text-decoration:underline;
}

.tagging .button:hover, .tagged .button:hover, .tagging .button:active, .tagged .button:active {
	border: none;
	background:transparent;
	text-decoration:underline;
	color:#222;
}

.tiddler {
	padding-bottom: 40px;
}

.viewer th, thead td {
	background: #222;
	border:none;
	color: #fff;
}

.viewer table {
	border:1px dotted #222;
}

table.twtable {
	border-collapse:seperate;
}

.viewer pre {
	border: 1px solid #999;
}

.viewer hr {
	border-top: dashed 1px #999;
}

.tabSelected {
	background:#111 none repeat scroll 0%;
	border:1px solid #111;
	border-bottom:1px solid black;
	color:#999;
}

.tabContents {
	background:#f7f7f7;
	border:0px;
}

.viewer code {
	background:##222 none repeat scroll 0%;
color:#999;
}

h1,h2,h3,h4,h5 {
	color: #555; border-color:#333; background: transparent; padding-bottom:2px; font-family: Arial, Helvetica, sans-serif;
}

h1 {
	font-size:18px;
}

h2 {
	font-size:16px;
}

h3 {
	font-size: 14px;
}

#contentFooter {
	background:#999;
	clear: both;
	padding: 0.5em 1em;
}

.wizard input {
	border:1px solid #333;
}
#sidebarOptions input {
	border: 1px solid #222;
}

.annotation {
	background-color:green;
	border:1px solid white;
	color:white;
}

.wizardFooter .button{
	background:#222;
	margin:3px;
	padding:0.5em;
	padding-left:1.5em;
	padding-right:1.5em;
	color:white;
	border:1px solid #333;
}
table, .viewer td, .viewer tr, .twtable td, .twtable tr {
	border:0px solid #666666;
}

.tagging .listTitle, .tagged .listTitle, .txtMainTab .tabContents li {
	color:white;
}

body .wizardFooter {
	background:none;
	font-weight:bold;}

.wizardStep {
	border:none;
	background-color:none;
}

body .wizard {
	width:80%;
	padding:10px;
	border:1px solid #EBE6F5;
}

.wizard  th{
	background:#222;
	color:#888;
	padding:3px;
	margin:40px;
};

.wizard, listView twtable {
	border:0px;
};

.wizard {
	padding : 4px 14px 4px 14px;
	font-weight:bold;
	color:#292929;
	border:solid 0px #292929;
	margin-top:1px;
}

.viewer .wizard, body .wizard{
	background:#111;
	margin:2em;
	border:0px;
	border:1px solid #333;
	color:#777;
}

.wizard h1{
	color:#999;
}

.wizard h2{
	padding:4px;
	color:white;
}

body .wizardStep{
	color:#999;
	border:0px;
	margin:0m;
	background:none;
}

body select {
	border:0px;
	padding:3px;
	margin:4px;
}

#backstagePanel {
	border:0px;
	background:none;
	width:60%;
	position:fixed
	padding:0px;
	margin:0px;
	margin-top:-36px;
}

#sidebar .sliderPanel {
	background-color:#222;
	font-size:1em;
}

.viewer .wizardStep table {
	border:0px;
}

.viewer th, .viewer td, .viewer tr, .viewer caption, .twtable th, .twtable td, .twtable tr, .twtable caption {
	border:0px;
	padding:0px;
	margin:0px;
}

.viewer .sortable td  {
	padding:12px;
	margin:21px;
}

.title {
	color:#C0C0C0;
	padding:10px;
}

.viewer table, table.twtable {
	border-collapse:seperated;
	border:0px;
}

.viewer th, .viewer thead td, .twtable th, .twtable thead td {
	border:0px;
	color:white;
}

.twtable th{
	background-color:#333;
	padding:15px;
	margin:15px;
}

table.sortable td.sortedCol {
	background-color:#333;
}

#backstageArea a:hover, #backstageArea a.backstageSelTab {
	background-color:#111;
	color:white;
}
/*}}}*/

[[StyleSheet]]

Warning: file_get_contents(/home/rhubarb/public_html/august23/lang/en/themes/smmTheme.tiddler) [function.file-get-contents]: failed to open stream: No such file or directory in /home/rhubarb/public_html/august23/includes/tiddler.php on line 163

/***
|''Name:''|purpleTheme|
|''Description:''|A theme with lots of white space and a clean and elegant purple presentation|
|''Author:''|Saq Imtiaz and Simon McManus|
|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]] |
|''Source''|http://svn.tiddlywiki.org/Trunk/association/serversides/cctiddly/Trunk/tiddlers/themes/purpleTheme.tiddler|
|''CodeRepository''|http://svn.tiddlywiki.org/Trunk/association/serversides/cctiddly/Trunk/tiddlers/themes/purpleTheme.tiddler|
|''~CoreVersion:''|2.4.1|
|''~PageTemplate:''|##PageTemplate|
|''~tabs:''|##tabs|
|''~OptionsPanel:''|##OptionsPanel|
|''~SideBarTabs:''|##SideBarTabs|
|''~StyleSheet:''|##StyleSheet|
|''~taskViewTemplate:''|##taskViewTemplate|
|''~taskEditTemplate:''|##taskEditTemplate|
|''~EditTemplate:''|##EditTemplate|
|''~ViewTemplate:''|##ViewTemplate|
***/
!PageTemplate
<!--{{{-->
<div id='bodywrapper'>
<div class='header' macro='gradient vert #ccc #eee'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
</div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' force='true' tiddler='purpleTheme##SideBarOptions'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<div id='contentFooter'  macro='gradient vert #eee #ccc'></div>
</div>
<!--}}}-->

!taskViewTemplate
<!--{{{-->
<div class='toolbar' macro='toolbar closeTiddler closeOthers +editTiddler > fields syncing permalink references jump'></div>
<div class='title' macro='view title'>Task : </div>
<div class='task'>
	<table>
	<tr>
		<td class='taskbody' width=100%><div class='viewer' macro='view text wikified'></div></td>
		<td class='taskControls' valign='top'><div class='taskControls' macro='tiddler TaskTiddlerControls'></td>
	</tr>
	</table>
</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='tagClear'></div>
<!--}}}-->

!taskEditTemplate
<!--{{{-->
<div class="editor">
<div class='toolbar' macro='toolbar[[ToolbarCommands::EditToolbar]]'></div>
<div class='task'>
	<table>
	<tr><td colspan=2><div class='title edit' macro='edit title'></div>
	</td></tr>
	<tr>
		<td class='taskbody' width=100% height=100%><div class='viewer edit' macro='edit text wikified'></div></div></td>
		<td class='taskControls' valign=top><div class='taskControls' macro='tiddler TaskTiddlerControls'></td>
	</tr>
	</table>
</div>
<div class='editor' macro='edit tags'></div>
<div class='subtitle'>Last edited by: <span macro='view modifier link'></span>, <span macro='view modified date'></span></div>
</div>
<!--}}}-->

!EditTemplate
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></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>
<!--}}}-->

!ViewTemplate
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='tagClear'></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>
<hr />
<!--}}}-->

!OptionsPanel
[[help|Help]] <br />[[settings|AdvancedOptions]]<br /><<ccOptions>>

!tabs
<<tabs txtMainTab "Timeline" "Timeline" TabTimeline "All" "All tiddlers" TabAll "Tags" "All tags" TabTags "More" "More lists" TabMore>>

!SideBarOptions
<<search "search...">><<closeAll>><<newTiddler>><<saveChanges>><<slider chkSliderOptionsPanel smmTheme##OptionsPanel 'options »' 'change TiddlyWiki Options'>><<slider 'chkLoginStatus' 'LoginStatus' '  status »' 'Login to make changes'>><<slider chkSliderTabs smmTheme##tabs 'content »' 'View TiddlyWiki Tabs'>>

!StyleSheet
/***
General
***/
/*{{{*/

body, html{
	background-color: #999999;
	color:#333;
//	background:url(http://www.thefabricdeli.com/assets/images/qud21112-purple.jpg);
//	background:url(http://mr-pc.org/inc/paisleyTileSmall.png);
}

#backstageCloak {
	opacity:0.8; filter:'alpha(opacity:70)';
	background:black;
}
.tiddler .button {
	line-height:4;
	margin:5px;
	padding:8px;
}

body .chkOptionInput {
	width:auto;
	float:right;
}

#contentWrapper .wizard .txtOptionInput {
	width:7em;
}

.wizard  .txtOptionInput{
text-align:right;
	border:1px solid #ccc;
}

#contentWrapper .sliderPanel .tabsetWrapper .tabContents {
	border:0px;
	background-color:white;
}

.header {
	background-color:#eee;
}

#messageArea {
	border:1px solid white;
	background-color:#eee;
}

#messageArea .button {
	background:none;
}

h1 {
	color:black;
}

#contentWrapper {
	position:relative;
	margin: 2.5em auto;
	width:780px;
	line-height: 1.6em;
	border:1px solid #ccc;
	font-size: 11px;
	font-family: Lucida Grande, Tahoma, Arial, Helvetica, sans-serif;
	height:1%;
//	display:table;
	background-color:#eee;
}

.clearAll{
	clear:both;
}

.tagClear{
	clear:none;
}
/*}}}*/

/*{{{*/
.siteTitle {
	font-family: 'Trebuchet MS' sans-serif;
	font-weight: bold;
	position:relative;
	top:20px;
	left :20px;
	font-size: 32px;
	color:Purple;
}

.siteSubtitle {
	padding-top:15px;
	font-size: 1.0em;
	display:block;
	color: #999; margin-top:0.5em !important; margin-top:1em; margin-left:3em;
	padding-top:3em;
}

#displayArea {
	margin-left:1.35em;
	margin-right:16.3em;
	margin-top:0;
	padding-top:1em;
	padding-bottom:10px;
}

#sidebarOptions input {
	border:1px solid #ddd;
}


.tabUnselected {
	background:#eee none repeat scroll 0%;
	color:#999;
}

#sidebar {
	position:inherit;
	float:right;
	display:inline;
}

#tiddlerDisplay .tagging, #tiddlerDisplay .tagged {
	background-color:#eee;
	border:none;
	float:none;
}

.sliderPanel .tabsetWrapper .tabContents {
	border-right:none;
	border-color:#999;
	background-color:#999;
}

#sidebarOptions .sliderPanel a {
	padding:3px;
	margin:0px;
	border:2px;
	background-color:#999;
}

.tabsetWrapper {
	position :relative;
}

#sidebar{
	padding-left:0.5em;
	background-color:#eee;
	padding-top:1em;
}

#sidebarOptions a {
	margin:17px;
	display:block;
	margin:0.5em 0em;
	padding:0.3em 0.6em;
}

.popup li a {
	margin:0px;
	padding:0px;
	display:inline;
	color:black;
}

.popup {
	background-color:white;
	border:1px solid purple;
}

.popup li a:hover {
	display:inline;
	margin:0px;
	padding:0px;
	background-color:white;
	color:purple;
}

.popup li {
	margin:0px;
	padding:5px;
	background-color:#eee;
}
.popup li:hover {
	background-color:white;
}

#tiddlerDisplay .toolbar a.button, #sidebarOptions a, .toolbar .popup li a, #mainMenu a, .tiddler .button, #sidebarOptions .sliderPanel input {
	border:1px solid white;
	background-color:white;
	color:purple;
}

#tiddlerDisplay .toolbar a.button:hover, #sidebarOptions a:hover,  #mainMenu a:hover, .tiddler .button, #sidebarOptions .sliderPanel input:hover
{
	border:1px solid #ccc;
}

#sidebarOptions a:hover {
border-right:1px solid white;
}

.tagged ul {
	list-style: none;
}

.tagged li {
	display: inline;
}

.zoomer {
	background:none; color:#ddd;
	border:2px solid #ddd;
}

a:active{
	border:1px solid red;
	background-color:#eee;
	color:[[ColorPalette::smmLight1]]
}

a:hover {
	background-color:#eee;
	color:[[ColorPalette::smmLight1]]
}

#backstageArea,#backstageArea a {
	background:transparent;
	color:white;
}

#mainMenu a {
	padding:8px 15px 8px 15px;
	margin:10px;
	line-height:40px;
	border:1px solid #eee;
}

#contentWrapper #mainMenu{
	position:static;
	width:100%;
	float:left;
	text-align:left;
	padding-top:20px;
}

.editor textarea, .editor input, input, body select {
	border:1px solid #ccc;
	background-color:white;
	color:#999;
	padding:3px;
	margin:3px;
}

#sidebarOptions input {
	width:85%;
	margin-left:-0.1em;}

#sidebarTabs {
	margin:0px;
	padding:0px
}

#sidebarTabs .tabContents {
	color:[[ColorPalette::smmLight1]];
	background:#999;
}

#contentWrapper .tiddler .button {
margin:0.4em;
padding:0.4em 0.8em;
}

#sideBarOptions .searchButton{
	display:none;
}

#sidebar .sliderPanel {
	margin-left:5px;
	border:0px;
	padding:0em;
	border-right:1px solid #eee;
	margin-bottom:0.8em;
}

#sidebarOptions .searchButton {
	display:none;
}

.title {
	color:#C0C0C0;
}

.subtitle, .subtitle a {
	color: #999;
	font-size: 1em;margin:0.2em;
	font-variant: small-caps;
}

* html .viewer pre {
	margin-left: 0em;
}

* html .editor textarea, * html .editor input {
	width: 98%;
}

a,#sidebarOptions .sliderPanel a, #topMenu a, #topMenu .button {
	color:purple;
	background-color:transparent;
}

#sidebarOptions .sliderPanel a:hover, #topMenu a, #topMenu .button:hover {
	color:black;
	background-color:transparent;
	border:0px;
}

#sidebarOptions .sliderPanel a.tabSelected {
border:1px solid #ddd;
border-bottom:1px solid white;
}
 
#topMenu a, #topMenu .button {
	padding: 5px 15px;
	margin:9px;
	border:1px solid #999;
	font-weight:bold;
	line-height:40px;
	top:1em;
	color:[[ColorPalette::smmLight1]];
	background-color:#eee;
}

#topMenu br {
	display:none;
}

#topMenu a:hover, #topMenu .button:hover {
	background-color:#eee;
}

.tagging, .tagged {
	border: 0px dotted [[ColorPalette::smmLight1]];
}

.highlight, .marked {
	background:transparent;
	color:#999;
	border:none;
	text-decoration:underline;
}

.tagging .button:hover, .tagged .button:hover, .tagging .button:active, .tagged .button:active {
	border: none;
	background:transparent;
	text-decoration:underline;
	color:#eee;
}

.viewer th, thead td {
	background: #eee;
	border:none;
	color: #fff;
}

.viewer table {
	border:1px solid #eee;
}

table.twtable {
	border-collapse:seperate;
}

.viewer pre {
	background-color:white;
	border: 1px dotted #999;
}

hr {
	border: dotted 1px #ccc;
}

#sidebarOptions .sliderPanel .tabUnselected {
	background:#eee none repeat scroll 0%;
	border:0px solid #999;
	color:#999;
	padding:2px;
}

#sidebarOptions .sliderPanel .tabSelected {
	background:white none repeat scroll 0%;
	padding:2px;
	border:1px solid #999;
	border-bottom:1px solid black;
	color:#999;
	border-bottom:2px solid white;
}

.tabContents {
	background:#f7f7f7;
	border:0px;
}

.viewer code {
	background:##eee none repeat scroll 0%;
	color:#999;
}

h1,h2,h3,h4,h5 {
	color: #555; 
	border-color:#333; 
	background: transparent; 
	padding-bottom:2px; 
	font-family: Arial, Helvetica, sans-serif;
}

h1 {
	font-size:18px;
}

h2 {
	font-size:16px;
	border-bottom:1px solid #FFF;
}

h3 {
	font-size: 14px;
	border-bottom:1px solid #FFF;
}

.annotation {
	background-color:purple;
	border:1px solid white;
	color:white;
}

#contentFooter {
	background:#999;
	clear: both;
	padding: 0.5em 1em;
}

.button, .wizard .button:hover {
	border:0px;
}

.sliderPanel input  {
	border:1px solid #777;
	background-color:white;
	color:#777;	
}

#contentWrapper .tiddler .button:hover {
	border:1px solid;
}

table, .viewer td, .viewer tr, .twtable td, .twtable tr {
	border:0px solid #666666;
}

body .wizardFooter {
	padding :10px;
	margin:0px;
	padding-top:0px;
	background:white;
	font-weight:bold;
}

.wizardStep {
	padding:0px;
	border:none;
	background-color:none;
} 
	
.wizard  th{
	background:white;
	color:#888;
	padding:3px;
	margin:40px;
};

.wizard, listView twtable {
	border:0px; 
};

.wizard {
	color:#292929;
}

.viewer .wizard, body .wizard{
	background:white;
	margin:2em;
	border:1px solid #CCCCCC;
	color:#999;
}

.wizard h1 {
	color:#999;
	padding-top:10px;
	padding-bottom:10px;
}

.wizard h2 {
	color:black;
}

body .wizardStep {
	color:#999;
	border:0px;
	margin:0m;
	background:white;	
}

body select {
	border:0px;
	padding:3px;
	margin:4px;
}

#backstageArea a:hover {
	background-color:white;
}

#backstagePanel {
	background:none;
	width:60%;
	position:fixed
	padding:0px;
	margin:0px;
	margin-top:-36px;
}

#backstageToolbar a.backstageSelTab {
	background-color:white;
	border:1px solid white;
}

#sidebar .sliderPanel {
	background-color:#eee;
	font-size:1em;
}

.viewer .wizardStep table {
	border:0px;
}

.viewer th, .viewer td, .viewer tr, .viewer caption, .twtable th, .twtable td, .twtable tr, .twtable caption {
	border:0px;
	padding:0px;
	margin:0px;
}

.viewer .sortable td {
	padding:12px;
	margin:21px;
}

.title {
	color:#777;
	padding:0px;
}

.viewer table, table.twtable {
	border-collapse:seperated;
	border:0px;
}

.viewer th, .viewer thead td, .twtable th, .twtable thead td {
	border:0px;
	background-color:white;
	color:black;
}

.twtable th{
	background-color:#eee;
	padding:15px;
	margin:15px;
}

table.sortable td.sortedCol {
	background-color:white;
}
/*}}}*/

[[StyleSheet]]

Warning: file_get_contents(/home/rhubarb/public_html/august23/lang/en/themes/purpleTheme.tiddler) [function.file-get-contents]: failed to open stream: No such file or directory in /home/rhubarb/public_html/august23/includes/tiddler.php on line 163

Warning: file_get_contents(/home/rhubarb/public_html/august23/tiddlers/taggedTemplateTweak.tiddler) [function.file-get-contents]: failed to open stream: No such file or directory in /home/rhubarb/public_html/august23/includes/tiddler.php on line 163

Warning: file_get_contents(/home/rhubarb/public_html/august23/lang/en/taggedTemplateTweak.tiddler) [function.file-get-contents]: failed to open stream: No such file or directory in /home/rhubarb/public_html/august23/includes/tiddler.php on line 163
// ccAdaptorCommandsPlugin //
function ccTiddlyAdaptor(){}
merge(ccTiddlyAdaptor,{ 
	errorTitleNotSaved:"<h1>Your changes were NOT saved.</h1>", 
	errorTextSessionExpired:"Your Session has expired. <br /> You will need to log into the new window and then copy your changes from this window into the new window. ", 
	errorTextConfig:"There was a conflict when saving. <br /> Please open the page in a new window to see the changes.",
	errorTextUnknown:"An unknown error occured.",
	errorClose:"close",
	buttonOpenNewWindow:"Open a Window where I can save my changes	.... ",
	buttonHideThisMessage:"Hide this message", 
	msgErrorCode:"Error Code : "
});


//{{{
	
	config.commands.revisions = {};
	merge(config.commands.revisions,{
		text: "revisions",
		tooltip: "View another revision of this tiddler",
		loading: "loading...",
		done: "Revision downloaded",
		revisionTooltip: "View this revision",
		popupNone: "No revisions",
		revisionTemplate: "%0 r:%1 m:%2",
		dateFormat:"YYYY mmm 0DD 0hh:0mm"	
	});

	config.commands.deleteTiddlerHosted = {};
	merge(config.commands.deleteTiddlerHosted,{
		text: "delete",
		tooltip: "Delete this tiddler",
		warning: "Are you sure you want to delete '%0'?",
		hideReadOnly: true,
		done: "Deleted "
	});
	
	
// Ensure that the plugin is only installed once.
if(!version.extensions.AdaptorCommandsPlugin) {
	version.extensions.AdaptorCommandsPlugin = {installed:true};
config.commands.saveTiddlerHosted1 = {};
merge(config.commands.saveTiddlerHosted1, config.commands.saveTiddler);

config.commands.saveTiddlerHosted1.handler = function(event,src,title)
{
	var tiddlerElem = story.getTiddler(title);
	var fields = {};
	story.gatherSaveFields(tiddlerElem,fields);
	var newTitle = fields.title || title;
	if(!store.tiddlerExists(newTitle))
		newTitle = newTitle.trim();
	if(newTitle==title){  // we are not renaming the tiddler 
		var newTitle = story.saveTiddler(title,event.shiftKey);
		if(newTitle)
			story.displayTiddler(null,newTitle);		 
	} else { // the tiddler is being renamed 
		var tiddler = store.fetchTiddler(title);
		if(store.tiddlerExists(newTitle) && newTitle != title) {
			if(!confirm(config.messages.overwriteWarning.format([newTitle.toString()])))
				return false;
		}
		var adaptor = new ccTiddlyAdaptor();
		var userParams = {minorUpdate:event.shiftKey};
		var context = {title:title, newTitle:newTitle, workspace:window.workspace};
		adaptor.rename(context, userParams, config.commands.saveTiddlerHosted1.callback);
	}
	return false;
};

// implementing closeTiddler without the clearMessage();
Story.prototype.closeTiddler = function(title,animate,unused)
{
	var tiddlerElem = this.getTiddler(title);
	if(tiddlerElem) {
		this.scrubTiddler(tiddlerElem);
		if(config.options.chkAnimate && animate && anim && typeof Slider == "function")
			anim.startAnimating(new Slider(tiddlerElem,false,null,"all"));
		else {
			removeNode(tiddlerElem);
			forceReflow();
		}
	}
};

config.commands.saveTiddlerHosted1.callback = function(context, userParams) {
	var tiddler = store.fetchTiddler(context.title);
	if(tiddler) { // if tiddler exists with the old title. (we are renaming)
		story.closeTiddler(context.title,false);
		store.deleteTiddler(tiddler.title);
		tiddler.title = context.newTitle;
		store.addTiddler(tiddler);
		story.displayTiddler(null,tiddler.title);
		story.refreshTiddler(tiddler.title,null,true);
		store.notify(tiddler.title,true);
		displayMessage("Tiddler Renamed");
	} else {   //tiddler does not exist so this is a new tiddler. 
		var newTitle = story.saveTiddler(context.title,userParams.minorUpdate);
		if(newTitle)
			story.displayTiddler(null,newTitle);
		story.closeTiddler(context.title,false);

	}
}

function getServerType(fields)
{
	if(!fields)
		return null;
	var serverType = fields['server.type'];
	if(!serverType)
		serverType = fields['wikiformat'];
	if(!serverType)
		serverType = config.defaultCustomFields['server.type'];
	if(!serverType && typeof RevisionAdaptor != 'undefined' && fields.uuid)
		serverType = RevisionAdaptor.serverType;
	return serverType;
}

function invokeAdaptor(fnName,param1,param2,context,userParams,callback,fields)
{
	var serverType = getServerType(fields);
	if(!serverType)
		return null;
	var adaptor = new config.adaptors[serverType];
	if(!adaptor)
		return false;
	if(!config.adaptors[serverType].prototype[fnName])
		return false;
	adaptor.openHost(fields['server.host']);
	adaptor.openWorkspace(fields['server.workspace']);
	var ret = false;
	if(param1)
		ret = param2 ? adaptor[fnName](param1,param2,context,userParams,callback) : adaptor[fnName](param1,context,userParams,callback);
	else
		ret = adaptor[fnName](context,userParams,callback);
	return ret;
}

//# Returns true if function fnName is available for the serverType specified in fields
//# Used by (eg): config.commands.download.isEnabled
function isAdaptorFunctionSupported(fnName,fields)
{
	var serverType = getServerType(fields);
	if(!serverType || !config.adaptors[serverType])
		return false;
	if(!config.adaptors[serverType].isLocal && !fields['server.host'])
		return false;
	var fn = config.adaptors[serverType].prototype[fnName];
	return fn ? true : false;
}

config.commands.revisions.isEnabled = function(tiddler)
{
	return isAdaptorFunctionSupported('getTiddlerRevisionList',tiddler.fields);
};

config.commands.revisions.handler = function(event,src,title)
{
	var tiddler = store.fetchTiddler(title);
	userParams = {};
	userParams.tiddler = tiddler;
	userParams.src = src;
	userParams.dateFormat = config.commands.revisions.dateFormat;
	var revisionLimit = 10;
	if(!invokeAdaptor('getTiddlerRevisionList',title,revisionLimit,null,userParams,config.commands.revisions.callback,tiddler.fields))
		return false;
	event.cancelBubble = true;
	if(event.stopPropagation)
		event.stopPropagation();
	return true;
};

config.commands.revisions.callback = function(context,userParams)
// The revisions are returned as tiddlers in the context.revisions array
{
	var revisions = context.revisions;
//#displayMessage("config.commands.revisions.callback:"+revisions.length);
	popup = Popup.create(userParams.src);
	Popup.show(popup,false);
	if(revisions.length==0) {
		createTiddlyText(createTiddlyElement(popup,'li',null,'disabled'),config.commands.revisions.popupNone);
	} else {
		revisions.sort(function(a,b) {return a.modified < b.modified ? +1 : -1;});
		for(var i=0; i<revisions.length; i++) {
			var tiddler = revisions[i];
			var modified = tiddler.modified.formatString(context.dateFormat||config.commands.revisions.dateFormat);
			var revision = tiddler.fields['server.page.revision'];
			var btn = createTiddlyButton(createTiddlyElement(popup,'li'),
					config.commands.revisions.revisionTemplate.format([modified,revision,tiddler.modifier]),
					tiddler.text||config.commands.revisions.revisionTooltip,
					function() {
						config.commands.revisions.getTiddlerRevision(this.getAttribute('tiddlerTitle'),this.getAttribute('tiddlerModified'),this.getAttribute('tiddlerRevision'),this);
						return false;
						},
					'tiddlyLinkExisting tiddlyLink');
			btn.setAttribute('tiddlerTitle',userParams.tiddler.title);
			btn.setAttribute('tiddlerRevision',revision);
			btn.setAttribute('tiddlerModified',tiddler.modified.convertToYYYYMMDDHHMM());
			if(userParams.tiddler.fields['server.page.revision'] == revision || (!userParams.tiddler.fields['server.page.revision'] && i==0))
				btn.className = 'revisionCurrent';
		}
	}
};

config.commands.revisions.getTiddlerRevision = function(title,modified,revision)
{
	var tiddler = store.fetchTiddler(title);
	var context = {modified:modified};
	return invokeAdaptor('getTiddlerRevision',title,revision,context,null,config.commands.revisions.getTiddlerRevisionCallback,tiddler.fields);
};

config.commands.revisions.getTiddlerRevisionCallback = function(context,userParams)
{
	if(context.status) {
		var tiddler = context.tiddler;
		store.addTiddler(tiddler);
		store.notify(tiddler.title, true);
		story.refreshTiddler(tiddler.title,1,true);
		displayMessage(config.commands.revisions.done);
	} else {
		displayMessage(context.statusText);
	}
};

config.commands.deleteTiddlerHosted.handler = function(event,src,title)
{
	var tiddler = store.fetchTiddler(title);
		if(!tiddler)
			return false;
		var deleteIt = true;
		if(config.options.chkConfirmDelete)
		        deleteIt = confirm(this.warning.format([title]));
		if(deleteIt) {
			var ret = invokeAdaptor('deleteTiddler',title,null,null,null,config.commands.deleteTiddlerHosted.callback,tiddler.fields);
			if(ret){
			store.removeTiddler(title);
			story.closeTiddler(title,true);
			autoSaveChanges();
			store.setDirty(false);
			}
		}
		return false;

};

config.commands.deleteTiddlerHosted.callback = function(context,userParams)
{
	if(context.status) {
		displayMessage(config.commands.deleteTiddlerHosted.done + context.title);
	} else {
		if (context.statusText.indexOf("Not Found") == -1)
			displayMessage(context.statusText);
	}
};

}//# end of 'install only once'
//}}}


// ccAdaptor //

//{{{

	function isLoggedIn(){
		return (window.loggedIn == '1') 
	}

	ccTiddlyAdaptor.prototype = new AdaptorBase();

	ccTiddlyAdaptor.mimeType = 'application/json';
	ccTiddlyAdaptor.serverType = 'cctiddly'; // MUST BE LOWER CASE
	ccTiddlyAdaptor.serverParsingErrorMessage = "Error parsing result from server";
	ccTiddlyAdaptor.errorInFunctionMessage = "Error in function ccTiddlyAdaptor.%0";

	ccTiddlyAdaptor.minHostName = function(host){
		return host ? host.replace(/^http:\/\//,'').replace(/\/$/,'') : '';
	};

	// Convert a page title to the normalized form used in uris
	ccTiddlyAdaptor.normalizedTitle = function(title){
		return title;
	};

	// Convert a date in YYYY-MM-DD hh:mm format into a JavaScript Date object
	ccTiddlyAdaptor.dateFromEditTime = function(editTime){
		var dt = editTime;
		return new Date(Date.UTC(dt.substr(0,4),dt.substr(5,2)-1,dt.substr(8,2),dt.substr(11,2),dt.substr(14,2)));
	};

	ccTiddlyAdaptor.prototype.login = function(context,userParams,callback){
		context = this.setContext(context,userParams,callback);
		var uriTemplate = '%0/handle/loginFile.php?cctuser=%1&cctpass=%2';
		var uri = uriTemplate.format([context.host,context.username,context.password]);
		var req = httpReq('GET',uri,ccTiddlyAdaptor.loginCallback,context);
		return typeof req == 'string' ? req : true;
	};

	ccTiddlyAdaptor.loginCallback = function(status,context,responseText,uri,xhr){
		if(xhr.status==401){
			context.status = false;
		}else{
			context.status = true;
			var c='sessionToken'+"="+responseText;
				c+="; expires=Fri, 1 Jan 2811 12:00:00 UTC; host=*";
				document.cookie=c;
		}
		if(context.callback)
			context.callback(context,context.userParams);
	};

	ccTiddlyAdaptor.prototype.register = function(context,userParams,callback){
		context = this.setContext(context,userParams,callback);
		var uriTemplate = '%0/handle/register.php';
		var uri = uriTemplate.format([context.host,context.username,Crypto.hexSha1Str(context.password)]);
		var dataTemplate = 'username=&0&reg_mail=%1&password=%2&password2=%3';
		var data = dataTemplate.format([context.username,context.password1,context.password2]);
		var req = httpReq('POST', uri,ccTiddlyAdaptor.registerCallback,context,null,data);
		return typeof req == 'string' ? req : true;
	};

	ccTiddlyAdaptor.prototype.rename = function(context, userParams, callback){
		context = this.setContext(context,userParams,callback);
		var uri = window.url+"handle/renameTiddler.php?otitle="+context.title+"&ntitle="+context.newTitle+"&workspace="+window.workspace;
		httpReq('POST', uri,ccTiddlyAdaptor.renameCallback,context,null,null);
	};

	ccTiddlyAdaptor.renameCallback = function(status,context,responseText,uri,xhr){
		if(context.callback)
			context.callback(context,context.userParams);
	};

	ccTiddlyAdaptor.registerCallback = function(status,context,responseText,uri,xhr){
		if(status){
			context.status = true;
		}else{
			context.status = false;
		}
		if(context.callback)
			context.callback(context,context.userParams);
	};

	ccTiddlyAdaptor.prototype.getWorkspaceList = function(context,userParams,callback){
	 	context = this.setContext(context,userParams,callback);
		var uriTemplate = '%0/handle/listWorkspaces.php';
		var uri = uriTemplate.format([context.host]);
		var req = httpReq('GET', uri,ccTiddlyAdaptor.getWorkspaceListCallback,context,{'accept':'application/json'});
		return typeof req == 'string' ? req : true;
	};

	ccTiddlyAdaptor.getWorkspaceListCallback = function(status,context,responseText,uri,xhr){
		context.status = false;
		context.workspaces = [];
		context.statusText = ccTiddlyAdaptor.errorInFunctionMessage.format(['getWorkspaceListCallback']);
		if(status){
		try{
			eval('var workspaces=' + responseText);
		}catch (ex){
			context.statusText = exceptionText(ex,ccTiddlyAdaptor.serverParsingErrorMessage);
			if(context.callback)
				context.callback(context,context.userParams);
				return;
			}
			for (var i=0; i < workspaces.length; i++){
				context.workspaces.push({title:workspaces[i]})
			}
			context.status = true;
		}else{
				context.statusText = xhr.statusText;
		}
		if(context.callback)
			context.callback(context,context.userParams);
	};

	ccTiddlyAdaptor.prototype.getTiddlerList = function(context,userParams,callback){
		context = this.setContext(context,userParams,callback);
		var uriTemplate = '%0/handle/listTiddlers.php?workspace=%1';
		var uri = uriTemplate.format([context.host,context.workspace]);
		var req = httpReq('GET', uri,ccTiddlyAdaptor.getTiddlerListCallback,context,{'accept':'application/json'});
		return typeof req == 'string' ? req : true;
	};

	ccTiddlyAdaptor.getTiddlerListCallback = function(status,context,responseText,uri,xhr){
		context.status = false;
		context.statusText = ccTiddlyAdaptor.errorInFunctionMessage.format(['getTiddlerListCallback']);
		if(status){
			try{
				eval('var tiddlers=' + responseText);
			}catch (ex){
				context.statusText = exceptionText(ex,ccTiddlyAdaptor.serverParsingErrorMessage);
				if(context.callback)
					context.callback(context,context.userParams);
				return;
			}
			var list = [];
			for(var i=0; i < tiddlers.length; i++){
				var tiddler = new Tiddler(tiddlers[i]['title']);
				tiddler.fields['server.page.revision'] = tiddlers[i]['revision'];
				list.push(tiddler);
			}
			context.tiddlers = list;
			context.status = true;
		}else{
			context.statusText = xhr.statusText;
		}
		if(context.callback)
			context.callback(context,context.userParams);
	};

	ccTiddlyAdaptor.prototype.generateTiddlerInfo = function(tiddler){
		var info ={};
		var host = this && this.host ? this.host : this.fullHostName(tiddler.fields['server.host']);
		var bag = tiddler.fields['server.bag']
		var workspace = tiddler.fields['server.workspace']
		var uriTemplate = '%0/%1/#%2';
		info.uri = uriTemplate.format([host,workspace,tiddler.title]);
		return info;
	};

	ccTiddlyAdaptor.prototype.getTiddlerRevision = function(title,revision,context,userParams,callback){
		context = this.setContext(context,userParams,callback);
		if(revision)
			context.revision = revision;
		return this.getTiddler(title,context,userParams,callback);
	};

	ccTiddlyAdaptor.prototype.getTiddler = function(title,context,userParams,callback){
		context = this.setContext(context,userParams,callback);
		if(title)
			context.title = title;
		   if(context.revision){
		         var uriTemplate = '%0/handle/revisionDisplay.php?title=%2&workspace=%1&revision=%3';
		  }else{
				var uriTemplate = '%0/handle/getTiddler.php?title=%2&workspace=%1';
		  }

		uri = uriTemplate.format([context.host,context.workspace,ccTiddlyAdaptor.normalizedTitle(title),context.revision]);
		context.tiddler = new Tiddler(title);
		context.tiddler.fields['server.type'] = ccTiddlyAdaptor.serverType;
		context.tiddler.fields['server.host'] = ccTiddlyAdaptor.minHostName(context.host);
		context.tiddler.fields['server.workspace'] = context.workspace;
		var req = httpReq('GET', uri,ccTiddlyAdaptor.getTiddlerCallback,context,{'accept':'application/json'});
		return typeof req == 'string' ? req : true;
	};

	ccTiddlyAdaptor.getTiddlerCallback = function(status,context,responseText,uri,xhr){
	        context.status = false;
	        context.statusText = ccTiddlyAdaptor.errorInFunctionMessage.format(['getTiddlerCallback']);
	        if(status){
	                var info=[]
	                try{
	                    eval('info=' + responseText);
	                }catch (ex){
	                        context.statusText = exceptionText(ex,ccTiddlyAdaptor.serverParsingErrorMessage);
	                        if(context.callback)
	                                context.callback(context,context.userParams);
	                        return;
	                }
	                context.tiddler.text = info['text'];
					context.tiddler.tags = info['tags'].split(" ");
	                context.tiddler.fields['server.page.revision'] = info['revision'];
				    context.tiddler.modifier = info['modifier'];
	                context.tiddler.modified = Date.convertFromYYYYMMDDHHMM(info['modified']);
	                context.tiddler.created = Date.convertFromYYYYMMDDHHMM(info['created']);
	                context.status = true;
	        }else{
	                context.statusText = xhr.statusText;
	                if(context.callback)
	                        context.callback(context,context.userParams);
	                return;
	        }
	        if(context.callback)
			context.callback(context,context.userParams);
	};

	ccTiddlyAdaptor.prototype.getTiddlerRevisionList = function(title,limit,context,userParams,callback){
		context = this.setContext(context,userParams,callback);
		context.title = title;
		context.revisions = [];
		var tiddler = store.fetchTiddler(title);
		var encodedTitle = encodeURIComponent(title);
		var uriTemplate = '%0/handle/revisionList.php?workspace=%1&title=%2';
		var host = this.fullHostName(this.host);
		var workspace = context.workspace ? context.workspace : tiddler.fields['server.workspace'];
		var uri = uriTemplate.format([host,workspace,encodedTitle]);
		var req = httpReq('GET', uri,ccTiddlyAdaptor.getTiddlerRevisionListCallback,context);
	};

	ccTiddlyAdaptor.getTiddlerRevisionListCallback = function(status,context,responseText,uri,xhr){
		if(responseText.indexOf('<!DOCTYPE html')==1)
			status = false;
		if(xhr.status=="204")
			status = false;
		context.status = false;
		if(status){
			var r =  responseText;
			if(r != '-' && r.trim() != 'revision not found'){
				var revs = r.split('\n');
				for(var i=0; i<revs.length; i++){
					var parts = revs[i].split(' ');
					if(parts.length>1){
						var tiddler = new Tiddler(context.title);
						tiddler.modified = Date.convertFromYYYYMMDDHHMM(parts[0]);
						tiddler.fields['server.page.revision'] = String(parts[1]);
						tiddler.modifier = String(parts[2]);
						tiddler.fields['server.host'] = ccTiddlyAdaptor.minHostName(context.host);
						tiddler.fields['server.type'] = ccTiddlyAdaptor.serverType;
						context.revisions.push(tiddler);
					}
				}
			}
			context.revisions.sort(function(a,b){return a.modified<b.modified?+1:-1;});
			context.status = true;
		}else{
			context.statusText = xhr.statusText;
		}
		if(context.callback)
			context.callback(context,context.userParams);
	};

	ccTiddlyAdaptor.prototype.putTiddler = function(tiddler,context,userParams,callback){

		context = this.setContext(context,userParams,callback);
		context.title = tiddler.title;
		var recipeuriTemplate = '%0/handle/save.php';
		var host = context.host ? context.host : this.fullHostName(tiddler.fields['server.host']);
		var uri = recipeuriTemplate.format([host,context.workspace,tiddler.title]);
		var d = new Date();
		d.setTime(Date.parse(tiddler['modified']));
		d = d.convertToYYYYMMDDHHMM();
		var fieldString = "";
		for (var name in tiddler.fields){
			if (String(tiddler.fields[name]))
				fieldString += name +"='"+tiddler.fields[name]+"' ";
		}

		// Freds SEO Code 
		if(workspace)
		 	var breaker = "/";
		else
			var breaker = "";
		var el = createTiddlyElement(document.body, "div", "ccTiddlyTMP", null, null, { "style.display": "none" });
		var formatter = new Formatter(config.formatters);
		var wikifier = new Wikifier(tiddler.text,formatter,null,tiddler);
			wikifier.isStatic = true;
			wikifier.subWikify(el);
		delete formatter;
		var links = el.getElementsByTagName("a");
		for(var i = 0; i < links.length; i++) {
			var tiddlyLink = links[i].getAttribute("tiddlyLink");
		    if(tiddlyLink) {
		        if(hasClass(links[i], "tiddlyLinkNonExisting")) { // target tiddler does not exist
		            links[i].href = "#";
		        } else {
		            links[i].href = url+ workspace + breaker +tiddlyLink + ".html";
		        }
		    }
		}	
		// End Freds SEO Code 
		if(tiddler.fields['server.page.revision']==1)
			tiddler.fields['server.page.revision'] = 10000;
		else
			tiddler.fields['server.page.revision'] = parseInt(tiddler.fields['server.page.revision'],10)+1;
		if(!context.otitle)
			var otitle = tiddler.title;
		else
			var otitle = context.otitle;
		var payload = "workspace="+window.workspace+"&otitle="+encodeURIComponent(otitle)+"&title="+encodeURIComponent(tiddler.title) + "&modified="+tiddler.modified.convertToYYYYMMDDHHMM()+"&modifier="+tiddler.modifier + "&tags="+tiddler.getTags()+"&revision="+encodeURIComponent(tiddler.fields['server.page.revision']) + "&fields="+encodeURIComponent(fieldString)+
	"&body="+encodeURIComponent(tiddler.text)+"&wikifiedBody="+encodeURIComponent(el.innerHTML)+"";
		var req = httpReq('POST', uri,ccTiddlyAdaptor.putTiddlerCallback,context,{'Content-type':'application/x-www-form-urlencoded', "Content-length": payload.length},payload,"application/x-www-form-urlencoded");
		removeNode(el);
		return typeof req == 'string' ? req : true;
	};


	ccTiddlyAdaptor.center  = function(el){
		var size = this.getsize(el);
		el.style.left = (Math.round(findWindowWidth()/2) - (size.width /2) + findScrollX())+'px';
		el.style.top = (Math.round(findWindowHeight()/2) - (size.height /2) + findScrollY())+'px';
	}

	ccTiddlyAdaptor.getsize = function (el){
		var x ={};
		x.width = el.offsetWidth || el.style.pixelWidth;
		x.height = el.offsetHeight || el.style.pixelHeight;
		return x;
	}

	ccTiddlyAdaptor.showCloak = function(){
		var cloak = document.getElementById('backstageCloak');
		if (config.browser.isIE){
			cloak.style.height = Math.max(document.documentElement.scrollHeight,document.documentElement.offsetHeight);
			cloak.style.width = document.documentElement.scrollWidth;
		}
		cloak.style.display = "block";
	}

	ccTiddlyAdaptor.hideError = function(){
		var box = document.getElementById('errorBox');
		box.parentNode.removeChild(box);
		document.getElementById('backstageCloak').style.display = "";
	}

	ccTiddlyAdaptor.handleError = function(error_code){
		setStylesheet(
		"#errorBox .button{padding:0.5em 1em; border:1px solid #222; background-color:#ccc; color:black; margin-right:1em;}\n"+
		"html > body > #backstageCloak{height:100%;}"+
		"#errorBox{border:1px solid #ccc;background-color: #eee; color:#111;padding:1em 2em; z-index:9999;}",'errorBoxStyles');
		var box = document.getElementById('errorBox') || createTiddlyElement(document.body,'div','errorBox');
		var error = ccTiddlyAdaptor.errorTitleNotSaved;
		switch(error_code){
			case 401:
				error += ccTiddlyAdaptor.errorTextSessionExpired;
				break;
			case 409:
				error += ccTiddlyAdaptor.errorTextConflict;
				break;
			default:
				error += ccTiddlyAdaptor.errorTextUnknown+"<br />"+ccTiddlyAdaptor.msgErrorCode+error_code;
		}
		box.innerHTML = " <a style='float:right' href='javascript:onclick=ccTiddlyAdaptor.hideError()'>"+ccTiddlyAdaptor.errorClose+"</a><p>"+error+"</p><br/><br/>";
		createTiddlyButton(box,ccTiddlyAdaptor.buttonOpenNewWindow,null,function(e){ window.open (window.location,"mywindow");	 return false;});
		createTiddlyElement(box,"br");
		createTiddlyElement(box,"br");
		createTiddlyButton(box,ccTiddlyAdaptor.buttonHideThisMessage,null,function(){ccTiddlyAdaptor.hideError();});
		box.style.position = 'absolute';
		ccTiddlyAdaptor.center(box);
		ccTiddlyAdaptor.showCloak();
	}

	ccTiddlyAdaptor.putTiddlerCallback = function(status,context,responseText,uri,xhr){
		context.status = false;
		if(status){
			context.status = true;
		}else{
			context.status = false;
			if(xhr.status == 401 || xhr.status==409){
				ccTiddlyAdaptor.handleError(xhr.status);
			}else{
				ccTiddlyAdaptor.handleError(xhr.status);
				context.statusText = xhr.statusText;
			}
		}
		if(context.callback){
			context.callback(context,context.userParams);
		}
	};

	ccTiddlyAdaptor.prototype.deleteTiddler = function(title,context,userParams,callback){	
		context = this.setContext(context,userParams,callback);
		context.title = title;
		title = encodeURIComponent(title);
		var host = this && this.host ? this.host : this.fullHostName(tiddler.fields['server.host']);
		var uriTemplate = '%0/handle/delete.php?workspace=%1&title=%2';
		var uri = uriTemplate.format([host,context.workspace,title]);
		var req = httpReq('POST', uri,ccTiddlyAdaptor.deleteTiddlerCallback,context);
		return typeof req == 'string' ? req : true;
	};

	ccTiddlyAdaptor.deleteTiddlerCallback = function(status,context,responseText,uri,xhr){
		if(status){
			context.status = true;
		}else{
			context.status = false;
			context.statusText = xhr.statusText;
		}
		if(context.callback)
			context.callback(context,context.userParams);
	};

	config.adaptors[ccTiddlyAdaptor.serverType] = ccTiddlyAdaptor;
//}}}


//}}}

Welcome to ccTiddly 1.7. To get started please read the [[Help]]
August 23, 1966
a collection of notes and plans
Type the text for 'New Tiddler'
[[Final Documentation]]
[[Blog Posts]]
[[Private Home]]
[[Public Home]]
[[Private Home]]
[[Blog Posts]]
[[Project Plan]]
[[To Do]]
[[How To]]
[[Contact Information]]
v1 : 21-12-06
<!--{{{-->

<div id='topMenu' 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>
<!--}}}-->
/*{{{*/
/*Blackicity Theme for TiddlyWiki*/
/*Design and CSS by Saq Imtiaz*/
/*Version 1.0*/
/*}}}*/
/*{{{*/
body{	font-family: "Neue Helvetica", Helvetica, "Lucida Grande", Verdana, sans-serif;
	background-color: #fff;
	color: #333;}

#topMenu {position:relative; background:#282826; padding:10px; color:#fff;font-family:'Lucida Grande', Verdana, Sans-Serif;}
#topMenu br {display:none;}

#topMenu a{			color: #999;
			padding: 0px 8px 0px 8px;
			border-right: 1px solid #444;}
#topMenu a:hover {color:#fff; background:transparent;}

#displayArea {margin-left:1em; margin-bottom:2em; margin-top:0.5em;}


a, a:hover{
color:#333;
text-decoration: none;   background:transparent; 
}

.viewer a, .viewer a:hover {border-bottom:1px dotted #333; font-weight:bold;}


.viewer .button, .editorFooter .button{
color: #333;
border: 1px solid #333;
}

.viewer .button:hover,
.editorFooter .button:hover, .viewer .button:active, .viewer .highlight,.editorFooter .button:active, .editorFooter .highlight{
color: #fff;
background: #333;
border-color: #333;
}

.tiddler .viewer {line-height:1.45em;}
.title {color:#222; border-bottom:1px solid#222; font-family:'Lucida Grande', Verdana, Sans-Serif; font-size:1.5em;}
.subtitle, .subtitle a { color: #999999; font-size: 0.95em;margin:0.2em;}
.shadow .title{color:#999;}

.toolbar {font-size:90%;}
.selected .toolbar a {color:#999999;}
.selected .toolbar a:hover {color:#333; background:transparent;border:1px solid #fff;}

.toolbar .button:hover, .toolbar .highlight, .toolbar .marked, .toolbar a.button:active{color:#333; background:transparent;border:1px solid #fff;}

/***
!Sidebar
***/
#sidebar { margin-bottom:2em !important; margin-bottom:1em; right:1;
}

/***
!SidebarOptions
***/
#sidebarOptions { padding-top:2em;background:#f3f3f3;padding-left:0.5em;}

#sidebarOptions a {
			color:#333;
                        background:#f3f3f3;
                        border:1px solid #f3f3f3;
			text-decoration: none;
}

#sidebarOptions	a:hover, #sidebarOptions a:active {
			color:#222;
			background-color:#fff;border:1px solid #fff;
		}

#sidebarOptions input {border:1px solid #ccc; }

#sidebarOptions .sliderPanel {
	background: #f3f3f3; 	font-size: .9em;
}

#sidebarOptions .sliderPanel input {border:1px solid #999;}
#sidebarOptions .sliderPanel .txtOptionInput {border:1px solid #999;width:9em;}

#sidebarOptions .sliderPanel a {font-weight:normal; color:#555;background-color: #f3f3f3; border-bottom:1px dotted #333;}


#sidebarOptions .sliderPanel a:hover {
color:#111;
background-color: #f3f3f3;
border:none;
border-bottom:1px dotted #111;
}
/***
!SidebarTabs
***/
 .listTitle {color:#222;}
#sidebarTabs {background:#f3f3f3;}

#sidebarTabs .tabContents {background:#cfcfcf;}

#sidebarTabs .tabUnselected:hover {color:#999;}

#sidebarTabs .tabSelected{background:#cfcfcf;}

#sidebarTabs .tabContents .tiddlyLink, #sidebarTabs .tabContents .button{color:#666;}
#sidebarTabs .tabContents .tiddlyLink:hover,#sidebarTabs .tabContents .button:hover{color:#222;background:transparent; text-decoration:none;border:none;}

#sidebarTabs .tabContents .button:hover, #sidebarTabs .tabContents .highlight, #sidebarTabs .tabContents .marked, #sidebarTabs .tabContents a.button:active{color:#222;background:transparent;}

#sidebarTabs .txtMoreTab .tabSelected,
#sidebarTabs .txtMoreTab .tab:hover,
#sidebarTabs .txtMoreTab .tabContents{
 color: #111;
 background: #f3f3f3; border:1px solid #f3f3f3;
}

#sidebarTabs .txtMoreTab .tabUnselected {
 color: #555;
 background: #AFAFAF;
}



/***
!Tabs
***/
.tabSelected{color:#fefefe; background:#999; padding-bottom:1px;}
 .tabSelected, .tabSelected:hover {
 color: #111;
 background: #fefefe;
 border: solid 1px #cfcfcf;
}

 .tabUnselected {
 color: #999;
 background: #eee;
 border: solid 1px #cfcfcf;
 padding-bottom:1px;
}
.tabUnselected:hover {text-decoration:none; border:1px solid #cfcfcf;}
.tabContents {background:#fefefe;}





.tagging, .tagged {
border: 1px solid #eee;
background-color: #F7F7F7;
}

.selected .tagging, .selected .tagged {
background-color: #f3f3f3;
border: 1px solid #ccc;
}

.tagging .listTitle, .tagged .listTitle {
color: #bbb;
}

.selected .tagging .listTitle, .selected .tagged .listTitle {
color: #333;
}

.tagging .button, .tagged .button {
color:#ccc;
}
.selected .tagging .button, .selected .tagged .button {
color:#aaa;
}

.highlight, .marked {background:transparent; color:#111; border:none; text-decoration:underline;}

.tagging .button:hover, .tagged .button:hover, .tagging .button:active, .tagged .button:active {
border: none; background:transparent; text-decoration:underline; color:#333;
}



.popup {
background: #cfcfcf;
border: 1px solid #333;
}

.popup li.disabled {
color: #000;
}

.popup li a, .popup li a:visited {
color: #555;
border: none;
}

.popup li a:hover {
background: #f3f3f3;
color: #555;
border: none;
}



#messageArea {

border: 4px dotted #282826;
background: #F3F3F3;
color: #333;
font-size:90%;
}

#messageArea a:hover { background:#f5f5f5; border:none;}


#messageArea .button{
color: #333;
border: 1px solid #282826;
}

#messageArea .button:hover {
color: #fff;
background: #282826;
border-color: #282826;
}






.tiddler {padding-bottom:10px;}

.viewer blockquote {
border-left: 5px solid #282826;
}

.viewer table, .viewer td {
border: 1px solid #282826;
}

.viewer th, thead td {
background: #282826;
border: 1px solid #282826;
color: #fff;
}
.viewer pre {
border: 1px solid #ccc;
background: #f5f5f5;
}

.viewer code {
color: #111; background:#f5f5f5;
}

.viewer hr {
border-top: dashed 1px #222; margin:0 1em;
}

.editor input {
border: 1px solid #ccc; margin-top:5px;
}

.editor textarea {
border: 1px solid #ccc;
}

h1,h2,h3,h4,h5 { color: #282826; background: transparent; padding-bottom:2px; font-family: Arial, Helvetica, sans-serif; }
h1 {font-size:18px;}
h2 {font-size:16px;}
h3 {font-size: 14px;}
/*}}}*/
This is a space for us to drop and organize out thoughts while sharing with the group. Feel free to create as many tiddlers as you want (essentially sophisticated, searchable notecards). The structure of this site will evolve over the semester.

Here's a tiddler explaining some common formatting styles for this Wiki [[TiddlyWiki Formatting]]. It's similar to the formatting on Wikipedia, so if you've edited an article there it should be familiar.

Group Calendar: http://tinyurl.com/5ateot
[[Contact Information]]
[[Server Information]]
<<tagging todo>>
Type the text for 'New Tiddler'test
<<tagging howto>>
Type the text for 'Components'
Like most wikis, TiddlyWiki supports a range of simplified character formatting:
| !To get | !Type this |h
| ''Bold'' | {{{''Bold''}}} |
| --Strikethrough-- | {{{--Strikethrough--}}} |
| __Underline__ | {{{__Underline__}}} (that's two underline characters) |
| //Italic// | {{{//Italic//}}} |
| Superscript: 2^^3^^=8 | {{{2^^3^^=8}}} |
| Subscript: a~~ij~~ = -a~~ji~~ | {{{a~~ij~~ = -a~~ji~~}}} |
| @@highlight@@ | {{{@@highlight@@}}} |
<<<
The highlight can also accept CSS syntax to directly style the text:
@@color:green;green coloured@@
@@background-color:#ff0000;color:#ffffff;red coloured@@
@@text-shadow:black 3px 3px 8px;font-size:18pt;display:block;margin:1em 1em 1em 1em;border:1px solid black;Access any CSS style@@
<<<

//For backwards compatibility, the following highlight syntax is also accepted://
{{{
@@bgcolor(#ff0000):color(#ffffff):red coloured@@
}}}
@@bgcolor(#ff0000):color(#ffffff):red coloured@@
|!person|!e-mail|
|Jiangang Hao|jghao at umich.edu, jianganghao at gmail.com for Google Shares|
|Brian Nord|bnord at umich.edu, gnordster at gmail.com for Google shares|
|Chris Peplin|peplin at umich.edu, chris.peplin at gmail.com for Google shares|
|John Walters|jdwalter at umich.edu|
|Joe Trumpey|jtrumpey at umich.edu|
|Linda Kendall Knox|lkendall at umich.edu|
|Dan Fessahazion (technology)|danfdan at umich.edu|
|Jane Havens (finances)|havens at umich.edu|

''Group E-mail:'' august23 at umich.edu
We need to have a general idea of the milestones for our project, when those will occur, and what dates we'd like to have our design reviews with the other teams.
[[A Parallel Universe]]
[[Phase I]]
[[Phase II]]
[[Phase III]]
[[Docs]]
[[Brainstorming]]
[[Digital Interaction Media]]
!From Proposal
Deploy a mini-environment that couples the two classes of data. This step focuses on the integration of the two-scaled data set, adding to the kiosk enhanced user-interaction element. We will assess the degree of equivalence between these data sets, perhaps using it as a link between the human impediment to conceptualizing larger scales.

Begin or continue work on the universe simulation game. Choose technologies and weigh feasibility.

Link visualizations in VISIT or ~S2PLOT with hardware, possibly porting them to more flexible graphics libraries and using streamlined, preprocessed data sets. Redesign earlier environments based on participant feedback, learn from collaboration.

Begin organizing documentation and code in a packaged form suitable for an open source release at the project's finish.
In this phase, we should also look back at the proposal and see what we accomplished from what we set out to do.
!From Proposal
Culminate into a larger scale environment to be displayed at DL-1, realizing the dimensions of time and space. Allow a participant walking down a muslin sheet hallway to control the passage of time in a projected particle visualization via their body movement. At either end of the hall, create an interface for manipulating the orientation, depth, gravity, etc., of a cube of particles.

A plan for this phase may be to make a master list of all of the technologies we want to use, get some experience with all of them, build prototypes, and get the general framework up. Then, the next phase can take a look at what we've made/learned and figure out how to connect them all together.

Do we want to split this up by person so we all have clear tasks?
*General Software
**Investigate Google Sky API
*Data
** Get sample data sets out to the group to use with S2Plot and Visit
*Arduino
**Write software to connect HTML/RSS stream feed to arduino ouput (using Python or Processing in between)
**Build simple motorized feedback systems with arduino
*[[List of things to purchase]]
*Requisition enough equipment for one interactive kiosk, may or may not be secure
**Computer + LCD
**Enclosure
*** Start thinking about ways to house/hide the electronics, how to "pretty" it up
*** data retrieval: time-based video observation of the user

* Contact display sites

*Playpanel I; multitouch display: [[Multitouch Instructions | august23/uploads/workspace/default/multitouchdisplay_howto_070523_v02.pdf]] 
** Construction on Jan 14 and 15th in DL1 and A+D



!From Proposal
Deploy a mini-environment for each class of data in a public venue. These will be kiosks that allow passersby to observe and experiment with our data in two ways. Using a video camera or motion detector, we will glean the effectiveness and holding power of the display. This first step will give the project members a sense of how users will happen upon and interact with these phenomena.

The ~S2Plot, VISIT, and Google Sky software packages have already been applied to our cosmological data set; a computer terminal can be set up in any small space to allow for ad hoc explorations of our cosmic data. This step focuses on the user-to-data interaction. The user will be able to choose data sets, explore the astronomical images in multiple dimensions, and even make basic alterations to the data set. We are in the process of contacting malls, Apple Stores, and local coffee shops.

Implement a small physical device end-to-end — from an astronomical data stream to animated hardware.The principle technical challenge lies in information handling and scripting, rather than construction. Feedback from participants will be reflected the next aesthetic revision.
*[[Date Milestones]]
*Shared workspace available?
*Equipment requisition
**[[List of things to purchase]]
*How do we see ourselves interacting with the other teams? what do we hope to get out of the design reviews?
[[testing file|august23/uploads/workspace/default/August231966.pdf]]
#On the sidebar on the right side of the page, click "options"
#Click "files"
#Click "Upload File", then browse to find the file on your computer and upload it to the web server
#In the tiddler you wish to link to this file or image, put the following code:
{{{
[[Description of the file|august23/uploads/workspace/default/YourFile.jpeg]]
}}}
replacing the description and filename with your own.
REAR DI Table
* LED lamps
** power sources come with these lamps
* camera
** http://www.robertreeves.com/900NC.htm
* Lens for camera
** http://www.dealextreme.com/details.dx/sku.15774
After a few days of design contemplation, and then another few days for pre-fab, the Light Table is looking great.  In a few days, we'll punch up the software.
Type the text for 'Docs'
! Wrap it up (ideas for the final dilly)
* Spaceship Duder: simply modify a local space to feel like a spaceship, train, human cell, etc.  A DJ local, or over the internet takes you on a ride through the various scales.
* cosmic story panel: each participant can create their own cosmic comic strip from a set of building blocks.  
! Cosmic Events and Concepts worth connecting to
* Dynamics
## collisions
* The echoes of the Big Bang
** We (i.e., everything in the cosmos) sits in a bath of radiation, whose temperature is about 2.7 degrees Kelvin; just like you can feel the sun's heat, you could feel this heat if you not near other overshadowing sources.  There are two points worth exploring more deeply.  
## The temperature is only "about" 2.7 K: There are fluctuations in this temperature as can be seen in the image below.  This is view of the entire sky's temperature.  Local temperatures have been removed to reveal this map, which is from the earliest visible moments in the universe's history.  
## This "bath" is all around us.  There is no center of the universe.  Therefore the big bang did not happen in one place, but it happened everywhere.  
[img[http://startswithabang.com/wp-content/uploads/2008/02/dn11172-1_640.jpg]]
* Speed ladder
** Speed of light: ~3x 10^^5^^ km/sec                               
** Speed of Milky Way Galaxy: ~600 km/sec                    
** Speed of Sun: ~200 km/sec                                              
** Speed of universe expansion: ~ 70 km/sec/mpc                       
** Speed of planets in our solar system: ~ 30 km/sec               
** Speed of rocket: ~ 10 km/sec                                            
** Speed of car: ~10^^-2^^ km/sec                                              
** Speed of walking: ~10^^-3^^ km/sec    
## Applications
### user chooses the speed of light in a visualization or in his/her part of the simulation, and this is incorporated into the cosmic evolution they see. 
### the idea of speed limit, since speed of light is the maximum limit for our universe
### what does it feel like to ride alongside a photon: you appear to be everywhere at once, since time stops for you.                                    
*Mass ladder
** Mass of electron: ~9.0 × 10^^-31^^ Kg
** Mass of a person: ~75 Kg
** Mass of Earth: ~ 10^^24^^ Kg 
** Mass of Sun: ~10^^30 ^^ Kg
** Mass of Milky Way Galaxy: ~10^^41^^ Kg
** Mass of Galaxy Cluster: ~ 10^^44^^ Kg
** Mass of Universe: OMG, don't know.
*Size ladder
** Radius of atom: ~10 ^^ -11^^ m
** Height of person: ~1.7 m
** Radius of Earth: ~6.0x10^^6^^ m
** Radius of Sun: ~6.0x10^^8^^ m
** Radius of Milky Way: ~10^^20^^m 
** Radius of observable Universe: ~ 10^^26^^ m
* Objects or Events in Universe
<html>
<table border=0>
<tr>
<td>Pulsars</td><td>Gravitational Lensing</td><td>Gravitational Wave</td>
<tr><tr>
<td>  <img height=300 width=300 src="http://www.nasa.gov/images/content/230242main_Pulsar2_sm.jpg"></td><td><img height=300 width=300 src="http://www.windows.ucar.edu/the_universe/images/ab2218_sm.jpg"></td><td><img height=300 width=300 src="http://lisa.jpl.nasa.gov/gallery/images/binary-wave.jpg"></td>
</tr><tr>
<td>Supernovae</td><td>Nebula</td><td>Galaxy</td>
<tr><tr>
<td>  <img height=300 width=300 src="http://dahowell.googlepages.com/Supernova_Lead_Art.jpg/Supernova_Lead_Art-full;init:.jpg"></td><td> <img height=300 width=300 src="http://mindflight.plymouth.edu/mf2001/space/nebula/PN_EskimoNebula.jpg"></td><td> <img height=300 width=300 src="http://shareme.com/images/large/Free_Galaxy_Screensaver-2579.jpg"></td>
</tr><tr>
<td>Sun</td><td>Earth</td><td>Black Hole</td><tr>
<td>  <img height=300 width=300 src="http://stardate.org/images/gallery/sun5.jpg"></td><td> <img height=300 width=300 src="http://www.rps.psu.edu/probing/graphics/earth2.jpg"></td><td> <img height=300 width=300 src="http://www.ifa.hawaii.edu/~barnes/ast110_06/bhaq/Black_Hole_Milkyway.jpg"></td>
<tr>
<td>Neutron Star</td><td>White Dwarf</td><td>Binary Star</td>
<tr>
<td>  <img height=300 width=300 src="http://msnbcmedia4.msn.com/j/msnbc/Components/Photos/070820/070820_star_hmed_12p.widec.jpg"></td><td> <img height=300 width=300 src="http://www.nasa.gov/images/content/139458main_image_feature_468_ys_4.jpg"></td><td> <img height=300 width=300 src="http://www.cosmographica.com/gallery/portfolio2007/content/bin/images/large/130_Contact_Binary.jpg"></td>
<tr>
<td>Quasar</td><td>Bullet Cluster</td><td>Galaxy Cluster in X-Ray band</td>
<tr>
<td>  <img height=300 width=300 src="http://www.independent.co.uk/multimedia/archive/00023/quasar_23138t.jpg"></td><td> <img height=300 width=300 src="http://farm1.static.flickr.com/134/363032137_dfa5f4561d.jpg"></td><td> <img height=300 width=300 src="http://cache.daylife.com/imageserve/06nG2DZcYLbbz/610x.jpg"></td>
<tr>
<td>Galaxy Cluster in Optical band</td><td>Cosmic Web</td><td>Evolution of Universe</td>
<tr>
<td>  <img height=300 width=300 src="http://www.astrographics.com/GalleryPrints/Display/GP0074.jpg"></td><td> <img height=300 width=300 src="http://astro.uchicago.edu/cosmus/projects/sloangalaxies/sdss836dome_small.jpg"></td><td> <img height=300 width=300 src="http://www.negotiationlawblog.com/Big%20Bang.jpg"></td>
</table>
</html>
! Hitting four senses
as humans we have senses that are meant for earth adn surviving rather than observing the universe
*visual:
** gravlensing with a group of people
** project image or white light and let the properties of the space it runs through act as space.
** bright light 
* sound of the verse
** record a room's sound; translate this into a rumble that mimics big bang
** output: sound + visual rep.
** elevated sound level triggers a later event
** gravitational waves from everything
** http://www.radio-astronomy.net/
** mix together historic speeches 
* touch:
** orb that we can feel
** temperature plate to feel heat of star
*top-down ( re - appropriate a space to our verse)
** turn a snapshot of the duderstadt space into solar system
* Dancing with multi-touch DJ
* can every one make a space and rock show? everybody puts in a point and a sound. 
! Mixing the Senses
* turn photon frequencies in to sound frequencies of an object
* visualize grav wave with the sound in a room, and make it depend on what happened somewhere else: show map of source.  
! Senses of Space and Time, and SpaceTime
* timeline: timewiki; add your own cosmological story alongside our physical cosmology and other myths
* aging: put a human body/face next to a star/galaxy and let age.  This is similar to what the gnomes and hobbits did when they planted a tree and it was linked to the child born at the same time.  
* Traveling in time space is equivalent to traveling in time, necessitated by the finite speed of light.  As Scott ~McCloud notes, this is the same way a comic story is told. 
!Feedback and Interaction
*Sense of time
** Autism can alter this relative to normal growth
** biological rhythms: what is the cyclic nature found in culture, biology and the cosmic engine
** what does it feel like to ride a photon?
* The cosmos as technology
** Cosmic Engine
* Art
** Escher
** http://90.146.8.18/singapore_dat07/en/projects01.asp
* Sound
* Storytelling
** mix words and sounds as if they followed the forces of nature
!General
* tabletop touch exploratory
* We bent spacetime": when two people walk into a small room (their weight known), a large image near them on the wall or beneath them on the floor warps according to them.  It doesn't merely warp an image, but adjust the particle/body kinematics as if a new large particle has entered the system.
**requirements: fast computation depending on the number of bodies and the sophistication of the rendering; appropriate code unknown.
* True colors"/"star counterpart": upon looking at a celestial object in a given frequency range ... use a camera to remap the colors of a person's face to a similar color distribution 
*What's your cosmic age?": as a galaxy ages in front of the viewer, he/she also ages accordingly in a nearby image.
**requirements: image aging software; image display
*The sound of a cluster": present a cluster or particle distribution that has the same wave number structure as a refrain in a song that the viewer chooses; match the fourier transforms of the clusters spatial distribution with fourier transform of the song; present the cluster that matches the song. 
**alternative: sky images at different different points in time.  
**requirements: FT is fast, but what about the matching?
*Nature vs. Nurture, in Us and in the cosmos": Each of us has a set of genes, and these play a large part in our eventual fate; our environment molds us within the bounds of our genes.  Similarly, our universe has a specific set of genes, and this is the starting point for the subsequent evolution; but the universe is everything (so we think), and it's internal structure formation is stochastic.  So, the interplay between it's discrete types of content drives its destiny.  Can we show the formation of multiple different universes side-by-side with multiple different people?
*Rules of Storytelling": The universe has a few major rules that govern how it grows.  How does a story grow? It follows a few grammatical rules, but the art is left to the teller.  We can have visitors add their words to a story and create multiple universes from the total of people's added words.  
*DJ cosmo": each record can be a real album or a special "album" for a cosmic entity; the DJ can mix the albums and somehow affect the video.
**http://www.youtube.com/watch?v=K0iKLHGqpTo
*Build your own Universe": choose a few parameters, and then one special to the person ... then watch your universe come alive in a video monitor
*Play with your own Universe": given a pair of objects in the sky, with a multitouch monitor, allow the user to collide or move objects with respect to each other
*Multi-touch human-esque unit": multi-touch suit?
*Scales of Life": Incrementally step through different worlds that have different scales
#smallest living thing? virus, bacterium
#human
#redwood tree
#Earth
#solar system ... etc
**At each level, what are the levels of complexity in a strict sense? Is there individuality?  What is the experience of time for the individuals and the groups at these times? 
**We've asked how small can life get, looking for the constituent parts.  But, how big can life get, how interconnected?  Is the cosmos alive?  consciousness.
*A molecule's Journey": We Could follow a molecule (or a photon) through all the scales it might traverse in the universe.  One of the questions that began Einstein's exploration was, "What happens if I catch up to a photon?"  idea found in the original planet Earth series ... episode that discussed Lovelocke's Gaia.
*reforming images of the universe/sky with genetic algorithms, like the dude that re-did the mona lisa
*a ball of gel or physical fluid sac that has infrared leds in it; pushing on it should create light signals that emanate from a single point and form tracks or show changes in density.
*mosaic of a person's face with astronomical images.  
!Notes from first brainstorm meeting
*Changing learning levels across a spectrum
**Should have fun things for 5 years olds and informational parts for postdocs if they dig deeper
*Overlap accessibility & scalability
*For some crowds, a play element is important, for others the learning experience should be available
*What are we //not//?
**Boring science museum kiosk with light up buttons
**Needs to be COOL
*Headphone enclosure for audio, which also houses sensors and tracking equipment
*Interactive table
**Flat or concave curved table, dome projection
*Rubix cube block-ish controllers determine parameters of what we're simulating
**Setting cube down, is it part of the simulation itself? Or just some controller off to the side


*All calculations should be done server side, so the requirements for the client are as low as possible
*How do we sync client graphics with the sim running on the server? A few options
**Only update client graphics when database is updated
**Client does RPC to a server thread instead of connecting to the database
**Client does predictive movements, corrects them when the server updates (increased requirements for client, and could be added down the road and just have it be jumpy for now)
*Calculate interactions and movement more frequently for fast moving, small bodies
**Certain events will trigger a recalculation for all
*Calculations are contained within the scope of each level of scale, ie. system interactions don't effect what happens within each system, unless maybe the whole thing is destroyed
*~QUESTIONs:
**what will the client use for rendering?  and is this rendering real-time?
***If we decide s2plot offers functionality that we need, I say we do a C++ client and avoid reinventing the wheel
***If we decide our needs are specific enough that we should use straight up openGL calls, I say we do a Java client for maximum portability and easier coding
***Either way, it's real time, and input will be received either via regular mouse+keyboard input, or via TUIO message passing

!Coordinates
*First system in a galaxy is (0,0,0) of the galaxy
*Star of a system is (0,0,0) of the system
These are some simple-ish ways to start experimenting with our desired tech items.

*Wiimote controlling S2PLOT (through Python?)
*Particle data in Processing (w/ OpenGL)
*Wiimote controlling Processing
*Wiimote working via Bluetooth
*Wiimote via hardwired Arduino
*Rear projection with a glass surface on top, multitouch
*Color tracking from webcam w/ Processing
*Button into Arduino controlling mode of S2PLOT or Processing
*Parse JTrack down to Arduino level - control a motor
*Some sort of feedback from physical interface to Twitter or e-mailing us
*Rubix cube controller (gut one, see how the switch would work)
*Reverse control - web interface to control either something physical or the properties of the data being rendered

Could we do anything with a Wiremap?
How about a spherical mirror, dome and that OmniMap API?

We need to make concrete what data we'll be manipulating. What's feasible to change and recalculate on the fly, and what must be precomputed?
!FTP Information
Server:  ftp.rhubarbtech.com
Username: <your uniqname>@rhubarbtech.com
Password: <removed for public consumption, contact Chris if you forgot>

We have unlimited storage space - don't upload files directly to the bzr directory. Use that for text files and source code, or files that will need to be versioned. For large images, videos or binary files, just upload them with FTP.

If you don't already have a favorite, I recommend FireFTP (http://fireftp.mozdev.org/) - it's cross platform and works from inside Mozilla Firefox.

!Bazaar Information
Server Path:  ftp.rhubarbtech.com/bzr
Username: <your uniqname>@rhubarbtech.com
Password: <removed for public consumption, contact Chris if you forgot>

You can download Bazaar here: http://bazaar-vcs.org/Download - it's available for all platforms.

To check out a working copy of our repository (yes, you need the domain twice):
{{{$ bzr branch ftp://<your uniqname>@rhubarbtech.com@rhubarbtech.com/bzr}}}

To update your local copy:
{{{$ bzr up}}}

To check in a revision to your local copy:
{{{$ bzr add}}}

To push your new revision back to the central server:
{{{$ bzr push}}}

This user guide is helpful for the details of bzr commands: http://doc.bazaar-vcs.org/bzr.dev/en/user-guide/index.html

If you haven't used version control before, I suggest this short intro: http://betterexplained.com/articles/a-visual-guide-to-version-control/
Bazaar is slightly different, as it's a distributed VCS - check out this intro by the same author: http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/

From our proposal:
"We will also explore the possibility of a collaborative universe creation computer game written in Java and Processing. Based on a true to life cosmic starting point, participants can manipulate galaxies and change the laws of physics on the fly. The creator can allow players to catalog and experiment with a shared universe (similar to the game, Spore ) while exploring scientific laws and theories of creation, order, and design."
!Origin
I was thinking about how to bring our ideas back into one solid, rich project. I was worried we would spend the semester fiddling our way somewhere, which while I'm sure would be a worthwhile experience, makes me a little uneasy. I'm a software person, and I like specifications. 
!Abstract
Consider it a play off of the many-worlds theory - alongside our world, with its crumbling economies and warring nations, there exists a digital universe that is directed by you, the user. Just like here, many parameters are outside of your control. The interesting part is choosing what you can, timing as you may, and watching the results.
!Comments
*I see this as Second Universe ... no, Next Universe or SIM Verse, but better
*I'd also like to have a way to keep in touch with the full cosmos.  Perhaps we can have multiple levels of spacetime interaction: one person has built the cosmos, another a galaxy, within that another person has constructed a planetary system, etc.
*Our final display can be a walk-through installation where multiple people can customize and build their universes together, while others are viewing them on-screen.
*The ability of the user to tell their own story and let that story be reintegrated into a larger one is a very strong aspect of this, but this is not immediately apparent to the user: it's still Meta-data.  We need a mode of interaction that will "bridge" these scales. 
!Names
*Simverse (probably troublesome, with the current trademarked Sim*)
*United Universe
*Origins
*ONE - Origins, now electronic: this over-emphasizes the digital part of our project.  
*TWO - The Wormhole Opens, also two because of two universes, ours and the digital.
**Twoverse
*Wormscale
*Your Verse
*~Multi-Verse
*~CosmUs
!Requirements
There are a few requirements that I think will unite our ideas and questions (and I think there are many more yet to be explored).
It must be:
*Multiplayer
**One or two primary terminals in DL-1, but also simultaneously active with online and mobile users
*Low commitment for a user, and won't allow you to devote too much time to it at any one moment
**eg. 5 minutes per day to check up on things or make small changes
**Can't sink 20 minutes, then get bored and never think about it again - want to live past the &amp;quot;wow, that's neat&amp;quot; factor
*Centralized in DL-1 with the primary interaction being there, where we can offer unique interfaces and better graphics
**Offer something unique here to encourage users to come together in a physical space to talk about their creations or plan
explorations and colonization pushes in the universe
!Software
*Google Sky modification
*Integration of S2plot and Processing
*There exist hi-res geometry converters that make this deployable in different environments, including planetaria
*Backend server written in Python or Java
**Use MySQL database backend to store and centralize data about users and what they create
**Server runs constantly, updating positions of objects and their behaviors
*Web-based frontend running on same server
**Text-based status updates, some simple graphics to display orbits and distances
*Processing frontend, using OpenGL for graphics
**Should be able to run on any computer that can connect to the server, either on campus or off
''User Accounts''
I think this game would require user accounts for the cooler features, so objects could be owned by different people. We could figure out a way to label them, but I don't think there needs to be a formal, competitive game. It's everyone vs. space, and if someone builds drone satellites to smash into someone else's launch vehicles in race to colonize, so be it!
!Input Elements
The universe may start with some phenomena and astral bodies, but the rest is up to the users, who could add and determine.  The layers are:
''Man-made Bodies''
*Space travel vehicles
**Size
**Population
**Speed
**Radiation protection
**Heat/cold protection
**Power generation
**Flight plan or orbit, could be a recurring vessel traveling from the moon to Earth
*Satellites
**Purpose
**Corporate/national logo, for a high-level sort of &amp;quot;colonization&amp;quot; of areas of galaxies
**Speed
**Orbit
**Destination for long distance scientific missions
''Celestial Bodies''
*Cosmos?
*Group of Galaxies
** Galaxies
** gas between galaxies
*Galaxy
** stars
** black holes
** interstellar gas
*Star system
** planet
** comet
*planetary system (including a mirror of our solar system)
*planet (network of cities)
**Size
**Density
**Composition (desert, ice, dense gas, etc)
**Initial orbit
**Population and habitability
*Single city ( network of neighborhoods ) 
''Feedback and Interaction Systems''
The special installations in DL-1 can have control methods developed by our team. The Wiimote would be a fantastic way of dragging and dropping new elements into the universe, and you could drag onscreen sliders to change parameters. A multitouch table would accomplish the same thing, and be that much cooler. There is certainly a way to incorporate video feeds of people into the game as well - as I said, i think we can incorporate all of our ideas here, it's just a great way to integrate them all together.
* Multi-touch display interface: cheaply develop higher-dimensional, sophisticated haptics
** multi-touch table
** multi-touch upright panel
** Faux 3D interface
* Lightbox, multi-person space
* Focus on Some larger connections that we want to make evident
** cosmology as mythology (storytelling)
** complexity (particles as swarms): include agent-based modeling
* Focus on non-visual sensory methods
** what is the sound of space
** What does infinity feel like?
''Integration of digital universe back into our physical world''
I haven't explored this much yet, but even cooler than representing astronomic data would be representing data from our simulated universe. It would have some personal connection to the users, making them that much more interested.
*Analog meter displays showing the number of spacecraft/asteroids in a certain area
*Color shifting light from green to red to indicate the number and severity of predicted interstellar collisions
*Unobtrusive sounds to indicate when a new planet or galaxy is born...ping!
*A physical sphere at different input points (kiosk, but not a kiosk) will relay a given star's features.
** we can replay events on different timescales on this 3D viewer.
*How can we explicitly connect to other concepts and paradigms featured in our proposal, like complexity, emergence, the similarities between biology and cosmology?
!Features
''Real, live universe data integration''
Far from an isolation simulation, however, this parallel universe has some crossover with our current space (and in real time!). Imagine the Sun in this digital universe, matching the solar flares of our own. I see the entire graphical interface going blurry/static-y during periods of high proton wind, or cause your space vehicles and satellites to lose communication and spin out of control.
We could also bring in factors here that have nothing to do with astronomy - the amount of activity in DL-1 could determine properties of some special galaxy cluster, or the people in the room could automatically have an asteroid generated for them.
''Time scales''
Time is a big issue with this game. We want it to be slow enough that you can make some decisions one day, but then you have to wait 24 hours or more for big enough changes to happen. The time should also be fast enough that we can demonstrate some really amazing phenomena in a more human time scale - note that not all of the bodies have to obey the same time scale, since we're not trying to be super fact-accurate. The time scale for stars could be greatly accelerated so we can ultimately see them collapse. For space travel, maybe it takes 3 hours instead of 3 days to go from Earth to the moon. Do we ever reset the universe? This may be mediated by having several levels of God-power.  Each level controls a different scope of the verse.  
''Replayability''
We've discussed replayability before, and I think this game will satisfy our requirement. There are many ways to lure users back:
*The fun of putting your name on a cluster of planets or on a convoy of space vessels destined for Andromeda.
*The parental like ownership you may feel watching your star grow up, and the pains in your heart when it dies (oh, how sad)
*Something to check on for just a few minutes each day, and more educationally rewarding than your fantasy football scores
**There could be a great mobile aspect of this - I do want to make a web interface so you could check on a brief status of your objects from a web site, without being in or near DL-1. The system could also text message your phone if a collision is predicted between any of your objects (there's actually a really cool live data stream for this in the real world, which lists upcoming possible collisions ranked by proximity and probability).
''Dynamic Scale and Interaction''
All of this is dynamic, meaning that if someone came along and created a new empty galaxy, another person could see that galaxy later and populate it with their solar systems. There's a really fascinating, hierarchical structure to the whole thing that makes it //ideal// for software development.
Here we outline the various modes of interaction that will connect the observer and his/her universe.  These modes are what allow the visceral experience.  So we must choose wisely.
* Each mode can access a different scope (God's view or immersed human view)
* We can start with two different levels: from large to small.
** Light table
** Reactive room/mechanical simulator/ light box
Here we list the modes of soft interaction for the multi-scale digital environment.  "Soft" means non-mechanical or nearly purely digital
*Tabular interfaces -- multitouch, LED-lit playtable
** http://sassexperience.org/multitouch/water.html
** http://schproket.blogspot.com/2007/12/step-15.html
** http://ssandler.wordpress.com/
** http://lowres.ch/ftir/
** http://nuigroup.com/forums/viewthread/1410/
** http://nuigroup.com/forums/viewthread/1982
*Open space interface -- 
*Home computer
*Documentation
**General
***http://www.billbuxton.com/multitouchOverview.html
**controllers
***http://www.cypress.com/?id=1194
**Companies
***http://www.n-trig.com/Default.aspx
**LEDs
***http://ledcalculator.net/default.aspx?values=19.43,1.5,120,12,0
***led wizard
*Our Interfaces
** LightTable
*** Rear DI setup
****Materials
***** Illuminators: http://www.avtechsolutions.com/s_ir_illuminators.htm?gclid=CNaq9N27lpgCFSTaDAodJWKnmQ
** Hand-gesture focused

* Calibration
** http://wiki.nuigroup.com/Getting_Started_with_tbeta
** 1st attempt
*** set threshold and highpass to obtain distinct fingerpoints
*** increase amplification to enhance finger points, regardless of speckle/noise
*** use smooth to reduce noise/speckle
[[Public Home]]
[[Blog Posts]]
[[Login]]
<html>
<img  height="235" style="margin:10px;" src="http://rhubarbtech.com/august23/uploads/workspace/default/153534main_image_feature_623_ys_full.jpg" alt="Angry face" align="left"/>
</html>

How do you tell the universe's story as our story?  Myth has been intertwining the small and the large for a very long time, with varying degrees of success.  Our modern physical cosmology is another mythic story in the suite of human cosmogonies.  Though it holds a special place as one that is connected to physical reality, it may be interpreted in many ways.  By implementing mechanical and digital interaction technologies, the interpretation can become re-manifestation, where the observer tells a personal story of the cosmos.  

Track the life of the star you created in our gallery exhibition here: http://august231966.com/gallery
~TiddlyWiki is a single html file containing all the characteristics of a wiki - all the content, all the functionality (including editing, saving, tagging and searching) and the style sheet. Because it's a single file, it's very portable - you can email it, put it on a web server or share it via a USB stick. ccTiddly provides a serverside backend to ~TiddlyWiki so you can store your content on the web and access it from anywhere. 

Together the two provide a powerful combination which allows you to collaborate with your colleages online, you can then tear a copy of all the work to take on a plane or train journey.  When you have found an internet connection again you can sync your changes with the online copy and you will be notified of any conflicts. 

Some things you could do with ccTiddly workspace include: 

	* A team/public Website
	* A Blog
    * A personal notebook
    * A GTD ("Getting Things Done") productivity tool
    * A collaboration/communication tool
	* A TeamTasks implementation
    * For building websites (this site is a TiddlyWiki file!)
    * For rapid prototyping
    * ...and much more!

You can import and export data to and from all sorts of places. Check out the backstage > import options. There's a more detailed list of features here.

<<slider cctHelpIntro [[ccTiddly Introduction]] "ccTiddly Introduction »" "A introduction to the basics of TiddlyWiki.">>
<<slider cctHelpFormatting [[TiddlyWiki Formatting Guide]] "Tiddly Wiki Formatting Guide »" "A basic guide to TiddlyWiki formatting.">>
<<slider cctHelpccTiddlyMacros [[ccTiddly Macros]] "ccTiddly Macros »" "A Guide to all the ccTiddly Macros">>
<<slider cctHelpTiddlyWikiMacros [[TiddlyWiki Macros]] "TiddlyWiki Macros »" "A Guide to all the TiddlyWiki Macros">>

{{{
svn co https://www.smartelectronix.com:9000/repos/osc/oscpack/trunk oscpack
cd oscpack
}}}

Add {{{-fPIC}}} to the {{{COPTS}}} variable in the Makefile for 64-bit compilation.
I also had to add {{{#include <cstring>}}} to the top of one of their source files (try that if you see errors), but that should be fixed in svn pretty soon.

{{{
make lib
sudo make install
}}}
First, install ~OSCPack ([[Howto Install OSCPack]])

{{{
svn co http://touchlib.googlecode.com/svn/trunk/ touchlib
cd touchlib
}}}

Grab touchlib_dependencies.txt from our repository

{{{
cat touchlib_dependencies.txt | xargs sudo apt-get install -y
}}}

Now you can compile

{{{
cmake .
make
}}}

Download the latest binary build:
{{{
wget http://tbeta.nuigroup.com/zip/release/tbeta-1.1-lin-bin.tar.gz
tar -xzf tbeta-1.1-lin-bin.tar.gz
}}}

tbeta needs some 32-bit libraries - I have checked them into our repository. If you are using 32-bit Ubuntu, you can just install them like this:
{{{
sudo apt-get install libpocofoundation5 libpocoutil5
}}}
Otherwise, copy the files from the repository:
{{{
cp libPocoFoundation.so.5 libPocoUtil.so.5 libPocoXML.so.5 /usr/lib32
sudo ln -s /usr/lib32/libPocoFoundation.so.5 /usr/lib32/libPocoFoundation.so.2
sudo ln -s /usr/lib32/libPocoUtil.so.5 /usr/lib32/libPocoUtil.so.2
}}}
Here is a brief summary about the math formula that govern the motion of planets in our solar system. 
''1. Stable Orbits:''
To make things manageable, we assume the planets all rotate around sun by following uniform circular motion(This is a fair enough assumption for our purpose). Then, the angular velocity of the planet is independent of its mass. It only depends on the Mass of the Sun and the distance between the planet and Sun. Here is the formula:
//w//=sqrt(G*M~~sun~~/R^^3^^)  
Where //w// is the angular velocity of the planet, M~~sun~~ is the mass of the Sun, R is the distance between the planet and Sun. The period of the planet is given by 
T=2 * pi / //w// = 2* pi * sqrt[R^^3^^/(G*M~~sun~~)]
So, the distance between the planet and the Sun is the only variable that can change the angular velocity of the planet (how fast it can move). At a specific R, there is a specific angular velocity. That is to say, the farther away the planet to the Sun, the slower its angular velocity and there for the longer its period. For our solar system, the following is a summary:

Planet  	Distance from the Sun   Period of Revolution Around the Sun
---------------------------------------------------------------------------------------------------------------
Mercury                 0.39 AU                         87.96 Earth days
Venus  	                 0.723 AU                       224.68 Earth days
Earth                     1 AU                              365.26 days
Mars                      1.524 AU                        686.98 Earth days
......
For more, see this link: http://www.enchantedlearning.com/subjects/astronomy/planets/

''2. Perturbation to the orbits:'' 

The above situations are stable situations. When there is a perturbation to one planet, its orbit will change to elliptical from circular. If the perturbation is strong enough, then the orbit of the planet will change to a hyperbolic orbit, which means the planet will fly away from the solar system. The exact solution of this problem could be very complicated. So, we did some simplification here. That is, after a perturbation, we will replace the the circular motion with a motion along a elliptical orbit with our arbitrary velocity that roughly follow the Kepler's Law. This is enough for our purpose of demonstration. It is not easy to put all formula here, I direct you to a pdf file link.  

2 body Motion: http://www.gi.alaska.edu/~rherrick/GEOS692/OrbitsNotes.pdf ; see eq. 4 and eq. 5.  
Kepler's Law: http://en.wikipedia.org/wiki/Kepler's_laws_of_planetary_motion

The realization of the motion is that we first assign a ellipticity //e// proportional to the perturbation. We hold the a = R. Then, we will have the elliptical orbit with Sun as its focus. The direction of the orbit is set to the direction of the perturbation. Then, as time goes, the planet will move along the orbit by following the r^^2^^ * d theta/ dt = R^^2^^*w. This can be done by iteration. 






Here we have the "holy trinity" of our universe - God, Science, and the Loyal Subjects

!God (Java)
*System level responsibilities
**Insert new objects into the Database from a queue of new objects, once per timestep
**Change user parameters of existing objects directly in the Database
*User-level responsibilities
**Accept requests from users via RPC or JMS
***[[Graphical Client to God Messages]]
**User notification (e-mail, SMS, etc)
**Communicate with Science to get most up-to-date positioning info (rather than going through the Database)
***[[God to Science Messages]]
**Communicate with Science to give user modifications of existing objects - light enough to be on-the-fly, doesn't matter for simulation
!Science (C++)
*Cooperative, System level responsibilities
**Store updates from God between commits to the Database
**Communicate with God to coordinate commits to and updates from the Database
*Simulation level responsibilities
**Calculate object position, velocity, acceleration, etc, continuously
**Commit/update from the Database at some greater interval, ~10 minutes
!Loyal Subjects

[img[http://rhubarbtech.com/august23/uploads/workspace/default/system_overview.jpeg][EmbeddedImages]]

''PROBLEM''
~S2PLOT hides its input callbacks, but we need to write our own to support TUIO events
*Solution 1: Use lightweight Java application to convert TUIO events to mouse/key input events with java.robot
** This first solution looks straightforward; unless I hear otherwise, I'll start with this.
**We should talk about this further on Friday - it may expose a fatal flaw in S2PLOT, namely that we can't add any custom user input. The visualization can be updated with live data from our server, but someone using an S2PLOT app can't add/modify anything
*Solution 2: (may not be a solution) Reverse engineering ~S2PLOT, find ~OnMouseEvent function and call it manually
God to Science:
|!Description|!ID|!Parameters|!Return Value|!Comments|
|Request current velocity of an object|VELRQ|Message Length, Object ID|4 doubles (magnitude, unit vector)|precision of # may vary; sync|
|Request current position (x,y,z) of an object|POSRQ|Message Length, Object ID|3 ints|sync|
|Request current acceleration of an object|ACCLRQ|Message Length, Object ID|4 doubles|precision of # may vary; sync|
|Update parameter x of an object|UPDATE|Message length, ID of parameter to update, new value|None|async|
|Signal completed flushing new object queue|CLEAR|None|None|async|

Science to God
|!Description|!ID|!Parameters|!Return Value|!Comments|
|Flush request|FLUSH|None|None|sync, waits for CLEAR to come through socket|
Questions about code:

Are the following options/toggles available?:
# change fundamental constants of nature
# how fast time passes
# choose the universe in which you build
# multiple universes
!Starship Me
Where are you?  You are stationary, in front of your computer.  You are also moving at thousands of kilometers per hour with respect to the center of the earth.  With respect to the sun? ... even faster.  
What time is it where you are?  Now, what time is it?  ... Wait ... Okay, now what time is it?  Moving hardly at all, we've all aged, moved forward in time.  But how much, and by the same amount for all of us?
In any case, neither in time, nor in space, do we remain in the same place from moment to moment.  
How do we turn ourselves, which are personal spaceships, into crafts that more dramatically experience space and time?  
! mashup
*visual:
* project image or white light and let the properties of the space it runs through act as space.
* gravlensing with a group of people
* bright light 
* turn photon frequencies in to sound frequencies of an object
* sound of the verse
** record a room's sound; translate this into a rumble that mimics big bang
** output: sound + visual rep.
** elevated sound level triggers a later event
** gravitational waves from everything
* as humans we have senses that are meant for earth adn surviving rather than observing the universe
* touch:
** orb that we can feel
** temperature plate to feel heat of star
*top-down ( re - appropriate a space to our verse)
** turn a snapshot of the duderstadt space into solar system
* Dancing with multi-touch DJ
* can every one make a space and rock show? everybody puts in a point and a sound.  
// //''Name:'' Blog
// //''Version:'' 0.1.1
// //''Author:'' [[Anshul Nigham|http://yavin4.anshul.info]] (adapted from an earlier plugin by [[ClintChecketts|http://www.checkettsweb.com/]]) 
// //Tag support given by [[Emmanuel Frécon|http://www.sics.se/~emmanuel/]]
// //''Type:'' Plugin
// //''Description:'' Posts the most recently edited tiddlers when the TiddlyWiki is opened, similar to a blog.
// //''Syntax:'' Change the daysOrPosts and numOfDaysOrPosts variables below
// // If daysOrPosts variable is "days", tiddlers from the past numOfDaysOrPosts dates will be displayed
// // If daysOrPosts variable is "posts", the past numOfDaysOrPosts tiddlers will be displayed 
// // The restrictTag variable contains the tag that all entries should contain
// // for appearing as blog entries. Other entries will not appear, except for
// // those coming from the the defaultTiddlers. If the variable is an empty
// // string, then the behaviour is the same version 0.1 (below).

// // ''Tested against:'' Tiddlywiki 2.1.3

// // ''HOWTO:'' Simply copy this entire tiddler and paste it into a new tiddler in your own tiddlywiki.
// // Tag it with systemConfig, and also with systemTiddlers if you don't want it to appear within the blog views. Name it anything you like

var daysOrPosts = "days";
var numOfDaysOrPosts = "7";
var restrictTag = "";

function displayTopTiddlers()
{
	if(window.location.hash) daysOrPosts = "";
	if(daysOrPosts == "posts")
	{
		var tiddlerNames = store.reverseLookup("tags","systemTiddlers",false,"modified");
		if (tiddlerNames.length < numOfDaysOrPosts)
			numOfDaysOrPosts = tiddlerNames.length;
		for(var t = tiddlerNames.length-numOfDaysOrPosts;t<=tiddlerNames.length-1;t++)
      if (restrictTag == "" || tiddlerNames[t].isTagged(restrictTag))
		story.displayTiddler("top",tiddlerNames[t].title,DEFAULT_VIEW_TEMPLATE,false,false);
	}
	if (daysOrPosts == "days"){
		var lastDay = "";
		var tiddlerNames = store.reverseLookup("tags","systemTiddlers",false,"modified");
		var t = tiddlerNames.length -1;
		var tFollower = 0;
		for(t;t>=0;t--) if(numOfDaysOrPosts >= 0){
			var theDay = tiddlerNames[t].modified.convertToYYYYMMDDHHMM().substr(0,8);
			if(theDay != lastDay){
				numOfDaysOrPosts = numOfDaysOrPosts -1;
				lastDay = theDay;
				tFollower = t;
			}
		}

		for(tFollower = tFollower+1; tFollower < tiddlerNames.length;tFollower++){
      if (restrictTag == "" || tiddlerNames[tFollower].isTagged(restrictTag))
        displayTiddler("top",tiddlerNames[tFollower].title,DEFAULT_VIEW_TEMPLATE,false,false);
		}

	}
}

window.original_restart = window.restart;
window.restart = function()
{
	window.original_restart();
	displayTopTiddlers();
}
Our blog posts are listed here in chronological order:
<<tagging blog>>



(Team, tag your posts with "blog" to make it show up here)
*Add acts of god to db schema
*Add status to object schema
**Stopped/coasting
**~MovingToDestination
**Orbiting
!Hardside
* ~LightTable 
** R&D: 1st two weeks of January
** Production-Level: Weeks 3 and 4
** In action: January, week 4
!Softside
* 
''Should this be push or pull? We know a client will want most of this stuff quite often, maybe the server just pushes it when required? Actually, client  could only request what's in their field of view. then again...we could cut the number of messages required in half with push.''
Client to Server
|!Description|!ID|!Parameters|!Return Value|!Comments|
|Login|AUTH|Username, encrypted password|Boolean|sync|
|Create user|NEWUSER|Desired username, encrypted password|Boolean|sync, creates and logs in if successful|
|Get objects at scale|GETOBJS|Scale ID|Series of OBJ messages of the format described below|async, client should set up a thread to accept objs and add them to the world|
|Get objects owned by user|GETMYOBJS|None|Series of OBJ messages of the format described below|async, client should set up a thread to accept objs and add them to the world, must be authenticated|
|Create new object|OBJ|type position speed accel mass, etc|None|async|
|Modify existing object|MODOBJ|Object ID, parmater name/id, new value|None|async|
|Request current velocity of an object|VELRQ|Message Length, Object ID|4 doubles (magnitude, unit vector)|precision of # may vary; sync|
|Request current acceleration of an object|ACCLRQ|Message Length, Object ID|4 doubles|precision of # may vary; sync|
|Request current position (x,y,z) of an object|POSRQ|Message Length, Object ID|3 ints|sync|
|Request current status of an object|GETOBJST|Object ID|stauts enum|sync|
|Change status of an object|SETOBJST|Object ID, new status, destination/orbit if there is one|None|async|

Server to Client
What to do with unauthenticated requests? Ignore, close connection, etc? Only some need authentication.
|!Description|!ID|!Parameters|!Return Value|!Comments|

Hey all, team especially.  Check out the Brainstorming section for cosmological concepts that we can bring to light
*Load objects from database into memory as class instances in ObjectManagerThread
*Commit objects from ObjectManager into database
*Add new object to ObjectManager
*Modify metadata of object in ObjectManager
*Modify simulation/position data of object in ObjectManager
*Create new user
*Modify existing user
*Delete user, make all of their objects unowned
*Run movement simulation timestep
**Make one large database transaction and commit all at once, at the end
*Run collision detection
*Update XML feed for clients with the objects for this timestep
**Feed is completed overwritten each timestep, no way to go backwards
*Time out old client sessions
*Connect to server's XML stream
**Should gracefully fail if it cannot connect
*Load objects from XML stream into ObjectManager
*Add new object to ObjectManager
**Do RPC back to server
**Also add to local data structures, so we don't have to wait for the next timestep to see it
*Modify metadata of object in ObjectManager
**Also add to local data structures, so we don't have to wait for the next timestep to see it
*Update objects from the server stream in ObjectManager
**Reflect sim updates on existing objects
**Add completely new objects from server/other clients
*Login
*Logout
*Attempt and authenticated action in a timed out sesison
*Draw visuals
So, August is currently heading down two parallel paths. I like to think that we're transporting back and forth between Doc Brown's alternative timelines, and in the end everything will come back together.
! Concrete projects
On one timeline, we're steadily progressing with some very concrete projects:

''Multitouch Table''
After a few prototype versions, John and Brian constructed a Borg cube of multitouch goodness. Careful, get too close and you may be assimilated. The table itself is parked in DL-1 - feel free to check it out, although the software isn't fully working yet.

Using 6 IR beams and a modified webcam, we're able to convert the reflection of IR from your fingers on the table into discrete control points in software. We're using The NUI Group's tbeta program to grab the video stream, clean it up and send along standard TUIO protocol control information to our client. The widespread TUIO libraries are proving very useful, and gave us a lot of flexibility in deciding the framework for the rest of the simulation engine.

Right now, we're testing with a simple Processing sketch using the visualization data from Radiohead's "House of Cards" music video. We can spin a laser-scanned representation of a Miami street with a finger!

Next up is some tweaks to the IR system and a better mount for the projector. It's currently a little tough to get all the pieces together and pointed in the proper direction, and we hope to simply the process a bit so the entire unit is more portable and reliable. 

''Parallel Universe Software''
I have been thinking hard about the best way to implement the software laid out in the article "A Parallel Universe". We want this live simulation to be the backbone of all of our pieces, where each sensor array or client software ultimately connects to and reflects the changes of the same simulation. 

To save time, I've decided on using the Java programming language. We could probably squeeze more performance out of a C++ server, but there are some Java libraries that will prove more useful in the end. The client and server will communicate with XML-RPC, and the server will constantly pump out an XML feed of the most up-to-date object coordinates and velocities of everything in the parallel universe.

Feel free to check out my schematics as I post them here on the wiki. Eventually I will open up our software repository so you can check out our source code and see what's going on behind the scenes.
!Probing Questions
On the other timeline, we're still exploring the cosmological questions that led us to this project in the first place. We're trying to find a place where immersion, interactivity and a personal relation to huge scales meet up for an effective wrap. At our last meeting, we decided that by following our human senses we may find a clear path to the stars. Our eyes and ears are built for consumption of Earth - we can't see or comprehend many parts of space due to this limitation. How can we bridge the gap and make these phenomenon more compatible with humans?

''Sight''
At the last meeting, Brian brought up the process known as gravitational lensing. Amazingly, the gravity of a large object can actually warp space-time - and this includes light! From our perspective on Earth, our view of distant bodies can be warped due to even larger ones in between. We're considering using live video of people in a room as our source material to be warped just like our view of far away galaxies.

''Hearing''
We actually have two ideas for this sense.

It's hard to believe, but the universe actually has a sound. Not a sound like we're used to - in fact our ears could never pick it up, especially in the vacuum of space - but waves properly interpreted can make a sound nonetheless. Well, we will have our own, simulated universe. Mixed with the ambient sound of eg. a room in the Duderstadt center, we can create a unique GROCS universe sound. What that will sound //like// we won't know until we try!

Similarly, echos of the Big Bang still reel through the universe. We're thinking of reinterpreting the stomping feet and shouting voices from between classes as Big Bang of their own, and inserting the effects into our simulated universe. Planets could be shaken silly at 8pm because of a busy lunch crowd 8 hours earlier.

''Touch''
This one needs some further development, but we know there's something to be said for actually //feeling// the effects of a star implosion or the unavoidable attraction of a black hole. We've discussed a re-programmable orb that the user can set to mimic a certain planet/start/particle, and then feel some interpretation of its behavior. 


Lots to go on, but that's the fun part! We're looking forward to our design review and all of your comments.

Chris Peplin
Now, the hardware construction is about ready and we need to layout some of our interface for the "interactive universe". After discussing with Brian, we have the following tentative layout for the final interface. 

* We have now at least 5 pieces/parts to show and a navigation banner (or others) should be there to guide different part.
*part 1: The Universe as a whole (I can make a tour for this)
**In this part, we 'd like to show an overview of our universe through the designing of a kml file for Google Earth. This tour will include, but not limited to, cosmic microwave background, galaxies, starts, galaxy clusters, some other events.
*part 2: Creating your own solar system
**In this part, we will create a solar system based on the known gravitational physics. People can touch the motion of the planet and perturb them and see what is the effects of their actions on the motion of the planets. 
* part 3: Manipulating the simulated Universe
** In this part, we will create some tools to allow people to operate on the simulated data and see the corresponding effects that cannot be seen from real data.
* part 4: The most extremes in Universe
** In this part, we will show tremendous time, length, speed scale variations in our Universe. We will compare the vast scales with our human scale (our speed, our height, our lifespan). We need to figure out a impressive way to illustrate the huge difference. What on top of my head now is to use number of zeros in an artistic way. For example, our hight is 1.8 meters. The size of earth is 6,000,000 meters. The size of Sun is  6,00,000,000 meters. We need to improve the visual effects some way to make people understand the difference. 
*part 5: The spectacular events in Universe:
**In this part, we will demonstrate a series of most extreme events/objects in our universe, including the black holes, neutron stars, gravitational wave and other events. Each objects/events will have an associated "sound" and probably "temperature". People can manipulate these objects and hear the corresponding sounds when they touch them. 

* Another possible interaction between people and the universe(solar system) is a cosmic "roller coaster". If we can design a mechanic cart and synchronize it with the planet orbit, we can make people feel the acceleration!

Please fill your ideas in written form here. We then need to implement them and see which of them are practical and what improvement we can make. 
!Process
*Present quick overview of the project [ideas for pres | http://rhubarbtech.com/august23/uploads/workspace/default/desrev1.pdf]
*Allow 15-20 minutes to experiment with prototypes
*Come back for Q&a, use their questions to direct ourselves to what we need to clarify or what areas we should explore

! Questions for the Reviewers
We may or may not use (many of) these.  But, we should keep them in mind during the jam session.
* Prototypes
** Lensing
*** Do you feel immersed?
*** What do you need in order to have a sense of the meaning in the processes involved here?
** Multitouch table
*** Does this feel like a personal interaction?
** Client and Client Concept
*** Do you experience a sense of investment?
* General
** What is the largest hurdle for you to investigate astronomy?
** Do these demos make you want to look for more?


!Demo
*Lensing prototype
*Multitouch controlling as much as we can
*Parallel universe prototype client on either multitouch or mouse+keys
** basic gui for tuio control complete
** Next: creating actions with gui
* install client on DL1 machines for people to play with mouse+keys?

How do we present the ideas without explaining the material?  So far, we have good ideas, but to achieve full impact, I find that it requires some explanation of the connections between the physics and the symbols (audio or visual).  How do we remove this distance between the individual/experience and the idea, or how do we take advantage of it to create a sensation?  

Complete visual immersion creates the illusion of presence.  This is not our best option, given the available state-of-the-art and the technological hurdles.

Elements more esoteric to astronomy?  How dependent is this on an individual's feeling about a particular experience?  We're trying to tap into a universal connection that is simultaneously personal.  

We've started to give people a chance to create and explore "a" universe.  What if we can also help them investigate this universe, one that we've created or the one that they build?  What if we can get them "do" science without knowing it?  Galaxy Zoo (www.galaxyzoo.org) has been extraordinarily successful with this.  

As the user explores the universe(s), the results may not be scientifically relevant to our universe, but the adventure will be in finding the patterns.  
We were able to distill many good ideas and thoughts from the contributors to our review.  And a big thanks to our visitors, Kiwi, Nikolas, Caroline, John Mac and Elona.  

Beer and Irish faire proved useful to coax out some more ideas to bring depth and re-establish our direction. We're looking to focus more behind a vision, and something that more literally places the individual in an experience or make "something" more real for the person.  

a quick jotting of ideas
* bags of leds over heads
* spaceship earth
* build your own personal cosmic mythology
* for grav lensing put the balls in the field and let people move them
* a floor that tells people where to go as if they are celestial bodies
We were able to distill many good ideas and thoughts from the contributors to our review.  And a big thanks to our visitors, Kiwi, Nikolas, Caroline, John Mac and Elona.  

Beer and Irish faire proved useful to coax out some more ideas to bring depth and re-establish our direction. We're looking to focus more behind a vision, and something that more literally places the individual in an experience or make "something" more real for the person.  

a quick jotting of ideas
* bags of leds over heads
* spaceship earth
* build your own personal cosmic mythology
* for grav lensing put the balls in the field and let people move them
* a floor that tells people where to go as if they are celestial bodies

Particularly interesting references from reviewers:
* blast theory
* http://www.mimetics.com/vur/biotica.html
We were able to distill many good ideas and thoughts from the contributors to our review.  And a big thanks to our visitors, Kiwi, Nikolas, Caroline, John Mac and Elona.  

Beer and Irish faire proved useful to coax out some more ideas to bring depth and re-establish our direction. We're looking to focus more behind a vision, and something that more literally places the individual in an experience or make "something" more real for the person.  

a quick jotting of ideas
* bags of leds over heads
* spaceship earth
* build your own personal cosmic mythology
* for grav lensing put the balls in the field and let people move them
* a floor that tells people where to go as if they are celestial bodies

Particularly interesting references from reviewers:
* blast theory
* http://www.mimetics.com/vur/biotica.html
http://phet.colorado.edu/simulations/sims.php?sim=My_Solar_System

We'll have to be this good.  For very close orbits, we'll need higher resolution calculations in time.  Also, these kinds of things should be done on the client so that movement refreshes at high frame rate. 

List of References from desrev:
* EAMES ... Powers of Ten (film)
* Char Davies - Osmose (installation)
* Blast theory (augmented reality installations)
* http://manipulatemedia.org
* Biotica -- richard brown (digital microbes)
* cornock and edwards -- models of interaction (research papers)
* yamanaka-nash -- chromacy blue ... navigable sound environment
* multimodalities -- not senses
Type the text for '25 February 2009'

A digital telescope provides a visual and tactile modality to a universe (the simulated Twoverse) that has more possibilities than the one observed in our reality.  It can allow anyone to be an observer, and an observer of a simulated universe at that.  This concept helps someone access what it means to observe the heavens, but not necessarily be a part of it.

Type the text for '26 February 2009'

A few summers ago, I went home to hang out with my parents for a little bit.  On the first full day that I was home, I let my car stay out in the driveway, and the air inside became much warmer than the air outside.  Near dusk of that day, my dad and I decided to go to a movie and take my car.  

The sun shone through the glass of the car and cast the car's shadow on the driveway.  There was a hole in the shadow where the windows were.  When my dad opened the car door, the hole in the shadow began to writhe and then looked like a river with little peaks and eddies.  

This river of air is the hot air flowing from the car, and this may have been the first time that my dad had seen air move in person -- and upon this, he realized that a medium permeates our everyday movement, that we don't walk through nothing.  

What is this aha moment?  How do capture something from such a transient episode ... or at least make the most of it?  



Scientific Explanation that was distilled more concisely in the explanation to my father.
The undulating shadow is caused by a difference in temperatures -- between that of the ambient air outside the car and that of the warmer air flowing from the car.  The difference in temperatures causes the different species of air to interact differently with the light from the sun.  That difference is the flow of air and the writhing shadow.  
! SpaceShip Mind
* Positives
** we can include multiple scales and multiple phenomena
** use theatrical aesthetic to connect with people.
** can easily use sounds and light to direct people's attention and influence emotion
* Negatives
** not widely accessible at once
** visuals are not high resolution ... but what about wiremap and nova (see below)
** user interaction
! Addendum: create a light box in which people with helmets (which have audio ) can wander
* create a wiremap for higher resolution 3d imaging: without trying to make really nice images or trying to be traditionally visually immersive, we can make visuals that still have a rustic aesthetic.
* multiple explorers let's people talk during the experience ... creating an emotional souvenir
* see film: Contact
! Group To Do
** edit simulation software: simulation_runner.java
** build up modalities and their references for the head bags or helmets; look for avenues of interaction
** John: work on how to build helmet or light box environment
** Chris: server backend and gui
! Links:
* Another Lighbox: http://squidpress.wordpress.com/2008/08/29/nova-visuals-in-3d/
* check out the video: http://www.squidsoup.org/driftnet/
* run the "immersion" video:  http://www.horao.biz/html/10product/10experience.html
* Nova uses colors to slow things down
* sounds: open video: http://squidsoup.org/freq2/
* takeaway thoughts
** Have we underestimated the power of visualization?
** Next Fest?
** they have single-person hemispherical dome
** use stereo vision
** in their cave, they've had avatars interact with planets and galaxies
** they focus on scales
** altering the worldview despite disconnect with everyday life.
** experience design; emotional souvenir; ownership of the piece.
** dave weinberg and blown glass
** microsoft tags

couple of notes for chris:
*Audience determines if you must worry about making people interested
*Emotional souvenir - something to take home from the exhibit, ownership
*Send final client to Mark
*Not important  what level you get to from our tool - just that you progress to some new level
*Maybe it just looks cool - that's okay, then you want to seek out more cool images and learn something in the process
In thinking about the way that people experience astronomy and space (two different things), and how we take something home with us, I've been imagining a tactile and digital playpen; in the vein of what Mcdonald and Nicolas mentioned, what if we can move the elements physically?

What I describe is something of a return to the lightbox, but one in which people have active choice and are themselves affected. 

! What are the celestial objects, controllers, actors in this playen:
* the human as they enter the room, is a body, like a passing asteroid
* wiimotes provide control over objects projected on a wall; explorers can throw a galaxy into the visualization
* balls, boxes, rolling pillars represent other bodies and perhaps time-dependent phenomena
* observers can enter and not do anything if they choose.  
* each explorer will have a helmet, with which they can talk to mission control, or on a particular frequency.

! Internal Environment
* the meaning of the objects can be translated to things on different scales; they can be turned into buildings, people into blood cells, etc.
* completely dark except for the objects that symbolize the celestia and the digital representation in the wiremap.
* wiremap gives mock-3d display of phenomena that people can create or interact with. 
* noise, local heat, vibration will enhance the experience; all remote controlled and determined by the 
! External Environment
* controlled/manipulated by distant users
! Intended elements of experience
* separate the individual from the planet; put him/her in space
* separate the individual from his/her compadres: only communicate through radio; loneliness and segregation
* immerse the user in a new kind of environment ... one that is not astronomical or visual or aural;
* it is a cross-scale, multi-modality, symbolic interface that emphasizes the freedom of the visitor to draw correlations among phenomena and the senses.
* allow some camaraderie and discussion during the experience; shared memory souvenir
! to evolve this concept to feasibility:
* simplify to the minimum aspects required to meet the intentions above
** complete darkness for simulating displacement to a new environment
** a few modalities
** simple helmets
** how do we keep the idea of the individual sequestered to the black of space ... the animalism
** central wiremap visualization or wall-embedded visualization?
! Notes/links of the day:
* http://tangibleinteraction.wordpress.com/2007/05/16/elements-of-feedback/
* http://tangibleinteraction.wordpress.com/2007/05/07/important-vs-non-important-feedback/

! Some Example Experiences or Activities for the Dark Box
A wiremap lives in the center of the room; the configuration options for the wiremap are various and delineated below.  Observers wear helmets so that they can only interact through one of a set of radio frequencies.  
* passive interaction and pure observation:
** The wiremap displays a 3D astronomical field, possibly evolving in time.
** The positions of the persons in the room affect change the evolution of the particles.
** If the video is a fly-through, the sound can be the captain speaking through the intercom, and the travelers talking with each other.
* more active participation
** 

! Wiremap options
* two wiremaps that create a tunnel between them; each set is hemispherical so that an observer can walk around the outside of them and see another perspective.
http://www.nycresistor.com/2008/07/21/3d-wiremap/

yayer!
# Pull the latest revision of the repository - I will assume this is to ~/august
# Extract the twoverse.zip file into your sketchbook/libraries directory
# Assuming your installation of processing is at ~/processing...
## {{{ cd ~/processing/java/lib/zi }}}
## {{{ mkdir US }}}
## {{{ ln -s ../America/New_York US/Michigan}}}
# Now, open process and look in the sketchbook list - you should see an august folder
# Open the TwoverseClient sketch, or whatever other sketch you're working on

If you are attempting to build or run from the source code (and not one of the provided precompiled .jar files), you will need to have these libraries installed:
*libxom-java
*junit
*libxmlrpc3-client-java
*libxmlrpc3-server-java
*libxmlrpc3-common-java
*libws-commons-util-java
*libmysql-java
*libjaxen-java
*libxerces-java

If you are using Ubuntu, those names are the names you can provide to apt-get.
* To do 
** John: wiremap and helmets; talk to Jacques about drapes
** Chris: Twoverse client, wiremap translation
** Brian: storyboards, including sound, and animation steps
** Jiangang: make animations
** A few open questions:
*** Mission Control Interface: requires separate graphics for Spaceman and for MC
*** still using ambient noise?

* Coming together
** Multitouch: startup interface; choices are single spaceman, Mission control for a friend, run Twoverse (Twoverse, 1 crew (automated), 2 crew (automated or directed) )
** Spaceman with Helmet (I said "EVA" !)
** Spaceship observer

* Stories
** undulating star goes to flatline
** discover alien civilization
** big bang big crunch
!Software
*Wiremap client
**Integrate star sim with heartbeat and modes
*Web view
**2-3 views of lists from database, charts with status, age, a picture if we can get it from the creation process
*Additional VO
**please enter the airlock
**airlock closed
**you may remove your pressure helmet
<<tagging final>>
Type the text for '8 April 2009'
You wouldn't want your honeybunch to show everything on the first date right.  Giving up the ghost immediately subverts the joy that we take when our senses and mind piece together the puzzle before us.  

If we present too much information, too quickly, and in a manner that is too well-pieced together, the curiosity is not piqued, the challenge is not real.

Leaving pieces out of the equation sparks the itch to understand, piques the curiosity.  This need to know rewarded by the pleasure of finding out signify the call to the challenge and journey, and the homecoming.  

Perhaps, this gives an insight to the misgivings one might have about television.
// OFF LINE TIDDLERS
	
config.macros.saveChanges.handler=function(place,macroName,params,wikifier,paramString,tiddler){
//	if(isLoggedIn()){
	//	wikify("[[sync]]", place);
//	}
}	
		
config.backstageTasks.remove("upgrade");
config.macros.ccLogin={};
config.macros.ccLogin.handler = function() {};
window.readOnly = false;
window.saveChanges = function(){};
if (config.options.txtTheme == "")
config.options.txtTheme = 'Blackicity';
config.options.chkUsePreForStorage=true;
if (config.options.txtTheme == "")
config.options.txtTheme = 'Blackicity';
config.options.chkAutoSave = true;
window.offline = true;
config.defaultCustomFields = {"server.host":"http://rhubarbtech.com", "server.type":"cctiddly", "server.workspace":""};
config.macros.ccOptions={};	
config.macros.ccOptions.handler=function(place,macroName,params,wikifier,paramString,tiddler){};
You are viewing the file on offline mode.

To update your changes please log into ccTiddly in a seperate window and then press the sync button.

[[sync]] 
<<sync>>