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

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

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

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

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

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

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

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

#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 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 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
<<importTiddlers>>
* A tiddler's tags are show ''above'' the tiddlers title (instead of in a right-floated box).
* A tiddler's tagging list is shown ''below'' the tiddlers content (instead of in a left-floated box).
These layout changes are done with small changes to ViewTemplate (See TagglyTaggingViewTempplate) and EditTemplate (see TagglyTaggingEditTemplate) and with some CSS from TagglyTaggingStyles.
The default TW tagging macro is called "tagging". TagglyTagging provides an enhanced version of this called "tagglyTagging". So in the TagglyTaggingViewTemplate, macro="tagging" is replaced by "macro="tagglyTagging". The tagglyTagging macro lets you do things like:
* Sort the tagged list ascending or descending by title, modified date or created date
* Format the list in columns
* Hide the tagged list
It also remembers your preference on a per-tiddler basis. 
The "New Here" button is optional but very useful. It lets you quickly create a new tiddler that is automatically tagged with the tag you're looking at. Eg if you are looking at Addresses, clicking "new here" creates a new Address.
This is also optional. Because we often want to view a tag as a tiddler this makes the default action when you click on a tag. You can access to other tag functions by clicking the drop down icon to the right of the tag.
TagglyTagging (also known as "TagglyWiki Style Tagging") is set of plugins, templates and styles you can install in your TiddlyWiki that let you use tagging in powerful and useful ways.
Actually a lot less than there used to be since TiddlyWiki version 2.0! (TagglyTagging introduced the concept that a tag was a tiddler and vice-versa. Since version 2.0 this concept central to tagging in TiddlyWiki. See "Where did it come from?" below for more information).
TagglyTagging lets you better utilise the power of tagging your TiddlyWiki data. 
A brief list of what you can do with TagglyTagging:
* Dynamically define the structure of your data.
* Avoid hand maintaining "index" pages of your tiddlers.
* Make all your data easily locatable via your tag heirachy.

Other reasons you should give TagglyTagging a try:
* You find you aren't getting a lot of value from tagging your tiddlers in TiddlyWiki.
* You are sometimes annoyed by tag popup menus especially when they are longer than your page.

Sounds good but I'm not feelin' it...
* It is hard to explain without a demonstration. Try the TagglyTaggingTutorial.
The easiest way is to download an empty file from [[Download]]. You can of course install each component listed at TagglyTagging.
See [[TagglyTagging History]].
!Bill
* Go over TPS reports

!Milton 
* Get Back Stapler
<<tag acronym>>s with tiddlers.
<<tabs title
Computing "Computing Acronyms" "Computing Acronyms"
OpTier "OpTier Acronyms" "OpTier Acronyms"
Financial "Financial Acronyms" "Financial Acronyms"
Tiddlers "Acronyms with Tiddlers" "Acronyms with Tiddlers"
>>
Providing high quality consultancy in the practical implementation of <<tag grid>> and <<tag datagrid>> technologies, across heterogeneous languages and architectures, <<tag linux>> <<tag pc>> <<tag osx>>, <<tag java>> <<tag c++>>

Please explore the menu links to the left. If you found this site wit a search engine, try re-entering your search here, as google is not smart enough to jump to the relevant tiddly wiki page:
 
<<search>>

For my CV please visit [[cv-library|http://www.cv-library.co.uk/cgi-bin/quickview.cgi?ref=931013]]
My obfuscated e-mail address is: chris (dot) ashley (at) in-collaboration.co.uk
http://www.itjobswatch.co.uk/
DataSynapse http://www.datasynapse.com/
DataSynapse Support http://customer.datasynapse.com 
OpTier http://www.optier.com/
OpTier Support https://na1.salesforce.com/sserv/login.jsp?orgId=00D3000000009uB


http://fifarms/ [[Fixed Income Farm Information]]

[[Tangosol]] http://www.tangosol.com/
Rami's OpTier Builds \\ldndwm342423\Optier\

Oracle http://www.oracle.com chris.ashley@b a r c a p.com

!Ports

|8000|DS Manager|
|8080/apex|Oracle DB manager|
|8081/corefirst|CoreFirst Server|
|5566|[[CoreFirst Agent]]|
|8181|Tomcat admin-admin|

Farm Owners
Y:\Ldn\it\HPC\Application_support\Inventory\LDN Farms.xls

http://www.ece.osu.edu/ssh/
*[[CoreFirst Terms]]
*[[DataSynapse Terms]]
*[[Financial Terms]]
*[[Computing Terms]]
*[[Java Terms]]
*[[Mathematical Terms]]
05/11/06 DataSynapse Administrators 2 day course 
23/11/06 OpTier CoreFirst Developers 2 day course 
10/01/07 Tangasol Coherance - onsite Dave Oliva
22/01/07 DS 1 day admin course - Barclays Bank by Barry Childe
../../08 Financial Modeling - Excelian Option trading, pricing....
16/07/08 SCJP Sun Certified Java Programmer 5.0  self study, exam taken and passed.
<html><br><a href="http://www.maploco.com/view.php?id=768218"><img border=0 src="http://www.maploco.com/vmap/768218.png" alt="Visitor Map"></a><br><a href="http://www.maploco.com/">Create your own visitor map!</a><br></html>

<html>
<!-- Start of Globel Code -->
<a href="http://www.statistics.001.c-o-u-n-t.com?count=in-collaoration-wiki" target="_blank">
<img src="http://001.c-o-u-n-t.com/count-010.pl?count=in-collaoration-wiki&type=links&prog=unique" border="0" alt="Myspace" title="Myspace"></a>
<br><a href="http://www.c-o-u-n-t.com" target="_blank">
<font size="1">Myspace</font></a>
<noscript>The following text will not be seen after you upload your website,
please keep it in order to retain your counter functionality 
<br><a href="http://www.5wd.net/bikes/" target="_blank">Motorbikes</a><br> 
</noscript>
<!-- End of Globel Code -->
</html>
Application Configuration Information Database or Atomicity Consistency Isolation Durability
Applications Functional Heads
!Asynchronous JavaScript and Xml

Dev technique to make web pages more interactive by tweaking small amounts of of data, so a web page dose not have to be reloaded.

XMLHttpRequest object is used to exchange data with the web server.
!Aspect Oriented Programming

Adding new methods into a class, before/after/around for either the caller or callee sides of a method call. [[Javassist]] is an example to enable ASP.
!GTD and TW 2.0
This is TiddlyWiki <<version>> using StyleSheet and PageTemplate tiddlers for the GTD Theme.

GTD Tiddly Wiki is a GettingThingsDone adaptation by NathanBowers of JeremyRuston's Open Source TiddlyWiki. The purpose of GTD Tiddly Wiki is to give users a single repository for their GTD lists and support materials so they can create/edit lists, and then print directly to 3x5 cards for use with the HipsterPDA.

!Features Include:
* Free and Open Source.
* Easy to update.
* Prints directly to 3x5.
* Searchable.
* Exists as a single, portable, cross platform file.
* It runs on your computer, so you can make changes when you're not online. It's not a ServerSide thing.
!Get started:
Start by saving GTDTiddlyWiki to your computer (right click on [[this link|#]] and select 'Save link as...' or 'Save target as...' See SaveChanges for details).
 
You can edit entries, or "Tidders", by clicking "edit" or double clicking anywhere on the Tiddler. When you click "done" or press [ctrl+enter] your changes are saved.

There are some pre-populated action lists in the MainMenu on the left. If you want to start with a blank slate, here is an [[empty template|http://www.checkettsweb.com/tw/gtd_empty.htm]].

!!More information:
*SupportedBrowsers
*KeyFeatures
*KeyboardShortcuts
*[[Print3x5]]
*FormattingInstructions (create lists, headings, and other formatting)
*AboutTiddlers
*CreateTiddlers
*DeleteTiddlers
* PermaView
*KnownBugs
* HowToUpgrade
* ServerSide version.
*Jeremy's original HelloThere.

Thanks to JeremyRuston for creating such a great Open Source project!
----
TiddlyWiki and GTD Tiddly Wiki are published under an OpenSourceLicense and carry NoWarranty.

Current Version: <<version>> | RevisionHistory | UpdateNotification
Manages user access to Calypso applications and functions. Runs adjunct to the DataServer.
<<forEachTiddler 
 where 
 'tiddler.tags.contains("acronym")'
 write
'"|[["+tiddler.title+"]]|"+tiddler.text.slice(0,tiddler.text.indexOf("\n")).replace("!","")+"|\<\<tags "+tiddler.title+"\>\>|\n"'
>>
/%
// The Macros tag source was modified by CJA to produce tags in one line
config.macros.tags.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{
 params = paramString.parseParams("anon",null,true,false,false);
// var theList = createTiddlyElement(place,"ul");
 var title = getParam(params,"anon","");
 if(title && store.tiddlerExists(title))
 tiddler = store.getTiddler(title);
 var sep = getParam(params,"sep"," ");
 var lingo = config.views.wikified.tag;
 var prompt = tiddler.tags.length == 0 ? lingo.labelNoTags : lingo.labelTags;
// createTiddlyElement(theList,"li",null,"listTitle",prompt.format([tiddler.title]));
 for(var t=0; t<tiddler.tags.length; t++)
 {
 
 if (!tiddler.tags[t].contains("acronym"))
 createTagButton(place,tiddler.tags[t],tiddler.title);
// createTagButton(createTiddlyElement(theList,"li"),tiddler.tags[t],tiddler.title);
// if(t<tiddler.tags.length-1)
// createTiddlyText(theList,sep);
 }
}

%/
Amdahl's Law measures the speedup gained by adding more processors; states that there is an upper limit on the speed improvements yielded by adding more processors. 

According to the law, if as little as 10% of computing power is invested in overhead, then even a hundred-fold increase in processing power yields only 9.17 times the processing speed.

The [[Scalability Crash Barrier]] and the [[Scalability Cost Barrier]] when scaling either makes little or no difference or just costs too much to gain any significant return.

Any application that shares data , partial results at checkpoints, is four our purposes stateful and sooner or later succumbs to Amdahl's Law.

[[IMDG]] ~In-Memory Data Grid is the antidote for Amdahl's Law, by overcoming the statefulness challenge.
For transaction that are handled by the same thread:
RequestID + ThreadID
otherwise
RequestID + in-tier ID
!Binary Large O''b''ject

see also [[CLOB]]
The ''Bank of England'' is now 300 years old and started life as a private bank to raise money to go to war for William and Mary.

Now it is nationalised and is responsible for the financial stability of the country, which it maintains via the [[MPC]] which sets the [[Repo rate]], effectively the [[Base Rate]] according to inflation targets set by the government and measured by [[CPI]].

Occasionally the Bank of England steps in to ensure stability, such as propping up Northern Rock and stopping the first run on a UK bank for 150 years. However it dose not always do so, as in the cases of BCCI Bank and Bearings Banks.
Singleton class for use with CoreFirst dynamic instrumentation.

It assumes that the thread on which these calls are made has a valid [[Transaction Context]] saved
/***
''Name:'' Calendar plugin
''Version:'' <<getversion calendar>> (<<getversiondate calendar "DD MMM YYYY">>)
''Author:'' SteveRumsby

''Configuration:''

|''First day of week:''|<<option txtCalFirstDay>>|(Monday = 0, Sunday = 6)|
|''First day of weekend:''|<<option txtCalStartOfWeekend>>|(Monday = 0, Sunday = 6)|

''Syntax:'' 
|{{{<<calendar>>}}}|Produce a full-year calendar for the current year|
|{{{<<calendar year>>}}}|Produce a full-year calendar for the given year|
|{{{<<calendar year month>>}}}|Produce a one-month calendar for the given month and year|
|{{{<<calendar thismonth>>}}}|Produce a one-month calendar for the current month|
|{{{<<calendar lastmonth>>}}}|Produce a one-month calendar for last month|
|{{{<<calendar nextmonth>>}}}|Produce a one-month calendar for next month|

***/
// //Modify this section to change the text displayed for the month and day names, to a different language for example. You can also change the format of the tiddler names linked to from each date, and the colours used.

// // ''Changes by ELS 2005.10.30:''
// // config.macros.calendar.handler()
// // ^^use "tbody" element for IE compatibility^^
// // ^^IE returns 2005 for current year, FF returns 105... fix year adjustment accordingly^^
// // createCalendarDays()
// // ^^use showDate() function (if defined) to render autostyled date with linked popup^^
// // calendar stylesheet definition
// // ^^use .calendar class-specific selectors, add text centering and margin settings^^

//{{{
config.macros.calendar = {};

config.macros.calendar.monthnames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
config.macros.calendar.daynames = ["M", "T", "W", "T", "F", "S", "S"];

config.macros.calendar.weekendbg = "#c0c0c0";
config.macros.calendar.monthbg = "#e0e0e0";
config.macros.calendar.holidaybg = "#ffc0c0";

//}}}
// //''Code section:''
// (you should not need to alter anything below here)//
//{{{
if(config.options.txtCalFirstDay == undefined)
  config.options.txtCalFirstDay = 0;
if(config.options.txtCalStartOfWeekend == undefined)
  config.options.txtCalStartOfWeekend = 5;

config.macros.calendar.tiddlerformat = "0DD/0MM/YYYY";  // This used to be changeable - for now, it isn't// <<smiley :-(>> 

version.extensions.calendar = { major: 0, minor: 6, revision: 0, date: new Date(2006, 1, 22)};
config.macros.calendar.monthdays = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

config.macros.calendar.holidays = [ ]; // Not sure this is required anymore - use reminders instead
//}}}

// //Is the given date a holiday?
//{{{
function calendarIsHoliday(date)
{
 var longHoliday = date.formatString("0DD/0MM/YYYY");
 var shortHoliday = date.formatString("0DD/0MM");

 for(var i = 0; i < config.macros.calendar.holidays.length; i++) {
   if(config.macros.calendar.holidays[i] == longHoliday || config.macros.calendar.holidays[i] == shortHoliday) {
     return true;
   }
 }
 return false;
}
//}}}

// //The main entry point - the macro handler.
// //Decide what sort of calendar we are creating (month or year, and which month or year)
// // Create the main calendar container and pass that to sub-ordinate functions to create the structure.
// ELS 2005.10.30: added creation and use of "tbody" for IE compatibility and fixup for year >1900//
// ELS 2005.10.30: fix year calculation for IE's getYear() function (which returns '2005' instead of '105')//
//{{{
config.macros.calendar.handler = function(place,macroName,params)
{
   var calendar = createTiddlyElement(place, "table", null, "calendar", null);
   var tbody = createTiddlyElement(calendar, "tbody", null, null, null);
   var today = new Date();
   var year = today.getYear();
   if (year<1900) year+=1900;
   if (params[0] == "thismonth")
  {
      cacheReminders(new Date(year, today.getMonth(), 1, 0, 0), 31);
      createCalendarOneMonth(tbody, year, today.getMonth());
  } 
  else if (params[0] == "lastmonth") {
      var month = today.getMonth()-1; if (month==-1) { month=11; year--; }
      cacheReminders(new Date(year, month, 1, 0, 0), 31);
      createCalendarOneMonth(tbody, year, month);
   }
   else if (params[0] == "nextmonth") {
      var month = today.getMonth()+1; if (month>11) { month=0; year++; }
      cacheReminders(new Date(year, month, 1, 0, 0), 31);
      createCalendarOneMonth(tbody, year, month);
   }
   else {
      if (params[0]) year = params[0];
      if(params[1])
      {
         cacheReminders(new Date(year, params[1]-1, 1, 0, 0), 31);
         createCalendarOneMonth(tbody, year, params[1]-1);
      }
      else
      {
         cacheReminders(new Date(year, 0, 1, 0, 0), 366);
         createCalendarYear(tbody, year);
      }
   }
  window.reminderCacheForCalendar = null;
}
//}}}
//{{{
//This global variable is used to store reminders that have been cached
//while the calendar is being rendered.  It will be renulled after the calendar is fully rendered.
window.reminderCacheForCalendar = null;
//}}}
//{{{
function cacheReminders(date, leadtime)
{
  if (window.findTiddlersWithReminders == null)
    return;
  window.reminderCacheForCalendar = {};
  var leadtimeHash = [];
  leadtimeHash [0] = 0;
  leadtimeHash [1] = leadtime;
  var t = findTiddlersWithReminders(date, leadtimeHash, null, 1);
  for(var i = 0; i < t.length; i++) {
    //just tag it in the cache, so that when we're drawing days, we can bold this one.
     window.reminderCacheForCalendar[t[i]["matchedDate"]] = "reminder:" + t[i]["params"]["title"]; 
  }
}
//}}}
//{{{
function createCalendarOneMonth(calendar, year, mon)
{
  var row = createTiddlyElement(calendar, "tr", null, null, null);
  createCalendarMonthHeader(calendar, row, config.macros.calendar.monthnames[mon] + " " + year, true, year, mon);
  row = createTiddlyElement(calendar, "tr", null, null, null);
  createCalendarDayHeader(row, 1);
  createCalendarDayRowsSingle(calendar, year, mon);
}
//}}}

//{{{
function createCalendarMonth(calendar, year, mon)
{
  var row = createTiddlyElement(calendar, "tr", null, null, null);
  createCalendarMonthHeader(calendar, row, config.macros.calendar.monthnames[mon] + " " + year, false, year, mon);
  row = createTiddlyElement(calendar, "tr", null, null, null);
  createCalendarDayHeader(row, 1);
  createCalendarDayRowsSingle(calendar, year, mon);
}
//}}}

//{{{
function createCalendarYear(calendar, year)
{
  var row;
  row = createTiddlyElement(calendar, "tr", null, null, null);
  var back = createTiddlyElement(row, "td", null, null, null);
  var backHandler = function() {
      removeChildren(calendar);
      createCalendarYear(calendar, year-1);
    };
  createTiddlyButton(back, "<", "Previous year", backHandler);
  back.align = "center";

  var yearHeader = createTiddlyElement(row, "td", null, "calendarYear", year);
  yearHeader.align = "center";
  yearHeader.setAttribute("colSpan", 19);

  var fwd = createTiddlyElement(row, "td", null, null, null);
  var fwdHandler = function() {
    removeChildren(calendar);
    createCalendarYear(calendar, year+1);
  };
  createTiddlyButton(fwd, ">", "Next year", fwdHandler);
  fwd.align = "center";

  createCalendarMonthRow(calendar, year, 0);
  createCalendarMonthRow(calendar, year, 3);
  createCalendarMonthRow(calendar, year, 6);
  createCalendarMonthRow(calendar, year, 9);
}
//}}}

//{{{
function createCalendarMonthRow(cal, year, mon)
{
  var row = createTiddlyElement(cal, "tr", null, null, null);
  createCalendarMonthHeader(cal, row, config.macros.calendar.monthnames[mon], false, year, mon);
  createCalendarMonthHeader(cal, row, config.macros.calendar.monthnames[mon+1], false, year, mon);
  createCalendarMonthHeader(cal, row, config.macros.calendar.monthnames[mon+2], false, year, mon);
  row = createTiddlyElement(cal, "tr", null, null, null);
  createCalendarDayHeader(row, 3);
  createCalendarDayRows(cal, year, mon);
}
//}}}

//{{{
function createCalendarMonthHeader(cal, row, name, nav, year, mon)
{
  var month;
  if(nav) {
    var back = createTiddlyElement(row, "td", null, null, null);
    back.align = "center";
    back.style.background = config.macros.calendar.monthbg;

/*
    back.setAttribute("colSpan", 2);

    var backYearHandler = function() {
      var newyear = year-1;
      removeChildren(cal);
      cacheReminders(new Date(newyear, mon , 1, 0, 0), 31);
      createCalendarOneMonth(cal, newyear, mon);
    };
    createTiddlyButton(back, "<<", "Previous year", backYearHandler);
*/
    var backMonHandler = function() {
      var newyear = year;
      var newmon = mon-1;
      if(newmon == -1) { newmon = 11; newyear = newyear-1;}
      removeChildren(cal);
      cacheReminders(new Date(newyear, newmon , 1, 0, 0), 31);
      createCalendarOneMonth(cal, newyear, newmon);
    };
    createTiddlyButton(back, "<", "Previous month", backMonHandler);


    month = createTiddlyElement(row, "td", null, "calendarMonthname", name)
//    month.setAttribute("colSpan", 3);
    month.setAttribute("colSpan", 5);

    var fwd = createTiddlyElement(row, "td", null, null, null);
    fwd.align = "center";
    fwd.style.background = config.macros.calendar.monthbg; 

//    fwd.setAttribute("colSpan", 2);
    var fwdMonHandler = function() {
      var newyear = year;
      var newmon = mon+1;
      if(newmon == 12) { newmon = 0; newyear = newyear+1;}
      removeChildren(cal);
      cacheReminders(new Date(newyear, newmon , 1, 0, 0), 31);
      createCalendarOneMonth(cal, newyear, newmon);
    };
    createTiddlyButton(fwd, ">", "Next month", fwdMonHandler);
/*
    var fwdYear = createTiddlyElement(row, "td", null, null, null);
    var fwdYearHandler = function() {
      var newyear = year+1;
      removeChildren(cal);
      cacheReminders(new Date(newyear, mon , 1, 0, 0), 31);
      createCalendarOneMonth(cal, newyear, mon);
    };
    createTiddlyButton(fwd, ">>", "Next year", fwdYearHandler);
*/
  } else {
    month = createTiddlyElement(row, "td", null, "calendarMonthname", name)
    month.setAttribute("colSpan", 7);
  }
  month.align = "center";
  month.style.background = config.macros.calendar.monthbg;
}
//}}}

//{{{
function createCalendarDayHeader(row, num)
{
  var cell;
  for(var i = 0; i < num; i++) {
    for(var j = 0; j < 7; j++) {
      var d = j + (config.options.txtCalFirstDay - 0);
      if(d > 6) d = d - 7;
      cell = createTiddlyElement(row, "td", null, null, config.macros.calendar.daynames[d]);

      if(d == (config.options.txtCalStartOfWeekend-0) || d == (config.options.txtCalStartOfWeekend-0+1))
        cell.style.background = config.macros.calendar.weekendbg;
    }
  }
}
//}}}

//{{{
function createCalendarDays(row, col, first, max, year, mon)
{
  var i;
  for(i = 0; i < col; i++) {
    createTiddlyElement(row, "td", null, null, null);
  }
  var day = first;
  for(i = col; i < 7; i++) {
    var d = i + (config.options.txtCalFirstDay - 0);
    if(d > 6) d = d - 7;
    var daycell = createTiddlyElement(row, "td", null, null, null);
    var isaWeekend = ((d == (config.options.txtCalStartOfWeekend-0) || d == (config.options.txtCalStartOfWeekend-0+1))? true:false);

    if(day > 0 && day <= max) {
      var celldate = new Date(year, mon, day);
      // ELS 2005.10.30: use <<date>> macro's showDate() function to create popup
      if (window.showDate) {
        showDate(daycell,celldate,"popup","DD","DD-MMM-YYYY",true, isaWeekend); 
      } else {
        if(isaWeekend) daycell.style.background = config.macros.calendar.weekendbg;
        var title = celldate.formatString(config.macros.calendar.tiddlerformat);
        if(calendarIsHoliday(celldate)) {
          daycell.style.background = config.macros.calendar.holidaybg;
        }
        if(window.findTiddlersWithReminders == null) {
          var link = createTiddlyLink(daycell, title, false);
          link.appendChild(document.createTextNode(day));
        } else {
          var button = createTiddlyButton(daycell, day, title, onClickCalendarDate);
        }
      }
    }
    day++;
  }
}
//}}}

// //We've clicked on a day in a calendar - create a suitable pop-up of options.
// //The pop-up should contain:
// // * a link to create a new entry for that date
// // * a link to create a new reminder for that date
// // * an <hr>
// // * the list of reminders for that date
//{{{
function onClickCalendarDate(e)
{
  var button = this;
  var date = button.getAttribute("title");
  var dat = new Date(date.substr(6,4), date.substr(3,2)-1, date.substr(0, 2));

  date = dat.formatString(config.macros.calendar.tiddlerformat);
  var popup = createTiddlerPopup(this);
  popup.appendChild(document.createTextNode(date));
  var newReminder = function() {
    var t = store.getTiddlers(date);
    displayTiddler(null, date, 2, null, null, false, false);
    if(t) {
      document.getElementById("editorBody" + date).value += "\n<<reminder day:" + dat.getDate() +
                                                                                         " month:" + (dat.getMonth()+1) +
                                                                                         " year:" + (dat.getYear()+1900) + " title: >>";
    } else {
      document.getElementById("editorBody" + date).value = "<<reminder day:" + dat.getDate() +
                                                                                       " month:" + (dat.getMonth()+1) +
                                                                                       " year:" + (dat.getYear()+1900) + " title: >>";
    }
  };
  var link = createTiddlyButton(popup, "New reminder", null, newReminder); 
  popup.appendChild(document.createElement("hr"));

  var t = findTiddlersWithReminders(dat, [0,14], null, 1);
  for(var i = 0; i < t.length; i++) {
    link = createTiddlyLink(popup, t[i].tiddler, false);
    link.appendChild(document.createTextNode(t[i].tiddler));
  }
}
//}}}

//{{{
function calendarMaxDays(year, mon)
{
 var max = config.macros.calendar.monthdays[mon];
 if(mon == 1 && (year % 4) == 0 && ((year % 100) != 0 || (year % 400) == 0)) {
 max++;
 }
 return max;
}
//}}}

//{{{
function createCalendarDayRows(cal, year, mon)
{
 var row = createTiddlyElement(cal, "tr", null, null, null);

 var first1 = (new Date(year, mon, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);
 if(first1 < 0) first1 = first1 + 7;
 var day1 = -first1 + 1;
 var first2 = (new Date(year, mon+1, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);
 if(first2 < 0) first2 = first2 + 7;
 var day2 = -first2 + 1;
 var first3 = (new Date(year, mon+2, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);
 if(first3 < 0) first3 = first3 + 7;
 var day3 = -first3 + 1;

 var max1 = calendarMaxDays(year, mon);
 var max2 = calendarMaxDays(year, mon+1);
 var max3 = calendarMaxDays(year, mon+2);

 while(day1 <= max1 || day2 <= max2 || day3 <= max3) {
 row = createTiddlyElement(cal, "tr", null, null, null);
 createCalendarDays(row, 0, day1, max1, year, mon); day1 += 7;
 createCalendarDays(row, 0, day2, max2, year, mon+1); day2 += 7;
 createCalendarDays(row, 0, day3, max3, year, mon+2); day3 += 7;
 }
}
//}}}

//{{{
function createCalendarDayRowsSingle(cal, year, mon)
{
 var row = createTiddlyElement(cal, "tr", null, null, null);

 var first1 = (new Date(year, mon, 1)).getDay() -1 - (config.options.txtCalFirstDay-0);
 if(first1 < 0) first1 = first1+ 7;
 var day1 = -first1 + 1;
 var max1 = calendarMaxDays(year, mon);

 while(day1 <= max1) {
 row = createTiddlyElement(cal, "tr", null, null, null);
 createCalendarDays(row, 0, day1, max1, year, mon); day1 += 7;
 }
}
//}}}

// //ELS 2005.10.30: added styles
//{{{
setStylesheet(".calendar, .calendar table, .calendar th, .calendar tr, .calendar td { font-size:10pt; text-align:center; } .calendar, .calendar a { margin:0px !important; padding:0px !important; }", "calendarStyles");
//}}}
<<calendar year>>
http://www.calypso.com 

MainEntry - TaskStation LegalEntityChooser
DataServer - AccessServer
EventServer

[[Calypso workflow]]
[[Calypso events|PSEvent]] PSEvent, PSEventDomainChange, PSEventTrade handled by PSConnection passing in a PSSubscriber implementation.
[[Calypso status]]

![[Calypso Engine]]s
|[[AccountingEngine]]|
|[[BalanceEngine]]|
|[[BillingEngine]]|
|[[CreSenderEngine]]|
|[[DiaryEngine]]|
|[[ImportMessageEngine]]|
|[[IncommingMessageEngine]]|
|[[InventoryEngine]]|
|[[LimitEngine]]|
|[[LiquidityEngine]]|
|[[MarginCallPositionEngine]]|
|[[MessageEngine]]|
|[[MutationEngine]]|
|[[PositionEngine]]|
|[[PositionMonitorEngine]]|
|[[SchedulingEngine]]|
|[[SenderEngine]]|
|[[TaskEngine]]|
|[[TransferEngien]]|

{{{com.calypso.engine.Engine}}} abstract base class for all Engines. implements PSSubscriber

An engine is any application that automatically responds to certain type of events from the EventServer.

1. Write engine, one abstract method to implement: {{{process(PSEvent event)}}}

2. Establish engine and its subscriptions via [[SQL]] in the database.


Events are dynamically generated based upon the [[Calypso workflow]] configuration. For each "[[Calypso status]]" in a [[Calypso workflow]], an event is generated when the trade / transfer / message reaches this [[Calypso status]].

E.g When a trade moves to status VERIFIED it generates the event VERIFIED_TRADE event.
!Calypso Status

''Calypso Status'' Is synonymous with a state within a state digram know as a [[Calypso workflow]]. A ''Calypso status'' changes as the workflow is followed from state to state, and [[Calypso events]] are generated with each transition.
Workflow is required to carryout any back office functionality.

The idea is for the work flow to carryout [[STP]] and for the user only to intervene in exceptional circumstances.

There are a number of engines running in the background, which react to events, e.g. a trade is saved, a quote is saved. a payment is settled. Based on the configuration of the workflow, new  events will be generated: a [[confirmation]], a payment, a [[posting]], a [[position]].

The workflow is managed by the Calypso DataServer. No engines need to run, however tasks with kick-off cut-off timers will need the [[TaskEngine]].

For my CV you can visit [[cv-library|http://www.cv-library.co.uk/cgi-bin/quickview.cgi?ref=931013]]
My obfuscated e-mail address is: chris (dot) ashley (at) in-collaboration.co.uk
see [[Chris Ashley]]
/***
|Name:|CloseOnCancelPlugin|
|Description:|Closes the tiddler if you click new tiddler then cancel. Default behaviour is to leave it open|
|Version:|3.0.1 ($Rev: 3861 $)|
|Date:|$Date: 2008-03-08 10:53:09 +1000 (Sat, 08 Mar 2008) $|
|Source:|http://mptw.tiddlyspot.com/#CloseOnCancelPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
***/
//{{{
merge(config.commands.cancelTiddler,{

	handler_mptw_orig_closeUnsaved: config.commands.cancelTiddler.handler,

	handler: function(event,src,title) {
		this.handler_mptw_orig_closeUnsaved(event,src,title);
		if (!store.tiddlerExists(title) && !store.isShadowTiddler(title))
			story.closeTiddler(title,true);
	 	return false;
	}

});

//}}}

Oracle bought Tangosol Coherence

http://www.tangosol.com/index.jsp

Coherence is a Data Grid, a distributed memory store, aims are reliability, availability, performance. With automatic discovery and self healing architecture that uses no fail over, no master slaves, no central registries, & no voting.

P2P architecture, No Voting, each cache node maintains a cluster state.
Custom UDP packaging of messages for broadcast information, TCP for PPP

Get: Local, if not local then get from remote cache node.
Put: Synchronous to Primary cache node and backup (mandated to be on a remote machine), asynchronous invalidates modified object stored in remote “Near” caches.

N levels of backup of each object, where each object is stored on a different machine.

Key is an object, from which a hash is used to determine which machine it will be found on, if the target machine is down, then has used again to the backup

Grid automatically reconfigures upon the loss of a cache nodes.

Mutation queues to modify objects in the grid.

Continuous object queries distributed, built up from java/c++ object (not SQL).
Aggregators are distributed to the objects that are being watched.

Core system written in Java
C++/Java no 3rd party libraries

Terms:

[[Data Grid]]
[[Near Cache]]
[[PIF]]/[[POF]]

Limitations:

1000 nodes joining simultaneously, C++ extensions are in development (implemented .NET)
Network, is the main bottle neck, but maximised by the custom network packet building and UDP.


!Questions

1. What self balancing is carried out to mitigate the different CPU, Disk, & Network performance of each data cache node with relation to the location and quantity of objects stored at each node?

2. What are the performance trade-offs associated with the benefits of increased data integrity gained from increasing the levels of backup?

3. What strategy is used for choosing the location of backup objects and can this be modified to take into account physical topology?

4. WAN? How dose Tangosol coherence approach the problem of high latency nodes?

!Answers by me

1. At the moment no consideration is given, although it is being looked into.

2. A put into the cache will not return until all the backups have been safely completed, hence the time taken will be dependant upon the slowest node. In the extreme case every node holds a copy, which is a Replicated Topology that has limited scalability but is ideal for caching of involitile data.

3. None at present.

4. Best not to include high latency nodes in the same cluster, instead synchronise data between two separate clusters.
Name: MptwBlue
Background: #fff
Foreground: #000
PrimaryPale: #cdf
PrimaryLight: #57c
PrimaryMid: #114
PrimaryDark: #012
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88

[[Computing Acronyms]]

|[[ACID]]|Atomicity Consistency Isolation Durability|<<tag database>>|
|ACL|Access Control List|<<tag security>>|
|[[AOP]]|Aspect Oriented Programming|<<tag java>>|
|[[AJAX]]|Asynchronous JavaScript and Xml|<<tag xml>> <<tag javascript>>|
|[[DCL]]|Data Control Language|<<tag sql>><<tag database>>|
|[[DML]]|Data Manipulation Language|<<tag sql>><<tag database>>|
|[[DDL]]|Data Definition Language|<<tag sql>><<tag database>>|
|[[DDT]]|Direct Data Transfer|<<tag datasynapse>>|
|DNS|Domain Name System|<<tag networking>>|
|DS|DataSynapse|<<tag datasynapse>><<tag grid>>|
|[[EDT]]|Event Dispatch Thread|<<tag java>>|
|ESB|Enterprise Service Bus|enterprise|
|[[EJB]]|Enterprise Java Bean|<<tag ejb>> <<tag java>>|
|[[HKLM]]|HKEY_LOCAL_MACHINE|<<tag pcregistry>>|
|IoC|Inversion of Control|<<tag pattern>>|
|[[IPC]]|Interprocess Communication||
|[[IMDG]]|In-Memory Data Grid|<<tag datagrid>>|
|MIME|Multipurpose Internet Message Extensions e,g, {{{Content-type: application/octet-stream}}}| |
|[[JAD]]|Java Decompiler|<<tag java>>|
|[[JCP]]|Java Community Process|<<tag java>>|
|jBPM|java Business Process Management|<<tag java>>|
|[[JERI]]|Jini Extensible Remote Invocation|<<tag java>>|
|[[JMS]]|Java Message Service|<<tag ejb>> <<tag java>>|
|JMX|Java Management Extension|<<tag java>>|
|[[JNDI]]|Java Naming and Directory Interface [[javax.naming]]|<<tag java>>|
|JRMP|Java Remote Method Protocol|<<tag java>>|
|JSR|Java Specification Request|<<tag java..|
|[[LPCSTR]]|Long Pointer to Const String|<<tag c++>>|
|mBean|Managed Bean|<<tag java>>|
|[[MDB]]|Message Driven Bean, triggered by [[JMS]]|<<tag ejb>><<tag java>>|
|[[MVC]]|Model View Controller|<<tag pattern>>|
|MSI|Microsoft Installer||
|NIC|Network Information Centre|<<tag networking>>|
|NIS|Network Information Service|<<tag networking>>|
|NAT|Network Address Translation|<<tag networking>>|
|[[OPML]]|Outline Processor Markup Language|<<tag xml>>|
|PIF/POF|Portable Invocation Format/Portable Object Format|<<tag datagrid>><<tag coherence>>|
|[[POJO]]|Plain Old Java Object|<<tag java>>|
|[[RMI]]|Remote Method Invocation|<<tag java>>|
|RPM|Red Hat Package Manager|<<tag linux>>|
|RTE|Real Time Enterprise||
|SaaS|Software as a Service|
|SBA|Space Based Architecture|<<tag grid>><<tag datagrid>><<tag gigaspace>>|
|[[SID]]|System Identifier|<<tag oracle>> <<tag database>>|
|TLD|Top Level Domain|networking|
|[[TLS]]|Thread Local Storage|<<tag c++>>|
|TNS|Transparent Network Substrate|<<tag oracle>> <<tag database>>|
|TSM|Tivoli Storage Manager||
|[[UDP]]|User Datagram|<<tag networking>>|
|VPN|Virtual Private Network|<<tag networking>>|
|WLS|WebLogic Server|<<tag java>><<tag webserver>>|
|XTP|Xpress Transfer Protocol|<<tag networking>>|
|Constructor Injection|<<tag designPattern>>|Injection of runtime values via constructor arguments|
|Dependency Injection|<<tag designPattern>>|A flavour of IoC remove explicit dependence on container API's by using Setter & Constructor Injection through reflection instead of interfaces|
|[[CNAME]]|<<tag network>>|Translates domain name to IP Address|
|Enterprise Service Bus [[ESB]]|Enterprise|unifies message oriented, event driven and service oriented approaches for integrating applications and service. |
|Flattening|<<tag file>>|Serialising an object to a file|
|globbing|<<tag unix>>|Comes from glob() function to expand filenames, simple pattern matching behavior|
|Hollywood Principle|<<tag designPattern>>|Don't call me, I'll call you|
|[[Inner Join]]|<<tag database>>|Result is the intersection of two tables|
|Inflating|<<tag file>>|Creating an object from data held in a file|
|Inversion of Control|<<tag design Pattern>>|IoC frame work calls your code, as in the Hollywood Principle|
|[[Outer Join]]|<<tag database>>|Returns all of the right or left table with data fields valid from the other table where the two intersect|
|[[UML]] Operation|<<tag UML>>|is synonymous to a method in Java|
|Tivoli Storage Manager [[ITSM]]| |is a centralized policy-based data backup and recovery software|
|[[SAN]] Tier1|<<tag disc>>|Highest availability disk storage, 7x24 Databases|
|[[SAN]] Tier2|<<tag disc>>|High availability based on standard RAID protection of disc, non-critical databases|
|Scale up| <<tag hpc>>|Increase the capacity of a singe machine, eg. add a second CPU|
|Scale out|<<tag hpc>>|Increase the capacity of a system by adding more machines|
|Setter Injection|<<tag designPattern>>|Injection of runtime values via JavaBean setters|
|Split Brain|<<tag datagrid>>|When a cluster splits apart due to a network break. On rejoin the biggest cluster wins, changes in the smaller cluster are lost.|
simon.baird/%%/@gmail.com
CoreFirstWhatWhyHow <<tag otti>> <<tag term otti>> <<tag te>>

!OpTier ~CoreFirst components
* [[OTTI]] sdk for development
* [[CoreFirst Server]] uses [[Oracle DB|CoreFirstOracle]]
* [[CoreFirst Agent]]
* [[CoreFirst Tier Extension]]

!~OpTier ~CoreFirst Concepts

*[[Tier]]
*[[Transaction Context]]
*[[UOW]]

--
[[JAD]] a very useful tool for looking inside 3rd party class files (Java decompiler).
[[Javassist]] a very useful technology to dynamically modify java byte code.
An agent sits between a Tier Extension [[TE]] and the [[CoreFirst Server]], and is responsible for classifying transactions and forwarding start,stop, and out of tier calls onto the server.
http access to the [[CoreFirst Server]] is usually {{{http://localhost:8081/corefirst}}} where ''localhost'' is replaced with your server's machine name.
Collects and analyzes chunks of data sent by [[Agents|CoreFirst Agent]] containing transaction data, onward calls and [[UOW]] timings. Data is limited to being stored in [[Oracle Databases|Oracle]].

Data can subsequently viewed vi the [[Console|CoreFirst Console]] connect with http://hostname:8081/corefirst 
|[[Association Key]]|Unique key for a UOW|
|Compound Transaction|A chain of //Transactions//|
|[[CoreFirst Agent]]|Run side by side to a Tier Extension, classifies ''transactions'' and forwards instrumentation data to the [[CoreFirst Server]]|
|Service Class|Defines the priority of a //Transaction//|
|Tier|A monitored software edifice, usually one process, but can also be a layer in a software stack|
|[[CoreFirst Tier Extension]]|Monitors & controls performance on a //tier// and sends captured data to //Context Agents//|
|CoreFirst Tier Handle|The tier handle returned by ottiTierStart and obtained when a tier starts|
|[[Invocation Key]]|Uniquely identifies a call to a UOW|
|[[Request Id]]|Unique key across tiers for a transaction|
|Transaction|Identifiable business process e.g. Account Balance Update|
|Transaction Class|Set of related normalised //Transactions// grouped together|
|Transaction Class Group|A set of related //Transaction Classes//|
|Transaction Context|Data associated with a //Transaction// that identifies it|
|[[Tier Extension]]|Code that adds instrumentation to a tier|
|Unit of Work|A [[UOW]] is the most granular object monitored by CoreFirst|
|User Transaction|1st transaction that starts a //Compound Transaction//|
see the acronym [[TE]]
!What:

End to End business transaction monitoring.
Visualization of enterprise architecture.
Ability to follow the flow of transactions.

Application monitoring software.
Classification of business transaction.
Prioritization of transactions across tiers. 

!Why:

Dependability - Critical business can be prioritized over the prosaic. 

Performance - Pinch points can be identified and improvements empirically proven with comparisons of historic data.

Utilization - By prioritizing transactions the peaks of demand can be smoothed making creating enhanced performance and maximum utilization of infrastructure.

Reliability - Notification of broken [[SLA]]s together with the enhanced ability to pin point the problems aids fast resolution.

Capacity Planning - Can see trends in historical transaction data and the infrastructure loadings, and use this to plan future needs.

!How:

Instrumentation is placed into tiers and within stacks, where it collects records and forwards measurements to a central server. On which, data is aggregated, collated and made available for both historical and real-time analysis.

Architecture:

|Tier|
|Client|
|[[Agent|CoreFirst Agent]]|

|[[CoreFirst Server]]|Oracle Database|


|Web browser to view[[CoreFirst Console]]|
Investment Banks

[[Primary Market]]
* [[New Issue]] - [[Equity]] & [[Bond]]
* [[Rights Issue]]
* [[M&A]]
* Research

|Company Name|Underwriter|Price Range|[[IPO]] Price|Current Price	|Return|
|Starent Networks	|Goldman Sachs	|$9.00-$11.00	|$12.00	|$14.01	|16.80%|
|Response Genetics	|Maxim Group LLC	|$7.00-$8.00	|$7.00	|$7.00	|0.00%|
					
/***
|''Name:''|CryptoFunctionsPlugin|
|''Description:''|Support for cryptographic functions|
***/
//{{{
if(!version.extensions.CryptoFunctionsPlugin) {
version.extensions.CryptoFunctionsPlugin = {installed:true};

//--
//-- Crypto functions and associated conversion routines
//--

// Crypto "namespace"
function Crypto() {}

// Convert a string to an array of big-endian 32-bit words
Crypto.strToBe32s = function(str)
{
	var be = Array();
	var len = Math.floor(str.length/4);
	var i, j;
	for(i=0, j=0; i<len; i++, j+=4) {
		be[i] = ((str.charCodeAt(j)&0xff) << 24)|((str.charCodeAt(j+1)&0xff) << 16)|((str.charCodeAt(j+2)&0xff) << 8)|(str.charCodeAt(j+3)&0xff);
	}
	while (j<str.length) {
		be[j>>2] |= (str.charCodeAt(j)&0xff)<<(24-(j*8)%32);
		j++;
	}
	return be;
};

// Convert an array of big-endian 32-bit words to a string
Crypto.be32sToStr = function(be)
{
	var str = "";
	for(var i=0;i<be.length*32;i+=8)
		str += String.fromCharCode((be[i>>5]>>>(24-i%32)) & 0xff);
	return str;
};

// Convert an array of big-endian 32-bit words to a hex string
Crypto.be32sToHex = function(be)
{
	var hex = "0123456789ABCDEF";
	var str = "";
	for(var i=0;i<be.length*4;i++)
		str += hex.charAt((be[i>>2]>>((3-i%4)*8+4))&0xF) + hex.charAt((be[i>>2]>>((3-i%4)*8))&0xF);
	return str;
};

// Return, in hex, the SHA-1 hash of a string
Crypto.hexSha1Str = function(str)
{
	return Crypto.be32sToHex(Crypto.sha1Str(str));
};

// Return the SHA-1 hash of a string
Crypto.sha1Str = function(str)
{
	return Crypto.sha1(Crypto.strToBe32s(str),str.length);
};

// Calculate the SHA-1 hash of an array of blen bytes of big-endian 32-bit words
Crypto.sha1 = function(x,blen)
{
	// Add 32-bit integers, wrapping at 32 bits
	add32 = function(a,b)
	{
		var lsw = (a&0xFFFF)+(b&0xFFFF);
		var msw = (a>>16)+(b>>16)+(lsw>>16);
		return (msw<<16)|(lsw&0xFFFF);
	};
	// Add five 32-bit integers, wrapping at 32 bits
	add32x5 = function(a,b,c,d,e)
	{
		var lsw = (a&0xFFFF)+(b&0xFFFF)+(c&0xFFFF)+(d&0xFFFF)+(e&0xFFFF);
		var msw = (a>>16)+(b>>16)+(c>>16)+(d>>16)+(e>>16)+(lsw>>16);
		return (msw<<16)|(lsw&0xFFFF);
	};
	// Bitwise rotate left a 32-bit integer by 1 bit
	rol32 = function(n)
	{
		return (n>>>31)|(n<<1);
	};

	var len = blen*8;
	// Append padding so length in bits is 448 mod 512
	x[len>>5] |= 0x80 << (24-len%32);
	// Append length
	x[((len+64>>9)<<4)+15] = len;
	var w = Array(80);

	var k1 = 0x5A827999;
	var k2 = 0x6ED9EBA1;
	var k3 = 0x8F1BBCDC;
	var k4 = 0xCA62C1D6;

	var h0 = 0x67452301;
	var h1 = 0xEFCDAB89;
	var h2 = 0x98BADCFE;
	var h3 = 0x10325476;
	var h4 = 0xC3D2E1F0;

	for(var i=0;i<x.length;i+=16) {
		var j,t;
		var a = h0;
		var b = h1;
		var c = h2;
		var d = h3;
		var e = h4;
		for(j = 0;j<16;j++) {
			w[j] = x[i+j];
			t = add32x5(e,(a>>>27)|(a<<5),d^(b&(c^d)),w[j],k1);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}
		for(j=16;j<20;j++) {
			w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
			t = add32x5(e,(a>>>27)|(a<<5),d^(b&(c^d)),w[j],k1);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}
		for(j=20;j<40;j++) {
			w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
			t = add32x5(e,(a>>>27)|(a<<5),b^c^d,w[j],k2);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}
		for(j=40;j<60;j++) {
			w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
			t = add32x5(e,(a>>>27)|(a<<5),(b&c)|(d&(b|c)),w[j],k3);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}
		for(j=60;j<80;j++) {
			w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
			t = add32x5(e,(a>>>27)|(a<<5),b^c^d,w[j],k4);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}

		h0 = add32(h0,a);
		h1 = add32(h1,b);
		h2 = add32(h2,c);
		h3 = add32(h3,d);
		h4 = add32(h4,e);
	}
	return Array(h0,h1,h2,h3,h4);
};


}
//}}}
!Data Control Language
*COMMIT
*SAVEPOINT
*ROLLBACK
*SET TRANSACTION
!Data Definition Language
*CREATE
*ALTER
*DROP
*TRUNCATE
*COMMENT
*GRANT
*REVOKE
!Direct Data Transfer

When on Clients communicate directly with Engines to pass parameters and collect results, instead of being funnelled through a [[Broker]].

DDT is more efficient, involving few network hops, but may not work because of [[FireWall]]s.
!Data Manipulation Language
*SELECT
*INSERT
*DELETE
*CALL
*EXPLAIN PLAN
*LOCK TABLE
*UPDATE
for bat files, make environment changes to a local copy only
|setlocal|endlocal|
!DataSynapse Tier Extension

Instruments a DataSynapse Manager running as a Director, Broker, or Director/Broker.
!DataSynapse's Data References

Instead of passing large data blocks around a network, DS has DataReference's which work very much like pointers used in C++ to pass data from function to function, but in this case the references are passed from machine to machine via serialisation.

The use of DataReference's saves network band-width by reducing the amount of unproductive data transfer. For example, a DataReference can be passed back to a client as a result from an [[Engine]], the client could then pass on the reference to another process/Engine for consumption without ever having to have received a much large result package.

C++ can benefit from using references as [[BLOB]]s in the for of {{{byte[]}}} although it cannot automatically pass Objects like Java, due to its inherent lack of serialization.
!~DataSynapse (DS)

* [[Manager]] also known as GridServer
** [[Director]]
** [[Broker]]
* EngineDaemon
* [[Engine]]
----
Driver,Service,Service Type,Service Session,Job,Task,DataReference
----
![[DataSynapse Install]]
!Client Log File
* DSLogDir=c:/temp/data/datasynapse/log

![[DataSynapse Tasks]]
![[DataSynapse Problems]]
![[DataSynapse SDK]]
----
Using a service:
#Write Service
#Deploy Service with GridServer resource deployment or manually.
#Register the Service Type on the GridServer Admin tool
#Create a Service session from a client
#Client makes requests to service

Route the services to the correct broker by assigning {{{DSPrimaryDirector}}} and {{{DSSecondaryDirector}}} in [[driver.properties]] and the user/password to log in with.
Select * from brokers

-- Number of jobs ran in one day
{{{
select count(*)
from jobs where 
broker_id =1
and
start_time > to_timestamp('2007-04-26 09:00','YYYY-MM-DD HH24:MI')
and
start_time < to_timestamp('2007-04-27 09:00','YYYY-MM-DD HH24:MI')
}}}
-- number of tasks ran in one day
{{{
select count(*)
from tasks
where
start_time > to_timestamp('2007-04-26 09:00','YYYY-MM-DD HH24:MI')
and
start_time < to_timestamp('2007-04-27 09:00','YYYY-MM-DD HH24:MI')
}}}
!! ClientCppDriverVersion does not match expected
broker/log/stdout.log
Turning away client: ClientCppDriverVersion=4.2.0.35 does not match expected: 4.2.0.31

log into Broker & set Manager->Manager Configuration->Admin->"Allow Driver Version Mismatch" = TRUE

!!Engine's Director address dose not match IP address
Engine's Director shown as http://XYZDirector:8000 instead http://ABCDirector:8000 even though the engine has been freshly installed.

Director is configured with the wrong host name. Solution is to reconfigure the director/broker.
Admin->Manager Configuration (next,next)
 HostName:

!LoadLibrary failure: DataSynpaseLoader: The operation completed successfully.

01/08/07 13:36:23.683 Warning: [JobSpacePlugin] [3280] DS Smoke Test-2541011437679901533-0, Task failed due to : java.lang.UnsatisfiedLinkError: LoadLibrary failure: DataSynpaseLoader: The operation completed successfully.

Using Linux DS GridServer 4_2-Update-7

DataSynapseLoader.dll dependant upon DSUTILV71.DLL, as found in cppbridge-win32-vc-71-4.2

No SOLUTION YET

!Unrecognized Windows Sockets error: 10106:
Running calculator test in eclipse, solution: In "run configuration" \"Environment" turn on "Append environment to native environment". The reason, being there is no PC env configured to carry out socket comms.

!java.lang.IllegalStateException: No internal database is available at this time
check that the $DS_BASEDIR is not pointing somewhere unexpected!

![Loginplugin] Can't Login to PrivateBrokerConnection:Login is not allowed at this time
by manuelyt
No SOLUTION YET
lib: DSDriver.jar


jobtutorials/ex1_hello

key classes:

[[com.livecluster.tasklet.Job]]
+++![Add NetProviderService]
Services->Service Type Registary:"netProviderService" dynamicLibrary [ADD]
** libraryName = DataSynapseLoader
** initMethod = init
** destroyMethod = destroy
** gridLibery = netprovider-win32
===
+++![Disable an Engine (Daemon)]
[Director] Engine->Engine Daemon Admin
Action->Disable a daemon
===
+++![Rename Broker]
[Director] Manager->BrokerAdmin
Show the column "Broker Name", click to edit.
===
+++![Set the Home Broker for an Engine]
[Director] Engine->Engine configuration
Select config to edit. scroll down *Director & Brokers*
|Home Broker||
===
+++![Set Primary Director for an Engine]
[Director] Engine->Engine Daemon Admin
|Primary Director|http://ldnpsr8000:8000|
or Manually:
1. Edit datasyanpse\engine\intranet.dat with new director
2. delete dirs; data, work, & profiles
!Start Engine from command line (debugging)
cd DataSyanpse/Engine; Engine.exe -console
===
+++![Number of Jobs/Task run per day]
[[DataSynapse Direct Query-count Jobs/Tasks]]
===
|affinity|is taking into account the type of engine or location of data when scheduling of a task|
|[[Broker]]|Manages Engines, and the distribution of jobs from a client|
|Broker discrimination|limiting engines or drivers to certain brokers|
|Compute Node| |
|DataReference|The passing of pointers to data from machine to machine, and only dereferencing when needed.|
|Direct Data Transfer [[DDT]]|Transfer of data to on from client to engine without going via a broker or manager|
|discriminators|the selection of a resource by favoring one attribute over another|
|[[Director]]|Manages the Brokers, and decides which of them will be used by which client, can be a primary or secondary|
|[[Engine]]| |
|Engine daemon|keeps engine instances alive, engine daemon shadow keeps the engine daemon alive|
|Engine black listing|Engines that have been removed from the available engine pool because of failed tasks|
|Engine weighted-based balancer|The distribution of engines to brokers based on broker weightings.|
|failover broker|A broker that becomes active only if NO other brokers are available|
|home Broker|the Broker to which an engine belongs and returns to when borrowed, a 2 tier sharing policy|
|[[Manager]]|Maybe configured as a Director, Broker, or Director/Broker|
|[[round robin]]|allocation in a circular one at a time order|
|resource partitioning|A broker configured to accept connections from certain Engines or Drivers|
|resource sharing|the borrowing of under utalised engines from another broker|
|secondary|A Director or Broker that is only active if the primary has failed|
|service| |
|state affinity|the scheduling of tasks based on an engines state to avoid re-calculations or data re-load|
|primary|A Director or Broker in this normally active. Antonym: secondary |
/***
''Date Plugin for TiddlyWiki version 2.x''
^^author: Eric Shulman - ELS Design Studios
source: http://www.TiddlyTools.com/#DatePlugin
license: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^
^^last update: <<date tiddler "DDD, MMM DDth, YYYY hh:0mm:0ss">>^^

There are quite a few calendar generators, reminders, to-do lists, 'dated tiddlers' journals, blog-makers and GTD-like schedule managers that have been built around TW.  While they all have different purposes, and vary in format, interaction, and style, in one way or another each of these plugins displays and/or uses date-based information to make finding, accessing and managing relevant tiddlers easier.  This plugin provides a general approach to embedding dates and date-based links/menus within tiddler content.

You can ''specify a date using a combination of year, month, and day number values or mathematical expressions (such as "Y+1" or "D+30")'', and then just display it as formatted date text, or create a ''link to a 'dated tiddler''' for quick blogging, or create a ''popup menu'' containing the dated tiddler link plus links to ''tiddlers that were changed'' as well as any ''scheduled reminders'' for that date.
!!!!!Usage
<<<
When installed, this plugin defines a macro: {{{<<date [mode] [date] [format] [linkformat]>>}}}.  All of the macro parameters are optional and, in it's simplest form, {{{<<date>>}}}, it is equivalent to the ~TiddlyWiki core macro, {{{<<today>>}}}.

However, where {{{<<today>>}}} simply inserts the current date/time in a predefined format (or custom format, using {{{<<today [format]>>}}}), the {{{<<date>>}}} macro's parameters take it much further than that:
* [mode] is either ''display'', ''link'' or ''popup''.  If omitted, it defaults to ''display''.  This param let's you select between simply displaying a formatted date, or creating a link to a specific 'date titled' tiddler or a popup menu containing a dated tiddler link, plus links to changes and reminders.
* [date] lets you enter ANY date (not just today) as ''year, month, and day values or simple mathematical expressions'' using pre-defined variables, Y, M, and D for the current year, month and day, repectively.  You can display the modification date of the current tiddler by using the keyword: ''tiddler'' in place of the year, month and day parameters.  Use ''tiddler://name-of-tiddler//'' to display the modification date of a specific tiddler.  You can also use keywords ''today'' or ''filedate'' to refer to these //dynamically changing// date/time values.  
* [format] and [linkformat] uses standard ~TiddlyWiki date formatting syntax.  The default is "YYYY.0MM.0DD"
>^^''DDD'' - day of week in full (eg, "Monday"), ''DD'' - day of month, ''0DD'' - adds leading zero^^
>^^''MMM'' - month in full (eg, "July"), ''MM'' - month number, ''0MM'' - adds leading zero^^
>^^''YYYY'' - full year, ''YY'' - two digit year, ''hh'' - hours, ''mm'' - minutes, ''ss'' - seconds^^
>^^//note: use of hh, mm or ss format codes is only supported with ''tiddler'', ''today'' or ''filedate'' values//^^
* [linkformat] - specify an alternative date format so that the title of a 'dated tiddler' link can have a format that differs from the date's displayed format

In addition to the macro syntax, DatePlugin also provides a public javascript API so that other plugins that work with dates (such as calendar generators, etc.) can quickly incorporate date formatted links or popups into their output:

''{{{showDate(place, date, mode, format, linkformat, autostyle, weekend)}}}'' 

Note that in addition to the parameters provided by the macro interface, the javascript API also supports two optional true/false parameters:
* [autostyle] - when true, the font/background styles of formatted dates are automatically adjusted to show the date's status:  'today' is boxed, 'changes' are bold, 'reminders' are underlined, while weekends and holidays (as well as changes and reminders) can each have a different background color to make them more visibly distinct from each other.
* [weekend] - true indicates a weekend, false indicates a weekday.  When this parameter is omitted, the plugin uses internal defaults to automatically determine when a given date falls on a weekend.
<<<
!!!!!Examples
<<<
The current date: <<date>>
The current time: <<date today "0hh:0mm:0ss">>
Today's blog: <<date link today "DDD, MMM DDth, YYYY">>
Recent blogs/changes/reminders: <<date popup Y M D-1 "yesterday">> <<date popup today "today">> <<date popup Y M D+1 "tomorrow">>
The first day of next month will be a <<date Y M+1 1 "DDD">>
This tiddler (DatePlugin) was last updated on: <<date tiddler "DDD, MMM DDth, YYYY">>
The SiteUrl was last updated on: <<date tiddler:SiteUrl "DDD, MMM DDth, YYYY">>
This document was last saved on <<date filedate "DDD, MMM DDth, YYYY at 0hh:0mm:0ss">>
<<date 2006 07 24 "MMM DDth, YYYY">> will be a <<date 2006 07 24 "DDD">>
<<<
!!!!!Installation
<<<
import (or copy/paste) the following tiddlers into your document:
''DatePlugin'' (tagged with <<tag systemConfig>>)
<<<
!!!!!Revision History
<<<
''2006.02.14 [2.0.5]''
when readOnly is set (by TW core), omit "new reminders..." popup menu item and, if a "dated tiddler" does not already exist, display the date as simple text instead of a link.
''2006.02.05 [2.0.4]''
added var to variables that were unintentionally global.  Avoids FireFox 1.5.0.1 crash bug when referencing global variables
''2006.01.18 [2.0.3]''
In 1.2.x the tiddler editor's text area control was given an element ID=("tiddlerBody"+title), so that it was easy to locate this field and programmatically modify its content.  With the addition of configuration templates in 2.x, the textarea no longer has an ID assigned.  To find this control we now look through all the child nodes of the tiddler editor to locate a "textarea" control where attribute("edit") equals "text", and then append the new reminder to the contents of that control.
''2006.01.11 [2.0.2]''
correct 'weekend' override detection logic in showDate()
''2006.01.10 [2.0.1]''
allow custom-defined weekend days (default defined in config.macros.date.weekend[] array)
added flag param to showDate() API to override internal weekend[] array
''2005.12.27 [2.0.0]''
Update for TW2.0
Added parameter handling for 'linkformat'
''2005.12.21 [1.2.2]''
FF's date.getYear() function returns 105 (for the current year, 2005).  When calculating a date value from Y M and D expressions, the plugin adds 1900 to the returned year value get the current year number.  But IE's date.getYear() already returns 2005.  As a result, plugin calculated date values on IE were incorrect (e.g., 3905 instead of 2005).  Adding +1900 is now conditional so the values will be correct on both browsers.
''2005.11.07 [1.2.1]''
added support for "tiddler" dynamic date parameter
''2005.11.06 [1.2.0]''
added support for "tiddler:title" dynamic date parameter
''2005.11.03 [1.1.2]''
when a reminder doesn't have a specified title parameter, use the title of the tiddler that contains the reminder as "fallback" text in the popup menu.  Based on a suggestion from BenjaminKudria.
''2005.11.03 [1.1.1]''
Temporarily bypass hasReminders() logic to avoid excessive overhead from generating the indexReminders() cache.  While reminders can still appear in the popup menu, they just won't be indicated by auto-styling the date number that is displayed.  This single change saves approx. 60% overhead (5 second delay reduced to under 2 seconds).
''2005.11.01 [1.1.0]''
corrected logic in hasModifieds() and hasReminders() so caching of indexed modifieds and reminders is done just once, as intended.  This should hopefully speed up calendar generators and other plugins that render multiple dates...
''2005.10.31 [1.0.1]''
documentation and code cleanup
''2005.10.31 [1.0.0]''
initial public release
''2005.10.30 [0.9.0]''
pre-release
<<<
!!!!!Credits
<<<
This feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]].
<<<
!!!!!Code
***/
//{{{
version.extensions.date = {major: 2, minor: 0, revision: 5, date: new Date(2006,2,14)};
//}}}

//{{{
// 1.2.x compatibility
if (!window.story) window.story=window;
if (!store.getTiddler) store.getTiddler=function(title){return store.tiddlers[title]}
if (!store.addTiddler) store.addTiddler=function(tiddler){store.tiddlers[tiddler.title]=tiddler}
if (!store.deleteTiddler) store.deleteTiddler=function(title){delete store.tiddlers[title]}
//}}}

//{{{
config.macros.date = {
	format: "YYYY.0MM.0DD", // default date display format
	linkformat: "YYYY.0MM.0DD", // 'dated tiddler' link format
	weekendbg: "#c0c0c0", // "cocoa"
	holidaybg: "#c0ffee", // "coffee"
	modifiedsbg: "#bbeeff", // "beef"
	remindersbg: "#ffaace", // "face"
	holidays: [ "01/01", "07/04", "07/24", "11/24" ], // NewYearsDay, IndependenceDay(US), Eric's Birthday (hooray!), Thanksgiving(US)
	weekend: [ 1,0,0,0,0,0,1 ] // [ day index values: sun=0, mon=1, tue=2, wed=3, thu=4, fri=5, sat=6 ]
};
//}}}

//{{{
config.macros.date.handler = function(place,macroName,params)
{
	// do we want to see a link, a popup, or just a formatted date?
	var mode="display";
	if (params[0]=="display") { mode=params[0]; params.shift(); }
	if (params[0]=="popup") { mode=params[0]; params.shift(); }
	if (params[0]=="link") { mode=params[0]; params.shift(); }
	// get the date
	var now = new Date();
	var date = now;
	if (!params[0] || params[0]=="today")
		{ params.shift(); }
	else if (params[0]=="filedate")
		{ date=new Date(document.lastModified); params.shift(); }
	else if (params[0]=="tiddler")
		{ date=store.getTiddler(story.findContainingTiddler(place).id.substr(7)).modified; params.shift(); }
	else if (params[0].substr(0,8)=="tiddler:")
		{ var t; if ((t=store.getTiddler(params[0].substr(8)))) date=t.modified; params.shift(); }
	else {
		var y = eval(params.shift().replace(/Y/ig,(now.getYear()<1900)?now.getYear()+1900:now.getYear()));
		var m = eval(params.shift().replace(/M/ig,now.getMonth()+1));
		var d = eval(params.shift().replace(/D/ig,now.getDate()+0));
		date = new Date(y,m-1,d);
	}
	// date format with optional custom override
	var format=this.format; if (params[0]) format=params.shift();
	var linkformat=this.linkformat; if (params[0]) linkformat=params.shift();
	showDate(place,date,mode,format,linkformat);
}
//}}}

//{{{
window.showDate=showDate;
function showDate(place,date,mode,format,linkformat,autostyle,weekend)
{
	if (!mode) mode="display";
	if (!format) format=config.macros.date.format;
	if (!linkformat) linkformat=config.macros.date.linkformat;
	if (!autostyle) autostyle=false;

	// format the date output
	var title = date.formatString(format);
	var linkto = date.formatString(linkformat);

	// just show the formatted output
	if (mode=="display") { place.appendChild(document.createTextNode(title)); return; }

	// link to a 'dated tiddler'
	var link = createTiddlyLink(place, linkto, false);
	link.appendChild(document.createTextNode(title));
	link.title = linkto;
	link.date = date;
	link.format = format;
	link.linkformat = linkformat;

	// if using a popup menu, replace click handler for dated tiddler link
	// with handler for popup and make link text non-italic (i.e., an 'existing link' look)
	if (mode=="popup") {
		link.onclick = onClickDatePopup;
		link.style.fontStyle="normal";
	}

	// format the popup link to show what kind of info it contains (for use with calendar generators)
	if (!autostyle) return;
	if (hasModifieds(date))
		{ link.style.fontStyle="normal"; link.style.fontWeight="bold"; }
	if (hasReminders(date))
		{ link.style.textDecoration="underline"; }
	if(isToday(date))
		{ link.style.border="1px solid black"; }

	if( (weekend!=undefined?weekend:isWeekend(date)) && (config.macros.date.weekendbg!="") )
		{ place.style.background = config.macros.date.weekendbg; }
	if(isHoliday(date)&&(config.macros.date.holidaybg!=""))
		{ place.style.background = config.macros.date.holidaybg; }
	if (hasModifieds(date)&&(config.macros.date.modifiedsbg!=""))
		{ place.style.background = config.macros.date.modifiedsbg; }
	if (hasReminders(date)&&(config.macros.date.remindersbg!=""))
		{ place.style.background = config.macros.date.remindersbg; }
}
//}}}

//{{{
function isToday(date) // returns true if date is today
	{ var now=new Date(); return ((now-date>=0) && (now-date<86400000)); }

function isWeekend(date) // returns true if date is a weekend
	{ return (config.macros.date.weekend[date.getDay()]); }

function isHoliday(date) // returns true if date is a holiday
{
	var longHoliday = date.formatString("0MM/0DD/YYYY");
	var shortHoliday = date.formatString("0MM/0DD");
	for(var i = 0; i < config.macros.date.holidays.length; i++) {
		var holiday=config.macros.date.holidays[i];
		if (holiday==longHoliday||holiday==shortHoliday) return true;
	}
	return false;
}
//}}}

//{{{
// Event handler for clicking on a day popup
function onClickDatePopup(e)
{
	if (!e) var e = window.event;
	var theTarget = resolveTarget(e);
	var popup = createTiddlerPopup(this);
	if(popup) {
		// always show dated tiddler link (or just date, if readOnly) at the top...
		if (!readOnly || store.tiddlerExists(this.date.formatString(this.linkformat)))
			createTiddlyLink(popup,this.date.formatString(this.linkformat),true);
		else
			createTiddlyText(popup,this.date.formatString(this.linkformat));
		addModifiedsToPopup(popup,this.date,this.format);
		addRemindersToPopup(popup,this.date,this.linkformat);
	}
	scrollToTiddlerPopup(popup,false);
	e.cancelBubble = true;
	if (e.stopPropagation) e.stopPropagation();
	return(false);
}
//}}}

//{{{
function indexModifieds() // build list of tiddlers, hash indexed by modification date
{
	var modifieds= { };
	var tiddlers = store.getTiddlers("title");
	for (var t = 0; t < tiddlers.length; t++) {
		var date = tiddlers[t].modified.formatString("YYYY0MM0DD")
		if (!modifieds[date])
			modifieds[date]=new Array();
		modifieds[date].push(tiddlers[t].title);
	}
	return modifieds;
}
function hasModifieds(date) // returns true if date has modified tiddlers
{
	if (!config.macros.date.modifieds) config.macros.date.modifieds = indexModifieds();
	return (config.macros.date.modifieds[date.formatString("YYYY0MM0DD")]!=undefined);
}

function addModifiedsToPopup(popup,when,format)
{
	if (!config.macros.date.modifieds) config.macros.date.modifieds = indexModifieds();
	var indent=String.fromCharCode(160)+String.fromCharCode(160);
	var mods = config.macros.date.modifieds[when.formatString("YYYY0MM0DD")];
	if (mods) {
		mods.sort();
		var e=createTiddlyElement(popup,"div",null,null,"changes:");
		for(var t=0; t<mods.length; t++) {
			var link=createTiddlyLink(popup,mods[t],false);
			link.appendChild(document.createTextNode(indent+mods[t]));
			createTiddlyElement(popup,"br",null,null,null);
		}
	}
}
//}}}

//{{{
function indexReminders() // build list of tiddlers with reminders, hash indexed by reminder date
{
	var reminders = { };

	if(window.findTiddlersWithReminders==undefined) return; // reminder plugin not installed

	var matches = store.search("reminder",false,false,"title","excludeSearch");
	var macroPattern = "<<([^>\\s]+)(?:\\s*)([^>]*)>>";
	var macroRegExp = new RegExp(macroPattern,"mg");
	var arr = [];
	for(var t=matches.length-1; t>=0; t--)
	{
		var targetText = matches[t].text;
		do {
			// Get the next formatting match
			var formatMatch = macroRegExp.exec(targetText);
			if(formatMatch)
			{
				if (formatMatch[1] != null && formatMatch[1].toLowerCase() == "reminder")
				{
                                       //Find the matching date.
                                       var params = formatMatch[2].readMacroParams();
                                       var dateHash = getParamsForReminder(params);
                                       var date = findDateForReminder(dateHash);
                                       if (date != null)
                                       {
						var dateindex = date.formatString("YYYY0MM0DD")
						if (!reminders[dateindex])
							reminders[dateindex]=new Array();
						reminders[dateindex].pushUnique(t);
                                       }
				}
			}
		} while(formatMatch);
	}
	return reminders;
}

function hasReminders(date) // returns true if date has reminders
{
        if (window.reminderCacheForCalendar != null)
          return window.reminderCacheForCalendar[date] != null;
	return false; // ELS 2005.11.03: BYPASS due to performance issues
	if (!config.macros.date.reminders) config.macros.date.reminders = indexReminders();
	return (config.macros.date.reminders[date.formatString("YYYY0MM0DD")]!=undefined);
}

function addRemindersToPopup(popup,when,format)
{
	if(window.findTiddlersWithReminders==undefined) return; // reminder plugin not installed

	var indent = String.fromCharCode(160)+String.fromCharCode(160);
	var reminders=findTiddlersWithReminders(when, [0,31],null,1);
	var e=createTiddlyElement(popup,"div",null,null,"reminders:"+(!reminders.length?" none":""));
	for(var t=0; t<reminders.length; t++) {
		link = createTiddlyLink(popup,reminders[t].tiddler,false);
		var diff=reminders[t].diff;
		diff=(!diff)?"Today":((diff==1)?"Tomorrow":diff+" days");
		var txt=(reminders[t].params["title"])?reminders[t].params["title"]:reminders[t].tiddler;
		link.appendChild(document.createTextNode(indent+diff+" - "+txt));
		createTiddlyElement(popup,"br",null,null,null);
	}
	if (readOnly) return;	// omit "new reminder..." link
	var link = createTiddlyLink(popup,indent+"new reminder...",true); createTiddlyElement(popup,"br");
	var title = when.formatString(format);
	link.title="add a reminder to '"+title+"'";
	link.onclick = function() {
		// show tiddler editor
		story.displayTiddler(null, title, 2, null, null, false, false);
		// find body 'textarea'
		var c =document.getElementById("tiddler" + title).getElementsByTagName("*");
		for (var i=0; i<c.length; i++) if ((c[i].tagName.toLowerCase()=="textarea") && (c[i].getAttribute("edit")=="text")) break;
		// append reminder macro to tiddler content
		if (i<c.length) {
			if (store.tiddlerExists(title)) c[i].value+="\n"; else c[i].value="";
			c[i].value += "<<reminder day:"+when.getDate()+" month:"+(when.getMonth()+1)+" year:"+(when.getFullYear())+' title:"Enter a title" >>';
		}
	};
}
//}}}
[[@Agenda]]
[[@Visitors]]
[[In-Collaboration Ltd]]
/***
|''Name:''|DeprecatedFunctionsPlugin|
|''Description:''|Support for deprecated functions removed from core|
***/
//{{{
if(!version.extensions.DeprecatedFunctionsPlugin) {
version.extensions.DeprecatedFunctionsPlugin = {installed:true};

//--
//-- Deprecated code
//--

// @Deprecated: Use createElementAndWikify and this.termRegExp instead
config.formatterHelpers.charFormatHelper = function(w)
{
	w.subWikify(createTiddlyElement(w.output,this.element),this.terminator);
};

// @Deprecated: Use enclosedTextHelper and this.lookaheadRegExp instead
config.formatterHelpers.monospacedByLineHelper = 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) {
		var text = lookaheadMatch[1];
		if(config.browser.isIE)
			text = text.replace(/\n/g,"\r");
		createTiddlyElement(w.output,"pre",null,null,text);
		w.nextMatch = lookaheadRegExp.lastIndex;
	}
};

// @Deprecated: Use <br> or <br /> instead of <<br>>
config.macros.br = {};
config.macros.br.handler = function(place)
{
	createTiddlyElement(place,"br");
};

// Find an entry in an array. Returns the array index or null
// @Deprecated: Use indexOf instead
Array.prototype.find = function(item)
{
	var i = this.indexOf(item);
	return i == -1 ? null : i;
};

// Load a tiddler from an HTML DIV. The caller should make sure to later call Tiddler.changed()
// @Deprecated: Use store.getLoader().internalizeTiddler instead
Tiddler.prototype.loadFromDiv = function(divRef,title)
{
	return store.getLoader().internalizeTiddler(store,this,title,divRef);
};

// Format the text for storage in an HTML DIV
// @Deprecated Use store.getSaver().externalizeTiddler instead.
Tiddler.prototype.saveToDiv = function()
{
	return store.getSaver().externalizeTiddler(store,this);
};

// @Deprecated: Use store.allTiddlersAsHtml() instead
function allTiddlersAsHtml()
{
	return store.allTiddlersAsHtml();
}

// @Deprecated: Use refreshPageTemplate instead
function applyPageTemplate(title)
{
	refreshPageTemplate(title);
}

// @Deprecated: Use story.displayTiddlers instead
function displayTiddlers(srcElement,titles,template,unused1,unused2,animate,unused3)
{
	story.displayTiddlers(srcElement,titles,template,animate);
}

// @Deprecated: Use story.displayTiddler instead
function displayTiddler(srcElement,title,template,unused1,unused2,animate,unused3)
{
	story.displayTiddler(srcElement,title,template,animate);
}

// @Deprecated: Use functions on right hand side directly instead
var createTiddlerPopup = Popup.create;
var scrollToTiddlerPopup = Popup.show;
var hideTiddlerPopup = Popup.remove;

// @Deprecated: Use right hand side directly instead
var regexpBackSlashEn = new RegExp("\\\\n","mg");
var regexpBackSlash = new RegExp("\\\\","mg");
var regexpBackSlashEss = new RegExp("\\\\s","mg");
var regexpNewLine = new RegExp("\n","mg");
var regexpCarriageReturn = new RegExp("\r","mg");

}
//}}}
This software is opensource and will always be free. However donations will encourage the continued enhancement and maintenance of MPTW (and also MonkeyGTD). Please use the link below if you would like to donate. Thank you!
<html><form target="_blank" action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_xclick">
<input type="hidden" name="business" value="simon.baird@gmail.com">
<input type="hidden" name="item_name" value="Support and appreciation for MonkeyPirateTiddlyWiki. Thanks!">
<input type="hidden" name="item_number" value="">
<input type="hidden" name="no_shipping" value="0">
<input type="hidden" name="no_note" value="1">
<input type="hidden" name="currency_code" value="USD">
<input type="hidden" name="tax" value="0">
<input type="hidden" name="bn" value="PP-DonationsBF">
<input type="image" src="https://www.paypal.com/en_US/i/btn/x-click-but04.gif" border="0" name="submit" alt="Make payments with PayPal - it's fast, free and secure!">
<img alt="" border="0" src="https://www.paypal.com/en_AU/i/scr/pixel.gif" width="1" height="1">
</form></html>
Right click on the following download link and select "Save link as..." or "Save target as...". Save the downloaded file on your desktop (or anywhere you like) then double click it to start using it.

{{downloadLink{
[[Download|http://mptw.tiddlyspot.com/empty.html]]
}}}

!!Updating from a 2.3 or higher MPTW
(Note, you can find your MPTW version number using {{{<<mptwVersion>>}}}. Current latest version is <<mptwVersion>>).
* Click backstage, import
* Select MptwUpgradeURL from predefined feeds and click open
* Tick all by clicking the checkbox in the column heading
* Untick "Keep these tiddlers linked..."
* Click import
* Save and reload

!!Updating from an older MPTW
* Since there's lots of changes you need to download a fresh MPTW using the above link then import your content. Try not to import any of the MPTW plugins from your old file. There is a thread [[here|http://groups.google.com/group/TiddlyWiki/browse_thread/thread/93b4c6edd3b6cd16]] that includes more details. (If you're not using Tiddlyspot then just skip the first part about downloading your site).
Buy the juxtaposition of DynamicLauncher into a java application's start command, dynamic instrumentation ([[AOP]]) can be added to modify an application's behavior at run time . 
!Event Dispatch Thread
[[SWING]] GUI components are not thread safe, so their use must be done on a single thread (EDT) to avoid [[deadlock]]. The EDT executes events in order, including repaints.

A thread can be tested to see if it is the EDT.

invokeLater is ideally used by other threads that wish to make calls to [[SWING]] components.
invokeLaterAndWait cannot be called on the EDT, and is typically used to obtain the state of SWING components form another tread.

[[javax.swing.Timer]] class is for SWING actions that are to be deferred or done regally.
[[javax.swing.SwingWorker]] (JDK 1.6) is a pattern for offloading time consuming tasks from the EDT. Override {{{finished}}} to make the GUI updates upon completion.

!Enterprise Java Bean

EJB is a server-side component that encapsulates the business logic of an application. 

[[EJB]]s are of only any value inside a EJB server, unlike [[POJO]]s beans which define naming standards for getters and setters and are used in all manor of component architectures. 

[[EJB]]s come in three verities; [[Session Bean]]s, Message Driven Beans [[MDB]]s, and [[Entity Bean]]s (now replaced by the Java Persistence API [[JPA]] in EJB 3.00)..	 
Eclipse SQL plugin http://eclipsesql.sourceforge.net/

If on start up Eclipse hangs or exits, check the logs in {{{<workspace>.metadata\.log}}} for out of memory errors. Then create or modify the short cut/command to start Eclipse thus: {{{-vmargs -Xms128m -Xmx256m}}}

Plugins
| UML | http://www.eclipsedownload.com/download/free/eclipse_3x/index.html |

^ SHIFT T - class list - if opened when highlighting an interface it will bring up all the implementing classes.
^O - member list
Questions? Comments? Bugs? Please use the GTD Tiddly Wiki GTDTWForum. It's the best way to get a response and you'll have more eyes on your issue.

To email me use my [[mail form|http://snapgrid.com/contact/]]. I can't always reply to everyone, but I do try to read all emails.

To contact the original creator of TiddlyWiki, EmailJeremy.
Engines per form computations, also known as Compute Nodes in a grid.

Usually there is one engine per core, running on a machine, controlled by a single [[Engine Daemon]] instance.
On startup an engine daemon logs into its [[Director]] and is routed to register with a [[Broker]]. It also starts up an keeps alive [[Engine Instances]], usually one per CPU core present on a machine.
The engine daemon monitors its host and kills/restarts [[Engine Instance]]s.
A market leader in [[Grid]], [[Instrumentation]], & [[MUREX]] Consultancy firm.

http://excelian.com
/***
|Name:|ExtentTagButtonPlugin|
|Description:|Adds a New tiddler button in the tag drop down|
|Version:|3.2 ($Rev: 3861 $)|
|Date:|$Date: 2008-03-08 10:53:09 +1000 (Sat, 08 Mar 2008) $|
|Source:|http://mptw.tiddlyspot.com/#ExtendTagButtonPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License|http://mptw.tiddlyspot.com/#TheBSDLicense|
***/
//{{{

window.onClickTag_mptw_orig = window.onClickTag;
window.onClickTag = function(e) {
	window.onClickTag_mptw_orig.apply(this,arguments);
	var tag = this.getAttribute("tag");
	var title = this.getAttribute("tiddler");
	// Thanks Saq, you're a genius :)
	var popup = Popup.stack[Popup.stack.length-1].popup;
	createTiddlyElement(createTiddlyElement(popup,"li",null,"listBreak"),"div");
	wikify("<<newTiddler label:'New tiddler' tag:'"+tag+"'>>",createTiddlyElement(popup,"li"));
	return false;
}

//}}}

!Foreign Exchange

Investment banks FX:

*Clients - import/exporters
*Proprietary Trading
a JVM error when the return to a function is missing. Normally the compile catches this but with [[AOP]] and [[Javassist]] it is possible to modify code in such away as to miss the return!
![[Financial Acronyms]]

|ABS|Asset-backed security|
|APR|Annlual Percentage  Rate|
|APY|Annual Percentage Yeild|includes intrest on intrest|
|ARM|Adjustable-Rate Mortgage|
|BP|Basis Points|
|CIBM|Corporate Investment Banking & Markets|
|CDO|Collateralized debt obligation|an asset backed security product|
|CFD|Contract For Difference|
|CMBS|Commercial Mortgages Backed Securities|
|ECB|European Central Bank|
|ECN|Electronic exchange|
|EOD|End of Day|
|EPS|Earnings Per Share|
|FRA|Forward Rate Agreements|
|FRNs|Floating Rate Notes|
|FX|Foreign Exchange|
|GDP|Gross Domestic Product|
|GNP|Gross National Product|
|HPA|House Purchase Assistance|
|HPA|House Price Appreciati