<!--{{{-->
<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 [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div>
<!--}}}-->
To get started with this blank TiddlyWiki, you'll need to modify the following tiddlers:
* SiteTitle & SiteSubtitle: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* MainMenu: The menu (usually on the left)
* DefaultTiddlers: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
These InterfaceOptions for customising TiddlyWiki are saved in your browser

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

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

----
Also see AdvancedOptions
<<importTiddlers>>
|''Type:''|file|
|''URL:''|http://remotely-helpful.com/TiddlyWiki/TiddlerEncryptionPlugin.html|
|''Workspace:''|(default)|

This tiddler was automatically created to record the details of this server
|''Type:''|file|
|''URL:''|http://visualtw.ouvaton.org/VisualTW.html|
|''Workspace:''|(default)|

This tiddler was automatically created to record the details of this server
|''Type:''|file|
|''URL:''|http://www.tiddlytools.com|
|''Workspace:''|(default)|

This tiddler was automatically created to record the details of this server
!Best Web Browser:
Firefox is a favourite browser, being safer than IE and highly customizable. Automatic updates, faster browsing, better pop-up blocking, tabbed browsing, an integrated search bar, and live bookmarks are just some features of this browser and countless add-ons you can install. Another popular browser is Opera which includes many of the same features as Firefox.
*[[FireFox|http://www.mozilla.com/firefox/]]
*[[Opera|http://www.opera.com/]]

----------------------
Best Torrent Client:
----------------------

Azureus is a java bittorrent client offering multiple torrent downloads, queuing/priority systems (on torrents and files), start/stop seeding options and instant access to numerous pieces of information about your torrents. Azureus now features an embedded tracker easily set up and ready to use. uTorrent is a lightweight (Very) and efficient BitTorrent client that includes bandwidth prioritization, scheduling, RSS auto-downloading and Mainline DHT.

Azureus
http://azureus.sourceforge.net/

µTorrent
http://www.utorrent.com/

--------------------------------------------
Best Multi Platform File Transfer Utility:
--------------------------------------------

Shareaza is a great program that connect to 4 P2P networks, EDonkey2000, Gnutella, BitTorrent and Gnutella2 (G2).

Shareaza
http://www.shareaza.com/

-----------------------------
Best IP Blacklist/Blocker:
-----------------------------

A must for anyone using P2P. PeerGaurdian integrates support for multiple lists, list editing, automatic updates, and blocking all of IPv4, TCP, UDP, ICMP, etc, making it the safest and easiest way to protect your privacy on P2P. Lite version is made to consume as little CPU and RAM as possible. It has no UI or options and consists of a single tray icon.

PeerGaurdian
http://phoenixlabs.org/pg2/

PeerGuardian Lite
http://phoenixlabs.org/pglite/

------------------
Best FTP Client:
------------------

Two amazing FTP clients that each include a great deal of features are FileZilla and SmartFTP.

FileZilla
http://filezilla.sourceforge.net/

SmartFTP
http://www.smartftp.com/

-----------------------
Best Chat Program:
-----------------------

Two that stand out are Gaim/Pidgin and Trillian, both are multi-platform. Gaim is compatible with AIM, ICQ, MSN Messenger, Yahoo!, IRC, Jabber, Gadu-Gadu, SILC, GroupWise Messenger, and Zephyr networks. While Trillain is a skinnable chat client that supports AIM, ICQ, MSN, Yahoo Messenger, and IRC. Trillain also includes many features not included in those chat programs.

Gaim/Pidgin
http://pidgin.im/pidgin/home/

Trillian
http://www.ceruleanstudios.com/

-----------------------------
Best AIM Virus Remover:
-----------------------------

AIM Fix was created to remove all known AIM viruses in one consolidated removal tool.

AIM Fix
http://www.jayloden.com/software.htm

--------------------------------
Best Phone Voice Software:
--------------------------------

These programs allow you to call people for free and talk with them, all you need are headphones and a microphone. Skype adds encryption and has excellent sound quality. An alternative to Skype is the Gizmo Project.

Skype
http://www.skype.com/

Gizmo Project
http://www.sipphone.com/

----------------------------
Best Download Manager:
----------------------------

The ones that work great are FlashGet, GetRight, and Free Download Manager. All split up files and increase the download by 100-600%, they can also resume broken downloads.

FlashGet
http://www.flashget.com/index_en.htm

GetRight
http://www.getright.com/

Free Download Manager
http://www.freedownloadmanager.org/

----------------------------
Best Gmail File transfer:
----------------------------

There is a good program that allows you to use your Gmail space to upload your files and make backups of them.

Gmail Drive
http://www.viksoe.dk/code/gmail.htm

--------------------
Best Email Client:
--------------------

Another from Mozilla, Thunderbird, is a full-featured email client, that includes a spam filter, anti-phishing protection, enchanced security, and auto updates and tons of add-ons you can download to further enhance it.

Thunderbird
http://www.mozilla.com/thunderbird/

------------------------
Best Blogging Poster:
------------------------

w.bloggar is a great blogging tool that includes a template and post editor that works with many blogging sites, including Blogger. Unlike other blogging tools, it doesn't require you to have your blog on an ftp site, but can log in and post.

w.bloggar
http://wbloggar.com/

------------------
Best IRC Client:
------------------

Other than the popular mIRC some outstanding IRC clients are IceChat and HydraIRC.

HydraIRC
http://www.hydrairc.com/

IceChat
http://www.hydrairc.com/

--------------------
Best IRC Add-on:
--------------------

NoNameScript is an amazing addon that's definitely worth installing over normal mIRC.

NoNameScript
http://www.nnscript.de/index.php?section=download

----------------------
Best Anti-Spyware:
----------------------

Some of the best are Spybot, Ad-Aware, Windows Defender, and Spyware Blaster. The first three are scanners each with their own special tools including realtime scanning, encrypted file deletion, and history eraser. Spyware Guard is more of a realtime scanner (Like Anti-Virus) of spyware while you're downloading. Spyware Blaster is not a scanner, but prevents spyware from installing on your computer, (Spybot includes a robust version of this). All four programs are recommended since each is not 100% efficient solution.

Spybot
http://www.safer-networking.org/en/

Ad-Aware SE Personal
http://www.lavasoft.de/software/adaware/

Windows Defender
http://tinyurl.com/dyvaw

SpywareGuard
http://www.javacoolsoftware.com/spywareguard.html

Spyware Blaster
http://www.javacoolsoftware.com/spywareblaster.html

------------------
Best Anti-Virus:
------------------

A favourite is AVG from Grisoft, which includes updates, real time scanner, and an email scanner. Another good one is AntiVir PersonalEdition Classic which includes many of the same features. Do keep in mind that free anti virus clients are not up to par with paid ones according to testings. ClamWin is also one of the best, it's a port of the great Open Source ClamAV.

AVG
http://free.grisoft.com/doc/1

AntiVir PersonalEdition Classic
http://www.free-av.com/

ClamWin
http://www.clamwin.com/

---------------
Best Firewall:
---------------

The best is ZoneAlarm which is simple for begginers and provides lots of features for more advanced users.

ZoneAlarm Free
http://www.zonealarm.com/store/content/catalog/products/sku_list_za.jsp

--------------------
Best Anti-Rootkit:
--------------------

AVG Anti-Rootkit really helps stop find and remove those evil root kits from your system.

AVG Ant-Rootkit
http://free.grisoft.com/doc/1

------------------------
Best Diagnostic Tool:
------------------------

Ultimate Boot CD is an amazing bootable CD to restore a crashed computer and can fix it. I've used it on many different PC's and Laptops!

Ultimate Boot CD
http://www.ultimatebootcd.com/

----------------------
Best Disk Cleaner:
----------------------

CCleaner, removed about 1.5 Gigs in unused application data and internet cache (which I thought was removed by the disk cleaner). This utility cleans out your PC's hard drive safely and even scans and removes obselete registry data, speeding up your system. You might want to turn off cookie deletion if you save your passwords for sites.

CCleaner
http://www.ccleaner.com/

--------------------
Best File Deleter:
--------------------

Eraser is an advanced security tool (for Windows), which allows you to completely remove sensitive data from your hard drive by overwriting it several times with carefully selected patterns.

Eraser
http://www.heidi.ie/eraser/

----------------------
Best File Encrypter:
----------------------

Three stand out, GNU Privacy Gaurd, TrueCrypt, and Blowfish Advanced CS. GNU is a full replacement of PGP that is command line based, and not for beginnners. However, Blowfish Advanced CS offers multiple algorithms, efficient data compression, and safe key handling for content protection. TrueCrypt can create virtual encrypted disks, can encrypt an entire hard disk partition or a device, such as USB flash drive, and provides two levels of plausible deniability, in case an adversary forces you to reveal the password.

Blowfish Advanced CS
http://www.hotpixel.net/software.html

TrueCrypt
http://www.truecrypt.org/

GNU Privacy Gaurd
http://www.gnupg.org/

Guide to GNU Privacy Gaurd
http://www.dewinter.com/gnupg_howto/english/GPGMiniHowto.html

--------------------------------------------
Best Md5 Checksum Creator/Checker:
--------------------------------------------

This open source utility is used to calculate the MD5 checksum of a file using L. Peter Deutsch's MD5 code. One of the most common uses is to make sure that a file that you have downloaded is not corrupt. Some websites post the MD5 checksum of a file on their download page. Once you have downloaded the file, use winMd5Sum to get the MD5 checksum of the file on your computer. Then make sure that the MD5 checksum from the web site is the same. If they are the same, then your file is exactly the same as the file on the website.

winMD5Sum
http://www.nullriver.com/index/products/winmd5sum

---------------------
Best File Unlocker:
---------------------

Unlocker is an Windows Explorer extension allowing you with a simple right-click on a file or folder to get rid of error message such as error deleting file or folder, cannot delete folder: it's being used by another person or program.

Unlocker
http://ccollomb.free.fr/unlocker/

---------------------
Best Image Editor:
---------------------

The GIMP and Paint.NET are the best. GIMP is more like Photoshop and there is a seperate version that make the GIMP interface appear more like Photoshop (to make it easier to use). Piant.NET replaces the simple MS Paint program and adds tons of features and includes some of the things Photoshop has.

The GIMP
http://www.gimp.org/

GIMP Shop
http://plasticbugs.com/?page_id=294

Paint.NET
http://www.getpaint.net/index2.html

------------------------------
Best Vector Image Editor:
------------------------------

Inkscape is an Open Source vector graphics editor, with capabilities similar to Illustrator, Freehand, CorelDraw, or Xara X using the W3C standard Scalable Vector Graphics (SVG) file format.

INKSCAPE
http://www.inkscape.org/

------------------------------
Best Image Viewer/Editor:
------------------------------

IrfanView supports many formats of images and includes some plugins that allow it to view many other formats such as videos, flash, and some audio formats. Picasa, on the other hand, differs in being able to edit photos and searches your computer for photos. Another good one is FastStone Image Viewer which is a fast, stable, user-friendly image browser, converter and editor.

IrfanView
http://www.irfanview.com/

IrfanView Plugin/Addons
http://www.tucows.com/preview/415586

Picasa
http://picasa.google.com/

FastStone Image Viewer
http://www.faststone.org/FSViewerDetail.htm

--------------------------------
Best Digital Album Creator:
--------------------------------

InAlbum Lite is an easy you can use program to turn your digital photos into a great photo album slideshow. InAlbum Lite helps you turn your digital photos into stunning photo albums.

InAlbum Lite
http://www.softpedia.com/get/Authoring-tools/Digital-Album/InAlbum-Lite.shtml

-----------------------------------------------
Best 3-D Modelling/Animation/Rendering:
-----------------------------------------------

Blender is the open source software for 3D modeling, animation, rendering, post-production, interactive creation and playback.

Blender
http://www.blender.org/

------------------------
Best Color Capturer:
------------------------

Color Schemer ColorPix is a useful little color picker that grabs the pixel under your mouse and transforms it into a number of different color formats. You can use the built-in magnifier to zoom in on your screen, click on a color value to copy it directly to the clipboard, and even keep ColorPix on top of all other apps and out of the way. Also, it doesn't require installation and is a tiny program.

Color Schemer ColorPix
http://www.colorschemer.com/colorpix_info.php

---------------------
Best Virtual Drive:
---------------------

If you ever wanted to run that .iso or any other CD image without having the CD or DVD in the drive just use DAEMON Tools. Do not install the adware toolbar!

DAEMON Tools
http://www.daemon-tools.cc/dtcc/download.php

---------------------------
Best DVD Descrambler:
---------------------------

Well the name says it all, DVD Decrypter allows you to copy DVDs to your hard drive and re-encode them to MPEG1 (VCD) or DivX. DVD Decrypter can also write most types of CD / DVD images via its 'ISO Write' mode. Also there's DVDFab HD Decrypter which copies entire DVD movie to hard disk, and removes all the protections (CSS, RC, RCE, APS, UOPs and Sony ARccOS) while copying. It also comes with full HD-DVD and Blu-Ray support (Removes AACS).

DVD Decryptor
http://www.filehippo.com/download_dvd_decrypter/

DVDFab HD Decrypter
http://www.dvdfab.com/free.htm

---------------------------
Best DVD Compressor:
---------------------------

ratDVD takes a full featured DVD-9 movie and puts it into a highly compressed .ratDVD container format file of about 1.x GB in size - while preserving all the features of the original DVD.

ratDVD
http://ratdvd.ca/

-------------------------
Best CD/DVD Burner:
-------------------------

CDBurnerXP Pro is a fully featured DVD/CD burner and can create .iso's from them. It is very fast and meet all your needs.

CDBurnerXP Pro
http://www.cdburnerxp.se/

For you Ubuntu and Linux fans, without a doubt... K3b! (http://k3b.plainblack.com/)

----------------------------------
Best MPEG to DVD Converter:
----------------------------------

Got those mpegs from your digital video camera, off the web, etc. but always wanted to convert them into DVD's? Well DVDBuilder does exactly that, efficiently and painlessly for free.

DVDBuilder
http://www.keronsoft.com/dvdbuilder.html

-----------------------------------
Best Video Player/Codec Pack:
-----------------------------------

The K-Lite Mega Codec Pack will play every video file on this planet. Also GSpot is a video codec identification utility - identifies which video codec and audio compression method is used on .avi files, whether the matching codec is installed, so you can direct download only the ones you need.

K-Lite Mega Codec Pack
http://www.codecguide.com/about_mega.htm

K-Lite Codec Pack Full (Less features)
http://codecguide.com/features_full.htm#full

GSpot
http://www.free-codecs.com/download/GSpot.htm

------------------------------------------
Best Video Player/Streaming Server:
------------------------------------------

VLC is a portable cross-platform, multimedia player that also streams audio/video across your network. MPEG-1, MPEG-2, MPEG-4, DivX, mp3, ogg, etc. And DVDs, VCDs. It can stream unicast or multicast in IPv4 or IPv6 on a high-bandwidth network.

VLC media player
http://www.videolan.org/vlc/

---------------------
Best Audio Player:
---------------------

Winamp and foobar2000 comes out on top as the best audio players. ml_ipod is a plugin that uses Winamp to support your iPod. Winamp DSP Enhancer increases the quality and depth of your bass and treble, but not just making them louder but by filtering out any distortions and other bad stuff. foobar 2000 s an advanced audio player for the Windows platform. Some of the basic features include full unicode support, ReplayGain support and native support for several popular audio formats. Not to mention it's tiny size.

Winamp
http://www.winamp.com/

ml_ipod (Version 5.2 of Winamp alreday has had iPod support built in.)
http://mlipod.sourceforge.net/

DSP Enchancer
http://download.nullsoft.com/customize/component/2001/10/8/P/Enhancer.exe

foobar2000
http://www.foobar2000.org/

For you Ubuntu/Linux fans my all time favourite is Amarok! (http://amarok.kde.org/)

Audacity is a free and gull featured audio editor and recorder. As for grabbing audio from CDs , Exact Audio Copy is the solution, although it's not for beginners.

Audacity
http://audacity.sourceforge.net/

Exact Audio Copy
http://www.exactaudiocopy.de/

-------------------------
Best Audio Converter:
-------------------------

Often called the Swiss army knife of audio, dBpowerAMP is able to convert between audio formats whilst preserving ID Tags.

dBpowerAMP Music Converter
http://www.dbpoweramp.com/dmc.htm

-------------------------------
Best XviD/DivX Converter:
-------------------------------

AutoGK is an amazing program that converts Xvid and DivX formats of video to many others, at the same time compressing them and it includes many other features.

AutoGK
http://www.autogk.me.uk/

--------------------------------
Best Movie Cover Searcher:
--------------------------------

Have those "back up" DVDs but no covers? Well, no fear, iCover searches its 6 databases and the internet for over 13,000 movie covers that you can download for free.

iCover
http://www.softpedia.com/get/Multimedia/Video/Other-VIDEO-Tools/i-Covers.shtml

iCover Site (French)
http://www.i-covers.net/

(Google translate: http://www.google.com/translate_t)

------------------
Best iPod Utility:
------------------

Forget iTunes, YamiPod gives you full control of your iPod and offers many other features to you.

YamiPod
http://www.yamipod.com/main/modules/home/

------------------------------
Best Hard Drive Analyser:
------------------------------

JDiskReport is an amazing program that provides many different graphs and information on what's stored on your computer.

JDiskReport
http://www.jgoodies.com/freeware/jdiskreport/index.html

-----------------------------
Best Software Collection:
-----------------------------

TheOpenCD includes many freeware programs and open source programs that are essential to anyone.

TheOpenCD
http://theopencd.org/

--------------------
Best HTML Editor:
--------------------

NVU, is a great HTML editor similar to Dreamweaver and Frontpage. Also, BlueFish editer is a very stable robust solution that focuses on editing dynamic and interactive web sites.

NVU
http://www.nvu.com/

BlueFish
http://bluefish.openoffice.nl/

-----------------------------
Best CSS Menu Designer:
-----------------------------

CSS Menu Designer is a good tool to automatically create beautiful CSS menus that you can customize to your needs.

Best CSS Menu Designer
http://www.highdots.com/css-tab-designer/

---------------------
Compression Tool:
---------------------

Although there's many, a few stand out, mainly 7-Zip and IZArc. 7-Zip supports: 7z, ZIP, CAB, RAR, ARJ, GZIP, BZIP2, Z, TAR, CPIO, RPM and DEB. IZArc supports many files including: 7-ZIP, A, ACE, ARC, ARJ, B64, BH, BIN, BZ2, BZA, C2D, CAB, CDI, CPIO, DEB, ENC, GCA, GZ, GZA, HA, IMG, ISO, JAR, LHA, LIB, LZH, MDF, MBF, MIM, NRG, PAK, PDI, PK3, RAR, RPM, TAR, TAZ, TBZ, TGZ, TZ, UUE, WAR, XXE, YZ1, Z, ZIP, ZOO. Both also include many other features.

7-Zip
http://www.7-zip.org/

IZArc
http://www.izarc.org/

-----------------------------
Best Benchmarking Tool:
-----------------------------

EVEREST Home Edition is a freeware hardware diagnostics and memory benchmarking solution for home PC users. It offers the world's most accurate hardware information and diagnostics capabilities, including online features, memory benchmarks, hardware monitoring, and low-level hardware information. Sadly, this free version has been discontinued, since they want to make some money on their corporate version (Which is understandable).

EVEREST Home Edition
http://www.filehippo.com/download_everest_home/

--------------------
Best Office Suite:
--------------------

The best by far is OpenOffice.org. It includes many of the same features as MS Office and then some!

OpenOffice.org
http://www.openoffice.org/

--------------------------
Best Multi-Coding Tool:
--------------------------

For those computer programmers, PHP Designer 2005 and Notepad++ are great programs that include syntax highlighting and syntax folding. PHP Designer supports: PHP, HTML, XML, CSS, JavaScript, Java, Perl, JavaScript, VB, C#, Java & SQL. Notepad++ supports C, C++, Java, C#, XML, HTML, PHP, Javascript, RC resource file, makefile, ASCII art file (extension .nfo), doxygen, ini file, batch file, ASP, VB/VBS source files, SQL, Objective-C, CSS, Pascal, Perl, Python, Lua, TCL, Assembler, Ruby, Lisp, Scheme, Properties, Diff, Smalltalk, Postscript and VHDL. And that's the tip of the iceberg for both programs, they contain tons of features.

Notepad++
http://notepad-plus.sourceforge.net/uk/site.htm

PHP Designer 2005
http://www.download.com/PHP-Designer-2005/3000-7957-10353130.html

PSPad
http://www.pspad.com/en/

---------------------
Best AutoIt Editor:
---------------------

This custom made version of SciTE has syntax highlighting and syntax folding, autocompleting, and intellisense.

SciTE
http://www.autoitscript.com/

--------------------
Best PDF Reader:
--------------------

Foxit Reader is small (1.5MB), so it downloads quickly. It doesn't need any installation, so you can start to run it as soon as you've downloaded it.

Foxit Reader
http://www.foxitsoftware.com/pdf/rd_intro.php

-------------
Best Linux:
-------------

Ubuntu and Kubuntu are two of best and most well known linux distros out there and include a barrage of programs. Another good one is Damn Small Linux, which is 50mb and can run off your USB flash drive.

Ubuntu
http://www.ubuntu.com/

Kubuntu
http://www.kubuntu.org/

Damn Small Linux
http://www.damnsmalllinux.org/

-----------------------------------------
Best Tutorial/Presentation Creation:
-----------------------------------------

Wink is a Tutorial and Presentation creation software, primarily aimed at creating tutorials on how to use software (like a tutor for MS-Word/Excel etc). Using Wink you can capture screenshots, mouse movements, add explanations boxes, buttons, titles etc and generate a highly effective tutorial for your users.

Wink
http://www.debugmode.com/wink/

-------------------------------
Best Windows CD Creator:
-------------------------------

AutoStreamer works as a totally automated slipstreamer. Basically, all it really needs is a source that being an original Windows CD or a local share and a Service Pack file. Using this you can create another Windows CD that includes the newest service pack and all the hotfixes.

AutoPatcher
http://mhtools.knoware.nl/raptor/autopatcher.html

AutoStreamer
http://mhtools.knoware.nl/raptor/autostreamer/AutoStreamer.exe

Source: [[Not A Blind Date! : Blog|http://www.notablinddate.com/kayakman.html]]
Please SignIn

This "site" is actually a single html file whose core functionality is provided by TiddlyWiki and hosted at [[TiddlySpot|http://tiddlyspot.com]].  I use this [[Wiki|http://en.wikipedia.org/wiki/Wiki]] to maintain notes to myself on any number of topics, but primarily to make notes on various things I'd like to easily find again.

As seen in the MainMenu above, the content is roughly tagged to make it easier to locate items by topic.  Browse around and read anything you might find useful.

See Also: GettingStarted

TiddlyWiki Core Version <<version>>
MPTW template from ~TiddlySpot
> Give a person a fish and you feed them for a day.
>Teach that person to use the Internet and they won't bother you for //weeks!//

> Build a man a fire and you keep him warm for a time.
> Set a man on fire and you keep him warm for the rest of his life!
[[OS_X Software]]
[img[http://www.macosxhints.com/layout/hints1/theme-images/osxhints-logo.png]] http://www.macosxhints.com/
*[[DarwinPorts|http://darwinports.opendarwin.org/]]
> The [[DarwinPorts|http://darwinports.opendarwin.org/]] Project's main goal is to provide an easy way to install various open-source software products on the Darwin OS family (~OpenDarwin, Mac OS X and Darwin)
*[[MacEnterprise.org|http://macenterprise.org/]]
> The MacEnterprise project is a community of IT professionals sharing information and solutions to support Macs in an enterprise.
!!Blog Postings
*[[Top 10 Open Source OS X Apps|http://www.boydcreative.net/apple/top-10-open-source-os-x-apps/]]
Multi-item clipboard extension from [[JoeJoeSoft|http://www.joejoesoft.com]]
/***
|Name|AutoOpenTiddlersPlugin|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#AutoOpenTiddlersPlugin|
|Version|0.21|
|Requires|~TW2.x|
!!!Description:
Open a user defined number of recent tiddlers automatically when the TW loads.
You can also specify a tag and only load tiddlers that have that tag.
To change the number of tiddlers automatically opened, or define a tag to use, ed the config.autoOpenTiddlers part of the code below.

!!!To Do
*add an option to exclude tiddlers with a particular tag

!!!Code
***/
//{{{
//edit this section to change the default settings
config.autoOpenTiddlers = 
{
          count: 5,   //number of tiddlers opened.
          tag: undefined //change if you want to open tiddlers with a specific tag, eg: 'DefaultTiddlers'
}


config.autoOpenTiddlers.handler = function()
{
          if (this.tag == undefined)
             var newTiddlers = store.getTiddlers("modified");
          else
             var newTiddlers = store.getTaggedTiddlers(this.tag,"modified");
          var newTiddlers = newTiddlers.reverse();
           var max = Math.min(this.count,newTiddlers.length-1);
          for (var i=max; i>=0; i--)
               { story.displayTiddler(null,newTiddlers[i].title);} 
}

window.old_lewcid_autoOpenTiddlers_restart = restart;
restart = function ()
{
        window.old_lewcid_autoOpenTiddlers_restart();
        config.autoOpenTiddlers.handler();
}
//}}}

''BPL''
Submitted by Jeff Caruso on Mon, 06/18/2007 - 5:45pm.

BPL (Broadband over power lines) refers to technologies for using power lines to deliver broadband services, in particular in remote rural areas not served by DSL or cable-modem services. Utility companies could also use it to remotely monitor electricity usage at customer premises.

In April 2003, the Federal Communications Commission voted unanimously to conduct a technical review of the technology. Because new digital power line designs use a large frequency range (between 2 and 80 MHz), unlike most radio frequency devices, the FCC wants assurances BPL would not interfere with existing home electronic devices, such as garage-door openers. Amateur-radio operators have expressed concern about interference.

BPL would travel over medium-voltage transmission lines (up to 40,000 volts). At the home, it could connect to devices already networked via the HomePlug powerline specification.

Source: [[BPL : NetworkWorld.com Community|http://www.networkworld.com/community/?q=node/16357]]
!Broadband over powerlines
Broadband over power lines (BPL), also known as power-line internet or Powerband, is the use of PLC technology to provide broadband Internet access through ordinary power lines. A computer (or any other device) would need only to plug a BPL "modem" into any outlet in an equipped building to have high-speed Internet access.

BPL seems, at first glance, to offer benefits relative to regular cable or DSL connections: the extensive infrastructure already available would appear to allow people in remote locations to have access to the Internet with relatively little equipment investment by the utility. Also, such ubiquitous availability would make it much easier for other electronics, such as televisions or sound systems, to hook up.

However, variations in the physical characteristics of the electricity network and the current lack of IEEE standards mean that provisioning of the service is far from being a standardized, repeatable process, and the amount of bandwidth a BPL system can provide compared to cable and wireless is in question. Some industry observers believe the prospect of BPL will motivate DSL and cable operators to more quickly serve rural communities.

PLC modems transmit in medium and high frequency (1.6 to 80 MHz electric carrier). The asymmetric speed in the modem is generally from 256 kbit/s to 2.7 Mbit/s. In the repeater situated in the meter room the speed is up to 45 Mbit/s and can be connected to 256 PLC modems. In the medium voltage stations, the speed from the head ends to the Internet is up to 135 Mbit/s. To connect to the Internet, utilities can use optical fiber backbone or wireless link.

The system has a number of complex issues, the primary one being that power lines are inherently a very noisy environment. Every time a device turns on or off, it introduces a pop or click into the line. Energy-saving devices often introduce noisy harmonics into the line. The system must be designed to deal with these natural signaling disruptions and work around them.

Broadband over powerlines has developed faster in Europe than in the United States due to a historical difference in power system design philosophies. Nearly all large power grids transmit power at high voltages in order to reduce transmission losses, then near the customer use step-down transformers to reduce the voltage. Since BPL signals cannot readily pass through transformers — their high inductance makes them act as low-pass filters, blocking high-frequency signals — repeaters must be attached to the transformers. In the U.S., it is common for a small transformer hung from a utility pole to service a single house or a small number of houses. In Europe, it is more common for a somewhat larger transformer to service 10 or 100 houses. For delivering power to customers, this difference in design makes little difference with power distribution, but it means delivering BPL over the power grid of a typical U.S. city will require an order of magnitude more repeaters than would be required in a comparable European city. However, since bandwidth to the transformer is limited, this can increase the speed at which each household can connect, due to fewer people sharing the same line. One possible alternative is to use BPL as the backhaul for wireless communications, by for instance hanging Wi-Fi access points or cellphone base stations on utility poles, thus allowing end-users within a certain range to connect with equipment they already have. In the near future, BPL might also be used as a backhaul for WiMAX networks.

The second major issue is signal strength and operating frequency. The system is expected to use frequencies in the 10 to 30 MHz range, which has been used for decades by amateur radio operators, as well as international shortwave broadcasters and a variety of communications systems (military, aeronautical, etc.). Power lines are unshielded and will act as antennas for the signals they carry, and have the potential to completely wipe out the usefulness of the 10 to 30 MHz range for shortwave communications purposes.

Modern BPL systems use OFDM modulation which allows the mitigation of interference with radio services by removing specific frequencies used. A 2001 joint study by the ARRL and HomePlug powerline alliance showed that modems using this technique "in general that with moderate separation of the antenna from the structure containing the HomePlug signal that interference was barely perceptible" and interference only happened when the "antenna was physically close to the power lines".

Much higher speed transmissions using microwave frequencies transmitted via a newly discovered surface wave propagation mechanism called E-Line have been demonstrated using only a single power line conductor. These systems have shown the potential for symmetric and full duplex communication well in excess of 1 Gbit/s in each direction. Multiple WiFi channels with simultaneous analog television in the 2.4 and 5.3 GHz unlicensed bands have been demonstrated operating over a single medium voltage line. Furthermore, because it can operate anywhere in the 100 MHz - 10 GHz region, this technology can completely avoid the interference issues associated with utilizing shared spectrum while offering the greater flexibility for modulation and protocols found for any other type of microwave system.
!!Utility applications
Utility companies use special coupling capacitors to connect low-frequency radio transmitters to the power-frequency AC conductors. Frequencies used are in the range of 24 to 500 kHz, with transmitter power levels up to hundreds of watts. These signals may be impressed on one conductor, on two conductors or on all three conductors of a high-voltage AC transmission line. Several different PLC channels may be coupled onto one HV line. Filtering devices are applied at substations to prevent the carrier frequency current from being bypassed through the station apparatus and to ensure that distant faults do not affect the isolated segments of the PLC system. These circuits are used for control of switchgear, and for protection of transmission lines. For example, a protection relay can use a PLC channel to trip a line if a fault is detected between its two terminals, but to leave the line in operation if the fault is elsewhere on the system.

While utility companies use microwave and now, increasingly, fiber optic cables for their primary system communication needs, the power-line carrier apparatus may still be useful as a backup channel or for very simple low-cost installations that do not warrant a fibre drop.

There are also some very low-bit rate power line communication systems used for automatic meter reading.

Source: [[Power line communication - Wikipedia, the free encyclopedia|http://en.wikipedia.org/wiki/Broadband_over_power_lines]]
! Tech
!! Security
* [[A Day in the Life of an Information Security Investigator|http://blogs.ittoolbox.com/security/investigator]]
!Remote Assistance
''[[ShowMyPC|http://showmypc.com/index.html]]'' is a [[Community|http://showmypc.com/users/community-users.html]]-driven Online Collaboration application that provides instant collaboration and assistance. The tool is meant for Desktop Sharing and Remote PC access, as free community alternatives to ~WebEx or ~GoToMyPC
''Featured Services:''
* Free!! Instant, No registration, No logins.
* Built using standard SSH and VNC software.
* Desktop and single Application Sharing.
* Scheduled Meetings.
* File Sharing.

!Bandwidth Speed Testing
<html><a href="http://www.speakeasy.net/speedtest/"><img src="http://www.speakeasy.net/images/speedtest/speedtest_120x60.gif" width="120" height="60" border="0" alt="Speakeasy Speed Test"></a></html>

!Tiddlers Tagged as Bookmarks
Powerline Communications : Broadband Powerline
[[Research Center and eLibrary|http://plugtek.com/]]

Source: [[Powerline Communications Broadband Networking Research Center : Internet Power Line Network|http://www.plugtek.com/plugtek.shtml]]
''Geocaching Statistics''

If you like to keep tabs on your [[geocaching|Geocaching]] statistics, you'll love [[CacheStats|http://www.logicweave.com/cachestats.html]]. 
*How has your find rate been holding up over the years?  
*What are your longest streaks?  
*How are you doing compared to last year?  
*Want to see what it will take to reach your end-of-year goal?  
[[CacheStats|http://www.logicweave.com/cachestats.html]] analyzes your "My Finds" pocket query to find out all this and more.  [[CacheStats|http://www.logicweave.com/cachestats.html]] is free, so go ahead and [[download now|http://www.logicweave.com/cachestats.htm]]!
!Card Tricks
*[[The Most Useful Trick in Card Magic Revealed|http://www.metacafe.com/watch/475413/the_most_useful_trick_in_card_magic_revealed/]]
*Rotation
<html><embed src="http://www.metacafe.com/fplayer/376607/amazing_card_trick_revealed.swf" width="400" height="345" wmode="transparent" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"></embed><br><font size = 1><a href="http://www.metacafe.com/watch/376607/amazing_card_trick_revealed/">Amazing Card Trick Revealed!</a> - <a href='http://www.metacafe.com/'>Funny videos are here</a></font></html>
Oh what I would do to have
The kind of faith it takes 
To climb out of this boat I'm in
Onto the crashing waves

To step out of my comfort zone
Into the realm of the unknown where Jesus is
And He's holding out His hand

But the waves are calling out my name 
And they laugh at me
Reminding me of all the times 
I've tried before and failed
The waves they keep on telling me
Time and time again. "Boy, you'll never win!"
"You'll never win!"

Chorus: 
But the voice of truth tells me a different story
The voice of truth says, "Do not be afraid!"
The voice of truth says, "This is for My glory"
Out of all the voices calling out to me
I will choose to listen and believe the voice of truth

Oh what I would do to have
The kind of strength it takes to stand before a giant
With just a sling and a stone
Surrounded by the sound of a thousand warriors
Shaking in their armor
Wishing they'd have had the strength to stand

But the giant's calling out my name 
And he laughs at me
Reminding me of all the times 
I've tried before and failed
The giant keeps on telling me
Time and time again. "Boy you'll never win!"
"You'll never win!"

But the stone was just the right size
To put the giant on the ground
And the waves they don't seem so high
From on top of them lookin' down
I will soar with the wings of eagles
When I stop and listen to the sound of Jesus
Singing over me

I will choose to listen and believe the voice of truth
/***
| Name|CloseOnCancelPlugin|
| Description|Closes the tiddler if you click new tiddler then cancel. Default behaviour is to leave it open|
| Version|3.0 ($Rev: 1845 $)|
| Date|$Date: 2007-03-16 15:19:22 +1000 (Fri, 16 Mar 2007) $|
| Source|http://mptw.tiddlyspot.com/#CloseOnCancelPlugin|
| Author|Simon Baird <simon.baird@gmail.com>|
| License|http://mptw.tiddlyspot.com/#TheBSDLicense|
***/
//{{{
merge(config.commands.cancelTiddler,{

	handler_orig_closeUnsaved: config.commands.cancelTiddler.handler,

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

});

//}}}
First, open "PageTemplate" and remove the following line
{{{
    <div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
}}}
Next, open "SideBarOptions" and append the following:
{{{
    <<slider chkSliderTimeline SideBarTabs 'tabs »' 'Show timeline'>>
}}}
Click the "done" button on both and you now have the Timeline and Tabs in a collapsed form.
Name: Green
Background: #fff
Foreground: #000
PrimaryPale: #9b9
PrimaryLight: #385
PrimaryMid: #031
PrimaryDark: #020
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
<<tabs tabsClass
Layout "Layout Templates" SystemLayout
System "System Tiddlers" SystemTiddlers
Style "StyleSheets" StyleSheets
"Side Bar" "Side Bar Elements" SystemSideBars
Options "Personal Preferences" SystemOptions
Shadows "Hidden System Pages" ShadowPages
>>
//{{{
config.options.chkHttpReadOnly = false; // means web visitors can experiment with your site by clicking edit
config.options.chkInsertTabs = true;    // tab inserts a tab when editing a tiddler
config.views.wikified.defaultText = ""; // don't need message when a tiddler doesn't exist
config.views.editor.defaultText = "";   // don't need message when creating a new tiddler 
//}}}

Near the end of the movie "8 Seconds",
[[Lane|http://www.lanefrost.com]], Tuff and Cody are flying over the Cheyenne arena,
and Cody reads a poem entitled "Cowboy is His Name."
<html><hr></html>
That poem is really a shortened version of the poem
"[[Legacy of a Rodeo Man]]" by [[Baxter Black|http://www.baxterblack.com/]]
{{{
There's a hundred years of history
and a hundred before that
All gathered in the thinkin'
Goin' on beneath this hat.

The cold flame burns within him
'Til his skin's as cold as ice
And the dues he paid to get here
Are worth every sacrifice.

All the miles spend sleepy drivin'
All the money down the drain,
All the 'if I's' and 'nearly's,'
All the bandages and pain,

All the female tears left dryin',
All the fever and the fight
Are just a small down payment
On the ride he makes tonight.

It's guts and love and glory,
One mortal's chance at fame.
His legacy is rodeo
And cowboy is his name.

©Baxter Black
}}}

!Reference and Lookup
[[DNSStuff|http://dnsstuff.com]] - Fast, accurate and comprehensive tools for DNS, domain name, WHOIS, and IP address information.

!Site filtering using ''[[OpenDNS|http://www.opendns.com/]]'' 
<html><a title="Use OpenDNS to make your Internet faster, safer, and smarter." href="http://www.opendns.com/share/"><img src="http://images.opendns.com/buttons/use_opendns_155x52.gif" width="155" height="52" style="border:0;" alt="Use OpenDNS" /></a></html>
{{{
Adult Site Blocking
Safeguard your kids, protect your students, or limit your corporate liability by blocking adult 
websites. Our adult site blocking solution can be deployed in minutes and provides granular levels 
of blocking. Did we mention it's completely free?
}}}
*How can I tell if OpenDNS is having a problem with its service?
**Look at the OpenDNS System Status page, found at http://system.opendns.com/ and at http://208.67.219.60/ (in case DNS is unavailable).
*Adult site blocking enabled, but I still see adult sites
**If you have turned on the adult site blocking feature on your network in your OpenDNS account but notice an adult site still shows up, make sure you have done the following:
##Confirm you are using OpenDNS by visiting http://welcome.opendns.com.
##Flushed your browser cache, and in some cases, flushed the local resolver cache on your computer.
##Waited approximately 5-10 minutes for your network settings to propagate to our servers.
##Checked our Adult Site Domain Checker for the site in question, http://www.opendns.com/cache/adult .
##Verified your network IP is up to date in your OpenDNS account, in the case of dynamic IPs, and that you are currently using the IP displayed in your network. If you are browsing from a different IP address, your preferences will not be in effect.

![[DynDNS|http://www.dyndns.com]]
[[Main]]
<tabs Photography>
<tab My Cameras>
!Canon SD1000
[[Canon|http://www.usa.canon.com/]] [[SD1000 Product Page|http://www.usa.canon.com/consumer/controller?act=ModelInfoAct&tabact=SupportDetailTabAct&fcategoryid=224&modelid=14901]]
!Canon DC20
</tab>
<tab Camera Reviews>
[[Steve's Digicams|http://www.steves-digicams.com/]]
[[Digital Photography Review|http://www.dpreview.com/]]
</tab>
</tabs>
[[MptwEditTemplate]]
An embedded image looks like this:

[img[Dog shakes hand with soldier|http://www.blogjones.com/Images/dogsoldier.jpg][http://www.blogjones.com/Images/dogsoldier.jpg]]

Here's how the code works:
{{{
[img[alternate text|filename or URL][link]]
}}}

The Alternate Text and Link parameters are optional. You can use just {{{img[filename]}}} if you want, although it is better to include alternate text in case the image does not load for some reason.

[>img[Same dog, floating right|http://www.blogjones.com/Images/dogsoldier.jpg][http://www.blogjones.com/Images/dogsoldier.jpg]] You can also set images to float to the left or the right of the text in your tiddler by using {{{[<img[...]}}} to float left or {{{[>img[...]}}} to float right. 

Two notes about using images:
#First, if you add images to the wiki, the wiki becomes less portable - you have to make sure that the wiki can get to the images you link to. 
#Second, it's considered rude to "hotlink" images on other people's servers. Don't just directly link to someone else's image; download it onto your computer and upload it back to your own server or to a free image host like [[Image Shack|http://www.imageshack.us/]].
/***
| Name:|ExtentTagButtonPlugin|
| Description:|Adds a New tiddler button in the tag drop down|
| Version:|3.0.1 ($Rev: 2263 $)|
| Date:|$Date: 2007-06-13 04:22:32 +1000 (Wed, 13 Jun 2007) $|
| Source:|http://mptw.tiddlyspot.com/#ExtendTagButtonPlugin|
| Author:|Simon Baird <simon.baird@gmail.com>|
| License|http://mptw.tiddlyspot.com/#TheBSDLicense|
***/
//{{{

// can't hijack a click handler. must redefine this entirely.
// would be good to refactor in the core...
// this version copied from 2.1.3 core

// Event handler for clicking on a tiddler tag
function onClickTag(e)
{
	if (!e) var e = window.event;
	var theTarget = resolveTarget(e);
	var popup = Popup.create(this);
	var tag = this.getAttribute("tag");
	var title = this.getAttribute("tiddler");
	if(popup && tag)
		{
		var tagged = store.getTaggedTiddlers(tag);
		var titles = [];
		var li,r;
		for(r=0;r<tagged.length;r++)
			if(tagged[r].title != title)
				titles.push(tagged[r].title);
		var lingo = config.views.wikified.tag;

		wikify("<<newTiddler label:'New tiddler' tag:'"+tag+"'>>",createTiddlyElement(popup,"li")); // <---- the only modification

		if(titles.length > 0)
			{
			var openAll = createTiddlyButton(createTiddlyElement(popup,"li"),lingo.openAllText.format([tag]),lingo.openAllTooltip,onClickTagOpenAll);
			openAll.setAttribute("tag",tag);
			createTiddlyElement(createTiddlyElement(popup,"li",null,"listBreak"),"div");
			for(r=0; r<titles.length; r++)
				{
				createTiddlyLink(createTiddlyElement(popup,"li"),titles[r],true);
				}
			}
		else
			createTiddlyText(createTiddlyElement(popup,"li",null,"disabled"),lingo.popupNone.format([tag]));
		createTiddlyElement(createTiddlyElement(popup,"li",null,"listBreak"),"div");
		var h = createTiddlyLink(createTiddlyElement(popup,"li"),tag,false);
		createTiddlyText(h,lingo.openTag.format([tag]));
		}
	Popup.show(popup,false);
	e.cancelBubble = true;
	if (e.stopPropagation) e.stopPropagation();
	return(false);
}

//}}}
<tabs favapps>
<tab Cross-Platform>
* [[KeePass Password Safe|http://keepass.info]] 
<<<
Free, open source, light-weight and easy-to-use password manager for Windows. You can store your passwords in a highly-encrypted database, which is locked with one master password or key file.
Versions are currently available for Windows, Linux, OS X, Pocket PC and Palm OS.  The beauty of this is that the same Password database file can be utilized on multiple platforms.  I run ~KeePass on my Windows desktop, [[my MacBook Pro]], and my Windows Mobile-based cell phone and simply copy the .kdb file between them when I make an update.
<<<
* [[Synergy|http://synergy2.sourceforge.net/]]
<<<
Synergy lets you easily share a single mouse and keyboard between multiple computers with different operating systems, each with its own display, without special hardware. It's intended for users with multiple computers on their desk since each system uses its own monitor(s).
<<<
* [[Wireshark|http://www.wireshark.org/]]
<<<
Wireshark is the world's foremost network protocol analyzer, and is the standard in many industries.
It is the continuation of a project that started in 1998 under the name of Ethereal. Hundreds of developers around the world have contributed to it, and it is still under active development.
<<<
</tab>
<tab Windows FOSS>
* [[ArsClip|http://www.joejoesoft.com/vcms/97/]]
<<<
~ArsClip is a FREE (freeware) utility for the windows clipboard. ~ArsClip monitors the clipboard and keeps track of the entries. Press a configurable hotkey and select an item (or items) to quickly paste into a program.
<<<
* [[FreeRIP|http://www.mgshareware.com/frmmain.shtml]]
<<<
~FreeRip is a freeware Windows application that lets you save audio CD tracks to Wav, MP3, WMA, Ogg Vorbis or FLAC audio files (this process is known as "ripping"). ~FreeRIP is also an audio file converter and it can convert audio files from one of the named formats to another.
<<<
* [[Hamachi|https://secure.logmein.com/products/hamachi/default.asp]]
<<<
Hamachi is a VPN service that easily sets up in 10 minutes, and enables secure remote access to your business network, anywhere there's an Internet connection. [[More details...|https://secure.logmein.com/products/hamachi/advantages.asp]]
<<<
* [[Scite|http://scintilla.sourceforge.net/SciTE.html]]
<<<
SciTE is a SCIntilla based Text Editor. Originally built to demonstrate [[Scintilla|http://www.scintilla.org/]], it has grown to be a generally useful editor with facilities for building and running programs. It is best used for jobs with simple configurations.
<<<
</tab>
<tab Mac FOSS>
* [[Adium|http://adiumx.com/]]
<<<
Connect to multiple IM accounts simultaneously in a single app, including: AOL IM, MSN, and Jabber. Beautiful, themable interface.
<<<
</tab>
<tab Commercial Apps>
* [[Total Commander]]
* [[SecureCRT]]
</tab>
</tabs>
! [[SendUIt|http://senduit.com/]] 
Simple, clean - Upload a file, give it an expiration time (30 minutes to 1 week) and e-mail a link to the recipient.
! [[Drop.io|http://drop.io]] 
..enables you to create simple private exchange points called "drops" (see [[this one|http://drop.io/DakotaGeek]]). 
The service has no email signup and no "accounts". Each drop is private, and only as accessible as you choose to deliberately make it. Create multiple drops, add any type of media, and share or subscribe as you want. 
To make a drop just click the big red button that says 'drop it'.
** Drop can be set to expire in 1 day, 1 week, 1 month, 6 months or 1 year (renewable).
! Windows Live [[FolderShare|https://www.foldershare.com/home.aspx]]
..requires an agent on the computer, but will automatically (if connected to the internet) synchronize files between two or more computers.  [[FolderShare|https://www.foldershare.com/home.aspx]] also permits the user to remotely access files on connected computers.
! Others
* [[GigaSize|http://www.gigasize.com]] - ~GigaSize is a user friendly service that allows you to transfer, download and store data in an organized and secure manner. You can use ~GigaSize to upload and share unlimited numbers of files with friends, family and colleagues.
**''Free Account'' - Files up to 1.5 Gigabytes stored for 90 days
* [[SendThisFile|http://www.sendthisfile.com]] - ~SendThisFile® allows you to easily transfer large files to anyone, anywhere.
**''Free Account'' - Files up to 2 Gigabytes stored for 3 days
* [[Dropload|http://www.dropload.com/]] - Dropload is a place for you to drop your files off and have them picked up by someone else at a later time.  Recipients you specify are sent an email with instructions on how to download the file. Files are removed from the system after 7 days, regardless if they have been picked up or not. You can upload any type of file, mp3, movies, pdfs, etc up to 100MB each! Recipient can be anyone with an email address.
**''Free Account'' - Files up to 100Megabytes stored for 7 days
<tabs Photography>
<tab My Cameras>
!Canon T70
* Specs
* User Reviews at [[Photography Review|http://www.photographyreview.com/cat/cameras/film-cameras/35mm/canon/PRD_84437_3105crx.aspx]] and at [[eOpinions|http://www.epinions.com/pr-Canon_T70_35mm_SLR_Camera]]
</tab>
<tab Camera Reviews>
[[Steve's Digicams|http://www.steves-digicams.com/]]
[[Digital Photography Review|http://www.dpreview.com/]]
</tab>
</tabs>
I found this filter string in the article "[[Ethereal: Capturing only Cisco Discovery Protocol (CDP) Packets|http://www.ethereal.com/lists/ethereal-users/200203/msg00017.html]]" it applies directly to [[tcpdump|http://www.tcpdump.org/]] as well as [[windump|http://www.winpcap.org/windump/]]. ([[http://www.ethereal.com/|Ethereal]] (now [[http://www.wireshark.org/|WireShark]]), tcpdump and windump all use the same underlying capabilities of the [[Berkeley Packet Filter|http://www.unixguide.net/compaq/faq/Network7.shtml]] language for filtering packets.)

To capture a single [[CDP|http://www.javvin.com/protocolCDP.html]] packet, type the following at a command-prompt:
//''Note'': this requires admin privileges in Windows or root privileges on a *nix box//
{{{
c:\>windump -nnvi 1 –s 1500 –c 1 "ether[20:2]==0x2000"
 - or -
#>tcpdump -nnvi eth0 -s 1500 -c 1 'ether[20:2]==0x2000'
}}}

To break that down, we're doing the following:
**''@@bgcolor(#000000):color(#ffffff):windump@@'' :: running windump (interchangeable with tcpdump)
**''@@bgcolor(#000000):color(#ffffff):-nn@@'' :: not resolving dns or port numbers
**''@@bgcolor(#000000):color(#ffffff):v@@'' :: using verbose mode
**''@@bgcolor(#000000):color(#ffffff):i 1@@'' :: listening on interface #1
**''@@bgcolor(#000000):color(#ffffff):-s 1500@@'' :: capturing up to 1500 bytes (the whole packet)
**''@@bgcolor(#000000):color(#ffffff):-c 1@@'' :: counting to 1 packet that matches the filter before exiting (and finally)
**''@@bgcolor(#000000):color(#ffffff):"ether[20:2]==0x2000"@@'' :: checking bytes 20-21 from the start of the ethernet header for a hexidecimal value of 2000
//For reference, the entire filter expression, as presented at the linked page, is:
<html><p style='margin-top:0in;margin-right:37.8pt;margin-bottom:0in;margin-left:.75in;margin-bottom:.0001pt;background:black'><span style='font-size:9.0pt;font-family:Courier;color:lime;background:black;mso-highlight:black'> “ether[12:2] <= 1500 && ether[14:2] ==
0xAAAA && ether[16:1] == 0x03 && ether[17:2] == 0x0000 && ether[19:1] == 0x0C && ether[20:2] == 0x2000” </span></p></html>
so if your capture is displaying something different than shown below, go ahead and use the rest of the variables between the quotes on your command line.//

''Important'': windump uses double-quotes (") but tcpdump uses single-quotes (')

!The Result
<html>
<p style='margin-top:0in;margin-right:37.8pt;margin-bottom:0in;margin-left:.75in;margin-bottom:.0001pt;background:black'><span style='font-size:9.0pt;font-family:Courier;color:lime'><o:p>&nbsp;</o:p></span></p>
<p style='margin-top:0in;margin-right:37.8pt;margin-bottom:0in;margin-left:.75in;margin-bottom:.0001pt;background:black'><span style='font-size:9.0pt;font-family:Courier;color:lime'>C:\ windump -nnvi 1 -s 1500 -c 1 "ether[20:2]==0x2000"</span></p>
<p style='margin-top:0in;margin-right:37.8pt;margin-bottom:0in;margin-left:.75in;margin-bottom:.0001pt;background:black'>
<span style='font-size:9.0pt;font-family:Courier;color:lime'>windump: listening on \Device\NPF_{whatever-blah-blah-blah-and-so-on}</span></p>
<p style='margin-top:0in;margin-right:37.8pt;margin-bottom:0in;margin-left:.75in;margin-bottom:.0001pt;background:black'>
<span style='font-size:9.0pt;font-family:Courier;color:lime'>12:17:54.743016 CDPv2, ttl: 180s, checksum: 692 (unverified), length 407</p>

<p style='margin-top:0in;margin-right:37.8pt;margin-bottom:0in;margin-left:.75in;margin-bottom:.0001pt;background:black'>________
<span style='font-size:9.0pt;font-family:Courier;color:black;background:yellow;mso-highlight:yellow'>Device-ID</span><span
style='font-size:9.0pt;font-family:Courier;color:lime'> (0x01), length: 25 bytes:'</span>
<span style='font-size:9.0pt;font-family:Courier;color:black;background:yellow;mso-highlight:yellow'>HostName</span>
<span style='font-size:9.0pt;font-family:Courier;color:lime'>.your.net' </span></p>

<p style='margin-top:0in;margin-right:37.8pt;margin-bottom:0in;margin-left:.75in;margin-bottom:.0001pt;background:black'>________
<span style='font-size:9.0pt;font-family:Courier;color:black;background:yellow;mso-highlight:yellow'>Address</span>
<span style='font-size:9.0pt;font-family:Courier;color:lime'> (0x02), length: 13 bytes: IPv4 (1) </span>
<span style='font-size:9.0pt;font-family:Courier;color:black;background:yellow;mso-highlight:yellow'>192.168.254.26</span></p>

<p style='margin-top:0in;margin-right:37.8pt;margin-bottom:0in;margin-left:.75in;margin-bottom:.0001pt;background:black'>________
<span style='font-size:9.0pt;font-family:Courier;color:black;background:yellow;mso-highlight:yellow'>Port-ID</span>
<span style='font-size:9.0pt;font-family:Courier;color:lime'> (0x03), length: 15 bytes: '</span>
<span style='font-size:9.0pt;font-family:Courier;color:black;background:yellow;mso-highlight:yellow'>FastEthernet0/1</span></p>

<p style='margin-top:0in;margin-right:37.8pt;margin-bottom:0in;margin-left:.75in;margin-bottom:.0001pt;background:black'>________
<span style='font-size:9.0pt;font-family:Courier;color:lime'>Capability (0x04), length: 4 bytes:(0x00000028): L2 Switch, IGMP snooping </span></p>

<p style='margin-top:0in;margin-right:37.8pt;margin-bottom:0in;margin-left:.75in;margin-bottom:.0001pt;background:black'>________
<span style='font-size:9.0pt;font-family:Courier;color:lime'>Version String (0x05), length: 219 bytes: </span></p>

<p style='margin-top:0in;margin-right:37.8pt;margin-bottom:0in;margin-left:.75in;margin-bottom:.0001pt;background:black'>________
<span style='font-size:9.0pt;font-family:Courier;color:lime'>Cisco Internetwork Operating System Software </span></p>

<p style='margin-top:0in;margin-right:37.8pt;margin-bottom:0in;margin-left:.75in;margin-bottom:.0001pt;background:black'>________
<span style='font-size:9.0pt;font-family:Courier;color:lime'>IOS (tm) C2950 Software (C2950-I6Q4L2-M), Version 12.1(22)EA5, REL...</span></p>

<p style='margin-top:0in;margin-right:37.8pt;margin-bottom:0in;margin-left:.75in;margin-bottom:.0001pt;background:black'>________
<span style='font-size:9.0pt;font-family:Courier;color:lime'>Copyright (c) 1986-2005 by cisco Systems, Inc.</span></p>

<p style='margin-top:0in;margin-right:37.8pt;margin-bottom:0in;margin-left:.75in;margin-bottom:.0001pt;background:black'>________
<span style='font-size:9.0pt;font-family:Courier;color:lime'>Compiled Wed 13-Jul-05 22:09 by antonino</span></p>

<p style='margin-top:0in;margin-right:37.8pt;margin-bottom:0in;margin-left:.75in;margin-bottom:.0001pt;background:black'>________
<span style='font-size:9.0pt;font-family:Courier;color:lime'>Platform (0x06), length: 17 bytes: 'cisco WS-C2950-24' </span></p>

<p style='margin-top:0in;margin-right:37.8pt;margin-bottom:0in;margin-left:.75in;margin-bottom:.0001pt;background:black'>________
<span style='font-size:9.0pt;font-family:Courier;color:lime'>Protocol-Hello option (0x08), length:32 bytes: </span></p>

<p style='margin-top:0in;margin-right:37.8pt;margin-bottom:0in;margin-left:.75in;margin-bottom:.0001pt;background:black'>________
<span style='font-size:9.0pt;font-family:Courier;color:lime'>VTP Management Domain (0x09), length: 8 bytes: 'your_vlan' </span></p>

<p style='margin-top:0in;margin-right:37.8pt;margin-bottom:0in;margin-left:.75in;margin-bottom:.0001pt;background:black'>________
<span style='font-size:9.0pt;font-family:Courier;color:lime'>Native </span>
<span style='font-size:9.0pt;font-family:Courier;color:black;background:yellow;mso-highlight:yellow'>VLAN ID</span>
<span style='font-size:9.0pt;font-family:Courier;color:lime'> (0x0a), length: 2 bytes: </span>
<span style='font-size:9.0pt;font-family:Courier;color:black;background:yellow;mso-highlight:yellow'>56</span></p>

<p style='margin-top:0in;margin-right:37.8pt;margin-bottom:0in;margin-left:.75in;margin-bottom:.0001pt;background:black'>________
<span style='font-size:9.0pt;font-family:Courier;color:lime'>Duplex (0x0b), length: 1 byte: full </span></p>

<p style='margin-top:0in;margin-right:37.8pt;margin-bottom:0in;margin-left:.75in;margin-bottom:.0001pt;background:black'>________
<span style='font-size:9.0pt;font-family:Courier;color:lime'>AVVID trust bitmap (0x12), length: 1 byte: 0x00 </span></p>

<p style='margin-top:0in;margin-right:37.8pt;margin-bottom:0in;margin-left:.75in;margin-bottom:.0001pt;background:black'>________
<span style='font-size:9.0pt;font-family:Courier;color:lime'>AVVID untrusted ports CoS (0x13), length: 1 byte: 0x00 </span></p>

<p style='margin-top:0in;margin-right:37.8pt;margin-bottom:0in;margin-left:.75in;margin-bottom:.0001pt;background:black'>________
<span style='font-size:9.0pt;font-family:Courier;color:lime'>Management Addresses (0x16), length: 13 bytes: IPv4 (1) 192.168.254.26 </span></p>

<p style='margin-top:0in;margin-right:37.8pt;margin-bottom:0in;margin-left:.75in;margin-bottom:.0001pt;background:black'>
<span style='font-size:9.0pt;font-family:Courier;color:lime'>1 packets captured </span></p>

<p style='margin-top:0in;margin-right:37.8pt;margin-bottom:0in;margin-left:.75in;margin-bottom:.0001pt;background:black'>
<span style='font-size:9.0pt;font-family:Courier;color:lime'>335 packets received by filter </span></p>

<p style='margin-top:0in;margin-right:37.8pt;margin-bottom:0in;margin-left:.75in;margin-bottom:.0001pt;background:black'>
<span style='font-size:9.0pt;font-family:Courier;color:lime'>0 packets dropped by kernel </span></p>

<p style='margin-top:0in;margin-right:37.8pt;margin-bottom:0in;margin-left:.75in;margin-bottom:.0001pt;background:black'>
<span style='font-size:9.0pt;font-family:Courier;color:lime'><o:p>&nbsp;</o:p></span></p>

<p><span style='font-size:10.0pt;font-family:Courier'><o:p>&nbsp;</o:p></span></p>
</html>
While this output isn’t as nicely-formatted as [[CDPR|http://freshmeat.net/projects/cdpr/]], it contains all the information we’re usually looking for.
*''~Device-ID'' //is the Hostname of the switch//
*''Address'' //is the Management IP//
*''~Port-ID'' //is the Interface you're attached to//
.. and as an added bonus ..
*''VLAN ID'' //is the VLAN of that interface (not the switch Mgm’t VLAN)

Not bad for one packet, eh? With all the [[expoits|http://www.antiserver.it/Cisco-Exploit]] against Cisco devices, it's easy to see why Cisco recommends disabling CDP on end-user access ports.
<tabs FTPlayers>
<tab CCM>
<html>
<embed src="http://www.finetune.com/player/FineTuneShell.swf?pinst=551EA6C443F048E29483967E56E561FB" quality="high" flashVars="pinst=551EA6C443F048E29483967E56E561FB" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="215" height="220">
</embed>
</html>
</tab>
<tab Country>
<html>
<embed src="http://www.finetune.com/player/FineTuneShell.swf?pinst=551EA6C443F048E29483967E56E561FB" quality="high" flashVars="pinst=551EA6C443F048E29483967E56E561FB" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="215" height="220">
</embed>
</html>
</tab>
<tab Classic Rock>
<html>
<embed src="http://www.finetune.com/player/FineTuneShell.swf?pinst=551EA6C443F048E29483967E56E561FB" quality="high" flashVars="pinst=551EA6C443F048E29483967E56E561FB" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="215" height="220">
</embed>
</html>
</tab>
</tabs>
''[[FireShot|https://addons.mozilla.org/en-US/firefox/addon/5648]]'' is a [[Firefox extension|https://addons.mozilla.org/en-US/firefox/]] that creates screenshots of web pages. Unlike other extensions, this plugin provides a set of editing and annotation tools, which let users quickly modify captures and insert text and graphical annotations. Such functionality will be especially useful for web designers, testers and content reviewers. It's possible to choose whether entire web page or only visible part of this page should be captured. Screenshots can be saved to disk (PNG, JPEG, BMP), copied to clipboard, e-mailed and sent to external editor for further processing.
[[Instructables Flash Drive Mods group|http://www.instructables.com/group/flashdrivemods/]]
/***
|Name|FontSizePlugin|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#FontSizePlugin|
|Version|1.0|
|Requires|~TW2.x|
!Description:
Resize tiddler text on the fly. The text size is remembered between sessions by use of a cookie.
You can customize the maximum and minimum allowed sizes.
(only affects tiddler content text, not any other text)

Also, you can load a TW file with a font-size specified in the url.
Eg: http://tw.lewcid.org/#font:110

!Demo:
Try using the font-size buttons in the sidebar, or in the MainMenu above.

!Installation:
Copy the contents of this tiddler to your TW, tag with systemConfig, save and reload your TW.
Then put {{{<<fontSize "font-size:">>}}} in your SideBarOptions tiddler, or anywhere else that you might like.

!Usage
{{{<<fontSize>>}}} results in <<fontSize>>
{{{<<fontSize font-size: >>}}} results in <<fontSize font-size:>>

!Customizing:
The buttons and prefix text are wrapped in a span with class fontResizer, for easy css styling.
To change the default font-size, and the maximum and minimum font-size allowed, edit the config.fontSize.settings section of the code below.

!Notes:
This plugin assumes that the initial font-size is 100% and then increases or decreases the size by 10%. This stepsize of 10% can also be customized.

!History:
*27-07-06, version 1.0 : prevented double clicks from triggering editing of containing tiddler.
*25-07-06,  version 0.9

!Code
***/

//{{{
config.fontSize={};

//configuration settings
config.fontSize.settings =
{
            defaultSize : 100,  // all sizes in %
            maxSize : 200,
            minSize : 40,
            stepSize : 10
};

//startup code
var fontSettings = config.fontSize.settings;

if (!config.options.txtFontSize)
            {config.options.txtFontSize = fontSettings.defaultSize;
            saveOptionCookie("txtFontSize");}
setStylesheet(".tiddler .viewer {font-size:"+config.options.txtFontSize+"%;}\n","fontResizerStyles");
setStylesheet("#contentWrapper .fontResizer .button {display:inline;font-size:105%; font-weight:bold; margin:0 1px; padding: 0 3px; text-align:center !important;}\n .fontResizer {margin:0 0.5em;}","fontResizerButtonStyles");

//macro
config.macros.fontSize={};
config.macros.fontSize.handler = function (place,macroName,params,wikifier,paramString,tiddler)
{

               var sp = createTiddlyElement(place,"span",null,"fontResizer");
               sp.ondblclick=this.onDblClick;
               if (params[0])
                           createTiddlyText(sp,params[0]);
               createTiddlyButton(sp,"+","increase font-size",this.incFont);
               createTiddlyButton(sp,"=","reset font-size",this.resetFont);
               createTiddlyButton(sp,"–","decrease font-size",this.decFont);
}

config.macros.fontSize.onDblClick = function (e)
{
             if (!e) var e = window.event;
             e.cancelBubble = true;
             if (e.stopPropagation) e.stopPropagation();
             return false;
}

config.macros.fontSize.setFont = function ()
{
               saveOptionCookie("txtFontSize");
               setStylesheet(".tiddler .viewer {font-size:"+config.options.txtFontSize+"%;}\n","fontResizerStyles");
}

config.macros.fontSize.incFont=function()
{
               if (config.options.txtFontSize < fontSettings.maxSize)
                  config.options.txtFontSize = (config.options.txtFontSize*1)+fontSettings.stepSize;
               config.macros.fontSize.setFont();
}

config.macros.fontSize.decFont=function()
{

               if (config.options.txtFontSize > fontSettings.minSize)
                  config.options.txtFontSize = (config.options.txtFontSize*1) - fontSettings.stepSize;
               config.macros.fontSize.setFont();
}

config.macros.fontSize.resetFont=function()
{

               config.options.txtFontSize=fontSettings.defaultSize;
               config.macros.fontSize.setFont();
}

config.paramifiers.font =
{
               onstart: function(v)
                  {
                   config.options.txtFontSize = v;
                   config.macros.fontSize.setFont();
                  }
};
//}}}

*[[FreeSMUG|http://www.freesmug.org/]]
<<<
~FreeSoftware Mac User Group - Tutorial, info, news, help on end-users Free and ~OpenSource Mac software
<<<
*[[Freeware Wiki|http://freewarewiki.pbwiki.com/]]
<<<
A place for you to look for great freeware that's been tried and reviewed by people just like you. The only bad software you will find here is always part of a warning to stay away from it. If you like, you can post your own reviews here.
<<<
*[[Open Source Mac|http://www.opensourcemac.org/]]
<<<
Free and open-source software is good for you and good for the world. This is the best Mac software that we know of.
<<<
*[[Open Source Windows|http://www.opensourcewindows.org/]]
<<<
Free and open-source software is good for you and for the world. This is the best Windows software that we know of.
No adware, no spyware, just good software.
<<<
* [[Portable Freeware|http://www.portablefreeware.com/]]
<<<
Dedicated to the collection and cataloging of Windows freeware that can be extracted to any directory and run independently without prior installation. These can be carried around on a memory stick / USB flash drive, or copied / migrated from PC to PC via simple copying of files. Hence the term //portable freeware//.
<<<
* [[Portable Apps Suite|http://portableapps.com/]]
<<<
* Convenient
Now you can carry your favorite computer programs along with all of your bookmarks, settings, email and more with you. Use them on any Windows computer. All without leaving any personal data behind.
* Open
[[PortableApps.com|http://portableapps.com]] provides a truly open platform that works with any hardware you like (USB flash drive, iPod, portable hard drive, etc). It's open source built around an open format that any hardware vendor or software developer can use.
* Free
The Portable Apps Suite™ is free. It contains no spyware. There are no advertisements. It isn't a limited or trial version. There is no additional hardware or software to buy. You don't even have to give out your email address. It's 100% free to use, free to copy and free to share.
<<<
<tabs Funny-Videos>
<tab Black Knight Vader>
<html><object width="425" height="353"><param name="movie" value="http://www.youtube.com/v/leEsz9ci5XE"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/leEsz9ci5XE" type="application/x-shockwave-flash" wmode="transparent" width="425" height="353"></embed></object></html>
</tab>
<tab Blues Brothers>
<html><object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/-uPP9A9o7dQ"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/-uPP9A9o7dQ" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object></html>
</tab>
<tab Target Practice>
<html><object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/ydPRQdde13c"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/ydPRQdde13c" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object></html>
I love it!  This looks like a Cisco 2500 or 2600-series router.
</tab>
<tab Monk Help Desk>
!!''Monastery Help Desk''
<html><object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/pQHX-SjgQvQ"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/pQHX-SjgQvQ" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object></html>
</tab>
<tab Internet Help Desk>
!!''Internet Help Desk''
<html><object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/diWiXvvR8HA"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/diWiXvvR8HA" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object></html>
</tab>
</tabs>
[[GPXSonar|http://gpxsonar.homeip.net/cs/]] is a geocaching application for Pocket PC 2003 and above written by a geocacher for other geocachers.

It is more than a simple 'cache page viewer' as it allows you to manage the various aspects of your caching experience: it is intended to be a tool that you can use in the field as well as a helpful memento when you get back and log your finds.
![[GeekTools|http://www.geektools.com/]]
*Traceroute
*Whois
*RFC's
*Hotspots
*Geek Hotels
*[[The Master Genealogist|http://www.whollygenes.com/tmg.htm]]
*[[Geni|http://www.geni.com]]
! [img[http://www.groundspeak.com/images/nav/geocaching_box.gif]] [[Geocaching|http://www.geocaching.com]]
Geocaching is an entertaining adventure game for gps users. Participating in a cache hunt is a good way to take advantage of the wonderful features and capability of a gps unit. The basic idea is to have individuals and organizations set up caches all over the world and share the locations of these caches on the internet. GPS users can then use the location coordinates to find the caches. Once found, a cache may provide the visitor with a wide variety of rewards. All the visitor is asked to do is if they get something they should try to leave something for the cache.
*  "The most fun you can have with 12 billion dollars in military hardware (without blowing anything up)."
*  "I use billion-dollar satellites to find Tupperware in the woods. What's your hobby?"
*  "A sport where one uses expensive global positioning technology to locate useless dollar store items in remote locations of the planet."
<html><a href="http://www.geocaching.com/profile/?guid=779b780a-bf10-4437-bcaa-7fc809990224" target="_blank"><img src="http://img.geocaching.com/stats/img.aspx?txt=Let's+go+geocaching!&uid=779b780a-bf10-4437-bcaa-7fc809990224&bg=1" border="0" title="Profile for Weidners" alt="Profile for Weidners"></a></html>
! [img[http://www.groundspeak.com/images/nav/waymarking_box.gif]] [[Waymarking|http://www.waymarking.com/]]
Waymarking is a way to mark unique locations on the planet and give them a voice. While GPS technology allows us to pinpoint any location on the planet, mark the location, and share it with others, Waymarking is the toolset for categorizing and adding unique information for that location. Groundspeak's slogan is "The Language of Location" and our goal is to give people the tools to help others share and discover unique and interesting locations on the planet. We invite you to share your part of the world with us through Waymarking.com. 
! [[Benchmark Hunting|http://www.geocaching.com/mark/]]
Using your GPS unit and/or written directions provided by NGS, which are available for review by the public, you can seek out NGS survey markers and other items that have been marked in the USA.
At the top of peaks or in a village square, you probably walk by at least one every day.
!!What is a benchmark?
A benchmark is a point whose position is known to a high degree of accuracy and is normally marked in some way. The marker is often a metal disk made for this purpose, but it can also be a church spire, a radio tower, a mark chiseled into stone, or a metal rod driven into the ground. Over two centuries or so, many other objects of greater or lesser permanence have been used. Benchmarks can be found at various locations all over the United States. They are used by land surveyors, builders and engineers, map makers, and other professionals who need an accurate answer to the question, "Where?" Many of these markers are part of the geodetic control network (technically known as the National Spatial Reference System, or NSRS) created and maintained by NOAA's [[National Geodetic Survey|http://www.ngs.noaa.gov/]] (NGS). 
! Cache Stats
<html>

<p><b>My Cache Stats as of 6/25/2008 </b><EM>(Get your own CacheStats at </EM><a href="http://www.logicweave.com">
<EM>www.logicweave.com</EM></a>)</p>
<TABLE cellSpacing="0" cellPadding="1" width="100%" border="1" style="border-left-style: none; border-right-style: none; border-top: 1.5pt solid black; border-bottom: 1.5pt solid black">
<TR>
<TD style="background-color: #004000; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid black" colSpan="4"><b><font color="White">Cache Finds</font></b></TD>
</TR>
<TR>
<TD style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD" width="15%"><b>Total Found:</b></TD>
<TD style="border-style: none; border-bottom: .75pt solid silver" width="35%">102 (# found/attended logs)</TD>
<TD style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD" width="20%"><b>Find Rate:</b></TD>
<TD style="border-style: none; border-bottom: .75pt solid silver" width="30%">0.046 per day (0.3 per week, 16 per year)</TD>
</TR>
<TR>
<TD style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD"><b>Caches:</b></TD>
<TD style="border-style: none; border-bottom: .75pt solid silver">99 (# unique caches visited)</TD>
<TD style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD"><b>Avg. difficulty / terrain:</b></TD>
<TD style="border-style: none; border-bottom: .75pt solid silver">1.55 / 1.47</TD>
</TR>
<TR>
<TD style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD"><b> #&nbsp;Archived:</b></TD>
<TD style="border-style: none; border-bottom: .75pt solid silver">20 (20%)</TD>
<TD style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD"><b>FTFs:</b></TD>
<TD style="border-style: none; border-bottom: .75pt solid silver">(unknown)</TD>
</TR>
<TR>
<TD style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD"><b>Avg. in 1 day:</b></TD>
<TD style="border-style: none; border-bottom: .75pt solid silver">1.7</TD>
<TD style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD"><b>Oldest Cache:</b></TD>
<TD style="border-style: none; border-bottom: .75pt solid silver"><a href="http://www.geocaching.com/seek/cache_details.aspx?wp=GCK0N7">A&M National Christmas Tree Cache</a> (GCK0N7 placed 12/17/1901)</TD>
</TR>
<TR>
<TD style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD"><b>Most in 1 day:</b></TD>
<TD style="border-style: none; border-bottom: .75pt solid silver">5</TD>
<TD style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD"><b><B>Most in 1 month:</B></b></TD>
<TD style="border-style: none; border-bottom: .75pt solid silver">13</TD>
</TR>
<!-- BeginMyGoal -->
<TR>
<TD style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD"><b>My Goal:</b></TD>
<TD style="border-style: none; border-bottom: .75pt solid silver">125 by 12/31/2008</TD>
<TD style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD">&nbsp;</TD>
<TD style="border-style: none; border-bottom: .75pt solid silver">&nbsp;</TD>
</TR>
<!-- EndMyGoal -->
</TABLE>
<br>
<TABLE cellSpacing="0" cellPadding="1" width="100%" border="1" style="border-left-style: none; border-right-style: none; border-top: 1.5pt solid black; border-bottom: 1.5pt solid black">
<tr>
<td style="background-color: #004000; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid black" colSpan="4"><b><font color="White">Days Cached</font></b></td>
</tr>
<TR>
<TD style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD" width="20%"><b> Total days cached:</b></TD>
<TD style="border-style: none; border-bottom: .75pt solid silver" width="30%">60 (every 36.7 days or 2.7%)</TD>
<TD style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD" width="38%"><b>Most consecutive days with a find:</b></TD>
<TD style="border-style: none; border-bottom: .75pt solid silver" width="12%">5</TD>
</TR>
<TR>
<TD style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD"><b><B>Most in 1 month:</B></b></TD>
<TD style="border-style: none; border-bottom: .75pt solid silver">5</TD>
<TD style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD"><b><B>Most consecutive days without a find:</B></b></TD>
<TD style="border-style: none; border-bottom: .75pt solid silver">524</TD>
</TR>
</TABLE>

<br>
<table cellSpacing="0" cellPadding="1" width="100%" border="1" style="border-left-style: none; border-right-style: none; border-top: 1.5pt solid black; border-bottom: 1.5pt solid black">
<tr>
<td style="background-color: #004000; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid black" colSpan="4"><b><font color="White">History</font></b></td>
</tr>
<tr>
<td style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD"><b>Year</b></td>
<td style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD"><b>Total Found</b></td>
<td style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD"><b>Rate</b></td>
<td style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD"><b>Days Cached / Frequency</b></td>
</tr>
<tr><td style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD">2002</td><td style="border-style: none; border-bottom: .75pt solid silver">10</td><td style="border-style: none; border-bottom: .75pt solid silver">0.051</td><td style="border-style: none; border-bottom: .75pt solid silver">9 / every 21.8 days</td></tr>
<tr><td style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD">2003</td><td style="border-style: none; border-bottom: .75pt solid silver">6</td><td style="border-style: none; border-bottom: .75pt solid silver">0.016</td><td style="border-style: none; border-bottom: .75pt solid silver">4 / every 91.3 days</td></tr>
<tr><td style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD">2004</td><td style="border-style: none; border-bottom: .75pt solid silver">5</td><td style="border-style: none; border-bottom: .75pt solid silver">0.014</td><td style="border-style: none; border-bottom: .75pt solid silver">3 / every 121.7 days</td></tr>
<tr><td style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD">2005</td><td style="border-style: none; border-bottom: .75pt solid silver">25</td><td style="border-style: none; border-bottom: .75pt solid silver">0.068</td><td style="border-style: none; border-bottom: .75pt solid silver">16 / every 22.8 days</td></tr>
<tr><td style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD">2006</td><td style="border-style: none; border-bottom: .75pt solid silver">13</td><td style="border-style: none; border-bottom: .75pt solid silver">0.036</td><td style="border-style: none; border-bottom: .75pt solid silver">9 / every 40.6 days</td></tr>
<tr><td style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD">2007</td><td style="border-style: none; border-bottom: .75pt solid silver">32</td><td style="border-style: none; border-bottom: .75pt solid silver">0.088</td><td style="border-style: none; border-bottom: .75pt solid silver">14 / every 26.1 days</td></tr>
<tr><td style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD">2008</td><td style="border-style: none; border-bottom: .75pt solid silver">11</td><td style="border-style: none; border-bottom: .75pt solid silver">0.061</td><td style="border-style: none; border-bottom: .75pt solid silver">5 / every 35.8 days</td></tr>

</table>


<br>
<table cellSpacing="0" cellPadding="1" width="100%" border="1" style="border-left-style: none; border-right-style: none; border-top: 1.5pt solid black; border-bottom: 1.5pt solid black">
<tr>
<td style="background-color: #004000; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid black" colSpan="4"><b><font color="White">Milestones</font></b></td>
</tr>
<tr>
<td style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD"><b>Number&nbsp;</b></td>
<td style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD"><b>Date</b></td>
<td style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD"><b>Cache</b></td>
<td style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD"><b># Days between</b></td>
</tr>
<tr><td style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD">#1</td><td style="border-style: none; border-bottom: .75pt solid silver">6/19/2002</td><td style="border-style: none; border-bottom: .75pt solid silver"><a href="http://www.geocaching.com/seek/cache_details.aspx?wp=GC1AB5">Baby Bear 2</a></td><td style="border-style: none; border-bottom: .75pt solid silver">&nbsp;</td></tr>
<tr><td style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD">#25</td><td style="border-style: none; border-bottom: .75pt solid silver">4/2/2005</td><td style="border-style: none; border-bottom: .75pt solid silver"><a href="http://www.geocaching.com/seek/cache_details.aspx?wp=GCGGTT">A SD Capitol View</a></td><td style="border-style: none; border-bottom: .75pt solid silver">1018</td></tr>
<tr><td style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD">#50</td><td style="border-style: none; border-bottom: .75pt solid silver">1/25/2006</td><td style="border-style: none; border-bottom: .75pt solid silver"><a href="http://www.geocaching.com/seek/cache_details.aspx?wp=GCQ9CA">Hiram's Cache</a></td><td style="border-style: none; border-bottom: .75pt solid silver">298</td></tr>
<tr><td style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD">#75</td><td style="border-style: none; border-bottom: .75pt solid silver">7/1/2007</td><td style="border-style: none; border-bottom: .75pt solid silver"><a href="http://www.geocaching.com/seek/cache_details.aspx?wp=GCWGVC">Cache of a Feather</a></td><td style="border-style: none; border-bottom: .75pt solid silver">521</td></tr>
<tr><td style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD">#100</td><td style="border-style: none; border-bottom: .75pt solid silver">6/17/2008</td><td style="border-style: none; border-bottom: .75pt solid silver"><a href="http://www.geocaching.com/seek/cache_details.aspx?wp=GC9D91">Out of the Swamp</a></td><td style="border-style: none; border-bottom: .75pt solid silver">352</td></tr>

</table>


<br>
<table cellSpacing="0" cellPadding="1" width="100%" border="0" ID="Table2">
<tr vAlign="top">
<td width="50%">
<TABLE cellSpacing="0" cellPadding="1" width="100%" border="1" style="border-left-style: none; border-right-style: none; border-top: 1.5pt solid black; border-bottom: 1.5pt solid black" ID="Table3">
<tr>
<td style="background-color: #004000; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid black" colSpan="4"><b><font color="White">Size 
Breakdown</font></b></td>
</tr>
<TR>
<TD style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD"><b>Size</b></TD>
<TD style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD"><b># Found</b></TD>
<TD style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD"><b>Percentage</b></TD>
</TR>
<tr><td style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD">Regular</td><td style="border-style: none; border-bottom: .75pt solid silver">52</td><td style="border-style: none; border-bottom: .75pt solid silver">51.0</td></tr>
<tr><td style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD">Micro</td><td style="border-style: none; border-bottom: .75pt solid silver">17</td><td style="border-style: none; border-bottom: .75pt solid silver">16.7</td></tr>
<tr><td style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD">Virtual</td><td style="border-style: none; border-bottom: .75pt solid silver">15</td><td style="border-style: none; border-bottom: .75pt solid silver">14.7</td></tr>
<tr><td style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD">Small</td><td style="border-style: none; border-bottom: .75pt solid silver">11</td><td style="border-style: none; border-bottom: .75pt solid silver">10.8</td></tr>
<tr><td style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD">Not chosen</td><td style="border-style: none; border-bottom: .75pt solid silver">3</td><td style="border-style: none; border-bottom: .75pt solid silver">2.9</td></tr>
<tr><td style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD">Large</td><td style="border-style: none; border-bottom: .75pt solid silver">2</td><td style="border-style: none; border-bottom: .75pt solid silver">2.0</td></tr>
<tr><td style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD">Other</td><td style="border-style: none; border-bottom: .75pt solid silver">2</td><td style="border-style: none; border-bottom: .75pt solid silver">2.0</td></tr>
</TABLE>
</td>
<td>
<TABLE cellSpacing="0" cellPadding="1" width="100%" border="1" style="border-left-style: none; border-right-style: none; border-top: 1.5pt solid black; border-bottom: 1.5pt solid black" ID="Table4">
<tr>
<td style="background-color: #004000; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid black" colSpan="4"><b><font color="White">Type 
Breakdown</font></b></td>
</tr>
<TR>
<TD style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD"><b>Type</b></TD>
<TD style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD"><b># Found</b></TD>
<TD style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD"><b>Percentage</b></TD>
</TR>
<tr><td style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD">Traditional Cache</td><td style="border-style: none; border-bottom: .75pt solid silver">80</td><td style="border-style: none; border-bottom: .75pt solid silver">78.4</td></tr>
<tr><td style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD">Virtual Cache</td><td style="border-style: none; border-bottom: .75pt solid silver">14</td><td style="border-style: none; border-bottom: .75pt solid silver">13.7</td></tr>
<tr><td style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD">Multi-cache</td><td style="border-style: none; border-bottom: .75pt solid silver">5</td><td style="border-style: none; border-bottom: .75pt solid silver">4.9</td></tr>
<tr><td style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD">Mystery</td><td style="border-style: none; border-bottom: .75pt solid silver">1</td><td style="border-style: none; border-bottom: .75pt solid silver">1.0</td></tr>
<tr><td style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD">Earthcache</td><td style="border-style: none; border-bottom: .75pt solid silver">1</td><td style="border-style: none; border-bottom: .75pt solid silver">1.0</td></tr>
<tr><td style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD">Locationless</td><td style="border-style: none; border-bottom: .75pt solid silver">1</td><td style="border-style: none; border-bottom: .75pt solid silver">1.0</td></tr>
</TABLE>
</td>
</tr>
</table>
<br>
<TABLE cellSpacing="0" cellPadding="1" width="100%" border="1" style="border-left-style: none; border-right-style: none; border-top: 1.5pt solid black; border-bottom: 1.5pt solid black">
<tr>
<td style="background-color: #004000; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid black" colSpan="4"><b><font color="White">Favorite and 
other Notable Caches</font></b></td>
</tr>
<TR>
<TD style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD"><b>Category</b></TD>
<TD style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD"><b>Cache</b></TD>
<TD style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD"><b>Log</b></TD>
<TD style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD"><b>Comment</b></TD>
</TR>
<tr><td style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD">All-time favorite</td><td style="border-style: none; border-bottom: .75pt solid silver"><a href="http://www.geocaching.com/seek/cache_details.aspx?wp=GCNEZ5">11th Hour Cache</a></td><td style="border-style: none; border-bottom: .75pt solid silver"><a href="http://www.geocaching.com/seek/log.aspx?LID=8151916">View</a></td><td style="border-style: none; border-bottom: .75pt solid silver">&nbsp;</td></tr>
<tr><td style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD">Recent favorite</td><td style="border-style: none; border-bottom: .75pt solid silver"><a href="http://www.geocaching.com/seek/cache_details.aspx?wp=GCJBMP">Cement Ridge</a></td><td style="border-style: none; border-bottom: .75pt solid silver"><a href="http://www.geocaching.com/seek/log.aspx?LID=26958332">View</a></td><td style="border-style: none; border-bottom: .75pt solid silver">&nbsp;</td></tr>
<tr><td style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD">Most memorable</td><td style="border-style: none; border-bottom: .75pt solid silver"><a href="http://www.geocaching.com/seek/cache_details.aspx?wp=GCJMTW">Bridge to Nowhere</a></td><td style="border-style: none; border-bottom: .75pt solid silver"><a href="http://www.geocaching.com/seek/log.aspx?LID=6422762">View</a></td><td style="border-style: none; border-bottom: .75pt solid silver">&nbsp;</td></tr>
<tr><td style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD">Favorite Multi</td><td style="border-style: none; border-bottom: .75pt solid silver"><a href="http://www.geocaching.com/seek/cache_details.aspx?wp=GC316A">"Newest Link"</a></td><td style="border-style: none; border-bottom: .75pt solid silver"><a href="http://www.geocaching.com/seek/log.aspx?LID=427284">View</a></td><td style="border-style: none; border-bottom: .75pt solid silver">&nbsp;</td></tr>
<tr><td style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD">Most difficult terrain</td><td style="border-style: none; border-bottom: .75pt solid silver"><a href="http://www.geocaching.com/seek/cache_details.aspx?wp=GCNEZ5">11th Hour Cache</a></td><td style="border-style: none; border-bottom: .75pt solid silver"><a href="http://www.geocaching.com/seek/log.aspx?LID=8151916">View</a></td><td style="border-style: none; border-bottom: .75pt solid silver">&nbsp;</td></tr>
<tr><td style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD">Cleverest hide</td><td style="border-style: none; border-bottom: .75pt solid silver"><a href="http://www.geocaching.com/seek/cache_details.aspx?wp=GCGW8M">Lilac Time</a></td><td style="border-style: none; border-bottom: .75pt solid silver"><a href="http://www.geocaching.com/seek/log.aspx?LID=6144470">View</a></td><td style="border-style: none; border-bottom: .75pt solid silver">&nbsp;</td></tr>
</TABLE>
<br>
<TABLE cellSpacing="0" cellPadding="1" width="100%" border="1" style="border-left-style: none; border-right-style: none; border-top: 1.5pt solid black; border-bottom: 1.5pt solid black">
<tr>
<td style="background-color: #004000; border-left-style: none; border-right-style: none; border-top-style: none; border-bottom: .75pt solid black" colSpan="2"><b><font color="White">Locations</font></b></td>
</tr>
<TR>
<TD style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD"><b>US States (13):</b></TD>
<TD style="border-style: none; border-bottom: .75pt solid silver" width="78%">CO, NE, SD, CA, KS, IL, FL, AZ, MO, WY, IA, MT, ND</TD>
</TR>
<TR>
<TD style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD"><b>Other States (1):</b></TD>
<TD style="border-style: none; border-bottom: .75pt solid silver" width="78%">District of Columbia</TD>
</TR>
<TR>
<TD style="border-style: none; border-bottom: .75pt solid silver; background-color: #DDDDDD"><b>Countries (2):</b></TD>
<TD style="border-style: none; border-bottom: .75pt solid silver" width="78%">United States, US Virgin Islands</TD>
</TR>
</TABLE>
<br>
<p><IMG src="http://www.world66.com/myworld66/visitedStates/statemap?visited=CONESDCAKSILFLAZMOWYIAMTND"><br>
<i>(<a href="http://www.world66.com/myworld66">map from world66.com</a>)</i></p>
</html>

..and remember Keep our world clean! 
[img[http://www.groundspeak.com/images/nav/cito_box.gif]]
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>>

See also MonkeyPirateTiddlyWiki.
''[[Gmail Manager|https://addons.mozilla.org/en-US/firefox/addon/1320]]'' allows you to manage multiple [[Gmail|https://gmail.google.com]] accounts and receive new mail notifications. Displays your account details including unread messages, saved drafts, spam messages, labels with new mail, space used, and new mail snippets.
![[Google Apps|http://www.google.com/a/]]
Excellent set of services provided by [[Google|http://www.google.com]], including:
** e-mail
** calendar
** docs
** start page
Encrypted(15BCA77431DB1CE4E3EB02A0B2E92D669EC7297B)
5b029f4df57bccaec465d19d6b46d562df7c0fa2fc6e02d47bbc133a37d303431b
bf28d321333421cf875ea782e86e7648213021c61c2949cd7ba121333321c466
48670791baeb5bdb4d535de56f2131312190e547f5efbb398521313221554fe5
663f64f8946f2c5bea4563b82131363021db493dfbdd1c489bb9bac0733a0128
d1a7fc30a1e82c87922ab0e537667b92082fbe02aacb484129b1bf9a21313321
c8728efb2edb56d71ff7df08905be25d05f6707aedd752359798c53be9232133
3321fd59b776b56f17b5d953adf241532131363021634079d4da41e23c17e4b6
e78d8db2c11ed1580324def421333421d8a17221392168aa2fb990db71671f73
5312389a5a3ddfc6345a2d854a8adfe121302192c7da7e479fc081c469213339
21d655dc930e7cce8cfc213334211a50bc86705195421075df855e59f7213921
b9a21ebb2e039d5a262b187ab18a7a6616d176fdf1f7f0ae1fc1172fd9700faf
3289cc98e136b8af9025f04aff4a6d6e5eeba48f58782130215bb1d8d9213130
212d23708a16f28621313630210f07aad20ffd59aeda0f5c19863b6911c59166
d1f3c674539d1bf12a9d7a73a262bfd52cb757661b3410
!The Idea
Create a [[package|http://wiki.openwrt.org/BuildingPackagesHowTo]] of [[DansGuardian|http://dansguardian.org/]] for [[OpenWRT|http://openwrt.org/]], package it up for churches, schools and homes where internet filtering would be desired or needed.

//''Note:''// 9/29/06 - ipkg already exists [[here|http://www.ipkg.be/package/1186600]] - a user comment on [[this article|http://tips.linux.com/article.pl?sid=06/01/24/1733243]] recommends using the [[Asus WL-500g Deluxe|http://froogle.google.com/froogle?q=Asus+wl-500g+deluxe&hl=en]] because it has USB ports

//''Update''// Oct 2007 - the ipkg repository has changed, so the [[DansGuardian package is now here|http://www.ipkg.be/package/3770049]]
I like this method to redirect from one web page to another without the user needing to see it happen.  
//Unfortunately, it doesn't work with [[GooglePages|http://www.googlepages.com]]//

{{{
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
"http://www.w3.org/TR/html4/frameset.dtd">
<html>
<head>
<title>Steve's Notes</title>
<META NAME="Keywords" CONTENT="Steve's Wiki TiddlyWiki">
<META NAME="Description" CONTENT="Steve's Notes TiddlyWiki Wiki">

</head>
<frameset frameborder="0" framespacing="0" border="0" rows="100%,*">
    <frame name="MYTOPFRAME" src="http://slw.tiddlyspot.com/" noresize>
    <noframes>
       	<body>
           <h1>Steve's Notes</h1>

           Steve's Notes TiddlyWiki Wiki<br>
	   <br>
	   Click here to enter <a href="http://slw.tiddlyspot.com/">
           http://slw.tiddlyspot.com/</a>
        </body>
    </noframes>
</frameset>
</html>
}}}
''[[Hamachi|https://secure.logmein.com/products/hamachi/vpn.asp]]'' lets you create a quick, simple, and secure virtual network between any two or more computers with a connection to the Internet.
<<<
    Hamachi is a zero-configuration virtual private networking application with an open security architecture and NAT-to-NAT traversal capabilities.

    Hamachi is the first application to mix seemingly unrelated networking technologies in one powerful package to deliver an unprecedented level of peer-to-peer connectivity.
<<<
Available for Windows and Linux, Hamachi also (according to their site) has a Mac OS X version is in the works. Hamachi seems to have a lot of potential, especially for those of us who aren't necessarily networking/secure connection wizards.
/***
| Name|HideWhenPlugin|
| Description|Allows conditional inclusion/exclusion in templates|
| Version|3.0 ($Rev: 1845 $)|
| Date|$Date: 2007-03-16 15:19:22 +1000 (Fri, 16 Mar 2007) $|
| Source|http://mptw.tiddlyspot.com/#HideWhenPlugin|
| Author|Simon Baird <simon.baird@gmail.com>|
| License|http://mptw.tiddlyspot.com/#TheBSDLicense|
For use in ViewTemplate and EditTemplate. Example usage:
{{{<div macro="showWhenTagged Task">[[TaskToolbar]]</div>}}}
{{{<div macro="showWhen tiddler.modifier == 'BartSimpson'"><img src="bart.gif"/></div>}}}
***/
//{{{

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

merge(config.macros,{

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

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

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

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

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

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

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

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

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

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

});

//}}}
!An introduction to TiddlyWiki sliders

A ''slider'' is another name for a collapse and expand, hide or reveal, mini-program. Normally you would click on an item to ''reveal'' some text or an image or both. There are a number of plugins with the name ''slider'' in them and they can cause some confusion for newcomers. This explanation is written using the ~NestedSliders plugin! ''Default'' means it is pre-installed as part of the original program.
----

+++[The Default Slider command]
*The default TW Slider creates a collapsible drop down Tiddler.
The "Tags" slider example you see below this paragraph is "called" from another tiddler called TabTags. You could use any other available Tiddler. Click ONCE to see the contents of the Tidddler called ''~TabTags''. Click again to ''collapse'' the tiddler.

<<slider fortabTags TabTags Tags Tab>>

The syntax for the slider macro above looks like this:

{{{
<<slider fortabTags TabTags Tags Tab>>
}}}

There are four elements to the syntax, enclosed by double angle brackets, each divided by a space.

   1. The word 'slider' so that TiddlyWiki knows what kind of macro it is
   2. A unique cookie name to be used to save the state of the slider
   3. The name of the Tiddler that you want to open by clicking on the slider.
   4. The label for your slider - in other words, the text you want to appear in your slider box. For example, you could change the slider above to say 'Spaghetti'.
   5. Some tooltip text that appears when the mouse hovers over the label
===


+++*[The NestedSlidersPlugin slider]

The NestedSlidersPlugin displays ''text or image or both'' rather than a Tiddler. In other words, it shows or hides any normal typed content. This test was written directly beneath the slider command and is ''NOT'' a view of another tiddler. That means you can pepper your texts with nice hide-away extras such as tips , hints or answers where you would click on a slider label to reveal text (or an image).
[img[who's a pretty boy,then..|images/parrot.jpg]]

*Syntax
{{{
+++[heading]
Some text
===
}}}

Use an extra + to load the slider in its Open state.
A * for a rollover effect (this slider for example)
===


+++[The InlineSlidersPlugin]

A super light weight plugin that lets you create sliders inline using a <slider></slider> syntax, or the {{{++++ ====}}} syntax for compatibility with the ~NestedSlidersPlugin from tiddlytools.com. Terrific for when you don't need the extra bells, but just want to create simple inline sliders.

The basic difference is that there are no complex formatting options but what you get is a very short script that does a basic job. Depends on what you need!
===


+++[The FAQlist plugin]
To display a slider view of a list of Tiddlers. Each individual Tiddler can be expanded or collapsed or all the Tiddlers at the same time. Very useful for creating a list of related notes that can be stepped through one at a time. Hence the name FAQ List! Whateer it is called, it is still a slider script variation.

This is an example. You can view the Tiddlers but not edit them. You can see from this example that it would be useful for short bits of text as intended by the author, although you could use it to create a contents list.

<<faqlist byTag Hot_News title>>

===
..from http://www.the-bizness.co.uk/wikis/1sitestuff.html#%5B%5BHow%20to%20Create%20Sliders%5D%5D
|!Format|!It will look like this...|!...if you format it like this...|
|Bold-faced type|''text''|{{{''text''}}}|
|Italic text|//text//|{{{//text//}}}|
|Underlined text|__text__|{{{__text__}}}|
|Strike-through text|--text--|{{{--text--}}}|
|Links with wikiwords|EnchiLada (inactive link - no tiddler yet)<br>WikiWord (active link to tiddler)|{{{EnchiLada}}}<br>{{{WikiWord}}}|
|Links with brackets|[[How to add background images]]|{{{[[How to add background images]]}}}|
|Pretty links|[[display text|ColorSchemes]] - links to the tiddler of color schemes|{{{[[display text|ColorSchemes]]}}}|
|External links work the same way:|http://groups.google.com/group/TiddlyWiki <br><br>[[TiddlyWiki Google group|http://groups.google.com/group/TiddlyWiki]]|{{{http://groups.google.com/group/TiddlyWiki}}} <br><br> {{{[[TiddlyWiki Google group|http://groups.google.com/group/TiddlyWiki]]}}}|
|Links to local files|To a file on a CD in your D drive: <br><br>To a file on your USB stick on your e drive: <br><br>To a file in your hard drive:|{{{file:///D:/filename.doc/}}}<br><br>{{{file:///E:/filename.doc/}}}<br><br>{{{file:///C:/filepath/filename.doc/}}}|
|Colored text|@@color(green):green colored@@|{{{@@color(green):green colored@@}}}|
|Text with colored background|@@bgcolor(#ff0000):color(#ffffff):red colored@@|{{{@@bgcolor(#ff0000):color(#ffffff):red colored@@}}}|
|Highlighting|@@text@@|{{{@@text@@}}}|
|Superscript|2^^3^^=8|{{{2^^3^^=8}}}|
|Subscript|a~~ij~~ = -a~~ji~~|{{{a~~ij~~ = -a~~ji~~}}}|

''Simple indenting:''
{{{ {{indent{text }}} produces:

{{indent{text

''Numbered lists:''
{{{#item one }}}
{{{##Item 1a}}}
{{{###Item 1ai}}} 

produces:
#item one   
##Item 1a 
###Item 1ai 
''Bulleted lists:''
{{{*Bullet one}}}
{{{**Bullet two}}}
{{{***Bullet three}}}
 
produces:
*Bullet one    
**Bullet two    
***Bullet level three    
''Headlines''

{{{!Text}}} produces:
!Text
{{{!!Text}}} produces:
!!Text
{{{!!!Text}}} produces:
!!!Text
and so on.

''Tables:''
This is the formatting:

{{{|!Table header|!Column Two|}}}
{{{|>| colspan |}}}
{{{| rowspan |left aligned|}}}
{{{|~| right aligned|}}}
{{{|bgcolor(#DC1A1A):colored| centered |}}}
{{{||*lists<br>*within<br>*tables<br><br>and double-spaced too|}}}
{{{|caption|c}}}

This is the result:

|!Table header|!Column Two|
|>| colspan |
| rowspan |left aligned|
|~| right aligned|
|bgcolor(#DC1A1A):colored| centered |
||*lists<br>*within<br>*tables<br><br>and double-spaced too|
|caption|c

To align a cell so that its text displays at the top rather than the center, add {{{vertical-align:top;}}} at the beginning of the cell.

''Images:''
{{{[img[http://farm1.static.flickr.com/39/122259544_6913ca58f3_m.jpg]]}}} is the formatting for:

[img[http://farm1.static.flickr.com/39/122259544_6913ca58f3_m.jpg]]

''Dotted horizontal lines:'' 
{{{----}}} produces:
----

''Line-by-line blockquotes:''
{{{>level 1}}}
{{{>level 1}}}
{{{>>level 2}}}
{{{>>level 2}}}
{{{>>>level 3}}}
{{{>>>level 3}}}
{{{>>level 2}}}
{{{>level 1}}}

produces:
>level 1
>level 1
>>level 2
>>level 2
>>>level 3
>>>level 3
>>level 2
>level 1

''Extended blockquotes:''
{{{<<<}}}
{{{Extended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotes}}}
{{{<<<}}} 

produces:
<<<
Extended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotesExtended blockquotes
<<<
The options under the options slider and in AdvancedOptions are stored in cookies. So if you sometimes lose your cookies or you are working on your TiddlyWiki on several computers then it can be tiresome to have to enter your options time and time again. Here's how you can set the default options in your TiddlyWiki once and for all. This also determines which options a first time viewer of your TiddlyWiki gets. The way it's done is to create your own little [[plugin|Plugins]] that contains some javascript code to set the default options. Here's how:
* Create a new tiddler.
* Give it some appropriate name, for example "SetDefaultOptions".
* Paste in the following:
{{{
config.options.chkRegExpSearch        = false;         // default false
config.options.chkCaseSensitiveSearch = false;         // default false
config.options.chkAnimate             = true;          // default true
config.options.txtUserName            = "YourName";    // default "YourName"
config.options.chkSaveBackups         = true;          // default true
config.options.chkAutoSave            = false;         // default false
config.options.chkGenerateAnRssFeed   = false;         // default false
config.options.chkSaveEmptyTemplate   = false;         // default false
config.options.chkOpenInNewWindow     = true;          // default true
config.options.chkToggleLinks         = false;         // default false
config.options.chkHttpReadOnly        = true;          // default true
config.options.chkForceMinorUpdate    = false;         // default false
config.options.chkConfirmDelete       = true;          // default true
config.options.txtBackupFolder        = "";            // default ""
config.options.txtMainTab             = "tabTimeline"; // default "tabTimeline"
config.options.txtMoreTab             = "moreTabAll";  // default "moreTabAll"
config.options.txtMaxEditRows         = "30";          // default "30"
}}}
* Update the values after the '=' to the values your preferred values, either {{{true}}}, {{{false}}}, or a suitable {{{"QuotedString"}}}
** Note that you only need the ones you are changing from the default. You can delete any lines you don't need.
** This list is current as of version 2.0.6. Future versions may have extra options. You always see an up-to-date list of all the options by doing a "View, Page Source" on your TiddlyWiki. Look for {{{config.options = { .... } }}} about one page down from the top of the file.
** This example sets my user name to SimonBaird, switches off backups, switches on auto-saving and switches off the read only over http option.
{{{
config.options.txtUserName            = "SimonBaird";   // default "YourName"
config.options.chkSaveBackups         = false;          // default true
config.options.chkAutoSave            = true;           // default false
config.options.chkHttpReadOnly        = false;          // default true
}}}
* Give the tiddler a tag of {{{systemConfig}}}.
* Click Done to save the tiddler and click 'save changes' to save your TiddlyWiki.
** Note that any cookies set in your brower will over-ride these settings. They are only used when there is no cookies set. So to test properly you need to should clear all your browser cookies (or just the applicable ones if you know how to do that), then open your TiddlyWiki.
![[eHow|http://www.ehow.com/]] - How To Do Just About Everything!
![[HowTo Forge|http://www.howtoforge.com]] - Linux Tutorials
! ~HowTo Tiddlers
!Audio

!Video

!Jokes & Stories

!Content
Jason Quam's [[ElkPointGorilla|http://ElkPointGorilla.com]] site

[[Leader-Courier Article]]
Albert Huddleston is the CEO

According to the Elk Point Leader-Courier, the team involved in the project is as follows:
* J.L. "Corky" Frank - Project Executive
* Preston Phillips - Spoke at Elk Point announcement
* Dick White - Land Acquisition and Marketing
* Carl Clay - Exec. Advisor, Logistics
* Humberto Vainieri - Exec. Advisor, Refining Technology

[[RIGZONE - Hyperion Resources]]
''Hyperion at a Glance''
//By Candace Begody//

VERMILLION, S.D. – Gov. Mike Rounds has hunted and golfed with the CEO of the company everyone from Sioux City to Sioux Falls wants to know about.

But Rounds had little to say about Hyperion Resources and its CEO, Albert Huddleston, except that Huddleston is an "easy-going guy" and "low profile."

Rounds spoke June 14 to students attending the American Indian Journalism Institute at the Al Neuharth Media Center in Vermillion. Most of the governor’s news conference concerned the previous day’s [[announcement that the town of Elk Point is a finalist for an oil refinery|http://www.reznetnews.org/article/news/elk_point_strikes_oil]] that will generate 400,000 barrels a day and as many as 1,800 jobs. The construction of the refinery is likely to cost at least $8 billion.

Rounds talked mostly about how Hyperion’s refinery would be friendlier to the environment than others, but he had little else to say about Hyperion and suggested students turn to the Internet.

So we did.

We found tidbits of information about both Hyperion and Albert Huddleston.

The privately operated Hyperion, founded in 1990, is an oil-and-gas company in Dallas. Albert Huddleston is the son-in-law of Bunker Hunt, son of Hunt Oil Company founder, H.L. Hunt.

According to Manta, a Web site that gleans information about businesses from publishers such as Dun & Bradstreet and Newstex, Hyperion is located at 5910 N. Central Expressway in Dallas. Manta estimates that Hyperion has 60 employees and $12.3 million in annual sales. However, phone calls to the company yielded no one willing to confirm or deny the sales figure.

    * According to reports on the Web site [[CampaignMoney.com|http://www.campaignmoney.com/political/contributions/albert-huddleston.asp?cycle=06]], Huddleston, who is known for his major contributions to the Republican Party, donated $93,500 to the party in 2006. He made political contributions of $81,000 in 2004 and $55,000 in 2002, most of which went to the Republican Party.
    * In April, as a way to "do something good to improve relations between the two countries," the United States and Iraq, [[Huddleston spent more than $100,000|http://www.wfaa.com/sharedcontent/dws/spt/stories/041306dnspocupiraqi.1735b521.html]] to help bring a 14-and-under Iraqi soccer team into the country, according to a story originally published in The Dallas Morning News. The team competed in the Dallas Cup, an internationally recognized soccer tournament. For the past two years, Hyperion has helped train Iraqi oil workers.
    * Huddleston [[supported the Swift Boat Vets|http://www.campaignmoney.com/political/527/swift_boat_vets_and_pows_for_truth.asp]] and POWS for Truth, an organization that campaigned in 2004 against presidential candidate John Kerry, a Democrat. Huddleston made a $100,000 contribution to the organization.
    * Huddleston and his daughter Caroline Huddleston, assistant for arrangements for the Office of Laura Bush, [[attended a state dinner|http://www.whitehouse.gov/news/releases/2007/02/20070225-2.html]], which honored the nation’s governors in February.
    * He is a [[state corporate member of the Corporate Wetlands Restoration Partnership|http://www.coastalamerica.gov/text/cwrp.html]], a United States government organization created by former president George H.W. Bush in 1991, to address environmental issues along coastlines.
    * Elk Point, S.D., is one of several potential sites in the Midwest for the oil refinery, which will use advanced technology to produce low-sulfur gas and diesel fuel. [[The other locations have not been identified|http://online.wsj.com/article/SB118177164783334443.html?mod=googlenews_wsj]], according to The Wall Street Journal.

      Rounds said Huddleston wants his refinery to be a model for other corporations in the nation and world.

      Huddleston is trying to show that the "future of energy production is in America and that it will be environmentally safe," Rounds said.

      Hyperion officials will likely make a formal announcement within three to six months, Rounds said, as to whether Elk Point is the company’s preferred site.

      Candace Begody, Navajo, is a student at the University of Arizona, Tucson.

Source: [[Hyperion at a Glance : Reznet News|http://www.reznetnews.org/article/news/hyperion_at_a_glance]]
![[Special-Use IPv4 Addresses|ftp://ftp.rfc-editor.org/in-notes/rfc3330.txt]]
Not only should these IP's not be used on the Internet, but any "good-neighbor" ISP will block them.
<tabs IP-Addr>
<tab Summary>
{{{
   Address Block             Present Use                       Reference
   ---------------------------------------------------------------------
   0.0.0.0/8            "This" Network                 [RFC1700, page 4]
   10.0.0.0/8           Private-Use Networks                   [RFC1918]
   14.0.0.0/8           Public-Data Networks         [RFC1700, page 181]
   24.0.0.0/8           Cable Television Networks                    --
   39.0.0.0/8           Reserved but subject
                           to allocation                       [RFC1797]
   127.0.0.0/8          Loopback                       [RFC1700, page 5]
   128.0.0.0/16         Reserved but subject
                           to allocation                             --
   169.254.0.0/16       Link Local                                   --
   172.16.0.0/12        Private-Use Networks                   [RFC1918]
   191.255.0.0/16       Reserved but subject
                           to allocation                             --
   192.0.0.0/24         Reserved but subject
                           to allocation                             --
   192.0.2.0/24         Test-Net
   192.88.99.0/24       6to4 Relay Anycast                     [RFC3068]
   192.168.0.0/16       Private-Use Networks                   [RFC1918]
   198.18.0.0/15        Network Interconnect
                           Device Benchmark Testing            [RFC2544]
   223.255.255.0/24     Reserved but subject
                           to allocation                             --
   224.0.0.0/4          Multicast                              [RFC3171]
   240.0.0.0/4          Reserved for Future Use        [RFC1700, page 4]
}}}
</tab>
<tab Private IP Addresses>
As documented in [[RFC3330|http://www.faqs.org/rfcs/rfc3330.html]] and [[RFC1918|http://www.faqs.org/rfcs/rfc1918.html]], the [[Internet Assigned Numbers Authority|http://www.iana.org/]] (IANA) has reserved the following blocks of the IP address space for private (local) networks :
*Class A 
**CIDR :: 10.0.0.0/8
**Range:: 10.0.0.0 - 10.255.255.255
*Class B
**CIDR :: 172.16.0.0/12
**Range:: 172.16.0.0 - 172.31.255.255
*Class C
**CIDR :: 192.168.0.0/16
**Range:: 192.168.0.0 - 192.168.255.255

IP addresses in the range of 169.254.0.0 -169.254.255.255 are reserved for Automatic Private IP Addressing (see next tab).

In a small network, it is common to use 192.168.1.0 with a subnet mask of 255.255.255.0.  In fact, this is the default on many small routers (i.e. Linksys, D-Link, etc) which come pre-configured with 192.168.1.1 as their address. 

</tab>
<tab APIPA>
Windows 98, 98 SE, Me, and 2000 have an Automatic Private IP Addressing (APIPA) feature that will automatically assign an Internet Protocol address to a computer on which it installed.  This occurs when the TCP/IP protocol is installed, set to obtain it's IP address automatically from a Dynamic Host Configuration Protocol server,  and when there is no DHCP server present or the DHCP server is not available.  The Internet Assigned Numbers Authority (IANA) has reserved private IP addresses in the range of __169.254.0.0 -169.254.255.255__ for Automatic Private IP Addressing.

After the network adapter has been assigned an automatic IP address, a computer can communicate with any other computers on the local network that are also configured by APIPA or have static IP address manually set to the 169.254.x.y (where x.y is the client's unique identifier) address range with a subnet mask of 255.255.0.0.

You may want to turn-off this feature if...
* Your network uses routers (including broadband routers with built-in DHCP servers).
* Your network is connected to the Internet without a NAT or proxy server.

Use Start, Run, enter "winipcfg", select the adapter for Windows 98, 98 SE, Me to detect APIPA and to release and renew the automatic IP when a DHCP server becomes available.  The Windows NT, 2000, XP equivalent is "ipconfig".  Use Start, Run, enter cmd and then enter ipconfig at the command prompt.  Enter...
{{{
c:\>ipconfig /?
}}}
... to obtain a list of command options.
</tab>
<tab Bogons>
"[[Bogons|http://www.completewhois.com/bogons/index.htm]]" is the name used to describe ip blocks not allocated by IANA and RIRs to ISPs and organizations plus all other ip blocks that are reserved for private or special use by RFCs (the actual term "bogons" comes from word "bogus", as in bogus ip announcements). As these ip blocks are not allocated or specially reserved, such ip blocks should not be routable and used on the internet, however some of these ip blocks do appear on the net primarily used by those individuals and organizations that are often specifically trying to avoid being identified and are often involved in such activities as DoS attacks, email abuse, hacking and other security problems. These activities obviously pose great danger to everyone and ISPs should try to filter all these bad ip routes and we are trying to help in that by working to create complete detailed list of unassigned bogon ips based on whois data.
[[http://www.completewhois.com/bogons/data/bogons-cidr-all.txt]]
</tab>
</tabs>
//credit to [[DUX Computer Digest|http://www.duxcw.com/index.html]] and [[Complete Whois|http://www.completewhois.com/whois.htm]] for parts of this content// 
This story appeared on [[Network World|http://www.networkworld.com/news/2007/082707-isps-to-rural-us-live.html]]

By Robert Mitchell, Computerworld, 08/29/07

You can't get there from here. That old New England saw is an apt metaphor for the state of high-speed rural broadband. While many telecommunications carriers are posting record profits this year, millions of U.S. homes and businesses still have no access to broadband -- and that's no coincidence.

The return on equity that Wall Street demands from players in today's largely unregulated telecommunications business all but requires carriers to abandon rural America.

As population density drops outside of metropolitan areas, it's impossible for telecommunications companies or cable service providers to justify the tens to hundreds of thousands of dollars per mile it can cost to bring fiber to every rural community, let alone every home. The result: Today, just 17% of rural U.S. households subscribe to broadband service, according to the Government Accountability Office. And a recent report from the Organisation for Economic Co-operation and Development says the U.S. dropped from fourth in the world in broadband penetration in 2001 to 15th place in 2006.

Communications infrastructure is widely seen as the biggest driver of economic growth, yet 21% of Americans -- the nearly 60 million people who live in rural areas -- are often underserved.

Kim Rossey is one of them. Soon after moving to Gilsum, N.H. (population 811), Rossey learned that he couldn't get broadband to support his Web programming business, TooCoolWebs. DSL wasn't available, and the local cable service provider wasn't interested in extending the cabling for its broadband service the three-tenths of a mile required to reach Rossey's house -- even if he paid the full $7,000 cost.

Rossey ended up signing a two-year, $450-per-month contract for a T1 line that delivers 1.44Mbps of bandwidth. He pays 10 times more than the cable provider would have charged and receives one quarter of the bandwidth.

Limited options for high-speed Internet connectivity are stifling bigger rural companies too. Earlier this year, a $1 billion-plus e-commerce business was left scrambling for answers after Verizon announced that it was selling its rural telecommunications business in New England to the much smaller, less well-capitalized FairPoint Communications.

"These guys were freaking out because the only network they've been able to have up there is an [asynchronous transfer mode] network, and it's going away when Verizon leaves," says an analyst who consulted with the company and asked not to be identified. "They may have to move [to another state]."

The Internet is becoming the road to the workplace. The number of U.S. home-office households is expected to grow from 35.7 million today to 38.3 million in 2011, according to IDC. But rural workers without broadband could be shut out of New Economy jobs.

Alpine Access hires its workforce of 7,500 home-based call center agents over the Internet, and broadband is the price of admission. "Access through our Web site is the only way you can become an employee here," says Rick Owens, vice president of technology. "Some type of broadband service is necessary." Dial-up won't cut it because the applet that connects employees to Alpine Access systems requires a high-speed connection.

Rural areas need broadband. But deregulation has freed carriers from any real obligation to offer it. The market will never provide universal broadband access without regulation or subsidies, but the U.S. lacks both a coherent policy and the political will to address the issue. Even as the telephony infrastructure itself is absorbed into the Internet, some policy-makers still fail to view broadband as the new critical infrastructure.

Rossey remains incredulous about his experience. "If you can bring electricity to a house, we should be able to bring Internet access," he says.

You'd think so. At this point, however, it's probably too late to go back to the future.

For more enterprise computing news, visit Computerworld. Story copyright Computerworld, Inc.

All contents copyright 1995-2007 Network World, Inc. [[http://www.networkworld.com]]

Source: [[http://www.networkworld.com/news/2007/082707-isps-to-rural-us-live.html|http://www.networkworld.com/cgi-bin/mailto/x.cgi?pagetosend=/export/home/httpd/htdocs/news/2007/082707-isps-to-rural-us-live.html&pagename=/news/2007/082707-isps-to-rural-us-live.html&pageurl=http://www.networkworld.com/news/2007/082707-isps-to-rural-us-live.html&site=lanwan]]
When attempting to ImportTiddlers, the following error may be seen if Firefox isn't configured to handle it.
{{{
"Permission denied method XMLHttpRequest.open" issue.
I'm trying to use the ImportTiddlersPlugin and running into this issue.
How did you work around it?
}}}
You can tell ~FireFox to ASK for permission so that unsigned javascripts (such as TW) are allowed to perform "cross-domain" access (instead of automatically denying it)

In "about:config", set ''signed.applets.codebase_principal_support = true''

''NOTE'' - There seems to be no work-around for this when trying to import into a TW file that is open via HTTP. The method I've found to work is to download the file, import whatever, then upload the file again to my ~TiddlySpot.
<<importTiddlers inline>>
<<tiddlerList tags:-Config group:"tiddler.title.substr(0,1)" groupTemplate:'!%group\n'>>


/***
|Name|InlineJavascriptPlugin|
|Source|http://www.TiddlyTools.com/#InlineJavascriptPlugin|
|Documentation|http://www.TiddlyTools.com/#InlineJavascriptPluginInfo|
|Version|1.8.1|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|Insert Javascript executable code directly into your tiddler content.|
''Call directly into TW core utility routines, define new functions, calculate values, add dynamically-generated TiddlyWiki-formatted output'' into tiddler content, or perform any other programmatic actions each time the tiddler is rendered.
!!!!!Documentation
>see [[InlineJavascriptPluginInfo]]
!!!!!Revision History
<<<
2008.02.14 [1.8.1] added backward-compatibility for use of wikifyPlainText() in TW2.1.3 and earlier
2008.01.08 [*.*.*] plugin size reduction: documentation moved to ...Info and ...History tiddlers
2007.12.28 [1.8.0] added support for key="X" syntax to specify custom access key definitions
|please see [[InlineJavascriptPluginHistory]] for additional revision details|
2005.11.08 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.inlineJavascript= {major: 1, minor: 8, revision: 1, date: new Date(2008,2,14)};

config.formatters.push( {
	name: "inlineJavascript",
	match: "\\<script",
	lookahead: "\\<script(?: src=\\\"((?:.|\\n)*?)\\\")?(?: label=\\\"((?:.|\\n)*?)\\\")?(?: title=\\\"((?:.|\\n)*?)\\\")?(?: key=\\\"((?:.|\\n)*?)\\\")?( show)?\\>((?:.|\\n)*?)\\</script\\>",

	handler: function(w) {
		var lookaheadRegExp = new RegExp(this.lookahead,"mg");
		lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = lookaheadRegExp.exec(w.source)
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
			var src=lookaheadMatch[1];
			var label=lookaheadMatch[2];
			var tip=lookaheadMatch[3];
			var key=lookaheadMatch[4];
			var show=lookaheadMatch[5];
			var code=lookaheadMatch[6];
			if (src) { // load a script library
				// make script tag, set src, add to body to execute, then remove for cleanup
				var script = document.createElement("script"); script.src = src;
				document.body.appendChild(script); document.body.removeChild(script);
			}
			if (code) { // there is script code
				if (show) // show inline script code in tiddler output
					wikify("{{{\n"+lookaheadMatch[0]+"\n}}}\n",w.output);
				if (label) { // create a link to an 'onclick' script
					// add a link, define click handler, save code in link (pass 'place'), set link attributes
					var link=createTiddlyElement(w.output,"a",null,"tiddlyLinkExisting",wikifyPlainText(label));
					link.onclick=function(){try{return(eval(this.code))}catch(e){alert(e.description||e.toString())}}
					var fixup=code.replace(/document.write\s*\(/gi,'place.innerHTML+=(');
					link.code="function _out(place){"+fixup+"\n};_out(this);"
					link.setAttribute("title",tip||"");
					var URIcode='javascript:void(eval(decodeURIComponent(%22(function(){try{';
					URIcode+=encodeURIComponent(encodeURIComponent(code.replace(/\n/g,' ')));
					URIcode+='}catch(e){alert(e.description||e.toString())}})()%22)))';
					link.setAttribute("href",URIcode);
					link.style.cursor="pointer";
					if (key) link.accessKey=key.substr(0,1); // single character only
				}
				else { // run inline script code
					var fixup=code.replace(/document.write\s*\(/gi,'place.innerHTML+=(');
					var code="function _out(place){"+fixup+"\n};_out(w.output);"
					try { var out=eval(code); } catch(e) { out=e.description?e.description:e.toString(); }
					if (out && out.length) wikify(out,w.output,w.highlightRegExp,w.tiddler);
				}
			}
			w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
		}
	}
} )
//}}}

// // Backward-compatibility for TW2.1.x and earlier
//{{{
if (typeof(wikifyPlainText)=="undefined") function wikifyPlainText(text,limit,tiddler) {
	if(limit > 0) text = text.substr(0,limit);
	var wikifier = new Wikifier(text,formatter,null,tiddler);
	return wikifier.wikifyPlain();
}
//}}}
/***
|Name|InlineJavascriptPluginInfo|
|Source|http://www.TiddlyTools.com/#InlineJavascriptPlugin|
|Documentation|http://www.TiddlyTools.com/#InlineJavascriptPluginInfo|
|Version|1.8.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|documentation|
|Requires||
|Overrides||
|Description|Documentation for InlineJavascriptPlugin|
''Call directly into TW core utility routines, define new functions, calculate values, add dynamically-generated TiddlyWiki-formatted output'' into tiddler content, or perform any other programmatic actions each time the tiddler is rendered.
!!!!!Usage
<<<
When installed, this plugin adds new wiki syntax for surrounding tiddler content with {{{<script>}}} and {{{</script>}}} markers, so that it can be treated as embedded javascript and executed each time the tiddler is rendered.

''Deferred execution from an 'onClick' link''
By including a {{{label="..."}}} parameter in the initial {{{<script>}}} marker, the plugin will create a link to an 'onclick' script that will only be executed when that specific link is clicked, rather than running the script each time the tiddler is rendered.  You may also include a {{{title="..."}}} parameter to specify the 'tooltip' text that will appear whenever the mouse is moved over the onClick link text, and a {{{key="X"}}} parameter to specify an //access key// (which must be a //single// letter or numeric digit only)

''External script source files:''
You can also load javascript from an external source URL, by including a src="..." parameter in the initial {{{<script>}}} marker (e.g., {{{<script src="demo.js"></script>}}}).  This is particularly useful when incorporating third-party javascript libraries for use in custom extensions and plugins.  The 'foreign' javascript code remains isolated in a separate file that can be easily replaced whenever an updated library file becomes available.

''Display script source in tiddler output''
By including the keyword parameter "show", in the initial {{{<script>}}} marker, the plugin will include the script source code in the output that it displays in the tiddler.

''Defining javascript functions and libraries:''
Although the external javascript file is loaded while the tiddler content is being rendered, any functions it defines will not be available for use until //after// the rendering has been completed.  Thus, you cannot load a library and //immediately// use it's functions within the same tiddler.  However, once that tiddler has been loaded, the library functions can be freely used in any tiddler (even the one in which it was initially loaded).

To ensure that your javascript functions are always available when needed, you should load the libraries from a tiddler that will be rendered as soon as your TiddlyWiki document is opened.  For example, you could put your {{{<script src="..."></script>}}} syntax into a tiddler called LoadScripts, and then add {{{<<tiddler LoadScripts>>}}} in your MainMenu tiddler.

Since the MainMenu is always rendered immediately upon opening your document, the library will always be loaded before any other tiddlers that rely upon the functions it defines.  Loading an external javascript library does not produce any direct output in the tiddler, so these definitions should have no impact on the appearance of your MainMenu.

''Creating dynamic tiddler content''
An important difference between this implementation of embedded scripting and conventional embedded javascript techniques for web pages is the method used to produce output that is dynamically inserted into the document:
* In a typical web document, you use the document.write() function to output text sequences (often containing HTML tags) that are then rendered when the entire document is first loaded into the browser window.
* However, in a ~TiddlyWiki document, tiddlers (and other DOM elements) are created, deleted, and rendered "on-the-fly", so writing directly to the global 'document' object does not produce the results you want (i.e., replacing the embedded script within the tiddler content), and completely replaces the entire ~TiddlyWiki document in your browser window.
* To allow these scripts to work unmodified, the plugin automatically converts all occurences of document.write() so that the output is inserted into the tiddler content instead of replacing the entire ~TiddlyWiki document.

If your script does not use document.write() to create dynamically embedded content within a tiddler, your javascript can, as an alternative, explicitly return a text value that the plugin can then pass through the wikify() rendering engine to insert into the tiddler display.  For example, using {{{return "thistext"}}} will produce the same output as {{{document.write("thistext")}}}.

//Note: your script code is automatically 'wrapped' inside a function, {{{_out()}}}, so that any return value you provide can be correctly handled by the plugin and inserted into the tiddler.  To avoid unpredictable results (and possibly fatal execution errors), this function should never be redefined or called from ''within'' your script code.//

''Accessing the ~TiddlyWiki DOM''
The plugin provides one pre-defined variable, 'place', that is passed in to your javascript code so that it can have direct access to the containing DOM element into which the tiddler output is currently being rendered.

Access to this DOM element allows you to create scripts that can:
* vary their actions based upon the specific location in which they are embedded
* access 'tiddler-relative' information (use findContainingTiddler(place))
* perform direct DOM manipulations (when returning wikified text is not enough)
<<<
!!!!!Examples
<<<
an "alert" message box:
><script show>
	alert('InlineJavascriptPlugin: this is a demonstration message');
</script>
dynamic output:
><script show>
	return (new Date()).toString();
</script>
wikified dynamic output:
><script show>
	return "link to current user: [["+config.options.txtUserName+"]]";
</script>
dynamic output using 'place' to get size information for current tiddler:
><script show>
	if (!window.story) window.story=window;
	var title=story.findContainingTiddler(place).id.substr(7);
	return title+" is using "+store.getTiddlerText(title).length+" bytes";
</script>
creating an 'onclick' button/link that runs a script:
><script label="click here" title="clicking this link will show an 'alert' box" key="H" show>
	if (!window.story) window.story=window;
	alert("Hello World!\nlinktext='"+place.firstChild.data+"'\ntiddler='"+story.findContainingTiddler(place).id.substr(7)+"'");
	return false;
</script>
loading a script from a source url:
>http://www.TiddlyTools.com/demo.js contains:
>>{{{function demo() { alert('this output is from demo(), defined in demo.js') } }}}
>>{{{alert('InlineJavascriptPlugin: demo.js has been loaded'); }}}
><script src="demo.js" show>
	return "loading demo.js..."
</script>
><script label="click to execute demo() function" key="D" show>
	demo();
	return false;
</script>
<<<
/***
''Plugin:'' InlineSlidersPlugin
''Author:'' Lewcid
''Source URL:'' http://tw.lewcid.org/sandbox

!Usage
{{{ Create sliders in-line with text using an easy <slider Name> (or ++++) ..some info.. </slider> (or ====) syntax. }}}

!Code
***/
//{{{
config.formatters.unshift( {
    name: "inlinesliders",
    match: "\\+\\+\\+\\+|\\<slider",
    lookaheadRegExp: /(?:\+\+\+\+|<slider) (.*?)(?:>?)\n((?:.|\n)*?)\n(?:====|<\/slider>)/mg,
    handler: function(w)
    {
        this.lookaheadRegExp.lastIndex = w.matchStart;
        var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
        if(lookaheadMatch && lookaheadMatch.index == w.matchStart )
            {
            var btn = createTiddlyButton(w.output,lookaheadMatch[1] + " "+"\u00BB",lookaheadMatch[1],this.onClickSlider,"button sliderButton");
	        var panel = createTiddlyElement(w.output,"div",null,"sliderPanel");
	        panel.style.display = "none";
            wikify(lookaheadMatch[2],panel);
            w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
            }
    },
    onClickSlider : function(e)
    {
        if(!e) var e = window.event;
	    var n = this.nextSibling;
        n.style.display = (n.style.display=="none") ? "block" : "none";
        return false;
    }
})
//}}}
/***
''Plugin:'' InlineTabsPlugin
''Author:'' Lewcid
''Source URL:'' http://tw.lewcid.org/sandbox

!Usage
Create tabs from just one tiddler using an easy <tabs><tab></tab></tabs> syntax.

!Code
***/
//{{{
config.formatters.unshift( {
	name: "inlinetabs",
	match: "\\<tabs",
        lookaheadRegExp: /(?:<tabs (.*)>\n)((?:.|\n)*?)(?:\n<\/tabs>)/mg,
	handler: function(w)
	{
	    this.lookaheadRegExp.lastIndex = w.matchStart;
	    var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
	    if(lookaheadMatch && lookaheadMatch.index == w.matchStart)
			{
             var cookie = lookaheadMatch[1];
  	         var wrapper = createTiddlyElement(null,"div",null,cookie);
	         var tabset = createTiddlyElement(wrapper,"div",null,"tabset");
             tabset.setAttribute("cookie",cookie);
             var validTab = false;
             var firstTab = '';
             var tabregexp = /(?:<tab (.*)>)(?:(?:\n)?)((?:.|\n)*?)(?:<\/tab>)/mg;
             while((m = tabregexp.exec(lookaheadMatch[2])) != null)
                 {
		         if (firstTab == '') firstTab = m[1];
		         var tab = createTiddlyButton(tabset,m[1],m[1],story.onClickInlineTab,"tab tabUnselected");
		         tab.setAttribute("tab",m[1]);
		         tab.setAttribute("content",m[2]);
		         tab.title = m[1];
		         if(config.options[cookie] == m[1])
                     validTab = true;
                 }
             if(!validTab)
                 config.options[cookie] = firstTab;
	         w.output.appendChild(wrapper);
	         story.switchInlineTab(tabset,config.options[cookie]);
             w.nextMatch = this.lookaheadRegExp.lastIndex;
			}
	}
})

Story.prototype.switchInlineTab = function(tabset,tab)
{
    var cookie = tabset.getAttribute("cookie");
    var theTab = null
    var nodes = tabset.childNodes;
    for(var t=0; t<nodes.length; t++)
    if(nodes[t].getAttribute && nodes[t].getAttribute("tab") == tab)
        {
        theTab = nodes[t];
        theTab.className = "tab tabSelected";
        }
    else
        nodes[t].className = "tab tabUnselected"
	if(theTab)
		{
		if(tabset.nextSibling && tabset.nextSibling.className == "tabContents")
			tabset.parentNode.removeChild(tabset.nextSibling);
		var tabContent = createTiddlyElement(null,"div",null,"tabContents");
		tabset.parentNode.insertBefore(tabContent,tabset.nextSibling);
		wikify(theTab.getAttribute("content"),tabContent);
		if(cookie)
			{
			config.options[cookie] = tab;
			saveOptionCookie(cookie);
			}
		}
}
    
Story.prototype.onClickInlineTab = function(e)
{
    story.switchInlineTab(this.parentNode,this.getAttribute("tab"));
    return false;
}
/%
|Name|InstantBookmarklets|
|Source|http://www.TiddlyTools.com/#InstantBookmarklets|
|Version|1.0.0|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|script|
|Requires|InlineJavascriptPlugin|
|Overrides||
|Description|instantly create bookmarklets by dragging onclick links to the browser toolbar|
 
If you use InlineJavascripPlugin's <script> syntax with the 'label="..."' option, then instead of immediately processing the associated javascript code, the plugin creates linked text that directly invokes the javascript code whenever that link is clicked on.

In addition, the plugin automatically generates a URI-encoded "bookmarklet"-ready version of the script code, which it binds to the HREF of the "onclick" link, allowing you to simply drag-and-drop the link onto the browser's toolbar (or right-click and use the "bookmark this link" menu command) to save the encoded script as a stand-alone "bookmarklet" toolbar item (or bookmark).  That's it!  The URI-encoded script is automatically saved in the browser's toolbar/bookmarks, and can then be invoked directly from the toolbar/bookmarks, without requiring access to (or even a copy of) the document in which the original "onclick" script was defined!!

Note: Typically, an "onclick" script defined with InlineJavascriptPlugin can use an automatically-defined context variable, "place", to generate output into the tiddler in which the script is embedded.  However, because a saved bookmarklet script is not embedded in any tiddler content (in fact, it's not even embedded in a *document*), there is no current rendering context and "place" is UNDEFINED.  If you create a bookmarklet from an "onclick" script does refer to "place", it will halt and report a "Reference Error" when that bookmarklet is invoked.  

Also, in addition to not using "place" within bookmarklets, you must not include a double-quote character (") anywhere in the original onclick script, due to the syntax needed by the browser to invoke a URI-encoded bookmarklet script.  If a double-quote DOES occur in the original script code, the stored bookmarklet will report a "syntax error" when invoked.  To create a valid bookmarklet, use only single-quotes (') within the script code.

%/{{nowrap{
__[[InstantBookmarklets:|InstantBookmarklets]]{{fine{// drag these links to your browser toolbar!//}}}__

//~TiddlyWiklets: {{fine{(TiddlyWiki "tear-off" utilities)}}}///%

========================== TOGGLE SITE TITLES %/
*<script label="&#x25b2; - toggle titles" title="show/hide SiteTitle and SiteSubtitle (header) content">
	var c=document.getElementById('contentWrapper');  if (!c) return;
	for (var i=0; i<c.childNodes.length; i++)
		if (hasClass(c.childNodes[i],'header')) { var h=c.childNodes[i]; break; }
	if (!h) return;
	config.options.chkHideSiteTitles=h.style.display!='none';
	h.style.display=config.options.chkHideSiteTitles?'none':'block';
	saveOptionCookie('chkHideSiteTitles');
	return false;
</script>/%

========================== TOGGLE LEFT SIDEBAR %/
*<script label="&#x25c4; - toggle left sidebar" title="show/hide MainMenu content">
	var mm=document.getElementById('mainMenu'); if (!mm) return;
	var show=mm.style.display=='none';
	if (!show) { mm.style.display='none'; var margin='1em'; }
	else { mm.style.display='block'; var margin=config.options.txtDisplayAreaLeftMargin||''; }
	document.getElementById('displayArea').style.marginLeft=margin;
	config.options.chkShowLeftSidebar=show;
	saveOptionCookie('chkShowLeftSidebar');
	var sm=document.getElementById('storyMenu'); if (sm) config.refreshers.content(sm);
	return false;
</script>/%

========================== TOGGLE RIGHT SIDEBAR %/
*<script label="&#x25ba; - toggle right sidebar" title="show/hide SideBarOptions content">
	var sb=document.getElementById('sidebar'); if (!sb) return;
	var show=sb.style.display=='none';
	if (!show) { sb.style.display='none'; var margin='1em'; }
	else { sb.style.display='block'; var margin=config.options.txtDisplayAreaRightMargin||''; }
	document.getElementById('displayArea').style.marginRight=margin;
	config.options.chkShowRightSidebar=show;
	saveOptionCookie('chkShowRightSidebar');
	var sm=document.getElementById('storyMenu'); if (sm) config.refreshers.content(sm);
	return false;
</script>/%

========================== TOGGLE ANIMATION EFFECTS %/
*<script label="&infin; - toggle animation effects" title="enable/disable animation effects">
	config.options.chkAnimate=!config.options.chkAnimate;
	saveOptionCookie('chkAnimate');
	displayMessage('Animation effects are: '+(config.options.chkAnimate?'ON':'OFF'));
	return false;
</script>/%

========================== TOGGLE SINGLE PAGE MODE %/
*<script label="1 - toggle single-page mode" title="enable/disable 'one tiddler at a time' display">
	config.options.chkSinglePageMode=!config.options.chkSinglePageMode;
	saveOptionCookie('chkSinglePageMode');
	displayMessage('Single-page mode is: '+(config.options.chkSinglePageMode?'ON':'OFF'));
	return false;
</script>/%

========================== TOGGLE "FULLSCREEN" (SIDEBARS AND TITLES) %/
*<<tiddler ToggleFullScreen with: "&loz; - toggle fullscreen">>/%

========================== RESTART WITHOUT RELOADING %/
*<script label="&#x2302; - Home (redisplay initial page content)" title="Restart initial page content WITHOUT RELOADING!">
	story.closeAllTiddlers(); restart(); refreshPageTemplate(); 
 	return false;
</script>/%

========================== REFRESH WITHOUT RESTARTING %/
*<script label="&asymp; - Refresh (redisplay current page content)" title="Redisplay current page content WITHOUT RESTARTING!">
	story.forEachTiddler(function(t,e){story.refreshTiddler(t,null,true)});
	refreshDisplay();
 	return false;
</script>/%

========================== SHOW CURRENT VERSION, TIMESTAMP, and TIDDLER INFO %/
*<script label="[i] - Show TiddlyWiki document info..." title="Show TiddlyWiki version, filedate and tiddler summary">
	if (window.version) {
		var ver=version.major+'.'+version.minor+'.'+version.revision;
		var tids=window.store.getTiddlers('modified').reverse();
		var plugins=window.store.getTaggedTiddlers('systemConfig','modified').reverse();
		var msg='TiddlyWiki version: '+ver
			+'\nDocument modified: '+document.lastModified
			+'\nLast tiddler changed: '+tids[0].title
			+'\n\nThere are a total of '+tids.length+' tiddlers,'
			+' including '+plugins.length+' plugins:\n\n';
		msg+=plugins.map(function(t){
			return t.modified.formatString('YYYY.0MM.0DD 0hh:0mm:0ss')+' | '+t.title; }).join('\n');
		alert(msg);
	}
 	return false;
</script>/%

========================== RESET TIDDLYWIKI OPTION COOKIES (WITH CONFIRM) %/
*<script label="&lowast; - Reset all cookie options..." title="Clears all TiddlyWiki options stored in browser cookies (w/confirmation)">
	var opts=new Array(); var p=document.cookie.split('; ');
	for (var i=0;i<p.length;i++){
		var c=p[i]; var v=''; var pos=p[i].indexOf('=');
		if (pos!=-1) { c=p[i].substr(0,pos); v=unescape(p[i].slice(pos+1)); }
		if (config.options[c]!==undefined) opts.push(c);
	} opts.sort();
	var msg='There are '+opts.length+' option cookies:\n\n'+opts.join(', ');
	msg+='\n\nPress OK to proceed, or press CANCEL to keep options unchanged'; if (!confirm(msg)) return false;
	var msg='Press OK reset all options at once, or press CANCEL to confirm each option, one at a time';
	var quiet=confirm(msg);
	for (var i=0;i<opts.length;i++) {
		if (quiet || confirm('Press OK to reset option: '+opts[i])) {
			var ex=new Date(); ex.setTime(ex.getTime()-1000);
			document.cookie=opts[i]+'=deleted; path=/; expires='+ex.toGMTString();
		}
	}
 	return false;
</script>/%

========================== CLEAR CHANGE COUNTERS %/
*<script label="&empty; - Reset tiddler change counters..." title="remove change counters from all tiddlers in this document">
	var msg="Are you sure you want to remove the change counters from these tiddlers:\n\n";
	var t=store.getTiddlers("title"); var tids=[];
	for (var i=0;i<t.length;i++) {
		var v=store.getValue(t[i],"changecount");
		if (v) { msg+=t[i].title+" ("+v+")\n"; tids.push(t[i]); }
	}
	msg+="\nPress OK to proceed";
	if (!confirm(msg)) return false;
	for (var i=0;i<tids.length;i++) tids[i].clearChangeCount();
	displayMessage("Change counters have been reset to 0");
	displayMessage("Don't forget to save your document!");
	return false;
</script>/%

========================== SHOW FIREFOX DOMAIN PERMISSIONS (adapted from scripts written by Xavier Vergés) %/
*<script label="&radic; - show FireFox domain permissions...">
	netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect UniversalPreferencesRead CapabilityPreferencesAccess");
	var capsBase = "capability.principal.codebase.";
	var prefsService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); 
	var prefs = prefsService.getBranch(capsBase); 
	var capsEntries = prefs.getChildList("", { value: 0 }); 
	var privileged = [];
	for (var ii=0; ii < capsEntries.length; ii++) { 
		var matches = capsEntries[ii].match(/([^\.]*)[\.]id/); 
		if (matches && (2 == matches.length)) { 
			var url = prefs.getCharPref(capsEntries[ii]); 
			var grant = prefs.getCharPref(matches[1] + ".granted"); 
			privileged.push("[" + matches[1] + "] " + url + "\n\t" + grant);
		}
	}
	var profileDir = Components.classes["@mozilla.org/file/directory_service;1"].getService( Components.interfaces.nsIProperties).get("ProfD", Components.interfaces.nsIFile).path;
	var sep = profileDir.lastIndexOf("\\")!=-1?"\\":"/";
	var filePath = profileDir+sep+"prefs.js";
	var out = "The following domains have been granted 'privileged' access in FireFox:\n\n";
	out += privileged.join("\n");
	out += "\n\nTo change these settings, edit/remove the \""+capsBase+"\" definitions contained in:\n\n"+filePath;
	alert(out);
	return false;
</script>/%

========================== LOAD REMOTE PLUGINS... %/

//Load remote plugins: {{fine{(load on demand)}}}///%

========================== Abego Software (Udo Borkowski)...%/
*[[Abego Software|http://tiddlywiki.abego-software.de/]]{{block{/%

========================== LOAD YOURSEARCH PLUGIN
%/<script label="YourSearchPlugin" title="Load YourSearchPlugin from tiddlywiki.abego-software.de">
	var script=document.createElement('script');
	script.src='http://tiddlywiki.abego-software.de/archive/YourSearchPlugin/Plugin-YourSearch-src.2.1.1.js';
	script.onload=function(){
		refreshPageTemplate();
		alert('YourSearchPlugin has been loaded.');
	};
	document.getElementsByTagName('head')[0].appendChild(script);
	return false;
</script>/%
%/}}}/%

========================== TiddlyTools (Eric Shulman)...%/
*[[TiddlyTools|http://www.TiddlyTools.com/]]{{block{/%

========================== LOAD IMPORT TIDDLERS PLUGIN
%/<script label="ImportTiddlersPlugin" title="Load ImportTiddlersPlugin from www.TiddlyTools.com">
	var script=document.createElement('script');
	script.src='http://www.TiddlyTools.com/plugins/ImportTiddlersPlugin.js';
	script.onload=function(){
		story.displayTiddler(null,'ImportTiddlers');
		displayMessage('ImportTiddlersPlugin has been loaded.');
	};
	document.getElementsByTagName('head')[0].appendChild(script);
	return false;
</script> /%

========================== LOAD TIDDLER TWEAKER PLUGIN
%/<script label="TiddlerTweakerPlugin" title="Load TiddlerTweakerPlugin from www.TiddlyTools.com">
	var script=document.createElement('script');
	script.src='http://www.TiddlyTools.com/plugins/TiddlerTweakerPlugin.js';
	script.onload=function(){
		story.displayTiddler(null,'TiddlerTweaker');
		displayMessage('TiddlerTweakerPlugin has been loaded.');
	};
	document.getElementsByTagName('head')[0].appendChild(script);
	return false;
</script> /%

========================== REARRANGE TIDDLERS PLUGIN
%/<script label="RearrangeTiddlersPlugin" title="Load RearrangeTiddlersPlugin from www.TiddlyTools.com">
	var script=document.createElement('script');
	script.src='http://www.TiddlyTools.com/plugins/RearrangeTiddlersPlugin.js';
	script.onload=function(){
		story.forEachTiddler(function(t,e){story.refreshTiddler(t,null,true)});
		refreshDisplay();
		displayMessage('RearrangeTiddlersPlugin has been loaded.');
	};
	document.getElementsByTagName('head')[0].appendChild(script);
	return false;
</script>/%

%/}}}/%

========================== Jash (Billy Reisinger) %/
*[[BillyReisinger.com:|http://www.billyreisinger.com/jash/]]{{block{/%

========================== LOAD AND DISPLAY JAVASCRIPT SHELL
%/<script label="Jash (JAvascript SHell)" title="Load Jash (JAvascript SHell) from www.billyreisinger.com/jash">
	var script=document.createElement('script');
	script.src='http://www.billyreisinger.com/jash/source/latest/Jash.js';
	script.onload=function(){ displayMessage('JASH has been loaded'); };
	document.getElementsByTagName('head')[0].appendChild(script);
	return false;
</script>/%

%/}}}

}}}/%  END NOWRAP %/
! [[www.internet2.edu|http://www.internet2.edu]]
!! [[Events Calendar|http://events.internet2.edu/]]
!! [[Working Groups|http://www.internet2.edu/wg/wg-list.html]]
http://routerproxy.grnoc.iu.edu/internet2/
http://www.irongeek.com/

Information Security articles and "Hacking Illustrated" Videos
Jing is a screen capture program with some great features. [[more|http://www.jingproject.com]]
<html><div style="position:relative; border-width:1px; border-color:332200; border-style: solid; background-color:c9b390; padding:0 10px; width:400px; text-align:center; font-family:serif; left:50%; margin:25px 0 25px -200px; color:332200;">
  <div>
    My pirate name is:
    </div>
  <div style="font-size:32px;">
    Captain Sam Flint    </div>
  <img src="http://www.piratequiz.com/flag.gif" style="top:5px; position:relative; display:block; width:100px; background-color:332200;" />
  <div style="left:110px; top:-60px; width:290px; position:relative; text-align: justify;">
    Even though there's no legal rank on a pirate ship, everyone recognizes you're the one in charge. Like the rock flint, you're hard and sharp. But, also like flint, you're easily chipped, and sparky.    Arr!
    </div>
  <a href="http://www.piratequiz.com/" style="position:absolute; width:100%; left:0px; bottom:20px; color:f8eecc;">Get your own pirate name from piratequiz.com.</a><br />part of the fidius.org network
  </div>
</html>
''[[KeePass|http://keepass.info/]]''  is a free/open-source password manager or safe which helps you to manage your passwords in a secure way. You can put all your passwords in one database, which is locked with one master key or a key-disk. So you only have to remember one single master password or insert the key-disk to unlock the whole database. The databases are encrypted using the best and most secure encryption algorithms currently known (AES and Twofish). For more information, see the [[features page|http://keepass.info/features.html]]. 
''[[KeePass|http://keepass.info/]]''  is a free/open-source password manager or safe which helps you to manage your passwords in a secure way. You can put all your passwords in one database, which is locked with one master key or a key-disk. So you only have to remember one single master password or insert the key-disk to unlock the whole database. The databases are encrypted using the best and most secure encryption algorithms currently known (AES and Twofish). For more information, see the [[features page|http://keepass.info/features.html]]. 

Versions are currently available for Windows, Linux, OS X, Pocket PC and Palm OS.  The beauty of this is that the same Password database file can be utilized on multiple platforms.  

I run KeePass on my Windows desktop, my MacBook Pro, and my Windows Mobile-based cell phone and simply copy the .kdb file between them when I make an update.
![[AdaFruit|http://www.adafruit.com/laser/]]
Adafruit laser services is an appointment only laser etching service in New York City, NY USA - get your laptop, iPod, cell phone or any other gadget laser etched and learn about high powered lasers in person! You will be the one that presses the ''GO BUTTON'' to fire the laser beam!
!!''Open ~Laser-Etching Business''
We publish how to use the high powered laser system, set up, techniques, business practices and templates. You could start your own laser business, we'll even help - so far it seems there are a few companies that have started up!  [[Google Group|http://groups.google.com/group/oslb]]
|cogito ergo sum |"I think, therefore I am." |A rationalistic argument used by French philosopher René Descartes to attempt to prove his own existence.|
|compos mentis |"in control of the mind" |Describes someone of sound mind. Sometimes used ironically. Also a legal principle, non compos mentis ("not in control of one's faculties"), used to describe an insane person.|
[[Launchy|http://www.launchy.net/]]
!Legacy of the Rodeo Man

There's a hundred years of history and a hundred before that
All gathered in the thinkin' goin' on beneath his hat.
And back behind his eyeballs and pumpin' through his veins
Is the ghost of every cowboy that ever held the reins.

Every coil in his lasso's been thrown a million times
His quiet concentration's been distilled through ancient minds.
It's evolution workin' when the silver scratches hide
And a ghostly cowboy chorus fills his head and says, "Let's ride."

The famous and the rowdy, the savage and the sane
the bluebloods and the hotbloods and the corriente strain
All knew his mother's mothers or was it his daddy's kin
'Til he's nearly purely cowboy, born to ride and bred to win.

He's got Buffalo Bill Cody and Goodnight's jigger boss
And all of the brave blue soldiers that General Custer lost
The ghost of Pancho Villa, Sittin' Bull and Jessie James
All gathered by his campfire keepin' score and takin' names.

There's every Royal Mountie that ever got his man
And every day-work cowboy that ever made a hand
Each man that's rode before him, yup every mother's son
Is in his corner, rootin', when he nods to make his run.

Freckles Brown might pull his bull rope,
Casey Tibbs might jerk the flank,
Bill Pickett might be hazin' when he starts to turn the crank.
Plus Remington and Russell lookin' down his buckhorn sight
All watchin' through the window of this cowboy's eyes tonight.

And standin' in the catch pen or in chute number nine
Is the offspring of a mountain that's come down from olden time
A volcano waitin' quiet, 'til they climb upon his back
Rumblin' like the engine of a freight train on the track.

A cross between a she bear and a bad four wheel drive
With the fury of an eagle when it makes a power dive.
A snake who's lost its caution or a badger gone berserk
He's a screamin', stompin', clawin', rabid, mad dog piece o' work.

From the rollers in his nostrils to the foam upon his lips
From the hooves as hard as granite to the horns with dagger tips
From the flat black starin' shark's eye that's the mirror of his soul
Shines the challenge to each cowboy like the devil callin' roll.

In the seconds that tick slowly 'til he climbs upon his back
Each rider faces down the fear that makes his mouth go slack
And cuts his guts to ribbons and gives his tongue a coat
He swallows back the panic gorge that's risin' in his throat.

The smell of hot blue copper fills the air around his head
Then a single, solid shiver shakes away the doubt and dread
The cold flame burns within him 'til his skin's as cold as ice
And the dues he paid to get here are worth every sacrifice.

All the miles spent sleepy drivin', all the money down the drain
All the "if I's" and the "nearly's", all the bandages and the pain
All the female tears left dryin', all the fever and the fight
Are just a small downpayment on the ride he makes tonight.

And his pardner in this madness that the cowboy's call a game
Is a ton of buckin' thunder bent on provin' why he came
But the cowboy never wavers he intends to do his best
And of that widow maker, he expects of him no less.

There's a solemn silent moment that every rider knows
When the time stops on a heartbeat like the earth itself was froze
Then all the ancient instinct fills the space between his ears
Til the whispers of his phantoms are the only thing he hears.

When you get down to the cuttin' and the leather touches hide
And there's nothin' left to think about, he nods and says, "Outside!"
Then frozen for an instant against the open gate
Is hist'ry turned to flesh and blood, a warrior incarnate.

And while they pose like statues in that flicker of an eye
There's somethin' almost sacred, you can see it if you try.
It's guts and love and glory-one mortal's chance at fame
His legacy is rodeo and cowboy is his name.

//"Turn 'im out"//

                                         ©[[Baxter Black|http://www.baxterblack.com/]]
/***
| Name|LessBackupsPlugin|
| Description|Intelligently limit the number of backup files you create|
| Version|3.0 ($Rev: 2320 $)|
| Date|$Date: 2007-06-18 22:37:46 +1000 (Mon, 18 Jun 2007) $|
| Source|http://mptw.tiddlyspot.com/#LessBackupsPlugin|
| Author|Simon Baird|
| Email|simon.baird@gmail.com|
| License|http://mptw.tiddlyspot.com/#TheBSDLicense|
!!!Description
You end up with just backup one per year, per month, per weekday, per hour, minute, and second.  So total number won't exceed about 200 or so. Can be reduced by commenting out the seconds/minutes/hours line from modes array

!!!Notes
Works in IE and Firefox only.  Algorithm by Daniel Baird. IE code by by Saq Imtiaz.
!!!Code
***/
//{{{
window.getSpecialBackupPath = function(backupPath) {

	var MINS  = 60 * 1000;
	var HOURS = 60 * MINS;
	var DAYS  = 24 * HOURS;

	// comment out the ones you don't want
	var modes = [
		["YYYY",  365*DAYS], // one per year for ever
		["MMM",   31*DAYS],  // one per month
		["ddd",   7*DAYS],   // one per weekday
		//["d0DD",  1*DAYS],   // one per day of month
		["h0hh",  24*HOURS], // one per hour
		["m0mm",  1*HOURS],  // one per minute
		["s0ss",  1*MINS],   // one per second
		["latest",0]         // always keep last version. (leave this).
	];

	var now = new Date();

	for (var i=0;i<modes.length;i++) {

		// the filename we will try
		var specialBackupPath = backupPath.replace(/(\.)([0-9]+\.[0-9]+)(\.html)$/,
						'$1'+now.formatString(modes[i][0]).toLowerCase()+'$3')

		// open the file

		try {
			if (config.browser.isIE) {
				var fsobject = new ActiveXObject("Scripting.FileSystemObject")
				var fileExists  = fsobject.FileExists(specialBackupPath);
				if (fileExists) {
					var fileObject = fsobject.GetFile(specialBackupPath);
					var modDate = new Date(fileObject.DateLastModified).valueOf();
				}
			}
			else {
				netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
				var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
				file.initWithPath(specialBackupPath);
				var fileExists = file.exists();
				if (fileExists) {
					var modDate = file.lastModifiedTime;
				}
			}
		}
		catch(e) {
			// give up
			return backupPath;
		}

		// expiry is used to tell if it's an 'old' one. Eg, if the month is June and there is a
		// June file on disk that's more than an month old then it must be stale so overwrite
		// note that "latest" should be always because the expiration period is zero (see above)
		var expiry = new Date(modDate + modes[i][1]);
		if (!fileExists || now > expiry)
			return specialBackupPath;
	}
}

// hijack the core function
window.getBackupPath_orig = window.getBackupPath;
window.getBackupPath = function(localPath) {
	return getSpecialBackupPath(getBackupPath_orig(localPath));
}

//}}}
[[DistroWatch|http://www.distrowatch.com]] is a great site to keep up-to-date on what's been released and when.
! Linux Distributions
* [[Slackware]]
* [[Ubuntu]]
* [[Kubuntu]]
!~LiveCD's
!! General Purpose
* [[Knoppix|http://www.knopper.net/]]
** Knoppix-based
*** [[Knoppix-NSM|http://www.securixlive.com/knoppix-nsm/]] ++++ Detail
> //(added April 2007)//
> [[Knoppix-NSM|http://www.securixlive.com/knoppix-nsm/]] is dedicated to providing a framework for individuals wanting to learn about Network Security Monitoring (NSM) or who want to quickly and reliably deploy a NSM capability in their network. Our goal is to provide an introduction to NSM and a distribution that can be used as a launch pad to bigger and better things. We have tried to do most of the hard work to help you get up and running as fast as possible so you can spend more time learning about NSM, leaving the details as a latter exercise once familiar with the concepts.
> [[Knoppix-NSM|http://www.securixlive.com/knoppix-nsm/]] is based on [[KNOPPIX Technology|http://www.knopper.net/]], which means that you can test all the tools in a live session running on the CD without the need for a Hard Disk Drive (HDD) installation. [[Knoppix-NSM|http://www.securixlive.com/knoppix-nsm/]] has the added bonus of being able to install to a HDD so you can deploy a NSM framework into your production network and use it for real time monitoring.
====
*** [[LocalAreaSecurity|http://www.localareasecurity.com/]] (no longer active)
* [[Slax|http://www.slax.org]] ++++ Detail
{{{
SLAX is fast and beautiful Linux operating system which fits on small (3.14") CD-ROM 
disc. It runs directly from the CD (or USB) without installing. The Live CD described 
here is based on the Slackware Linux distribution and uses Unification File System 
(also known as unionfs), allowing read-only filesystem to behave as a writable one, 
saving all changes to memory.
}}}
====
** Slax-based
*** [[BackTrack|http://www.remote-exploit.org/backtrack.html]] //[[BackTrack Wiki|http://backtrack.offensive-security.com/index.php?title=Main_Page]]// ++++ Detail
BackTrack is the result of merging the two innovative penetration testing live linux distributions Auditor and Whax. Backtrack provides a thorough pentesting environment which is bootable via CD, USB or the network (PXE). The tools are arranged in an intuitive manner, and cover most of the attack vectors. Complex environments are simplified, such as automatic Kismet configuration, one click Snort setup, precompiled Metasploit lorcon modules, etc.
====
*** [[KCPentrix|http://kcpentrix.com/]] ++++ Detail
>KCPentrix 1.0 was designed to be a standalone Penetration testing toolkit for pentesters, security analysts and System administrators
>Now release 2.0 is a liveDVD, It features a lot of new or up to date tools for auditing and testing a network, from scanning and discovering to exploiting vulnerabilities
>Kcpentrix is based on SLAX 5, a Slackware live Dvd
>The Powerful modularity which Kcpentrix uses, allow us to easily customize our version, and include whichever modules we need.
>KCPENTRIX 2.0 is the most inovative and promising KCPENTRIX ever.  It switched to 2.6 kernel line. Zisofs compression was replaced by SquashFS, which provides better compression ratio and higher read speed.
====
!! [[Casting Crowns - Voice Of Truth]]
!! [[Mark Harris - Wish You Were Here]]
Encrypted(3B28B521B2CCAD60C093516C5F1921B4FC9C811C)
0601c8034f15ca7ef852813dfbe15788d680b4c7636a012131312132d1af5125ac
a969f52e9429df9c692139216dd988d037b5786220237ddd477d58b3cfe6b983
34b47025a721313321ab5ad04f4775a1d83b15c51a5549567c9c5848a9f48625
5ec097dd1ec6dd8b9cf05aea9cc2c179f05d60015b7157d91ea8c07c906b4465
8970130fb9d0c179529f8fae3a54b5a32998205d452e41ee5f346e9c153bcabe
059795267826798c617c2c29edb7ee80c7deb07292028207ef427268088a2139
213f9b0e76e38e944ad5e02131302137e699235a18323fa689234371a685616e
8932beae1dee208e1c1181a9e0edede08ce1ceb29c68cf8dc0b2ae75b4b79d9d
bf3b8321313121a4b2cb6bf0f507f5687b3621333421edb66a03d98b51f56414
c9bb63a3ff611c1c7f432dec38b91c8e2f34fb546b39abfbbb0787471dbf4bcb
aad0c8744239b06eaaa6f50421333321894869837c3d34948cd0da2d393c96a2
ab69f564024fef16f1872551bbcc3aeb9521313121d287fae674db25c8ce0159
547f32d44d0f7014d3213333211cbe92808421313121e52133342154c8db422c
eb63319e6ae92131322121313021b7e332e3c656a3880f93b2b0e89ac7a25fa7
87c067866841e95565f4a9773c9538d2c1282860cd213132211eaa1633494f35
82e860f3ab596762d2394b4bc7afef06a4703f1f69c87f18e9c54a2131302173
de57213333212fd321333921d4b9d89c56d6cfe3f9a29cd06035c1c8d5e5e4b0
658cb672f9d8b2c4aee33b7d6688f3623118102ad9cb46676be9cb382af16b34
5910bb5e818b9844a34365f94b81ed58fd8e11dd213333219931a107b6baba86
33aaca8789a91a3f85d68f1df571dea9067303899115c8543bd7f38faeb10548
c4a747c2b5a88f1b564d43336bf8aa08cf441b192dff33c14a4aee4ec423d216
012636c228159caf42f8f282cde6fd61b6326c83357131cdeace1d434303fb2c
56e2e12bd758242bf76ad5cd3ce2b4c5180fc2bf742bf27c5bf2fbc774c457a7
2c075b857d718e9fbe8342cf7a539a44da71af06327f2444824bb596c6513695
acd3919f02df80fff4b87d5949085f3187847e4173b0c74b5ce7676b42ad7aa5
b320a9b2909a28e26f25e1433c2a5921313321d9bb5d03b5436cf4e615d072c3
edc821313630219288a1289e4a21333921e0180f1458edcb0672e4f455213333
21cd7421333421197f3081055821333421aa65462cef1f6303f8fa7326a1408a
1fb16ad18f9402b4c203a6fbd2f2487a9699724d6ff446e15055ecaf6e4af54b
1e75fd482b5e5abac182f3e62fbf18dce07aa63a51e1c75fb202942131363021
dd104a65074654495a9370605e9c63eb1c6d1479fd31f4445f568c2d9b60492b
c56c2930fae1a4e92072c1a669d4f9cd53819c6e54cf3bd463c39d5d9daf7c08
3a1bfaa456ddde97f28fe0657ac295c386e19ecaef3c9421392116fb10c095dd
f4f3d8b3ba6f25e1ae5830d64a747a2436201e11f3a6b9dbe112ffc910602130
217a0843db4ef1705682bc3eda94b1db65213921ff551ac421302188bd9025ab
8d5bfc28b5d95b3a04f7bde9a4df9ce96d6e629259b0656bf03469c26316a406
9286322f925b899ed6384fffb1314125acc3e2213921c836bb115e2ed6705135
3c89b6c29ea412e68bf2236e325c53cbf324cf213921ab841055c37620d14910
cfe4ddb5a71ad5b93a257f58664c43ce4ddad830ebf25feefee74a07385aa823
5821313630211749d11cc85e412b50ffa420e44cee96b84da33391b125c19bac
6ef3252133332147723d213333217c57f992d6952e1f862d21313021d3f4c667
915d9d1d2131363021aa5abc54b6c3908e3a55242b1da3f9329d4cf93a46c5d2
2c957c175c9f885d3a9788e8c5f23ab42c68fa5dcaf1a85669143cd1b8e8bf9d
4c1343085388daee5621313630218bcd9b113f1191916b4e62595b90dbf6ec56
984b5cccdb2621333321f683d38d91185c0e30a898661cbd6882d986c7c7434b
824bffcdb47981285ddf2c4ce6737dfd1ce120d2504a85beb0fd96f0f8bb7c3f
155ce16c2131363021d8eb5344dcaeae04d13ff63e2447e78a0e36f0684d1856
0581269a21333921fcbbac826c61445e44582885cd15a63d24c57d8a81a76cb0
8a56b7ec943d1ffedd975b1721333421e359881da9c91c66af80566d6dc08048
1d434ede8e7b745ba32d3f4724c92662838c2131332194213136302188b9a8c2
82e47d7028aebe5c2130216c6412632a60e3cf173942d77f9262dd74c86b2cac
88d0a52f29b0ae7721333421213334213357d5684942ef719e6f8da877dabe96
e67bc9cc106bbe2660e33791b2af3c21333421c02c5c6d5789bdaf8435213132
2113b8fdf57ab1d266fa45fd23058e28213334212ac1c9a5e6a26d213131216a
23f893f313f73fef84c3c978df93d281d204f13e58e6f49e26aafa2133332121
313021ef4020bf9ece7bf96e59d8ec77df42eff39971939e2dae41596e9330bb
194ae59a74a621333321159e3279fe8bfd5a1fb32fd95c75d0213339217a8591
e830fce3f269eb1b508a42a16b2a4a479c4c4bb112c8d4eca93412bdd7123b19
ee4c2f908f97cb9a20062001d77c6bce1e949311783fe3cd244c2d2a165e1b13
445621313221b113391859f82a319ba47d245f343ede26f7b42512b2a6a42131
312123213136302155c84d0584a6a54077a786f10392595d873124d4ef79f32d
7e670fb214c62b6c7b956572671735c4b0a735570290f170475b50c4d0afa4e6
37b03e47939421333321eaab449c3e48aee1ac04713f51075b4172e233de4cd0
28c8513b7bf2886dd3a1e54da633a2a1405e8894f06a39d09ea5914d0fe624be
a8caf247fc05d9e95d2c213921213334219d213021ca2490ef8be630281bd224
e65a2131302189c0ae5c60b11c2131332160c8cbdd4e02c98221313630215958
5ece2139219f213132219772850ff4213921a9dcba3521313321400176c82130
21ab6d60f86660d2d0bb2dd6d5e5f2c558c03f5898f6213130217f99b2ffc268
82030e6e3b70cffb5e391e5b6185d4036c4d505335023351ae740f726c415e39
9130cf547196c4da74984c5252d38e21333921dbe488f7c8aa21313321334e88
de70213132218d78f3c4b9616670fbd5e8f6359f7a133f5f759633170778ebfb
d9e9fc03d51e2131302138f80606c43b213334211d74857c7cb82ddadcf14436
23cc92408dea70eea1538d23d834438637dd247840b92a3cfbcbae62337dbdfb
79d921333921cbf7053cdbc0c24131bfce39b07ac477fa66e291e9b1e667d011
4d72f2562e2d4d974aa519145b9747171460ed81f18e2cc178938ed435e885da
13fdea618a2d7e612bc6989bb7a606ec9c0804352556d86e484cceba54d3b74f
52372f794457e2d58d24394695874d0e53d4d95b179dedd75d91d6177c213334
21faada3f06ff3afb5cf9c39394e5f40d33ef1149b213921c7eaf61231c0ba89
954237e46b451bcfae7fe46c8eb6d431be3094659089e2581356cde28080bfc4
a22131302121392121333921e9506921313630215d35af18900e7429ec185fd5
e0b97e1682aaa450ce52bb46b58fc1fe1614b86973df7c7840213339218ca7f2
5ba97d4271b42a234df515d1f1f184c1d8348329bfe3f26b04d5c1d16230794e
78b195c04bb51844ff2131332184e38e8cc9e3b2c955e921313630215405034f
13db374ed22339e9c2fbfb4f876a287fb8213339214177d98450148487cb5c7f
c72131312112785e70f3168402c3052bc12bec821b8ebfa83015037e10fa35f8
6055f3c18277a53a312f3d8040fc21313321bb51b1e118b4ead28496851d9db7
56554fbc9056514635eeae6ad01bcbeddcbc5dea9bd7e5c92131332108b677da
751a2b3d2349f97cbed65b21333921769f6f2e2e78c2b052c22f391177800376
08ec3e26f7213921e2c6c521333321b2b7e2319f14a359c44961dcb0f49d5ec8
ade2aa213333216a049bc248ba500f2014bff3e650a668dc36faaff83be0b0d4
5164c69f112fe11e5f7daaa84850082a03f43aa84d78303a8c61f9557b213130
218164355cea17ab052bf8441ecfb108f114c1dc92f6b4fee551b24e757f8c96
7ce0a65763ca73bd8ca10384dd59f5666c43df569a8dc3f8dc8c477beb9403ce
20dd82a57f478f9e4601738680295a5a21313121a3b58dd9562dcbb92dfc7bde
052d1f8f5781c1f01b5c6a0349a58cd84b62853a19e2686814739ac9a42e9118
9706d3afddfbe6c6a438213130218f5b5cfd4b2133342137d15fc6df7c296851
91012deeb0d1dc71e41c452b1c59114f206398b682c8695c5d2133332112c1f7
84caaa28a652bb58d221313121cb5f2bd7ab8ee68df5e2843d746ea9fa3d826d
b0f87bcfbf2deda9b21b03d991c76298787f6721302105d7d141969ebd2ecabd
77f1269eda8672451a3e9d18af9893822eca201ab6f89bd2e83f88c88e1023dc
3f8e2d7915c440548f5efc795279ecdc2c620fbe6e15369bb521313121604860
36c7f714b2474b9664a2d837c155966814ca07ee0ee43b80a66a1a6c84962d7a
7ff31afdce1f83c41388f9fab61843a91bc087a5697c28f347207821313021b6
4c445b33a8f8acd698fd117c841e2eadc6835936fa15af893f18a3e75b2bea99
947b213921d125f3c4ceb197ac213334216a2696026d9c51b8d4f6a9a74337f5
9178cd7e04a41eeb882633255c21333321f952e229de98a7139b38f23c9faceb
1e7fd5646c7fad6a3fc5bc46ba4c1082bcb55840835eca95f18cc861cf48258f
495384bb7df6213339211f39875221313121b964dd04dd6e0e73801f1b79a594
4c01a35ab80390e4be0f40b9d641b6b2ac5774a1499521313121f96047b72c6b
73f76435a3dfe06072aa7c778c49f3b9ca292d731b3f21333421bdad4ebc7baa
f34fc248e5a19bf763a92131302160116a632314d18fe6af5715a5016ceb623f
54e1c14b74fc05e8702139214d0e171afb4cbe9c2f2cd51a575de03a84142bcf
e0482aaee85492c769766071694805b288ff2974dc87d49816f2ea3c06f7bd17
f8cd75a7f0fbac8caa90f8f6faf175fcfbc2a59734cf26ed322baa2131312151
67f0bd922521313221bdefbc961c6efcf83575d7e8e32133342112498ca57e5b
cb427087dbba592a213130214a145656df78612131363021f54952692c213339
210e12bac0c568fb629868213130211e83a6b64dc8234cd887472486f4b95bae
84958e6121333421723a6bf05bd5caea35a156b65c2133392121313221085f78
97e7d1618065eb3ad32904d49d2139215ec7dd64483c5866b545d371eca8454e
f83217bea483a9442a2b5bfd4fc3d1635ea13962e839433259ef21313021b3d6
98cb90213133214f92e08b5f1554561655b798c7bf3a8bd82b975a7f26f77d7f
c88a154d1ed22131332120a3ef70681d9026235e56fb2b1f9cda048290eeae49
afe1fc921d94d63adf29c1292130210f02bbbbcede1008ecd1558f3ccd5e8321
313021f2ba176503189d2131363021d6e921333421fcd4b3523b80da07aaad3c
96244bd13ca3394e14c2d6fe86c90ef35379e6c8d3d5ef3e3efe2a42c990b8dc
e4c2fe104a1703ae12fe518612acd6cd3fbabebf9f42682a4d2968c073fa1e93
c2b2e2a6c826f96ac8481c73e0f85ef31828b147dc213021cd896259d09fa277
d7509fcb73a9a56978f6fc1ede5c8970aacde875337a741889b0eddadd3fb838
ac749f55663d999741295ea356019afb01a92f0e420219328a911606985c9bef
d16befb8d637f1389a76158ace2957cdd07a5282d99b213132215c2131363021
edeb185e9d87ff9ab6b31fb02a37c37c3f39137b8bc3d9c4455ceb6fa2289d8a
39c09c4c14ce6a30d4a93820b6cf6087b6eda5bdfaa17c7df3937702185eea36
5a8630da7e5c38b2f5d305c018388391cdbc29d39975841ec3a916e88fc8d555
3b26c2902c98192e51ef72b71d9f489dbfec6439a399637fc421313121f5fed6
e39bf9aa12c3ba2f3948fd607e043ee486d0c4213921e51c82e912156dc716f6
e52133392121333921a6e17a74398b4629e5e5da4f4e911e7e35ec43f0213334
21202355ba07e1edbd101353c2cab17b655ffa14a85a9215da6e51d277317d7c
213132218bc63993317ca9135158c90f61e8875533c138bc71e7ba9b05010393
20fcec2fd765ecfe547fd04db9949cc5b5f5d997f1a7ac956b04e5bd9760057a
e51a2131363021e39f3af925f8cf6c2a5f411bf6595f5101b0db99b5974efa07
615cf97e90944f433eee2e2cfcb3235956f1a16e8f31aa59fac8178a2df9fe63
f713f9e701f8d00f9731ed2a30f0e6f1213334213921313630218f8dfb213021
b972c4f41033a43df3da4deb37d86f84b7b81fbe51823b9f51cac5592993d9d5
256db854f3c6bbfeb51144ddcd5b037721313121d4db801af8c05f6ba10e5ca4
7adf3bbeaf0517163cd061d7921f63a630ff368b6d497873aeaaacffb20ff55e
94f5f65028ec2aebdcaa3b3bf608c621313021d14d019706ba2835cde9302133
3921c5beccf6b18eaca37a2f74fb9b9ded16213339213bccd7e38f62b095dd4b
b2ee1fec42bd73409c1030c761caeef633213921a2c7ba78579aaeb4c0418650
50672a817d402dd64b298f9634a2dc375c533be7c1cd2e19944d4f963d213132
2123cb1fa64fe880b837bf90936de4eddc9877e4213021f092769117eca2bfac
334b
Encrypted(B3C2538B03513924E46FEC4EB7F0DB36490AA0F1)
a474f193ed355c11d2c80f11e6f74cf82133332153afb96fdeb6e1a72131363021
e762aa59543ddc6b5fe930a5a45c6bb60fbe2133342190cd41abce7817f3dafc
db6c1e882131363021eba9db50fd50dfdbeddf7bcfd9e123ffc5dada230e68c0
b6892a4fcf253ed54d213339216e213131212131332170301db9ebf56a2f0563
3b5e7725a71bfb839a6e297aacef35f47e4678437eb5bd8f14debadde9c208e1
6ed13b961dcf4cacb81cea488c3c213021757e47dd4c944506185cb6ce2810b9
77b385644857a4897a0fd11a4ceb71ea64ccb2528998ce5cb185554aaca1eacf
7d660605f858528d705c21313221d3d6987664d66014da7410951f72ecaa5bc1
34b45a4ed9112a65be54b492f99c5914ca213131215fcdc32131322183aa9e31
1323213339218b2f6043583881e1ac9f478c865b58b95ef111768ee3128aa376
2d2dd26dd01820e10879a1183bf79b2a1945def4c83f8504714db2a9c6d26608
12d4fa4b84d934b65ff3502bb77bbe127a21313121a52b12d4cb293b89bfbba8
45b1e0c664425bf86c3260116b012131332134826699fd5b5a32660457b8c721
313121e676652133342189c36abf75f48f5d213136302132662f9383b8dc3b96
4ca58291aaecf58139125bd6a821333321f15aeaf92344e45fc3c37c6c95424c
a4d4c7d64621333421e9e12cef36670f8561f76e7468beb64d6204bd4f947fc9
774d4c5a2a797c9e6d4966825c2e2d6908e4542f14bb416aede7aac551ede659
1d5668878a5a5026a775e114cb47ac11b2f09a952ce696ba1b42bc1b1e725e83
ae96cac5c589417c6eb906df21313021f2ad89c5952b4d5bf7f55b42ba468c3a
d74bbd069241b2a2569537e618c9c93652695f5e2f62426c843b0f2504c6b5c9
e921313221de5b663f32df3f595f0483f120c171bb21333921c74601c7045193
a445ada112128cbf473e19cab00e650898fbef2d2661d6df21302141bb3274fe
6acf05d421313221e4cf39d2fce7fce162a82133392171d552334b0e610342fe
b25c283b4ccd7cc1ae8a9cfd379d0fd73c633b2c2131322133ab4adcda7f2130
21eabda6ea39515e522e32ef79ecabc79a0637783cb02c6a
Name: Blue
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
Name: Green
Background: #fff
Foreground: #000
PrimaryPale: #9b9
PrimaryLight: #385
PrimaryMid: #031
PrimaryDark: #020
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
Name: Red
Background: #fff
Foreground: #000
PrimaryPale: #fdd
PrimaryLight: #c55
PrimaryMid: #711
PrimaryDark: #500
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
Name: Smoke
Background: #fff
Foreground: #000
PrimaryPale: #aaa
PrimaryLight: #777
PrimaryMid: #111
PrimaryDark: #000
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
Name: Teal
Background: #fff
Foreground: #000
PrimaryPale: #B5D1DF
PrimaryLight: #618FA9
PrimaryMid: #1a3844
PrimaryDark: #000
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #f8f8f8
TertiaryLight: #bbb
TertiaryMid: #999
TertiaryDark: #888
Error: #f88
<html><img src="http://www.tuaw.com/images/2005/12/ModifierKeys.png"></img></html>
[[Mac OS X keyboard shortcuts|http://docs.info.apple.com/article.html?artnum=75459]]

..one //not// listed is ''Ctrl-Option-Command-8'' - toggles the negative of the screen
Welcome to [[DakotaGeek.com|http://dakotageek.com]], Steve Weidner's [[Information Technology]] and [[Information Security]] site.

''Check out photos of our [[DIY Extreme Home Makeover|http://picasaweb.google.com/sweidner/]]''

Follow me on [[Twitter|http://twitter.com/DakotaGeek]]

//Steve //

//AboutThisPage//
----
<<tag Bookmarks>> - <<tag MiscNotes>> - <<tag HowTo>> - <<tag Personal>> - [[Index]] - <<toggleSideBar "Toggle SideBar">>
!!//Verse 1//
I wanted to tell you how closely I've kept
The memories of you in my heart
And all of the lifetimes that we've had to share
Live even though we're apart

But dont cry for me
'Cause I'm finally free

!!//Chorus//
To run with the angles
On streets made of gold
To listen to stories of saints new and old
To worship our Maker
That's where I'll be
When you finally find me

!!//Verse 2//
No dont you be weary cause waiting for you
Are wonders that you've never known
Just hold on to Jesus, reach out for His hands
And one day they'll welcome you home

And that's when you'll be
Finally Free
Finally Free

!!//(Chorus)//

I wish you we're here
I wish you we're here

!!//Bridge//
And all of the dreams that you treasure
Will soon come together
And that's when your sorrow will tomorrow
And you will rise again

!!//(Chorus)//

I wish you were here
I wish you were here 
/***

|Name|MenuEditPlugin|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#MenuEditPlugin|
|Version|0.2|
|Requires|~TW2.x|
!Description:
Adds 'doubleclick to edit source' to the MainMenu, SideBarOptions, and SideBarTabs

!History
*20-07-06: version 0.2: hijacked restart, no need to put a macro in the mainMenu anymore.
*28-04-06: version 0.1: working.

!Code
***/
//{{{

window.restart_lewcid_menuedit = restart;
window.restart = function () {
         window.restart_lewcid_menuedit();
var menus = new Array("topMenu","sidebarOptions","sidebarTabs","contentFooter","mainMenu");
for(var t=0; t<menus.length; t++){
         if (document.getElementById(menus[t]))
              {var menu = document.getElementById(menus[t]);
               menu.ondblclick = window.onMenuDblClick;}}
}



window.onMenuDblClick = function(e){
if (!e) var e = window.event;
story.displayTiddler(null,this.getAttribute("tiddler"),2,false,null)
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
return false;
}
//}}}
----
//"The opposite of a correct statement is a false statement. But the opposite of a profound truth may well be another profound truth."//
  - Niels Bohr
----
[[MonkeyPirateTiddlyWiki|http://mptw.tiddlyspot.com]] is a distribution of [[TiddlyWiki|http://www.tiddlywiki.com/]] created by Simon Baird. See [[the web site|http://mptw.tiddlyspot.com/]] for more information.
!!Upgrading ~MonkeyPirateTiddlyWiki
This "empty" ~MonkeyPirateTiddlyWiki file comes pre-installed with the core ~MonkeyPirateTiddlyWiki plugins. You can upgrade these core plugins to the latest version by doing the following:
* Click ImportTiddlers
* Click "Choose..." and select "~MptwUpgradeURL"
* Click "fetch"
* Click the checkbox in the first column heading to select all tiddlers
* Click "More actions..." and select "Import these tiddlers"
* Click "OK" to confirm you want to overwrite the tiddlers
* Save and reload
/***
| Name|MptwLayoutPlugin|
| Description|A package containing templates and css for the MonkeyPirateTiddlyWiki layout|
| Version|3.0 ($Rev: 1845 $)|
| Source|http://mptw.tiddlyspot.com/#MptwLayoutPlugin|
| Author|Simon Baird <simon.baird@gmail.com>|
| License|http://mptw.tiddlyspot.com/#TheBSDLicense|
!Notes
Presumes you have TagglyTaggingPlugin installed. To enable this you should have a PageTemplate containing {{{[[MptwPageTemplate]]}}} and similar for ViewTemplate and EditTemplate.
***/
//{{{
// used in MptwViewTemplate
config.mptwDateFormat = 'DD/MM/YY';
config.mptwJournalFormat = 'Journal DD/MM/YY';
//config.mptwDateFormat = 'MM/0DD/YY';
//config.mptwJournalFormat = 'Journal MM/0DD/YY';

config.shadowTiddlers.GettingStarted += "\n\nSee also MonkeyPirateTiddlyWiki.";

//}}}

//{{{
merge(config.shadowTiddlers,{

'MptwEditTemplate':[
 "<!--{{{-->",
 "<!--- http://mptw.tiddlyspot.com/#MptwEditTemplate ($Rev: 1829 $) --->",
 "<div class=\"toolbar\" macro=\"toolbar +saveTiddler saveCloseTiddler closeOthers -cancelTiddler cancelCloseTiddler deleteTiddler\"></div>",
 "<div class=\"title\" macro=\"view title\"></div>",
 "<div class=\"editLabel\">Title</div><div class=\"editor\" macro=\"edit title\"></div>",
 "<div class=\"editLabel\">Tags</div><div class=\"editor\" macro=\"edit tags\"></div>",
 "<div class=\"editorFooter\"><span macro=\"message views.editor.tagPrompt\"></span><span macro=\"tagChooser\"></span></div>",
 "<div macro=\"showWhenExists EditPanelTemplate\">[[EditPanelTemplate]]</div>",
 "<div class=\"editor\" macro=\"edit text\"></div>",
 "<!--}}}-->"
].join("\n"),

'MptwPageTemplate':[
 "<!--{{{-->",
 "<!-- http://mptw.tiddlyspot.com/#MptwPageTemplate ($Rev: 1829 $) -->",
 "<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>",
 "	<div class='headerShadow'>",
 "		<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;",
 "		<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>",
 "	</div>",
 "	<div class='headerForeground'>",
 "		<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;",
 "		<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>",
 "	</div>",
 "</div>",
 "<!-- horizontal MainMenu -->",
 "<div id='topMenu' refresh='content' tiddler='MainMenu'></div>",
 "<!-- original MainMenu menu -->",
 "<!-- <div id='mainMenu' refresh='content' tiddler='MainMenu'></div> -->",
 "<div id='sidebar'>",
 "	<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>",
 "	<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>",
 "</div>",
 "<div id='displayArea'>",
 "	<div id='messageArea'></div>",
 "	<div id='tiddlerDisplay'></div>",
 "</div>",
 "<!--}}}-->"
].join("\n"),

'MptwStyleSheet':[
 "/*{{{*/",
 "/* http://mptw.tiddlyspot.com/#MptwStyleSheet ($Rev: 2246 $) */",
 "",
 "/* a contrasting background so I can see where one tiddler ends and the other begins */",
 "body {",
 "	background: [[ColorPalette::TertiaryLight]];",
 "}",
 "",
 "/* sexy colours and font for the header */",
 ".headerForeground {",
 "	color: [[ColorPalette::PrimaryPale]];",
 "}",
 ".headerShadow, .headerShadow a {",
 "	color: [[ColorPalette::PrimaryMid]];",
 "}",
 "",
 "/* separate the top menu parts */",
 ".headerForeground, .headerShadow {",
 "	padding: 1em 1em 0;",
 "}",
 "",
 ".headerForeground, .headerShadow {",
 "	font-family: 'Trebuchet MS' sans-serif;",
 "	font-weight:bold;",
 "}",
 ".headerForeground .siteSubtitle {",
 "	color: [[ColorPalette::PrimaryLight]];",
 "}",
 ".headerShadow .siteSubtitle {",
 "	color: [[ColorPalette::PrimaryMid]];",
 "}",
 "",
 "/* make shadow go and down right instead of up and left */",
 ".headerShadow {",
 "	left: 1px;",
 "	top: 1px;",
 "}",
 "",
 "/* prefer monospace for editing */",
 ".editor textarea {",
 "	font-family: 'Consolas' monospace;",
 "}",
 "",
 "/* sexy tiddler titles */",
 ".title {",
 "	font-size: 250%;",
 "	color: [[ColorPalette::PrimaryLight]];",
 "	font-family: 'Trebuchet MS' sans-serif;",
 "}",
 "",
 "/* more subtle tiddler subtitle */",
 ".subtitle {",
 "	padding:0px;",
 "	margin:0px;",
 "	padding-left:0.5em;",
 "	font-size: 90%;",
 "	color: [[ColorPalette::TertiaryMid]];",
 "}",
 ".subtitle .tiddlyLink {",
 "	color: [[ColorPalette::TertiaryMid]];",
 "}",
 "",
 "/* a little bit of extra whitespace */",
 ".viewer {",
 "	padding-bottom:3px;",
 "}",
 "",
 "/* don't want any background color for headings */",
 "h1,h2,h3,h4,h5,h6 {",
 "	background: [[ColorPalette::Background]];",
 "	color: [[ColorPalette::Foreground]];",
 "}",
 "",
 "/* give tiddlers 3d style border and explicit background */",
 ".tiddler {",
 "	background: [[ColorPalette::Background]];",
 "	border-right: 2px [[ColorPalette::TertiaryMid]] solid;",
 "	border-bottom: 2px [[ColorPalette::TertiaryMid]] solid;",
 "	margin-bottom: 1em;",
 "	padding-bottom: 1em;",
 "	padding-top: 0.75em;",
 "}",
 "",
 "/* make options slider look nicer */",
 "#sidebarOptions .sliderPanel {",
 "	border:solid 1px [[ColorPalette::PrimaryLight]];",
 "}",
 "",
 "/* the borders look wrong with the body background */",
 "#sidebar .button {",
 "	border-style: none;",
 "}",
 "",
 "/* this means you can put line breaks in SidebarOptions for readability */",
 "#sidebarOptions br {",
 "	display:none;",
 "}",
 "/* undo the above in OptionsPanel */",
 "#sidebarOptions .sliderPanel br {",
 "	display:inline;",
 "}",
 "",
 "/* horizontal main menu stuff */",
 "#displayArea {",
 "	margin: 1em 15.7em 0em 1em; /* use the freed up space */",
 "}",
 "#topMenu br {",
 "	display: none;",
 "}",
 "#topMenu {",
 "	background: [[ColorPalette::PrimaryMid]];",
 "	color:[[ColorPalette::PrimaryPale]];",
 "}",
 "#topMenu {",
 "	padding:2px;",
 "}",
 "#topMenu .button, #topMenu .tiddlyLink, #topMenu a {",
 "	margin-left: 0.5em;",
 "	margin-right: 0.5em;",
 "	padding-left: 3px;",
 "	padding-right: 3px;",
 "	color: [[ColorPalette::PrimaryPale]];",
 "	font-size: 115%;",
 "}",
 "#topMenu .button:hover, #topMenu .tiddlyLink:hover {",
 "	background: [[ColorPalette::PrimaryDark]];",
 "}",
 "",
 "/* make 2.2 act like 2.1 with the invisible buttons */",
 ".toolbar {",
 "	visibility:hidden;",
 "}",
 ".selected .toolbar {",
 "	visibility:visible;",
 "}",
 "",
 "/* experimental. this is a little borked in IE7 with the button ",
 " * borders but worth it I think for the extra screen realestate */",
 ".toolbar { float:right; }",
 "",
 "/* for Tagger Plugin, thanks sb56637 */",
 ".popup li a {",
 "   display:inline;",
 "}",
 "",
 "/* make it print a little cleaner */",
 "@media print {",
 "	#topMenu {",
 "		display: none ! important;",
 "	}",
 "	/* not sure if we need all the importants */",
 "	.tiddler {",
 "		border-style: none ! important;",
 "		margin:0px ! important;",
 "		padding:0px ! important;",
 "		padding-bottom:2em ! important;",
 "	}",
 "	.tagglyTagging .button, .tagglyTagging .hidebutton {",
 "		display: none ! important;",
 "	}",
 "	.headerShadow {",
 "		visibility: hidden ! important;",
 "	}",
 "	.tagglyTagged .quickopentag, .tagged .quickopentag {",
 "		border-style: none ! important;",
 "	}",
 "	.quickopentag a.button, .miniTag {",
 "		display: none ! important;",
 "	}",
 "}",
 "/*}}}*/"
].join("\n"),

'MptwViewTemplate':[
 "<!--{{{-->",
 "<!--- http://mptw.tiddlyspot.com/#MptwViewTemplate ($Rev: 2247 $) --->",
 "",
 "<div class='toolbar'>",
 "	<span macro=\"showWhenTagged systemConfig\">",
 "		<span macro=\"toggleTag systemConfigDisable . '[[disable|systemConfigDisable]]'\"></span>",
 "	</span>",
 "	<span macro=\"showWhenTagged palette\">",
 "		<span macro=\"setPalette\"></span>",
 "	</span>",
 "	<span style=\"padding:1em;\"></span>",
 "	<span macro='toolbar closeTiddler closeOthers +editTiddler +easyEdit deleteTiddler > fields syncing permalink references jump'></span> <span macro='newHere label:\"new here\"'></span>",
 "	<span macro='newJournalHere {{config.mptwJournalFormat?config.mptwJournalFormat:\"MM/0DD/YY\"}}'></span>",
 "</div>",
 "",
 "<div class=\"tagglyTagged\" macro=\"tags\"></div>",
 "",
 "<div class='titleContainer'>",
 "	<span class='title' macro='view title'></span>",
 "	<span macro=\"miniTag\"></span>",
 "</div>",
 "",
 "<div class='subtitle'>",
 "	<span macro='view modifier link'></span>,",
 "	<span macro='view modified date {{config.mptwDateFormat?config.mptwDateFormat:\"MM/0DD/YY\"}}'></span>",
 "	(<span macro='message views.wikified.createdPrompt'></span>",
 "	<span macro='view created date {{config.mptwDateFormat?config.mptwDateFormat:\"MM/0DD/YY\"}}'></span>)",
 "</div>",
 "",
 "<div macro=\"showWhenExists ViewPanelTemplate\">[[ViewPanelTemplate]]</div>",
 "",
 "<div macro=\"hideWhen tiddler.tags.containsAny(['css','html','pre','systemConfig']) && !tiddler.text.match('{{'+'{')\">",
 "	<div class='viewer' macro='view text wikified'></div>",
 "</div>",
 "<div macro=\"showWhen tiddler.tags.containsAny(['css','html','pre','systemConfig']) && !tiddler.text.match('{{'+'{')\">",
 "	<div class='viewer'><pre macro='view text'></pre></div>",
 "</div>",
 "",
 "<div macro=\"showWhenExists ViewDashboardTemplate\">[[ViewDashboardTemplate]]</div>",
 "",
 "<div class=\"tagglyTagging\" macro=\"tagglyTagging\"></div>",
 "",
 "<!--}}}-->"
].join("\n")

});
//}}}
<!--{{{-->
<!-- http://mptw.tiddlyspot.com/#MptwPageTemplate ($Rev: 1829 $) -->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
	<div class='headerShadow'>
		<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
		<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
	</div>
	<div class='headerForeground'>
		<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
		<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
	</div>
</div>
<!-- horizontal MainMenu -->
<div id='topMenu' refresh='content' tiddler='MainMenu'></div>
<!-- original MainMenu menu -->
<!-- <div id='mainMenu' refresh='content' tiddler='MainMenu'></div> -->
<div id='sidebar'>
	<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
</div>
<div id='displayArea'>
	<div id='messageArea'></div>
        <div id='tiddlersBar'></div>
	<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
/*{{{*/
/* http://mptw.tiddlyspot.com/#MptwStyleSheet ($Rev: 2246 $) */

/* a contrasting background so I can see where one tiddler ends and the other begins */
body {
	background: [[ColorPalette::TertiaryLight]];
}

/* sexy colours and font for the header */
.headerForeground {
	color: [[ColorPalette::PrimaryPale]];
}
.headerShadow, .headerShadow a {
	color: [[ColorPalette::PrimaryMid]];
}

/* separate the top menu parts */
.headerForeground, .headerShadow {
	padding: 1em 1em 0;
}

.headerForeground, .headerShadow {
	font-family: 'SLW_SmallCaps' 'Comic Sans MS' sans-serif;
	font-weight:bold;
}
.headerForeground .siteSubtitle {
	color: [[ColorPalette::PrimaryLight]];
}
.headerShadow .siteSubtitle {
	color: [[ColorPalette::PrimaryMid]];
}

/* make shadow go and down right instead of up and left */
.headerShadow {
	left: 1px;
	top: 1px;
}

/* prefer Comic Sans for editing */
.editor textarea {
	font-family: 'Comic Sans MS' sans-serif;
}

/* sexy tiddler titles */
.title {
	font-size: 250%;
	color: [[ColorPalette::PrimaryLight]];
	font-family: 'SLW_SmallCaps' 'Comic Sans MS' sans-serif;
}

/* more subtle tiddler subtitle */
.subtitle {
	padding:0px;
	margin:0px;
	padding-left:0.5em;
	font-size: 90%;
	color: [[ColorPalette::TertiaryMid]];
}
.subtitle .tiddlyLink {
	color: [[ColorPalette::TertiaryMid]];
}

/* a little bit of extra whitespace */
.viewer {
	padding-bottom:3px;
}

/* don't want any background color for headings */
h1,h2,h3,h4,h5,h6 {
	background: [[ColorPalette::Background]];
	color: [[ColorPalette::Foreground]];
}

/* make headers stand out a bit */
h1 {
	font-size: 130%;
	font-weight: bold;
}
h2 {
	font-size: 120%;
	font-weight: bold;
	padding-left:2em;
}
h3 {
	font-size: 115%;
	font-weight: bold;
	padding-left:4em;
}
h4 {
	font-size: 110%;
	font-weight: bold;
	padding-left:6em;
}
h5 {
	font-size: 105%;
	font-weight: bold;
	padding-left:8em;
}
h6 {
	font-size: 100%;
	font-weight: bold;
	padding-left:10em;
}

/* give tiddlers 3d style border and explicit background */
.tiddler {
	background: [[ColorPalette::Background]];
	border-right: 2px [[ColorPalette::TertiaryMid]] solid;
	border-bottom: 3px [[ColorPalette::TertiaryMid]] solid;
	margin-bottom: 1em;
	padding-bottom: 1em;
	padding-top: 0.75em;
}

/* make options slider look nicer */
#sidebarOptions .sliderPanel {
	border:solid 1px [[ColorPalette::PrimaryLight]];
}

/* the borders look wrong with the body background */
#sidebar .button {
	border-style: none;
}

/* this means you can put line breaks in SidebarOptions for readability */
#sidebarOptions br {
	display:none;
}
/* undo the above in OptionsPanel */
#sidebarOptions .sliderPanel br {
	display:inline;
}

/* horizontal main menu stuff */
#displayArea {
	margin: 1em 15.7em 0em 1em; /* use the freed up space */
}
#topMenu br {
	display: none;
}
#topMenu {
	background: [[ColorPalette::PrimaryMid]];
	color:[[ColorPalette::PrimaryPale]];
}
#topMenu {
	padding:2px;
}
#topMenu .button, #topMenu .tiddlyLink, #topMenu a {
	margin-left: 0.5em;
	margin-right: 0.5em;
	padding-left: 3px;
	padding-right: 3px;
	color: [[ColorPalette::PrimaryPale]];
	border-style: none;
	font-size: 115%;
	font-family: 'SLW_SmallCaps' 'Comic Sans MS' sans-serif;
}
#topMenu .button:hover, #topMenu .tiddlyLink:hover {
	background: [[ColorPalette::PrimaryLight]];
}

/* make 2.2 act like 2.1 with the invisible buttons */
.toolbar {
	float:right
	text-align:right;
	font-size:.8em
	border-style: none;
	visibility:hidden;
}
.selected .toolbar {
	border-style: none ! important;
	visibility:visible;
}

/* for Tagger Plugin, thanks sb56637 */
.popup li a {
   display:inline;
}

/* make it print a little cleaner */
@media print {
	#topMenu {
		display: none ! important;
	}
	/* not sure if we need all the importants */
	.tiddler {
		border-style: none ! important;
		margin:0px ! important;
		padding:0px ! important;
		padding-bottom:2em ! important;
	}
	.tagglyTagging .button, .tagglyTagging .hidebutton {
		display: none ! important;
	}
	.headerShadow {
		visibility: hidden ! important;
	}
	.tagglyTagged .quickopentag, .tagged .quickopentag {
		border-style: none ! important;
	}
	.quickopentag a.button, .miniTag {
		display: none ! important;
	}
}
/*}}}*/
For upgrading directly from tiddlyspot. See [[ImportTiddlers]].
URL: /proxy/mptw.tiddlyspot.com/upgrade.html
For upgrading. See [[ImportTiddlers]].
URL: http://mptw.tiddlyspot.com/upgrade.html
![[Internet2]] [[AccessGrid|http://www.accessgrid.org]]

![[Microsoft|http://www.microsoft.com]] [[ConferenceXP|http://research.microsoft.com/conferencexp/]]
<<<
[[ConferenceXP|http://research.microsoft.com/conferencexp/]] is an initiative of Microsoft Research. We’re exploring how to make advanced collaboration, multi-institutional instruction and distance learning a compelling, rich experience by assuming the availability of emerging and enabling technologies, such as high-bandwidth networks, high resolution displays, Tablet PCs, and the advanced features in Microsoft® Windows® XP and Windows® Vista.

The [[ConferenceXP|http://research.microsoft.com/conferencexp/]] research platform enables researchers and developers to create distributed applications that take advantage of ConferenceXP technology as well as Tablet PCs and wireless networks. It also enables them to develop the collaborative tools and applications they need without having to build them from the ground up. By partnering with research organizations and universities, the [[ConferenceXP|http://research.microsoft.com/conferencexp/]] project combines the academic community’s expertise in the learning sciences with Microsoft’s expertise in technology.
<<<

! Multicast Troubleshooting
!! [[rtpqual|http://www-personal.umich.edu/~bdr/et/mcast-windows.html]]
!! [[ssmping|http://www.venaas.no/multicast/ssmping/]]
//(ref [[Find Your CDP Neighbor with windump or tcpdump]])//

A Windows/Linux/OS X system can interface with several networks at the same time, so before you can start using [[windump|http://www.winpcap.org/windump/]] or [[tcpdump|http://www.tcpdump.org/]], you must find the “interface number” for your Ethernet card. This is not the [[MAC address|http://en.wikipedia.org/wiki/MAC_address]], but an internal number maintained by your computer. Just because you know there is only one Ethernet card in your PC do not assume that the interface number of this card is 1. ~Non-Ethernet interfaces also count. You may have a dial-up link configured (and this is a network interface also) so your Ethernet card can turn out to be #2! 

Run the following command to get the list of interfaces: 
!!Windows
at the DOS command prompt type: ''@@bgcolor(#000000):color(#ffffff):windump.exe -D @@ ''
!!Linux or OS X
at a root prompt type: ''@@bgcolor(#000000):color(#ffffff):tcpdump -D @@''

Output from windump looks like this:
{{{
C:\>windump -D
1.\Device\NPF_GenericDialupAdapter (Adapter for generic dialup and VPN capture)
2.\Device\NPF_{D48BA22C-1D00-4358-86B9-B7C3F070966B} (Marvell Gigabit Ethernet Controller)
}}}
Therefore, on my machine, I would specify interface 2 (-i 2) when using windump.  
//The interface can also be specified (if you're so inclined) by using the Windows device name - that is \Device\NPF_{blah blah blah} - but seriously, why?//
!General Info
*[[Default Password List|http://www.phenoelit.de/dpl/dpl.html]]

!Whois Lookup
*[[Internic|http://www.internic.net/whois.html]]
*[[Sam Spade|http://samspade.org/]]

!Network Security
* [[Marcus Ranum|http://www.ranum.com/index.html]]
! ..Yet to Install / Set Up
* FastStone Image Viewer
* Firefox Extensions
** Greasemonkey - GoogleSecure
** [[Personas for Firefox|http://labs.mozilla.com]]
* [[Total Commander]] //or [[TC UP]]//

! Software Installed
* [[ArsClip]] 
* [[Hamachi]] 1.0.2.5
* Heat
* [[Jing]]
* [[KeePass Password Safe]] 1.10
* [[Kompozer Portable]]
* [[Launchy]] 2.0
* [[Mozilla Prizm|http://labs.mozilla.com]]
* [[Paint.NET]] 3.22
* [[Pidgin|http://www.pidgin.im/]] 2.3.1 IM client
* [[SecureCRT|http://www.vandyke.com/]] ([[Upgrade eligibility|http://www.vandyke.com/pricing/upgrades/securecrt_securecrt_el.html]])
* Thunderbird Portable
* [[TrueCrypt|http://www.truecrypt.org/]] 5.0
* Visio 2007
* WinSCP Portable
* [[WireShark|http://www.wireshark.org/]] 0.99.7 (including ~WinPcap 4.0.2)

! Firefox Extensions
* [[AdBlock Plus|https://addons.mozilla.org/en-US/firefox/addon/1865]] 
<<<
Ever been annoyed by all those ads and banners on the internet that often take longer to download than everything else on the page? Install Adblock Plus now and get rid of them.
Right-click on a banner and choose "Adblock" from the context menu - the banner won't be downloaded again. Maybe even replace parts of the banner address with star symbols to block similar banners as well. Or you select a filter subscription when Adblock Plus starts up the first time, then even this simple task will usually be unnecessary: the filter subscription will block most advertisements fully automatically.
<<<
* [[Adblock Filterset.G Updater|https://addons.mozilla.org/en-US/firefox/addon/1136]]
<<<
This is a companion extension to Adblock or Adblock Plus and should be used in conjunction with it. This extension automatically downloads the latest version of Filterset.G every 4-7 days. Filterset.G is an excellent set of filters maintained by G for Adblock that blocks most ads on the internet. In addition, this extension allows you to define your own set of filters that you can add along with Filterset.G during an update. To report missed ads or problems with the extension visit the support forums http://forum.pierceive.com/.
<<<
* [[Advanced Dork 2.1.8|https://addons.mozilla.org/en-US/firefox/addon/2144]]
<<<
Advanced Dork: gives quick access to Google's Advanced Operators directly from the context menu.
----
Advanced Dork: Main Functions:
* Highlight any text, right click, and choose from over 15 Advanced Google Operators. This function can be disabled in the options menu.
* Right click anyware on the page with no text selected to be provided with the active pages HTML title for use with Google's intitle Operator, and the active pages HTML ALT tags for use with Google's allintext Operator. This function can be disabled in the options menu.
* Right click on a link and choose from site: links domain, link: this link, and cache: this link. Site: links domain will only search the domain name, not the full url.
* Right click the URL Bar (aka Address Bar) and choose from site, inurl, link, and cache. Inurl works with the highlighted portion of text only. Site will only search the domain name, not the full url.
<<<
* [[CustomizeGoogle|https://addons.mozilla.org/en-US/firefox/addon/743]]
<<<
CustomizeGoogle is a Firefox extension that enhance Google search results by adding extra information (like links to Yahoo, Ask.com, MSN etc) and removing unwanted information (like ads and spam). All features are optional and easily configured.
<<<
* [[Delicious Bookmarks|https://addons.mozilla.org/en-US/firefox/addon/3615]]
* [[Digger 2.0|https://addons.mozilla.org/en-US/firefox/addon/1467]]
<<<
Allows you to navigate to parent directories in a URL and climb through subdomains (e.g. go to http://example.com/ from http://sub.example.com/), all from a context menu on the Go button (and on the toolbar button provided by [[Go Up|https://addons.mozilla.org/en-US/firefox/addon/1677]], if you have that extension installed). Digger was originally based on the Adam Lock's Diggler extension
<<<
* [[DownThemAll|https://addons.mozilla.org/en-US/firefox/addon/201]]
* [[Fasterfox|https://addons.mozilla.org/en-US/firefox/addon/1269]]
* FireShot
<<<
FireShot is a Firefox extension that creates screenshots of web pages. Unlike other extensions, this plugin provides a set of editing and annotation tools, which let users quickly modify captures and insert text and graphical annotations. Such functionality will be especially useful for web designers, testers and content reviewers. It's possible to choose whether entire web page or only visible part of this page should be captured. Screenshots can be saved to disk (PNG, JPEG, BMP), copied to clipboard, e-mailed and sent to external editor for further processing.
<<<
* [[Gmail Manager]]
<<<
Allows you to manage multiple Gmail accounts and receive new mail notifications. Displays your account details including unread messages, saved drafts, spam messages, labels with new mail, space used, and new mail..
<<<
* [[Google Extensions for Firefox|http://www.google.com/tools/firefox/]]
** [[Google Browser Sync|http://www.google.com/tools/firefox/browsersync/index.html]]
** [[Google Notebook|http://www.google.com/googlenotebook/faq.html]]
** [[Google Toolbar|http://www.google.com/tools/firefox/toolbar/FT3/intl/en/index.html]]
* [[Greasemonkey|https://addons.mozilla.org/en-US/firefox/addon/748]]
* [[Image Zoom|https://addons.mozilla.org/en-US/firefox/addon/139]]
<<<
Easily zoom in, zoom out, fit image to screen or set custom zoom on individual images within a web page. All this can be done by using the context menu or a [[combination of mouse buttons and scroll wheel|http://imagezoom.yellowgorilla.net/install/install.html?old=0.0.0&new=0.2]]. Handy to see the finer details of smaller pics or to make very large pics fit within your screen
<<<
* [[NoScript|https://addons.mozilla.org/en-US/firefox/addon/722]]
* [[PicLens|https://addons.mozilla.org/en-US/firefox/addon/5579]] ([[PicLens Home Page|http://www.piclens.com/]])
* [[RSVP Reader|https://addons.mozilla.org/en-US/firefox/addon/2149]]
<<<
A rapid serial visual presentation (RSVP) tool that allows people to read text on the web up to 3.5 times faster. It presents selected text one word at a time in the same place at a pace you choose.
<<<
* [[ScribeFire|https://addons.mozilla.org/en-US/firefox/addon/1730]]
<<<
ScribeFire (previously Performancing for Firefox) is a full-featured blog editor that integrates with your browser and lets you easily post to your blog. You can drag and drop formatted text from pages you are browsing, take notes, and post to your blog.
<<<
* [[Tab Mix Plus|https://addons.mozilla.org/en-US/firefox/addon/1122]]

! Preinstalled Software
* [[Adobe|http://www.adobe.com]] Acrobat Reader 8
* Cisco VPN Client 5.0.01.0600
* Cisco Clean Access Agent 
* Microsoft Office 2007
* Mozilla [[Firefox]] 2.0.0.11
* QuickTime
* Real Player
/***
| Name:|NewHerePlugin|
| Description:|Creates the new here and new journal macros|
| Version:|3.0 ($Rev: 1845 $)|
| Date:|$Date: 2007-03-16 15:19:22 +1000 (Fri, 16 Mar 2007) $|
| Source:|http://mptw.tiddlyspot.com/#NewHerePlugin|
| Author:|Simon Baird <simon.baird@gmail.com>|
| License|http://mptw.tiddlyspot.com/#TheBSDLicense|
***/
//{{{
merge(config.macros, {
	newHere: {
		handler: function(place,macroName,params,wikifier,paramString,tiddler) {
			wikify("<<newTiddler "+paramString+" tag:[["+tiddler.title+"]]>>",place,null,tiddler);
		}
	},
	newJournalHere: {
		handler: function(place,macroName,params,wikifier,paramString,tiddler) {
			wikify("<<newJournal "+paramString+" tag:[["+tiddler.title+"]]>>",place,null,tiddler);
		}
	}
});

//}}}
/***
| Name:|NewMeansNewPlugin|
| Description:|If 'New Tiddler' already exists then create 'New Tiddler (1)' and so on|
| Version:|1.0 ($Rev: 2263 $)|
| Date:|$Date: 2007-06-13 04:22:32 +1000 (Wed, 13 Jun 2007) $|
| Source:|http://mptw.tiddlyspot.com/empty.html#NewMeansNewPlugin|
| Author:|Simon Baird <simon.baird@gmail.com>|
| License|http://mptw.tiddlyspot.com/#TheBSDLicense|
***/
//{{{

String.prototype.getNextFreeName = function() {
       var numberRegExp = / \(([0-9]+)\)$/;
       var match = numberRegExp.exec(this);
       if (match) {
               var num = parseInt(match[1]) + 1;
               return this.replace(numberRegExp," ("+num+")");
       }
       else {
               return this + " (1)";
       }
}

config.macros.newTiddler.getName = function(newName) {
       while (store.getTiddler(newName))
               newName = newName.getNextFreeName();
       return newName;
}


config.macros.newTiddler.onClickNewTiddler = function()
{
	var title = this.getAttribute("newTitle");
	if(this.getAttribute("isJournal") == "true") {
		var now = new Date();
		title = now.formatString(title.trim());
	}

	title = config.macros.newTiddler.getName(title); // <--- only changed bit

	var params = this.getAttribute("params");
	var tags = params ? params.split("|") : [];
	var focus = this.getAttribute("newFocus");
	var template = this.getAttribute("newTemplate");
	var customFields = this.getAttribute("customFields");
	story.displayTiddler(null,title,template,false,null,null);
	var tiddlerElem = document.getElementById(story.idPrefix + title);
	if(customFields)
		story.addCustomFields(tiddlerElem,customFields);
	var text = this.getAttribute("newText");
	if(typeof text == "string")
		story.getTiddlerField(title,"text").value = text.format([title]);
	for(var t=0;t<tags.length;t++)
		story.setTiddlerTag(title,tags[t],+1);
	story.focusTiddler(title,focus);
	return false;
};

//}}}

<<gradient vert #000000 #000044 #000011 #1111aa #000000>>
!Stuff I'm using
*[[Adium|http://www.adiumx.com/]]
> Adium is a free instant messaging application for Mac OS X that can connect to AIM, MSN, Jabber, Yahoo, and more.
*[[Jumpcut|http://jumpcut.sourceforge.net]]
> Jumpcut is an application that provides "clipboard buffering" — that is, access to text that you've cut or copied, even if you've subsequently cut or copied something else. The goal of Jumpcut's interface is to provide quick, natural, intuitive access to your clipboard's history.
*[[MacPorts|http://www.macports.org/]] //([[Installation|http://trac.macosforge.org/projects/macports/wiki/InstallingMacPorts]])//
** [[CDPR|http://homepage.mac.com/duling/halfdozen/CDPR-Howto.html]]
> sudo port install cdpr
> sudo port install libpcap
** Unison
> sudo port install unison
> sudo port uninstall unison
* [[muCommander|http://www.mucommander.com/]]
* [[XMeeting|http://xmeeting.sourceforge.net/]]
>..is a SIP and H.323 compliant and Open Source videoconferencing client for Mac OS X (10.4 and later). Historically, XMeeting has evolved from ohphoneX. However, XMeeting has been rewritten from scratch and uses a totally different software architecture than ohphoneX.
>Although not yet being a 1.xx release, XMeeting is quite stable, has good interoperability with other clients and provides many unique features such as the sophisticated Address Book integration. Much effort has been put into the Mac OS X native GUI. 
!Stuff that looks interesting / needs reviewed
*[[Automator|http://automator.us/index.html]]
> Doing things over and over is over. Mac OS X version 10.4 "Tiger" introduces Automator, a new application that automates anything on your computer quickly and easily. Using the power of Mac OS X, Automator controls your applications and files, automating-in an instant-what you need done with them.

>>

[[MptwPageTemplate]]
''IMPORTANT ~FOLLOW-UP''
''RE: THE NEW PASSWORD COMPLEXITY POLICY''
//[[BY SCOTT BLASZAK|http://www.mcsweeneys.net/2007/5/1blaszak.html]]//

- - - -

Dear Employees:

We've experienced some pushback regarding the new Password Complexity Policy effective last Wednesday. Resisting change is perfectly natural, but I think the recent objections are primarily rooted in misunderstanding. Yes, the new policy requires a bit more attention on your part, but it's truly not as bothersome as it's being made out to be, and I suspect in a few weeks you'll barely remember the transition. Let's go over the new policy one more time.

Passwords must be 12 characters or longer and must contain at least six of the following seven types of characters:
* English uppercase letters:{{{ A, B, C ... Z}}}
* English lowercase letters:{{{ a, b, c ... z}}}
* Arabic numerals:{{{ 0, 1, 2 ... 9}}}
* Non-alphanumeric special characters:{{{ !, @, # ... $}}}
* Wingdings:{{{ Ψ, Λ, δ}}}
* Japanese kanji characters: (To view these, consult your Microsoft Office Language Settings Help Guide)
* Original bitmap drawings created in a graphics program, converted into typeface characters, and uploaded to the corporate-network font library

Including these characters is a great start, but it's even more crucial to avoid words and numbers predictable to a password generator or someone familiar with your personal information. Therefore, in accordance with the new policy, passwords must not contain:
* Repeating characters, e.g., "{{{AbbC}}}" or "{{{aOOO}}}"
* Number sequences based on birthdays, anniversaries, addresses, phone numbers, jersey numbers of childhood sports heroes, prime numbers, or perfect squares
* Names of pets, schools, businesses, works of art, people you know, have known, or would like to know, things you own or lease, locations you've lived in or have considered visiting, or any concrete noun you've ever said in conversation

And that's it. Aside from these simple requirements, you're free to pick any password you want! See, I told you it's not so bad, and I hope whoever sent those vaguely threatening e-mails to the Help Desk last week considers an apology. In fact, you could say the new policy makes password creation a more imaginative exercise. Have fun with it!

Here's a sample password that meets the new requirements:
 {{indent{''~J8J^^Β^^ΝzγΨfΛδ@6%vΤfShr57w/''}}}
(This password is for example purposes only and cannot serve as your personal password.)

Of course, just because a password meets minimum requirements doesn't mean it's as secure as it could be. To help you test proposed passwords, we've created the __Password Evaluator__, which can assess your password's security strength as you type it. I see many of you have taken advantage of it already. Fantastic! Also, to whoever keeps entering "''~IHopeYouPeopleRotInHell''" into the Password Evaluator, let me assure you that that password is not very strong at all. For starters, it doesn't even have a Wingding.

Once you've decided on a valid password with a high security rating from the Password Evaluator, spend a few seconds committing it to memory and then destroy any written record of it. Voilà, you're done. Then you can sit back and forget about this password business for a whole two weeks, at which point your password will expire and you'll need to create a brand-new one.

A final note: It's very time-consuming for us to reset accounts for employees who've forgotten their passwords, so don't forget the cardinal rule of password creation: Choose something easy for you to remember!

Thank you for your cooperation.

Corporate Information Security 

1-800-444-4444 - Identifies the number that you're calling from
<<gradient vert #000000 #000044 #000011 #1111aa #000000>>
![[Alltel|http://www.alltel.com/]] ([[UT Starcom|http://www.utstar.com/]]) [[PPC6700|http://www.utstar.com/PCD/view_phone_details.aspx?mcode=PPC6700&bID=30&sAct=0]]
*[[Windows Mobile 2005|http://www.microsoft.com/windowsmobile/default.mspx]]
*''Apps''
**[[KeePass PPC|http://keepasssd.sourceforge.net/]]
**[[Magic Button|http://www.trancreative.com/mb.aspx]] - [[TranCreative|http://www.trancreative.com/]]
**TaskMgr
**[[Total Commander|http://www.ghisler.com/pocketpc.htm]] - [[Ghisler & Co|http://www.ghisler.com/ce.htm]]
**[[Pocket Sudoku|http://pocketsudoku.sourceforge.net/]] - Emil Andersson
**MortPlayer
**WiFiFoFum - Aspecto Software
**MS 2007 DST Patch
**[[MS .NET CF 2.0|dotNET Installation]]
>>
<<gradient vert #000000 #000044 #1111aa>>
* [[PodcastReady|http://www.podcastready.com]]
! Technology
* Geeks and God
* [[Geek Muse|http://geekmuse.dreamhosters.com/wp/]]
* Jesus Geek

! ~Sci-Fi
* [[7th Son|http://www.jchutchins.net/7Son/Home/Home.html]]
>>
/***
| Name|QuickOpenTagPlugin|
| Description|Changes tag links to make it easier to open tags as tiddlers|
| Version|3.0.1 ($Rev: 2342 $)|
| Date|$Date: 2007-07-05 10:57:49 +1000 (Thu, 05 Jul 2007) $|
| Source|http://mptw.tiddlyspot.com/#QuickOpenTagPlugin|
| Author|Simon Baird <simon.baird@gmail.com>|
| License|http://mptw.tiddlyspot.com/#TheBSDLicense|
***/
//{{{
config.quickOpenTag = {

	dropdownChar: (document.all ? "\u25bc" : "\u25be"), // the little one doesn't work in IE?

	createTagButton: function(place,tag,excludeTiddler) {
		// little hack so we can to <<tag PrettyTagName|RealTagName>>
		var splitTag = tag.split("|");
		var pretty = tag;
		if (splitTag.length == 2) {
			tag = splitTag[1];
			pretty = splitTag[0];
		}
		
		var sp = createTiddlyElement(place,"span",null,"quickopentag");
		createTiddlyText(createTiddlyLink(sp,tag,false),pretty);
		
		var theTag = createTiddlyButton(sp,config.quickOpenTag.dropdownChar,
                        config.views.wikified.tag.tooltip.format([tag]),onClickTag);
		theTag.setAttribute("tag",tag);
		if (excludeTiddler)
			theTag.setAttribute("tiddler",excludeTiddler);
    		return(theTag);
	},

	miniTagHandler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var tagged = store.getTaggedTiddlers(tiddler.title);
		if (tagged.length > 0) {
			var theTag = createTiddlyButton(place,config.quickOpenTag.dropdownChar,
                        	config.views.wikified.tag.tooltip.format([tiddler.title]),onClickTag);
			theTag.setAttribute("tag",tiddler.title);
			theTag.className = "miniTag";
		}
	},

	allTagsHandler: function(place,macroName,params) {
		var tags = store.getTags(params[0]);
		var filter = params[1]; // new feature
		var ul = createTiddlyElement(place,"ul");
		if(tags.length == 0)
			createTiddlyElement(ul,"li",null,"listTitle",this.noTags);
		for(var t=0; t<tags.length; t++) {
			var title = tags[t][0];
			if (!filter || (title.match(new RegExp('^'+filter)))) {
				var info = getTiddlyLinkInfo(title);
				var theListItem =createTiddlyElement(ul,"li");
				var theLink = createTiddlyLink(theListItem,tags[t][0],true);
				var theCount = " (" + tags[t][1] + ")";
				theLink.appendChild(document.createTextNode(theCount));
				var theDropDownBtn = createTiddlyButton(theListItem," " +
					config.quickOpenTag.dropdownChar,this.tooltip.format([tags[t][0]]),onClickTag);
				theDropDownBtn.setAttribute("tag",tags[t][0]);
			}
		}
	},

	// todo fix these up a bit
	styles: [
"/*{{{*/",
"/* created by QuickOpenTagPlugin */",
".tagglyTagged .quickopentag, .tagged .quickopentag ",
"	{ margin-right:1.2em; border:1px solid #eee; padding:2px; padding-right:0px; padding-left:1px; }",
".quickopentag .tiddlyLink { padding:2px; padding-left:3px; }",
".quickopentag a.button { padding:1px; padding-left:2px; padding-right:2px;}",
"/* extra specificity to make it work right */",
"#displayArea .viewer .quickopentag a.button, ",
"#displayArea .viewer .quickopentag a.tiddyLink, ",
"#mainMenu .quickopentag a.tiddyLink, ",
"#mainMenu .quickopentag a.tiddyLink ",
"	{ border:0px solid black; }",
"#displayArea .viewer .quickopentag a.button, ",
"#mainMenu .quickopentag a.button ",
"	{ margin-left:0px; padding-left:2px; }",
"#displayArea .viewer .quickopentag a.tiddlyLink, ",
"#mainMenu .quickopentag a.tiddlyLink ",
"	{ margin-right:0px; padding-right:0px; padding-left:0px; margin-left:0px; }",
"a.miniTag {font-size:150%;} ",
"#mainMenu .quickopentag a.button ",
"	/* looks better in right justified main menus */",
"	{ margin-left:0px; padding-left:2px; margin-right:0px; padding-right:0px; }", 
"#topMenu .quickopentag { padding:0px; margin:0px; border:0px; }",
"#topMenu .quickopentag .tiddlyLink { padding-right:1px; margin-right:0px; }",
"#topMenu .quickopentag .button { padding-left:1px; margin-left:0px; border:0px; }",
"/*}}}*/",
		""].join("\n"),

	init: function() {
		// we fully replace these builtins. can't hijack them easily
		window.createTagButton = this.createTagButton;
		config.macros.allTags.handler = this.allTagsHandler;
		config.macros.miniTag = { handler: this.miniTagHandler };
		config.shadowTiddlers["QuickOpenTagStyles"] = this.styles;
		store.addNotification("QuickOpenTagStyles",refreshStyles);
	}
}

config.quickOpenTag.init();

//}}}
Hyperion Resources
5910 N. Central Expressway
Dallas, TX 75206
United States

http://www.hyperionresources.com 	
214-750-1522 (Ph.)
214-750-1027 (Fax)

Company Description
Hyperion Resources and Hyperion Energy are privately held entities in the exploration and production sectors of the oil and gas industry.

Quick Facts
Primary Line of Business: exploration and production
Ownership: Private

Source: [[RIGZONE - Hyperion Resources|http://www.rigzone.com/search/sites/Hyperion_Resources5973.asp]]
/***
| Name:|RenameTagsPlugin|
| Description:|Allows you to easily rename or delete tags across multiple tiddlers|
| Version:|3.0 ($Rev: 1845 $)|
| Date:|$Date: 2007-03-16 15:19:22 +1000 (Fri, 16 Mar 2007) $|
| Source:|http://mptw.tiddlyspot.com/#RenameTagsPlugin|
| Author:|Simon Baird <simon.baird@gmail.com>|
| License|http://mptw.tiddlyspot.com/#TheBSDLicense|
Rename a tag and you will be prompted to rename it in all its tagged tiddlers.
***/
//{{{
config.renameTags = {

	prompts: {
		rename: "Rename the tag '%0' to '%1' in %2 tidder%3?",
		remove: "Remove the tag '%0' from %1 tidder%2?"
	},

	removeTag: function(tag,tiddlers) {
		store.suspendNotifications();
		for (var i=0;i<tiddlers.length;i++) {
			store.setTiddlerTag(tiddlers[i].title,false,tag);
		}
		store.resumeNotifications();
		store.notifyAll();
	},

	renameTag: function(oldTag,newTag,tiddlers) {
		store.suspendNotifications();
		for (var i=0;i<tiddlers.length;i++) {
			store.setTiddlerTag(tiddlers[i].title,false,oldTag); // remove old
			store.setTiddlerTag(tiddlers[i].title,true,newTag);  // add new
		}
		store.resumeNotifications();
		store.notifyAll();
	},

	storeMethods: {

		saveTiddler_orig_renameTags: TiddlyWiki.prototype.saveTiddler,

		saveTiddler: function(title,newTitle,newBody,modifier,modified,tags,fields) {
			if (title != newTitle) {
				var tagged = this.getTaggedTiddlers(title);
				if (tagged.length > 0) {
					// then we are renaming a tag
					if (confirm(config.renameTags.prompts.rename.format([title,newTitle,tagged.length,tagged.length>1?"s":""])))
						config.renameTags.renameTag(title,newTitle,tagged);

					if (!this.tiddlerExists(title) && newBody == "")
						// dont create unwanted tiddler
						return null;
				}
			}
			return this.saveTiddler_orig_renameTags(title,newTitle,newBody,modifier,modified,tags,fields);
		},

		removeTiddler_orig_renameTags: TiddlyWiki.prototype.removeTiddler,

		removeTiddler: function(title) {
			var tagged = this.getTaggedTiddlers(title);
			if (tagged.length > 0)
				if (confirm(config.renameTags.prompts.remove.format([title,tagged.length,tagged.length>1?"s":""])))
					config.renameTags.removeTag(title,tagged);
			return this.removeTiddler_orig_renameTags(title);
		}

	},

	init: function() {
		merge(TiddlyWiki.prototype,this.storeMethods);
	}
}

config.renameTags.init();

//}}}
/***
| Name|SaveCloseTiddlerPlugin|
| Description|Provides two extra toolbar commands, saveCloseTiddler and cancelCloseTiddler|
| Version|3.0 ($Rev: 2134 $)|
| Date|$Date: 2007-04-30 16:11:12 +1000 (Mon, 30 Apr 2007) $|
| Source|http://mptw.tiddlyspot.com/#SaveCloseTiddlerPlugin|
| Author|Simon Baird <simon.baird@gmail.com>|
| License|http://mptw.tiddlyspot.com/#TheBSDLicense|
To use these you must add them to the tool bar in your EditTemplate
***/
//{{{
merge(config.commands,{

	saveCloseTiddler: {
		text: 'done/close',
		tooltip: 'Save changes to this tiddler and close it',
		handler: function(e,src,title) {
			config.commands.saveTiddler.handler(e,src,title);
			config.commands.closeTiddler.handler(e,src,title);
			return false;
		}
	},

	cancelCloseTiddler: {
		text: 'cancel/close',
		tooltip: 'Undo changes to this tiddler and close it',
		handler: function(e,src,title) {
			config.commands.cancelTiddler.handler(e,src,title);
			config.commands.closeTiddler.handler(e,src,title);
			return false;
		}
	}

});

//}}}
/***
| Name|SelectPalettePlugin|
| Description|Lets you easily change colour palette|
| Version|3.0 ($Rev: 1845 $)|
| Date|$Date: 2007-03-16 15:19:22 +1000 (Fri, 16 Mar 2007) $|
| Source|http://mptw.tiddlyspot.com/#SelectPalettePlugin|
| Author|Simon Baird <simon.baird@gmail.com>|
| License|http://mptw.tiddlyspot.com/#TheBSDLicense|
/***
!!Usage:
{{{<<<selectPalette>>}}}
<<selectPalette>>

!!WARNING
Will overwrite your ColorPalette tiddler.
***/

//{{{

merge(config.macros,{

	setPalette: {

		handler: function(place,macroName,params,wikifier,paramString,tiddler) {
			var paletteName = params[0] ? params[0] : tiddler.title;
			createTiddlyButton(place,"apply","Apply this palette",function(e) {
				config.macros.selectPalette.updatePalette(tiddler.title);
				return false;
			});
		}
	},

	selectPalette: {

		handler: function(place,macroName,params,wikifier,paramString,tiddler) {
			createTiddlyDropDown(place,this.onPaletteChange,this.getPalettes());
		},

		getPalettes: function() {
			var result = [
				{caption:"-palette-", name:""},
				{caption:"(Default)", name:"(default)"}
			];
			var tagged = store.getTaggedTiddlers("palette","title");
			for(var t=0; t<tagged.length; t++) {
				var caption = tagged[t].title;
				var sliceTitle = store.getTiddlerSlice(caption,"Name");
				if (sliceTitle)
					caption = sliceTitle;
				result.push({caption:sliceTitle, name:tagged[t].title});
			}
			return result;
		},

		onPaletteChange: function(e) {
			config.macros.selectPalette.updatePalette(this.value);
			return true;
		},

		updatePalette: function(title) {
			if (title != "") {
				store.deleteTiddler("ColorPalette");
				if (title != "(default)")
					store.saveTiddler("ColorPalette","ColorPalette",store.getTiddlerText(title),
								config.options.txtUserName,undefined,"");
				this.refreshPalette();
				if(config.options.chkAutoSave)
					saveChanges(true);
			}
		},

		refreshPalette: function() {
			config.macros.refreshDisplay.onClick();
		}
	}
});

config.shadowTiddlers.OptionsPanel = "<<selectPalette>>\n\n" + config.shadowTiddlers.OptionsPanel;

//}}}
<<list shadowed>>
<<fontSize "font-size:">>
<<search>>
<<closeAll>>
<<permaview>>
<<newTiddler>>
<<newJournal "DD MMM YYYY">>
<<saveChanges>>
<<tiddler TspotSidebar>>
<<slider chkSliderOptionsPanel OptionsPanel "options »" "Change TiddlyWiki advanced options">>
<<slider chkSliderTimeline SideBarTabs 'tabs »' 'Show timeline'>>
http://www.sidejobtrack.com/
!Sign in here, if you want to make changes to this wiki.
# Fill in your signature used to sign your edits: 
** <<option txtUserName>>
# In order to save your edits back to the web server, fill in the username and password here: 
** Username: <<option txtUploadUserName>>
** Password: <<option pasUploadPassword>>
** Remember to click on the <<upload>> button on the side bar whenever you want to save your changes.
# Your preferences (you can always come back to this page to change your preferences):
** <<option chkAnimate>> Enable animations
** <<option chkToggleLinks>> Clicking on links to tiddlers that are already open causes them to close

After filling in the username and password, this tiddler can be closed.
I route, therefore you are.
''[[DakotaGeek''
I'm having this problem with some of the machines at MEI not being detected by SpiceWorks...
[[XP SP2 workstations are all unreachable or firewalled|http://community.spiceworks.com/topic/1827]]
!Dakota Geek
* [[DakotaGeek Portal|http://www.dakotageek.com]]
* My [[DakotaGeek|http://dakotageek.netcipia.net]] wiki/blog at [[Netcipia|http://www.netcipia.net]]
* [[DakotaGeek Wiki|http://dakotageek.wik.is/]] at [[MindTouch|www.mindtouch.com]]
..evaluating as a possible home page to replace this one at [[TiddlySpot|http://www.tiddlyspot.com]] 
* [[Vox Blog|http://slw.vox.com]]
! ~SWeidner
* My "[[SWeidner|http://sweidner.googlepages.com]]" page at [[GooglePages|http://www.googlepages.com]]
* [[Photo albums|http://picasaweb.google.com/sweidner]] at [[Picasa|http://picasaweb.google.com]]
* My [[finetune|http://www.finetune.com/user/SWeidner]] page
!Other
* [[What's a Bzyrd|http://whatsabzyrd.tumblr.com/]] on [[Tumblr|http://www.tumblr.net]]
* [[MySpace|http://www.myspace.com/steveweidner]] and [[MySpace Blog|http://blog.myspace.com/steveweidner]] pages
!Blogger (a.k.a. Blogspot) pages
* [[Notes & Ramblings|http://sidewynder.blogspot.com]]
* [[Weidner Family|http://weidnerfamily.blogspot.com]]
* [[Favorite Utilities|http://myutilities.blogspot.com]]
* [[Consulting Notes|http://swconsulting.blogspot.com]]
* [[Perl Notes & Links|http://www.usd.edu/~sweidner/PerlNotes.htm]]
![[TiddlySpot|http://www.tiddlyspot.com]]
* My [[SLW TiddlySpot|http://slw.tiddlyspot.com]]
** and my [[Bzyrd TiddlySpot|http://bzyrd.tiddlyspot.com]]
** and my [[UPR TiddlySpot|http://upr.tiddlyspot.com]]
** and my [[GTD TiddlySpot|http://kiwigtd.tiddlyspot.com]]
* [[My PBWiki|http://bzyrd.pbwiki.com]] (see also: [[PBWiki|http://yummy.pbwiki.com]])
* [[Steve's Schtuff|http://steves.schtuff.com/]] - moved to ~PBWiki [[here|http://sweidner.pbwiki.com/]] on 6/1/2007 - at Schtuff, it used [[my|http://slw.myopenid.com]] [[OpenID|http://www.myopenid.com]]
> While Schtuff.com is cool, ~PBWiki has a nicer interface for editing pages.  Their merger is supposed to include the access (privacy) controls of Schtuff in the ~PBWiki interface.
! [[Frappr|http://www.frappr.com]] Maps
* [[GeocachingSD|http://www.frappr.com/geocachingsd]] - [[Geocachers|http://www.geocaching.com]] living in - or caching in - South Dakota
* [[LifeLight|http://www.frappr.com/lifelight]] - Fans of the annual [[LifeLight Festival|http://www.lifelightfest.com]] in Sioux Falls, SD

[[MptwStyleSheet]]
/*{{{*/
#tiddlerDisplay {border:1px solid #CCC;-moz-border-radius:0.5em}
.tabCloseButton {padding : 0 2px 0 2px ; margin : 0 0 0 4px; font-size:0.75em; vertical-align:top}
.tabUnselected .tabCloseButton {border : 1px solid #BBB; background-color : #DDD; color:#888}
.tabSelected .tabCloseButton {border : 1px solid #EEE; background-color : #D87443; color:#FFF}
.tabCloseButton:hover {color:#A00; background-color:#F0F0F0}
#tiddlersBar {padding : 1em 0.5em 0 0.5em}
#tiddlersBar .button {border:0; color:#444}
#tiddlerDisplay .tiddler {padding-top : 0.1em}
#tiddlersBar .tab {padding : 0.4em 0.5em 0.3em 0.5em; -moz-border-radius-topleft:0.5em;-moz-border-radius-topright:0.5em}
#tiddlersBar .tabSelected {background-color :#FFF;color:#000;border-top: 1px solid #DDD;border-right: 1px solid #DDD;border-bottom: 1px solid #FFF;border-left:1px solid #DDD}
#tiddlersBar .tabUnselected {background-color :#EEE}
#tiddlersBar .tabUnselected .button {color:#AAA;font-weight:bold;font-style:italic;}
#tiddlersBar .tabSelected .button {color:#000;font-weight:bold;}
/*}}}*/
* StyleSheet
* StyleSheetColors
* StyleSheetLayout
* StyleSheetPrint
* ColorPalette
|>|>|!MptwPageTemplate|
|>|>|[[SiteTitle]] - [[SiteSubtitle]]|
|[[MainMenu]]|[[DefaultTiddlers]]<<br>><<br>>[[ViewTemplate]]<<br>><<br>>[[EditTemplate]]|[[SideBarOptions]]|
|~|~|[[OptionsPanel]]<<br>>AdvancedOptions|
|~|~|SideBarTabs|
|>|>|[[SiteUrl]]|
* AdvancedOptions
* OptionsPanel
* SideBarOptions
* SideBarTabs
* TabAll
* TabMore
* TabMoreMissing
* TabMoreOrphans
* TabTags
* TabTimeline
* DefaultTiddlers
* MainMenu
* SiteSubtitle
* SiteTitle
* SiteUrl
Total Commander Ultima Prime 3.4 - VERSION HISTORY

Total Commander Ultima Prime contains the latest version of Total Commander, extended main menu and toolbar, numerous plugins, changed layout and other elements. 
Limitations: · 30 day trial 

WHAT'S NEW IN VERSION 3.4:
* Added „Infra Recorder" a CD/DVD recording program - thanks to Christian Kindahl for agreement for adding it to TC UP.
* Further news in the installer - thanks to Pawe³ Porwisz.
* „AIMP" application update to the newest version (2.09).
* „Artweaver" application update to the newest version (0.4.9.1 ).
* „Free Download Manager" application update to the newest version (2.5 build 737).
* „Miranda IM" application update to the newest version (0.8.0 alpha build #5).
* „System Info for Windows" application update to the newest version ( 1.73 Build 638).
* „The KMPlayer" application update to the newest version (2.9.3.1429).
* „XnView" application update to the newest version (1.92)
* Other plugins have been updated to the newest version.
*[[TV Links|http://www.tv-links.co.uk]]
<<allTags excludeLists>>
<<tabs txtMoreTab "Tags" "All Tags" TabAllTags "Miss" "Missing tiddlers" TabMoreMissing "Orph" "Orphaned tiddlers" TabMoreOrphans "Shad" "Shadowed tiddlers" TabMoreShadowed>>
<<allTags excludeLists [a-z]>>
/***
|''Name:''|~TaggerPlugin|
|''Version:''|1.0.1 (2006-06-01)|
|''Source:''|http://tw.lewcid.org//#TaggerPlugin|
|''Author:''|SaqImtiaz|
|''Description:''|Provides a drop down listing current tiddler tags, and allowing toggling of tags.|
|''Documentation:''|[[TaggerPluginDocumentation]]|
|''Source Code:''|[[TaggerPluginSource]]|
|''~TiddlyWiki:''|Version 2.0.8 or better|
***/
//{{{

config.tagger={
       defaults:{
              label: 'Tags: ',
              tooltip: 'Manage tiddler tags',
              taglist: 'true',
              excludeTags: '',
              notags: 'tiddler has no tags',
              aretags: 'current tiddler tags:',
              toggletext: 'add tags:'
       }
};

config.macros.tagger={};
config.macros.tagger.arrow = (document.all?"▼":"▾"); // the fat one is the only one that works in IE
config.macros.tagger.handler =  function(place,macroName,params,wikifier,paramString,tiddler) {
       var defaults = config.tagger.defaults;
       var nAV = paramString.parseParams('tagman', null, true);
       var label = ((nAV[0].label)&&(nAV[0].label[0])!='.')?nAV[0].label[0]+this.arrow: defaults.label+this.arrow;
       var tooltip = ((nAV[0].tooltip)&&(nAV[0].tooltip[0])!='.')?nAV[0].tooltip[0]: defaults.tooltip;
       var taglist = ((nAV[0].taglist)&&(nAV[0].taglist[0])!='.')?nAV[0].taglist[0]: defaults.taglist;
       var exclude = ((nAV[0].exclude)&&(nAV[0].exclude[0])!='.')?(nAV[0].exclude[0]).readBracketedList(): defaults.excludeTags.readBracketedList();
       if ((nAV[0].source)&&(nAV[0].source[0])!='.')var source = nAV[0].source[0];
       if (source&&!store.getTiddler(source)) return false;

       var onclick = function(e) {
                   if (!e) var e = window.event;
                   var popup = Popup.create(this);
                   var tagsarray = store.getTags();
                   var tags=new Array();

                   for (var i=0; i<tagsarray.length; i++){
                       tags.push(tagsarray[i][0]);}

                   if (source)
                      {var sourcetiddler=store.getTiddler(source);
                       tags=sourcetiddler.tags.sort();}

                   var currentTags = tiddler.tags.sort();

                   var createButtons=function(text,theTag,tooltipPrefix){
                       var sp = createTiddlyElement(createTiddlyElement(popup,"li"),"span",null,"tagger");
                       var theToggle = createTiddlyButton(sp,text,tooltipPrefix+" '"+theTag+"'",taggerOnToggle,"button","toggleButton");
                       theToggle.setAttribute("tiddler",tiddler.title);
                       theToggle.setAttribute("tag",theTag);
                       insertSpacer(sp);
                       if (window.createTagButton_orig_mptw)
                           createTagButton_orig_mptw(sp,theTag);
                       else
                           createTagButton(sp,theTag);
                       }

                   createTiddlyElement(popup,"li",null,"listTitle",(tiddler.tags.length == 0 ? defaults.notags : defaults.aretags));

                   for (var t=0; t<currentTags.length; t++){
                      createButtons("[x]",currentTags[t],"remove tag ");
                       }

                   createTiddlyElement(createTiddlyElement(popup,"li"),"hr");

                   if (taglist!='false')
                      { createTiddlyElement(popup,"li",null,"listTitle",defaults.toggletext);
                        for (var i=0; i<tags.length; i++){
                          if (!tiddler.tags.contains(tags[i])&&!exclude.contains(tags[i]))
                                  {createButtons("[ ]",tags[i],"add tag ");
                                  }
                          }
                          createTiddlyElement(createTiddlyElement(popup,"li"),"hr");
                      }

                   var newTagButton = createTiddlyButton(createTiddlyElement(popup,"li"),("Create new tag"),null,taggerOnToggle);
                   newTagButton.setAttribute("tiddler",tiddler.title);
                   if (source) newTagButton.setAttribute("source",source);

                   Popup.show(popup,false);
                   e.cancelBubble = true;
                   if (e.stopPropagation) e.stopPropagation();
                   return(false);
                   };

       createTiddlyButton(place,label,tooltip,onclick,"button","taggerDrpBtn");
};

window.taggerOnToggle = function(e) {
              var tag = this.getAttribute("tag");
              var title = this.getAttribute("tiddler");
              var tiddler = store.getTiddler(title);
              if (!tag)
                 {
                 var newtag=prompt("Enter new tag:","");
                 if (newtag!=''&&newtag!=null)
                    {
                    var tag=newtag;
                    if (this.getAttribute("source"))
                    {var sourcetiddler =  store.getTiddler(this.getAttribute("source"));
                    sourcetiddler.tags.pushUnique(newtag);}
                    }
                 else
                     {return false;};
                 }
              if (!tiddler || !tiddler.tags)
                 {store.saveTiddler(title,title,'',config.options.txtUserName,new Date(),tag);}
              else
                  {if (tiddler.tags.find(tag)==null)
                     {tiddler.tags.push(tag)}
                  else if(!newtag)
                      {tiddler.tags.splice(tiddler.tags.find(tag),1)};
                  store.saveTiddler(tiddler.title,tiddler.title,tiddler.text,tiddler.modifier,tiddler.modified,tiddler.tags);};
              story.refreshTiddler(title,null,true);
              if(config.options.chkAutoSave)
                  saveChanges();
              return false;
};

setStylesheet(
 ".tagger a.button {font-weight: bold;display:inline; padding:0px;}\n"+
 ".tagger #toggleButton {padding-left:2px; padding-right:2px; margin-right:1px; font-size:110%;}\n"+
 "#nestedtagger {background:#2E5ADF; border: 1px solid #0331BF;}\n"+
 ".popup .listTitle {color:#000;}\n"+
 "",
"TaggerStyles");

window.lewcidTiddlerSwapTag =  function (tiddler, oldTag, newTag){
                    for (var i = 0; i < tiddler.tags.length; i++)
			  if (tiddler.tags[i] == oldTag) {
				  tiddler.tags[i] = newTag;
				  return true;}
                         return false;
}

window.lewcidRenameTag = function(e) {
                    var tag=this.getAttribute("tag");
                    var newtag=prompt("Rename tag '"+tag+"' to:",tag);

                    if ((newtag==tag)||(newtag==null)) {return false;}

                    if(store.tiddlerExists(newtag))
                               {if(confirm(config.messages.overwriteWarning.format([newtag.toString()])))
                                             story.closeTiddler(newtag,false,false);
                               else
                                             return null;}

                    tagged=store.getTaggedTiddlers(tag);
                    if (tagged.length!=0){
                          for (var j = 0; j < tagged.length; j++)
                              lewcidTiddlerSwapTag(tagged[j],tag,newtag);}

                    if (store.tiddlerExists(tag))
                       {store.saveTiddler(tag,newtag);}
                    if (document.getElementById("tiddler"+tag))
                       {var oldTagTiddler =  document.getElementById(story.idPrefix + tag);
                       var before= story.positionTiddler(oldTagTiddler);
                       var place = document.getElementById(story.container);
                       story.closeTiddler(tag,false,false);
                       story.createTiddler(place,before,newtag,null);
                       story.saveTiddler(newtag);}
                    if(config.options.chkAutoSave)
                                                      saveChanges();
                    return false;
}


window.onClickTag=function(e)
{
	if (!e) var e = window.event;
	var theTarget = resolveTarget(e);

        var nested = (!isNested(theTarget));
        if ((Popup.stack.length > 1)&&(nested==true)) {Popup.removeFrom(1);}
        else if(Popup.stack.length > 0 && nested==false) {Popup.removeFrom(0);};

        var theId = (nested==false)? "popup" : "nestedtagger";
        var popup = createTiddlyElement(document.body,"ol",theId,"popup",null);
        Popup.stack.push({root: this, popup: popup});

	var tag = this.getAttribute("tag");
	var title = this.getAttribute("tiddler");
	if(popup && tag)
		{
		var tagged = store.getTaggedTiddlers(tag);
		var titles = [];
		var li,r;
		for(r=0;r<tagged.length;r++)
			if(tagged[r].title != title)
				titles.push(tagged[r].title);
		var lingo = config.views.wikified.tag;
		if(titles.length > 0)
			{
			var openAll = createTiddlyButton(createTiddlyElement(popup,"li"),lingo.openAllText.format([tag]),lingo.openAllTooltip,onClickTagOpenAll);
			openAll.setAttribute("tag",tag);
			createTiddlyElement(createTiddlyElement(popup,"li"),"hr");
			for(r=0; r<titles.length; r++)
				{
				createTiddlyLink(createTiddlyElement(popup,"li"),titles[r],true);
				}
			}
		else
			createTiddlyText(createTiddlyElement(popup,"li",null,"disabled"),lingo.popupNone.format([tag]));
		createTiddlyElement(createTiddlyElement(popup,"li"),"hr");
		var h = createTiddlyLink(createTiddlyElement(popup,"li"),tag,false);
		createTiddlyText(h,lingo.openTag.format([tag]));

		createTiddlyElement(createTiddlyElement(popup,"li"),"hr");

		var renameTagButton = createTiddlyButton(createTiddlyElement(popup,"li"),("Rename tag '"+tag+"'"),null,lewcidRenameTag);
		renameTagButton.setAttribute("tag",tag)
		}
	Popup.show(popup,false);
	e.cancelBubble = true;
	if (e.stopPropagation) e.stopPropagation();
	return(false);
}

if (!window.isNested)
   window.isNested = function(e) {
        while (e != null) {
                var contentWrapper = document.getElementById("contentWrapper");
                if (contentWrapper == e) return true;
                e = e.parentNode;
                }
        return false;
   };

config.shadowTiddlers.TaggerPluginDocumentation="The documentation is available [[here.|http://tw.lewcid.org/#TaggerPluginDocumentation]]";

config.shadowTiddlers.TaggerPluginSource="The uncompressed source code is available [[here.|http://tw.lewcid.org/#TaggerPluginSource]]";
//}}}
''If you want this documentation available offline, copy this tiddler to your TW.''

!Description:
The tagger plugin is a result of combining key features from the dropTags and tagAdder macro's. However, since it departs somewhat from the interface tagAdder users will be familiar with, I'm making this available as a new plugin alongside tagAdder.

Tagger provides a dropdown list of the current tiddler tags, along with the ability to toggle them. Further it can optionally display a list of tags in the dropdown, which can be addded to the tiddler.

*Clicking on ''[x]'' and ''[ ]'' removes and adds the tag respectively.
*Clicking on the tag text displays the tag dropdown for that tag, listing tiddlers tagged with it.
*The ''Create new tag'' lets you quickly type in a new tag not in the list.
*Click on this button to see the dropdown: <<tagger>>

Further note that each tag dropdown has a ''Rename tag'' option. This can be used to quickly rename a tag in the entire TW, also rename it's tiddler if it exists.

//''tagAdder, dropTags and the future''
- tagAdder will no longer will be developed, but will remain available. I encourage all tagAdder users to upgrade to tagger.
- dropTags will still be developed for those users that dont want the 'tag editing' features.//

!Examples & Usage:
*At it's simplest, using tagger is as simple as {{{<<tagger>>}}} <<tagger>>
**This gives a dropdown with the current tiddler tags, followed by all the tags in the TW.
*You can also use a list of specified tags instead of all tags in the TW, by specifying a source tiddler.
**{{{<<tagger source:TagsDB>>}}} <<tagger source:TagDataBase>>
*You can also display ONLY the current tiddler tags
**{{{<<tagger taglist:false>>}}} <<tagger taglist:false>>

*To exclude tags from the list: {{{<<tagger exclude:"excludeLists Tag2 [[Tag with spaces]]">>}}} <<tagger exclude:"excludeLists Tag2 [[Tag with spaces]]">>

*For a custom button label: {{{<<tagger label:"custom label">>}}} <<tagger label:"custom label">>
*For a custom tooltip: {{{<<tagger tooltip:"custom tooltip">>}}} <<tagger tooltip:"custom tooltip">>

!CSS and Styling:
For those wishing to customize the popup appearance:
*the main popup has a class and id of popup has with all other popups.
*the nested tag popups have an id of nestedpopup

!Advanced Users:
You can change the global defaults for tagger, like the button label, the tags to exclude or whether to display the taglist or not, by editing the ''config.tagger.defaults'' section in the code.

!To Do:
*code optimization
*possibly a 'delete this tag' option.

!History
*version 1.0.1 (2006-06-01): fixed conflicts with QuickOpenTag (TagglyTagging) and AutoTagger.
/***
|''Name:''|~TaggerPlugin|
|''Version:''|1.0.1 (2006-06-01)|
|''Source:''|http://tw.lewcid.org//#TaggerPlugin|
|''Author:''|SaqImtiaz|
|''Description:''|Provides a drop down listing current tiddler tags, and allowing toggling of tags.|
|''Documentation:''|[[TaggerPluginDocumentation]]|
|''Source Code:''|[[TaggerPluginSource]]|
|''~TiddlyWiki:''|Version 2.0.8 or better|
***/
//{{{

config.tagger={
       defaults:{
              label: 'Tags: ',
              tooltip: 'Manage tiddler tags',
              taglist: 'true',
              excludeTags: '',
              notags: 'tiddler has no tags',
              aretags: 'current tiddler tags:',
              toggletext: 'add tags:'
       }
};

config.macros.tagger={};
config.macros.tagger.arrow = (document.all?"▼":"▾"); // the fat one is the only one that works in IE
config.macros.tagger.handler =  function(place,macroName,params,wikifier,paramString,tiddler) {
       var defaults = config.tagger.defaults;
       var nAV = paramString.parseParams('tagman', null, true);
       var label = ((nAV[0].label)&&(nAV[0].label[0])!='.')?nAV[0].label[0]+this.arrow: defaults.label+this.arrow;
       var tooltip = ((nAV[0].tooltip)&&(nAV[0].tooltip[0])!='.')?nAV[0].tooltip[0]: defaults.tooltip;
       var taglist = ((nAV[0].taglist)&&(nAV[0].taglist[0])!='.')?nAV[0].taglist[0]: defaults.taglist;
       var exclude = ((nAV[0].exclude)&&(nAV[0].exclude[0])!='.')?(nAV[0].exclude[0]).readBracketedList(): defaults.excludeTags.readBracketedList();
       if ((nAV[0].source)&&(nAV[0].source[0])!='.')var source = nAV[0].source[0];
       if (source&&!store.getTiddler(source)) return false;

       var onclick = function(e) {
                   if (!e) var e = window.event;
                   var popup = Popup.create(this);
                   var tagsarray = store.getTags();
                   var tags=new Array();

                   for (var i=0; i<tagsarray.length; i++){
                       tags.push(tagsarray[i][0]);}

                   if (source)
                      {var sourcetiddler=store.getTiddler(source);
                       tags=sourcetiddler.tags.sort();}

                   var currentTags = tiddler.tags.sort();

                   var createButtons=function(text,theTag,tooltipPrefix){
                       var sp = createTiddlyElement(createTiddlyElement(popup,"li"),"span",null,"tagger");
                       var theToggle = createTiddlyButton(sp,text,tooltipPrefix+" '"+theTag+"'",taggerOnToggle,"button","toggleButton");
                       theToggle.setAttribute("tiddler",tiddler.title);
                       theToggle.setAttribute("tag",theTag);
                       insertSpacer(sp);
                       if (window.createTagButton_orig_mptw)
                           createTagButton_orig_mptw(sp,theTag);
                       else
                           createTagButton(sp,theTag);
                       }

                   createTiddlyElement(popup,"li",null,"listTitle",(tiddler.tags.length == 0 ? defaults.notags : defaults.aretags));

                   for (var t=0; t<currentTags.length; t++){
                      createButtons("[x]",currentTags[t],"remove tag ");
                       }

                   createTiddlyElement(createTiddlyElement(popup,"li"),"hr");

                   if (taglist!='false')
                      { createTiddlyElement(popup,"li",null,"listTitle",defaults.toggletext);
                        for (var i=0; i<tags.length; i++){
                          if (!tiddler.tags.contains(tags[i])&&!exclude.contains(tags[i]))
                                  {createButtons("[ ]",tags[i],"add tag ");
                                  }
                          }
                          createTiddlyElement(createTiddlyElement(popup,"li"),"hr");
                      }

                   var newTagButton = createTiddlyButton(createTiddlyElement(popup,"li"),("Create new tag"),null,taggerOnToggle);
                   newTagButton.setAttribute("tiddler",tiddler.title);
                   if (source) newTagButton.setAttribute("source",source);

                   Popup.show(popup,false);
                   e.cancelBubble = true;
                   if (e.stopPropagation) e.stopPropagation();
                   return(false);
                   };

       createTiddlyButton(place,label,tooltip,onclick,"button","taggerDrpBtn");
};

window.taggerOnToggle = function(e) {
              var tag = this.getAttribute("tag");
              var title = this.getAttribute("tiddler");
              var tiddler = store.getTiddler(title);
              if (!tag)
                 {
                 var newtag=prompt("Enter new tag:","");
                 if (newtag!=''&&newtag!=null)
                    {
                    var tag=newtag;
                    if (this.getAttribute("source"))
                    {var sourcetiddler =  store.getTiddler(this.getAttribute("source"));
                    sourcetiddler.tags.pushUnique(newtag);}
                    }
                 else
                     {return false;};
                 }
              if (!tiddler || !tiddler.tags)
                 {store.saveTiddler(title,title,'',config.options.txtUserName,new Date(),tag);}
              else
                  {if (tiddler.tags.find(tag)==null)
                     {tiddler.tags.push(tag)}
                  else if(!newtag)
                      {tiddler.tags.splice(tiddler.tags.find(tag),1)};
                  store.saveTiddler(tiddler.title,tiddler.title,tiddler.text,tiddler.modifier,tiddler.modified,tiddler.tags);};
              story.refreshTiddler(title,null,true);
              if(config.options.chkAutoSave)
                  saveChanges();
              return false;
};

setStylesheet(
 ".tagger a.button {font-weight: bold;display:inline; padding:0px;}\n"+
 ".tagger #toggleButton {padding-left:2px; padding-right:2px; margin-right:1px; font-size:110%;}\n"+
 "#nestedtagger {background:#2E5ADF; border: 1px solid #0331BF;}\n"+
 ".popup .listTitle {color:#000;}\n"+
 "",
"TaggerStyles");

window.lewcidTiddlerSwapTag =  function (tiddler, oldTag, newTag){
                    for (var i = 0; i < tiddler.tags.length; i++)
			  if (tiddler.tags[i] == oldTag) {
				  tiddler.tags[i] = newTag;
				  return true;}
                         return false;
}

window.lewcidRenameTag = function(e) {
                    var tag=this.getAttribute("tag");
                    var newtag=prompt("Rename tag '"+tag+"' to:",tag);

                    if ((newtag==tag)||(newtag==null)) {return false;}

                    if(store.tiddlerExists(newtag))
                               {if(confirm(config.messages.overwriteWarning.format([newtag.toString()])))
                                             story.closeTiddler(newtag,false,false);
                               else
                                             return null;}

                    tagged=store.getTaggedTiddlers(tag);
                    if (tagged.length!=0){
                          for (var j = 0; j < tagged.length; j++)
                              lewcidTiddlerSwapTag(tagged[j],tag,newtag);}

                    if (store.tiddlerExists(tag))
                       {store.saveTiddler(tag,newtag);}
                    if (document.getElementById("tiddler"+tag))
                       {var oldTagTiddler =  document.getElementById(story.idPrefix + tag);
                       var before= story.positionTiddler(oldTagTiddler);
                       var place = document.getElementById(story.container);
                       story.closeTiddler(tag,false,false);
                       story.createTiddler(place,before,newtag,null);
                       story.saveTiddler(newtag);}
                    if(config.options.chkAutoSave)
                                                      saveChanges();
                    return false;
}


window.onClickTag=function(e)
{
	if (!e) var e = window.event;
	var theTarget = resolveTarget(e);

        var nested = (!isNested(theTarget));
        if ((Popup.stack.length > 1)&&(nested==true)) {Popup.removeFrom(1);}
        else if(Popup.stack.length > 0 && nested==false) {Popup.removeFrom(0);};

        var theId = (nested==false)? "popup" : "nestedtagger";
        var popup = createTiddlyElement(document.body,"ol",theId,"popup",null);
        Popup.stack.push({root: this, popup: popup});

	var tag = this.getAttribute("tag");
	var title = this.getAttribute("tiddler");
	if(popup && tag)
		{
		var tagged = store.getTaggedTiddlers(tag);
		var titles = [];
		var li,r;
		for(r=0;r<tagged.length;r++)
			if(tagged[r].title != title)
				titles.push(tagged[r].title);
		var lingo = config.views.wikified.tag;
		if(titles.length > 0)
			{
			var openAll = createTiddlyButton(createTiddlyElement(popup,"li"),lingo.openAllText.format([tag]),lingo.openAllTooltip,onClickTagOpenAll);
			openAll.setAttribute("tag",tag);
			createTiddlyElement(createTiddlyElement(popup,"li"),"hr");
			for(r=0; r<titles.length; r++)
				{
				createTiddlyLink(createTiddlyElement(popup,"li"),titles[r],true);
				}
			}
		else
			createTiddlyText(createTiddlyElement(popup,"li",null,"disabled"),lingo.popupNone.format([tag]));
		createTiddlyElement(createTiddlyElement(popup,"li"),"hr");
		var h = createTiddlyLink(createTiddlyElement(popup,"li"),tag,false);
		createTiddlyText(h,lingo.openTag.format([tag]));

		createTiddlyElement(createTiddlyElement(popup,"li"),"hr");

		var renameTagButton = createTiddlyButton(createTiddlyElement(popup,"li"),("Rename tag '"+tag+"'"),null,lewcidRenameTag);
		renameTagButton.setAttribute("tag",tag)
		}
	Popup.show(popup,false);
	e.cancelBubble = true;
	if (e.stopPropagation) e.stopPropagation();
	return(false);
}

if (!window.isNested)
   window.isNested = function(e) {
        while (e != null) {
                var contentWrapper = document.getElementById("contentWrapper");
                if (contentWrapper == e) return true;
                e = e.parentNode;
                }
        return false;
   };

config.shadowTiddlers.TaggerPluginDocumentation="The documentation is available [[here.|http://tw.lewcid.org/#TaggerPluginDocumentation]]";

config.shadowTiddlers.TaggerPluginSource="The uncompressed source code is available [[here.|http://tw.lewcid.org/#TaggerPluginSource]]";
//}}}
/***
| Name|TagglyTaggingPlugin|
| Description|tagglyTagging macro is a replacement for the builtin tagging macro in your ViewTemplate|
| Version|3.1 ($Rev: 2341 $)|
| Date|$Date: 2007-07-05 10:02:27 +1000 (Thu, 05 Jul 2007) $|
| Source|http://mptw.tiddlyspot.com/#TagglyTaggingPlugin|
| Author|Simon Baird <simon.baird@gmail.com>|
| License|http://mptw.tiddlyspot.com/#TheBSDLicense|
!Notes
See http://mptw.tiddlyspot.com/#TagglyTagging
***/
//{{{
config.taggly = {

	// for translations
	lingo: {
		labels: {
			asc:        "\u2191", // down arrow
			desc:       "\u2193", // up arrow
			title:      "title",
			modified:   "modified",
			created:    "created",
			show:       "+",
			hide:       "-",
			normal:     "normal",
			group:      "group",
			commas:     "commas",
			sitemap:    "sitemap",
			numCols:    "cols\u00b1", // plus minus sign
			label:      "Tagged as '%0':",
			excerpts:   "excerpts",
			contents:   "contents",
			sliders:    "sliders",
			noexcerpts: "title only"
		},

		tooltips: {
			title:    "Click to sort by title",
			modified: "Click to sort by modified date",
			created:  "Click to sort by created date",
			show:     "Click to show tagging list",
			hide:     "Click to hide tagging list",
			normal:   "Click to show a normal ungrouped list",
			group:    "Click to show list grouped by tag",
			sitemap:  "Click to show a sitemap style list",
			commas:   "Click to show a comma separated list",
			numCols:  "Click to change number of columns",
			excerpts: "Click to show excerpts",
			contents: "Click to show entire tiddler contents",
			sliders:  "Click to show tiddler contents in sliders",
			noexcerpts: "Click to show entire title only"
		}
	},

	config: {
		showTaggingCounts: true,
		listOpts: {
			// the first one will be the default
			sortBy:     ["title","modified","created"],
			sortOrder:  ["asc","desc"],
			hideState:  ["show","hide"],
			listMode:   ["normal","group","sitemap","commas"],
			numCols:    ["1","2","3","4","5","6"],
			excerpts:   ["noexcerpts","excerpts","contents","sliders"]
		},
		valuePrefix: "taggly.",
		excludeTags: ["excludeLists","excludeTagging"],
		excerptSize: 50,
		excerptMarker: "/%"+"%/"
	},

	getTagglyOpt: function(title,opt) {
		var val = store.getValue(title,this.config.valuePrefix+opt);
		return val ? val : this.config.listOpts[opt][0];
	},

	setTagglyOpt: function(title,opt,value) {
		if (!store.tiddlerExists(title))
			// create it silently
			store.saveTiddler(title,title,config.views.editor.defaultText.format([title]),config.options.txtUserName,new Date(),null);
		// if value is default then remove it to save space
		return store.setValue(title,
			this.config.valuePrefix+opt,
			value == this.config.listOpts[opt][0] ? null : value);
	},

	getNextValue: function(title,opt) {
		var current = this.getTagglyOpt(title,opt);
		var pos = this.config.listOpts[opt].indexOf(current);
		// a little usability enhancement. actually it doesn't work right for grouped or sitemap
		var limit = (opt == "numCols" ? store.getTaggedTiddlers(title).length : this.config.listOpts[opt].length);
		var newPos = (pos + 1) % limit;
		return this.config.listOpts[opt][newPos];
	},

	toggleTagglyOpt: function(title,opt) {
		var newVal = this.getNextValue(title,opt);
		this.setTagglyOpt(title,opt,newVal);
	}, 

	createListControl: function(place,title,type) {
		var lingo = config.taggly.lingo;
		var label;
		var tooltip;
		var onclick;

		if ((type == "title" || type == "modified" || type == "created")) {
			// "special" controls. a little tricky. derived from sortOrder and sortBy
			label = lingo.labels[type];
			tooltip = lingo.tooltips[type];

			if (this.getTagglyOpt(title,"sortBy") == type) {
				label += lingo.labels[this.getTagglyOpt(title,"sortOrder")];
				onclick = function() {
					config.taggly.toggleTagglyOpt(title,"sortOrder");
					return false;
				}
			}
			else {
				onclick = function() {
					config.taggly.setTagglyOpt(title,"sortBy",type);
					config.taggly.setTagglyOpt(title,"sortOrder",config.taggly.config.listOpts.sortOrder[0]);
					return false;
				}
			}
		}
		else {
			// "regular" controls, nice and simple
			label = lingo.labels[type == "numCols" ? type : this.getNextValue(title,type)];
			tooltip = lingo.tooltips[type == "numCols" ? type : this.getNextValue(title,type)];
			onclick = function() {
				config.taggly.toggleTagglyOpt(title,type);
				return false;
			}
		}

		// hide button because commas don't have columns
		if (!(this.getTagglyOpt(title,"listMode") == "commas" && type == "numCols"))
			createTiddlyButton(place,label,tooltip,onclick,type == "hideState" ? "hidebutton" : "button");
	},

	makeColumns: function(orig,numCols) {
		var listSize = orig.length;
		var colSize = listSize/numCols;
		var remainder = listSize % numCols;

		var upperColsize = colSize;
		var lowerColsize = colSize;

		if (colSize != Math.floor(colSize)) {
			// it's not an exact fit so..
			upperColsize = Math.floor(colSize) + 1;
			lowerColsize = Math.floor(colSize);
		}

		var output = [];
		var c = 0;
		for (var j=0;j<numCols;j++) {
			var singleCol = [];
			var thisSize = j < remainder ? upperColsize : lowerColsize;
			for (var i=0;i<thisSize;i++) 
				singleCol.push(orig[c++]);
			output.push(singleCol);
		}

		return output;
	},

	drawTable: function(place,columns,theClass) {
		var newTable = createTiddlyElement(place,"table",null,theClass);
		var newTbody = createTiddlyElement(newTable,"tbody");
		var newTr = createTiddlyElement(newTbody,"tr");
		for (var j=0;j<columns.length;j++) {
			var colOutput = "";
			for (var i=0;i<columns[j].length;i++) 
				colOutput += columns[j][i];
			var newTd = createTiddlyElement(newTr,"td",null,"tagglyTagging"); // todo should not need this class
			wikify(colOutput,newTd);
		}
		return newTable;
	},

	createTagglyList: function(place,title) {
		switch(this.getTagglyOpt(title,"listMode")) {
			case "group":  return this.createTagglyListGrouped(place,title); break;
			case "normal": return this.createTagglyListNormal(place,title,false); break;
			case "commas": return this.createTagglyListNormal(place,title,true); break;
			case "sitemap":return this.createTagglyListSiteMap(place,title); break;
		}
	},

	getTaggingCount: function(title) {
		// thanks to Doug Edmunds
		if (this.config.showTaggingCounts) {
			var tagCount = store.getTaggedTiddlers(title).length;
			if (tagCount > 0)
				return " ("+tagCount+")";
		}
		return "";
	},

	getExcerpt: function(inTiddlerTitle,title,indent) {
    if (!indent)
			indent = 1;
		if (this.getTagglyOpt(inTiddlerTitle,"excerpts") == "excerpts") {
			var t = store.getTiddler(title);
			if (t) {
				var text = t.text.replace(/\n/," ");
				var marker = text.indexOf(this.config.excerptMarker);
				if (marker != -1) {
					return " {{excerpt{<nowiki>" + text.substr(0,marker) + "</nowiki>}}}";
				}
				else if (text.length < this.config.excerptSize) {
					return " {{excerpt{<nowiki>" + t.text + "</nowiki>}}}";
				}
				else {
					return " {{excerpt{<nowiki>" + t.text.substr(0,this.config.excerptSize) + "..." + "</nowiki>}}}";
				}
			}
		}
		else if (this.getTagglyOpt(inTiddlerTitle,"excerpts") == "contents") {
			var t = store.getTiddler(title);
			if (t) {
				return "\n{{contents indent"+indent+"{\n" + t.text + "\n}}}";
			}
		}
		else if (this.getTagglyOpt(inTiddlerTitle,"excerpts") == "sliders") {
			var t = store.getTiddler(title);
			if (t) {
				return "<slider slide>\n{{contents{\n" + t.text + "\n}}}\n</slider>";
			}
		}
		return "";
	},

	notHidden: function(t,inTiddler) {
		if (typeof t == "string") 
			t = store.getTiddler(t);
		return (!t || !t.tags.containsAny(this.config.excludeTags) ||
				(inTiddler && this.config.excludeTags.contains(inTiddler)));
	},

	// this is for normal and commas mode
	createTagglyListNormal: function(place,title,useCommas) {

		var list = store.getTaggedTiddlers(title,this.getTagglyOpt(title,"sortBy"));

		if (this.getTagglyOpt(title,"sortOrder") == "desc")
			list = list.reverse();

		var output = [];
		var first = true;
		for (var i=0;i<list.length;i++) {
			if (this.notHidden(list[i],title)) {
				var countString = this.getTaggingCount(list[i].title);
				var excerpt = this.getExcerpt(title,list[i].title);
				if (useCommas)
					output.push((first ? "" : ", ") + "[[" + list[i].title + "]]" + countString + excerpt);
				else
					output.push("*[[" + list[i].title + "]]" + countString + excerpt + "\n");

				first = false;
			}
		}

		return this.drawTable(place,
			this.makeColumns(output,useCommas ? 1 : parseInt(this.getTagglyOpt(title,"numCols"))),
			useCommas ? "commas" : "normal");
	},

	// this is for the "grouped" mode
	createTagglyListGrouped: function(place,title) {
		var sortBy = this.getTagglyOpt(title,"sortBy");
		var sortOrder = this.getTagglyOpt(title,"sortOrder");

		var list = store.getTaggedTiddlers(title,sortBy);

		if (sortOrder == "desc")
			list = list.reverse();

		var leftOvers = []
		for (var i=0;i<list.length;i++)
			leftOvers.push(list[i].title);

		var allTagsHolder = {};
		for (var i=0;i<list.length;i++) {
			for (var j=0;j<list[i].tags.length;j++) {

				if (list[i].tags[j] != title) { // not this tiddler

					if (this.notHidden(list[i].tags[j],title)) {

						if (!allTagsHolder[list[i].tags[j]])
							allTagsHolder[list[i].tags[j]] = "";

						if (this.notHidden(list[i],title)) {
							allTagsHolder[list[i].tags[j]] += "**[["+list[i].title+"]]"
										+ this.getTaggingCount(list[i].title) + this.getExcerpt(title,list[i].title) + "\n";

							leftOvers.setItem(list[i].title,-1); // remove from leftovers. at the end it will contain the leftovers

						}
					}
				}
			}
		}

		var allTags = [];
		for (var t in allTagsHolder)
			allTags.push(t);

		var sortHelper = function(a,b) {
			if (a == b) return 0;
			if (a < b) return -1;
			return 1;
		};

		allTags.sort(function(a,b) {
			var tidA = store.getTiddler(a);
			var tidB = store.getTiddler(b);
			if (sortBy == "title") return sortHelper(a,b);
			else if (!tidA && !tidB) return 0;
			else if (!tidA) return -1;
			else if (!tidB) return +1;
			else return sortHelper(tidA[sortBy],tidB[sortBy]);
		});

		var leftOverOutput = "";
		for (var i=0;i<leftOvers.length;i++)
			if (this.notHidden(leftOvers[i],title))
				leftOverOutput += "*[["+leftOvers[i]+"]]" + this.getTaggingCount(leftOvers[i]) + this.getExcerpt(title,leftOvers[i]) + "\n";

		var output = [];

		if (sortOrder == "desc")
			allTags.reverse();
		else if (leftOverOutput != "")
			// leftovers first...
			output.push(leftOverOutput);

		for (var i=0;i<allTags.length;i++)
			if (allTagsHolder[allTags[i]] != "")
				output.push("*[["+allTags[i]+"]]" + this.getTaggingCount(allTags[i]) + this.getExcerpt(title,allTags[i]) + "\n" + allTagsHolder[allTags[i]]);

		if (sortOrder == "desc" && leftOverOutput != "")
			// leftovers last...
			output.push(leftOverOutput);

		return this.drawTable(place,
				this.makeColumns(output,parseInt(this.getTagglyOpt(title,"numCols"))),
				"grouped");

	},

	// used to build site map
	treeTraverse: function(title,depth,sortBy,sortOrder) {

		var list = store.getTaggedTiddlers(title,sortBy);
		if (sortOrder == "desc")
			list.reverse();

		var indent = "";
		for (var j=0;j<depth;j++)
			indent += "*"

		var childOutput = "";
		for (var i=0;i<list.length;i++)
			if (list[i].title != title)
				if (this.notHidden(list[i].title,this.config.inTiddler))
					childOutput += this.treeTraverse(list[i].title,depth+1,sortBy,sortOrder);

		if (depth == 0)
			return childOutput;
		else
			return indent + "[["+title+"]]" + this.getTaggingCount(title) + this.getExcerpt(this.config.inTiddler,title,depth) + "\n" + childOutput;
	},

	// this if for the site map mode
	createTagglyListSiteMap: function(place,title) {
		this.config.inTiddler = title; // nasty. should pass it in to traverse probably
		var output = this.treeTraverse(title,0,this.getTagglyOpt(title,"sortBy"),this.getTagglyOpt(title,"sortOrder"));
		return this.drawTable(place,
				this.makeColumns(output.split(/(?=^\*\[)/m),parseInt(this.getTagglyOpt(title,"numCols"))), // regexp magic
				"sitemap"
				);
	},

	macros: {
		tagglyTagging: {
			handler: function (place,macroName,params,wikifier,paramString,tiddler) {
				var refreshContainer = createTiddlyElement(place,"div");
				// do some refresh magic to make it keep the list fresh - thanks Saq
				refreshContainer.setAttribute("refresh","macro");
				refreshContainer.setAttribute("macroName",macroName);
        			refreshContainer.setAttribute("title",tiddler.title);
				this.refresh(refreshContainer);
			},

			refresh: function(place) {
				var title = place.getAttribute("title");
				removeChildren(place);
				if (store.getTaggedTiddlers(title).length > 0) {
					var lingo = config.taggly.lingo;
					config.taggly.createListControl(place,title,"hideState");
					if (config.taggly.getTagglyOpt(title,"hideState") == "show") {
						createTiddlyElement(place,"span",null,"tagglyLabel",lingo.labels.label.format([title]));
						config.taggly.createListControl(place,title,"title");
						config.taggly.createListControl(place,title,"modified");
						config.taggly.createListControl(place,title,"created");
						config.taggly.createListControl(place,title,"listMode");
						config.taggly.createListControl(place,title,"excerpts");
						config.taggly.createListControl(place,title,"numCols");
						config.taggly.createTagglyList(place,title);
					}
				}
			}
		}
	},

	// todo fix these up a bit
	styles: [
"/*{{{*/",
"/* created by TagglyTaggingPlugin */",
".tagglyTagging { padding-top:0.5em; }",
".tagglyTagging li.listTitle { display:none; }",
".tagglyTagging ul {",
"	margin-top:0px; padding-top:0.5em; padding-left:2em;",
"	margin-bottom:0px; padding-bottom:0px;",
"}",
".tagglyTagging { vertical-align: top; margin:0px; padding:0px; }",
".tagglyTagging table { margin:0px; padding:0px; }",
".tagglyTagging .button { visibility:hidden; margin-left:3px; margin-right:3px; }",
".tagglyTagging .button, .tagglyTagging .hidebutton {",
"	color:[[ColorPalette::TertiaryLight]]; font-size:90%;",
"	border:0px; padding-left:0.3em;padding-right:0.3em;",
"}",
".tagglyTagging .button:hover, .hidebutton:hover, ",
".tagglyTagging .button:active, .hidebutton:active  {",
"	border:0px; background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]];",
"}",
".selected .tagglyTagging .button { visibility:visible; }",
".tagglyTagging .hidebutton { color:[[ColorPalette::Background]]; }",
".selected .tagglyTagging .hidebutton { color:[[ColorPalette::TertiaryLight]] }",
".tagglyLabel { color:[[ColorPalette::TertiaryMid]]; font-size:90%; }",
".tagglyTagging ul {padding-top:0px; padding-bottom:0.5em; margin-left:1em; }",
".tagglyTagging ul ul {list-style-type:disc; margin-left:-1em;}",
".tagglyTagging ul ul li {margin-left:0.5em; }",
".editLabel { font-size:90%; padding-top:0.5em; }",
".tagglyTagging .commas { padding-left:1.8em; }",
"/* not technically tagglytagging but will put them here anyway */",
".tagglyTagged li.listTitle { display:none; }",
".tagglyTagged li { display: inline; font-size:90%; }",
".tagglyTagged ul { margin:0px; padding:0px; }",
".excerpt { color:[[ColorPalette::TertiaryDark]]; }",
"div.tagglyTagging table,",
"div.tagglyTagging table tr,",
"td.tagglyTagging",
" {border-style:none!important; }",
".tagglyTagging .contents { border-bottom:2px solid [[ColorPalette::TertiaryPale]]; padding:0 1em 1em 0.5em;",
"  margin-bottom:0.5em; }",
".tagglyTagging .indent1  { margin-left:3em;  }",
".tagglyTagging .indent2  { margin-left:4em;  }",
".tagglyTagging .indent3  { margin-left:5em;  }",
".tagglyTagging .indent4  { margin-left:6em;  }",
".tagglyTagging .indent5  { margin-left:7em;  }",
".tagglyTagging .indent6  { margin-left:8em;  }",
".tagglyTagging .indent7  { margin-left:9em;  }",
".tagglyTagging .indent8  { margin-left:10em; }",
".tagglyTagging .indent9  { margin-left:11em; }",
".tagglyTagging .indent10 { margin-left:12em; }",
"/*}}}*/",
		""].join("\n"),

	init: function() {
		merge(config.macros,this.macros);
		config.shadowTiddlers["TagglyTaggingStyles"] = this.styles;
		store.addNotification("TagglyTaggingStyles",refreshStyles);
	}
};

config.taggly.init();

//}}}

/***
InlineSlidersPlugin
By Saq Imtiaz
http://tw.lewcid.org/sandbox/#InlineSlidersPlugin

// syntax adjusted to not clash with NestedSlidersPlugin

***/
//{{{
config.formatters.unshift( {
	name: "inlinesliders",
	// match: "\\+\\+\\+\\+|\\<slider",
	match: "\\<slider",
	// lookaheadRegExp: /(?:\+\+\+\+|<slider) (.*?)(?:>?)\n((?:.|\n)*?)\n(?:====|<\/slider>)/mg,
	lookaheadRegExp: /(?:<slider) (.*?)(?:>)\n((?:.|\n)*?)\n(?:<\/slider>)/mg,
	handler: function(w) {
		this.lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = this.lookaheadRegExp.exec(w.source)
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart ) {
			var btn = createTiddlyButton(w.output,lookaheadMatch[1] + " "+"\u00BB",lookaheadMatch[1],this.onClickSlider,"button sliderButton");
			var panel = createTiddlyElement(w.output,"div",null,"sliderPanel");
			panel.style.display = "none";
			wikify(lookaheadMatch[2],panel);
			w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
		}
   },
   onClickSlider : function(e) {
		if(!e) var e = window.event;
		var n = this.nextSibling;
		n.style.display = (n.style.display=="none") ? "block" : "none";
		return false;
	}
});

//}}}
!Voice Mail Service
* [[K7|http://www.k7.net]] - //Leave me a message at 206-600-4418//
> K7 Unified Messaging provides you with a free phone number. This number enables you to have your voicemail messages and faxes delivered directly to your computer. You also have the option to view and listen to your messages right here on the K7 Web site.
* [[Grand Central|http://grandcentral.com/]] - //Call me at 605-413-4521//
> One number that rings all your phones, centralized voicemail that can be forwarded to e-mail.
<tabs GradientTest>
<tab Gradient1>
<<gradient vert #000000 #000044 #000011 #1111aa #000000>>

> test1

>>
</tab>
<tab Gradient2>
<<gradient vert #C9DBE5 #FFFFFF #B1C1C9 #E4E9EC #5E6C73>>

> test2

>>
</tab>
<tab Gradient3>
<<gradient vert #C8D5DE #ECF0F3 #95A4AF #9EACB6>>

> test3

>>
</tab>
</tabs>
See Also :: TiddlerEncryptionPlugin

!Usage
<<<
* Tag a tiddler with Encrypt(prompt)
** Consider the 'prompt' something to help you remember the password with. If multiple tiddlers can be encrypted with the same 'prompt' and you will only be asked for the password once.
* Upon save, the Tiddler will be encrypted and the tag replaced with Decrypt(prompt).
** Failure to encrypt (by not entering a password) will leave the tiddler unencrypted and will leave the Encrypt(prompt) tag in place. This means that the next time you save, you will be asked for the password again.
** To have multiple tiddlers use the same password - simply use the same 'prompt'.
** Tiddlers that are encrypted are also tagged 'excludeSearch' as there is no point in searching encrypted data
** Encrypted tiddlers are stored as displayable hex, to keep things visibly tidy, should you display an encrypted tiddler. There is nothing worse than seeing a pile of gobbledy gook on your screen.
* Tiddlers are decrypted on initial display
** If you don't display a tiddler, you won't decrypt it.
** Tiddlers will re-encrypt automatically on save.
** Decryption of Tiddlers does not make your TiddlyWiki 'dirty' - you will not be asked to save if you leave the page.
* Errors are reported either by displaying the shadow tiddler DecryptionFailed or displaying the encrypted tiddler contents. This is configurable in AdvancedOptions
** Empty passwords, on save, will result in the tiddler being saved unencrypted - this should only occur with new tiddlers or with tiddlers who have had their 'prompt' tag changed.
** Encrypted tiddlers know if they are decrypted successfully - failure to decrypt a tiddler will ''not'' lose your data.
** Editing of an encrypted (that has not been unencrypted) tiddler will result in loss of that tiddler as the SHA1 checksums will no longer match, upon decryption. To this end, it is best that you do not check the option in AdvancedOptions
** To change the password on a Tiddler, change the 'prompt' to a new value, after decrypting the tiddler.
** You can edit the tags of an encrypted tiddler, so long as you do not edit the text.
** To change the password for all tiddlers of a particular prompt, use the {{{<<EncryptionChangePassword ["button text" ["tooltip text" ["prompt string"]]]>>}}} macro.
** To decrypt all tiddlers of a particular "prompt string", use the {{{<<EncryptionDecryptAll ["button text" ["tooltip text" ["prompt string"]]]>>}}} macro - this will make tiddlers encrypted with "prompt string" searchable - or prompt for all 'prompt strings', if none is supplied.
<<<
/***
|Name|TiddlerEncryptionPlugin|
|Author|Lyall Pearce|
|Source|http://www.Remotely-Helpful.com/TiddlyWiki/TiddlerEncryptionPlugin.html|
|License|[[Creative Commons Attribution-Share Alike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|Version|1.10.2|
|~CoreVersion|2.3.0|
|Requires|None|
|Overrides|store.getSaver().externalizeTiddler(), store.getTiddler() and store.getTiddlerText()|
|Description|Encrypt/Decrypt Tiddlers with a Password key|

!!!!!Usage
<<<
* Tag a tiddler with Encrypt(prompt)
** Consider the 'prompt' something to help you remember the password with. If multiple tiddlers can be encrypted with the same 'prompt' and you will only be asked for the password once.
* Upon save, the Tiddler will be encrypted and the tag replaced with Decrypt(prompt).
** Failure to encrypt (by not entering a password) will leave the tiddler unencrypted and will leave the Encrypt(prompt) tag in place. This means that the next time you save, you will be asked for the password again.
** To have multiple tiddlers use the same password - simply use the same 'prompt'.
** Tiddlers that are encrypted may be tagged 'excludeSearch' as there is no point in searching encrypted data - this is configurable by an option - you still may want to search the titles of encrypted tiddlers
** Tiddlers that are encrypted may be tagged 'excludeLists', as activities that list tiddlers may trigger password prompting when none was desired - this is configurable by an option.
** Automatic removal of excludeLists and excludeSearch tags is performed, if the above two options are set, only if these two tags are the last 2 tags for a tiddler.
** Encrypted tiddlers are stored as displayable hex, to keep things visibly tidy, should you display an encrypted tiddler. There is nothing worse than seeing a pile of gobbledy gook on your screen. Additionally, the encrypted data is easily cut/paste/emailed if displayed in hex form.
* Tiddlers are decrypted on initial display, not when you load the TiddlyWiki
** If you don't display a tiddler, you won't decrypt it.
** Tiddlers will re-encrypt automatically on save.
** Decryption of Tiddlers does not make your TiddlyWiki 'dirty' - you will not be asked to save if you leave the page.
* Errors are reported either by displaying the shadow tiddler DecryptionFailed or displaying the encrypted tiddler contents.
** Empty passwords, on save, will result in the tiddler being saved unencrypted - this should only occur with new tiddlers or with tiddlers who have had their 'prompt' tag changed.
** Encrypted tiddlers know if they are decrypted successfully - failure to decrypt a tiddler will ''not'' lose your data.
** Editing of an encrypted (that has not been unencrypted) tiddler will result in loss of that tiddler as the SHA1 checksums will no longer match, upon decryption. To this end, it is best that you do not check the option.
** To change the password on a Tiddler, change the Encrypt('prompt') tag to a new prompt value, after decrypting the tiddler.
** You can edit the tags of an encrypted tiddler, so long as you do not edit the text.
** To change the password for all tiddlers of a particular prompt, use the {{{<<EncryptionChangePassword ["button text" ["tooltip text" ["prompt string" ["accessKey"]]]]>>}}} macro.
** To decrypt all tiddlers of a particular "prompt string", use the {{{<<EncryptionDecryptAll ["button text" ["tooltip text" ["prompt string" ["accessKey"]]]]>>}}} macro - this will make tiddlers encrypted with "prompt string" searchable - or prompt for all 'prompt strings', if none is supplied.
<<<
!!!!!Configuration
<<<
Useful Buttons: 
<<EncryptionChangePassword>> - Change passwords of encrypted tiddlers.
<<EncryptionDecryptAll>> - Decrypt ALL tiddlers - enables searching contents of encrypted tiddlers.
<<option chkEncryptShowEncrypted>> Show encrypted tiddler contents on decrypt failure
<<option chkExcludeEncryptedFromSearch>> - If set, Encrypted Tiddlers are excluded from searching by tagging with excludeSearch. If Clear, excludeSearch is not added and it is also removed from existing Encrypted Tiddlers only if it is the last Tag. Searching of Encrypted Tiddlers is only meaningful for the Title and Tags.
<<option chkExcludeEncryptedFromLists>> - If set, Encrypted Tiddlers are excluded from lists by tagging with excludeLists. If Clear, excludeLists is not added and it is also removed from existing Encrypted Tiddlers only if it is the last Tag. Preventing encrypted tiddlers from appearing in lists effectively hides them.
<<option chkCachePasswords>> - If unchecked, do not cache passwords. This means you will be prompted for the password every time you display an encrypted tiddler (not forgetting that once they are displayed, they stay decrypted until the next save).
<<<
!!!!!Revision History
<<<
* 1.10.2 - Added configuration section to be compatible with http://tiddlytools.com/#AdvancedOptionsPlugin plugin as well as making configuration of the plugin easier. Removed automatic inclusion into the AdvancedOptions page. 
<<<
!!!!!Additional work

***/
//{{{
version.extensions.TiddlerEncryptionPlugin = {major: 1, minor: 10, revision: 2, date: new Date(2008,04,12)};

// where I cache the passwords - for want of a better place.
config.encryptionPasswords = new Array();

// Setup option for using shadow tiddlers for display of errors or simply show the 'encrypted tiddler'
if(config.options.chkEncryptShowEncrypted == undefined) config.options.chkEncryptShowEncrypted = false;
if(config.options.chkExcludeEncryptedFromSearch == undefined) config.options.chkExcludeEncryptedFromSearch = false;
if(config.options.chkExcludeEncryptedFromLists == undefined) config.options.chkExcludeEncryptedFromLists = false;
if(config.options.chkCachePasswords == undefined) config.options.chkCachePasswords = true;

config.shadowTiddlers.DecryptionFailed = "Decryption of an encrypted tiddler failed.";

config.macros.EncryptionChangePassword = {};
config.macros.EncryptionChangePassword.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
    var theButton = createTiddlyButton(place,
				       (params[0] && params[0].length > 0) ? params[0] : "Change Passwords", 
				       (params[1] && params[1].length > 0) ? params[1] : "Change Passwords" + (params[2] ? " for prompt "+params[2] : ""), 
				       onClickEncryptionChangePassword,
				       null,
				       null,
				       params[3]);
    if(params[2] && params[2].length > 0) {
	theButton.setAttribute("promptString", params[2]);
    }
};

config.macros.EncryptionDecryptAll = {};
config.macros.EncryptionDecryptAll.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
    var theButton = createTiddlyButton(place,
				       (params[0] && params[0].length > 0) ? params[0] : "Decrypt All", 
				       (params[1] && params[1].length > 0) ? params[1] : "Decrypt All Tiddlers" + ((params[2] && params[2].length > 0) ? " for prompt "+params[2] : " for a given 'prompt string'"), 
				       onClickEncryptionDecryptAll,
				       null,
				       null,
				       params[3]);
    if(params[2] && params[2].length > 0) {
	theButton.setAttribute("promptString", params[2]);
    }
};

function onClickEncryptionChangePassword() {
    // Prompt for 'prompt string'
    
    var promptString = this.getAttribute("promptString");
    if(!promptString) {
	promptString = prompt("Enter 'prompt string' to change password for:","");
    }
    if(!promptString) {
	return;
    }
    // Prompt for 'old password'
    var oldPassword = GetAndSetPasswordForPrompt_TiddlerEncryptionPlugin(promptString);
    if(!oldPassword) {
	return;
    }
    // Decrypt ALL tiddlers for that prompt
    var decryptTag = "Decrypt("+promptString+")";
    var tiddlersToDecrypt = store.getTaggedTiddlers(decryptTag);
    try {
	for(var ix=0; ix<tiddlersToDecrypt.length; ix++) {
	    CheckTiddlerForDecryption_TiddlerEncryptionPlugin(tiddlersToDecrypt[ix]);
	}
    } catch (e) {
	if(e == "DecryptionFailed") {
	    displayMessage("Password incorrect.");
	    return;
	} else {
	    throw e;
	}
    }
    var newPassword = MyPrompt_TiddlerEncryptionPlugin("Enter new password for '"+promptString+"'", "");
    if(newPassword) {
	var newPasswordAgain = MyPrompt_TiddlerEncryptionPlugin("Enter new password, again, for '"+promptString+"'", "");
	if(newPasswordAgain && newPassword == newPasswordAgain) {
	    if(config.optionsDesc.chkCachePasswords == false) {
		config.encryptionPasswords[promptString] = newPasswordAgain;
	    }
	    displayMessage("Password for '"+promptString+"' updated.");
	}
    }
    store.setDirty(true);
    autoSaveChanges();
    return;
};

function onClickEncryptionDecryptAll() {
    var promptString = this.getAttribute("promptString");
    if(!promptString) {
	promptString = "";
    }
    var tagToSearchFor="Decrypt("+promptString;
    try {
	store.forEachTiddler(function(store,tiddler) {
		if(tiddler && tiddler.tags) {
		    for(var ix=0; ix<tiddler.tags.length; ix++) {
			if(tiddler.tags[ix].indexOf(tagToSearchFor) == 0) {
			    try {
				CheckTiddlerForDecryption_TiddlerEncryptionPlugin(tiddler);
			    } catch (e) {
				displayMessage("Decryption of '"+tiddler.title+"' failed.");
				throw e;
			    }
			} // if(tiddler.tags
		    } // for
		} // if
	    }); // store.forEachTiddler
	displayMessage("All encrypted tiddlers have been decrypted" + (promptString != "" ? "for '"+promptString+"'" : ""));
    } catch (e) {
	if(e == "DecryptionFailed") {
	    return;
	}
    } // catch
    return;
};

store.getSaver().externalizeTiddler_TiddlerEncryptionPlugin = store.getSaver().externalizeTiddler;
store.getSaver().externalizeTiddler = function(store, tiddler) {
    // Ok, got the tiddler, track down the passwordPrompt in the tags.
    // track down the Encrypt(passwordPrompt) tag
    if(tiddler && tiddler.tags) {
	for(var g=0; g<tiddler.tags.length; g++) {
	    var tag = tiddler.tags[g];
	    if(tag.indexOf("Encrypt(") == 0) {
		var lastBracket=tag.lastIndexOf(")");
		if(lastBracket >= 0) {
		    // Ok, tagged with Encrypt(passwordPrompt)
		    // extract the passwordPrompt name
		    var passwordPrompt=tag.substring(8,lastBracket);
		    // Ok, Encrypt this tiddler!
		    var decryptedSHA1 = Crypto.hexSha1Str(tiddler.text);
		    var password =  GetAndSetPasswordForPrompt_TiddlerEncryptionPlugin(passwordPrompt);
		    if(password) {
			var encryptedText = TEAencrypt(tiddler.text, password);
			encryptedText = StringToHext_TiddlerEncryptionPlugin(encryptedText);
			tiddler.text = "Encrypted("+decryptedSHA1+")\n"+encryptedText;
			// Replace the Tag with the Decrypt() tag
			tiddler.tags[g]="Decrypt("+passwordPrompt+")";
			// let the store know it's dirty
			store.setDirty(tiddler.title, true);
			// prevent searches on encrypted tiddlers, still nice to search on title though.
			if(config.options.chkExcludeEncryptedFromSearch == true) {
			    tiddler.tags.push("excludeSearch");
			}
			// prevent lists of encrypted tiddlers
			if(config.options.chkExcludeEncryptedFromLists == true) {
			    tiddler.tags.push("excludeLists");
			}
		    } else {
			// do not encrypt - no password entered
		    }
		    break;
		} // if (lastBracket...
	    } // if(tag.indexOf(...
	} // for(var g=0;...
    } // if(tiddler.tags...
    
    // Then, finally, do the save by calling the function we override.

    return store.getSaver().externalizeTiddler_TiddlerEncryptionPlugin(store, tiddler);
};

function CheckTiddlerForDecryption_TiddlerEncryptionPlugin(tiddler) {
    if(tiddler && tiddler.tags) {
	for(var g=0; g<tiddler.tags.length; g++) {
	    var tag = tiddler.tags[g];
	    if(tag.indexOf("Decrypt(") == 0) {
		var lastBracket=tag.lastIndexOf(")");
		if(lastBracket >= 0) {
		    if(tiddler.text.substr(0,10) == "Encrypted(") {
			var closingSHA1Bracket = tiddler.text.indexOf(")");
			var decryptedSHA1 = tiddler.text.substring(10, closingSHA1Bracket);
			// Ok, tagged with Decrypt(passwordPrompt)
			// extract the passwordPrompt name
			var passwordPrompt=tag.substring(8,lastBracket);
			// Ok, Decrypt this tiddler!
			var decryptedText = tiddler.text.substr(closingSHA1Bracket+2);
			decryptedText = HexToString_TiddlerEncryptionPlugin(decryptedText);
                        // prompt("Decryption request for Tiddler '"+tiddler.title+"'");
			var password = GetAndSetPasswordForPromptToDecrypt_TiddlerEncryptionPlugin(passwordPrompt);
			if(password) {
			    decryptedText = TEAdecrypt(decryptedText, password );
			    var thisDecryptedSHA1 = Crypto.hexSha1Str(decryptedText);
			    if(decryptedSHA1 == thisDecryptedSHA1) {
				tiddler.text = decryptedText;
				// Replace the Tag with the Encrypt() tag
				tiddler.tags[g]="Encrypt("+passwordPrompt+")";
				if(tiddler.tags[tiddler.tags.length-1] == 'excludeLists') {
				    // Remove exclude lists only if it's the last entry
				    // as it's automatically put there by encryption
				    tiddler.tags.length--;
				}
				if(tiddler.tags[tiddler.tags.length-1] == 'excludeSearch') {
				    // Remove exclude search only if it's the last entry
				    // as it's automatically put there by encryption
				    tiddler.tags.length--;
				}
			    } else {
				// Did not decrypt, discard the password from the cache
				config.encryptionPasswords[passwordPrompt] = null;
				throw "DecryptionFailed";
			    }
			} else {
			    // no password supplied, dont bother trying to decrypt
			    throw "DecryptionFailed";
			}
		    } else {
			// Tagged as encrypted but not expected format, just leave it unchanged
		    }
		    break; // out of for loop
		} // if (lastBracket...
	    } // if(tag.indexOf(...
	} // for(var g=0;...
    } // if (tiddler && tags)
    return tiddler;
};

store.getTiddler_TiddlerEncryptionPlugin = store.getTiddler;
store.getTiddler = function(title) {
    var tiddler = store.getTiddler_TiddlerEncryptionPlugin(title);
    if(tiddler) { // shadow tiddlers are not expected to be encrypted.
	try {
	    return CheckTiddlerForDecryption_TiddlerEncryptionPlugin(tiddler);
	} catch (e) {
	    if(e == "DecryptionFailed") {
		if(config.options.chkEncryptShowEncrypted) {
		    return tiddler;
		} else {
		    var tiddler = store.getTiddler("DecryptionFailed");
		    if(!tiddler) {
			tiddler = new Tiddler();
			if(store.isShadowTiddler("DecryptionFailed")) {
			    tiddler.set(title,store.getTiddlerText("DecryptionFailed"),config.views.wikified.shadowModifier,version.date,[],version.date);
			} 
		    }
		    return tiddler;
		}
	    }
	} // catch
    } // if(tiddler) {
    return null;
};

store.getTiddlerText_TiddlerEncryptionPlugin = store.getTiddlerText;
store.getTiddlerText = function(title,defaultText) {
    // Simply retrieve the tiddler, normally, if it requires decryption, it will be decrypted
    var decryptedTiddler = store.getTiddler(title);
    if(decryptedTiddler) {
	return decryptedTiddler.text;
    }
    //Ok, rather than duplicate all the core code, the above code should fail if we reach here
    // let the core code take over.
    return  store.getTiddlerText_TiddlerEncryptionPlugin(title,defaultText);
};

// Given a prompt, search our cache to see if we have already entered the password.
// Can return null if the user enters nothing.
function MyPrompt_TiddlerEncryptionPlugin(promptString,defaultValue) {
   return prompt(promptString, defaultValue);
}

function GetAndSetPasswordForPrompt_TiddlerEncryptionPlugin(promptString) {
    if(!config.encryptionPasswords[promptString]) {
	config.encryptionPasswords[promptString] = MyPrompt_TiddlerEncryptionPlugin("Enter password for '"+promptString+"' :", "");
    }
    return config.encryptionPasswords[promptString]; // may be null, prompt can be cancelled.
}

function GetAndSetPasswordForPromptToDecrypt_TiddlerEncryptionPlugin(promptString) {
    if(config.options.chkCachePasswords == true) {
	return GetAndSetPasswordForPrompt_TiddlerEncryptionPlugin(promptString);
    } else {
	config.encryptionPasswords[promptString] = MyPrompt_TiddlerEncryptionPlugin("Enter password for '"+promptString+"' :", "");
	return config.encryptionPasswords[promptString];
    }
}

// Make the encrypted tiddlies look a little more presentable.
function StringToHext_TiddlerEncryptionPlugin(theString) {
    var theResult = "";
    for(var i=0; i<theString.length; i++) {
	var theHex = theString.charCodeAt(i).toString(16);
	if(theHex.length<2) {
	    theResult += "0"+theHex;
	} else {
	    theResult += theHex;
	}
	if(i && i % 32 == 0)
	    theResult += "\n";
    }
    return theResult;
}

function HexToString_TiddlerEncryptionPlugin(theString) {
    var theResult = "";
    for(var i=0; i<theString.length; i+=2) {
	if(theString.charAt(i) == "\n") {
	    i++;
	}
	theResult += String.fromCharCode(parseInt(theString.substr(i, 2),16));
    }
    return theResult;
}

// http://www.movable-type.co.uk/scripts/tea-block.html
//
// TEAencrypt: Use Corrected Block TEA to encrypt plaintext using password
//             (note plaintext & password must be strings not string objects)
//
// Return encrypted text as string
//
function TEAencrypt(plaintext, password)
{
    if (plaintext.length == 0) return('');  // nothing to encrypt
    // 'escape' plaintext so chars outside ISO-8859-1 work in single-byte packing, but keep
    // spaces as spaces (not '%20') so encrypted text doesn't grow too long (quick & dirty)
    var asciitext = escape(plaintext).replace(/%20/g,' ');
    var v = strToLongs(asciitext);  // convert string to array of longs
    if (v.length <= 1) v[1] = 0;  // algorithm doesn't work for n<2 so fudge by adding a null
    var k = strToLongs(password.slice(0,16));  // simply convert first 16 chars of password as key
    var n = v.length;

    var z = v[n-1], y = v[0], delta = 0x9E3779B9;
    var mx, e, q = Math.floor(6 + 52/n), sum = 0;

    while (q-- > 0) {  // 6 + 52/n operations gives between 6 & 32 mixes on each word
        sum += delta;
        e = sum>>>2 & 3;
        for (var p = 0; p < n; p++) {
            y = v[(p+1)%n];
            mx = (z>>>5 ^ y<<2) + (y>>>3 ^ z<<4) ^ (sum^y) + (k[p&3 ^ e] ^ z);
            z = v[p] += mx;
        }
    }

    var ciphertext = longsToStr(v);

    return escCtrlCh(ciphertext);
}

//
// TEAdecrypt: Use Corrected Block TEA to decrypt ciphertext using password
//
function TEAdecrypt(ciphertext, password)
{
    if (ciphertext.length == 0) return('');
    var v = strToLongs(unescCtrlCh(ciphertext));
    var k = strToLongs(password.slice(0,16)); 
    var n = v.length;

    var z = v[n-1], y = v[0], delta = 0x9E3779B9;
    var mx, e, q = Math.floor(6 + 52/n), sum = q*delta;

    while (sum != 0) {
        e = sum>>>2 & 3;
        for (var p = n-1; p >= 0; p--) {
            z = v[p>0 ? p-1 : n-1];
            mx = (z>>>5 ^ y<<2) + (y>>>3 ^ z<<4) ^ (sum^y) + (k[p&3 ^ e] ^ z);
            y = v[p] -= mx;
        }
        sum -= delta;
    }

    var plaintext = longsToStr(v);

    // strip trailing null chars resulting from filling 4-char blocks:
    plaintext = plaintext.replace(/\0+$/,'');

    return unescape(plaintext);
}


// supporting functions

function strToLongs(s) {  // convert string to array of longs, each containing 4 chars
    // note chars must be within ISO-8859-1 (with Unicode code-point < 256) to fit 4/long
    var l = new Array(Math.ceil(s.length/4));
    for (var i=0; i<l.length; i++) {
        // note little-endian encoding - endianness is irrelevant as long as 
        // it is the same in longsToStr() 
        l[i] = s.charCodeAt(i*4) + (s.charCodeAt(i*4+1)<<8) + 
               (s.charCodeAt(i*4+2)<<16) + (s.charCodeAt(i*4+3)<<24);
    }
    return l;  // note running off the end of the string generates nulls since 
}              // bitwise operators treat NaN as 0

function longsToStr(l) {  // convert array of longs back to string
    var a = new Array(l.length);
    for (var i=0; i<l.length; i++) {
        a[i] = String.fromCharCode(l[i] & 0xFF, l[i]>>>8 & 0xFF, 
                                   l[i]>>>16 & 0xFF, l[i]>>>24 & 0xFF);
    }
    return a.join('');  // use Array.join() rather than repeated string appends for efficiency
}

function escCtrlCh(str) {  // escape control chars etc which might cause problems with encrypted texts
    return str.replace(/[\0\t\n\v\f\r\xa0'"!]/g, function(c) { return '!' + c.charCodeAt(0) + '!'; });
}

function unescCtrlCh(str) {  // unescape potentially problematic nulls and control characters
    return str.replace(/!\d\d?\d?!/g, function(c) { return String.fromCharCode(c.slice(1,-1)); });
}

//}}}
|''Type:''|file|
|''URL:''|http://remotely-helpful.com/TiddlyWiki/TiddlerEncryptionPlugin.html|
|''Workspace:''|(default)|

This tiddler was automatically created to record the details of this server
/***
|''Name:''|TiddlerListMacro|
|''Version:''|2.0.10 (01-May-2006)|
|''Source''|http://jackparke.googlepages.com/jtw.html#TiddlerListMacro ([[del.icio.us|http://del.icio.us/post?url=http://jackparke.googlepages.com/jtw.html%23TiddlerListMacro]])|
|''Author:''|[[Jack]]|
|''Type:''|Macro|
|''Documentation:''|[[TiddlerListMacroDocumentation]]|
!Usage
{{{<<tiddlerList parameter1:"value1" parameter2:"value2" ...>>}}}
See TiddlerListMacroDocumentation and TiddlerListMacroExamples
!Code
***/
//{{{
version.extensions.tiddlerList = {major: 2, minor: 0, revision: 10, date: new Date("May 2, 2006")};
// template = [header, item, separator, group, footer]
config.macros.tiddlerList={
 formats : {list:true, nlist:true, span:true, stack:true, csv:true, table:true},
 templates : {
 list : [ "%0\n", "* %0\n", "", "%group\n", "%0\n"],
 nlist : [ "%0", "# %0\n", "", "%group\n", "%0\n"],
 span : [ "%0", "%0", " ", "%group", "%0"],
 stack : [ "%0", "%0", "\n", "%group", "%0"],
 csv : [ "%0", "%0", ", ", "%0", "%0\n"],
 table : ["|!%0|\n", "|%0|\n", "", "|%group|\n", "|%0|\n"]
 },
 dateFormat : "DD MMM YYYY"
}

if (typeof gCurrentTiddler == 'undefined')
 var gCurrentTiddler;

config.macros.tiddlerList.handler = function(place,macroName,params,wikifier,paramString,tiddler)
{
 // Some globals
 var count=0, groupCount=0, theGroup="", lastGroup="";
 var currentTiddler = tiddler;
 gCurrentTiddler = tiddler;
 var listWikiText="";
 var formats = this.formats;
 
 // SQL-Like parameters
 var parameters = paramString.parseParams("name",null,true);
 var pTags = parameters[0]["tags"]?parameters[0]["tags"][0].split(","):[];
 var pOrder = parameters[0]["order"]?parameters[0]["order"][0]:"title";
 var pTop = parameters[0]["top"]?parameters[0]["top"][0]:-1;
 var pText = parameters[0]["text"]?parameters[0]["text"][0]:"";
 var pTitle = parameters[0]["title"]?parameters[0]["title"][0]:"";
 var pSearch = parameters[0]["search"]?parameters[0]["search"][0]:"";
 var pFilter = parameters[0]["filter"]?parameters[0]["filter"][0]:"";
 var pHeader = parameters[0]["header"]?paramFormat(parameters[0]["header"][0]):"";
 var pFooter = parameters[0]["footer"]?paramFormat(parameters[0]["footer"][0]):"";
 var pGroup = parameters[0]["group"]?parameters[0]["group"][0]:"";
 var pDateFormat = parameters[0]["dateFormat"]?parameters[0]["dateFormat"][0]:this.dateFormat;
 var pCustomParameter = parameters[0]["customParameter"]?parameters[0]["customParameter"][0]:"";
 var pFormat = parameters[0]["format"]?parameters[0]["format"][0]:"list";
 pFormat = formats[pFormat]?pFormat:"list"
 
 // Separator
 var pSeparator = parameters[0]["separator"]?paramFormat(parameters[0]["separator"][0]):(parameters[0]["seperator"]?paramFormat(parameters[0]["seperator"][0]):this.templates[pFormat][2])

 // Template for group
 var pGroupTemplate = this.templates[pFormat][3];
 if (parameters[0]["groupTemplate"])
 pGroupTemplate = paramFormat(parameters[0]["groupTemplate"][0])
 pGroupTemplate = pGroupTemplate.replace("$))", ">>")
 
 // Template for group footer
 var pGroupFooterTemplate = "";
 if (parameters[0]["groupFooterTemplate"])
 pGroupFooterTemplate = paramFormat(parameters[0]["groupFooterTemplate"][0])
 pGroupFooterTemplate = pGroupFooterTemplate.replace("$))", ">>")
 
 // Template for item
 var pItemTemplate = this.templates[pFormat][1];
 if (parameters[0]["itemTemplate"])
 pItemTemplate = paramFormat(parameters[0]["itemTemplate"][0])
 pItemTemplate = pItemTemplate.replace("$))", ">>").replace("%link", "%0").replace("%item", "%1").replace("%abstract", "%2").replace("%text", "%3").replace("%created", "%4").replace("%modified", "%5").replace("%modifier", "%6").replace("%group", "%7").replace("%title", "%8").replace("%tags", "%9").replace("%nolink", "%10").replace("%custom", "%11")
 // Template for footer
 var pFooterTemplate = this.templates[pFormat][4].replace("%count", "%1")

 // Get all tiddlers
 var tiddlers = store.reverseLookup("tags","excludeLists",false);

 // Sorting
 if(!pOrder)
 pOrder = "title";
 if (pOrder.match(/^\-/i)) {
 pOrder = pOrder.substr(1)
 var sortDesc = true;
 }
 if (sortDesc)
 tiddlers.sort(function (a,b) {if(a[pOrder] == b[pOrder]) return(0); else return (a[pOrder] > b[pOrder]) ? -1 : +1; });
 else
 tiddlers.sort(function (a,b) {if(a[pOrder] == b[pOrder]) return(0); else return (a[pOrder] < b[pOrder]) ? -1 : +1; });

 // Header
 if (pHeader)
 listWikiText += formatItem(this.templates[pFormat][0], [pHeader], pFormat)
 
 for(var t=0; t<tiddlers.length; t++) {
 tiddler = tiddlers[t];
 if (pText!="" && tiddler.text=="") tiddler.text=store.getValue(tiddler, 'text')
 if (pTop==-1 || count<pTop) {
 if (pText=="" || tiddler.text.match(pText)) {
 if (pTitle=="" || tiddler.title.match(pTitle)) {
 if (pSearch=="" || (tiddler.title.match(pSearch) || tiddler.text.match(pSearch))) {
 if (pFilter=="" || eval(pFilter)) {
 if (pTags.length==0 || compareArrays(tiddler.tags, pTags, "all")) {
 count++;
 if (tiddler.text=="") tiddler.text=store.getValue(tiddler, 'text')
 // Grouping
 if (pGroup) {
 theGroup = eval(pGroup);
 if(theGroup != lastGroup) {
 groupCount++;
 if (pGroupFooterTemplate && groupCount>1)
 listWikiText += pGroupFooterTemplate.replace("%group", theGroup)
 listWikiText += pGroupTemplate.replace("%group", theGroup)
 lastGroup = theGroup;
 }
 }
 // Separators
 if (count>1) listWikiText += pSeparator;
 //Plaintext title
 var noLink = tiddler.title.match(config.textPrimitives.wikiLink)?"~" + tiddler.title:tiddler.title;
 // Custom parameter
 if (pCustomParameter)
 var custom="";
 try {
 custom = eval(pCustomParameter)
 } catch (e) {}
 // List individual tiddler
 listWikiText += formatItem(pItemTemplate,["[[" + tiddler.title + "]]",count,tiddler.text.substr(0,300),tiddler.text,tiddler.created.formatString(pDateFormat),tiddler.modified.formatString(pDateFormat),tiddler.modifier,theGroup,tiddler.title,tiddler.tags.join(" "),noLink,custom], pFormat)
 }
 }
 }
 }
 }
 }
 }
 
 // Last group footer
 if (pGroup && pGroupFooterTemplate && count>0)
 listWikiText += pGroupFooterTemplate.replace("%group", theGroup)

 // Footer
 if (pFooter) {
 pFooter = pFooter.replace("%count", count)
 listWikiText += formatItem(pFooterTemplate, [pFooter], pFormat)
 }
 
 // Render result
 if (!parameters[0]["debug"])
 wikify(listWikiText,place, null, currentTiddler)
 else
 place.innerHTML = "<textarea style=\"width:100%;\" rows=30>" + listWikiText + "</textarea>"
 
 
 // Local functions
 
 function paramFormat(param) {
 // Allow "\n" in non evalled parameters
 return param.replace(/\\n/g, "\n");
 }
 
 function formatItem(template, values, format) {
 // Fill template with values (depending on list format)
 if (format.match(/table/) && values[0].match(/\|/))
 return ("%0\n").format(values)
 else
 return template.format(values)
 }
 
 function compareArrays(array, values, logic) {
 // Compare items in array with AND("all") or OR("any") logic
 var matches=0;
 for(var v=0; v<values.length; v++)
 if(values[v].match(/^\-/) && !array.contains(values[v].substr(1)))
 matches++;
 else if (array.contains(values[v]))
 matches++;
 return ((logic=="all" && matches==values.length) || (logic!="all" && matches>0))
 }
 
}

String.prototype.prettyTrim = function(len,prefix,postfix) {
 var result = this.trim().replace(/\r\n/g,' ').replace(/\n/g,' ');
 if (!prefix) prefix = '';
 if (!postfix) postfix = '';
 if (result.length > len - 3)
 return prefix + result.substr(0,len) + '...' + postfix;
 else if (result.length > 0)
 return prefix + result + postfix;
 else
 return result;
}

//}}}
!Description
The TiddlerListMacro lists tiddlers with ~SQL-Like features:
* List tiddlers containing a word in the title or text (case-sensitive)
* List tiddlers tagged with given tags or exclude certain tags
* Ascending and descending sorting of single fields
* Limit number of tiddlers displayed
* Specify different HTML formats for the lists
* Grouping of items in a list
* Customizable wiki templates
* Numbering and totals
!Revision History
* Original by [[Jack]] 17-Apr-2006
* Added formatting (v2.0.1 18-Apr-2006)
* Added grouping (v2.0.2 18-Apr-2006)
* Added flexible filtering (v2.0.3 19-Apr-2006)
* Added custom item templates (v2.0.4 20-Apr-2006)
* Added custom templates (v2.0.5 21-Apr-2006)
* Allow evalled parameters (v2.0.7 23-Apr-2006)
* Allow groupFooterTemplate (v2.0.9 30-Apr-2006)
* Added the customParameter (v2.0.10 2-May-2006)
!To Do
* Case-insensitive searching
* Sorting on multiple fields
!Usage
{{{<<tiddlerList parameter1:"value1" parameter2:"value2" ...>>}}}
!Examples ([[TiddlerListMacroExamples]])
List all tiddlers tagged with "Plugin"
{{{<<tiddlerList tags:Plugin>>}}}
List newest 3 plugins which are not templates:
{{{<<tiddlerList tags:"Plugin,-Template" top:3 order:"-created">>}}}
List all tiddlers containing "Jack" in their title or text (last modified first):
{{{<<tiddlerList search:"Jack" order:"-modified">>}}}
List all tiddlers starting with "T" in a table:
{{{<<tiddlerList title:"^T" format:"table" header:"Tiddlers beginning with T" footer:"%count items listed">>}}}
Group tiddlers by first letter
{{{<<tiddlerList top:"15" group:"tiddler.title.substr(0,1)" groupTemplate:"''%group''">>}}}
Show a list of all tiddlers with creation date (overrides default item template)
{{{<<tiddlerList itemTemplate:"* %link (%created)\n">>}}}
Show all tiddlers that have the host's tiddler title in their tag list
{{{<<tiddlerList filter:"tiddler.tags.contains(currentTiddler.title)">>}}}
!Parameters
|!Parameter|!Type|!Meaning|!Example|
|top|Integer|Number of tiddlers to display|"10"|
|tags|String|List tiddlers with matching tags (AND Logic). Leading - to exclude.|"~ToDo,Urgent,-Done"|
|title|~RegEx|List tiddlers with matching title|"^[Pp]"|
|text|~RegEx|List tiddlers with matching text|"Searchtext"|
|search|~RegEx|List tiddlers with matching title OR text|"Problem"|
|filter*|~JavaScript|List tiddlers according to boolean expression)|"tiddler.title.length<4 && tiddler.tags.contains('Idea')"|
|format|String (fixed list)|HTML formatting of list. list (ul, default), nlist (ol), span, stack (div), csv, table.|"list"|
|order|String|Sort order of tiddlers. - is descending, + ascending|"-created"|
|group*|~JavaScript|Grouping field|tiddler.title.substr(0,1)|
|customParameter*|~JavaScript|Custom parameter to be evalled for use in the itemTemplate|tiddler.text.match(/Version: (.*)/)[1]|
|header|String|Top caption|"Tiddlers beginning with T"|
|footer|String|Bottom caption|"End of list"|
|itemTemplate|~WikiTemplate|~WikiText with %placeholders|"%link\n%abstract\n%modified"|
|groupTemplate|~WikiTemplate|~WikiText with %placeholders for the start of each group|"!!%group"|
|groupFooterTemplate|~WikiTemplate|~WikiText with %placeholders for the end of each group|"----\n"|
|dateFormat|String|Date formatting string when displaying dates|~YYYY-MM-DD|
|separator|String|Define a string or character to be inserted between items listed|" "|
|debug|Boolean|Set to 1 or true for debug mode where only wikitext will be output|debug:1|
{{{*}}} Parameter will be evalled (do not pass with {{{{{ }} }}} unless you want it evalled twice!)
!Template Placeholders
Placeholder values for itemTemplate parameter
|!Placeholder|!Field|
|%item|List item number|
|%link|Link to Tiddler {{{[[MyTiddler]]}}}|
|%title|Tiddler Name {{{MyTiddler}}}|
|%nolink|Unlinked Tiddler Title {{{~MyTiddler}}}|
|%abstract|First 300 chars of tiddler text|
|%text|All tiddler text|
|%tags|Tags separated by space|
|%created|Creation date|
|%modified|Modified date|
|%modifier|Last modifier|
|%group|Name of group field|
|%custom|The result of your evalled customParameter|
|%count|Number of items listed (footer only)|
!Variables
{{{{{currentTiddler}} }}}refers to the current (host) tiddler in function scope (i.e. within the filter or group parameters)
{{{{{gCurrentTiddler}} }}}refers to the current (host) tiddler in global scope (i.e. within{{{ {{}} }}}evalled parameters. Example:
{{{<<tiddlerList tags:{{gCurrentTiddler.title}}>>}}}
!Style
No styles are pre-assigned to the lists. Use {{{@@}}} notation to define custom styles in the header, footer, groupTemplate and itemTemplate parameters.
/***
|Location|http://visualtw.ouvaton.org/VisualTW.html|
|Version|1.0.4|
|CoreVersion|2.x|
|Browsers|Firefox 2.0.x, IE 6.0+, others|
!Description:
A bar to switch between tiddlers through tabs (like browser tabs bar).
!Demo:
* On [[homepage|http://visualtw.ouvaton.org/VisualTW.html]], open several tiddlers to use the tabs bar.
* See also http://groups.google.com/group/TiddlyWiki/msg/98992b8611d064ab where was posted a link to a "stand alone version" that you can use to test this plugin in any TW pages (by copying and pasting the code in the browser address bar).
!Installation:
*import this tiddler from [[homepage|http://visualtw.ouvaton.org/VisualTW.html]] (tagged as systemConfig)
*add a div named ''tiddlersBar'' in PageTemplate (optionally, adds ondblclick event handler to create new tiddler on this action).
*save and reload
*optionally, adjust StyleSheetTiddlersBar
!Configuration options :
<<option chkDisableTabsBar>> Disable the tabs bar (to print, by example).
<<option chkHideTabsBarWhenSingleTab >> Automatically hide the tabs bar when only one tiddler is displayed. 
<<option txtSelectedTiddlerTabButton>> Optional ''selected'' tab button (as in command bar). Example : editTiddler
!Code
***/
//{{{
config.options.chkDisableTabsBar = config.options.chkDisableTabsBar ? config.options.chkDisableTabsBar : false;
config.options.chkHideTabsBarWhenSingleTab  = config.options.chkHideTabsBarWhenSingleTab  ? config.options.chkHideTabsBarWhenSingleTab  : false;
config.options.txtSelectedTiddlerTabButton = config.options.txtSelectedTiddlerTabButton ? config.options.txtSelectedTiddlerTabButton : "";
config.macros.tiddlersBar = {
	tooltip : "see ",
	tooltipClose : "click here to close this tab",
	promptRename : "Enter tiddler new name",
	currentTiddler : "",
	previousState : false,
	handler: function(place,macroName,params) {
		if (config.macros.tiddlersBar.isShown())
			story.forEachTiddler(function(title,e){
				if (title==config.macros.tiddlersBar.currentTiddler){
					var d = createTiddlyElement(null,"nobr",null,"tab tabSelected");
					if (config.options.txtSelectedTiddlerTabButton && config.commands[config.options.txtSelectedTiddlerTabButton]) {
						var btn = createTiddlyButton(d, title, config.commands[config.options.txtSelectedTiddlerTabButton].tooltip ,config.macros.tiddlersBar.onSelectedTabButtonClick);
						btn.setAttribute("tiddler", title);
					}
					else
						createTiddlyText(d,title);
				}
				else {
					var d = createTiddlyElement(place,"nobr",null,"tab tabUnselected");
					var btn = createTiddlyButton(d,title,config.macros.tiddlersBar.tooltip + title,config.macros.tiddlersBar.onSelectTab);
					btn.setAttribute("tiddler", title);
				}
				var c = createTiddlyButton(d,"x",config.macros.tiddlersBar.tooltipClose,config.macros.tiddlersBar.onTabClose,"tabCloseButton");
				c.setAttribute("tiddler", title);
				if (place.childNodes) {
					place.insertBefore(document.createTextNode(" "),place.firstChild); // to allow break line here when many tiddlers are open
					place.insertBefore(d,place.firstChild); 
				}
				else place.appendChild(d);
			})
	}, 
	refresh: function(place,params){
		removeChildren(place);
		config.macros.tiddlersBar.handler(place,"tiddlersBar",params);
		if (config.macros.tiddlersBar.previousState!=config.macros.tiddlersBar.isShown()) {
			story.refreshAllTiddlers();
			if (config.macros.tiddlersBar.previousState) story.forEachTiddler(function(t,e){e.style.display="";});
			config.macros.tiddlersBar.previousState = !config.macros.tiddlersBar.previousState;
		}
	},
	isShown : function(){
		if (config.options.chkDisableTabsBar) return false;
		if (!config.options.chkHideTabsBarWhenSingleTab) return true;
		var cpt=0;
		story.forEachTiddler(function(){cpt++});
		return (cpt>1);
	},
	selectNextTab : function(){  //used when the current tab is closed (to select another tab)
		var previous="";
		story.forEachTiddler(function(title){
			if (!config.macros.tiddlersBar.currentTiddler) {
				story.displayTiddler(null,title);
				return;
			}
			if (title==config.macros.tiddlersBar.currentTiddler) {
				if (previous) {
					story.displayTiddler(null,previous);
					return;
				}
				else config.macros.tiddlersBar.currentTiddler=""; 	// so next tab will be selected
			}
			else previous=title;
			});		
	},
	onSelectTab : function(e){
		var t = this.getAttribute("tiddler");
		if (t) story.displayTiddler(null,t);
		return false;
	},
	onTabClose : function(e){
		var t = this.getAttribute("tiddler");
		if (t) {
			if(story.hasChanges(t) && !readOnly) {
				if(!confirm(config.commands.cancelTiddler.warning.format([t])))
				return false;
			}
			story.closeTiddler(t);
		}
		return false;
	},
	onSelectedTabButtonClick : function(event,src,title) {
		var t = this.getAttribute("tiddler");
		if (t && config.options.txtSelectedTiddlerTabButton && config.commands[config.options.txtSelectedTiddlerTabButton])
			config.commands[config.options.txtSelectedTiddlerTabButton].handler(event, src, t);
	},
	onTiddlersBarAction: function(event) {
		var source = event.target ? event.target.id : event.srcElement.id; // FF uses target and IE uses srcElement;
		if (source=="tiddlersBar") story.displayTiddler(null,'New Tiddler',DEFAULT_EDIT_TEMPLATE,false,null,null);
	}
}

story.coreCloseTiddler = story.coreCloseTiddler? story.coreCloseTiddler : story.closeTiddler;
story.coreDisplayTiddler = story.coreDisplayTiddler ? story.coreDisplayTiddler : story.displayTiddler;

story.closeTiddler = function(title,animate,unused) {
	if (title==config.macros.tiddlersBar.currentTiddler)
		config.macros.tiddlersBar.selectNextTab();
	story.coreCloseTiddler(title,animate,unused);
	var e=document.getElementById("tiddlersBar");
	if (e) config.macros.tiddlersBar.refresh(e,null);
}

story.displayTiddler = function(srcElement,title,template,animate,unused,customFields,toggle){
	story.coreDisplayTiddler(srcElement,title,template,animate,unused,customFields,toggle);
	if (config.macros.tiddlersBar.isShown()) {
		story.forEachTiddler(function(t,e){
			if (t!=title) e.style.display="none";
			else e.style.display="";
		})
		config.macros.tiddlersBar.currentTiddler=title;
	}
	var e=document.getElementById("tiddlersBar");
	if (e) config.macros.tiddlersBar.refresh(e,null);
}

ensureVisible=function (e) {return 0} //disable bottom scrolling (not useful now)

config.shadowTiddlers.StyleSheetTiddlersBar = "/*{{{*/\n" + "#tiddlersBar .button {border:0}\n" + "#tiddlersBar {padding : 1em 0.5em 0 0.5em}\n"+ "/*}}}*/";
store.addNotification("StyleSheetTiddlersBar", refreshStyles); 

//}}}

http://www.tiddlywiki.com
/***

|Name|ToggleSideBarMacro|
|Created by|SaqImtiaz|
|Location|http://tw.lewcid.org/#ToggleSideBarMacro|
|Version|1.0|
|Requires|~TW2.x|
!Description:
Provides a button for toggling visibility of the SideBar. You can choose whether the SideBar should initially be hidden or displayed.

!Demo
<<toggleSideBar "Toggle Sidebar">>

!Usage:
{{{<<toggleSideBar>>}}} <<toggleSideBar>>
additional options:
{{{<<toggleSideBar label tooltip show/hide>>}}} where:
label = custom label for the button,
tooltip = custom tooltip for the button,
show/hide = use one or the other, determines whether the sidebar is shown at first or not.
(default is to show the sidebar)

You can add it to your tiddler toolbar, your MainMenu, or where you like really.
If you are using a horizontal MainMenu and want the button to be right aligned, put the following in your StyleSheet:
{{{ .HideSideBarButton {float:right;} }}}

!History
*23-07-06: version 1.0: completely rewritten, now works with custom stylesheets too, and easier to customize start behaviour. 
*20-07-06: version 0.11
*27-04-06: version 0.1: working.

!Code
***/
//{{{
config.macros.toggleSideBar={};

config.macros.toggleSideBar.settings={
         styleHide :  "#sidebar { display: none;}\n"+"#contentWrapper #displayArea { margin-right: 1em;}\n"+"",
         styleShow : " ",
         arrow1: "«",
         arrow2: "»"
};

config.macros.toggleSideBar.handler=function (place,macroName,params,wikifier,paramString,tiddler)
{
          var tooltip= params[1]||'toggle sidebar';
          var mode = (params[2] && params[2]=="hide")? "hide":"show";
          var arrow = (mode == "hide")? this.settings.arrow1:this.settings.arrow2;
          var label= (params[0]&&params[0]!='.')?params[0]+" "+arrow:arrow;
          var theBtn = createTiddlyButton(place,label,tooltip,this.onToggleSideBar,"button HideSideBarButton");
          if (mode == "hide")
             { 
             (document.getElementById("sidebar")).setAttribute("toggle","hide");
              setStylesheet(this.settings.styleHide,"ToggleSideBarStyles");
             }
};

config.macros.toggleSideBar.onToggleSideBar = function(){
          var sidebar = document.getElementById("sidebar");
          var settings = config.macros.toggleSideBar.settings;
          if (sidebar.getAttribute("toggle")=='hide')
             {
              setStylesheet(settings.styleShow,"ToggleSideBarStyles");
              sidebar.setAttribute("toggle","show");
              this.firstChild.data= (this.firstChild.data).replace(settings.arrow1,settings.arrow2);
              }
          else
              {    
               setStylesheet(settings.styleHide,"ToggleSideBarStyles");
               sidebar.setAttribute("toggle","hide");
               this.firstChild.data= (this.firstChild.data).replace(settings.arrow2,settings.arrow1);
              }

     return false;
}

setStylesheet(".HideSideBarButton .button {font-weight:bold; padding: 0 5px;}\n","ToggleSideBarButtonStyles");

//}}}
/***
| Name|ToggleTagPlugin|
| Description|Makes a checkbox which toggles a tag in a tiddler|
| Version|3.0 ($Rev: 1845 $)|
| Date|$Date: 2007-03-16 15:19:22 +1000 (Fri, 16 Mar 2007) $|
| Source|http://tiddlyspot.com/mptw/#ToggleTagMacro|
| Author|Simon Baird <simon.baird@gmail.com>|
| License|http://mptw.tiddlyspot.com/#TheBSDLicense|
!Usage
{{{<<toggleTag }}}//{{{TagName TiddlerName LabelText}}}//{{{>>}}}
* TagName - the tag to be toggled, default value "checked"
* TiddlerName - the tiddler to toggle the tag in, default value the current tiddler
* LabelText - the text (gets wikified) to put next to the check box, default value is '{{{[[TagName]]}}}' or '{{{[[TagName]] [[TiddlerName]]}}}'
(If a parameter is '.' then the default will be used)

Examples:

|Code|Description|Example|h
|{{{<<toggleTag>>}}}|Toggles the default tag (checked) in this tiddler|<<toggleTag>>|
|{{{<<toggleTag TagName>>}}}|Toggles the TagName tag in this tiddler|<<toggleTag TagName>>|
|{{{<<toggleTag TagName TiddlerName>>}}}|Toggles the TagName tag in the TiddlerName tiddler|<<toggleTag TagName TiddlerName>>|
|{{{<<toggleTag TagName TiddlerName 'click me'>>}}}|Same but with custom label|<<toggleTag TagName TiddlerName 'click me'>>|
|{{{<<toggleTag . . 'click me'>>}}}|dot means use default value|<<toggleTag . . 'click me'>>|
Notes:
* If TiddlerName doesn't exist it will be silently created
* Set label to '-' to specify no label
* See also http://mgtd-alpha.tiddlyspot.com/#ToggleTag2

!Known issues
* Doesn't smoothly handle the case where you toggle a tag in a tiddler that is current open for editing

***/
//{{{

merge(config.macros,{

	toggleTag: {

		doRefreshAll: true,
		createIfRequired: true,
		shortLabel: "[[%0]]",
		longLabel: "[[%0]] [[%1]]",

		handler: function(place,macroName,params,wikifier,paramString,tiddler) {
			var tag = (params[0] && params[0] != '.') ? params[0] : "checked";
			var title = (params[1] && params[1] != '.') ? params[1] : tiddler.title;
			var defaultLabel = (title == tiddler.title ? this.shortLabel : this.longLabel);
			var label = (params[2] && params[2] != '.') ? params[2] : defaultLabel;
			label = (label == '-' ? '' : label);
			var theTiddler =  title == tiddler.title ? tiddler : store.getTiddler(title);
			var cb = createTiddlyCheckbox(place, label.format([tag,title]), theTiddler && theTiddler.isTagged(tag), function(e) {
				if (!store.tiddlerExists(title)) {
					if (config.macros.toggleTag.createIfRequired) {
						var content = store.getTiddlerText(title); // just in case it's a shadow
						store.saveTiddler(title,title,content?content:"",config.options.txtUserName,new Date(),null);
					}
					else 
						return false;
				}
				store.setTiddlerTag(title,this.checked,tag);
				return true;
			});
		}
	}
});

//}}}
<<tag Bookmarks>> - <<tag MiscNotes>> - <<tag HowTo>>
''[[Total Commander|http://www.ghisler.com/]]'' (formerly Wincmd) is a file manager for Windows similar to the Windows Explorer, but Total Commander uses a different approach: it has two fixed windows side by side like my old DOS favorite Norton Commander.

Total Commander handles archives like subdirectories. It supports ZIP/ARJ/LHA/RAR/UC2/TAR/GZ/CAB/ACE archives, and has an internal ZIP-compatible packer. The search function allows to search for files inside archives, even for text.

A command line helps starting programs with parameters, and a fully configurable button bar allows to launch programs and internal commands. The built-in viewer can show files in text, hex, binary, image and multimedia format.

The 32 bit version supports Drag&Drop from and to explorer/desktop, delete to the recycle bin, and Explorer style context menus/property sheets. FTP servers on the Internet can be accessed like local drives.

A configurable directory hotlist (bookmarks) and history list make directory navigation easier.

The sync function allows to synchronize two complete directory trees, and the compare function shows the difference of two binary or text files highlighted side by side. The new parallel port connection works between any combination of Windows 95/98/ME, Windows NT 4, Windows 2000/XP, Windows 3.1 and even DOS through a separate server.
/***
Contains the stuff you need to use Tiddlyspot
Note you must also have UploadPlugin installed
***/
//{{{

// edit this if you are migrating sites or retrofitting an existing TW
config.tiddlyspotSiteId = 'slw';

// make it so you can by default see edit controls via http
config.options.chkHttpReadOnly = false;
window.readOnly = false; // make sure of it (for tw 2.2)

// disable autosave in d3
if (window.location.protocol != "file:")
	config.options.chkGTDLazyAutoSave = false;

// tweak shadow tiddlers to add upload button, password entry box etc
with (config.shadowTiddlers) {
	SiteUrl = 'http://'+config.tiddlyspotSiteId+'.tiddlyspot.com';
	SideBarOptions = SideBarOptions.replace(/(<<saveChanges>>)/,"$1<<tiddler TspotSidebar>>");
	OptionsPanel = OptionsPanel.replace(/^/,"<<tiddler TspotOptions>>");
	DefaultTiddlers = DefaultTiddlers.replace(/^/,"[[Welcome to Tiddlyspot]] ");
	MainMenu = MainMenu.replace(/^/,"[[Welcome to Tiddlyspot]] ");
}

// create some shadow tiddler content
merge(config.shadowTiddlers,{

'Welcome to Tiddlyspot':[
 "This document is a ~TiddlyWiki from tiddlyspot.com.  A ~TiddlyWiki is an electronic notebook that is great for managing todo lists, personal information, and all sorts of things.",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //What now?// &nbsp;&nbsp;@@ Before you can save any changes, you need to enter your password in the form below.  Then configure privacy and other site settings at your [[control panel|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/controlpanel]] (your control panel username is //" + config.tiddlyspotSiteId + "//).",
 "<<tiddler TspotControls>>",
 "See also GettingStarted.",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Working online// &nbsp;&nbsp;@@ You can edit this ~TiddlyWiki right now, and save your changes using the \"save to web\" button in the column on the right.",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Working offline// &nbsp;&nbsp;@@ A fully functioning copy of this ~TiddlyWiki can be saved onto your hard drive or USB stick.  You can make changes and save them locally without being connected to the Internet.  When you're ready to sync up again, just click \"upload\" and your ~TiddlyWiki will be saved back to tiddlyspot.com.",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Help!// &nbsp;&nbsp;@@ Find out more about ~TiddlyWiki at [[TiddlyWiki.com|http://tiddlywiki.com]].  Also visit [[TiddlyWiki Guides|http://tiddlywikiguides.org]] for documentation on learning and using ~TiddlyWiki. New users are especially welcome on the [[TiddlyWiki mailing list|http://groups.google.com/group/TiddlyWiki]], which is an excellent place to ask questions and get help.  If you have a tiddlyspot related problem email [[tiddlyspot support|mailto:support@tiddlyspot.com]].",
 "",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Enjoy :)// &nbsp;&nbsp;@@ We hope you like using your tiddlyspot.com site.  Please email [[feedback@tiddlyspot.com|mailto:feedback@tiddlyspot.com]] with any comments or suggestions."
].join("\n"),

'TspotControls':[
 "| tiddlyspot password:|<<option pasUploadPassword>>|",
 "| site management:|<<upload http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/store.cgi index.html . .  " + config.tiddlyspotSiteId + ">>//(requires tiddlyspot password)//<<br>>[[control panel|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/controlpanel]], [[download (go offline)|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/download]]|",
 "| links:|[[tiddlyspot.com|http://tiddlyspot.com/]], [[FAQs|http://faq.tiddlyspot.com/]], [[announcements|http://announce.tiddlyspot.com/]], [[blog|http://tiddlyspot.com/blog/]], email [[support|mailto:support@tiddlyspot.com]] & [[feedback|mailto:feedback@tiddlyspot.com]], [[donate|http://tiddlyspot.com/?page=donate]]|"
].join("\n"),

'TspotSidebar':[
 "<<upload http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/store.cgi index.html . .  " + config.tiddlyspotSiteId + ">><html><a href='http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/download' class='button'>download</a></html>"
].join("\n"),

'TspotOptions':[
 "tiddlyspot password:",
 "<<option pasUploadPassword>>",
 ""
].join("\n")

});
//}}}
~TiddlyWiki.com [[HowToUpgrade|http://www.tiddlywiki.com/#HowToUpgrade]]
| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |
| 07/04/2008 10:21:24 | SteveWeidner | [[/|http://slw.tiddlyspot.com/]] | [[store.cgi|http://slw.tiddlyspot.com/store.cgi]] | . | [[index.html | http://slw.tiddlyspot.com/index.html]] | . |
| 25/04/2008 13:44:06 | SteveWeidner | [[/|http://slw.tiddlyspot.com/]] | [[store.cgi|http://slw.tiddlyspot.com/store.cgi]] | . | [[index.html | http://slw.tiddlyspot.com/index.html]] | . | failed |
| 25/04/2008 13:45:05 | SteveWeidner | [[/|http://slw.tiddlyspot.com/]] | [[store.cgi|http://slw.tiddlyspot.com/store.cgi]] | . | [[index.html | http://slw.tiddlyspot.com/index.html]] | . |
| 16/05/2008 07:55:11 | SLW | [[/|http://slw.tiddlyspot.com/]] | [[store.cgi|http://slw.tiddlyspot.com/store.cgi]] | . | [[index.html | http://slw.tiddlyspot.com/index.html]] | . | failed |
| 16/05/2008 08:00:50 | SLW | [[/|http://slw.tiddlyspot.com/]] | [[store.cgi|http://slw.tiddlyspot.com/store.cgi]] | . | [[index.html | http://slw.tiddlyspot.com/index.html]] | . |
| 16/05/2008 14:28:59 | SLW | [[tw-empty.html|file:///home/sweidner/Desktop/tw-empty.html]] | [[store.cgi|http://slw.tiddlyspot.com/store.cgi]] | . | [[index.html | http://slw.tiddlyspot.com/index.html]] | . |
| 27/06/2008 17:13:52 | SteveWeidner | [[/|http://slw.tiddlyspot.com/]] | [[store.cgi|http://slw.tiddlyspot.com/store.cgi]] | . | [[index.html | http://slw.tiddlyspot.com/index.html]] | . | failed |
| 27/06/2008 17:17:29 | SteveWeidner | [[/|http://slw.tiddlyspot.com/]] | [[store.cgi|http://slw.tiddlyspot.com/store.cgi]] | . | [[index.html | http://slw.tiddlyspot.com/index.html]] | . |
| 08/12/2008 20:55:29 | DakotaGeek | [[/|http://slw.tiddlyspot.com/]] | [[store.cgi|http://slw.tiddlyspot.com/store.cgi]] | . | [[index.html | http://slw.tiddlyspot.com/index.html]] | . | failed |
| 08/12/2008 20:56:35 | DakotaGeek | [[/|http://slw.tiddlyspot.com/]] | [[store.cgi|http://slw.tiddlyspot.com/store.cgi]] | . | [[index.html | http://slw.tiddlyspot.com/index.html]] | . |
/***
|''Name:''|PasswordOptionPlugin|
|''Description:''|Extends TiddlyWiki options with non encrypted password option.|
|''Version:''|1.0.2|
|''Date:''|Apr 19, 2007|
|''Source:''|http://tiddlywiki.bidix.info/#PasswordOptionPlugin|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0 (Beta 5)|
***/
//{{{
version.extensions.PasswordOptionPlugin = {
	major: 1, minor: 0, revision: 2, 
	date: new Date("Apr 19, 2007"),
	source: 'http://tiddlywiki.bidix.info/#PasswordOptionPlugin',
	author: 'BidiX (BidiX (at) bidix (dot) info',
	license: '[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D]]',
	coreVersion: '2.2.0 (Beta 5)'
};

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

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

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

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

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

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

merge(config.optionsDesc,{
		pasPassword: "Test password"
	});
*/
//}}}

/***
|''Name:''|UploadPlugin|
|''Description:''|Save to web a TiddlyWiki|
|''Version:''|4.1.0|
|''Date:''|May 5, 2007|
|''Source:''|http://tiddlywiki.bidix.info/#UploadPlugin|
|''Documentation:''|http://tiddlywiki.bidix.info/#UploadPluginDoc|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
|''~CoreVersion:''|2.2.0 (#3125)|
|''Requires:''|PasswordOptionPlugin|
***/
//{{{
version.extensions.UploadPlugin = {
	major: 4, minor: 1, revision: 0,
	date: new Date("May 5, 2007"),
	source: 'http://tiddlywiki.bidix.info/#UploadPlugin',
	author: 'BidiX (BidiX (at) bidix (dot) info',
	coreVersion: '2.2.0 (#3125)'
};

//
// Environment
//

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

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

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

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

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

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

//
// uploadOptions Macro
//

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

//
// upload functions
//

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

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

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

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

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

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

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

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

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

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

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

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

//
// Utilities
// 

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

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

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

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

//
// Initializations
//

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

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

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

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


/* don't want this for tiddlyspot sites

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

*/


//}}}
!Xsetup
In the file 'etc/kde3/kdm/Xsetup', insert the following command.
{{{
x11vnc -forever -rfbauth /home/sweidner/.vnc/passwd -bg -allow 192.236.35. -o /var/log/x11vnc.log
}}}
!Reference
*[[Ubuntu Forums|http://ubuntuforums.org/]] thread [[HOWTO: x11vnc (vnc for display :0)|http://ubuntuforums.org/showthread.php?t=363236]]
*[[x11vnc: a VNC server for real X displays |http://www.karlrunge.com/x11vnc/]]
**[[Limiting incoming connections|http://www.karlrunge.com/x11vnc/#faq-allow-opt]]
**[[Automatically locking upon disconnect|http://www.karlrunge.com/x11vnc/#faq-gone-lock]]
**[[Running at start-up via display manager|http://www.karlrunge.com/x11vnc/#faq-display-manager]]
[[MptwViewTemplate]]
!What women want in a man at age 22:
1. Handsome
2. Charming
3. Financially successful
4. A caring listener
5. Witty
6. In good shape
7. Dresses with style
8. Appreciates finer things
9. Full of thoughtful surprises
10. An imaginative, romantic lover
!What women want in a man at age 32:
1. Nice looking (preferably with hair)
2. Opens car doors, holds chairs
3. Has enough money for a nice dinner
4. Listens more than talks
5. Laughs at my jokes
6. Carries bags of groceries with ease
7. Owns at least one tie
8. Appreciates a good home-cooked meal
9. Remembers birthdays and anniversaries
10. Seeks romance at least once a week
!What women want in a man at age 42:
1. Not too ugly (bald head is fine)
2. Doesn't drive off until I'm in the car
3. Works steady - splurges on dinner out occasionally
4. Nods head when I'm talking
5. Usually remembers punch lines of jokes
6. Is in good enough shape to rearrange the furniture
7. Wears a shirt that covers his stomach
8. Knows not to buy champagne with screw-top lids
9. Remembers to put the toilet seat down
10. Shaves most weekends
!What women want in a man at age 52:
1. Keeps hair in nose and ears trimmed
2. Doesn't belch or scratch in public
3. Doesn't borrow money too often
4. Doesn't nod off to sleep when I'm venting
5. Doesn't re-tell the same joke too many times
6. Is in good enough shape to get off couch on weekends
7. Usually wears matching socks and fresh underwear
8. Appreciates a good TV dinner
9. Remembers your name on occasion
10. Shaves some weekends
!What women want in a man at age 62:
1. Doesn't scare small children
2. Remembers where bathroom is
3. Doesn't require much money for upkeep
4. Only snores lightly when asleep
5. Remembers why he's laughing
6. Is in good enough shape to stand up by himself
7. Usually wears some clothes
8. Likes soft foods
9. Remembers where he left his teeth
10. Remembers that it's the weekend
!What women want in a man at age 72:
1. Breathing
2. Doesn't miss the toilet

[source: http://www.jokesplace.com/joke/what_women_want.html]
<tabs Wiki-Info>
<tab Wiki Bookmarks>

*[[TiddlyWiki|http://www.tiddlywiki.com]] is a great piece of code.  It is a fully functional Wiki self-contained in an HTML file.  The file can be opened, edited, copied, carried around on a keychain and saved back to itself from any browser with Javascript enabled.
*[[TiddlySpot|http://www.tiddlyspot.com]]
** My [[SLW TiddlySpot|http://slw.tiddlyspot.com]]
** and my [[Bzyrd TiddlySpot|http://bzyrd.tiddlyspot.com]]
*[[StickWiki|http://stickwiki.sourceforge.net/]]
*[[PBWiki|http://yummy.pbwiki.com]]
** [[My PBWiki|http://bzyrd.pbwiki.com]]
** [[Steve's Schtuff|http://steves.schtuff.com/]] - will resolve to PBWiki as-of 4/26/2007 - uses [[my|http://slw.myopenid.com]] [[OpenID|http://www.myopenid.com]]

</tab>
<tab TW Plugins>

![[Lewcid TW|http://tw.lewcid.org/]] - Home of...
** --SelectThemePlugin - On the fly switching between various TW layouts (themes)-- Default Tiddler since ver. 2.2.0
** InlineTabsPlugin - http://tw.lewcid.org/sandbox/
** InlineSlidersPlugin - http://tw.lewcid.org/sandbox/
** LimitOpenTiddlersPlugin - http://tw.lewcid.org/sandbox/
** TaggerPlugin
> This plugin causes new and opened tiddlers to appear at the top of the page rather than at the bottom.
! [[WikiBar|http://aiddlywiki.sourceforge.net/wikibar_demo_2.html]]
> WikiBar is a toolbar that gives access to most of TiddlyWiki's formatting features with a few clicks. It's a handy tool for people who are not familiar with TiddlyWiki syntax.
![[Jack's TiddlyWiki|http://jackparke.googlepages.com/jtw.html]]
** TiddlerListMacro - enables lists like [[Index]]
** [[Config]] - shows the configuration of this particular TW
![[Knightnet TiddlyWiki|http://knighjm.googlepages.com/knightnet-default-tw.html]]


</tab>
<tab Help Docs>

*[[TWHelp|http://tiddlyspot.com/twhelp]] - hosted by [[TiddlySpot|http://tiddlyspot.com]]
*[[TiddlyWiki Guides|http://tiddlywikiguides.org]] - a collaborative TiddlyWiki documentation project
*[[TiddlyWiki for the rest of us|http://www.giffmex.org/twfortherestofus.html]] by [[Dave G|http://www.giffmex.org/aboutus.html]] - 'For those of you like me, newcomers to TiddlyWiki who don't know "Tiddly Squat"'
*[[TiddlyWiki User's Guide|http://danielbaird.com/tiddlywikiguides/userguide-sample.html]] by Daniel Baird

</tab>
</tabs>
This is TiddlyWiki version <<version>>
!CHANGING THE FIELD SEPARATOR
By default, awk uses white space (one or more spaces) as a field delimiter.  This behavior can be changed with the {{{-F}}} option on the command line.
 # use the colon ({{{:}}}) as a field separator
{{{
 awk -F: '{print $1 " " $3}'
}}}
----
!HANDY ONE-LINERS FOR AWK                                  22 July 2003
//compiled by Eric Pement <pemente@northpark.edu>           version 0.22//
//Latest version of this file is usually at:   [[http://www.student.northpark.edu/pemente/awk/awk1line.txt]]//
!USAGE:
!! Unix
{{{
awk '/pattern/ {print "$1"}'  # standard Unix shells
}}}
!! DOS/Win 
{{{
awk '/pattern/ {print "$1"}'    # okay for DJGPP compiled
awk "/pattern/ {print \"$1\"}"  # required for Mingw32
}}}
Most of my experience comes from version of GNU awk (gawk) compiled for Win32. Note in particular that DJGPP compilations permit the awk script to follow Unix quoting syntax {{{'/like/ {"this"}'}}}. However, the user must know that single quotes under DOS/Windows do not protect the redirection arrows ({{{<, >}}}) nor do they protect pipes ({{{|}}}). Both are special symbols for the DOS/CMD command shell and their special meaning is ignored only if they are placed within {{{"double quotes."}}} Likewise, DOS/Win users must remember that the percent sign ({{{%}}}) is used to mark DOS/Win environment variables, so it must be doubled ({{{%%}}}) to yield a single percent sign visible to awk.

If I am sure that a script will NOT need to be quoted in Unix, DOS, or CMD, then I normally omit the quote marks. If an example is peculiar to GNU awk, the command 'gawk' will be used. Please notify me if you find errors or new commands to add to this list (total length under 65 characters). I usually try to put the shortest script first.

!FILE SPACING:
!! double space a file
{{{
 awk '1;{print ""}'
 awk 'BEGIN{ORS="\n\n"};1'
}}}
 # double space a file which already has blank lines in it. Output file
 # should contain no more than one blank line between lines of text.
 # NOTE: On Unix systems, DOS lines which have only CRLF (\r\n) are
 # often treated as non-blank, and thus 'NF' alone will return TRUE.
{{{
 awk 'NF{print $0 "\n"}'
}}}
!! triple space a file
{{{
 awk '1;{print "\n"}'
}}}

!NUMBERING AND CALCULATIONS:
 # precede each line by its line number FOR THAT FILE (left alignment).
 # Using a tab (\t) instead of space will preserve margins.
{{{
 awk '{print FNR "\t" $0}' files*
}}}
 # precede each line by its line number FOR ALL FILES TOGETHER, with tab.
{{{
 awk '{print NR "\t" $0}' files*
}}}
 # number each line of a file (number on left, right-aligned)
 # Double the percent signs if typing from the DOS command prompt.
{{{
 awk '{printf("%5d : %s\n", NR,$0)}'
}}}
 # number each line of file, but only print numbers if line is not blank
 # Remember caveats about Unix treatment of \r (mentioned above)
{{{
 awk 'NF{$0=++a " :" $0};{print}'
 awk '{print (NF? ++a " :" :"") $0}'
}}}
 # count lines (emulates "wc -l")
{{{
 awk 'END{print NR}'
}}}
 # print the sums of the fields of every line
{{{
 awk '{s=0; for (i=1; i<=NF; i++) s=s+$i; print s}'
}}}
 # add all fields in all lines and print the sum
{{{
 awk '{for (i=1; i<=NF; i++) s=s+$i}; END{print s}'
}}}
 # print every line after replacing each field with its absolute value
{{{
 awk '{for (i=1; i<=NF; i++) if ($i < 0) $i = -$i; print }'
 awk '{for (i=1; i<=NF; i++) $i = ($i < 0) ? -$i : $i; print }'
}}}
 # print the total number of fields ("words") in all lines
{{{
 awk '{ total = total + NF }; END {print total}' file
}}}
 # print the total number of lines that contain "Beth"
{{{
 awk '/Beth/{n++}; END {print n+0}' file
}}}
 # print the largest first field and the line that contains it
 # Intended for finding the longest string in field #1
{{{
 awk '$1 > max {max=$1; maxline=$0}; END{ print max, maxline}'
}}}
 # print the number of fields in each line, followed by the line
{{{
 awk '{ print NF ":" $0 } '
}}}
 # print the last field of each line
{{{
 awk '{ print $NF }'
}}}
 # print the last field of the last line
{{{
 awk '{ field = $NF }; END{ print field }'
}}}
 # print every line with more than 4 fields
{{{
 awk 'NF > 4'
}}}
 # print every line where the value of the last field is > 4
{{{
 awk '$NF > 4'
}}}
!TEXT CONVERSION AND SUBSTITUTION:
 # IN UNIX ENVIRONMENT: convert DOS newlines (CR/LF) to Unix format
{{{
 awk '{sub(/\r$/,"");print}'   # assumes EACH line ends with Ctrl-M
}}}
 # IN UNIX ENVIRONMENT: convert Unix newlines (LF) to DOS format
{{{
 awk '{sub(/$/,"\r");print}
}}}
 # IN DOS ENVIRONMENT: convert Unix newlines (LF) to DOS format
{{{
 awk 1
}}}
 # IN DOS ENVIRONMENT: convert DOS newlines (CR/LF) to Unix format
 # Cannot be done with DOS versions of awk, other than gawk:
{{{
 gawk -v BINMODE="w" '1' infile >outfile
}}}
 # Use "tr" instead.
{{{
 tr -d \r <infile >outfile            # GNU tr version 1.22 or higher
}}}
 # delete leading whitespace (spaces, tabs) from front of each line
 # aligns all text flush left
{{{
 awk '{sub(/^[ \t]+/, ""); print}'
}}}
 # delete trailing whitespace (spaces, tabs) from end of each line
{{{
 awk '{sub(/[ \t]+$/, "");print}'
}}}
 # delete BOTH leading and trailing whitespace from each line
{{{
 awk '{gsub(/^[ \t]+|[ \t]+$/,"");print}'
 awk '{$1=$1;print}'           # also removes extra space between fields
}}}
 # insert 5 blank spaces at beginning of each line (make page offset)
{{{
 awk '{sub(/^/, "     ");print}'
}}}
 # align all text flush right on a 79-column width
{{{
 awk '{printf "%79s\n", $0}' file*
}}}
 # center all text on a 79-character width
{{{
 awk '{l=length();s=int((79-l)/2); printf "%"(s+l)"s\n",$0}' file*
}}}
 # substitute (find and replace) "foo" with "bar" on each line
{{{
 awk '{sub(/foo/,"bar");print}'           # replaces only 1st instance
 gawk '{$0=gensub(/foo/,"bar",4);print}'  # replaces only 4th instance
 awk '{gsub(/foo/,"bar");print}'          # replaces ALL instances in a line
}}}
 # substitute "foo" with "bar" ONLY for lines which contain "baz"
{{{
 awk '/baz/{gsub(/foo/, "bar")};{print}'
}}}
 # substitute "foo" with "bar" EXCEPT for lines which contain "baz"
{{{
 awk '!/baz/{gsub(/foo/, "bar")};{print}'
}}}
 # change "scarlet" or "ruby" or "puce" to "red"
{{{
 awk '{gsub(/scarlet|ruby|puce/, "red"); print}'
}}}
 # reverse order of lines (emulates "tac")
{{{
 awk '{a[i++]=$0} END {for (j=i-1; j>=0;) print a[j--] }' file*
}}}
 # if a line ends with a backslash, append the next line to it
 # (fails if there are multiple lines ending with backslash...)
{{{
 awk '/\\$/ {sub(/\\$/,""); getline t; print $0 t; next}; 1' file*
}}}
 # print and sort the login names of all users
{{{
 awk -F ":" '{ print $1 | "sort" }' /etc/passwd
}}}
 # print the first 2 fields, in opposite order, of every line
{{{
 awk '{print $2, $1}' file
}}}
 # switch the first 2 fields of every line
{{{
 awk '{temp = $1; $1 = $2; $2 = temp}' file
}}}
 # print every line, deleting the second field of that line
{{{
 awk '{ $2 = ""; print }'
}}}
 # print in reverse order the fields of every line
{{{
 awk '{for (i=NF; i>0; i--) printf("%s ",i);printf ("\n")}' file
}}}
 # remove duplicate, consecutive lines (emulates "uniq")
{{{
 awk 'a !~ $0; {a=$0}'
}}}
 # remove duplicate, nonconsecutive lines
{{{
 awk '! a[$0]++'                     # most concise script
 awk '!($0 in a) {a[$0];print}'      # most efficient script
}}}
 # concatenate every 5 lines of input, using a comma separator
 # between fields
{{{
 awk 'ORS=%NR%5?",":"\n"' file
}}}
!SELECTIVE PRINTING OF CERTAIN LINES:
 # print first 10 lines of file (emulates behavior of "head")
{{{
 awk 'NR < 11'
}}}
 # print first line of file (emulates "head -1")
{{{
 awk 'NR>1{exit};1'
}}}
  # print the last 2 lines of a file (emulates "tail -2")
{{{
 awk '{y=x "\n" $0; x=$0};END{print y}'
}}}
 # print the last line of a file (emulates "tail -1")
{{{
 awk 'END{print}'
}}}
 # print only lines which match regular expression (emulates "grep")
{{{
 awk '/regex/'
}}}
 # print only lines which do NOT match regex (emulates "grep -v")
{{{
 awk '!/regex/'
}}}
 # print the line immediately before a regex, but not the line
 # containing the regex
{{{
 awk '/regex/{print x};{x=$0}'
 awk '/regex/{print (x=="" ? "match on line 1" : x)};{x=$0}'
}}}
 # print the line immediately after a regex, but not the line
 # containing the regex
{{{
 awk '/regex/{getline;print}'
}}}
 # grep for AAA and BBB and CCC (in any order)
{{{
 awk '/AAA/; /BBB/; /CCC/'
}}}
 # grep for AAA and BBB and CCC (in that order)
{{{
 awk '/AAA.*BBB.*CCC/'
}}}
 # print only lines of 65 characters or longer
{{{
 awk 'length > 64'
}}}
 # print only lines of less than 65 characters
{{{
 awk 'length < 64'
}}}
 # print section of file from regular expression to end of file
{{{
 awk '/regex/,0'
 awk '/regex/,EOF'
}}}
 # print section of file based on line numbers (lines 8-12, inclusive)
{{{
 awk 'NR==8,NR==12'
}}}
 # print line number 52
{{{
 awk 'NR==52'
 awk 'NR==52 {print;exit}'          # more efficient on large files
}}}
 # print section of file between two regular expressions (inclusive)
{{{
 awk '/Iowa/,/Montana/'             # case sensitive
}}}
!SELECTIVE DELETION OF CERTAIN LINES:
 # delete ALL blank lines from a file (same as "grep '.' ")
{{{
 awk NF
 awk '/./'
}}}
!CREDITS AND THANKS:
Special thanks to Peter S. Tillier for helping me with the first release of this FAQ file.

For additional syntax instructions, including the way to apply editing commands from a disk file instead of the command line, consult:
{{{
"sed & awk, 2nd Edition," by Dale Dougherty and Arnold Robbins
  O'Reilly, 1997
"UNIX Text Processing," by Dale Dougherty and Tim O'Reilly
  Hayden Books, 1987
"Effective awk Programming, 3rd Edition." by Arnold Robbins
  O'Reilly, 2001
}}}
To fully exploit the power of awk, one must understand "regular expressions." For detailed discussion of regular expressions, see
{{{
"Mastering Regular Expressions, 2d edition" by Jeffrey Friedl
   (O'Reilly, 2002).
}}}
The manual ("{{{man}}}") pages on Unix systems may be helpful (try "{{{man awk}}}", "{{{man nawk}}}", "{{{man regexp}}}", or the section on regular expressions in "{{{man ed}}}"), but man pages are notoriously difficult. They are not written to teach awk use or regexps to first-time users, but as a reference text for those already acquainted with these tools.
!USE OF '\t' IN awk SCRIPTS: 
For clarity in documentation, we have used the expression '{{{\t}}}' to indicate a tab character (0x09) in the scripts. All versions of awk, even the UNIX System 7 version should recognize the '{{{\t}}}' abbreviation.
!Install .NET Compact Framework without ActiveSync

The basis for this post was found [[here|http://james.manners.net.au/2006/11/28/install-net-compact-framwork-without-activesync/]]. I've added some specifics for installation on the Alltel [[UTStarcom PPC6700|http://www.utstar.com/PCD/view_phone_details.aspx?mcode=PPC6700&bID=30&sAct=0]]. I actually have ~ActiveSync running on my desktop, but for some reason the .NET 2.0 Compact Framework failed to install from there claiming there was a newer version of .NET runtime already installed. This was not true of the phone, but probably true in regard to the version installed on the PC.
!!How to install .Net Compact Framework on a ~PocketPC without using ~ActiveSync.
# Download .Net Compact Framework from [[Microsoft|http://www.microsoft.com/downloads/details.aspx?FamilyID=9655156b-356b-4a2c-857c-e62f50ae9a55&DisplayLang=en]]
# Using a Windows PC, extract all the files from the installer package by running the following command "msiexec /a ~PackageName.msi" from either the command line or the run dialog box.
** The /a parameter specifies to run it as an administrative install that will extract the files to a specified location rather than install them as usual.
** Replace ~PackageName.msi with the name of the installer you downloaded in step 1.
# The installer program for .Net Compact Framework will now open. Follow the steps for the installer, you will be prompted for a location to extract the files.
# You will need to identify the correct CAB file from this list in the files extracted in step 3.
** In the case of the [[UTStarcom PPC6700|http://www.utstar.com/PCD/view_phone_details.aspx?mcode=PPC6700&bID=30&sAct=0]], the file chosen was //''~NETCFv2.wm.armv4i.cab''//
# Once you have located the correct file, transfer it to your ~PocketPC using, for example, a Memory Card, ~InfraRed, Bluetooth, Email, etc...
# Using File Explorer, open the CAB file on your device. This will install .Net Compact Framework and you will be able to use any program that requires it.
!Getting in
start a new screen session: {{{screen}}}
attach to a running session: {{{screen -r}}}
the “ultimate attach”: ''{{{screen -dRR}}}''
<<<
Attaches to a screen session. If the session is attached elsewhere, detaches that other display. If no session exists, creates one. If multiple sessions exist, uses the first one.
<<<
!Escape key
All screen commnds are prefixed by an escape key, by default {{{C-a}}} 
<<<
that’s Control-a, sometimes written {{{^A}}}). To send a literal C-a to the programs in screen, use {{{C-a a}}}.
<<<
!Getting out
detach: {{{C-a d}}}
exit screen: //exit all of the programs in screen.//
force-exit screen: {{{C-a C-\}}} //(not recommended)//
!Help
See help: {{{C-a ?}}} (lists keybindings)
!Window Management
''create new window'': {{{C-a c}}}
change to last active window: {{{C-a C-a}}}
change to window by number: {{{C-a <number>}}} //(only for windows 0 to 9)//
change to window by number or name: {{{C-a ' <number or title>}}}
change to next window in list: {{{C-a n}}} or {{{C-a <space>}}}
change to previous window in list: {{{C-a p}}}
see window list: {{{C-a “}}}
close current window: //Close all applications in the current window (including shell)//
kill current window: {{{C-a K}}} //(not recommended)//
!Split screen
split display: {{{C-a S}}}
jump to next display region: {{{C-a tab}}}
remove current region: {{{C-a X}}}
remove all regions but the current one: {{{C-a Q}}}
!Misc
redraw window: {{{C-a C-l}}}
enter copy mode: {{{C-a [}}} //(also used for viewing scrollback buffer)//
paste: {{{C-a ]}}}
monitor window for activity: {{{C-a M}}}
monitor window for silence: {{{C-a _}}}
enter digraph: {{{C-a C-v}}}
lock (password protect) display: {{{C-a x}}}
enter screen command: {{{C-a :}}}

''Source'' //[[http://aperiodic.net/screen/quick_reference]]//
----
!Screen Key Bindings - "^A ?"
{{{
                                                 Screen key bindings, page 1 of 1.

                                                 Command key:  ^A   Literal ^A:  a

break      ^B b       flow       ^F f       lockscreen ^X x       other      ^A         reset      Z          vbell      ^G        
clear      C          focus      ^I         log        H          pow_break  B          screen     ^C c       version    v         
colon      :          help       ?          login      L          pow_detach D          select     '          width      W         
copy       ^[ [       history    { }        meta       a          prev       ^P p ^?    silence    _          windows    ^W w      
detach     ^D d       info       i          monitor    M          readbuf    <          split      S          wrap       ^R r      
digraph    ^V         kill       K          next       ^@ ^N sp n redisplay  ^L l       suspend    ^Z z       writebuf   >         
displays   *          lastmsg    ^M m       number     N          remove     X          time       ^T t       xoff       ^S s      
fit        F          license    ,          only       Q          removebuf  =          title      A          xon        ^Q q      

^]  paste [.]
"   windowlist -b
-   select -
0   select 0
1   select 1
2   select 2
3   select 3
4   select 4
5   select 5
6   select 6
7   select 7
8   select 8
9   select 9
I   login on
O   login off
]   paste .
}}}