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

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

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

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

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

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

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

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

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
.sparktick {background:[[ColorPalette::PrimaryDark]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity:60)';}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}

body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0em 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0em 1em 1em; left:0px; top:0px;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0em 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 .3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

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

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

.tiddlerPopupButton {padding:0.2em 0.2em 0.2em 0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em 1em 1em 1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0em;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0em 0em 0.5em;}
.tab {margin:0em 0em 0em 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0em 14em;}

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

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

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0em 0.25em; padding:0em 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0em; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}

.fieldsetFix {border:0; padding:0; margin:1px 0px 1px 0px;}

.sparkline {line-height:1em;}
.sparktick {outline:0;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em 0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em 0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0em; right:0em;}
#backstageButton a {padding:0.1em 0.4em 0.1em 0.4em; margin:0.1em 0.1em 0.1em 0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; margin:0em 3em 0em 3em; padding:1em 1em 1em 1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em 0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none ! important;}
#displayArea {margin: 1em 1em 0em 1em;}
/* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
noscript {display:none;}
}
/*}}}*/
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar closeTiddler closeOthers +editTiddler > fields syncing permalink references jump'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler deleteTiddler'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div>
<!--}}}-->
To get started with this blank TiddlyWiki, you'll need to modify the following tiddlers:
* SiteTitle & SiteSubtitle: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* MainMenu: The menu (usually on the left)
* DefaultTiddlers: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
These InterfaceOptions for customising TiddlyWiki are saved in your browser

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

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

----
Also see AdvancedOptions
<<importTiddlers>>
/***
|''Name:''|CryptoFunctionsPlugin|
|''Description:''|Support for cryptographic functions|
***/
//{{{
if(!version.extensions.CryptoFunctionsPlugin) {
version.extensions.CryptoFunctionsPlugin = {installed:true};

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

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

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

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

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

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

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

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

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

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

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

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

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


}
//}}}
[[PhotoStrip]]
[[Me]]
[[Research]]
[[OngoingWork]]
[[Teaching 2009-10]]
[[MyPublications]]
[[Professional]]
/***
|''Name:''|DeprecatedFunctionsPlugin|
|''Description:''|Support for deprecated functions removed from core|
***/
//{{{
if(!version.extensions.DeprecatedFunctionsPlugin) {
version.extensions.DeprecatedFunctionsPlugin = {installed:true};

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

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

// @Deprecated: Use enclosedTextHelper and this.lookaheadRegExp instead
config.formatterHelpers.monospacedByLineHelper = function(w)
{
	var lookaheadRegExp = new RegExp(this.lookahead,"mg");
	lookaheadRegExp.lastIndex = w.matchStart;
	var lookaheadMatch = lookaheadRegExp.exec(w.source);
	if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
		var text = lookaheadMatch[1];
		if(config.browser.isIE)
			text = text.replace(/\n/g,"\r");
		createTiddlyElement(w.output,"pre",null,null,text);
		w.nextMatch = lookaheadRegExp.lastIndex;
	}
};

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

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

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

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

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

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

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

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

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

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

}
//}}}
/***
|''Name:''|LegacyStrikeThroughPlugin|
|''Description:''|Support for legacy (pre 2.1) strike through formatting|
|''Version:''|1.0.2|
|''Date:''|Jul 21, 2006|
|''Source:''|http://www.tiddlywiki.com/#LegacyStrikeThroughPlugin|
|''Author:''|MartinBudden (mjbudden (at) gmail (dot) com)|
|''License:''|[[BSD open source license]]|
|''CoreVersion:''|2.1.0|
***/

//{{{
// Ensure that the LegacyStrikeThrough Plugin is only installed once.
if(!version.extensions.LegacyStrikeThroughPlugin) {
version.extensions.LegacyStrikeThroughPlugin = {installed:true};

config.formatters.push(
{
	name: "legacyStrikeByChar",
	match: "==",
	termRegExp: /(==)/mg,
	element: "strike",
	handler: config.formatterHelpers.createElementAndWikify
});

} //# end of "install only once"
//}}}
[[Me]]
[[Research]]
[[Teaching 2010-11]]
MyPublications
[[Professional]]
<html>
<div style="float:left">
<div>
<img src="http://www.comp.lancs.ac.uk/~adrian/Ade.jpg" alt="Adrian Friday">
</div>
<div>
<a href="mailto:adrian at comp.lancs.ac.uk"><img src="http://www.comp.lancs.ac.uk/~adrian/Media/email.gif" alt="E-mail: adrian at comp.lancs.ac.uk" border=0></a><br />
<a href="http://www.linkedin.com/in/adrianfriday"><img src="icons/btn_liprofile_blue_80x15.gif" alt="Linked-in profile"></a><br />
<table style="margin-left:0;border:1px;border-style:dashed"><tr><td><img src="icons/phone.gif" alt="Phone +44 1524 510326"></td><td><span style="font-size:0.4em;text-align:middle">+44 (0)1524 510326<br />+44 (0)1524 510492 (fax)</span></td></tr></table>
</div>
</div>

<div style="float:right">
<div>
<img src="icons/contact-qrcode-ajf-4x.png" alt="QR code of contact details"><br />
</div>
<div>
Dr. Adrian Friday<br />
School of Computing and Communications<br />
InfoLab 21<br />
Lancaster University<br />
Lancaster<br />
LA1 4WA<br />
United Kingdom
</div>
</div>
</html>
Most of my publications [[are available as PDFs|http://eprints.comp.lancs.ac.uk/view/people/Friday,_Adrian.html]] or you can find (hopefully) all of [[our departmental publications online|http://www.comp.lancs.ac.uk/research/publications/]]. If you require a copy of one of my papers that isn't online yet or spot an omission, please [[contact me|Me]].
* [[e-Campus]] ([[upload content|http://e-content.lancs.ac.uk/ContentDrop/]])
* [[Simple Mobile Services]] (video prototype)
* [[MagicBroker|http://www.magic.ubc.ca/wiki/pmwiki.php/Projects/MAGICBroker]] - a web/[[REST|http://en.wikipedia.org/wiki/Representational_State_Transfer]] based middleware for mobile to public display interaction ([[tech report|http://www.cs.ubc.ca/cgi-bin/tr/2007/TR-2007-22.pdf]] and [[concept videos and demos|http://www.magic.ubc.ca/wiki/pmwiki.php/Projects/MAGICBroker]])
* [[Privacy in Ubicomp reading list|http://www.comp.lancs.ac.uk/~maomao/privacy/]]
<html>
<!-- from: http://flickrbadge.theducky.com/generate.php -->
<a href="http://flickrbadge.theducky.com/link/66258072@N00/0_10"><img src="http://flickrbadge.theducky.com/photo/66258072@N00/0_10_s.jpg" alt="Scriptless Flickr Badge" /></a>
<a href="http://flickrbadge.theducky.com/link/66258072@N00/0_20"><img src="http://flickrbadge.theducky.com/photo/66258072@N00/0_20_s.jpg" alt="Scriptless Flickr Badge" /></a>
<a href="http://flickrbadge.theducky.com/link/66258072@N00/0_30"><img src="http://flickrbadge.theducky.com/photo/66258072@N00/0_30_s.jpg" alt="Scriptless Flickr Badge" /></a>
<a href="http://flickrbadge.theducky.com/link/66258072@N00/0_40"><img src="http://flickrbadge.theducky.com/photo/66258072@N00/0_40_s.jpg" alt="Scriptless Flickr Badge" /></a>
<a href="http://flickrbadge.theducky.com/link/66258072@N00/0_60"><img src="http://flickrbadge.theducky.com/photo/66258072@N00/0_60_s.jpg" alt="Scriptless Flickr Badge" /></a>
<a href="http://flickrbadge.theducky.com/link/66258072@N00/0_70"><img src="http://flickrbadge.theducky.com/photo/66258072@N00/0_70_s.jpg" alt="Scriptless Flickr Badge" /></a>
<a href="http://flickrbadge.theducky.com/link/66258072@N00/0_80"><img src="http://flickrbadge.theducky.com/photo/66258072@N00/0_80_s.jpg" alt="Scriptless Flickr Badge" /></a>
<a href="http://flickrbadge.theducky.com/link/66258072@N00/0_90"><img src="http://flickrbadge.theducky.com/photo/66258072@N00/0_90_s.jpg" alt="Scriptless Flickr Badge" /></a>
</html>
* Jury member [[Ubiquitous Oulu UBI-Challenge Dec 2010|http://www.ubioulu.fi/en/UBI-challenge]] - admire the approach these guys are taking to inviting research on their testbed.  Great stuff.
* TPC [[Ubicomp 2011|http://www.ubicomp.org/ubicomp2011/]] and [[PerCom 2011|http://www.percom.org/i]]
* Presenting a tutorial based on Jakob and my book chapter at [[Pervasive 2010 this year|http://www.pervasive2010.org/tutorials.html]]
* Invited short talk and panelist at 3rd Asia-Europe Workshop on Ubiquitous Computing 2010 (AEWUC'10)
* TPC [[Ubicomp 2010|http://www.ubicomp2010.org/]]
* PC co-chair <html><img src="http://www.pervasive2009.org/img/logo.gif" width=100px alt="Pervasive 2009"></html> with [[AJ Brush|http://research.microsoft.com/~ajbrush/]] and [[Yoshito Tobe|http://www.osoite.jp/tobe/]]
* PC co-chair [[Ubicomp 2006|http://www.ubicomp.org/ubicomp2006/]] with [[Paul Dourish|http://www.ics.uci.edu/~jpd/]].
* General chair of [[WMCSA 2004|http://wmcsa2004.lancs.ac.uk/]], TPC 2002, 2003, [[2006|http://research.ihost.com/wmcsa2006/]] and [[2008|http://prisms.cs.umass.edu/hotmobile2008/]].  WMCSA is now called ~HotMobile (see [[this year's workshop|http://prisms.cs.umass.edu/hotmobile2008/]]).
* TPC [[MobiHoc 2005|http://www.sigmobile.org/mobihoc/2005/]], [[MobiSys 2006|http://www.sigmobile.org/mobisys/2006/]], [[Mobiquitous 2007|http://www.mobiquitous.org/2007/]], [[Pervasive 2007|http://www.dgp.toronto.edu/conferences/pervasive2007/]] and [[Ubicomp 2007|http://www.ubicomp2007.org/]].
* Co-organiser for numerous workshops exploring systems support for Ubicomp including [[UbiSys 2003|http://ubisys.cs.uiuc.edu/2003/]], [[2004|http://ubisys.cs.uiuc.edu/2004/]] and [[2006|http://www.magic.ubc.ca/ubisys/]], [[PerWare 2006|http://perware.cs.uiuc.edu/2006/]] and [[MobiEval 2007|http://http://mesl.ucsd.edu/MobiEval/]].  If you work in this area I'd encourage you to participate with building our community resource wiki, http://ubisys.org/

!News
* [[We have a vacancy for a junior RA|http://hr-jobs.lancs.ac.uk/Vacancy.aspx?ref=A847]] - post A847, applications due ''10th January''.
* [[Socio-Digital Sustainability (SDS) research team website|http://wp.lancs.ac.uk/sds]] - find out more about our research group and ongoing projects.
* [[Informing Energy Choices website|http://wp.lancs.ac.uk/energychoices]] - find out more about our recent Pervasive 2012 and CHI 2013 papers.

!Recent Talks
<html>

<iframe src="http://www.slideshare.net/slideshow/embed_code/40972429" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/adrianfriday/understanding-sustainable-food-shopping-adrian-friday-sirach-22-oct-2014" title="Understanding Sustainable Food Shopping: Sustainably Minded Shoppers and the Supermarket, talk at SIRACH Network Innovation in Heating and Cooling Seminar, Wed 22nd Oct 2014" target="_blank">Understanding Sustainable Food Shopping: Sustainably Minded Shoppers and the Supermarket, </a> </strong> talk at SIRACH Network Innovation in Heating and Cooling Seminar, Wed 22nd Oct 2014</div>

<iframe src="http://www.slideshare.net/slideshow/embed_code/29123277" width="427" height="356" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="https://www.slideshare.net/adrianfriday/reducing-the-impact-of-it-in-the-home-royal-soc-2013" title="1000% The highs and lows of Entertainment and IT in the home" target="_blank">1000% The highs and lows of Entertainment and IT in the home</a> </strong> from <a href="http://royalsociety.org/events/2013/sustainable-computing/">Computing for a sustainable future, Royal Society Workshop</a>, 1:30 pm on Monday 30 September 2013</strong> </div>
<iframe src="http://www.slideshare.net/slideshow/embed_code/22179471" width="427" height="356" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen webkitallowfullscreen mozallowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="http://www.slideshare.net/adrianfriday/quantifying-our-understanding-of-energy-use-itu-may-2013" title="Quantifying our understanding of energy use itu may 2013" target="_blank">Quantifying our understanding of energy use, ITU Copenhagen, 29 May 2013</a> </strong> </div>
<iframe src="http://www.slideshare.net/slideshow/embed_code/20735185" width="427" height="356" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen webkitallowfullscreen mozallowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="http://www.slideshare.net/AdrianClear/hobcam-chi2013-presentationpublic" title="Domestic Food and Sustainable Design, CHI 2013, Paris" target="_blank">Domestic Food and Sustainable Design, CHI 2013, Paris</a> </strong></div>

<iframe src="http://www.slideshare.net/slideshow/embed_code/20791629" width="427" height="356" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen webkitallowfullscreen mozallowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="http://www.slideshare.net/AdrianClear/accounting-pervasive2012-withvignettes" title="Accounting for Energy-reliant Services within Everyday Life at Home, Pervasive 2012, Newcastle" target="_blank">Accounting for Energy-reliant Services within Everyday Life at Home, Pervasive 2012, Newcastle</a> </strong> </div>
</html>

* Ubicomp as a Lens on Energy Related Services, Birmingham (HCI group), UK, 13th March 2012.  (''slides to follow'')
* Ubicomp as a Lens on Energy Related Practice, St. Andrews, UK, 9th January 2012.  (''slides to follow'')
<html>
<iframe src="http://www.slideshare.net/slideshow/embed_code/9354857" width="427" height="356" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen webkitallowfullscreen mozallowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="http://www.slideshare.net/adrianfriday/reflections-on-the-longterm-use-of-an-experimental-digital-signage-system-9354857" title="Reflections on the Long-term Use of an Experimental Digital Signage System" target="_blank">Reflections on the Long-term Use of an Experimental Digital Signage System</a> </strong>, Ubicomp 2011, Beijing, China, 20th September 2011</div>
</html>
<html><iframe src="http://www.slideshare.net/slideshow/embed_code/8347769" width="427" height="356" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen webkitallowfullscreen mozallowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="http://www.slideshare.net/adrianfriday/towards-open-pervasive-displays-keynote-at-ubisummit-helsinki-may-2011" title="Towards Open Pervasive Displays (Keynote at UbiSummit, Helsinki, May 2011)" target="_blank">Towards Open Pervasive Displays (Keynote at UbiSummit, Helsinki, May 2011)</a> </strong>, Helsinki, Finland, 25 May 2011  </div></html>
<html><iframe src="http://www.slideshare.net/slideshow/embed_code/6006951" width="427" height="356" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen webkitallowfullscreen mozallowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="http://www.slideshare.net/adrianfriday/tokyo-denki-invited-keynote-dec-2010" title="Invited keynote on Carbon, Energy and the role of Ubicomp Tokyo-Denki Dec 2010" target="_blank">Invited keynote on Carbon, Energy and the role of Ubicomp Tokyo-Denki Dec 2010</a> </strong>, Tokyo-Denki, 2 Dec 2010</div></html>
<html><iframe src="http://www.slideshare.net/slideshow/embed_code/5988489" width="427" height="356" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen webkitallowfullscreen mozallowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="http://www.slideshare.net/adrianfriday/magic-broker-2-iot2010-presentation" title="Magic broker 2 #iot2010 presentation" target="_blank">Magic broker 2 #iot2010 presentation</a> </strong>, IoT 2010, Tokyo, 1 Dec 2010 </div></html>
<html><iframe src="http://www.slideshare.net/slideshow/embed_code/5993454" width="427" height="356" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;border-width:1px 1px 0;margin-bottom:5px" allowfullscreen webkitallowfullscreen mozallowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="http://www.slideshare.net/adrianfriday/learning-from-ubicomp-deployments-keio-2010" title="Learning from ubicomp deployments keio 2010" target="_blank">Learning from ubicomp deployments keio 2010</a> </strong>, Takuda-lab, Keio, Tokyo, 29 Nov 2010</div></html>
!Book Chapter
''Check out the new [['Ubicomp Fundamentals' book|http://www.amazon.com/Ubiquitous-Computing-Fundamentals-John-Krumm/dp/product-description/1420093606]]'' (there are great chapters in here, and mine of course :-)):

!!Review
'''…a must-read text that provides a historical lens to see how ubicomp has matured into a multidisciplinary endeavor. It will be an essential reference to researchers and those who want to learn more about this evolving field.'''
—Professor Gregory D. Abowd, Georgia Institute of Technology

* [[Talk slides on Ubicomp Systems Deployments|web-share/Ubicomp%20Systems%20Pervasive%202010.pdf]] (Pervasive 2010 Tutorial, 20th May 2010)
* [[Slide and video materials that accompany the book chapters|http://research.microsoft.com/en-us/um/people/jckrumm/UbiquitousComputingFundamentals/]]

!Area
My research focuses on system support for mobile and ubiquitous computing. In the past I have worked on open distributed systems support for collaborative mobile applications ([[PhD thesis|http://www.comp.lancs.ac.uk/~adrian/FridayPhDThesis1996.pdf]]), [[service discovery (SSDI)|http://www.comp.lancs.ac.uk/~adrian/Projects/SSDI/ssdi.html]], [[context-aware mobile guides (Guide)|http://www.guide.lancs.ac.uk]] ([[invited talk slides| http://www.comp.lancs.ac.uk/~adrian/Talks/Nexus 2003-11-14.pdf]]), and [[smart environments and situated displays (Equator)|http://www.equator.ac.uk]].  Most recently I'm working on developing a systems platform to support the deployment of a [[situated public display network on campus (e-Campus)|http://ecampus.lancs.ac.uk/]] and [[in our building|http://www.caside.lancs.ac.uk/]].  I'm getting increasingly interested in Ubicomp technologies to reduce carbon footprint and have a number of nascent activities in this space - please get in touch if you're working in this area.

I was a visiting professor at UBC ~January-March 2007 working with [[the MAGIC research group|http://www.magic.ubc.ca/pmwiki.php]] on interaction with situated public displays.  This led to the [[MagicBroker middleware|OngoingWork]].

* 29.3.2007 @ UBC [['getting in touch with large displays' short talk slides | http://www.comp.lancs.ac.uk/~adrian/web-share/getting-in-touch-with-large-displays-29.3.2007.pdf]], or;
* 26.2.2007 @ UBC [[longer seminar version highlighting lessons learnt | http://www.comp.lancs.ac.uk/~adrian/web-share/lessons-from-e-campus-26.2.2007.pdf]]

I was recently on sabbatical', visiting [[The Computer Laboratory|http://www.cl.cam.ac.uk/]], Cambridge, UK part-time from April until September 2008.

* 29.4.2008 @ Cambridge [[deployment and middleware retrospective talk| http://talks.cam.ac.uk/talk/index/11731]]
* 25.6.2008 @ Cambridge [['learning from e-Campus' talk slides | http://www.comp.lancs.ac.uk/~adrian/web-share/learning-from-e-Campus-25-06-2008.pdf]]

* [[15 minute talk from AEWUC 2010|web-share/Deployed%20Ubicomp%20AEWUC%202010.pdf]] describing some of our ubicomp deployment projects (past) and new initiatives (PD-NET) and [[under the EPSRC transforming energy demand call|http://gow.epsrc.ac.uk/ViewGrant.aspx?GrantRef=EP/I00033X/1]]

See [[our publications|MyPublications]] for more detail on activities past.
<html>
<!--[img[SMS client UI early designs|icons/sms-screenshot0002-small.jpg][http://www.ist-sms.org/]]-->

<object width="360" height="288">
  <param name="movie" value="http://www.youtube.com/v/HvHOCqbA6rE">
  </param>
  <param name="wmode" value="transparent">
  </param>
  <embed src="http://www.youtube.com/v/GEMf9gDoBOA" 
  type="application/x-shockwave-flash" wmode="transparent" 
  width="425" height="350">
  </embed>
</object>
</html>
* Early video prototype of the context clipboard concept
* [[Demo at Mobisys 2007|http://www.sigmobile.org/mobisys/2007/poster.html]]
* [[More about SMS|http://www.ist-sms.org/]]

Home
Adrian Friday
/***
|''Name:''|SparklinePlugin|
|''Description:''|Sparklines macro|
***/
//{{{
if(!version.extensions.SparklinePlugin) {
version.extensions.SparklinePlugin = {installed:true};

//--
//-- Sparklines
//--

config.macros.sparkline = {};
config.macros.sparkline.handler = function(place,macroName,params)
{
	var data = [];
	var min = 0;
	var max = 0;
	var v;
	for(var t=0; t<params.length; t++) {
		v = parseInt(params[t]);
		if(v < min)
			min = v;
		if(v > max)
			max = v;
		data.push(v);
	}
	if(data.length < 1)
		return;
	var box = createTiddlyElement(place,"span",null,"sparkline",String.fromCharCode(160));
	box.title = data.join(",");
	var w = box.offsetWidth;
	var h = box.offsetHeight;
	box.style.paddingRight = (data.length * 2 - w) + "px";
	box.style.position = "relative";
	for(var d=0; d<data.length; d++) {
		var tick = document.createElement("img");
		tick.border = 0;
		tick.className = "sparktick";
		tick.style.position = "absolute";
		tick.src = "data:image/gif,GIF89a%01%00%01%00%91%FF%00%FF%FF%FF%00%00%00%C0%C0%C0%00%00%00!%F9%04%01%00%00%02%00%2C%00%00%00%00%01%00%01%00%40%02%02T%01%00%3B";
		tick.style.left = d*2 + "px";
		tick.style.width = "2px";
		v = Math.floor(((data[d] - min)/(max-min)) * h);
		tick.style.top = (h-v) + "px";
		tick.style.height = v + "px";
		box.appendChild(tick);
	}
};


}
//}}}
div.tiddler div.tagged { background-color:[[ColorPalette::Background]]; border-width:0; margin:0 0 2em 0;}
div.tiddler div.tagged ul li.listTitle { display:none; }
div.tiddler div.tagged ul li a { font-size:1em; display:block; border-style:none; margin-bottom:0; padding:0 0 0 16px; text-decoration:none; background:transparent url(icons/tag_blue_10px.png) no-repeat 0 0.2em; color:#333; }
div.tiddler div.tagged ul li a:hover { color:#ccc; background:transparent url(icons/tag_blue_10px.png) no-repeat 0 0.2em;}
* [[CSc251 Computer Networking|http://info.comp.lancs.ac.uk/part2/csc251.html]] ([[calendar|http://www.google.com/calendar/embed?src=9p2at7lbd6om3ffddf320hkajs%40group.calendar.google.com&ctz=Europe/London]] [img[251 Calendar|http://www.comp.lancs.ac.uk/~adrian/icons/cal.png][http://www.google.com/calendar/embed?src=9p2at7lbd6om3ffddf320hkajs%40group.calendar.google.com&ctz=Europe/London]])
* [[CSc240 Scientific Writing & Group Working Skills|http://info.comp.lancs.ac.uk/part2/csc240/Generic_Skills]] ([[calendar|http://www.google.com/calendar/embed?src=96daan46762053hnc8bim9erfo%40group.calendar.google.com&ctz=Europe/London]] [img[240 Calendar|http://www.comp.lancs.ac.uk/~adrian/icons/cal.png][http://www.google.com/calendar/embed?src=96daan46762053hnc8bim9erfo%40group.calendar.google.com&ctz=Europe/London]])
* [[CSc258: Dissemination and Exploitation of CS Innovation|http://moof.comp.lancs.ac.uk/groups/csc258/wiki/]] ([[calendar|http://www.google.com/calendar/embed?src=n64ecidflb95fst726p7j9sapk%40group.calendar.google.com&ctz=Europe/London]] [img[258 Calendar|http://www.comp.lancs.ac.uk/~adrian/icons/cal.png][http://www.google.com/calendar/embed?src=n64ecidflb95fst726p7j9sapk%40group.calendar.google.com&ctz=Europe/London]])
!!!Michaelmas
* [[CSc240 Scientific Writing & Group Working Skills|http://info.comp.lancs.ac.uk/part2/csc240/Generic_Skills]] ([[calendar|http://www.google.com/calendar/embed?src=96daan46762053hnc8bim9erfo%40group.calendar.google.com&ctz=Europe/London]] [img[240 Calendar|http://www.comp.lancs.ac.uk/~adrian/icons/cal.png][http://www.google.com/calendar/embed?src=96daan46762053hnc8bim9erfo%40group.calendar.google.com&ctz=Europe/London]])
!!!Lent
* [[CSc246 Scientific Methods in Computer Science|http://info.comp.lancs.ac.uk/part2/csc246.html]] ([[calendar|http://tinyurl.com/csc246-html]] [img[246 Calendar|http://www.comp.lancs.ac.uk/~adrian/icons/cal.png][http://tinyurl.com/csc246-html]])

!!!Michaelmas (site local links)
* [[CSc202 Professional Development|http://scc-intranet.lancs.ac.uk/CSC202]]
* [[CSc241 Concurrent Programming and Operating Systems|http://scc-intranet.lancs.ac.uk/CSC241]]
* [[CSc246 Scientific Methods|http://scc-intranet.lancs.ac.uk/CSC246]]
* [[CSM091 Software Innovation and Entrepreneurship|http://scc-intranet.lancs.ac.uk/CSM091]]
[img[Nuffield e-Campus installation|icons/nuffield-small.jpg][http://ecampus.lancs.ac.uk]]
* [[More about e-Campus|http://ecampus.lancs.ac.uk]]
* [[Upload content for approval|http://e-content.lancs.ac.uk/ContentDrop/]]