Welcome to TiddlyWiki created by Jeremy Ruston, Copyright © 2007 UnaMesa Association
As you probably don't know, I'm trying this blog thing for one year to see whether anyone gains anything decent from it, mainly me. Well I guess at least now you know why I'm writing. Anyway. So far I've not felt completely comfortable with the idea and found myself squabbling in my head over subjects to write about; 'should it be comical' I thought, 'should it be focussed on technical' was another or 'perhaps I should just give up' was in there too. After much soul searching, web-hunting and chatting I've come to a conclusion. That is, I personally, have come to a conclusion. Now I'm not going to rant about the million and one points of being a good blogger, that's what [[this|http://tinyurl.com/2ffz64]] is all about. No, instead you'll just see a few changes around here.
I am going to try and write one post a day though... and include pictures... somehow...
So, I wrote this post once on IE at work and, well, I'm never going to post from work again, else this little bit wouldn't be here. So it begins. In light of [[Jon Lister|http://www.jaybyjayfresh.com]] posting his Christmas 2008 desires over [[here|http://jaybyjayfresh.com/2008/01/08/what-i-want-for-xmas-2008/]] I thought I'd follow suit... I dunno, seemed like a good idea at the time. Here goes, oh and don't worry, Im not as complex as Jay:
*Firstly I'd like to see an on-demand television service that works. I value my time and often miss things because I refuse to have my habits dictated by a snotty BBC scheduling executive. The recent [[AppleTV|http://store.apple.com/Apple/WebObjects/ukstore/?family=AppleTV&cid=OAS-EMEA-KWG-UK_TV-UK&aosid=p202&esvt=GOUKE100819837&esvadt=999999-0-1014022-1&esvid=100619]] upgrade in the US has interested me. If only they could arrange a rental contract for the rest of the world.
* Secondly, and in full awareness that I'm following [[Jon Lister|http://www.jaybyjayfresh.com]] very closely on this, is that I'd like to see decentralised social networking come unstuck. However I think Jay missed a bit here. The way I see it, in order to have a successful, open social networking platform you need three things; an open identity management system, standardisation of the interfaces between open social platforms and (potentially) computer friendly semantics. Now I realise that, in order to keep a social network alive you need to include your users, but this is a Christmas list, and who ever got what they really wanted when they were ten? I sure as well didn't get 'Blossom' to stay at a sleep over now, did I?
* Finally, and most importantly, I'd like to see WiFi take off. I'm sick of all this Mickey Mouse WiFi hotspot madness. I think I must hop in and out of about ten networks on my way to work. I hear [[WiMax|http://www.wimaxforum.org/home/]] making big noises over in there garden but, there are a few physical barriers to be overcome, for instance concrete. I could be very boring on this subject for a very long time so I'll leave it at that. All I'll say for now is this; Analog television spectrum up for auction next month... interesting?
So that's it really, three things, can't be hard can it? It's not like I'm asking for a solution to the P=NP? problem am I?
Oh here we go then. Yes I use a Mac. Yes I love it. No I try not to blab on about it too much. In here you'll find all the things I think other people should know about Apple and the Mac. If you're not interested, or you can't see past your Windows platform, the door's over there. For the rest of you; the kettle's on, mines a coffee, no sugar or milk.
/***
| Name:|AutoCorrectPlugin|
| Created by:|SimonBaird|
| Location:|http://simonbaird.com/mptw/#AutoCorrectPlugin|
| Version:|1.0.0 (06-Apr-2006)|
| Requires:|~TW2.x|
!Description
Auto-corrects a list of mistyped or misspelled words. The list of words can be in any tiddler tagged with autoCorrectWords
!History
* 06-Apr-06, version 1.0.0
** split off from InstantTimestamp
** read translations from a tiddler instead of javascript array
!Notes
* See also InstantTimestamp, BigListForAutoCorrect, MyAutoCorrectWords
!Code
***/
//{{{
version.extensions.AutoCorrectPlugin = { major: 1, minor: 0, revision: 0, date: new Date(2006,4,6),
source: "http://simonbaird.com/mptw/#AutoCorrectPlugin"
};
config.AutoCorrectPlugin = {
wordListTag: "autoCorrectWords",
excludeTags: [
"noAutoCorrect",
"CSS",
"css",
"systemConfig",
"zsystemConfig",
"Plugins",
"Plugin",
"plugins",
"plugin",
"javascript",
"code"
],
excludeTiddlers: [
"StyleSheet",
"StyleSheetLayout",
"StyleSheetColors",
"StyleSheetPrint"
]
};
if (!Array.prototype.contains)
Array.prototype.contains = function(item) {
return (this.find(item) != null);
};
if (!Array.prototype.containsAny)
Array.prototype.containsAny = function(items) {
for (var i=0;i<items.length;i++)
if (this.contains(items[i]))
return true;
return false;
};
String.prototype.upperCaseFirst = function() {
return this.substr(0,1).toUpperCase() + this.substr(1);
}
TiddlyWiki.prototype.saveTiddler_mptw_autocorrect = TiddlyWiki.prototype.saveTiddler;
TiddlyWiki.prototype.saveTiddler = function(title,newTitle,newBody,modifier,modified,tags) {
tags = (typeof(tags) == "string") ? tags.readBracketedList() : tags;
var conf = config.AutoCorrectPlugin;
if ( !tags.containsAny(conf.excludeTags)
&& !tags.contains(conf.wordListTag)
&& !conf.excludeTiddlers.contains(newTitle) ) {
var wordListTiddlers = store.getTaggedTiddlers(conf.wordListTag);
for (var i=0;i<wordListTiddlers.length;i++) {
var lines = wordListTiddlers[i].text.split(/$/m);
for (var j=0;j<lines.length;j++) {
if (lines[j].indexOf("->") > 0) {
var replacer = lines[j].trim().split("->");
newBody = newBody.replace(new RegExp(
"\\b"+replacer[0]+"\\b","g"),replacer[1]);
newBody = newBody.replace(new RegExp(
"\\b"+replacer[0].upperCaseFirst()+"\\b","g"),replacer[1].upperCaseFirst());
}
}
}
}
return this.saveTiddler_mptw_autocorrect(title,newTitle,newBody,modifier,modified,tags);
}
//}}}
Now I'm a man that is concerned, on a daily basis, about his privacy, or lack thereof. So forgive me if I'm not as forthcoming as you may wish... Here we go:
* My name is Ben and I'm from the UK.
* I work for a large, international, communications company.
* I currently work in ICT & research, particularly computer network automation, voice over internet protocol (VoIP) and network security.
* I'm interested in photography, extreme sports, technology and mathematics.
Feel free to drop me a line on [[twitter|http://twitter.com]]... Icon's up there dear. No, no, there, yes, on the left.
So, I'm going to give this blog thing a go in 2008. Enjoy.
<html><a href="http://benjam.TiddlySpot.com/#Blog"><img src="http://www.ambientbuzzsaw.co.uk/benjam/Blogspot.gif" alt="B"></a></html>
/***
| 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;
}
});
//}}}
Background: #fff
Foreground: #000
PrimaryPale: #fff
PrimaryLight: #ff8f1f
PrimaryMid: #ff491f
PrimaryDark: #000
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #000
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
//{{{
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
//}}}
<!--{{{-->
<!--- http://MonkeyPirateTiddlyWiki.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 macro='annotations'></div>
<div macro="showWhenExists EditPanelTemplate">[[EditPanelTemplate]]</div>
<div class="editLabel">Content</div><div class="editor" macro="edit text"></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>
<!--}}}-->
/***
| Name:|ExtentTagButtonPlugin|
| Description:|Adds a New tiddler button in the tag drop down|
| Version:|3.2 ($Rev: 2406 $)|
| Date:|$Date: 2007-08-08 22:50:23 +1000 (Wed, 08 Aug 2007) $|
| Source:|http://mptw.tiddlyspot.com/#ExtendTagButtonPlugin|
| Author:|Simon Baird <simon.baird@gmail.com>|
| License|http://mptw.tiddlyspot.com/#TheBSDLicense|
***/
//{{{
window.onClickTag_mptw_orig = window.onClickTag;
window.onClickTag = function(e) {
window.onClickTag_mptw_orig.apply(this,arguments);
var tag = this.getAttribute("tag");
var title = this.getAttribute("tiddler");
// Saq, you're a genius :)
var popup = Popup.stack[Popup.stack.length-1].popup;
createTiddlyElement(createTiddlyElement(popup,"li",null,"listBreak"),"div");
wikify("<<newTiddler label:'New tiddler' tag:'"+tag+"'>>",createTiddlyElement(popup,"li"));
return false;
}
//}}}
Facebook is the social networking facility that has become ubiquitous throughout wester culture. Many thanks to Mark Zuckerberg (or whatever his name is) for giving us yet another monolithic system on which many people's lives now rely.
So here goes my first little hint, I tried to post this on [[OSXHints|http//www.osxhints.com]] but, for the life of me, I just can't find out how to. Anyway. If you find yourself religiously checking your facebook in order to see if anyone has posted on your wall then you have one option:
a) Sign up for email when you get a post on your wall.
Which is irritating at best. In order to alleviate this problem, which when combined with the usual amount of email that we all get is ridiculous, I've found a neat little trick using the new 3.0 'web-clip' function of Safari on OS X Leopard, giving us another option:
b) Create a web-clip of your wall from [[iphone.facebook|http://iphone.facebook.com]] and ensure that the cookie which keeps your login is kept somewhere safe.
So that's that, dashboard facebook updates as quick and easy as you like. Equally you could do this with your home screen but I would advise you to use the iPhone version of Facebook as you'll have to log back in with the regular version, thus defying the point of a quick update.
As an aside you amy want to put your computer's screen saver on password lock to mitigate some of the security problems...
<html><a href="http://flickr.com/photos/iambenjam"><img src="http://www.ambientbuzzsaw.co.uk/benjam/Flickr.gif" alt="Flickr"></a></html>
Firstly, credit where credit is due: [[Mike Arthur|http://mikearthur.co.uk/]] you the man.
It appears that anyone on [[BT Total Broadband|http://www.productsandservices.bt.com:80/consumerProducts/displayCategory.do?categoryId=CON-TOTAL-BB-R1&s_cid=con_FURL_broadband]] can bag themselves a free [[Flickr|http://www.flickr.com]] Pro account, which would usually set you back $25 per annum. All you need is your '@btinternet.com' address and password. Sign into [[Flickr|http://www.flickr.com]] using it and you'll be prompted to either create a new account or merge with an existing one. Of course there is a small setback... If you cancel your [[BT Total Broadband|http://www.productsandservices.bt.com:80/consumerProducts/displayCategory.do?categoryId=CON-TOTAL-BB-R1&s_cid=con_FURL_broadband]] you'll have to start paying for it again. But who would ever want to change their ISP these days anyway?
//Note: I had a bit of a problem merging but if you start a new account then change the address over from your old, non-pro account it'll have the same effect.//
/***
| 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);
}}
});
//}}}
I've just seen something uber-interesting over [[here|http://tinyurl.com/28e4st]] but I need a shower so give me a sec... Right there we go. Ok I think I'm ready. No, wait. I think I may stall on this post till I consider the implications of my words...
Ok so after a bit of digging I've come to the conclusion that somone, somewhere (Cupertino or Redmond) must have this in development. If not I've a couple of well placed emails and I've written it on a newspaper and taken a photo and all that crazy stuff! First off, a little background:
Interface design is interesting. Fact. After all, most of us use a computer. I personally became interested in this field with the release of the [[iPhone|http://www.apple.com/iphone/]]. Now it's no secret that I went and got one of these little numbers (in fact I turned out being the first person in the UK to win one, courtesy of [[The Cloud|http://www.thecloud.net]]) the day of release, and I was amazed. The interface is pretty much the most intuitive and natural thing I've ever seen. I truly believe that in five years time we'll all be sitting about thinking 'remember using a mouse, how weird was that?'. however I saw a recent blip on the scanner, Apple released the [[MacBook Air|http://www.apple.com/macbookair/]]. It features the same multi-touch technology in the iPhone but on the famously large Apple trackpad. Now I've not tried one of these bad-boys yet but I'm pretty damned sure the thing that makes the multi-touch interface work is the premise that you're getting the instant feedback from the screen under your finger or 'touching your music' as Jobs puts it. Seeing as you're looking up at the screen on the [[MacBook Air|http://www.apple.com/macbookair/]] I imagine a lot of the magic there is lost. Now, onto the interesting bit.
As previously mentioned [[here|http://tinyurl.com/28e4st]] lies a very interesting guy with an interesting idea: Take the worlds most successful console, featuring the worlds most interesting piece of hardware, and run with it. However I think we're missing out on something here. I propose we build on this multi-touch concept... and I think that it's only a short stop from the now.
Apple laptops have, for years now, been fitted with an [[iSight|http://www.apple.com/imac/technology/isight.html]] camera. Apple are also pioneering multi-touch user interfaces. In fact they've allegedly given the thumbs up to the MacBook Touch R&D as reported [[here|http://gizmodo.com/341007/is-the-apple-macbook-touch-a-realistic-possibility]]. I suggest a competitor, and intend to come up with a prototype soon, here we go...
* Higher resolution [[iSight|http://www.apple.com/imac/technology/isight.html]] camera.
* Two additional infra-red [[LEDs|http://www.ledtronics.net/product_news/aa_article_120602.htm]] in the corners of the top case.
* A few changes to OS X in order to use the existing multi-touch interface on the [[MacBook Air|http://www.apple.com/macbookair/]].
...and boom! There we have it, an all singing, all dancing, truly responsive multi-touch user interface that would be minimal cost for Apple (or other vendors) and can be incorporated into their product line as it stands. Steve Jobs: where's my R&D contract?
So, my first 'proper' blog entry, and it's a doozey. Intel have, [[allegedly|http://news.bbc.co.uk/1/hi/technology/7171201.stm]], dropped their contract to supply processing to the One Laptop Per Child ([[OLPC]]), aka the XO, aka the $100 laptop.
This is somewhat of a mojor blow and, personally, somewhat upsetting. I realise that the XO has had it's troubles; inital production was well above $100, which is expected and the only order I know of is 100 thousand from Paraguay, which is well below the inital 250 thousand per order suggested batching. But... comon!
I think that the OLPC initiative is one of the most important initernational projects of our time. Yes it's true there are bigger problems that laptop distribution but, at least it shows that, given a problem, the international community can band together and make a go of it.
So please... comon guys!
/***
| 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));
}
//}}}
Links are... well, they're just links, aren't they? Go work it out.
Designed for use with AutoCorrectPlugin. Tag with autoCorrectWords to enable these translations.
{{{
JonLister->[[Jon Lister|http://www.jaybyjayfresh.com]]
PhilHawksworth->[[Phil Hawksworth|http://www.hawksworx.com]]
SimonMcManus->[[Simon McManus|http://simonmcmanus.com]]
CraigCook->[[Craig Cook}http://boycook.wordpress.com/about/]]
JeremyRuston->[[Jeremy Ruston|http://jermolene.wordpress.com/]]
AndrewBack->[[Andrew Back|http://www.carrierdetect.com/]]
FakeSteve->[[Fake Steve|http://fakesteve.blogspot.com/]]
LinkMe->[[BenJam|http://benjam.tiddlyspot.com]]
BruceSchneier->[[Bruce Schnier|http://www.schneier.com/blog/]]
SimonHailstone->[[Simon Hailstone|http://www.ambientbuzzsaw.co.uk/]]
AmbientBuzzsaw->[[Ambient Buzzsaw|http://www.ambientbuzzsaw.co.uk/]]
}}}
/***
|''Name:''|LoadRemoteFileThroughProxy (previous LoadRemoteFileHijack)|
|''Description:''|When the TiddlyWiki file is located on the web (view over http) the content of [[SiteProxy]] tiddler is added in front of the file url. If [[SiteProxy]] does not exist "/proxy/" is added. |
|''Version:''|1.1.0|
|''Date:''|mar 17, 2007|
|''Source:''|http://tiddlywiki.bidix.info/#LoadRemoteFileHijack|
|''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|
***/
//{{{
version.extensions.LoadRemoteFileThroughProxy = {
major: 1, minor: 1, revision: 0,
date: new Date("mar 17, 2007"),
source: "http://tiddlywiki.bidix.info/#LoadRemoteFileThroughProxy"};
if (!window.bidix) window.bidix = {}; // bidix namespace
if (!bidix.core) bidix.core = {};
bidix.core.loadRemoteFile = loadRemoteFile;
loadRemoteFile = function(url,callback,params)
{
if ((document.location.toString().substr(0,4) == "http") && (url.substr(0,4) == "http")){
url = store.getTiddlerText("SiteProxy", "/proxy/") + url;
}
return bidix.core.loadRemoteFile(url,callback,params);
}
//}}}
<<tiddler RSSIcon>><<tiddler BlogIcon>><<tiddler TwitterIcon>><<tiddler FlickrIcon>>
<<tiddler PIC-SitePontification>>
[[Photography]]
[[Open Source|OpenSource]]
[[Security]]
[[Networks]]
<<tiddler PIC-SiteTomfoolery>>
[[TiddlyWiki]]
[[iPhone]]
[[Wii]]
<<tiddler PIC-SiteMisc>>
[[Admin|adminBar]]
[[Plugins|Plugins]]
[[BlogRoll|RollCall]]
[[About|BenJam]]
[[MonkeyPirateTiddlyWiki|http://mptw.TiddlySpot.com/]] is an extension of the original TiddlyWiki concept by Simon Baird with a new tagging system called TagglyTagging. You can grab the alternate distribution over his neck of the [[woods|http://mptw.TiddlySpot.com]].
URL: http://MonkeyPirateTiddlyWiki.TiddlySpot.com/empty_nolayout.html
URL: /proxy/http://MonkeyPirateTiddlyWiki.TiddlySpot.com/empty_nolayout.html
Well, it appears people enjoy the lighter side of life here at [[BenJam]] so I'll indulge you in my latest lifetime fascination; Undertaking people on speed cameras. I love it! It sends two clear messages:
* You're in the wrong lane.
* You don't score life-points for going through a camera 10 miles an hour slower.
I'm not sure whether this is classed as dangerous driving. If it is then I don't endorse it. But I think I'll continue for a while, because it makes me smile. Now I really must get those comments working...
In here you'll find all my little thoughts on computer networks. You may find a lot of overlap with the [[security|Security]] section so please, try to stay with me.
/***
| 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;
};
//}}}
The One Laptop Per Child program is an international initiative to get Laptop computers to the developing contries of the world. The XO as it's called is a small, durable, sub-notebook computer capable of withstanding many of the elemets. It has no moving parts and comes with a selection of chargers including a foot pump.
All in all I love the XO, I've played with a couple of the development models and find the 'dohnut' interface to be reasuringly simple. However. It has been claimed, reasonably reliably, by the BBC, that the XO's processor manufacturer, Intel, have dropped their contract to produce the units. This represents a massive hurdle... read more [[here|Intel Drops the XO]].
T'other week I went to a conference, it was about open source, it was all very well and good. [[Doc Searls|http://doc-weblogs.com/]] was there, I had a salad for lunch and spoke to interesting people all day. However. I noticed that one point simply didn't come up. So I bided my time, thinking 'surely someone has to drop the TCG bomb at some point' yet no one did. So at the Q&A session the mic came my way. I didn't like the response because I think the speakers lost track, it was the end of the day and all that. But still it bugs me. I work for an (unnamed) communications company which pushes open source development very heavily, yet our main workstation partners, [[HP|http://www.hp.com/]], sit there researching usage and application for trusted computing and trusted platform modules. If you need to bone-up on the issues read the necessary materials down there. All I can say is, I'm still not happy, so I can't wait till the next one... Which I'll instigate.
In this area you'll find all sorts of crap about Open Source development. For those of you in the know; go right ahead, the door's open. For those of you that don't; Open Source is about free software. To use the classic quote 'it's free as in freedom' not free as in 100% cheap.
[[Osmosoft|http://www.osmosoft.com]] is tasked with being the bridge between BT and the open source community. They are under the direction of Jeremy Ruston, the inventor of TiddlyWiki.
<html><img src="http://www.ambientbuzzsaw.co.uk/benjam/misc.png" alt="Misc."></html>
<html><img src="http://www.ambientbuzzsaw.co.uk/benjam/Pontification.png" alt="Pontification"></html>
<html><img src="http://www.ambientbuzzsaw.co.uk/benjam/Tomfoolery.png" alt="Tomfoolery"></html>
<!--{{{-->
<div class='header' macro='gradient vert #fff #fff'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTags' refresh='content' tiddler='Tags'></div>
<!--<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>-->
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
So, I left work today knowing damned-well that the Macworld Expo Keynote was about to begin. 'Ahh that thin [[MacBook|http://www.apple.com/mac/]], ah the iPhone upgrade' I thought. I'm in the midst of trolling through [[MacRumours|http://www.macrumours.com]] and [[apple.com|http://www.apple.com]] but I've something more pressing on my mind. Now what could that be?
I live in London and participate daily in a rain-sodden walk from the tube to my office, but today was a day like no other, oh no, today the pavement had it in for me. I stepped on at least five paving stones only to have the sodden content beneath squelch up my suit trousers. Up!? How the hell does that happen!? Ken Livingston, pull your finger out. Now I'm off to the dry cleaners...
Anyway. On with the show.
So, as you may have seen over [[here|iPhone]] on the Apple musings, I became the first person to win an iPhone in the UK. I've also been given the opportunity to try out a penetration testing tool under the guise of some of my work with my employer... do you see where I'm going with this? The result should be posted here once I get around to giving it a good poking. I'm doing similar over with OS X 'Leopard' over [[here|Penetration Testing OS X 'Leopard']].
I've had a passing interest in Photography since I took Graphic Design GCSE, all those years ago, well... obviously it's not that long ago. I'm mainly interested in [[travel|Travel Photography]], [[extreme sports|Sports Photography]], [[HDR|High Dynamic Range]] and [[macro|Macro Photography]]. In here you'll find some of my thoughts and ghastly photography, perhaps you should wear sunglasses, just to be safe...
In case you're wondering what little additions I've made to this basic TiddlySpot TiddlyWiki here's a list of 'em.
/***
| 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();
//}}}
<html><a href="feed://benjam.TiddlySpot.com/index.xml"><img src="http://www.ambientbuzzsaw.co.uk/benjam/RSS.gif" alt="RSS"></a></html>
/***
| 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();
//}}}
[[JayFresh|http://jayfresh.wordpress.com/]] technological musings from Jon Lister.
[[SimonMcManus|http://simonmcmanus.com/]] technological ranting from Simon Mcmanus.
[[HawksWorx|http://www.hawksworx.com]] technological playground of Phil Hawksworth.
[[CarrierDetect|http://www.carrierdetect.com/]] Andrew Back, brain-fried.
[[WhatFettle|http://blog.whatfettle.com/]] moral guidance from Paul Downey.
[[BoyCook|http://boycook.wordpress.com/]] ideas big and small from Craig Cook.
[[Ambient Buzzsaw|http://www.ambientbuzzsaw.co.uk]] visual stimulation courtesy of Simon Hailstone.
[[BenTown|http://abitofben.blogspot.com/]] Ben Waterhouse: your friendly neighborhood biologist.
/***
| 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;
}
}
});
//}}}
Security in this context means all the clever mathematical and social engineering involved to undermine or protect a system, this may or may not involve a big guy in a leather jacket named 'Clive'. I have both a professional interest and an academic background in the subject and hope to wade my way through a myriad of problems (and maybe solutions) right here, effectively I'll just try to put the world back on the straight and narrow.
<<tabs txtMainTab "Timeline" "Timeline" TabTimeline "All" "All tiddlers" TabAll "Tags" "All tags" TabTags "More" "More lists" TabMore>>
Technological Tomfoolery & Pontification...
<html><img src="http://www.ambientbuzzsaw.co.uk/benjam/SiteTitle.png" alt="BenJam: Technological Tomfoolery and Pontification..."></html>
Designed for use with AutoCorrectPlugin. Tag with autoCorrectWords to enable these translations. Sourced from http://www.actwin.com/rwmack/spelling.htm.
{{{
absense->absence
acceptible->acceptable
accessable->accessible
accidently->accidentally
accomadate->accommodate
accompanyed->accompanied
accross->across
acheivement->achievement
achievment->achievement
acomplish->accomplish
acquiantence->acquaintance
acquited->acquitted
actualy->actually
acuracy->accuracy
addmission->admission
adolecent->adolescent
adress->address
adviced->advised
agian->again
agina->again
agravate->aggravate
agressive->aggressive
ahev->have
ahppen->happen
ahve->have
alomst->almost
almsot->almost
alotted->allotted
alreayd->already
alusion->allusion
alwasy->always
alwyas->always
amature->amateur
amke->make
amking->making
anbd->and
anual->annual
anytying->anything
aquiantance->acquaintance
aquire->acquire
aquitted->acquitted
arangement->arrangement
arguement->argument
athat->that
audeince->audience
aveh->have
avhe->have
awya->away
bakc->back
baout->about
barin->brain
bcak->back
becasue->because
becuase->because
befoer->before
begining->beginning
beleive->believe
bera->bear
boaut->about
busness->business
casion->casino
ceratin->certain
chari->chair
chasr->characters
claer->clear
claerer->clearer
claerly->clearly
clera->clear
comittee->committee
comming->coming
commitee->committee
constatn->constant
coudl->could
coudln->couldn
cpoy->copy
cxan->can
dael->deal
definit->definite
deram->dream
deside->decide
devide->divide
diea->idea
doens->doesn
doign->doing
donig->doing
dreasm->dreams
drnik->drink
dyas->days
efel->feel
eles->else
embarass->embarrass
embarassing->embarrassing
embarras->embarrass
embarrasing->embarrassing
ened->need
enxt->next
erally->really
esle->else
ethose->ethos
eveyr->every
exagerate->exaggerate
exagerated->exaggerated
exagerating->exaggerating
existance->existence
eyar->year
eyars->years
eyasr->years
fianlly->finally
fidn->find
fiel->file
fiels->files
financialy->financially
firends->friends
firts->first
fomr->from
forfiet->forfeit
forhead->forehead
foriegn->foreign
foudn->found
fourty->forty
freind->friend
frist->first
fulfilment->fulfillment
garanteed->guaranteed
gaurd->guard
generaly->generally
gerat->great
godo->good
gogin->going
gonig->going
goign->going
goverment->government
governer->governor
grammaticaly->grammatically
grammer->grammar
greif->grief
grwo->grow
graet->great
grat->great
greta->great
guage->gauge
guidence->guidance
hace->have
haev->have
hapened->happened
harras->harass
herad->heard
hera->hear
herat->heart
heroe->hero
heros->heroes
hieght->height
hismelf->himself
horus->hours
housr->hours
hten->then
htere->there
htey->they
hting->thing
htikn->think
htink->think
htis->this
humer->humor
hvae->have
hvea->have
hvaing->having
hwihc->which
hwile->while
hwole->whole
hypocracy->hypocrisy
hypocrasy->hypocrisy
hypocrit->hypocrite
idae->idea
idaes->ideas
idesa->ideas
ilogical->illogical
imagenary->imaginary
imagin->imagine
imediately->immediately
imense->immense
immitate->imitate
incidently->incidentally
incredable->incredible
independant->independent
indispensible->indispensable
inevatible->inevitable
inevitible->inevitable
infinit->infinite
inocence->innocence
intelectual->intellectual
inteligence->intelligence
inteligent->intelligent
interpet->interpret
interupt->interrupt
intrest->interest
irelevent->irrelevant
iresistable->irresistible
iresistible->irresistible
iritable->irritable
iritated->irritated
irresistable->irresistible
inot->into
iwll->will
iwth->with
jeapardy->jeopardy
jstu->just
jsut->just
knowlege->knowledge
konw->know
konws->knows
knwo->know
knwos->knows
kwno->know
labatory->laboratory
labratory->laboratory
leanr->learn
legitamate->legitimate
leran->learn
lerans->learns
levle->level
liason->liaison
libary->library
lible->liable
lief->life
lieing->lying
liek->like
liekd->liked
liesure->leisure
lightening->lightning
litature->literature
literture->literature
littel->little
liuke->like
liev->live
livley->lively
loev->love
lonelyness->loneliness
lonley->lonely
lonly->lonely
lsat->last
lveo->love
lvoe->love
maintainance->maintenance
maintainence->maintenance
maintenence->maintenance
makse->makes
manuever->maneuver
mariage->marriage
marrage->marriage
mathamatics->mathematics
mear->mere
medacine->medicine
mena->mean
menas->means
messanger->messenger
minature->miniature
mischeivous->mischievous
misile->missile
mkae->make
mkaes->makes
mkaing->making
mkea->make
moent->moment
moeny->money
moer->more
morgage->mortgage
movei->movie
mroe->more
muscels->muscles
mysefl->myself
mysterous->mysterious
naturaly->naturally
naturely->naturally
neccessary->necessary
necesary->necessary
neice->niece
nickle->nickel
nineth->ninth
ninty->ninety
nkow->know
nkwo->know
noticable->noticeable
noticeing->noticing
nuculear->nuclear
nuisanse->nuisance
nusance->nuisance
oaky->okay
obstacal->obstacle
ocasionally->occasionally
occassionally->occasionally
occurance->occurrence
occured->occurred
occurence->occurrence
occurr->occur
occurrance->occurrence
ocurr->occur
ocurrance->occurrence
ocurred->occurred
ocurrence->occurrence
oging->going
omision->omission
omited->omitted
omre->more
onot->onto
onyl->only
oponent->opponent
oportunity->opportunity
oposite->opposite
oppinion->opinion
optomism->optimism
orgin->origin
orginal->original
orginize->organize
otehr->other
owrk->work
owudl->would
paide->paid
palce->place
pamplet->pamphlet
paralel->parallel (500)
parrallel->parallel (700)
pasttime->pastime
payed->paid
peculure->peculiar
peice->piece
peom->poem
peoms->poems
peopel->people
peotry->poetry
performence->performance
perhpas->perhaps
perhasp->perhaps
permanent->permanent
permissable->permissible
perphas->perhaps
personel->personal
planed->planned
plesant->pleasant
poisin->poison
posess->possess
posession->possession
possable->possible
possably->possibly
possesion->possession
practicaly->practically
practicly->practically
prairy->prairie
preceed->precede
prefered->preferred
prepair->prepare
prepartion->preparation
presense->presence
prevelant->prevalent
priviledge->privilege
probablly->probably
probelm->problem
proceed->proceed
proceedure->procedure
profesion->profession
profesor->professor
proffesion->profession
proffesor->professor
prominant->prominent
prophacy->prophecy
propoganda->propaganda
psycology->psychology
publically->publicly
pumkin->pumpkin
pwoer->power
qtuie->quite
quantaty->quantity
quizes->quizzes
qutie->quite
raelly->really
reacll->recall
realy->really
realyl->really
reciept->receipt
recieve->receive
recieving->receiving
recomend->recommend
recrod->record
rediculous->ridiculous
refered->referred
refering->referring
referrence->reference
regluar->regular
rela->real
relaly->really
releive->relieve
rememberance->remembrance
repatition->repetition
representive->representative
restraunt->restaurant
rewriet->rewrite
roomate->roommate
russina->russian
rwite->write
rythm->rhythm
rythem->rhythm
sacrafice->sacrifice
saftey->safety
salery->salary
sargant->sergeant
sasy->says
schedual->schedule
scirpt->script
scripot->script
secretery->secretary
seperate->separate
severley->severely
sherif->sheriff
shineing->shining
shoudl->should
shoudln->shouldn
sieze->seize
simpley->simply
sincerley->sincerely
sinse->since
smae->same
smoe->some
snese->sense
soem->some
sohw->show
sophmore->sophomore
soudn->sound
soudns->sounds
sotry->story
sotyr->story
sould->soul
soulds->souls
speach->speech
sponser->sponsor
stroy->story
stoyr->story
stopry->story
storeis->stories
storise->stories
stnad->stand
stpo->stop
strat->start
stubborness->stubbornness
successfull->successful
suceed->succeed
suer->sure
sumary->summary
supercede->supersede
superintendant->superintendent
supose->suppose
supress->suppress
surley->surely
suround->surround
suseptible->susceptible
swiming->swimming
syas->says
taeks->takes
tahn->than
taht->that
tath->that
talek->talk
talekd->talked
tehy->they
temperment->temperament
temperture->temperature
tendancy->tendency
thgat->that
tghe->the
ther->there
theri->their
thge->the
thier->their
thign->thing
thigns->things
thigsn->things
thikn->think
thikns->thinks
thikning->thinking
thiunk->think
thna->than
thne->then
thnig->thing
thnigs->things
thsi->this
thsoe->those
thta->that
tiem->time
tih->with
tihkn->think
tihs->this
timne->time
tiome->time
tje->the
tjhe->the
tkae->take
tkaes->takes
tkaing->taking
tlaking->talking
tobbaco->tobacco
todya->today
tommorrow->tomorrow
tongiht->tonight
towrad->toward
trafficed->trafficked
trafic->traffic
transfered->transferred
truely->truly
turnk->trunk
twon->town
tyhat->that
tyhe->the
tyrany->tyranny
unconcious->unconscious
unecessary->unnecessary
unmistakeably->unmistakably
untill->until
useage->usage
usefull->useful
useing->using
usualy->usually
vaccum->vacuum
valuble->valuable
vegtable->vegetable
venemous->venomous
vengance->vengeance
veyr->very
vigilence->vigilance
villin->villain
visable->visible
vrey->very
vyer->very
vyre->very
waht->what
warrent->warrant
watn->want
wehn->when
weild->wield
wendsay->Wednesday
wensday->Wednesday
whcih->which
whereever->wherever
whic->which
whihc->which
wholy->wholly
whta->what
wief->wife
wierd->weird
wiht->with
wintery->wintry
wirting->writing
withdrawl->withdrawal
wiull->will
wnat->want
wnats->wants
wnated->wanted
wohle->whole
wokr->work
worshipped->worshiped
woudl->would
wriet->write
wrok->work
wroking->working
wroet->wrote
wtih->with
yeild->yield
ytou->you
yera->year
yeras->years
yersa->years
yeasr->years
}}}
<<tabs txtMoreTab "Tags" "All Tags" TabAllTags "Miss" "Missing tiddlers" TabMoreMissing "Orph" "Orphaned tiddlers" TabMoreOrphans "Shad" "Shadowed tiddlers" TabMoreShadowed>>
//{{{
version.extensions.tagCloud = {major: 1, minor: 0 , revision: 1, date: new Date(2005,8,16)};
//Created by Clint Checketts, contributions by Jonny Leroy and Eric Shulman
config.macros.tagCloud = {
noTags: "No tag cloud created because there are no tags.",
tooltip: "%1 tiddlers tagged with '%0'"
};
config.macros.tagCloud.handler = function(place,macroName,params) {
var tagCloudWrapper = createTiddlyElement(place,"div",null,"tagCloud",null);
var tags = store.getTags();
for (t=0; t<tags.length; t++) {
for (p=0;p<params.length; p++) if (tags[t][0] == params[p]) tags[t][0] = "";
}
if(tags.length == 0)
createTiddlyElement(tagCloudWrapper,"span",null,null,this.noTags);
//Findout the maximum number of tags
var mostTags = 0;
for (t=0; t<tags.length; t++) if (tags[t][0].length > 0){
if (tags[t][1] > mostTags) mostTags = tags[t][1];
}
//divide the mostTags into 4 segments for the 4 different tagCloud sizes
var tagSegment = mostTags / 4;
for (t=0; t<tags.length; t++) if (tags[t][0].length > 0){
var tagCloudElement = createTiddlyElement(tagCloudWrapper,"span",null,null,null);
tagCloudWrapper.appendChild(document.createTextNode(" "));
var theTag = createTiddlyLink(tagCloudElement,tags[t][0],true);
theTag.className += " tagCloudtag tagCloud" + (Math.round(tags[t][1]/tagSegment)+1);
// theTag.setAttribute("tag",tags[t][0]);
}
};
setStylesheet(".tagCloud span{height: 1.8em;margin: 3px;}.tagCloud1{font-size: 1.2em;}.tagCloud2{font-size: 1.4em;}.tagCloud3{font-size: 1.6em;}.tagCloud4{font-size: 1.8em;}.tagCloud5{font-size: 1.8em;font-weight: bold;}","tagCloudsStyles");
//}}}
/***
| Name|TagglyTaggingPlugin|
| Description|tagglyTagging macro is a replacement for the builtin tagging macro in your ViewTemplate|
| Version|3.1 ($Rev: 2351 $)|
| Date|$Date: 2007-07-12 10:18:02 +1000 (Thu, 12 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;
}
});
//}}}
!!!Tags
<<tagCloud excludeLists autoCorrectWords html noAutoCorrect systemServer systemConfig Links Plugins>>
Interested in Technology? mainly computer related? Got a T-shirt from [[ThinkGeek|http://www.thinkgeek.com]]? Read on...
Apologies for my recent absenteeism, I've been away, to India if you'd like to know. In short: nice place but a shame about the money grabbing guys in Delhi. Anyway enough about that, more of this.
My recent trip was the first time out for for me to utilise my new Digital SLR (a Nikon D80 if you must know) I was very excited about getting some travel piccies on a decent camera with a good resolution, for the walls of my new flat. However I discovered that traveling and travel Photography, are not the match made in heaven that one would imagine...
Firstly there is the issue of luggage. I pride myself on traveling relatively light, I pack a 35-40 ltr bag with some of my oldest clothes and laugh at the Americans with their 80+ ltr 'Rucksacs' as they worry about them sitting on the roof of the cranky old bus we're on, in monsoon season. Now, although an SLR is reasonably small (in that you can fit it in a small case) it is a heavy piece of equipment, and when paired with the paraphernalia that surrounds the use of such a camera (hard drive, tripod, filters etc) it all adds up. These trinkets collude to ruin your back over the course of weeks, comparative to a compact anyway.
Secondly there's the obvious problem of theft. Although SLRs are designed to appease those with more traditional views of what a camera should be they still come with a ruddy great screen on the back screaming 'digital' at the small street urchins that you'd love to photograph. This results in a great internal dialog along the lines of 'do I risk it or should I wait until there are less people about' or 'is it going to get dark before I can go home and hide my wares'. By the time this thought process has occurred the opportunity has gone and the street urchins have begun eying up the next guy. On top of all that you now have to look over your shoulder until you can offload, though you can play the 'secret spy' game in your head, deciding who's trying to follow you. Which is sad, but fun.
Note: Some of you, if you had the ability, would comment about getting decent insurance. I can assure you I'm insured to the hilt, in fact I'm almost willing someone to rob me as I've over-insured and could get a full frame DSLR with the return on a claim. My problem is that, from that point, you have no camera. Worse still if they nick your bag they get your backups and all your pictures! FYI I'm looking to move this blog somewhere more traditional, just until [[Osmososft|http://www.osmosoft.com]] get TiddlyWiki up to speed with a few things.
Finally, and this one's the killer, where the hell do you draw the line between travel and travel photography? I'm a fan of both of these things but they just can't ever fit together. When I see a lovely moment I either feel that I should be capturing it in a photo or I should be enjoying it. Inevitably I make the wrong decision and either waste my time getting my camera out (and missing the moment once the above internal discussion has settled) or I 'enjoy' it by imagining how cool it'd look on my wall or similar. Either way I end up feeling robbed of any satisfaction and thoroughly deflated. Worse still post-trip I look through my photos thinking 'ahh yeah that was just before I, oh, no, I 'enjoyed' that bit'... It's a double punkd! Worse STILL aside from deciding this is a holiday/photography trip I can't see a resolution to my predicament! In particular I cannot see a point where a trip purely for photography is a viable option.
So I'm left with this great internal struggle... In the meanwhile check out my progress over on my <<tiddler FlickrIcon>>. Comments are welcome, criticism is encouraged.
/***
|''Name:''|TiddlerNotesPlugin|
|''Description:''|Add notes to tiddlers without modifying the original content|
|''Author:''|Saq Imtiaz ( lewcid@gmail.com )|
|''Source:''|http://tw.lewcid.org/#TiddlerNotesPlugin|
|''Code Repository:''|http://tw.lewcid.org/svn/plugins|
|''Version:''|2.1|
|''Date:''|26/10/07|
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''~CoreVersion:''|2.2.3|
!!Concept:
*The TiddlerNotesPlugin allows you to add notes to tiddlers, without needing to edit the original tiddler. This means that your original content will remain unaltered, and if you update it in the future, you won’t lose your notes. Notes are stored in separate tiddlers, but can be viewed and edited from within the original tiddler.
*For a tiddler titled "~MySlide", the notes are by default saved in a tiddler titled "~MySlide-Notes" and is given a tag of "Notes". The suffix and tags of the notes tiddlers are customizable. You can have one or multiple notes per tiddlers. So it is possible to have for example, teacher's notes and student's notes in the same file.
*Notes can be configured to start off blank, or pre-filled with the contents of the original tiddler.
!!Usage:
*{{{<<notes>>}}} is the simplest usage form.
* additional optional parameters include:
**{{{heading:}}} the heading to use for the notes box
**{{{tag:}}} the tag to be given to the notes tiddler
**{{{suffix:}}} the suffix to be used when naming the notes tiddler
* a full macro call could look like: {{{<<notes heading:"My Notes" tag:"NoteTiddlers" suffix:"Comments">>}}}
* To avoid adding {{{<<notes>>}}} to each tiddler you want notes for, you could add the macro call to the ViewTemplate
** below the line {{{<div class='viewer' macro='view text wikified'></div>}}} add the following line: <br> {{{<div class='viewer' macro='notes'></div>}}}
** Used in combination with the ~HideWhenPlugin or ~PublisherPlugin, you could have notes be shown only for tiddlers with specific tags. The ~PublisherPlugin would allow you for instance to only have the ~TeachersNotes visible to the teacher, and the ~StudentsNotes for the same tiddler visible to the Student.
!!Configuration
*<<option chkPrefillNotes>> Enable to pre-fill notes with the original tiddler's contents
!!Demo:
* [[MySlide]]
***/
// /%
//!BEGIN-PLUGIN-CODE
if (!config.options.chkPrefillNotes)
config.options.chkPrefillNotes = false;
function createTiddlyElement(theParent,theElement,theID,theClass,theText,attribs)
{
var e = document.createElement(theElement);
if(theClass != null)
e.className = theClass;
if(theID != null)
e.setAttribute("id",theID);
if(theText != null)
e.appendChild(document.createTextNode(theText));
if(attribs){
for(var n in attribs){
e.setAttribute(n,attribs[n]);
}
}
if(theParent != null)
theParent.appendChild(e);
return e;
}
function createTiddlyButton(theParent,theText,theTooltip,theAction,theClass,theId,theAccessKey,attribs)
{
var theButton = document.createElement("a");
if(theAction) {
theButton.onclick = theAction;
theButton.setAttribute("href","javascript:;");
}
if(theTooltip)
theButton.setAttribute("title",theTooltip);
if(theText)
theButton.appendChild(document.createTextNode(theText));
if(theClass)
theButton.className = theClass;
else
theButton.className = "button";
if(theId)
theButton.id = theId;
if(attribs){
for(var n in attribs){
e.setAttribute(n,attribs[n]);
}
}
if(theParent)
theParent.appendChild(theButton);
if(theAccessKey)
theButton.setAttribute("accessKey",theAccessKey);
return theButton;
}
config.macros.notes={
cancelWarning: "Are you sure you want to abandon changes to your notes for '%0'?",
editLabel: "edit notes",
editTitle: "double click to edit",
saveLabel: "save notes",
saveTitle: "double click to save",
cancelLabel: "cancel",
heading: "Notes",
suffix: "Notes",
tag: "Notes",
saveNotes: function(ev){
e = ev? ev : window.event;
var theTarget = resolveTarget(e);
if (theTarget.nodeName.toLowerCase() == "textarea")
return false;
var title = story.findContainingTiddler(theTarget).getAttribute("tiddler");
story.setDirty(title,false);
var box = document.getElementById("notesContainer"+title);
var textarea = document.getElementById("notesTextArea"+title);
if(textarea.getAttribute("oldText")!=textarea.value && !hasClass(theTarget,"cancelNotesButton")){
var suffix = box.getAttribute("suffix");
var t = store.getTiddler(title+"-"+suffix);
store.saveTiddler(title+"-"+suffix,title+"-"+suffix,textarea.value,config.options.txtUserName,new Date(),t?t.tags:box.getAttribute("tag"),t?t.fields:{});
}
story.refreshTiddler(title,1,true);
autoSaveChanges(true);
return false;
},
editNotes: function(box,tiddler){
removeChildren(box);
story.setDirty(tiddler,true);
box.title = this.saveTitle;
box.ondblclick = this.saveNotes;
createTiddlyButton(box,this.cancelLabel,this.cancelLabel,this.saveNotes,"cancelNotesButton");
createTiddlyButton(box,this.saveLabel,this.saveLabel,this.saveNotes,"saveNotesButton");
wikify("!!"+box.getAttribute("heading")+"\n",box);
addClass(box,"editor");
var wrapper1 = createTiddlyElement(null,"fieldset",null,"fieldsetFix");
var wrapper2 = createTiddlyElement(wrapper1,"div");
var e = createTiddlyElement(wrapper2,"textarea","notesTextArea"+tiddler);
var v = store.getValue(tiddler+"-"+box.getAttribute("suffix"),"text");
if(!v)
v = config.options.chkPrefillNotes? store.getValue(tiddler,"text"):'';
e.value = v;
e.setAttribute("oldText",v);
var rows = 10;
var lines = v.match(/\n/mg);
var maxLines = Math.max(parseInt(config.options.txtMaxEditRows),5);
if(lines != null && lines.length > rows)
rows = lines.length + 5;
rows = Math.min(rows,maxLines);
e.setAttribute("rows",rows);
box.appendChild(wrapper1);
},
editNotesButtonOnclick: function(e){
var title = story.findContainingTiddler(this).getAttribute("tiddler");
var box = document.getElementById("notesContainer"+title);
config.macros.notes.editNotes(box,title);
return false;
},
ondblclick : function(ev){
e = ev? ev : window.event;
var theTarget = resolveTarget(e);
var title = story.findContainingTiddler(theTarget).getAttribute("tiddler");
var box = document.getElementById("notesContainer"+title);
config.macros.notes.editNotes(box,title);
e.cancelBubble = true;
if(e.stopPropagation) e.stopPropagation();
return false;
},
handler : function(place,macroName,params,wikifier,paramString,tiddler){
params = paramString.parseParams("anon",null,true,false,false);
var heading = getParam(params,"heading",this.heading);
var tag = getParam(params,"tag",this.tag);
var suffix = getParam(params,"suffix",this.suffix);
var box = createTiddlyElement(place,"div","notesContainer"+tiddler.title,"TiddlerNotes",null,{"source":tiddler.title,params:paramString,heading:heading,tag:tag,suffix:suffix});
createTiddlyButton(box,this.editLabel,this.editLabel,this.editNotesButtonOnclick,"editNotesButton");
wikify("!!"+heading+"\n",box);
box.title=this.editTitle;
box.ondblclick = this.ondblclick;
wikify("<<tiddler [["+tiddler.title+"-"+suffix+"]]>>",box);
}
};
Story.prototype.old_notes_closeTiddler = Story.prototype.closeTiddler;
Story.prototype.closeTiddler = function(title,animate,unused){
if(story.isDirty(title)) {
if(!confirm(config.macros.notes.cancelWarning.format([title])))
return false;
}
return this.old_notes_closeTiddler.apply(this,arguments);
}
setStylesheet(".TiddlerNotes {\n"+ " background:#eee;\n"+ " border:1px solid #ccc;\n"+ " padding:10px;\n"+ " margin:15px;\n"+ "}\n"+ "\n"+ ".cancelNotesButton,.editNotesButton, .saveNotesButton {\n"+ " float:right;\n"+ " border:1px solid #ccc;\n"+ " padding:2px 5px;\n"+ "}\n"+ "\n"+ ".saveNotesButton{\n"+ " margin-right:0.5em;\n"+ "}\n"+ "\n"+ ".TiddlerNotes.editor textarea{\n"+ " border:1px solid #ccc;\n"+ "}","NotesPluginStyles");
//!END-PLUGIN-CODE
// %/
So TiddlyChatter, sounds cool? You haven't got a clue what it's about yet! Lets rectify that shall we? Stay with me. So, you know this facebook thing? The one that everyone loves to hate, me included. Well. The thing is, there are a LOT of areas it fails to capitalize on (and by that I don't mean money). However, there is one little gem which, given a little cutting down and buffing up, could be a diamond. The home screen. All the information you need, one place, decentralised and relevant. This is the idea behind TiddlyChatter, brainchild of [[Jon Lister|http://jaybyjayfresh.com/]] and it looks to be going places. Look to subscribe here using it soon. If anyone, actually, ever, reads this... who knows! Meanwhile check out Jon's blog for more information.
!!!Update
Development on this has stalled, personally I request a reasoning? Lets get it moving again Jay!
Ok so I'm going to limit myself at one blog entry a day but, as some of us TiddlyWiki fans well know, TiddlySpot experienced seasonably technological problems recently. I think Santa must have spilt his bourbon all over the TiddlySpot fireplace. But it's ok, all cleared up now. On with the show.
I'm looking at solving a few problems over at the [[Tomfoolery]] pages but just thought I'd add a point. I'd like comments on my page a la Wordpress... I've had words with [[Jon Lister|http://www.jaybyjayfresh.com]] about this and I dont think there's something that enables me to do this. So I'll jump headfirst into the darkness of JavaScript. Not that I really enjoy this sort of thing but, as the classic Open Source cliche goes, I'e got an itch. See what's happening over [[here|TiddlyPress]].
Designed for use with AutoCorrectPlugin. Tag with autoCorrectWords to enable these translations. Sourced from http://www.actwin.com/rwmack/spelling.htm.
{{{
tiddlywiki->TiddlyWiki
tw->TiddlyWiki
tiddlypot->TiddlySpot
tiddlyspot->TiddlySpot
ts->TiddlySpot
tiddlyvault->TiddlyVault
tiddlychatter->TiddlyChatter
teamtasks->TeamTasks
TT->TeamTasks
monkeypiratetiddlywiki->MonkeyPirateTiddlyWiki
mptw->MonkeyPirateTiddlyWiki
}}}
[[TiddlySpot|TiddlySpot]] is the hosted extension of TiddlyWiki on which this particular TiddlyWiki is based. for more information check out their website [[here|http://www.TiddlySpot.com]] and get yourself one!