Welcome to TiddlyWiki created by Jeremy Ruston, Copyright © 2007 UnaMesa Association
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]];}
#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; 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 use a logographic writing system and 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;}
.htmlarea .toolbarHA table {border:1px solid ButtonFace; margin:0em 0em;}
/*}}}*/
/*{{{*/
@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>
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<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 closeTiddler closeOthers +editTiddler > fields syncing permalink references jump'></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 +saveTiddler -cancelTiddler deleteTiddler'></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
|''Type:''|file|
|''URL:''|http://www.tiddlytools.com/|
|''Workspace:''|(default)|
This tiddler was automatically created to record the details of this server
<<gradient horiz #bbbbbb #eeeeee #ffffff>>The new ~GradientMacro allows simple horizontal and vertical coloured gradients. They are constructed from coloured HTML elements, and don't require any images to work.>>
Background: #cccccc
Foreground: #000
PrimaryPale: #999999
PrimaryLight: #667788
PrimaryMid: #334444
PrimaryDark: #000
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #555566
TertiaryPale: #999999
TertiaryLight: #3333cc
TertiaryMid: #000
TertiaryDark: #8B7355
[img[elements/bullet.png]] Office Hours
TBA
[img[elements/bullet.png]] Office Phone
(512) 232-7420
[img[elements/bullet.png]] Mail
CS Graduate Lounge
Taylor Building
University of Texas at Austin
Austin, TX
[img[elements/bullet.png]] E-mail
jcooper[img[images/adend.png]]
!![[University of Texas at Austin|http://www.utexas.edu/]] - [[Department of Computer Sciences|http://www.cs.utexas.edu/]]
Advisor: [[Dr. Dana Ballard|http://www.cs.utexas.edu/~dana/]]
Research Lab: [[Center for Perceptual Systems|http://www.cps.utexas.edu/]]
!![[Brigham Young University|http://home.byu.edu]] - [[Computer Science Department|http://cs.byu.edu/]]
Master's Advisor: [[Dr. Michael Goodrich|http://faculty.cs.byu.edu/~mike/]]
Research Lab: [[Human-Centered Machine Intelligence|http://research.cs.byu.edu/~hcmi/]]
/%
|Name|HideTiddlerBackground|
|Source|http://www.TiddlyTools.com/#HideTiddlerBackground|
|Version|0.0.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <<br>>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|script|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|hide a tiddler's background and border (if any)|
Usage: <<tiddler HideTiddlerBackground>>
%/<script>
var s=place.parentNode.style;
s.backgroundImage="none";
s.backgroundColor="transparent"
s.borderColor="transparent";
s.borderWidth=0;
s.margin=0;
s.padding=0;
</script>
/%
|Name|HideTiddlerSubtitle|
|Source|http://www.TiddlyTools.com/#HideTiddlerSubtitle|
|Version|0.0.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <<br>>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|script|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|hide a tiddler's subtitle (dates/created by) display|
Usage: <<tiddler HideTiddlerSubtitle>>
%/<script>
// get the tiddler element
var t=story.findContainingTiddler(place);
if (t && t.id!="tiddlerHideTiddlerSubtitle")
for (var i=0; i<t.childNodes.length; i++)
if (hasClass(t.childNodes[i],"subtitle"))
t.childNodes[i].style.display="none";
</script>
/%
|Name|HideTiddlerTags|
|Source|http://www.TiddlyTools.com/#HideTiddlerTags|
|Version|0.0.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <<br>>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|script|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|hide a tiddler's tagged/tagging display elements|
Usage: <<tiddler HideTiddlerTags>>
%/<script>
var t=story.findContainingTiddler(place);
if (t && t.id!="tiddlerHideTiddlerTags")
for (var i=0; i<t.childNodes.length; i++)
if (hasClass(t.childNodes[i],"tagging")||hasClass(t.childNodes[i],"tagged"))
t.childNodes[i].style.display="none";
</script>
/%
|Name|HideTiddlerTitle|
|Source|http://www.TiddlyTools.com/#HideTiddlerTitle|
|Version|0.0.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <<br>>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|script|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|hide a tiddler's title display elements (name, dates, and author)|
Usage: <<tiddler HideTiddlerTitle>>
%/<script>
// get the tiddler element
var t=window.story.findContainingTiddler(place);
if (t && t.id!="tiddlerHideTiddlerTitle")
for (var i=0; i<t.childNodes.length; i++)
if (hasClass(t.childNodes[i],"title")||hasClass(t.childNodes[i],"subtitle"))
t.childNodes[i].style.display="none";
</script>
/%
|Name|HideTiddlerToolbar|
|Source|http://www.TiddlyTools.com/#HideTiddlerToolbar|
|Version|0.0.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <<br>>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|script|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|hide a tiddler's toolbar display|
Usage: <<tiddler HideTiddlerToolbar>>
%/<script>
var t=story.findContainingTiddler(place);
if (t && t.id!="tiddlerHideTiddlerToolbar")
for (var i=0; i<t.childNodes.length; i++)
if (hasClass(t.childNodes[i],"toolbar"))
t.childNodes[i].style.display="none";
</script>
//under construction//
Piano, drums, bass-clarinet, singing
<<<
Music fills an important niche in my life.
<<<
Reading
<<<
We seldom turn on our TV, but there is always a book close at hand.
<<<
Running
<<<
At first it was to impress a girl, eventually I started enjoying it.
<<<
!Joseph L. Cooper
{{imgfloatleft{[img[Going over my research with my daughter|images/napping.JPG]]}}} I'm a graduate student interested in //Intelligence// and //Learning//. The human mind fascinates me. My primary research goal is to develop computational models that exhibit common sense and learning similar to humans. Eventually, one should look at the behavior of a computer agent and say, "Hey. That was smart."
I recently began working toward a ~PhD in the Department of Computer Sciences at the University of Texas at Austin,. Eventually I intend to take up teaching and researching as a professor at the University level.
I also worked as a graduate student at Brigham Young University studying in the Computer Science Department under Dr. Michael Goodrich to receive a Master's degree in Computer Science. My thesis work involved designing, creating, and testing an interface for controlling small, camera-equipped Unmanned Aerial Vehicles (~UAVs). The project is directed at assisting Wilderness Search and Rescue volunteers in their rescue efforts by creating an intuitive tool for rapidly acquiring imagery of an area. More information about this project is available on my [[Research Page|Research]].<html><br clear=all></html>
<<tiddler HideTiddlerTags>><<tiddler HideTiddlerTitle>>
/***
|Name|InlineJavascriptPlugin|
|Source|http://www.TiddlyTools.com/#InlineJavascriptPlugin|
|Version|1.6.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <<br>>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|Insert Javascript executable code directly into your tiddler content.|
''Call directly into TW core utility routines, define new functions, calculate values, add dynamically-generated TiddlyWiki-formatted output'' into tiddler content, or perform any other programmatic actions each time the tiddler is rendered.
!!!!!Usage
<<<
When installed, this plugin adds new wiki syntax for surrounding tiddler content with {{{<script>}}} and {{{</script>}}} markers, so that it can be treated as embedded javascript and executed each time the tiddler is rendered.
''Deferred execution from an 'onClick' link''
By including a {{{label="..."}}} parameter in the initial {{{<script>}}} marker, the plugin will create a link to an 'onclick' script that will only be executed when that specific link is clicked, rather than running the script each time the tiddler is rendered. You may also include a {{{title="..."}}} parameter to specify the 'tooltip' text that will appear whenever the mouse is moved over the onClick link text
''External script source files:''
You can also load javascript from an external source URL, by including a src="..." parameter in the initial {{{<script>}}} marker (e.g., {{{<script src="demo.js"></script>}}}). This is particularly useful when incorporating third-party javascript libraries for use in custom extensions and plugins. The 'foreign' javascript code remains isolated in a separate file that can be easily replaced whenever an updated library file becomes available.
''Display script source in tiddler output''
By including the keyword parameter "show", in the initial {{{<script>}}} marker, the plugin will include the script source code in the output that it displays in the tiddler.
''Defining javascript functions and libraries:''
Although the external javascript file is loaded while the tiddler content is being rendered, any functions it defines will not be available for use until //after// the rendering has been completed. Thus, you cannot load a library and //immediately// use it's functions within the same tiddler. However, once that tiddler has been loaded, the library functions can be freely used in any tiddler (even the one in which it was initially loaded).
To ensure that your javascript functions are always available when needed, you should load the libraries from a tiddler that will be rendered as soon as your TiddlyWiki document is opened. For example, you could put your {{{<script src="..."></script>}}} syntax into a tiddler called LoadScripts, and then add {{{<<tiddler LoadScripts>>}}} in your MainMenu tiddler.
Since the MainMenu is always rendered immediately upon opening your document, the library will always be loaded before any other tiddlers that rely upon the functions it defines. Loading an external javascript library does not produce any direct output in the tiddler, so these definitions should have no impact on the appearance of your MainMenu.
''Creating dynamic tiddler content''
An important difference between this implementation of embedded scripting and conventional embedded javascript techniques for web pages is the method used to produce output that is dynamically inserted into the document:
* In a typical web document, you use the document.write() function to output text sequences (often containing HTML tags) that are then rendered when the entire document is first loaded into the browser window.
* However, in a ~TiddlyWiki document, tiddlers (and other DOM elements) are created, deleted, and rendered "on-the-fly", so writing directly to the global 'document' object does not produce the results you want (i.e., replacing the embedded script within the tiddler content), and completely replaces the entire ~TiddlyWiki document in your browser window.
* To allow these scripts to work unmodified, the plugin automatically converts all occurences of document.write() so that the output is inserted into the tiddler content instead of replacing the entire ~TiddlyWiki document.
If your script does not use document.write() to create dynamically embedded content within a tiddler, your javascript can, as an alternative, explicitly return a text value that the plugin can then pass through the wikify() rendering engine to insert into the tiddler display. For example, using {{{return "thistext"}}} will produce the same output as {{{document.write("thistext")}}}.
//Note: your script code is automatically 'wrapped' inside a function, {{{_out()}}}, so that any return value you provide can be correctly handled by the plugin and inserted into the tiddler. To avoid unpredictable results (and possibly fatal execution errors), this function should never be redefined or called from ''within'' your script code.//
''Accessing the ~TiddlyWiki DOM''
The plugin provides one pre-defined variable, 'place', that is passed in to your javascript code so that it can have direct access to the containing DOM element into which the tiddler output is currently being rendered.
Access to this DOM element allows you to create scripts that can:
* vary their actions based upon the specific location in which they are embedded
* access 'tiddler-relative' information (use findContainingTiddler(place))
* perform direct DOM manipulations (when returning wikified text is not enough)
<<<
!!!!!Examples
<<<
an "alert" message box:
><script show>
alert('InlineJavascriptPlugin: this is a demonstration message');
</script>
dynamic output:
><script show>
return (new Date()).toString();
</script>
wikified dynamic output:
><script show>
return "link to current user: [["+config.options.txtUserName+"]]";
</script>
dynamic output using 'place' to get size information for current tiddler:
><script show>
if (!window.story) window.story=window;
var title=story.findContainingTiddler(place).id.substr(7);
return title+" is using "+store.getTiddlerText(title).length+" bytes";
</script>
creating an 'onclick' button/link that runs a script:
><script label="click here" title="clicking this link will show an 'alert' box" show>
if (!window.story) window.story=window;
alert("Hello World!\nlinktext='"+place.firstChild.data+"'\ntiddler='"+story.findContainingTiddler(place).id.substr(7)+"'");
</script>
loading a script from a source url:
>http://www.TiddlyTools.com/demo.js contains:
>>{{{function demo() { alert('this output is from demo(), defined in demo.js') } }}}
>>{{{alert('InlineJavascriptPlugin: demo.js has been loaded'); }}}
><script src="demo.js" show>
return "loading demo.js..."
</script>
><script label="click to execute demo() function" show>
demo()
</script>
<<<
!!!!!Installation
<<<
import (or copy/paste) the following tiddlers into your document:
''InlineJavascriptPlugin'' (tagged with <<tag systemConfig>>)
<<<
!!!!!Revision History
<<<
''2007.02.19 [1.6.0]'' added support for title="..." to specify mouseover tooltip when using an onclick (label="...") script
''2006.10.16 [1.5.2]'' add newline before closing '}' in 'function out_' wrapper. Fixes error caused when last line of script is a comment.
''2006.06.01 [1.5.1]'' when calling wikify() on script return value, pass hightlightRegExp and tiddler params so macros that rely on these values can render properly
''2006.04.19 [1.5.0]'' added 'show' parameter to force display of javascript source code in tiddler output
''2006.01.05 [1.4.0]'' added support 'onclick' scripts. When label="..." param is present, a button/link is created using the indicated label text, and the script is only executed when the button/link is clicked. 'place' value is set to match the clicked button/link element.
''2005.12.13 [1.3.1]'' when catching eval error in IE, e.description contains the error text, instead of e.toString(). Fixed error reporting so IE shows the correct response text. Based on a suggestion by UdoBorkowski
''2005.11.09 [1.3.0]'' for 'inline' scripts (i.e., not scripts loaded with src="..."), automatically replace calls to 'document.write()' with 'place.innerHTML+=' so script output is directed into tiddler content. Based on a suggestion by BradleyMeck
''2005.11.08 [1.2.0]'' handle loading of javascript from an external URL via src="..." syntax
''2005.11.08 [1.1.0]'' pass 'place' param into scripts to provide direct DOM access
''2005.11.08 [1.0.0]'' initial release
<<<
!!!!!Credits
<<<
This feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]
<<<
!!!!!Code
***/
//{{{
version.extensions.inlineJavascript= {major: 1, minor: 6, revision: 0, date: new Date(2007,2,19)};
config.formatters.push( {
name: "inlineJavascript",
match: "\\<script",
lookahead: "\\<script(?: src=\\\"((?:.|\\n)*?)\\\")?(?: label=\\\"((?:.|\\n)*?)\\\")?(?: title=\\\"((?:.|\\n)*?)\\\")?( show)?\\>((?:.|\\n)*?)\\</script\\>",
handler: function(w) {
var lookaheadRegExp = new RegExp(this.lookahead,"mg");
lookaheadRegExp.lastIndex = w.matchStart;
var lookaheadMatch = lookaheadRegExp.exec(w.source)
if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
if (lookaheadMatch[1]) { // load a script library
// make script tag, set src, add to body to execute, then remove for cleanup
var script = document.createElement("script"); script.src = lookaheadMatch[1];
document.body.appendChild(script); document.body.removeChild(script);
}
if (lookaheadMatch[5]) { // there is script code
if (lookaheadMatch[4]) // show inline script code in tiddler output
wikify("{{{\n"+lookaheadMatch[0]+"\n}}}\n",w.output);
if (lookaheadMatch[2]) { // create a link to an 'onclick' script
// add a link, define click handler, save code in link (pass 'place'), set link attributes
var link=createTiddlyElement(w.output,"a",null,"tiddlyLinkExisting",lookaheadMatch[2]);
link.onclick=function(){try{return(eval(this.code))}catch(e){alert(e.description?e.description:e.toString())}}
link.code="function _out(place){"+lookaheadMatch[5]+"\n};_out(this);"
link.setAttribute("title",lookaheadMatch[3]?lookaheadMatch[3]:"");
link.setAttribute("href","javascript:;");
link.style.cursor="pointer";
}
else { // run inline script code
var code="function _out(place){"+lookaheadMatch[5]+"\n};_out(w.output);"
code=code.replace(/document.write\(/gi,'place.innerHTML+=(');
try { var out = eval(code); } catch(e) { out = e.description?e.description:e.toString(); }
if (out && out.length) wikify(out,w.output,w.highlightRegExp,w.tiddler);
}
}
w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
}
}
} )
//}}}
Young men, nineteen or older, in the [[Church of Jesus Christ of Latter-day Saints|http://www.lds.org/]] (Mormons) often choose to interrupt their studies in order to serve a two-year mission in their early twenties. After I finished my first year at BYU, I wanted to do this. I sent application papers in to Church headquarters in Salt Lake City and received my mission call a few weeks later. A mission call is instructions from Church leadership to those who request the opportunity to serve a mission. Most young men serve proselyting missions (there are also other types of missions) where the primary responsibility is to teach the doctrines, tenants, and beliefs of the Church of Jesus Christ to anyone who will listen and baptize those who are willing to change their lives and live by those teachings. My call asked me to spend two years proselyting in Portugal, specifically in the Lisbon North mission (an area from Lisbon up to Tomar which also included the Azore islands and Madeira). The responsibility of paying for an LDS mission falls on the missionary and his family, although, typically, other Church members are willing to help if needed. The cost is around $10,000 for the entire two years (the actual cost of living naturally depends on the area, but the Church balances this out; otherwise, the missionaries who go to some areas of South America would only spend $2000 and those that go to Japan would spend $20,000 or more). I had saved up about half the cost, but my parents wanted to help and ended up paying most of the cost.
I had never studied Portuguese (or even Spanish); so the first two months of my two years were spent in the Missionary Training Center (MTC) in Provo, UT. While there, I learned passable Portuguese and some teaching basics. It was intense. Still feeling quite unprepared, I flew to Lisbon in August of 1999. For the sake of safety and other reasons (2 Corinth. 13:1), missionaries always work in groups of two or three people. A new missionary is always grouped with a more experienced missionary who helps him continue to learn the language and teaching. Missionaries typically work about 70 hours per week talking to people, trying to find people to teach, supporting the members of the Church in the area, and doing other general service. Part of the "job description" is to be a representative of Christ; so when a missionary has an opportunity to help someone in any way they should take it. I got to help plow fields, build houses, clean houses, teach English, visit the elderly, and more. We tried to spend around 10 hours a week helping people in other ways besides teaching them what they need to know to save their souls. However, people are suspicious of anyone just offering to help without pay; so we did not always achieve that goal.
{{imgfloatleft{[img[An Unwelcome mat.|images/knockingSmall.jpg]]}}}{{imgfloatright{[img[15 floor apartments are not uncommon|images/onStairsSmall.jpg]]}}}We spent most of our time trying to find someone willing to listen. That meant a lot of time knocking on doors and stopping people in the streets. People were generally kind, but typically not interested in talking to us. We got a lot of exercise going up and down the stairs of enormous apartment buildings. We met all sorts of interesting people. All in all, it was a great experience, but very hard. Every once in a while you got to see that you had made a real difference for the better in one way or another and that made everything better.<html><br clear=all></html>
{{imgfloatright{[img[Sunset|images/sunsetSmall.jpg]]}}}{{imgfloatright{[img[Sao Roque|images/saoRoqueSmall.jpg]]}}}{{imgfloatright{[img[A metro stop in Chelas|images/metroStopSmall.jpg]]}}}Missionaries change to a different area every couple of months and so get to have a variety of experiences. I spent time on the island of Sao Miguel, in or near Lisbon, Peniche, and Santarem. For a short time, we had a car, but most of the time we either walked or used public transportation. It was exhausting sometimes, but we got to see some neat sights. I started carrying my camera in my bag to catch some of the more brilliant or bizarre moments.
One day a week, missionaries have what they call "preparation day". Actually it only lasts half the day, but during that time, a missionary writes a letter home, goes shopping, washes clothes, etc. They also have an opportunity to do some of the tourist things offered in the area.
[img[The Castelo dos Mouros near the Palacio de Sintra. It seemed like it would be the ideal place for a paintball battle.|images/casteloSmall.jpg]] [img[Walking around Lisbon, a really neat city. Shortly after we took this picture, a guy beckoned to us and offered to sell us some hashish. At the time, I didn't even know what it was, but I was pretty certain that I didn't want buy any.|images/lisbonSmall.jpg]]
|[img[On the coast in Peniche. We hiked out to the lighthouse from the south end of the city. The ocean was beautiful.|images/penicheSmall.jpg]]|[img[Fortaleza in Peniche.|images/fortalezaSmall.jpg]]|[img[Under the totalitarian regime of Salazar, the Fortaleza was used as a political prison. It was sobering to see. This was the visiting room.|images/politicalPrisonSmall.jpg]]|
|[img[Several of us went to Tomar together to visit the Convento dos Templarios. The place was amazing.|images/templar1Small.jpg]]|[img[I wanted to see the library, but they said it was "em obras" (under construction).|images/templar2Small.jpg]]|[img[The Jardim das Portas do Sol in Santarem. I went here as often as I could while I was in Santarem.|images/portasDoSolSmall.jpg]]|
|[img[Peniche is apparently famous for their bobbin lace (Rendas de bilros). I watched a number of ladies working on these. They produce some amazing work, but it takes a long time. It didn't seem economical to me.|images/bilrosSmall.jpg]]|[img[The Jardim António Borges. This park is close to the LDS chapel in Ponta Delgada on Sao Miguel. We went there and tossed a football around. The place has some incredible trees and stone construction.|images/jardimSmall.jpg]]| |
{{imgfloatright{[img[Chewy and spicy|images/octopusSmall.jpg]]}}}{{imgfloatright{[img[Mmm... cold, bug-eyed shrimp|images/shrimpPuppetSmall.jpg]]}}}People occasionally feed the missionaries. Sometimes that means that we eat things we are not accustomed to. I remember smiling as I stuffed a piece of pig's ear into my mouth. Although rather chewy, it would have been fine if it had not still had quite a bit of hair on it. I just smiled and kept on chewing. Sometimes, however, people would intentionally try to give us weird food to get a reaction. When that happened we didn't mind having fun with it. The octopus was okay, but undercooked and in a fairly spicy sauce. The shrimp were good, but I had never eaten whole shrimp like this. They made perfect finger puppets. Those are flea bites on my arm: an unfortunate side effect of visiting with everyone who will let you in. Poor people are typically more humble and more willing to listen, but also tend to live in more indigent circumstances.<html><br clear=all></html>
This is new to me, but it looks pretty easy to use. So that I don't lose them, the basic files come from http://www.tiddlywiki.com/ and then a lot of tips are available at http://www.giffmex.org/twfortherestofus.html .
When I get used to all this, I should get some extensions from http://www.tiddlytools.com/ or http://tiddlyvault.tiddlyspot.com/
Wow. What a fun tool.
/***
|''Name:''|LegacyStrikeThroughPlugin|
|''Description:''|Support for legacy (pre 2.1) strike through formatting|
|''Version:''|1.0.2|
|''Date:''|Jul 21, 2006|
|''Source:''|http://www.tiddlywiki.com/#LegacyStrikeThroughPlugin|
|''Author:''|MartinBudden (mjbudden (at) gmail (dot) com)|
|''License:''|[[BSD open source license]]|
|''CoreVersion:''|2.1.0|
***/
//{{{
// Ensure that the LegacyStrikeThrough Plugin is only installed once.
if(!version.extensions.LegacyStrikeThroughPlugin) {
version.extensions.LegacyStrikeThroughPlugin = {installed:true};
config.formatters.push(
{
name: "legacyStrikeByChar",
match: "==",
termRegExp: /(==)/mg,
element: "strike",
handler: config.formatterHelpers.createElementAndWikify
});
} //# end of "install only once"
//}}}
<<gradient vert #bbbbbb #eeeeee #ffffff>><<closeAll>> >>
!!Meet my beautiful wife
{{center{[img[images/inLeavesSmall.jpg]]}}}
{{imgfloatright{[img[Timpanogos temple|images/timpTempleSmall.jpg]]}}}In December 2004, I married the lovely and talented Amanda Bartlett. We were married in the Mt. Timpanogos temple. I love her like crazy. We like to bicycle, hike, rollerblade, run, and play piano together. Shortly after I proposed to her, we ran the Hobble-creek half-marathon together. Immediately afterward, she performed at a piano recital. She walked up to the stage with confidence and played beautifully. I had a hard time just walking to my seat in the audience. She is amazing.
We have a great life together.
<html><br clear=all></html>
!!My wonderful daughter
{{center{[img[images/famPicSmall.jpg]]}}}
[>img[Amanda and Emily|images/amandaEmilySmall.jpg][images/amandaEmily.jpg]]Our beautiful daughter Emily Janelle was born on July 29, 2007. What a doll! We have so much fun together as a family. She is learning and gaining strength quickly and becoming more and more interactive. We do get less sleep though... much less sleep, but we can't imagine life without her. While I'm off at school trying to understand how to get a computer to learn simple and silly things, Amanda's back home keeping our life running smoothly and helping Emily learn smooth motor control, vision and language understanding, and more. They're a lot more successful than I am too.<html><br clear=all></html>
/***
!Spacing stuff /%==================================================%/
***/
/*{{{*/
.header
{ background:transparent; padding:.3em .3em; border-bottom:1px solid; position:static; }
.headerShadow, .headerForeground
{ padding:.5em; }
.header a, .header .button, .header .tiddlyLinkExisting, .header .tiddlyLinkNonExisting
{ font-weight: normal; font-style: normal; }
.header .externalLink,
.siteSubtitle a, .siteSubtitle .button, .siteSubtitle .tiddlyLinkExisting, .siteSubtitle .tiddlyLinkNonExisting
{ font-style:italic; text-decoration:none; }
.header table
{ border-collapse: collapse !important; }
.tiddler
{ padding: 0 1em 1em 1em; }
.button, .button:hover, .button:active,
.viewer .button, .viewer .button:hover, .viewer .button:active
{ background:transparent; border:0; }
.toolbar
{ float:right; display:inline; padding-bottom:0; visibility:visible; }
.selected .toolbar
{ visibility:visible; }
.toolbar .button, .toolbar a
{ border:1px solid transparent; background:transparent; margin:0px 1px; padding:0px .2em; -moz-border-radius:.5em; }
.toolbar
{color:[[ColorPalette::TertiaryLight]];}
.toolbar a
{color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar
{color:[[ColorPalette::Foreground]];}
.selected .toolbar, .selected .toolbar .button, .selected .toolbar a
{ color:#006; }
.toolbar .button:hover, .toolbar a:hover
{ border:1px solid #69c !important; background:#006 !important; color:#fff !important; }
.tagging, .tagged
{ background-color: #ccc; border: 1px solid; }
.selected .tagging, .selected .tagged
{ background-color:#eee; border: 1px solid #999; }
.tagging, .tagged
{ -moz-border-radius:1em; }
.subtitle
{ font-size:90%; }
.editor input, .editor textarea
{ font-size: 8pt;}
.editor select
{ font-size: 8pt; border:1px solid; }
.title
{ font-size: 12pt; line-height:120%; }
.viewer
{ font-size: 9pt; padding: 0.7em; }
.viewer pre, .viewer code, .viewer blockquote
{ font-size:8pt; text-align:left; }
.viewer pre
{ background:#ffe; border:1px solid; }
.viewer table, .viewer table tr, .viewer table td
{ border:1px solid; }
.viewer hr {
margin: 1px; padding:1px;
border:0;
border-top: solid 1px #666;
color: #666;
}
.viewer blockquote {
line-height: 1.5em;
padding-left: 1em;
margin-left: 1em;
border-left: 1px dotted;
}
/*}}}*/
/***
!Textures /%==================================================%/
/*{{{*/
body
{ background-image: url('images/graywall.jpg'); }
.tagging, .tagged
{ background-color: transparent; border: 1px solid #ccc; }
.selected .tagging, .selected .tagged
{ background-image: url('images/parchment.jpg'); background-color:#edb; border: 1px solid #999; }
.menubox
{ background-image: url('images/parchment_gray.jpg'); background-color:#fff; }
.viewer
{ background-image: url('images/parchment_gray.jpg'); background-color:#fff; border: 1px solid #999;
/*}}}*/
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='siteMenu' class='siteMenu' refresh='content' tiddler='SiteMenu' style='clear:both'></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='storyMenu' class='storyMenu' refresh='content' force='true' tiddler='StoryMenu'></div>
<div id='tiddlerDisplay'></div>
</div>
<span style='display:none' macro='tiddler SiteStartup'></span>
<!--}}}-->
Although I spend a significant portion of my life in front of a computer and I enjoy the work I do, [[my family|My Family]] and [[my church|http://lds.org/]] make my world go around and fill my life with joy.
[[My Family]]
[[Hobbies]]
[[LDS Mission to Portugal]]
!!!Papers
J. A. Adams, C. Humphrey, M. A. Goodrich, J. L. Cooper, B. S. Morse, C. Engh, and N. Rasmussen. Cognitive Task Analysis for Developing UAV Wilderness Search Support, to appear in //Journal of Cognitive Engineering and Decision Making//.
J.L. Cooper and M. A. Goodrich. [[Towards Combining UAV and Sensor Operator Roles in UAV-Enabled Visual Search|http://faculty.cs.byu.edu/~mike/mikeg/papers/p351-cooper.pdf]]. In //Proceedings of ACM/IEEE International Conference on ~Human-Robot Interaction//, March 2008, Amsterdam, The Netherlands. (Best student paper award).
M. A. Goodrich, B. S. Morse, Damon Gerhardt, J. L. Cooper, M. Quigley, J. A. Adams, and C. Humphrey. Supporting Wilderness Search and Rescue using a ~Camera-Equipped Mini UAV. //Journal of Field Robotics//, 25 (1-2), pp89-110, 2008. The paper is [[available for free from Wiley InterScience|http://www3.interscience.wiley.com/cgi-bin/fulltext/117865012/PDFSTART]].
M. A. Goodrich, J. L. Cooper, J. A. Adams, C. Humphrey, R. Zeeman, and Brian G. Buss. Using a ~Mini-UAV to Support Wilderness Search and Rescue Practices for ~Human-Robot Teaming. In //Proceedings of the IEEE International Conference on Safety, Security and Rescue Robotics//, 2007. A draft of the paper is available [[here|http://faculty.cs.byu.edu/~mike/mikeg/papers/GoodrichSSRRCameraReady.pdf]].
J. L. Cooper and M. A. Goodrich. Integrating critical interface elements for intuitive single-display aviation control of ~UAVs. //Proceedings of SPIE -- Volume 6226. Enhanced and Synthetic Vision 2006//, Jacques G. Verly, Jeff J. Guell, Editors. [[Abstract and paper download available from SPIE.|http://spiedl.aip.org/getabs/servlet/GetabsServlet?prog=normal&id=PSISDG00622600000162260B000001&idtype=cvips&gifs=yes]]
!!!Thesis
J. L. Cooper. [[Supporting Flight Control for UAV-Assisted Wilderness Search and Rescue Through Human Centered Interface Design|http://contentdm.lib.byu.edu/ETD/image/etd2140.pdf]]. M.S. Thesis, Brigham Young University, 2008.
!!!Workshop Presentations
J. L. Cooper, M. A. Goodrich, D. Gerhardt, and B. Morse. Appropriate Spatiotemporal Scope of Automation and Interface Elements in ~UAV-Assisted Wilderness Search and Rescue. Human Factors of ~UAVs Workshop, Chandler, AZ, May 2007.
M. A. Goodrich and J. L. Cooper, "~Mini-UAV User Interface Elements: Trade-offs and Validation." Human Factors of ~UAVs Workshop, Mesa, AZ, May 2006.
M. A. Goodrich, M. Quigley, J. L. Cooper, and B. Barber, "Portable ~Mini-UAV Control Interfaces for the ~Non-Pilot." Human Factors of ~UAVs Workshop, Mesa, AZ, May 2005.
/***
|Name|QuoteOfTheDayPlugin|
|Source|http://www.TiddlyTools.com/#QuoteOfTheDayPlugin|
|Version|1.3.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <<br>>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|Display a randomly selected "quote of the day" from a list defined in a separate tiddler|
!!!!!Usage
<<<
{{{<<QOTD tiddlername norandom noclick inline cookie:cookiename delay>>}}}
* ''tiddlername'' is the name of a tiddler containing your list of quotes, each separated by a horizontal line (use {{{----}}} on a line by itself).
* Each time the macro is rendered it will display a different quotation, selected at random from the specified tiddler. To display quotes in the sequence in which they occur in the tiddler, you can use the ''norandom'' keyword.
* When using ''norandom'', you can also specify an optional ''cookie:cookiename'' parameter which will be used to track the //index// of the next quote to be displayed, so that each subsequent rendering of the macro can continue the sequence of quotes as entered in the source tiddler, even in between browser sessions.
* By default, clicking on the rendered quote will select and display another random quote. Use the optional ''noclick'' keyword parameter to disable this "onClick" handling.
* By default, a clickable or timed quote will be displayed insider a 'slider' panel, so that standard TW animation effects will be used. However, slider panels are always rendered as "block-level" content, forcing a newline both before and after the slider panel. Use the ''inline'' keyword parameter to bypass this side-effect and display a clickable/timed quote without automatically adding surrounding linebreaks.
* The quote can also be refreshed automatically, by specifying a numeric ''delay'' parameter (in milliseconds) which enables a countdown timer. When the mouse is over the quote, the timer is automatically stopped. Moving the mouse away from the quote content restarts the timer.
<<<
!!!!!Example
<<<
{{{<<QOTD Quotations 10000>>}}}
<<QOTD Quotations 10000>>
{{{<<QOTD SiteNews norandom 10000>>}}}
<<QOTD SiteNews norandom 10000>>
<<<
!!!!!Installation
<<<
import (or copy/paste) the following tiddlers into your document:
''QuoteOfTheDayPlugin'' (tagged with <<tag systemConfig>>)
^^documentation and javascript for QuoteOfTheDay handling^^
<<<
!!!!!Revision History
<<<
''2007.08.06 [1.3.0]'' added support for "cookie:cookiename" param
''2007.05.03 [1.2.1]'' corrected logic for handling "inline" display (i.e., bypass slider and use of 'block' for quote elements)
''2007.05.03 [1.2.0]'' added sliderPanel wrapper around quote to take advantage of core-supported slider animation. Use "noslider"/"inline" keyword param to suppress use of slider. Also added tooltips for click, delay, and click+delay modes.
''2007.04.16 [1.1.2]'' code cleanup
''2007.04.16 [1.1.1]'' onClick handling now supports sequential as well as random order
''2007.04.14 [1.1.0]'' added onClick handling for selecting and display a new random quote
''2005.10.21 [1.0.0]'' Initial Release
<<<
!!!!!Credits
<<<
This feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]].
Based on a suggestion by M.Russula
<<<
!!!!!Code
***/
//{{{
version.extensions.QOTD = {major: 1, minor: 3, revision: 0, date: new Date(2007,8,6)};
config.macros.QOTD = {
clickTooltip: "click to view another item",
timerTooltip: "auto-timer stopped... 'mouseout' to restart timer",
timerClickTooltip: "auto-timer stopped... click to view another item, or 'mouseout' to restart timer",
handler:
function(place,macroName,params) {
var tid=params.shift(); // source tiddler containing HR-separated quotes
var p=params.shift();
var click=true; // allow click for next item
var inline=false; // wrap in slider for animation effect
var random=true; // pick an item at random (default for "quote of the day" usage)
var cookie=""; // default to no cookie
while (p) {
if (p.toLowerCase()=="noclick") var click=false;
if (p.toLowerCase()=="inline") var inline=true;
if (p.toLowerCase()=="norandom") var random=false;
if (p.toLowerCase().substr(0,7)=="cookie:") var cookie=p.substr(8);
if (!isNaN(p)) var delay=p;
p=params.shift();
}
if ((click||delay) && !inline) {
var panel = createTiddlyElement(null,"div",null,"sliderPanel");
panel.style.display="none";
place.appendChild(panel);
var here=createTiddlyElement(panel,click?"a":"span",null,"QOTD");
}
else
var here=createTiddlyElement(place,click?"a":"span",null,"QOTD");
here.id=(new Date()).convertToYYYYMMDDHHMMSSMMM()+Math.random().toString(); // unique ID
here.setAttribute("tid",tid);
if (delay) here.setAttribute("delay",delay);
here.setAttribute("random",random);
here.setAttribute("cookie",cookie);
if (click) {
here.title=this.clickTooltip
if (!inline) here.style.display="block";
here.setAttribute("href","javascript:;");
here.onclick=function(event)
{ config.macros.QOTD.showNextItem(this,this.getAttribute("tid")); }
}
here.setAttribute("nextItem",config.options["txtQOTD_"+cookie]?parseInt(config.options["txtQOTD_"+cookie])-1:0);
config.macros.QOTD.showNextItem(here,tid);
if (delay) {
here.title=click?this.timerClickTooltip:this.timerTooltip
here.onmouseover=function(event)
{ clearTimeout(this.ticker); };
here.onmouseout=function(event)
{ this.ticker=setTimeout("config.macros.QOTD.tick('"+this.id+"')",this.getAttribute("delay")); };
here.ticker=setTimeout("config.macros.QOTD.tick('"+here.id+"')",delay);
}
},
tick: function(id) {
var here=document.getElementById(id); if (!here) return;
config.macros.QOTD.showNextItem(here,here.getAttribute("tid"));
here.ticker=setTimeout("config.macros.QOTD.tick('"+id+"')",here.getAttribute("delay"));
},
showNextItem:
function (here,tid) {
// hide containing slider panel (if any)
var p=here.parentNode;
if (p.className=="sliderPanel") p.style.display = "none"
// get a new quote, re-render quote display element, and advance index counter
var txt=store.getTiddlerText(tid); if (!txt) return;
var items=txt.split("\n----\n");
var index=here.getAttribute("nextItem"); if (index<0 || index>=items.length) index=0;
if (here.getAttribute("random")=="true") index=Math.floor(Math.random()*items.length);
removeChildren(here);
wikify(items[index],here);
index++;
here.setAttribute("nextItem",index);
var cookie=here.getAttribute("cookie")
if (cookie.length) {
config.options["txtQOTD_"+cookie]=index.toString();
saveOptionCookie("txtQOTD_"+cookie);
}
// redisplay slider panel (if any), with possible animation
if (p.className=="sliderPanel") {
if(anim && config.options.chkAnimate)
anim.startAnimating(new Slider(p,true,false,"none"));
else
p.style.display="block";
}
}
}
//}}}
My research as a ~PhD student in Computer Science is on hierarchical perception and hierarchical control. We know that the brain is composed of relatively simple (although not that simple) units (neurons) in a remarkably complex hierarchical structure. What is this hierarchy doing?
My Master's work focused on [[UAV control for Wilderness Search and Rescue]]
{{indent{ We apologize for the mess.}}}
/%
%/ {{halfindent{ [img[elements/home.jpg][Home]] [img[elements/research.jpg][Research]] [img[elements/school.jpg][Formal Education]] [img[elements/publications.jpg][Publications and Presentations]]/%
%/ [img[While I'm not at school|elements/personal.jpg][Personal Life]] [img[Link to contact info|elements/contact.jpg][Contact Information]]}}}
This tiddler is included in the PageTemplate as a ''hidden SPAN''. You can use it include macros or inline scripts that are automatically invoked whenever the document is loaded.
!!!!!initialize left/right sidebar displays
<<<
The ToggleLeftSidebar and ToggleRightSidebar inline scripts set the visibility (//display:none// or //display:block//) of the MainMenu ('left sidebar', DOM ID=//mainMenu//) and SideBarOptions ('right sidebar', DOM ID=//sidebar//) displays. They also adjust the margins of the center column ('story', DOM ID=//displayArea//) accordingly, so that it uses the available space without overlapping the sidebars. The ToggleScrollingSidebars inline script sets 'position:fixed' for the sidebars, so that they remain fixed in place (aka, "hover") when the rest of the page content is scrolled.
displayArea margins:
<script>
if (config.options.txtDisplayAreaRightMargin==undefined)
config.options.txtDisplayAreaRightMargin="18em";
if (config.options.txtDisplayAreaLeftMargin==undefined)
config.options.txtDisplayAreaLeftMargin="12em";
if (config.options.chkShowLeftSidebar==undefined)
config.options.chkShowLeftSidebar=true;
if (config.options.chkShowRightSidebar==undefined)
config.options.chkShowRightSidebar=false;
</script>
left: <<option txtDisplayAreaLeftMargin>> right: <<option txtDisplayAreaRightMargin>>
|{{{<<tiddler ToggleLeftSidebar>>}}} |<<tiddler ToggleLeftSidebar>> |
|{{{<<tiddler ToggleRightSidebar>>}}} |<<tiddler ToggleRightSidebar>> |
|{{{<<tiddler ToggleScrollingSidebars>>}}} |<<tiddler ToggleScrollingSidebars>> |
<<<
!!!!!initialize header display
<<<
The ToggleSiteTitles inline script sets the visibility (//display:none// or //display:block//) of the SiteTitle/SiteSubtitle display area ('page titles', DOM ID=//header//)
|{{{<<tiddler ToggleSiteTitles>>}}} |<<tiddler ToggleSiteTitles>> |
<<<
!!!!!"scroll to top" button
<<<
The ToggleTopButton script creates a link that 'hovers' in the lower right corner of your browser window and, when clicked, causes the page to return to the top (assuming it has been scrolled down...). The script also provides an interface so you can enable/disable this feature:
|{{{<<tiddler ToggleTopButton>>}}} |<<tiddler ToggleTopButton>> |
<<<
!!!!!toggle low-profile SiteMenu
<<<
The ToggleSiteMenu inline script sets the visibility (//display:none// or //display:block//) of the SiteMenu display area ('menubar', DOM ID=//siteMenu//).
|{{{<<tiddler ToggleSiteMenu>>}}} |<<tiddler ToggleSiteMenu>> |
<<<
Minds doubled for reading.
<<zoomText "Under Instruction" 1000 50 150 2500 0 0>>
{{center {{{mouseover{{{floatleft{<<tiddler ToggleLeftSidebar>>}}}{{floatright{<<tiddler ToggleRightSidebar>>}}}}}}}}}
[[StyleSheetShortcuts]]
[[MyStyleSheet]]
/***
|Name|StyleSheetShortcuts|
|Source|http://www.TiddlyTools.com/#StyleSheetShortcuts|
|Version||
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <<br>>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|CSS|
|Requires||
|Overrides||
|Description|CSS classes for common formatting, alignment, boxes, tables, etc.|
These 'style tweaks' can be easily included in other stylesheet tiddler so they can share a baseline look-and-feel that can then be customized to create a wide variety of 'flavors'.
***/
/*{{{*/
/* text alignments */
.left
{ display:block;text-align:left; }
.center
{ display:block;text-align:center; }
.right
{ display:block;text-align:right; }
.justify
{ display:block;text-align:justify; }
.halfindent
{ margin:0;padding:0;border:0;margin-left:1em; }
.indent
{ margin:0;padding:0;border:0;margin-left:2em; }
.floatleft
{ float:left; }
.floatright
{ float:right; }
.imgfloatleft
{ float:left;padding:5px; }
.imgfloatright
{ float:right;padding:5px; }
.clear
{ clear:both; }
.wrap
{ white-space:normal; }
.nowrap
{ white-space:nowrap; }
.hidden
{ display:none; }
.span
{ display:span; }
.block
{ display:block; }
.relative
{ position:relative; }
.absolute
{ position:absolute; }
/* font sizes */
.big
{ font-size:14pt;line-height:120% }
.medium
{ font-size:12pt;line-height:120% }
.normal
{ font-size:9pt;line-height:120% }
.small
{ font-size:8pt;line-height:120% }
.fine
{ font-size:7pt;line-height:120% }
.tiny
{ font-size:6pt;line-height:120% }
.larger
{ font-size:120%; }
.smaller
{ font-size:80%; }
/* font styles */
.bold
{ font-weight:bold; }
.italic
{ font-style:italic; }
.underline
{ text-decoration:underline; }
/* multi-column tiddler content (not supported in Internet Explorer) */
.twocolumns
{ display:block; -moz-column-count:2; -moz-column-gap:1em; -moz-column-width:50%;}
.threecolumns
{ display:block; -moz-column-count:3; -moz-column-gap:1em; -moz-column-width:33%}
.fourcolumns
{ display:block; -moz-column-count:4; -moz-column-gap:1em; -moz-column-width:25%}
/* borderless tables */
.borderless, .borderless table, .borderless td, .borderless tr, .borderless th, .borderless tbody
{ border:0 !important; margin:0 !important; padding:0 !important; }
/* thumbnail images (fixed-sized scaled images) */
.thumbnail img { height:5em !important; }
/* stretchable images (auto-size to fit tiddler) */
.stretch img { width:95%; }
/* grouped content */
.outline
{ display:block; padding:1em; -moz-border-radius:1em; border:1px solid; }
.menubox
{ display:block; padding:1em; -moz-border-radius:1em; border:1px solid; background:#fff; color:#000; }
.menubox .button, .menubox .tiddlyLinkExisting, .menubox .tiddlyLinkNonExisting
{ color:#009 !important; }
.groupbox
{ display:block; padding:1em; -moz-border-radius:1em; border:1px solid; background:#ffe; color:#000; }
.groupbox a, .groupbox .button, .groupbox .tiddlyLinkExisting, .groupbox .tiddlyLinkNonExisting
{ color:#009 !important; }
.groupbox code
{ color:#333 !important; }
.borderleft
{ margin:0;padding:0;border:0;margin-left:1em; border-left:1px dotted; padding-left:.5em; }
.borderright
{ margin:0;padding:0;border:0;margin-right:1em; border-right:1px dotted; padding-right:.5em; }
.borderbottom
{ margin:0;padding:1px 0;border:0;border-bottom:1px dotted; margin-bottom:1px; padding-bottom:1px; }
.bordertop
{ margin:0;padding:0;border:0;border-top:1px dotted; margin-top:1px; padding-top:1px; }
/* compact form */
.smallform
{ white-space:nowrap; }
.smallform input, .smallform textarea, .smallform button, .smallform checkbox, .smallform radio, .smallform select
{ font-size:8pt; }
/* colors */
.green { color:#6f6 !important }
.red { color:#f66 !important }
.blue { color:#99f !important }
/* rollover highlighting */
.mouseover
{color:[[ColorPalette::TertiaryLight]];}
.mouseover a
{color:[[ColorPalette::TertiaryLight]];}
.selected .mouseover
{color:[[ColorPalette::Foreground]];}
.selected .mouseover .button, .selected .mouseover a
{color:[[ColorPalette::PrimaryDark]];}
/*}}}*/
Fines double when teachers are present
/%
|Name|ToggleLeftSidebar|
|Source|http://www.TiddlyTools.com/#ToggleLeftSidebar|
|Version|0.0.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <<br>>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|script|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|show/hide left sidebar (MainMenu)|
%/<script label="show/hide left sidebar">
var show=document.getElementById('mainMenu').style.display=='none';
if (!show) {
document.getElementById('mainMenu').style.display='none';
var margin='1em';
}
else {
document.getElementById('mainMenu').style.display='block';
var margin=config.options.txtDisplayAreaLeftMargin?config.options.txtDisplayAreaLeftMargin:"";
}
place.innerHTML=(show?"<<<":">>>"); // SET LINK TEXT
place.title=show?"hide sidebar":"show sidebar"; // SET TOOLTIP
document.getElementById('displayArea').style.marginLeft=margin;
config.options.chkShowLeftSidebar=show;
saveOptionCookie('chkShowLeftSidebar');
var sm=document.getElementById("storyMenu"); if (sm) config.refreshers.content(sm);
return false;
</script><script>
if (config.options.chkShowLeftSidebar==undefined)
config.options.chkShowLeftSidebar=true;
if (!config.options.txtDisplayAreaLeftMargin||!config.options.txtDisplayAreaLeftMargin.length)
config.options.txtDisplayAreaLeftMargin="13em";
var show=config.options.chkShowLeftSidebar;
document.getElementById('mainMenu').style.display=show?"block":"none";
document.getElementById('displayArea').style.marginLeft=show?config.options.txtDisplayAreaLeftMargin:"1em";
place.lastChild.innerHTML=(show?"<<<":">>>"); // SET LINK TEXT
place.lastChild.title=show?"hide sidebar":"show sidebar"; // SET TOOLTIP
place.lastChild.style.fontWeight="normal";
</script>
/%
|Name|ToggleRightSidebar|
|Source|http://www.TiddlyTools.com/#ToggleRightSidebar|
|Version|0.0.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <<br>>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|script|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|show/hide right sidebar (SideBarOptions)|
%/<script label="show/hide right sidebar">
var show=document.getElementById('sidebar').style.display=='none';
if (!show) {
document.getElementById('sidebar').style.display='none';
var margin='1em';
}
else {
document.getElementById('sidebar').style.display='block';
var margin=config.options.txtDisplayAreaRightMargin?config.options.txtDisplayAreaRightMargin:"";
}
place.innerHTML=(show?">>>":"<<<"); // SET LINK TEXT
place.title=show?"hide sidebar":"show sidebar"; // SET TOOLTIP
document.getElementById('displayArea').style.marginRight=margin;
config.options.chkShowRightSidebar=show;
saveOptionCookie('chkShowRightSidebar');
var sm=document.getElementById("storyMenu"); if (sm) config.refreshers.content(sm);
return false;
</script><script>
if (config.options.chkShowRightSidebar==undefined)
config.options.chkShowRightSidebar=true;
if (!config.options.txtDisplayAreaRightMargin||!config.options.txtDisplayAreaRightMargin.length)
config.options.txtDisplayAreaRightMargin="18em";
var show=config.options.chkShowRightSidebar;
document.getElementById('sidebar').style.display=show?"block":"none";
document.getElementById('displayArea').style.marginRight=show?config.options.txtDisplayAreaRightMargin:"1em";
place.lastChild.innerHTML=(show?">>>":"<<<"); // SET LINK TEXT
place.lastChild.title=show?"hide sidebar":"show sidebar"; // SET TOOLTIP
place.lastChild.style.fontWeight="normal";
</script>
/%
|Name|ToggleSiteMenu|
|Source|http://www.TiddlyTools.com/#ToggleSiteMenu|
|Version|0.0.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <<br>>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|script|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|show/hide low-profile horizontal SiteMenu|
%/<script>
window.toggleSiteMenu=function(event) {
var m=document.getElementById('siteMenu');
if (!m) return true; // no sitemenu element... let event bubble through...
if (event && !event.shiftKey) return; // require SHIFT-doubleclick (avoids overlap with other doubleclick handlers)
var show=m.style.display=="none";
m.style.display=show?"block":"none";
config.options.chkHideSiteMenu=!show; saveOptionCookie('chkHideSiteMenu');
var nodes = document.getElementsByTagName("input");
for(var t=0; t<nodes.length; t++)
if (nodes[t].getAttribute("option")=="chkHideSiteMenu") nodes[t].checked=show;
if (event) { event.cancelBubble=true; if (event.stopPropagation) event.stopPropagation(); }
return false;
};
if (config.options.chkHideSiteMenu==undefined) config.options.chkHideSiteMenu=false;
var m=document.getElementById('siteMenu');
m.style.display=config.options.chkHideSiteMenu?"none":"block";
m.title="SHIFT-DOUBLECLICK on page background to show/hide menubar";
document.ondblclick=window.toggleSiteMenu;
</script><<option chkHideSiteMenu>><script>
var btn=place.lastChild;
btn.id="ToggleSiteMenu_checkbox"
btn.checked=!config.options.chkHideSiteMenu;
btn.old_onchange=btn.onchange;
btn.onchange=function() {
if (this.old_onchange) this.old_onchange.apply(this,arguments);
window.toggleSiteMenu();
};
</script> show site menubar
/%
|Name|ToggleSiteTitles|
|Source|http://www.TiddlyTools.com/#ToggleSiteTitles|
|Version|0.0.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <<br>>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|script|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|show/hide document 'header' area (containing SiteTitle and SiteSubtitle content)|
%/<script>
var c=document.getElementById('contentWrapper');
if (config.options.chkHideSiteTitles==undefined) config.options.chkHideSiteTitles=false;
for (var i=0; i<c.childNodes.length; i++) if (hasClass(c.childNodes[i],"header")) var h=c.childNodes[i];
h.style.display=config.options.chkHideSiteTitles?"none":"block";
</script><<option chkHideSiteTitles>><script>
place.lastChild.checked=!config.options.chkHideSiteTitles;
place.lastChild.onchange=function() {
var c=document.getElementById('contentWrapper');
for (var i=0; i<c.childNodes.length; i++) if (hasClass(c.childNodes[i],"header")) var h=c.childNodes[i];
config.options.chkHideSiteTitles=!this.checked;
h.style.display=config.options.chkHideSiteTitles?"none":"block";
saveOptionCookie("chkHideSiteTitles");
};
</script> show site titles
/%
|Name|ToggleTopButton|
|Source|http://www.TiddlyTools.com/#ToggleTopButton|
|Version|0.0.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <<br>>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|script|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|adds a floating "scroll to top" button in the lower right corner of the window. |
%/<script>
window.showTopButton=function(show) {
// remove existing "top" button (if any)
var e=document.getElementById("scrollToTopButton"); if (e) e.parentNode.removeChild(e);
if (config.browser.isIE) return; // IE doesn't do FIXED... do nothing.
if (!show) return; // hiding button... we're done.
// create a link that scrolls to the top of page
e=createTiddlyElement(null,"A",null,null,"Return to top");
e.id="scrollToTopButton";
e.title="scroll to top of page";
e.onclick=function(){window.scrollTo(0,0)};
// make it hover in the bottom right corner of the window
var s=e.style;
s.position="fixed";
s.zIndex="1001"; // hopefully, this will be on top of ALL other elements!
s.bottom="1em";
s.right="3em";
s.cursor="pointer";
s.backgroundColor="#eee";
s.color="#009";
s.border="1px solid";
s.padding="0 1em";
s.MozBorderRadius="1em";
s.fontSize="7pt";
document.body.insertBefore(e,null);
}
if (config.options.chkShowTopButton==undefined) config.options.chkShowTopButton=true;
window.showTopButton(config.options.chkShowTopButton);
</script><<option chkShowTopButton>><script>
place.lastChild.onchange=function() {
window.showTopButton(this.checked);
config.options.chkShowTopButton=this.checked;
saveOptionCookie("chkShowTopButton");
};
</script> "scroll-to-top" button
Under the advisement of [[Dr. Michael Goodrich|http://faculty.cs.byu.edu/~mike/]] at [[Brigham Young University|http://home.byu.edu/]], I have worked on developing a civilian-use interface for controlling small, camera-equipped Unmanned Aerial Vehicles (~UAVs).
The purpose of this research is to work toward a relatively inexpensive UAV system that supports Wilderness Search and Rescue (~WiSAR) volunteers during some search scenarios. Such a system inherits all of the difficulties associated with remotely operated vehicles (e.g., [[Situation Awareness|http://en.wikipedia.org/wiki/Situational_awareness]], system reliability, [[neglect tolerance|http://students.cs.byu.edu/~crandall/NeglectTolerance.html]]), but also introduces additional constraints in order to be useful for ~WiSAR. Because of the volunteer nature of the domain, the system must be inexpensive, be controllable by few operators, and can only require a minor investment of time for training purposes (we assume non-pilot volunteers). It is advantageous if the system is hand-portable and deployable, allowing first responders to operate the UAV directly from the incident site, or possibly while maintaining mobility (e.g., one possible model for using the UAV in search is to provide a top down view of the searcher's location: the craft can then circle a beacon carried by the searcher who can visually search his or her immediate area, but also refer a handheld video-display of his or her location for additional information).
Our work toward this goal includes:
* [[Formal task analysis of ~WiSAR and informal analysis of UAV control|WiSAR Task Analysis]]
* Analysis-driven, integrated interface design
* Experimental validation in simulation
* Validation through semi-structured field trials
[img[images/workFlow.png]]
Together with [[Dr. Julie Adams|http://www.vuse.vanderbilt.edu/~adamsja/index.html]] and [[Curtis Humphrey|http://eecs.vanderbilt.edu/research/hmtl/wiki/?n=Main.CurtisHumphrey]], we conducted a Goal-directed Task Analysis (GDTA) of the ~WiSAR domain. The task analysis involves interviewing subject matter experts (several ~WiSAR volunteers) to obtain information about the process of interest. It identifies key tasks and goals together with the information requirements for accomplishing those tasks.
We also completed a partial Cognitive Work Analysis (CWA). From this, we were able to generate an [[information-flow model for ~WiSAR|WiSAR Information Flow]]. The essence of the information flow task is that searching can be modeled as a utility maximization process. The searchers begin with some prior probability model of where the missing person might be, based on whatever information they have received from the reporting party and their own intuition. They also have estimates on potential sources for information about the missing person. This may be several layers deep. For example, the searchers may consider multiple possible avenues for getting in touch with the missing person's family who may have information about how to find the missing person's girlfriend who may be able to locate his journal, which provides information about his intent and allows the searchers to refine their model of his probable location. The probability model is in constant flux because it changes as new information is acquired and with the passage of time. Taking into account the expected utility and costs of sampling from different available information sources, the searchers allocate their resources as well as they can to finally locate and rescue or recover the individual.
The UAV can serve as an additional resource for obtaining information from some potential sources. It can be particularly beneficial when the searches need to rapidly obtain visual information from areas that are dangerous or difficult to traverse. To be useful, however, the operators must be able to control the craft and correctly interpret the information it obtains. It is also important to ensure that the introduction of new technology to the search process does not distract from other efforts and cause a net loss to the process.
/***
|Name|ZoomTextPlugin|
|Source|http://www.TiddlyTools.com/#ZoomTextPlugin|
|Version|2.1.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <<br>>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.2|
|Type|plugin|
|Requires||
|Overrides||
|Description|display text with timer-based font animation to automatically grow/shrink text|
!!!!!Usage
<<<
{{{
<<zoomText "text to display" wait start stop duration cycles pause>>
or
<<zoomText @TiddlerName wait start stop duration cycles pause>>
}}}
<<<
!!!!!Configuration
<<<
<<option chkAnimate>> enable all animation
<<option chkZoomText>> enable text animation
<<<
!!!!!Examples
<<<
{{{
<<zoomText "text to display" 0 0 300 2500 2 1000>>
}}}
<<zoomText "text to display" 0 0 300 2500 2 1000>>
<<<
!!!!!Installation
<<<
import (or copy/paste) the following tiddlers into your document:
ZoomTextPlugin
//''Note: this plugin requires TiddlyWiki 2.2 or above''//
<<<
!!!!!Revision History
<<<
2007.08.03 [2.1.0] converted from inline script
2007.07.16 [2.0.0] added TW2.2-compatible Morpher handling for smoother animation on slower systems
2007.01.01 [1.0.0] initial release
<<<
!!!!!Credits
<<<
This feature was developed by Eric L Shulman / ELS Design Studios
<<<
!!!!!Code
***/
//{{{
version.extensions.zoomText= {major: 2, minor: 1, revision: 0, date: new Date(2007,8,3)};
if (config.options.chkZoomText==undefined) config.options.chkZoomText=true;
config.macros.zoomText = {
handler: function(place,macroName,params,wikifier,paramString,tiddler) {
var id=(new Date()).convertToYYYYMMDDHHMMSSMMM()+Math.random().toString(); // unique ID
var content=params[0]; if (content.substr(0,1)=="@") content=store.getTiddlerText(content.substr(1));
var target=createTiddlyElement(place,"span",id);
target.style.lineHeight="100%";
wikify(content,target);
target.Wait=params[1]?parseInt(params[1]):0;
target.Start=params[2]?parseInt(params[2]):1;
target.Stop=params[3]?parseInt(params[3]):100;
target.Duration=params[4]?parseInt(params[4]):config.animDuration;
target.Cycle=params[5]?parseInt(params[5]):0
target.Pause=params[6]?parseInt(params[6]):0;
// if not animating and even # of cycles, apply ending size to text, otherwise, apply starting size
var animate=config.options.chkAnimate && config.options.chkZoomText;
if (!animate && !(target.Cycle % 2)) target.Start=target.Stop;
target.style.fontSize=target.Start+"%";
target.style.display=(target.Start<=0)?"none":"inline"; // hide text if size==0 (fixes IE rendering)
if (animate) setTimeout("config.macros.zoomText.timer('"+target.id+"')",target.Wait);
},
timer: function(id) {
var target=document.getElementById(id); if (!target) return;
var p = [{style: 'fontSize', start: target.Start, end: target.Stop, template: '%0%'}];
var c = function(element,properties) {
if (element.Cycle > 0) {
element.Cycle--;
var t=element.Start; element.Start=element.Stop; element.Stop=t;
setTimeout("config.macros.zoomText.timer('"+element.id+"')",element.Pause);
}
else
if (element.Stop<=0) element.style.display="none"; // hide text if size==0 (fixes IE rendering)
};
target.style.display="inline"; // show initial text
anim.startAnimating(new Morpher(target,target.Duration,p,c));
}
};
//}}}