/***\n''AliasPlugin for TiddlyWiki version 1.2.x and 2.0''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#AliasPlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nCreate text-substitution macros that define abbreviations and other "aliases", and then embed them in the rest of your tiddler content to quickly insert common terms, phrases and links without a lot of repetitive typing.\n\n!!!!!Usage\n<<<\nFirst, decide upon a suitable "alias" for the text to be substituted. This is usually a short keyword or other abbreviated term that is easily input with just a few keystrokes. You can use any alias you like, but don't include any spaces in the alias name, since it will be used as the name of the 'alias macro' that is created, and macro names cannot contain spaces.\n\n//Note: If you use an alias name that ''does'' contain spaces, they will be automatically replaced with underscores ("_"), so that the resulting alias name will still be a valid macro name//\n\nTo create alias definitions, embed << {{{alias //newname// //"text to display"//}}} >> macros in a tiddler. These macros don't actually produce any visible output, but simply define the alias macros that you want to use in your document, and thus they can be safely added to practically any tiddler without producing a change in that tiddler's appearance.\n\nIn order to ensure that your aliases are defined and available for use throughout your document, you should add your definitions to a tiddler that you are certain will be displayed when your TW is first loaded, such as MainMenu or SiteTitle (or, any tiddler listed in DefaultTiddlers).\n<<<\n!!!!!Examples\n<<<\n<<alias>> {{{<<alias>>}}}\nmissing alias name: fail safe, do nothing\n\n<<alias alias1>> {{{<<alias alias1>>}}}\nmissing text params, default to text=name (e.g., "<<alias1>>")\n\n<<alias alias2 simple multi-word text substitution>> {{{<<alias alias2 simple multi-word text substitution>>}}}\n<<alias2>>\n\n<<alias "alias3 with spaces" "spaces in aliasname converted to _">> {{{<<alias "alias3 with spaces" "spaces in aliasname converted to _ ">>}}}\n<<alias3_with_spaces>>\n\n<<alias alias4 "multi-line \ntext\nsubstitution">> {{{<<alias alias4 "multi-line\ntext\nsubstitution">>}}}\n<<alias4>>\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''AliasPlugin'' (tagged with <<tag systemConfig>>)\n^^documentation and javascript for this plugin^^\n<<<\n!!!!!Revision History\n<<<\n''2005.10.09 [1.0.3]''\ncombined documentation and code into a single tiddler\n''2005.08.12 [1.0.0]''\ninitial release\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.alias= {major: 1, minor: 0, revision: 3, date: new Date(2005,10,9)};\nconfig.macros.alias= { };\nconfig.macros.alias.handler = function(place,macroName,params) {\n var alias=params.shift(); if (!alias) return; alias=alias.replace(/ /g,"_"); // don't allow spaces in alias\n if (config.macros[alias]==undefined) // create new macro (as needed)\n { \n config.macros[alias] = { };\n config.macros[alias].handler =\n function (place,macroName,params)\n { wikify(config.macros[macroName].text,place,null,null); }\n }\n config.macros[alias].text = params[0]?params.join(' '):alias; // set alias text\n}\n//}}}\n
/***\n\n\n|''Name:''|ApplyStylesMacro|\n|''Version:''|1.0.6 (9-Nov-2005)|\n|''Source:''|MonkeyPirateTiddlyWiki (http://homes.jcu.edu.au/~ccscb/mptw/#ApplyStylesMacro)|\n|''Author:''|[[Simon Baird]]|\n|''Type:''|Macro|\n|''Requires:''|TiddlyWiki 1.2.33 or higher|\n!Description\nA macro that creates a button which you can click to apply a stylesheet. Also a macro that creates a list of buttons for all (tagged) stylesheets. You can use it as a style chooser.\n\n!Syntax/Examples\nApply the named tiddler as a stylesheet. Use quotes for tiddlers with spaces in their name.\n>{{{<<applystyle "Blue Mist">>}}} <<applystyle "Blue Mist">>\nApply the named tiddler with a different title on the button.\n>{{{<<applystyle "my favourite|Zeldman Orange">>}}} <<applystyle "my favourite|Zeldman Orange">>\nApply the current tiddler as a stylesheet. (Won't work here of course)\n>{{{<<applystyle>>}}} <<applystyle>>\nList applystyle buttons for all tiddlers tagged as [[stylesheets]]\n>{{{<<stylechooser>>}}}\n><<stylechooser>>\n\n!Known issues/Todos\n* Most of the stylesheets need a little TLC\n* Maybe ChooseTheme should be a shadowTiddler and also maybe add link in SideBarOptions shadowtiddler.\n\n!Instructions\nI recommend putting {{{[[stylesheet|ChooseTheme]]}}} in your SideBarOptions and making a ChooseTheme tiddler like mine. You will need extra styles though to make it match the buttons, eg:\n{{{#sidebarOptions .tiddlyLink { color:#eef; padding: 0.3em 0.2em 0.3em 1em; display:block;} }}}\n{{{#sidebarOptions .tiddlyLink:hover { color:#fff; background:#252;} }}}\n{{{#sidebarOptions .sliderPanel .tiddlyLink {color:#242;display:inline;padding:0;} }}}\n{{{#sidebarOptions .sliderPanel .tiddlyLink:hover {color:#242; background:#dfd;} }}}\nThe second pair are to override the first pair in the options slider.\n\n!Notes\n* [[Eric Shulman]] has a very good style chooser with a lot more features than this one. I wrote this because I wanted something simpler to hack on and because I like my plugins to be as short (and sweet?) as possible. :)\n* There is a neat little bit of integration with this in [[Auto Pre Formatting]]. Take a look at the button near the top of a stylesheet, eg [[Blue Mist]].\n\n!Revision history\n* v0.9, 28 Sep 2005\n** Started out with an "Apply This" button in toolbar. Decided to make it a macro instead.\n* v1.0, 29 Sep 2005\n** I like it! Even the cookies and the notify stuff seems to be working. \n* v1.0.1, 29 Sep 2005\n** Styled the buttons based on stylesheet name\n** Added bullets to stylechooser output\n* v1.0.2, 29 Sep 2005\n** Pushed stuff like formats into config. format is cool\n* v1.0.5, 5 Oct 2005\n** Forked experimental stuff into ApplyStylesMacro2\n** Added {{{<<applystyles none>>}}}\n* v1.0.6, 9 Nov 2005\n** Got it working again (after being broken for a while in 1.2.37) thanks to copying some code from [[Eric Shulman]]'s excellent SelectStyleSheetPlugin. Thanks Eric. :)\n\n!Code\n***/\n//{{{\n\nconfig.macros.applystyle = {\n label: "Apply %0",\n prompt: "Apply the stylesheet contained in the tiddler called %0",\n classFormat: "Apply%0Button"\n};\n\nif (config.options.txtStyleSheet == undefined)\n config.options.txtStyleSheet="StyleSheet";\n\nfunction updateAndRememberStyleSheet(tiddlerName,force) {\n if (tiddlerName != config.options.txtStyleSheet || force) {\n // store.namedNotifications[config.options.txtStyleSheet] = null; // remove notification on old stylesheet\n // store.addNotification(tiddlerName,refreshStyles);\n config.options["txtStyleSheet"] = tiddlerName;\n saveOptionCookie("txtStyleSheet");\n\n var theCSS = store.getRecursiveTiddlerText(tiddlerName,"");\n\n // this part lifted mostly from Eric Shulman's code\n switch (tiddlerName) {\n case "none":\n setStylesheet("","StyleSheetColors");\n setStylesheet("","StyleSheetLayout");\n setStylesheet("","StyleSheet");\n break;\n default:\n setStylesheet(store.getTiddlerText("StyleSheetColors"),"StyleSheetColors");\n setStylesheet(store.getTiddlerText("StyleSheetLayout"),"StyleSheetLayout");\n setStylesheet(theCSS,"StyleSheet");\n break;\n }\n\n }\n}\n\nupdateAndRememberStyleSheet(config.options.txtStyleSheet,true);\n\nconfig.macros.applystyle.handler = function(place,macroName,params) {\n var theTiddler = "";\n var theTitle = "";\n if (params.length == 0) {\n theTiddler = findContainingTiddler(place).id.substr(7);\n theTitle = theTiddler + " (this tiddler)";\n }\n else if (params[0].indexOf("|") != -1) {\n // presume no tiddlers have a | in their actual title\n var sp = params[0].split("|");\n theTiddler = sp[1];\n theTitle = sp[0];\n }\n else {\n theTiddler = params[0];\n theTitle = theTiddler ;\n }\n\n if (theTitle == "StyleSheet")\n theTitle = theTitle + " (default custom stylesheet)";\n\n if (theTitle == "none") {\n theTitle = "TiddlyWiki Standard (no custom stylesheet)";\n theTiddler = "";\n }\n\n var applyIt = function() {\n updateAndRememberStyleSheet(theTiddler);\n return false;\n };\n\n // special request for Clint :)\n var className = this.classFormat.format([theTiddler.replace(/\ss/g,"")]);\n\n createTiddlyButton(place,this.label.format([theTitle]), this.prompt.format([theTitle]), applyIt,className,null,null);\n\n};\n\nconfig.macros.stylechooser = {\n singleItemFormat: "* %0\sn",\n //wholeListFormat: "Choose stylesheet:\sn%0", \n wholeListFormat: "%0", // had an extra \sn here but I don't think it's needed.\n tag: "stylesheets"\n};\n\nconfig.macros.stylechooser.handler = function(place,macroName,params) {\n var tagged = store.getTaggedTiddlers(this.tag);\n var string = "";\n string += this.singleItemFormat.format(["<<applystyle none>>"]);\n if (store.tiddlerExists("StyleSheet"))\n string += this.singleItemFormat.format(["<<applystyle StyleSheet>>"]);\n for(var i=0;i<tagged.length;i++)\n if (tagged[i].title != "StyleSheet")\n string += this.singleItemFormat.format(["<<applystyle \s"" + tagged[i].title +"\s">>"]);\n wikify(this.wholeListFormat.format([string]), place, null, null);\n};\n\n\n\n\n//}}}\n
/***\n|''Name:''|AutoPreFormatting|\n|''Version:''|1.0.4 (01-Nov-2005)|\n|''Source:''|MonkeyPirateTiddlyWiki (http://homes.jcu.edu.au/~ccscb/mptw/#AutoPreFormatting)|\n|''Author:''|SimonBaird|\n|''Type:''|Plugin|\n!Description\n"Automatically" surrounds stylesheet tiddlers (or any other tiddler based on tag or name) with triple curly brackets before wikifying so they are formatted as code using a technique originally suggested by [[Josh]]. \n\n!Directions\nYou might want to adjust the list of tidders and tags that the formatting is applied to.\n\n!Revision History\n*v1.0.1 (01-Sep-2005)\n** Use config to specify which tags and tiddlers should use auto pre formatting\n*v1.0.2 (02-Sep-2005)\n** fixed bug that affecting viewing a tiddler that doesn't exist yet\n*v1.0.3 (02-Oct-2005)\n** added integration with ApplyStylesMacro to add apply style button to stylesheets\n** added nice doco\n*v1.0.4 (01-Nov-2005)\n** added StyleSheetColors and StyleSheetLayout to default tiddlers to auto format (but only works if they aren't shadow tiddlers...)\n\n!Code\n***/\n//{{{\n\n// adjust this to your preference:\nconfig.mptw_autopre = {\n tiddlers: "StyleSheet,StyleSheetColors,StyleSheetLayout", // why isn't this an array????\n tags: "stylesheets,CSS,javascript"\n};\n\nwindow.createTiddlerViewer_orig_mptw_autopre = window.createTiddlerViewer;\n\nwindow.createTiddlerViewer = function(title,highlightText,highlightCaseSensitive) {\n \n var tiddler = store.tiddlers[title];\n var trigger = false; \n\n var isStyleSheet = false;\n\n if (tiddler) {\n\n // check for title match\n var titlestocheck = config.mptw_autopre.tiddlers.split(",");\n for (var j=0;j<titlestocheck.length;j++) {\n if (titlestocheck[j] == title) {\n trigger = true;\n }\n }\n\n // check for tag match\n var tags = tiddler.getTags().readBracketedList();\n for (var i=0;i<tags.length;i++) {\n var tagstocheck = config.mptw_autopre.tags.split(",");\n for (var j=0;j<tagstocheck.length;j++) {\n if (tagstocheck[j] == tags[i]) {\n trigger = true;\n if (config.macros.stylechooser != undefined && config.macros.stylechooser.tag == tags[i]) {\n // see ApplyStylesMacro\n isStyleSheet = true;\n }\n }\n }\n }\n }\n\n if (trigger) {\n var realText = store.getTiddlerText(title);\n var tweakedText = "{{{\sn" + realText + "\sn}}}\sn";\n // see ApplyStylesMacro\n if (isStyleSheet) tweakedText = "<<applystyle>>\sn" + tweakedText;\n tiddler.text = tweakedText;\n createTiddlerViewer_orig_mptw_autopre(title,highlightText,highlightCaseSensitive);\n tiddler.text = realText;\n }\n else {\n createTiddlerViewer_orig_mptw_autopre(title,highlightText,highlightCaseSensitive);\n }\n}\n//}}}
#mainMenu br { display:none; }\n#popup{\n padding-left: 2px !important;\n padding-bottom: 2px !important;\n}\n\n\n#popup *{\n border: 0 !important;\n}\n\n#popup hr {\n border-top: solid 1px #ccc !important; \n border-left: none;\n border-right: none;\n border-bottom: none;\n height: 1px;\n color: #ccc;\n width: 98%;\n}\n\n#popup a:hover{\n color: black !important;\n}\n\nbody {\n margin: 0px;\n background-color: #e4e4e4;\n font-size: 9pt;\n font-family: tahoma,arial,helvetica;\n}\n\na:link, a:visited, a:hover, a:active {\n text-decoration: none;\n}\n\n#header {\n border-bottom: 1px solid #458;\n margin-bottom: 0em;\n}\n\n#titleLine {\n color: #fff;\n background: #bcd;\n padding: 0.7em 1em 1em 1em;\n}\n\n#titleLine a {\n text-decoration: none;\n color: #9ab;\n}\n\n#siteTitle {\n font-size: 40pt;\n font-weight: bold;\n padding-left: 20px;\n color: #9ab;\n}\n\n#siteSubtitle {\n font-size: 12pt;\n font-family: georgia,times;\n font-style: italic;\n color: #457;\n display: block;\n position: relative;\n bottom: 5px;\n left: 0px;\n padding-left: 70px;\n}\n\n#mainMenu {\n font-size: 12px;\n float: left;\n width: 13em;\n border: 1px solid #aaa;\n margin: .5em 1em .5em 1em;\n background: #f3f3f3;\n line-height: 125%;\n color: black;\n text-align: right;\npadding: 0;\n}\n\n#mainMenu .tiddlyLink, #mainMenu a.button{\n display: block; \n text-decoration: none;\n width: 12em;\n padding: .25em .5em;\n color: #444;\n text-transform: capitalize;\n}\n\n#mainMenu a:hover {\n color: #000 !important;\n background-color: #bcd !important;\n}\n\n#displayArea {\n margin: 1em 14em 0em 15em;\n}\n\n#messageArea {\n background-color: #5a84ad;\n color: #fff;\n padding: 0.5em 0.5em 0.5em 0.5em;\n margin: 0em 0em 0.6em 0em;\n border-bottom: 1px solid #458;\n display: none;\n}\n\n#messageArea a:link, #messageArea a:visited {\n display: inline;\n text-decoration: underline;\n color: #ddf;\n}\n\n#messageArea a:hover, #messageArea a:active{\n color: #fff;\n}\n\n.tiddler {\n border: 1px solid #aaa;\n margin: 0 10px 20px;\n padding: 8px;\n padding-top:0;\n font-family: arial,georgia,times;\n background-color: white;\n width: auto;\n overflow: hidden;\n}\n\n.innerTiddler {\n padding: 0.7em 1em 1em 0.8em;\n font-size: 9pt;\n}\n\n#displayArea .tiddlyLinkExisting {\n font-weight: bold;\n}\n\n#displayArea .tiddlyLinkNonExisting {\n font-style: italic;\n}\n\n#displayArea .externalLink {\n text-decoration: underline;\n}\n.title {\n font-family: tahoma,arial,helvetica;\n font-size: 13pt;\n color: #469;\n font-weight: bold;\n }\n\n.toolbar {\n font-family: tahoma,arial,helvetica;\n font-weight: normal;\n font-size: 8pt;\n padding: 0em 0em 0em 1em;\n color: #aaa !important;\n visibility: hidden;\n}\n\n.toolbar a{\n padding: 0.2em 0.4em 0.2em 0.4em;\n color: #888 !important;\n}\n\n.toolbar a:hover{\n color: black;\n background-color: #e4e4e4 !important;\n border: 1px solid #aaa !important;\n margin-left: -1px; \n margin-right: -1px;\n}\n\n.toolbar a:active{\n color: #666;\n}\n\n.viewer a.button{\n border: 0;\n background-color: transparent !important;\n padding: 0em;\n color: #888 !important;\n border: 1px solid transparent;\n}\n\n.editorFooter a:hover, .footer a.button {\n color: #888 !important;\n}\n\n.editorFooter a:hover, .footer a:hover{\n color: black;\n background-color: #e4e4e4 !important;\n border: 1px solid #aaa !important;\n margin-left: -1px; \n margin-right: -1px;\n}\n\n.viewer a.button:hover{\n color: black;\n background-color: #e4e4e4 !important;\n border: 1px solid #aaa !important;\n}\n\n.viewer a.button,.editorFooter a:hover, .footer a.button {\n color: #666;\n}\n\n#popup {\n display: none;\n position: absolute;\n top: 1.5em;\n left: 13.25em;\n font-size: 8pt;\n color: #888;\n background-color: #e4e4e4;\n padding: 0;\n border-top: 1px solid #aaa;\n border-bottom: 1px solid #330000;\n border-right: 1px solid #330000;\n border-left: 1px solid #aaa;\n}\n\n#popup a {\n display: block;\n color: #888;\n min-width: 8em;\n border: 0;\n margin: 0;\n}\n\n#popup a:hover {\n background-color: #e4e4e4;\n color: black;\n}\n\n.body {\n border-top:1px solid #ccc;\n padding-top: 0.5em;\n margin-top:0.3em;\n overflow: hidden;\n}\n\n.viewer {\n color: black;\n line-height: 140%;\n}\n\n.viewer a:link, .body a:visited{\n color: #922;\n}\n\n.viewer a:hover {\n color: #b44;\n background-color: transparent;\n text-decoration: none;\n}\n\n.viewer blockquote {\n font-size: 8pt;\n line-height: 150%;\n border-left: 1px solid #ccc;\n padding-left: 0.8em;\n margin-left: 2.5em;\n}\n\n.viewer ul {\n margin-left: 0.5em;\n padding-left: 1.5em;\n}\n\n.viewer ol {\n margin-left: 0.5em;\n padding-left: 1.5em;\n}\n\n/*==============================================Headings================*/\n\n.viewer h1,.viewer h2,h3,h4,h5,h6 {\n font-weight: bold;\n text-decoration: none;\n color: #469;\n padding-left: .6em;\nbackground-color: transparent !important;\nborder-bottom: 3px dotted #ccc;\n}\n\n.viewer h2 {\n font-size: 12pt;\n}\n\n.viewer h3 {\n font-size: 11pt;\n}\n\n.viewer h4 {\n font-size: 10pt;\n}\n\n.viewer h5 {\n font-size: 9pt;\n}\n\n.viewer h6 {\n font-size: 8pt;\n}\n\n.viewer table {\n font-size: 10pt;\n border-collapse: collapse;\n border: 2px solid #303030;\n margin-left: 1.0em;\n margin-right: 1.0em;\n margin-top: 0.8em;\n margin-bottom: 0.8em;\n}\n\n.viewer th {\n background-color: #bcd;\n border: 1px solid #606060;\n padding: 3px;\n}\n\n.viewer td, tr {\n border: 1px solid #606060;\n padding: 3px;\n}\n\n.viewer caption {\n font-size: smaller;\n padding: 3px;\n}\n\n.viewer hr {\n border-top: dashed 1px #606060;\n border-left: none;\n border-right: none;\n border-bottom: none;\n height: 1px;\n color: #666666;\n}\n\n.highlight {\n color: #000000;\n background-color: #bcd;\n}\n\n.editor {\n font-size: 8pt;\n color: #402c74;\n font-weight: normal;\n}\n\n.editor input {\n display: block;\n border: 1px solid black;\n}\n\n.editor textarea {\n display: block;\n font: inherit;\n border: 1px solid black;\n}\n\n/*\n=================Sidebar==========\n=================================\n*/\n\n\n#sidebar {\n float: right;\n width: 14em;\n font-size: 8pt;\n border-left: 1px solid #aaa;\n border-bottom:1px solid #aaa;\n}\n\n#sidebarOptions {\n color: #666 !important;\n background-color: #f3f3f3 !important;\n}\n\n#sidebar #sidebarOptions a:hover{\n background-color: #f3f3f3;\n}\n\n#contentWrapper #sidebar a:hover{\n color: #b44;\n text-decoration: underline;\n}\n\n#contentWrapper .sidebarSubHeading {\n font-size: 0.95em;\n color: #236;\n}\n\n#contentWrapper #commandPanel {\n padding-top: 0.5em;\n background-color: #f3f3f3;\n color: black;\n font-size: 8pt;\n}\n\n#contentWrapper #commandPanel a {\n display: block;\n padding: 0.3em 0.2em 0.3em 1em;\n color: #666;\n text-decoration: none;\n}\n\n#contentWrapper #commandPanel a:hover {\n color: #922;\n text-decoration: underline;\n background-color: transparent;;\n}\n\n#contentWrapper #commandPanel input {\n margin: 0.4em 0em 0.3em 1em;\n border: 1px solid black;\n}\n\n#contentWrapper #optionsPanel {\n display: none;\n background-color: #f3f8ff;\n padding: 0.5em 0.5em 0em 0.5em;\n font-size: 7pt;\n color: black;\n}\n\n#contentWrapper #optionsPanel a:link, #optionsPanel a:visited {\n color: #666;\n font-weight: bold;\n}\n\n#contentWrapper #optionsPanel a:hover {\n color: #922;\n text-decoration: underline;\n background-color: transparent;\n}\n\n.optionsText {\n margin-top: 0.25em;\n margin-bottom: 0.75em;\n}\n\n.optionsItem {\n}\n/*========================================================================*/\n#contentWrapper #sidebarTabs {\n background-color: #f3f3f3;\n padding: 0em;\n}\n\n#contentWrapper #sidebarTabs a {\n color: black;\n background-color: transparent;\n}\n\n#contentWrapper #sidebarTabs a:hover {\n color: #922; text-decoration: underline;\n background-color: transparent;\n}\n\n#contentWrapper #sidebarTabs a:active {\n color: black;\n}\n\n#contentWrapper .tabContentTags #popup {\n display: none;\n position: absolute;\n top: 1em;\n left: 13.25em;\n font-size: 8pt;\n color: #888;\n background-color: #e4e4e4;\n padding: 0;\n margin-top: -2px;\n border-top: 1px solid #aaa;\n border-bottom: 1px solid #330000;\n border-right: 1px solid #330000;\n border-left: 1px solid #aaa;\n}\n\n#contentWrapper .tabContentTags #popup hr {\n color: #ccc;\n}\n\nhr{\n color: black !important;\n}\n\n#contentWrapper .tabContentTags #popup a {\n display: block;\n color: #888;\n min-width: 8em;\n border: 0;\n margin: 0;\n height: 1.2em;\n}\n\n#contentWrapper .tabContentTags #popup a:hover {\n background-color: #e4e4e4;\n color: black;\n}\n\n#contentWrapper a.tab {\n font-weight: normal;\n display: inline;\n margin: 0px 1px; \n border:1px solid #aaa;\n border-bottom:none;\n}\n\n#contentWrapper a.tabSelected {\n background-color: #e6e6e6 !important;\n padding: 2px 4px 2px 4px;\n}\n\n#contentWrapper a.tabUnselected {\n background-color: #f3f3f3;\n padding: 2px 4px 0px 4px;\n}\n\n/*===========================================================================================*/\n/*===========================================================================================*/\n#sidebarTabs{\n margin: 0;\n padding: 0;\n}\n\n#contentWrapper .tabContents {\n background-color: #e6e6e6;\n border-bottom: solid #aaa 1px;\n}\n\n#contentWrapper .tabContents a.tiddlyLink, #contentWrapper .tabContents a.button{\n background-color: #e6e6e6;\n color: #922 !important;\n}\n\n#contentWrapper .tabContents a:hover{\n color: #b44 !important;\n}\n\n#contentWrapper .txtMoreTab a.tabUnselected {\n background-color: #e6e6e6;\n padding: 2px 4px 0px 4px;\n}\n\n#contentWrapper .txtMoreTab a.tabSelected {\n background-color: #ccc !important;\n padding: 2px 4px 2px 4px;\n}\n\n.txtMoreTab .tabContents {\n background-color: #ccc !important;\n border-bottom: solid #aaa 1px;\n}\n\n.txtMoreTab .tabContents a{\n background-color: transparent !important;\n}\n\n#licensePanel {\n padding: 0.5em 0.2em 0.5em 0.2em;\n}\n\n#licensePanel a {\n display: block;\n padding: 0.2em 0.2em 0.2em 0.2em;\n color: #555;\n}\n\n#licensePanel a:hover {\n text-decoration: none;\n color: #922;\n background-color: transparent;\n}\n\n#storeArea, #copyright {\n display: none;\n}\n\n#floater {\n font-size: 10pt;\n visibility: hidden;\n color: white;\n border: 1px solid #666;\n background-color: white;\n position: absolute;\n padding: 1em 1em 1em 1em;\n display:none;\n}\n\n@media print {\n\n#mainMenu {\n display: none;\n}\n\n#displayArea {\n margin: 1em 1em 0em 1em;\n}\n\n#sidebar {\n display: none;\n}\n\n}
You can apply any of these [[stylesheets]] by clicking below. \n<<stylechooser>>\n
/***\n|''Name:''|CloseOthersButton|\n|''Version:''|1.0.1 (11-Oct-2005)|\n|''Source:''|MonkeyPirateTiddlyWiki (http://homes.jcu.edu.au/~ccscb/mptw/#CloseOthersButton)|\n|''Author:''|SimonBaird|\n|''Type:''|Plugin|\n!Description\nAdds a button to the toolbar that closes all other tiddlers but this one. Sometimes when you're finding the tiddlers you want you end up with many tiddlers on screen that you don't really need. This lets you "declutter" quickly and easily.\n\n!Revision History\n* This was my first ever TW hack (and the beginning of my TW addiction. :) \n* (July 2005)\n** Made into a plugin for MPTW launch\n* v1.0.1 (11-Oct-2005)\n** Added doco\n\n!Code\n***/\n//{{{\nwindow.onClickToolbarCloseOthers = function(e) {\n if (!e) var e = window.event;\n clearMessage();\n if(this.parentNode.id)\n closeAllOtherTiddlers(this.parentNode.id.substr(7));\n e.cancelBubble = true;\n if (e.stopPropagation) e.stopPropagation();\n return(false);\n}\n\nfunction closeAllOtherTiddlers(thisTitle) {\n clearMessage();\n var place = document.getElementById("tiddlerDisplay");\n var tiddler = place.firstChild;\n var nextTiddler;\n while(tiddler) {\n nextTiddler = tiddler.nextSibling;\n if(tiddler.id) {\n if(tiddler.id.substr(0,7) == "tiddler") {\n var title = tiddler.id.substr(7);\n if(!document.getElementById("editorWrapper" + title) && title != thisTitle) {\n place.removeChild(tiddler);\n }\n }\n }\n tiddler = nextTiddler;\n }\n window.scrollTo(0,0);\n}\n\nconfig.views.wikified.toolbarCloseOthers = {text: "close others", tooltip: "Close all tiddlers except this one"};\n\nwindow.createTiddlerToolbar_orig_mptw_closeothers = window.createTiddlerToolbar;\nwindow.createTiddlerToolbar = function(title,isEditor) {\n createTiddlerToolbar_orig_mptw_closeothers(title,isEditor);\n if(true || !isEditor) {\n var theToolbar = document.getElementById("toolbar" + title);\n var lingo = config.views.wikified;\n var newButton = createTiddlyButton(theToolbar, lingo.toolbarCloseOthers.text, lingo.toolbarCloseOthers.tooltip, onClickToolbarCloseOthers);\n var newSpacer = insertSpacer(theToolbar);\n\n var secondButton = theToolbar.childNodes[3];\n\n\n theToolbar.insertBefore(newSpacer,secondButton);\n theToolbar.insertBefore(newButton,newSpacer);\n\n }\n}\n\n\n//}}}\n
/***\n|''Name:''|CloseUnsavedOnCancel|\n|''Version:''|1.0.1 (11-Oct-2005)|\n|''Source:''|MonkeyPirateTiddlyWiki (http://homes.jcu.edu.au/~ccscb/mptw/#CloseUnsavedOnCancel)|\n|''Author:''|SimonBaird|\n|''Type:''|Plugin|\n!Description\nWhen you click new tiddler then click cancel I think the new tiddler should close automatically. This plugin implements that behavious.\n\n!Issues/Todos\n* Ideally you should get the same behavious if you press escape instead of clicking cancel. Would have to do something in onEditKey()\n* I couldn't get the [[Function Hijacking]] version of this to work properly, so it's a whole function replacement\n\n!Revision History\n* 1.0.1 (11-Oct-2005)\n** Added this doco\n\n!Code\n***/\n//{{{\n\n/* original function as of 1.2.35 */\n/*\n// Event handler for clicking on toolbar save\nfunction onClickToolbarUndo(e)\n{\n if(this.parentNode.id)\n displayTiddler(null,this.parentNode.id.substr(7),1,null,null,false,false);\n return false;\n}\n*/\n\n\nwindow.onClickToolbarUndo = function(e)\n{\n var tiddlerName = this.parentNode.id.substr(7);\n if(this.parentNode.id)\n displayTiddler(null,tiddlerName,1,null,null,false,false);\n\n // === this is the extra bit ============\n if (!store.tiddlerExists(tiddlerName))\n closeTiddler(tiddlerName,false);\n //===============================\n\n return false;\n}\n\n//}}}\n
/***\n|''Name:''|CommaSeparatedTags|\n|''Version:''|1.0.2 (20-Nov-2005)|\n|''Source:''|MonkeyPirateTiddlyWiki (http://homes.jcu.edu.au/~ccscb/mptw/#CommaSeparatedTags)|\n|''Author:''|SimonBaird|\n|''Contributors:''|[[Arphen Lin]]|\n|''Type:''|Plugin|\n!Description\nThis plugin lets you use comma separated tags instead of using space separated tags with {{{[[}}} and {{{]]}}} for tags with spaces. Note that this doesn't change how the tags are stored so that it can be switched on and off without any harmful effects.\n\n!Examples\nWith this plugin installed you enter this: \n{{{tag1, tag2, tag with a space, another one}}}\ninstead of this:\n{{{tag1 tag2 [[tag with a space]] [[another one]]}}}\n\n!Revision history\n* v1.0.2 (20-Nov-2005)\n** added two enhancements by [[Arphen Lin]]\n*** if you click on a tag in the tag popup menu that already exists it is removed (ie the menu toggles tag).\n*** automatically sort your tags (can be switch off below if you don't want that)\n* v1.0.1 (11-Oct-2005)\n** added this doco\n* v0.9.x (Jul-2005)\n\n!Code\n***/\n//{{{\n\nconfig.views.editor.tagPrompt = "Type tags separated by commas above, or add existing";\n\nif (!config.plugins) config.plugins = {};\nif (!config.plugins.commaSeparatedTags) config.plugins.commaSeparatedTags = {};\n\n// change to false if you don't want them\nconfig.plugins.commaSeparatedTags.addMenuToggles = true; \nconfig.plugins.commaSeparatedTags.autoSortTags = true; \n\nfunction uncommafyTags(tagsString) {\n // converts from "foo,bar,baz qux" to "[[foo]] [[bar]] [[baz qux]]"\n var trimmed = tagsString.trim();\n if (trimmed == "" || trimmed == null) {\n return "";\n }\n else {\n if (trimmed.substring(trimmed.length-1) == ",") {\n // remove trailing comma to be nice\n trimmed = trimmed.substring(0,trimmed.length-1);\n }\n var tagsArray = trimmed.split(",");\n var result = "";\n for (var i=0;i<tagsArray.length;i++) {\n // put square brackets on all of them because readBracketedList can handle it\n // don't want leading or trailing spaces\n result = result + (i==0?"":" ") + "[[" + tagsArray[i].trim() + "]]";\n }\n return result;\n }\n}\n\nfunction commafyTags(tagsString) {\n var tagsArray = tagsString.readBracketedList();\n return tagsArray.join(", ");\n}\n\nwindow.saveTiddler_orig_mptw_commatags = window.saveTiddler;\nwindow.saveTiddler = function(title) {\n // tweak the tags text in the tags input box after editing\n var tagsBox = document.getElementById("editorTags" + title);\n tagsBox.style.display = "none"; // otherwise you see it flash up briefly\n tagsBox.value = uncommafyTags( sortTags(tagsBox.value) ); // arphen: sort tags\n saveTiddler_orig_mptw_commatags(title);\n}\n\nwindow.createTiddlerEditor_orig_mptw_commatags = window.createTiddlerEditor;\nwindow.createTiddlerEditor = function(title) {\n // tweak the tags text in the tags input box before editing\n createTiddlerEditor_orig_mptw_commatags(title);\n var tagsBox = document.getElementById("editorTags" + title);\n tagsBox.value = sortTags( commafyTags(tagsBox.value) ); // arphen: sort tags\n}\n\n// Event handler for clicking on a tag in the 'add tag' popup\nwindow.onClickAddTagPopup = function(e) {\n // here we'll just replace the whole lot\n // hopefull this won't hurt too much during upgrades\n if (!e) var e = window.event;\n var theTarget = resolveTarget(e);\n var tiddler = this.getAttribute("tiddler");\n var tag = this.getAttribute("tag");\n var tagsBox = document.getElementById("editorTags" + tiddler);\n\n //// mod\n if(tagsBox) {\n if (tagsBox.value.trim() == "") {\n tagsBox.value = tag;\n }\n else { // arphen: switch the tag\n // check if tag exists?\n tagsValue = tagsBox.value.trim();\n if( !existTag(tagsValue, tag) || !config.plugins.commaSeparatedTags.addMenuToggles){ \n // not found (or we have toggle switched off), append the tag\n tagsBox.value += ", " + tag; \n }\n else{ // found, remove the tag\n var tagsArray = tagsValue.split(",");\n // 1. clear tagsBox\n tagsBox.value = ""; \n // 2. append all tags one by one except the selected one\n for(var i=0; i<tagsArray.length; i++){ \n tagi = tagsArray[i].trim();\n if( (tagi!="") && (tagi!=tag) )\n if( tagsBox.value == "" )\n tagsBox.value = tagi;\n else\n tagsBox.value += ", " + tagi;\n }\n } \n }\n tagsBox.value = sortTags(tagsBox.value); // arphen: sort the tags\n }\n //// end mod\n\n //// replaced bit\n /*\n if(tagsBox)\n tagsBox.value += " " + String.encodeTiddlyLink(tag);\n */\n //// end replaced bit\n\n e.cancelBubble = true;\n if (e.stopPropagation) e.stopPropagation();\n return(false);\n}\n\n\n// arphen: check if tag exists in tagsString (seperated by ',')\nfunction existTag(tagsString, tag) {\n var tagsArray = tagsString.split(",");\n for(var i=0; i<tagsArray.length; i++){\n if(tagsArray[i].trim() == tag)\n return true;\n }\n return false;\n}\n\n// arphen: sort all tags in tagsString (seperated by ',')\nfunction sortTags(tagsString) {\n\n if (config.plugins.commaSeparatedTags.autoSortTags) {\n\n var tagsArray = tagsString.trim().split(',');\n \n if(tagsArray.length <= 1){\n result = tagsString.trim();\n }else{ \n for(var i=0; i<tagsArray.length; i++)\n tagsArray[i] = tagsArray[i].trim();\n result = tagsArray.sort().join(', ');\n }\n return result;\n }\n else {\n return tagsString;\n }\n}\n\n\n//}}}\n
Includes papers in segmentation of Video data, segmentation of 3-D range data, motion computations from sequence of range data and non-rigid and articulated motion.\n<<alias ME "[[Bikash Sabata|http://www.sabata.net/bikash]]">>\n<<alias MG "[[Moisés Goldszmidt|http://ai.stanford.edu/~moises/]]">>\n<<alias JKA "[[J.K. Aggarwal|http://www.ece.utexas.edu/projects/cvrc/aggarwaljk/index.htm]]">>\n# <<pub "Fusion of Multiple Cues for Video Segmentation" "paper/fusion.pdf" "ME,MG" "Proceedings of the Second International Conference on Information Fusion (FUSION'99), pp 696-714, California" "July 1999" >>\n# <<pub "Non-Rigid Motion Analysis - Articulated and Elastic Motion (Review)" " " "JKA,Q. Cai,W. Liao,ME" "Computer Vision and Image Understanding, Vol. 70, No. 2, pp. 142-156" "May 1998" >>\n# <<pub "Feature Correspondence and Motion Estimation from a Sequence of Range Images" " " "ME,JKA" "Computer Vision and Image Understanding, Vol. 63, No. 2, pp. 232-250" "March 1996" >>\n# <<pub "Surface Correspondence and Motion Computation from a Sequence of Range Images" " " "ME,JKA" "Proceedings of IEEE Int. Conf. on Robotics and Automation, San Diego, CA., pp 1052-1059" "May 8-13 1994" >>\n# <<pub "Convergence of Fuzzy Pyramid Algorithms" " " "ME,F. Arman,JKA" "Journal of Mathematical Imaging and Vision, 4, pp 291-302" 1994 >>\n# <<pub "Segmentation of 3-D Range Images Using Pyramid Data Structures" " " "ME,F. Arman,JKA" "Computer Vision and Image Understanding, Vol. 57, No. 3, pp. 373 - 387" "May 1993" >>\n# <<pub "Hypergraph Based Feature Matching in a Sequence of Range Images" " " "ME,JKA" "International Workshop on Time-Varying Image Processing and Moving Object Recognition, Florence, Italy" "June. 1993" >>\n# <<pub "Correspondence of Surfaces in a Sequence of Range Images for Motion Estimation and Tracking" " " "ME,JKA" "Proceedings of IAPR Workshop on Machine Vision Applications, pp. 385-388, Tokyo, Japan" "Dec. 1992" >>\n# <<pub "Estimation of Motion from a Pair of Range Images: A Review" " " "ME,JKA" "Journal of Image Understanding. Vol. 54, No. 3, pp. 309 - 324" "Nov. 1991" >>\n# <<pub "Segmentation of 3-D Range Images Using Pyramidal Data Structures" " " "F. Arman,ME,JKA" "Proc. of International Conference in Computer Vision, Osaka, Japan, pp. 662 - 666" "Dec 1990" >>\n# <<pub "Motion from a Sequence of Range Images" " " "ME,JKA" "Proc. of IEEE Intl. Workshop on Intell. Motion Control, Istanbul, Turkey, pp. IP1 - IP10" "Aug 1990" >>\n# <<pub "Hierarchical Segmentation of 3-D Range Images" " " "ME,F. Arman,JKA" "Proc. of 1989 IEEE International Conference on Systems Man and Cybernetics, Cambridge, MA, pp. 476-483" "Nov. 1989" >>\n# <<pub "Motion estimation using surface correspondences" " " "ME,N. Nandakumar,JKA" "Image Understanding and Machine Vision, 1989 Technical Digest Series, vol. 14, pp.50- 54" "June 1989" >>\n# <<pub "Calibration of Thermal Images of Integrated Circuit Chips" " " "ME,J. A. Pearce" "Proc. of MIDCON 88, pp.151-154" "Aug. 1988" >>\n# <<pub "Classification of Complex Cell Images Using Pyramid Node Linking" " " "F. Arman,ME,J. A. Pearce" "Proc. of SPIE; Medical Imaging II, vol.SPIE 914, pp. 476-483" "June 1988">>\n
/***\n/***\n|''Name:''|ConfirmDelete|\n|''Author:''|[[Clint Checketts]]|\n|''Source:''|Posted to TiddlyWikiDev?|\n|''Type:''|Plugin|\n!Description\nAdds an option in AdvancedOptions which enables an "Are you sure..." confirmation on every delete.\n!Code\n***/\n//{{{\nconfig.options.chkConfirmDelete= true;\nconfig.shadowTiddlers.AdvancedOptions += "\sn<<option chkConfirmDelete>> ConfirmBeforeDeleting";\n\nwindow.deleteTiddler_orig_confirmDelete = window.deleteTiddler;\nwindow.deleteTiddler= function(title) {\n var deleteIt = true;\n if (config.options.chkConfirmDelete) {\n deleteIt = confirm("Are you sure you want to delete " + title + "?");\n }\n if (deleteIt) {\n deleteTiddler_orig_confirmDelete(title);\n }\n}\n//}}}\n
7901 Henry Ave B109\nPhiladelphia, PA 19128\n \nPhone: 703 236 3572\nemail: bikash@sabata.net
[[Welcome]]\n[[Research]]\n[[Resume]]\n
Includes papers in Quality of Service in Distributed systems and distributed applications, Adaptive Systems, Statistical Modeling of Systems, Dynamic Resource Allocation, Auction protocols for Resource Allocations, ~QoS adaptive applications, Distributed Multimedia systems and Transport Protocols for reliable multicast.\n\n<<alias ME "[[Bikash Sabata|http://www.sabata.net/bikash]]">>\n<<alias MG "[[Moisés Goldszmidt|http://ai.stanford.edu/~moises/]]">>\n<<alias CB "[[Craig Boutilier|http://www.cs.toronto.edu/~cebly/]]">>\n<<alias JS "[[Jaideep Srivastava|http://www.cs.umn.edu/people/faculty.php?user=srivasta]]">>\n# <<pub "Multisource Evidence Fusion for Cyber-Situation Assessment" "paper/spie2006.pdf" "ME, Chester Ornes" "Multisensor, Multisource Information Fusion Architectures Algorithms and Applications: SPIE Symposium on Defense and Security, Orlando, Florida" 2006>>\n# <<pub "Evidence Aggregation in Hierarchical Evidential Reasoning" "paper/uai05.pdf" "ME" "UAI Applications Workshop, UAI 2005 , Edinburgh" 2005>>\n# <<pub "QoS-Aware Admission Control and Dynamic Resource Provisioning Framework in Ubiquitous\nMultimedia Computing Environments" "paper/wonjun.lee-sc2004.pdf" "Wonjun Lee,ME,JS" "The Journal of Supercomputing, 32(1), pp 25-50" 2005 >>\n# <<pub "Dynamic Server Placements in MANETS" " " "Budhaditya Deb,Alex Polyscher,Micheal Littman,ME,Ritu Chadha" "MILCOM 2005, Atlantic City, NJ" 2005 >>\n# <<pub "Research Issues in Applying Pattern Recognition and Statistical Models to System Management and\nModeling" "paper/modelAppl.pdf" "MG,ME" "Proceedings of First Workshop on Algorithms and Architectures for self-managing systems, San Diego" 2003 >>\n# <<pub "Adaptive QoS Negotiation Framework for Resource Configuration in Ubiquitous Computing Environments" " " "Wonjun Lee,ME" "ICOIN, Lecture Notes in Computer Science (LNCS-2662), Eds. Hyun-Kook Kahng" 2003 >>\n# <<pub "A QoS-Aware Framework for Resource Configuration and Reservation in Ubiquitous Computing Environments" "paper/wlee-icoin2003.pdf" "Wonjun Lee,ME" "Proceedings of Information Networking, Networking Technologies for Enhanced Internet Services International Conference, ICOIN 2003, Cheju Island, Korea, February 12-14" 2003 >>\n# <<pub "On The Quantification of e-Business Capacity" "paper/eCommerce.pdf" "MG,Derek Palma,ME" "Proceedings of Electronic Commerce 2001, Tampa, Florida, Oct 14--17" 2001>>\n# <<pub "MAESTRO: Conductor of Multimedia Analysis Technologies" "paper/maestro_paper.pdf" "Zeev Rivlin,Robert Bolles,Douglas Appelt,Adam Cheyer,Dilek ~Hakkani-Tur,David Israel,Luc Julia,David Martin,Greg Myers,Ken Nitz,ME,Ananth Sankar,Elizabeth Shriberg,Gokhan Tur" "Communications of ACM, Volume 43, Number 2, pp 57-63" "Feb 2000">>\n# <<pub "Admission Control and QoS Negotiations for Soft-Real Time Applications" "paper/adm_cntl.pdf" "Wonjun Lee,ME" "Proceedings of the IEEE International Conference on Multimedia Computing and Systems, Vol. 1, pp: 147-152, Florence, Italy" 1999 >>\n# <<pub "Sequential Auctions for the Allocation of Resources with Complementarities" "paper/auctions.pdf" "CB,MG,ME" "Proceedings of the International Joint Conference in AI (IJCAI), pp: 527-523" 1999 >>\n# <<pub "Continuous Value Function Approximation for Sequential Bidding Policies" "paper/uai.pdf" "CB,MG,ME" "Proceeding of UAI-99, Stockholm, Sweden, July 30 - Aug 1" 1999 >>\n# <<pub "Resource Allocation Using Sequential Auctions" " " "CB,MG,Claire Monteleoni,ME" "Agent Mediated Electronic Commerce II, Towards Next-Generation Agent-Based Electronic Commerce Systems, Alexandros Moukas, Carles Sierra, Fredrik\nYgge (Eds.), Lecture Notes in Computer Science 1788, pp 131-152, Springer, ISBN 3-540-67773-9" 2000 >>\n# <<pub "Adaptive QoS Support for Distributed, Java-based Applications" " " "S. Chatterjee,M. Brown,ME" "Proceedings of the IEEE International Symposium on Object-Oriented Real-Time Distributed Computing (ISORC), St-Malo, France" "May 1999">> \n# <<pub "Dynamic Adaptation of Video for Transmission Under Resource Constraints" "paper/icip.pdf" "ME,J. Sydir,S. Chatterjee" "Proceedings of ICIP '98 Chicago, Il., Oct 4-7" 1998 >>\n# <<pub "Providing End-to-End QoS Assurances in a CORBA-Based System" "paper/isorc98.pdf" "J. Sydir,S. Chatterjee,ME" "Proceedings of ISORC '98, Kyoto, Japan, pp 53-61" "April 1998" >>\n# <<pub "Graceful Adaptation of Distributed Soft Real-Time Applications" "paper/chatterjee98graceful.pdf" "M. Brown,S. Chatterjee,ME" "Proceedings of the 19th IEEE RealTime Systems Symposium (RTSS'98), Madrid, Spain" "December 1998" >>\n# <<pub Modeling applications for adaptive QoS-based resource management" " " "S. Chatterjee,J. Sydir,ME,T. Lawrence" "Proceedings of High Assurance Systems Engineering Workshop, Washington D.C., pp 194-201" "Aug. 1997">> \n# <<pub "Global Resource Management" " " "M. Davis,ME,J. Sydir" "Proceedings of 3rd International Command and Control Research and Technology Symposium, Washington D.C." "June 17-20, 1997">>\n# <<pub "End-to-end QoS driven resource management for the next generation Internet" " " "S. Chatterjee,ME,J. Sydir" "Proceedings of the Workshop on Research Directions for the Next Generation Internet, Washington D.C." "May 12-14, 1997">>\n# <<pub "Taxonomy for QoS Specifications" "paper/words.pdf" "ME,S. Chatterjee,M. Davis,J. Sydir,T. Lawrence" "Proceedings of IEEE Computer Society 3rd International Workshop on Object-oriented Real-time Dependable Systems(WORDS '97), Newport Beach, California, pp 100-107" "Feb. 1997" >>\n# <<pub "TRM: Transport Protocol for Reliable Multicast" "paper/isted.pdf" "ME,M. Brown,B. Denny,C.H. Heo" "Proceedings of the International Conference on Networks, Orlando, Florida, pp 143-146" "Jan. 1996">> \n
|1988 - 1993|''The University of Texas at Austin'' Ph.D. in Electrical and Computer Engineering|\n|1986 - 1987|''The University of Texas at Austin'' M.S. in Electrical and Computer Engineering|\n|1982 - 1986|''Indian Institute of Technology, Bombay'' B.Tech in Electrical Engineering|
/***\n|''Name:''||\n|''Version:''|1.0.1 (11-Oct-2005)|\n|''Source:''|MonkeyPirateTiddlyWiki (http://homes.jcu.edu.au/~ccscb/mptw/#FocusTweak)|\n|''Author:''|SimonBaird|\n|''Type:''|Plugin|\n!Description\nA convenience for creating a new tiddler. It automatically focuses and selects the edit box content you probably want to change.\n\n!Revision History\n* 1.0.1 (11-Oct-2005)\n** added this doco\n\n!Code\n***/\n//{{{\n\nwindow.createTiddlerEditor_orig_mptw_focustweak = window.createTiddlerEditor;\nwindow.createTiddlerEditor = function(title)\n{\n // open the window\n createTiddlerEditor_orig_mptw_focustweak(title);\n\n // get the input boxes\n var theTitleBox = document.getElementById("editorTitle" + title);\n var theBodyBox = document.getElementById("editorBody" + title);\n\n // tweak the focus\n if (title == 'New Tiddler') {\n theTitleBox.focus();\n theTitleBox.select();\n }\n else if (theBodyBox.value == config.views.editor.defaultText.format([title]) ||\n theBodyBox.value == config.views.editor.defaultText.format(["New Tiddler"])) {\n theBodyBox.focus();\n theBodyBox.select();\n }\n else {\n theBodyBox.focus();\n }\n}\n\n//}}}\n
/* Style created by Nathan Bowers http://shared.snapgrid.com/gtd_tiddlywiki.html\n Imported and improved upon by Clint Checketts\nchecketts [at] gmail -dot- com */\n\n#mainMenu br,#mainMenu hr {\n display:none;\n}\n\n*{\n margin: 0;\n padding: 0;\n}\nbody {\n background: #464646 url('http://shared.snapgrid.com/images/tiddlywiki/bodygradient.png') repeat-x top fixed;\n color: #000;\n font: 13px/125% "Lucida Grande", "Trebuchet MS", "Bitstream Vera Sans", Verdana, Helvetica, sans-serif;\n _text-align: center;\n}\n#contentWrapper {\n position: relative;\n margin: 0 auto;\n padding: 0;\n border: 1px black;\n width: 775px;\n _width: 770px; /* CSS UNDERSCORE HACK FOR PROPER WIN/IE DISPLAY */\n _text-align: left; /* CSS UNDERSCORE HACK FOR PROPER WIN/IE DISPLAY */ \n}\n#header{\n color: #fff;\n padding: 20px 20px 10px 0;\n}\n#mainMenu {\n position: static;\n line-height: 166%;\n background: #600;\n border-right: 3px solid #500;\n margin: 1em 0 0 0;\n width: 215px;\n padding: 0;\n text-align: left;\n}\n#sidebar {\n position: static;\n margin: 2em 0 0 0;\n float: left;\n clear: left;\n color: #000000;\n width: 218px;\n}\n#displayArea {\n float: right;\n margin: 0 2em 0 0;\n _margin: 0;\n width: 520px;\n _width: 545px; /* CSS UNDERSCORE HACK FOR PROPER WIN/IE DISPLAY */\n}\n#messageArea\n{\n font-size: 13px;\n font-weight: bold;\n padding: 5px;\n width: 41em;\n margin: 5px 0px;\n background: #ffe72f;\n border-right: 3px solid #da1;\n border-bottom: 3px solid #a80;\n text-align: center;\n display: none;\n}\na:link, a:visited, a:hover, a:active {\n text-decoration: none;\n}\n\n/* HEADER ========================================================== */\n#titleLine{\n background: transparent;\n margin: 0;\n padding: 0;\n}\n#siteTitle {\n font-size: 30px;\n}\n#siteSubtitle {\n font-size: 13px;\n padding-left: 10px;\n}\n#titleLine a {\n color: #cf6;\n}\n/* SIDEBARS ========================================================== */\n#mainMenu a {\n color: #fff !important;\n background: #700;\n display: block;\n padding: 0 5px 0 10px;\n height: 22px;\n line-height: 22px;\n border-bottom: 1px solid #500;\n border-top: 1px solid #900;\n text-transform: capitalize;\n}\n#mainMenu a.tiddlyLink:hover, #mainMenu a.button:hover{\n background: #b00 !important;\n}\n#sidebarTabs {\n background: transparent;\n padding: 8px 0 0 10px;\n}\n#sidebarTabs a {\n color: #fff;\n padding: 2px 8px 1px 8px;\n height: 22px;\n}\n#sidebarTabs a:hover {\n background: #000;\n color: #fff;\n}\n#sidebarTabs a:active {\n color: #000000;\n}\n#sidebarContent{\n padding: 0 10px 10px 10px;\n font-size: 11px;\n clear: both;\n}\n#sidebarContent br{\n display: none;\n}\n.sidebarSubHeading {\n padding: 8px 0 0 0;\n display: block;\n width: 100%;\n color: #000;\n}\n#sidebarContent a {\n color: #fff;\n display: block;\n margin: 1px 0 1px 5px;\n padding: 0;\n width: 100%;\n}\n#sidebarContent a:hover {\n color: #fff;\n background: #000;\n}\n#licensePanel {\n padding: 0px 10px;\n font-size: 11px;\n}\n#licensePanel a {\n color: #960;\n display: block;\n margin-top: 10px;\n}\n#licensePanel a:hover {\n color: #fff;\n}\n#licensePanel a:active {\n color: #fff;\n}\n#sidebarOptions {\n background: #eeb !important;\n border-right: 3px solid #bb8;\n color: #b4c675 !important;\n padding: 5px 0;\n}\n#sidebarOptions a {\n color: #700 !important;\n display: block;\n padding: 0 !important;\n margin: 3px 10px;\n}\n#sidebarOptions a:hover, #sidebarOptions a:active {\n color: #fff !important;\n background: #700 !important;\n}\n#sidebarOptions input {\n margin: 2px 10px;\n border: 1px inset #333;\n}\n#sidebarOptions .sliderPanel {\n display: none;\n background: #fff;\n color: #000;\n padding: 5px 10px;\n font-size: 11px;\n}\n.sliderPanel div{\n margin: 5px 0;\n}\n#sidebarOptions .sliderPanel a:link, #sidebarOptions .sliderPanel a:visited {\n color: #17b !important;\n font-weight: normal;\n margin: 0;\n display: inline;\n}\n#sidebarOptions .sliderPanel a:hover, #sidebarOptions .sliderPanel a:active {\n color: #fff !important;\n background: #000;\n}\n.optionsText {\n margin: 2px 0;\n}\n#tabTimeline {\n font-weight: bold;\n display: inline;\n background: #960;\n border-right: 1px solid #740;\n}\n#popup{\n background-color: #cf6;\n color: #000;\n}\n\n.tabset{\n border-right: 3px solid #bb8;\n background-color: #eeb;\n}\n#contentWrapper a.tab {\n font-weight: bold;\n display: inline;\n margin: 0px 2px; \n border-right:1px solid #aaa;\n font-size: 12px;\n color: #fff !important;\n text-decoration: none;\n}\n#contentWrapper a.tab:hover {\n background: #000 !important;\n}\n#contentWrapper a.tabSelected {\n background-color: #960 !important;\n border-right: 1px solid #740;\n padding: 4px 4px 2px 4px;\n}\n#contentWrapper a.tabUnselected {\n background-color: #660 !important;\n border-right: 1px solid #440;\n padding: 4px 4px 0px 4px;\n color: #fff !important;\n}\n/*===================================================================*/\n/*=====================================================================*/\n#sidebarTabs{\n margin: 0;\n padding: 0;\n}\n#contentWrapper .tabContents {\n background-color: #960;\n border-bottom: solid #520 2px;\n border-right: 3px #740 solid;\n}\n#contentWrapper .tabContents a.tiddlyLink, #contentWrapper .tabContents a.button{\n height: auto;\n margin: 0 0 0 1em !important;\n padding: 0 !important; \n background-color: transparent;\n color: #fff !important;\n font-weight: normal;\n text-decoration: none;\n}\n#contentWrapper .tabContents a.tiddlyLink:hover,#contentWrapper .tabContents a.button:hover{\n background-color: #000;\n}\n#contentWrapper .txtMoreTab .tabset{\n border: 0;\n background-color: transparent;\n}\n#contentWrapper .txtMoreTab a.tabUnselected {\n background-color: #b00 !important;\n padding: 2px 4px 0px 4px;\n color: #fff !important;\n border-right: 1px solid #900;\n}\n#contentWrapper .txtMoreTab a.tabSelected {\n background-color: #700 !important;\n padding: 2px 4px 2px 4px;\n color: #fff !important;\n border-right: 1px solid #500;\n}\n#contentWrapper .txtMoreTab a.tab:hover {\n background-color: #000 !important;\n border-right: 1px solid #500;\n}\n.txtMoreTab .tabContents {\n background-color: #700 !important;\n border-right: 3px solid #500 !important;\n border-bottom: 3px solid #500 !important;\n color: #fff;\n font-weight: bold;\n}\n.txtMoreTab .tabContents a{\n font-weight: normal;\n background-color: transparent !important;\n}\n.txtMoreTab .tabContents a:hover{\n background-color: #000 !important;\n}\n#sidebar popup{\n padding: 0;\n}\n\n#contentWrapper .viewer #popup *{\n color: #000 !important;\n}\n#contentWrapper #popup a{\n color: #000 !important;\n margin: 0 !important;\n padding: 0;\n}\n#contentWrapper #popup hr{\n border-top: solid 1px #000;\n border-left: 0;\n border-right: 0;\n border-bottom: none;\n height: 1px;\n color: #000;\n margin: 5px 0 !important;\n}\n#contentWrapper #popup a:hover{\n background-color: #ef9 !important;\n}\n\n\n\n\n\n\n\n\n/* TIDDLER DISPLAY/EDIT SPACE ============================================= */\n.tiddler {\n margin: 0 0 10px 0;\n padding: 0 15px;\n width: 99%;\n border-right: 3px solid #aaa;\n border-bottom: 3px solid #555;\n background: #fff;\n}\n#displayArea .tiddlyLinkExisting {\n font-weight: bold;\n text-decoration: none;\n}\n#displayArea .tiddlyLinkNonExisting {\n font-style: italic;\n text-decoration: none;\n}\n#displayArea .externalLink {\n text-decoration: underline;\n}\n.title {\n font-size: 1.5em;\n padding: 0 0 0 0;\n font-weight: bold;\n display: block;\n color: #900;\n}\n.toolbar {\n font-weight: normal;\n font-size: 11px;\n visibility: hidden;\n text-align: right;\n padding: 5px 0;\n}\n.toolbar a {\n padding: 1px 5px;\n color: #000 !important;\n text-decoration: none;\n border: 1px outset #cf6;\n background: #cf6;\n}\n.toolbar a:hover {\n background: #ef9 !important;\n}\n.toolbar a:active {\n background: #ff0 !important;\n}\n.viewer .tabset{\n background: transparent;\n border: 0;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n.viewer a.button{\n background-color: transparent !important;\n color: #700 !important;\n}\n\n.viewer {\n line-height: 140%;\n}\n.viewer a:link, .body a:visited {\n color: #15b;\n text-decoration: underline;\n}\n.viewer a:hover {\n color: #fff;\n background: #000;\n}\n.viewer blockquote {\n border-left: 3px solid #777;\n margin: 5px;\n padding: 5px;\n}\n.viewer ul {\n padding-left: 30px;\n}\n.viewer ol {\n padding-left: 30px;\n}\nol\n{ \n list-style-type: decimal;\n}\nol ol\n{ \n list-style-type: lower-alpha;\n}\nol ol ol\n{ \n list-style-type: lower-roman;\n}\n.viewer ul, .viewer ol, .viewer p {\n margin: 5px 0 12px 0;\n}\n.viewer li {\n margin: 3px 0;\n}\n.viewer h2,h3,h4,h5,h6 {\n font-weight: bold;\n background: #eee;\n padding: 2px 10px;\n margin: 5px 0;\n}\n.viewer h2 {\n font-size: 1.3em;\n}\n.viewer h3 {\n font-size: 1.2em;\n}\n.viewer h4 {\n font-size: 1.1em;\n}\n.viewer h5 {\n font-size: 1em;\n}\n.viewer h6 {\n font-size: .9em;\n}\n.viewer table {\n border-collapse: collapse;\n border: 2px solid #303030;\n font-size: 11px;\n margin: 10px 0;\n}\n.viewer th {\n background: #eee;\n border: 1px solid #aaa;\n padding: 3px;\n}\n.viewer td {\n border: 1px solid #aaa;\n padding: 3px;\n}\n.viewer caption {\n padding: 3px;\n}\n.viewer hr {\n border: none;\n border-top: dotted 1px #777;\n height: 1px;\n color: #777;\nmargin: 7px 0;\n}\n.body\n{\n margin: 5px 0 15px 0;\n padding: 5px 0;\n border-top: 1px solid #ccc;\n}\n.highlight {\n color: #000;\n background: #ffe72f;\n}\n.editor {\n font-size: 8pt;\n color: #402C74;\n font-weight: normal;\n padding: 10px 0;\n}\n.editor input, .editor textarea {\n display: block;\n font: 10px/130% "Andale Mono", "Monaco", "Lucida Console", "Courier New", monospace;\n margin: 0 0 10px 0;\n border: 1px inset #333;\n padding: 2px 0;\n}\n.editor textarea {\n height: 500px;\n}\ninput:focus, textarea:focus\n{\n background: #ffe;\n border: 1px solid #000 !important;\n}\n.editorFooter, .footer{\n font-size: 10px;\n}\n.editorFooter a.button:hover, .footer a.button:hover{\n color: #fff;\n}\n#storeArea, #copyright, .site_description {\n display: none;\n}\n#floater {\n background: #df9;\n border: 3px solid #999;\n color: #df9;\n position: absolute;\n left: -99999999px;\n top: -99999999px;\n width: 1px;\n display: none;\n}\n\n@media print{\n*\n{\n margin: 0;\n padding: 0;\n}\nbody {\n background: #fff;\n color: #000;\n width: 2.5in;\n height: 4.7in;\n font-size: 6.2pt;\n font-family: "Lucida Grande", "Bitstream Vera Sans", Helvetica, Verdana, Arial, sans-serif;\n}\nimg {\n max-width: 2.2in;\n max-height: 4.3in;\n}\n#header, #side_container, #storeArea, #copyright, .toolbar, #floater, #messageArea, .save_accesskey, .site_description\n{\n display: none;\n}\n#tiddlerDisplay, #displayArea\n{\n display: inline;\n}\n.tiddler {\n margin: 0 0 2em 0;\n border-top: 1px solid #000;\n page-break-before: always;\n}\n.tiddler:first-child {\n page-break-before: avoid;\n}\n.title {\n font-size: 1.6em;\n font-weight: bold;\n margin-bottom: .3em;\n padding: .2em 0;\n border-bottom: 1px dotted #000;\n}\np, blockquote, ul, li, ol, dt, dd, dl, table\n{\n margin: 0 0 .3em 0;\n}\nh1, h2, h3, h4, h5, h6\n{\n margin: .2em 0;\n} \nh1\n{\n font-size: 1.5em;\n}\nh2\n{\n font-size: 1.3em;\n}\nh3\n{\n font-size: 1.25em;\n}\nh4\n{\n font-size: 1.15em;\n}\nh5\n{\n font-size: 1.1em;\n}\nblockquote\n{\n margin: .6em;\n padding-left: .6em;\n border-left: 1px solid #ccc;\n}\nul\n{\n list-style-type: circle;\n}\nli\n{\n margin: .1em 0 .1em 2em;\n line-height: 1.4em; \n}\ntable\n{\n border-collapse: collapse;\n font-size: 1em;\n}\ntd, th\n{\n border: 1px solid #999;\n padding: .2em;\n}\nhr {\n border: none;\n border-top: dotted 1px #777;\n height: 1px;\n color: #777;\n margin: .6em 0;\n}}
<html>\n<head>\n <title>Bikash Sabata's Resume</title>\n\n <o:smarttagtype namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="country-region"></o:smarttagtype><o:smarttagtype namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="PlaceName"></o:smarttagtype>\n <o:smarttagtype namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="PlaceType"></o:smarttagtype><o:smarttagtype namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="place"></o:smarttagtype><o:smarttagtype namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="PostalCode"></o:smarttagtype><o:smarttagtype namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="State"></o:smarttagtype><o:smarttagtype namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="City"></o:smarttagtype><o:smarttagtype namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="Street"></o:smarttagtype><o:smarttagtype namespaceuri="urn:schemas-microsoft-com:office:smarttags" name="address"></o:smarttagtype><!--[if gte mso 9]><xml> <o:DocumentProperties> <o:Author>Bikash Sabata</o:Author> <o:LastAuthor>Bikash Sabata</o:LastAuthor> <o:Revision>17</o:Revision> <o:TotalTime>13</o:TotalTime> <o:Created>2005-08-07T18:36:00Z</o:Created> <o:LastSaved>2005-08-08T12:59:00Z</o:LastSaved> <o:Pages>1</o:Pages> <o:Words>2120</o:Words> <o:Characters>12085</o:Characters> <o:Company>IET</o:Company> <o:Lines>100</o:Lines> <o:Paragraphs>28</o:Paragraphs> <o:CharactersWithSpaces>14177</o:CharactersWithSpaces> <o:Version>11.6408</o:Version> </o:DocumentProperties> </xml><![endif]--><!--[if gte mso 9]><xml> <w:WordDocument> <w:SpellingState>Clean</w:SpellingState> <w:GrammarState>Clean</w:GrammarState> <w:DefaultTableStyle Number="155">Table Theme</w:DefaultTableStyle> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:Compatibility> <w:UseFELayout/> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" LatentStyleCount="156"> </w:LatentStyles> </xml><![endif]--><!--[if !mso]><object classid="clsid:38481807-CA0E-42D2-BF39-B33AF135CC4D" id=ieooui></object> <style> st1\s:*{behavior:url(#ieooui) } </style> <![endif]-->\n\n <style>\n<!--\n/* Font Definitions */\n@font-face\n{font-family:Wingdings;\npanose-1:5 0 0 0 0 0 0 0 0 0;\nmso-font-charset:2;\nmso-generic-font-family:auto;\nmso-font-pitch:variable;\nmso-font-signature:0 268435456 0 0 -2147483648 0;}\n@font-face\n{font-family:Batang;\npanose-1:2 3 6 0 0 1 1 1 1 1;\nmso-font-alt:\sBC14\sD0D5;\nmso-font-charset:129;\nmso-generic-font-family:auto;\nmso-font-format:other;\nmso-font-pitch:fixed;\nmso-font-signature:1 151388160 16 0 524288 0;}\n@font-face\n{font-family:Verdana;\npanose-1:2 11 6 4 3 5 4 4 2 4;\nmso-font-charset:0;\nmso-generic-font-family:swiss;\nmso-font-pitch:variable;\nmso-font-signature:536871559 0 0 0 415 0;}\n@font-face\n{font-family:"Trebuchet MS";\npanose-1:2 11 6 3 2 2 2 2 2 4;\nmso-font-charset:0;\nmso-generic-font-family:swiss;\nmso-font-pitch:variable;\nmso-font-signature:647 0 0 0 159 0;}\n@font-face\n{font-family:"\s@Batang";\npanose-1:0 0 0 0 0 0 0 0 0 0;\nmso-font-charset:129;\nmso-generic-font-family:auto;\nmso-font-format:other;\nmso-font-pitch:fixed;\nmso-font-signature:1 151388160 16 0 524288 0;}\n/* Style Definitions */\np.MsoNormal, li.MsoNormal, div.MsoNormal\n{mso-style-parent:"";\nmargin:0in;\nmargin-bottom:.0001pt;\ntext-align:left;\nmso-pagination:widow-orphan;\nfont-size:12.0pt;\nfont-family:"Trebuchet MS";\nmso-fareast-font-family:Batang;\nmso-bidi-font-family:"Times New Roman";\ncolor:black;}\nh1\n{mso-style-next:Normal;\nmargin-top:12.0pt;\nmargin-right:0in;\nmargin-bottom:3.0pt;\nmargin-left:0in;\ntext-align:left;\nmso-pagination:widow-orphan;\npage-break-after:avoid;\nmso-outline-level:1;\nfont-size:16.0pt;\nfont-family:"Trebuchet MS";\nmso-bidi-font-family:Arial;\ncolor:black;\nmso-font-kerning:16.0pt;\nfont-weight:bold;}\nh2\n{mso-style-next:Normal;\nmargin-top:12.0pt;\nmargin-right:0in;\nmargin-bottom:3.0pt;\nmargin-left:0in;\ntext-align:left;\nmso-pagination:widow-orphan;\npage-break-after:avoid;\nmso-outline-level:2;\nfont-size:14.0pt;\nfont-family:"Trebuchet MS";\nmso-bidi-font-family:Arial;\ncolor:black;\nfont-weight:normal;}\nh3\n{mso-style-next:Normal;\nmargin-top:12.0pt;\nmargin-right:0in;\nmargin-bottom:3.0pt;\nmargin-left:0in;\ntext-align:left;\nmso-pagination:widow-orphan;\npage-break-after:avoid;\nmso-outline-level:3;\nfont-size:13.0pt;\nfont-family:"Trebuchet MS";\nmso-bidi-font-family:Arial;\ncolor:black;\nfont-weight:normal;}\nh4\n{mso-style-next:Normal;\nmargin-top:12.0pt;\nmargin-right:0in;\nmargin-bottom:3.0pt;\nmargin-left:0in;\ntext-align:left;\nmso-pagination:widow-orphan;\npage-break-after:avoid;\nmso-outline-level:4;\nfont-size:14.0pt;\nfont-family:"Trebuchet MS";\ncolor:black;\nfont-weight:normal;}\nh5\n{mso-style-next:Normal;\nmargin-top:12.0pt;\nmargin-right:0in;\nmargin-bottom:3.0pt;\nmargin-left:0in;\ntext-align:left;\nmso-pagination:widow-orphan;\nmso-outline-level:5;\nfont-size:13.0pt;\nfont-family:"Trebuchet MS";\ncolor:black;\nfont-weight:normal;}\nh6\n{mso-style-next:Normal;\nmargin-top:12.0pt;\nmargin-right:0in;\nmargin-bottom:3.0pt;\nmargin-left:0in;\ntext-align:left;\nmso-pagination:widow-orphan;\nmso-outline-level:6;\nfont-size:11.0pt;\nfont-family:"Trebuchet MS";\ncolor:black;\nfont-weight:normal;}\na:link, span.MsoHyperlink\n{color:#0066CC;\ntext-decoration:underline;\ntext-underline:single;}\na:visited, span.MsoHyperlinkFollowed\n{color:#999999;\ntext-decoration:underline;\ntext-underline:single;}\np\n{mso-margin-top-alt:auto;\nmargin-right:0in;\nmso-margin-bottom-alt:auto;\nmargin-left:0in;\ntext-align:justify;\ntext-justify:inter-ideograph;\nmso-pagination:widow-orphan;\nfont-size:12.0pt;\nfont-family:"Trebuchet MS";\nmso-fareast-font-family:Batang;\nmso-bidi-font-family:"Times New Roman";\ncolor:black;}\nspan.SpellE\n{mso-style-name:"";\nmso-spl-e:yes;}\n@page Section1\n{size:8.5in 11.0in;\nmargin:1.0in 1.25in 1.0in 1.25in;\nmso-header-margin:.5in;\nmso-footer-margin:.5in;\nmso-paper-source:0;}\ndiv.Section1\n{page:Section1;}\n/* List Definitions */\n@list l0\n{mso-list-id:14039806;\nmso-list-template-ids:-1231289574;}\n@list l0:level1\n{mso-level-tab-stop:.5in;\nmso-level-number-position:left;\ntext-indent:-.25in;}\n@list l0:level2\n{mso-level-tab-stop:1.0in;\nmso-level-number-position:left;\ntext-indent:-.25in;}\n@list l0:level3\n{mso-level-tab-stop:1.5in;\nmso-level-number-position:left;\ntext-indent:-.25in;}\n@list l0:level4\n{mso-level-tab-stop:2.0in;\nmso-level-number-position:left;\ntext-indent:-.25in;}\n@list l0:level5\n{mso-level-tab-stop:2.5in;\nmso-level-number-position:left;\ntext-indent:-.25in;}\n@list l0:level6\n{mso-level-tab-stop:3.0in;\nmso-level-number-position:left;\ntext-indent:-.25in;}\n@list l0:level7\n{mso-level-tab-stop:3.5in;\nmso-level-number-position:left;\ntext-indent:-.25in;}\n@list l0:level8\n{mso-level-tab-stop:4.0in;\nmso-level-number-position:left;\ntext-indent:-.25in;}\n@list l0:level9\n{mso-level-tab-stop:4.5in;\nmso-level-number-position:left;\ntext-indent:-.25in;}\n@list l1\n{mso-list-id:248583584;\nmso-list-template-ids:-1881225008;}\n@list l1:level1\n{mso-level-number-format:image;\nlist-style-image:url("resume_files/image001.gif");\nmso-level-text:\sF076;\nmso-level-tab-stop:.5in;\nmso-level-number-position:left;\ntext-indent:-.25in;\nmso-ansi-font-size:10.0pt;\nfont-family:Wingdings;}\n@list l1:level2\n{mso-level-number-format:image;\nlist-style-image:url("resume_files/image002.gif");\nmso-level-text:\sF0D8;\nmso-level-tab-stop:.75in;\nmso-level-number-position:left;\nmargin-left:.75in;\ntext-indent:-.25in;\nmso-ansi-font-size:10.0pt;\nfont-family:Wingdings;}\n@list l1:level3\n{mso-level-number-format:image;\nlist-style-image:url("resume_files/image003.gif");\nmso-level-text:\sF0A7;\nmso-level-tab-stop:1.0in;\nmso-level-number-position:left;\nmargin-left:1.0in;\ntext-indent:-.25in;\nmso-ansi-font-size:10.0pt;\nfont-family:Wingdings;}\n@list l1:level4\n{mso-level-number-format:bullet;\nmso-level-text:\sF0B7;\nmso-level-tab-stop:1.25in;\nmso-level-number-position:left;\nmargin-left:1.25in;\ntext-indent:-.25in;\nmso-ansi-font-size:10.0pt;\nfont-family:Symbol;}\n@list l1:level5\n{mso-level-number-format:bullet;\nmso-level-text:\sF0A8;\nmso-level-tab-stop:1.5in;\nmso-level-number-position:left;\nmargin-left:1.5in;\ntext-indent:-.25in;\nmso-ansi-font-size:10.0pt;\nfont-family:Symbol;}\n@list l1:level6\n{mso-level-number-format:bullet;\nmso-level-text:\sF0D8;\nmso-level-tab-stop:1.75in;\nmso-level-number-position:left;\nmargin-left:1.75in;\ntext-indent:-.25in;\nmso-ansi-font-size:10.0pt;\nfont-family:Wingdings;}\n@list l1:level7\n{mso-level-number-format:bullet;\nmso-level-text:\sF0A7;\nmso-level-tab-stop:2.0in;\nmso-level-number-position:left;\nmargin-left:2.0in;\ntext-indent:-.25in;\nmso-ansi-font-size:10.0pt;\nfont-family:Wingdings;}\n@list l1:level8\n{mso-level-number-format:bullet;\nmso-level-text:\sF0B7;\nmso-level-tab-stop:2.25in;\nmso-level-number-position:left;\nmargin-left:2.25in;\ntext-indent:-.25in;\nmso-ansi-font-size:10.0pt;\nfont-family:Symbol;}\n@list l1:level9\n{mso-level-number-format:bullet;\nmso-level-text:\sF0A8;\nmso-level-tab-stop:2.5in;\nmso-level-number-position:left;\nmargin-left:2.5in;\ntext-indent:-.25in;\nmso-ansi-font-size:10.0pt;\nfont-family:Symbol;}\n@list l2\n{mso-list-id:357586200;\nmso-list-template-ids:-1758270312;}\n@list l2:level1\n{mso-level-tab-stop:.5in;\nmso-level-number-position:left;\ntext-indent:-.25in;}\n@list l2:level2\n{mso-level-tab-stop:1.0in;\nmso-level-number-position:left;\ntext-indent:-.25in;}\n@list l2:level3\n{mso-level-tab-stop:1.5in;\nmso-level-number-position:left;\ntext-indent:-.25in;}\n@list l2:level4\n{mso-level-tab-stop:2.0in;\nmso-level-number-position:left;\ntext-indent:-.25in;}\n@list l2:level5\n{mso-level-tab-stop:2.5in;\nmso-level-number-position:left;\ntext-indent:-.25in;}\n@list l2:level6\n{mso-level-tab-stop:3.0in;\nmso-level-number-position:left;\ntext-indent:-.25in;}\n@list l2:level7\n{mso-level-tab-stop:3.5in;\nmso-level-number-position:left;\ntext-indent:-.25in;}\n@list l2:level8\n{mso-level-tab-stop:4.0in;\nmso-level-number-position:left;\ntext-indent:-.25in;}\n@list l2:level9\n{mso-level-tab-stop:4.5in;\nmso-level-number-position:left;\ntext-indent:-.25in;}\n@list l3\n{mso-list-id:748430873;\nmso-list-template-ids:1948041034;}\n@list l3:level1\n{mso-level-tab-stop:.5in;\nmso-level-number-position:left;\ntext-indent:-.25in;}\n@list l3:level2\n{mso-level-tab-stop:1.0in;\nmso-level-number-position:left;\ntext-indent:-.25in;}\n@list l3:level3\n{mso-level-tab-stop:1.5in;\nmso-level-number-position:left;\ntext-indent:-.25in;}\n@list l3:level4\n{mso-level-tab-stop:2.0in;\nmso-level-number-position:left;\ntext-indent:-.25in;}\n@list l3:level5\n{mso-level-tab-stop:2.5in;\nmso-level-number-position:left;\ntext-indent:-.25in;}\n@list l3:level6\n{mso-level-tab-stop:3.0in;\nmso-level-number-position:left;\ntext-indent:-.25in;}\n@list l3:level7\n{mso-level-tab-stop:3.5in;\nmso-level-number-position:left;\ntext-indent:-.25in;}\n@list l3:level8\n{mso-level-tab-stop:4.0in;\nmso-level-number-position:left;\ntext-indent:-.25in;}\n@list l3:level9\n{mso-level-tab-stop:4.5in;\nmso-level-number-position:left;\ntext-indent:-.25in;}\nol\n{margin-bottom:0in;}\nul\n{margin-bottom:0in;}\n-->\n </style><!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin:0in; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} table.MsoTableTheme {mso-style-name:"Table Theme"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; border:solid #669999 1.0pt; mso-border-alt:solid #669999 .5pt; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-border-insideh:.5pt solid #669999; mso-border-insidev:.5pt solid #669999; mso-para-margin:0in; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} </style> <![endif]-->\n <meta name="CREATED" content="20050807;14242110">\n\n <meta name="CHANGEDBY" content="Bikash Sabata">\n\n <meta name="CHANGED" content="20050807;14363965">\n\n<!--[if gte mso 9]><xml> <o:shapedefaults v:ext="edit" spidmax="3074"/> </xml><![endif]--><!--[if gte mso 9]><xml> <o:shapelayout v:ext="edit"> <o:idmap v:ext="edit" data="1"/> </o:shapelayout></xml><![endif]-->\n</head>\n\n\n<body style="background-color: white; background-image: url(resume_files/image004.gif);" lang="EN-US" link="#0066cc" vlink="#999999">\n\n<!--[if gte mso 9]><xml> <v:background id="_x0000_s1025" o:bwmode="white" o:targetscreensize="800,600"> <v:fill src="resume_files/image004.gif" o:title="netbkgnd" type="frame"/> </v:background></xml><![endif]-->\n<div class="Section1">\n<div style="border-style: none none solid; border-color: -moz-use-text-color -moz-use-text-color windowtext; border-width: medium medium 1.5pt; padding: 0in 0in 1pt;">\n<p style="border: medium none ; padding: 0in;"><b><span style="font-size: 18pt;">Bikash\nSabata</span></b> </p>\n\n</div>\n\n<table class="MsoNormalTable" style="width: 8in;" border="0" cellpadding="0" cellspacing="0" width="768">\n\n <tbody>\n\n <tr style="height: 19.5pt;">\n\n <td style="padding: 1.5pt; width: 2.25in; height: 19.5pt;" width="216">\n <p class="MsoNormal" style="text-align: justify;"><st1:street w:st="on"><st1:address w:st="on"><span style="font-family: Verdana;">7901 Henry Ave</span></st1:address></st1:street><span style="font-family: Verdana;"> B109</span></p>\n\n </td>\n\n <td style="padding: 1.5pt; width: 5.75in; height: 19.5pt;" width="552">\n <p class="MsoNormal" style="text-align: right;" align="right"><span style="font-family: Verdana;">(Home)\n215 482 2370</span></p>\n\n </td>\n\n </tr>\n\n <tr style="">\n\n <td style="padding: 1.5pt; width: 2.25in;" width="216">\n <p class="MsoNormal" style=""><st1:place w:st="on"><st1:city w:st="on"><span style="font-family: Verdana;">Philadelphia</span></st1:city><span style="font-family: Verdana;">, <st1:state w:st="on">PA</st1:state>\n <st1:postalcode w:st="on">19128</st1:postalcode></span></st1:place></p>\n\n </td>\n\n <td style="padding: 1.5pt; width: 5.75in;" width="552">\n\n <p class="MsoNormal" style="text-align: right;" align="right"><span style="font-family: Verdana;">(Off)\n703 236 3572</span></p>\n\n </td>\n\n </tr>\n\n </tbody>\n</table>\n\n<p class="MsoNormal" style="margin: 6pt 0in 0.2in; text-align: justify;"><b>EDUCATION</b>\n</p>\n\n<p class="MsoNormal" style="margin-left: 0.5in; text-align: justify; text-indent: -0.25in;"><span style="font-size: 10pt; font-family: Wingdings;"><span style=""><img src="resume_files/image001.gif" alt="*" height="13" width="15"><span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n</span></span></span>Ph.D.\nin Electrical &amp; Computer Engineering,\nThe <st1:placetype w:st="on">University</st1:placetype>\nof <st1:placename w:st="on">Texas</st1:placename>\nat <st1:place w:st="on"><st1:city w:st="on">Austin</st1:city></st1:place>.\n(Jan. '88 &ndash; May. '93). </p>\n\n<p class="MsoNormal" style="margin-left: 0.5in; text-align: justify; text-indent: -0.25in;"><span style="font-size: 10pt; font-family: Wingdings;"><span style=""><img src="resume_files/image001.gif" alt="*" height="13" width="15"><span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n</span></span></span>M.S in Electrical &amp; Computer Engineering,\nThe <st1:place w:st="on"><st1:placetype w:st="on">University</st1:placetype>\nof <st1:placename w:st="on">Texas</st1:placename></st1:place>\nat Austin, (Aug '86\n&ndash; Dec '87). </p>\n\n<p class="MsoNormal" style="margin: 0in 0in 0.2in 0.5in; text-align: justify; text-indent: -0.25in;"><span style="font-size: 10pt; font-family: Wingdings;"><span style=""><img src="resume_files/image001.gif" alt="*" height="13" width="15"><span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;\n</span></span></span>Bachelor of Technology in Electrical\nEngineering, Indian Institute of Technology (IIT), <st1:city w:st="on"><st1:place w:st="on">Bombay</st1:place></st1:city>,\n(July '82 &ndash; May '86). </p>\n\n<p class="MsoNormal" style="margin: 0.2in 0in; text-align: justify;"><b>PROFESSIONAL\nEXPERIENCE</b> </p>\n\n<p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"><span style="font-size: 10pt; font-family: Wingdings;"><span style=""><img src="resume_files/image001.gif" alt="*" height="13" width="15"><span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n</span></span></span><u>Chief Technology Officer, Aginova Inc</u>., 2005 &ndash; Present:\nAginova provides wireless sensor network solutions for condition based\nmaintenance.&nbsp;At Aginova my role as a founder and Chief\nTechnology Officer was to build a team that&nbsp;addressed\nchallenges at all levels of the system from data collection to analysis\nand reporting. I was responsible for the product architecture,\nalgorithm development and at a high level the vision of the company. I\nwas also active in generating revenue for the company by writing\nproposals to the government agencies and marketing with\ncustomers.&nbsp;In a very short time Aginova was self-sufficient\nand was in the path of healthy growth. </p>\n\n<p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"><span style="font-size: 10pt; font-family: Wingdings;"><span style=""><img src="resume_files/image001.gif" alt="*" height="13" width="15"><span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n</span></span></span><u>Principal Scientist, Information Extraction\nand Transport Inc</u>., 2002 &ndash; 2005:&nbsp;I was\nconducting research in the applications of Bayesian Networks and\nLearning to address understanding and reasoning challenges in\ndistributed systems. For example, I was the PI of an ARDA sponsored\nresearch project for cyber-situation assessment in distributed\nnetworks. Intrusion Detection systems generate a large volume of alerts\nwith many false positives and negatives. Detecting and understanding\nattacks within this deluge of information is particularly challenging.\nWe developed a system that correlates, aggregates, and interprets the\nheterogeneous distributed observations of the various network and host\nsensors to assess the attacks on the infrastructure. In addition, I\nwrote and won numerous proposals for projects from DARPA, DoD and other\ncommercial clients. These include projects related to cyber-security in\nwireless networks, network management in MANETs, and Smart editing\ntools for satellite images. </p>\n\n<p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"><span style="font-size: 10pt; font-family: Wingdings;"><span style=""><img src="resume_files/image001.gif" alt="*" height="13" width="15"><span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n</span></span></span><u>Principal Scientist, <span class="SpellE">Peakstone</span>\nCorporation</u>, 1999 &ndash; 2002: My principal job\nresponsibility (jointly with another scientist) was to design the architecture and the algorithms\nfor the Analysis Engine that was at the heart of the <span class="SpellE">Peakstone</span>\nproduct. A new class of innovative algorithms were designed that used\npattern recognition and machine learning techniques to model and control the\nWeb infrastructure to assure Quality of Service of applications. Some of\nthe tasks performed by the analysis engine were: modeling of system capacity for\nplanning, provisioning and monitoring, resource bottleneck detection\nand root cause diagnosis. I was also primarily responsible for the software\narchitecture and the implementation of the Analysis Engine. Eleven patent\napplications (in which I am a co-Inventor) were filed based on the ideas. </p>\n\n<p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"><span style="font-size: 10pt; font-family: Wingdings;"><span style=""><img src="resume_files/image001.gif" alt="*" height="13" width="15"><span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n</span></span></span><u>Co-Founder, Primitive Root Inc.</u>, 2000 &ndash;\n\n2002. I co-founded Primitive Root along with Professors Richard Lipton\nand Vijay <span class="SpellE">Vazirani</span> from\nGeorgia Tech. At Primitive Root we designed an innovative set of algorithms and mechanisms for\nprotecting web sites from Denial of Service attacks. A patent has been filed based on\nthe techniques. Primitive Root was acquired by Security Matrix in early\n2002. </p>\n\n<p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"><span style="font-size: 10pt; font-family: Wingdings;"><span style=""><img src="resume_files/image001.gif" alt="*" height="13" width="15"><span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n</span></span></span><u>Research Associate, Computer Science\nDepartment, Stanford University</u>, 1999 &ndash; 2000:\nConducting research in the areas of <span class="SpellE">multiagent</span>\nsystems and the application of\nGame theory in distributed resource allocation problems. </p>\n\n<p class="MsoNormal" style="margin: 0in 0in 2.9pt 0.5in; text-indent: -0.25in;"><span style="font-size: 10pt; font-family: Wingdings;"><span style=""><img src="resume_files/image001.gif" alt="*" height="13" width="15"><span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n\n</span></span></span><u>Computer Scientist, Telecommunications and\nDistributed Computing Program, SRI International</u>, 1994\n&ndash; 1999: I was conducting research in areas of distributed multimedia systems, video\nand image indexing, and video understanding. My research in distributed systems\nincluded work on adaptive mechanisms for Quality of Service guarantees in\ndistributed applications, resource allocation, admission control and protocols for\nreliable multicast. The work on adaptive mechanisms led to a patent application\nat SRI. The work was the basis of a SRI spin-off <span class="SpellE">AlterEgo</span>\nNetworks. </p>\n\n<p class="MsoNormal" style="margin: 0in 0in 1.45pt 0.5in;">In\nthe area of Video processing, I worked on algorithms to\nunderstand the content and structure of video. The algorithms were\napplied to news video and surveillance videos. An analyst workbench was developed\nfor the government for security related applications. This was part of a large\neffort across many groups in SRI with contributions from speech recognition,\nimage understanding, and natural language processing. </p>\n\n<p class="MsoNormal" style="margin: 0in 0in 0.2in 0.5in; text-indent: -0.25in;"><span style="font-size: 10pt; font-family: Wingdings;"><span style=""><img src="resume_files/image001.gif" alt="*" height="13" width="15"><span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n</span></span></span><u>Assistant Professor, Department of Computer\nScience, Wayne State University</u>, Fall 1993 &ndash; 1994:\nTaught courses in <b>Computer Graphics</b>, <b>Computer Architecture</b>, <b>Parallel\nAlgorithms</b> and <b>Parallel Architectures</b>. Conducted research in areas of digital video,\ncomputer vision, and distributed multimedia systems. </p>\n\n<p class="MsoNormal" style="margin: 0.2in 0in; text-align: justify;"><b>PATENTS</b>\n</p>\n\n<p class="MsoNormal" style="margin-left: 0.5in; text-align: justify; text-indent: -0.25in;"><span style="font-size: 10pt; font-family: Wingdings;"><span style=""><img src="resume_files/image001.gif" alt="*" height="13" width="15"><span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;\n&nbsp;</span></span></span><span class="SpellE">Aginova</span> Inc., 2 patent\napplications in the areas of sensor network applications to condition\nbased maintenance. </p>\n\n<p class="MsoNormal" style="margin-left: 0.5in; text-align: justify; text-indent: -0.25in;"><span style="font-size: 10pt; font-family: Wingdings;"><span style=""><img src="resume_files/image001.gif" alt="*" height="13" width="15"><span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;</span></span></span><span class="SpellE">Peakstone</span> Corporation, 11 patent\napplications in the areas of capacity modeling, evaluation,\nplanning and admission control. </p>\n\n<p class="MsoNormal" style="margin-left: 0.5in; text-align: justify; text-indent: -0.25in;"><span style="font-size: 10pt; font-family: Wingdings;"><span style=""><img src="resume_files/image001.gif" alt="*" height="13" width="15"><span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span>Primitive\nRoot, one patent application on a\nmechanism to protect web servers from denial of service attacks. </p>\n\n<p class="MsoNormal" style="margin: 0in 0in 0.2in 0.5in; text-align: justify; text-indent: -0.25in;"><span style="font-size: 10pt; font-family: Wingdings;"><span style=""><img src="resume_files/image001.gif" alt="*" height="13" width="15"><span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span>SRI\nInternational, one patent application on Dynamic adaptation of Web content under resource constraints. </p>\n\n<p class="MsoNormal" style="margin: 0.2in 0in 4.3pt; text-align: justify;"><b>SELECTED\nPUBLICATIONS</b> </p>\n\n<p class="MsoNormal" style="margin-bottom: 0.2in; text-align: justify;"><i>Distributed\nand Autonomous Systems </i></p>\n\n<ol style="margin-top: 0in;" start="1" type="1">\n\n <li class="MsoNormal" style="">&ldquo;Multisource\nEvidence Fusion for Cyber-Situation Assessment,&rdquo; with Chester\nOrnes, <i>Multisensor, Multisource Information Fusion:\nArchitectures, Algorithms, and Applications, SPIE Symposium on Defense\nand Security,</i>&nbsp;<st1:city w:st="on"><st1:place w:st="on">Orlando, Florida, April, 2006</st1:place></st1:city>\n\n </li>\n\n <li class="MsoNormal" style="">&ldquo;Evidence\nAggregation in Hierarchical Evidential Reasoning,&rdquo; <i>UAI\nApplications Workshop, UAI 2005</i> , <st1:city w:st="on"><st1:place w:st="on">Edinburgh</st1:place></st1:city>, 2005\n </li>\n\n <li class="MsoNormal" style="">&ldquo;<span class="SpellE">QoS</span>-Aware Admission Control and\nDynamic Resource Provisioning Framework in Ubiquitous Multimedia\nComputing Environments,&rdquo; with <span class="SpellE">Wonjun</span>\n\nLee and <span class="SpellE">Jaideep</span> <span class="SpellE">Srivastava</span>, <i>The\nJournal of Supercomputing</i> , 32(1), pp 25-50, 2005 </li>\n\n <li class="MsoNormal" style="">&ldquo;Dynamic\nServer Placements in MANETS,&rdquo; with <span class="SpellE">Budhaditya</span>\nDeb, Alex <span class="SpellE">Polyscher</span>, <span class="SpellE">Micheal</span> <span class="SpellE">Littman,and</span>\n\n <span class="SpellE">Ritu</span> <span class="SpellE">Chadha</span>, <i>MILCOM 2005</i>,\nAtlantic City, NJ, Oct 2005 </li>\n\n <li class="MsoNormal" style="">&ldquo;Research\nIssues in Applying Pattern Recognition and Statistical Models to System\nManagement and Modeling,&rdquo; with <span class="SpellE">Moises</span>\n <span class="SpellE">Goldszmidt</span>, <i>Proceedings\nof First Workshop on Algorithms and Architectures for self-managing\nsystems</i> , San Diego, 2003 </li>\n\n <li class="MsoNormal" style="">&ldquo;Adaptive\n <span class="SpellE">QoS</span> Negotiation\nFramework for Resource Configuration in Ubiquitous Computing\nEnvironments,&rdquo; with <span class="SpellE">Wonjun</span>\nLee, <i>ICOIN, Lecture Notes in Computer Science (LNCS-2662)</i>\n, Eds. Hyun-Kook <span class="SpellE">Kahng</span>,\n2003 </li>\n\n <li class="MsoNormal" style="">&ldquo;A <span class="SpellE">QoS</span>-Aware Framework for Resource\nConfiguration and Reservation in Ubiquitous Computing\nEnvironments,&rdquo; with <span class="SpellE">Wonjun</span>\nLee, <i>Proceedings of Information Networking, Networking\nTechnologies for Enhanced Internet Services International Conference,\nICOIN 2003</i> , <st1:place w:st="on"><st1:city w:st="on"><span class="SpellE">Cheju</span>\nIsland</st1:city>, <st1:country-region w:st="on">Korea</st1:country-region></st1:place>,\nFebruary 12-14, 2003 </li>\n\n <li class="MsoNormal" style="">&ldquo;On The\nQuantification of e-Business Capacity,&rdquo; with <span class="SpellE">Moises</span> <span class="SpellE">Goldszmidt</span>\nand Derek Palma, <i>Proceedings of Electronic Commerce 2001</i>\n, Tampa, Florida, Oct 14&ndash;17, 2001 </li>\n\n <li class="MsoNormal" style="">&ldquo;MAESTRO:\nConductor of Multimedia Analysis Technologies,&rdquo; <i>Communications\nof ACM</i> , Volume 43, Number 2, pp 57-63, Feb 2000 </li>\n\n <li class="MsoNormal" style="">&ldquo;Admission\nControl and <span class="SpellE">QoS</span>\nNegotiations for Soft-Real Time Applications,&rdquo; with <span class="SpellE">Wonjun</span> Lee, <i>Proceedings\nof the IEEE International Conference on Multimedia Computing and Systems</i>\n, Vol. 1, pp: 147-152, <st1:place w:st="on"><st1:city w:st="on">Florence</st1:city>, <st1:country-region w:st="on">Italy</st1:country-region></st1:place>,\n1999 </li>\n\n <li class="MsoNormal" style="">&ldquo;Sequential\nAuctions for the Allocation of Resources with\nComplementarities,&rdquo; with Craig <span class="SpellE">Boutilier</span>\nand <span class="SpellE">Moises</span> <span class="SpellE">Goldszmidt</span>, <i>Proceedings\nof the International Joint Conference in AI (IJCAI)</i>, pp:\n527-523, 1999. </li>\n\n <li class="MsoNormal" style="">&ldquo;Continuous\nValue Function Approximation for Sequential Bidding\nPolicies,&rdquo; with Craig <span class="SpellE">Boutilier</span>\n\nand <span class="SpellE">Moises</span> <span class="SpellE">Goldszmidt</span>, <i>Proceeding\nof UAI-99</i> , Stockholm, Sweden, July 30 - Aug 1, 1999. </li>\n\n <li class="MsoNormal" style="">&ldquo;Resource\nAllocation Using Sequential Auctions,&rdquo; with Craig <span class="SpellE">Boutilier</span>, <span class="SpellE">Moises</span> <span class="SpellE">Goldszmidt</span>,\nand Claire <span class="SpellE">Monteleoni</span>,\nin <i>Agent Mediated Electronic Commerce II, Towards\nNext-Generation Agent-Based Electronic Commerce Systems, IJCAI 1999\nWorkshop</i> , <span class="SpellE">Alexandros</span>\n\n <span class="SpellE">Moukas</span>, <span class="SpellE">Carles</span> Sierra, Fredrik <span class="SpellE">Ygge</span> (Eds.), <i>Lecture\nNotes in Computer Science 1788</i> , pp 131-152, Springer 2000,\nISBN 3-540-67773-9 </li>\n\n <li class="MsoNormal" style="">&ldquo;Adaptive\n <span class="SpellE">QoS</span> Support for\nDistributed, Java-based Applications,&rdquo; with S. <span class="SpellE">Chatterjee</span> and M. Brown, <i>In\nthe Proceedings of the IEEE International Symposium on Object-Oriented\nReal-Time Distributed Computing (ISORC)</i> , St-<span class="SpellE">Malo</span>, France, May 1999. </li>\n\n <li class="MsoNormal" style="">&ldquo;Dynamic\nAdaptation of Video for Transmission Under Resource\nConstraints,&rdquo; with J. <span class="SpellE">Sydir</span>,\nand S. <span class="SpellE">Chatterjee</span>, in\nProceedings of ICIP '98, <st1:place w:st="on"><st1:city w:st="on">Chicago</st1:city>, <st1:state w:st="on">Il</st1:state></st1:place>.\nOct 4-7, 1998. </li>\n\n <li class="MsoNormal" style="">&ldquo;Providing\nEnd-to-End <span class="SpellE">QoS</span>\n\nAssurances in a CORBA-Based System,&rdquo; with J. <span class="SpellE">Sydir</span>, and S. <span class="SpellE">Chatterjee</span>, in <i>Proceedings\nof ISORC '98</i> , Kyoto, Japan, pp 53-61, April 1998. </li>\n\n <li class="MsoNormal" style="">&ldquo;Graceful\nAdaptation of Distributed Soft Real-Time Applications,\s" with M. Brown,\nand S. <span class="SpellE">Chatterjee</span>, in <i>Proceedings\nof the 19th IEEE <span class="SpellE">RealTime</span>\n\nSystems Symposium (RTSS'98)</i> , Madrid, Spain, December 1998. </li>\n\n <li class="MsoNormal" style="">&ldquo;Modeling\napplications for adaptive <span class="SpellE">QoS</span>&ndash;based\nresource management,&rdquo; with S. <span class="SpellE">Chatterjee</span>,\nJ. <span class="SpellE">Sydir</span> and T.\nLawrence, in <i>Proceedings of High Assurance Systems\nEngineering Workshop</i> , Washington D.C., pp 194-201, Aug.\n1997. </li>\n\n <li class="MsoNormal" style="">&ldquo;Global\nResource Management,&rdquo; in <i>Proceedings of 3<sup>r\nd</sup> International Command and Control Research and Technology\nSymposium</i>, <st1:place w:st="on"><st1:city w:st="on">Washington</st1:city> <st1:state w:st="on">D.C.</st1:state></st1:place>, June\n17&ndash;20, 1997. </li>\n\n <li class="MsoNormal" style="">&ldquo;End-to-end\n <span class="SpellE">QoS</span> driven resource\nmanagement for the next generation Internet,&rdquo; in <i>Proceedings\nof the Workshop on Research Directions for the Next Generation Internet</i>,\n <st1:place w:st="on"><st1:city w:st="on">Washington</st1:city>\n <st1:state w:st="on">D.C.</st1:state></st1:place>,\nMay 12&ndash;14, 1997. </li>\n\n <li class="MsoNormal" style="">&ldquo;Taxonomy\nfor <span class="SpellE">QoS</span>\nSpecifications&rdquo;, with S. <span class="SpellE">Chatterjee</span>,\nM. Davis, J. <span class="SpellE">Sydir</span>, T.\nLawrence, in <i>Proceedings of IEEE Computer Society 3rd\nInternational Workshop on Object-oriented Real-time Dependable\nSystems(WORDS '97)</i> , Newport Beach, California, pp 100-107,\nFeb. 1997. </li>\n\n <li class="MsoNormal" style="margin-bottom: 0.2in;">&ldquo;Transport\nProtocol for Reliable Multicast: TRM,&rdquo; with M. Brown, B.\nDenny, and C.H. <span class="SpellE">Heo</span>, in\n <i>Proceedings of the International Conference on Networks</i>\n\n, Orlando, Florida, pp 143&ndash;146, Jan. 1996. </li>\n\n</ol>\n\n<p class="MsoNormal" style="margin: 0.1in 0in 0.2in; text-align: justify;"><i>Computer\nVision and Video Processing </i></p>\n\n<ol style="margin-top: 0in;" start="1" type="1">\n\n <li class="MsoNormal" style="">&ldquo;Fusion\nof Multiple Cues for Video Segmentation,&rdquo; with <span class="SpellE">Moises</span> <span class="SpellE">Goldszmidt</span>,\n <i>Proceedings of the Second International Conference on\nInformation Fusion (FUSION'99)</i> , pp 696&ndash;714, <st1:place w:st="on"><st1:state w:st="on">California</st1:state></st1:place>,\nJuly 1999. </li>\n\n <li class="MsoNormal" style="">&ldquo;Non-Rigid\nMotion Analysis &ndash; Articulated and Elastic Motion: A\nreview,&rdquo; with J. K. <span class="SpellE">Aggarwal</span>,\nQ. <span class="SpellE">Cai</span>, and W. <span class="SpellE">Liao</span>, <i>Computer Vision\nand Image Understanding</i> , Vol. 70, No. 2, pp. 142-156, May\n1998. </li>\n\n <li class="MsoNormal" style="">&ldquo;Feature\nCorrespondence and Motion Estimation from a Sequence of Range\nImages.&rdquo; with J.K. <span class="SpellE">Aggarwal</span>,\n <i>Computer Vision and Image Understanding</i>, Vol.\n63, No. 2, pp. 232&ndash;250, March 1996. </li>\n\n <li class="MsoNormal" style="">&ldquo;Surface\nCorrespondence and Motion Computation from a Sequence of Range\nImages.&rdquo; with J.K. <span class="SpellE">Aggarwal</span>,\nin <i>Proceedings of IEEE Int. Conf. on Robotics and Automation</i>\n\n, San Diego, CA., pp 1052&ndash;1059, May 8&ndash;13 1994. </li>\n\n <li class="MsoNormal" style="">&ldquo;Convergence\nof Fuzzy Pyramid Algorithms,&rdquo; with F. <span class="SpellE">Arman</span>\nand J.K. <span class="SpellE">Aggarwal</span>, <i>Journal\nof Mathematical Imaging and Vision</i>, 4, pp 291&ndash;302,\n1994. </li>\n\n <li class="MsoNormal" style="">&ldquo;Segmentation\nof 3&ndash;D Range Images Using Pyramid Data Structures.&rdquo;\nwith F. <span class="SpellE">Arman</span> and J.K. <span class="SpellE">Aggarwal</span>, <i>Computer\nVision and Image Understanding</i> , Vol. 57, No. 3, pp. 373\n&ndash; 387, May 1993. </li>\n\n <li class="MsoNormal" style="">&ldquo;<span class="SpellE">Hypergraph</span> Based Feature\nMatching in a Sequence of Range Images,&rdquo; with J.K. <span class="SpellE">Aggarwal</span>, <i>International\nWorkshop on Time-Varying Image Processing and Moving Object Recognition</i>,\n <st1:place w:st="on"><st1:city w:st="on">Florence</st1:city>,\n <st1:country-region w:st="on">Italy</st1:country-region></st1:place>,\nJune. 1993. </li>\n\n <li class="MsoNormal" style="">&ldquo;Correspondence\nof Surfaces in a Sequence of Range Images for Motion Estimation and\nTracking,&rdquo; With J.K. <span class="SpellE">Aggarwal</span>,\nin <i>Proceedings of IAPR Workshop on Machine Vision Applications</i>\n, pp. 385&ndash;388, Tokyo, Japan, Dec. 1992. </li>\n\n <li class="MsoNormal" style="">&ldquo;Estimation\nof Motion from a Pair of Range Images: A Review,&rdquo; with J.K. <span class="SpellE">Aggarwal</span>, <i>Journal of\nImage Understanding</i>. Vol. 54, No. 3, pp. 309 &ndash; 324,\nNov. 1991. </li>\n\n <li class="MsoNormal" style="">&ldquo;Segmentation\nof 3&ndash;D Range Images Using Pyramidal Data\nStructures,&rdquo; with F. <span class="SpellE">Arman</span>\nand J.K. <span class="SpellE">Aggarwal</span>, in <i>Proc.\nof International Conference in Computer Vision</i> , Osaka,\nJapan, pp. 662 &ndash; 666, Dec 1990. </li>\n\n <li class="MsoNormal" style="">&ldquo;Motion\nfrom a Sequence of Range Images,&rdquo; with J.K. <span class="SpellE">Aggarwal</span>, in <i>Proc. of\nIEEE Intl. Workshop on <span class="SpellE">Intell</span>.\nMotion Control</i>, <st1:place w:st="on"><st1:city w:st="on">Istanbul</st1:city>, <st1:country-region w:st="on">Turkey</st1:country-region></st1:place>,\npp. IP1 - IP10, Aug 1990. </li>\n\n <li class="MsoNormal" style="">&ldquo;Hierarchical\nSegmentation of 3&ndash;D Range Images,&rdquo; with F. <span class="SpellE">Arman</span> and J. K. <span class="SpellE">Aggarwal</span>, in <i>Proc. of\n1989 IEEE International Conference on Systems Man and Cybernetics</i>,\n <st1:place w:st="on"><st1:city w:st="on">Cambridge</st1:city>,\n <st1:state w:st="on">MA</st1:state></st1:place>,\npp. 476-483, Nov. 1989. </li>\n\n <li class="MsoNormal" style="">&ldquo;Motion\nestimation using surface correspondences,&rdquo; with N. <span class="SpellE">Nandakumar</span> and J.K. <span class="SpellE">Aggarwal</span>, <i>Image\nUnderstanding and Machine Vision, 1989 Technical Digest Series</i>\n, vol. 14, pp.50&ndash; 54, June 1989. </li>\n\n <li class="MsoNormal" style="">&ldquo;Calibration\nof Thermal Images of Integrated Circuit Chips,&rdquo; with J. A.\nPearce, in <i>Proc. of MIDCON 88</i>,\npp.151&ndash;154, Aug. 1988. </li>\n\n <li class="MsoNormal" style="margin-bottom: 0.2in;">&ldquo;Classification\nof Complex Cell Images Using Pyramid Node Linking,&rdquo; with F. <span class="SpellE">Arman</span> and J. A. Pearce, in <i>Proc.\nof SPIE; Medical Imaging II</i> , <span class="SpellE">vol.SPIE</span>\n\n914, pp. 476&ndash;483, June 1988. </li>\n\n</ol>\n\n<p class="MsoNormal" style="margin: 0.1in 0in 0.2in; text-align: justify;"><i>Parallel\nComputing </i></p>\n\n<ol style="margin-top: 0in;" start="1" type="1">\n\n <li class="MsoNormal" style="">&ldquo;Parallelization\nof 3-D Range Image Segmentation on a SIMD Multiprocessor,&rdquo;\nwith <span class="SpellE">Vipin</span> <span class="SpellE">Chaudhary</span>, and <span class="SpellE">Sumit</span> Roy in <i>Proceedings\nof the ISCA 12th International Conference on Computers and their\nApplications</i> , Tempe, Arizona, pp 106&ndash;109, March\n13&ndash;15, 1997. </li>\n\n <li class="MsoNormal" style="">&ldquo;Strategies\nfor processor allocation in K-<span class="SpellE">ary</span>\nn-cubes,&rdquo; with G. <span class="SpellE">Dommety</span>\nand V. <span class="SpellE">Chaudhary</span>, in <i>Proceedings\nof the International Conference on Parallel and Distributed Computing\nSystems</i> , Orlando, Florida, Sept. 1995. </li>\n\n <li class="MsoNormal" style="">&ldquo;Mapping\nInterconnection Networks into VEDIC Networks,&rdquo; with V. <span class="SpellE">Chaudhary</span> and J.K. <span class="SpellE">Aggarwal</span>, in <i>Proc. of\nInternational Parallel Processing Symposium,</i> pp. 531\n&ndash; 537, April, 1993. </li>\n\n <li class="MsoNormal" style="">&ldquo;Deadlock-free\nmulticast wormhole routing in VEDIC networks&rdquo;, with V. <span class="SpellE">Chaudhary</span> and J.K. <span class="SpellE">Aggarwal</span>, presented at <i>ICPP\n1992</i>. </li>\n\n <li class="MsoNormal" style="">&ldquo;The\nVEDIC network for <span class="SpellE">multicomputers</span>,&rdquo;\n\nwith V. <span class="SpellE">Chaudhary</span> and\nJ.K. <span class="SpellE">Aggarwal</span>, in <i>Proc.\nof International Conference on Parallel Processing</i>, Vol. I,\npp. 686 &ndash; 687, Aug. 1991. </li>\n\n <li class="MsoNormal" style="margin-bottom: 0.2in;">&ldquo;A\nMechanically Derived Systolic Implementation of Pyramid\nInitialization,&rdquo; with C. <span class="SpellE">Lengauer</span>\n\nand F. <span class="SpellE">Arman</span>, in <i>Workshop\non Hardware Specification, Verification and Synthesis: Mathematical\nAspects</i> , Eds. M. Lesser and G. Brown, <i>Lecture\nNotes in Computer Science</i> , Springer <span class="SpellE">Verlag</span>,\nIthaca, N.Y, 1989. </li>\n\n</ol>\n\n<p class="MsoNormal" style="margin: 0.2in 0in; text-align: justify;"><b>PROFESSIONAL\nACTIVITIES</b> </p>\n\n<p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"><span style="font-size: 10pt; font-family: Wingdings;"><span style=""><img src="resume_files/image001.gif" alt="*" height="13" width="15"><span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n</span></span></span>Senior Member of IEEE and the IEEE Computer\nsociety. </p>\n\n<p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"><span style="font-size: 10pt; font-family: Wingdings;"><span style=""><img src="resume_files/image001.gif" alt="*" height="13" width="15"><span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n</span></span></span>Member of the Program Committee for the International Conference on Machine Learning\n(ICML'2006), 2006.\n</p>\n\n<p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"><span style="font-size: 10pt; font-family: Wingdings;"><span style=""><img src="resume_files/image001.gif" alt="*" height="13" width="15"><span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n</span></span></span>Member of the Program Committee for the IFIP International Conference on Embedded and Ubiquitous Computing\n(EUC'2005), 2005.\n</p>\n\n<p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"><span style="font-size: 10pt; font-family: Wingdings;"><span style=""><img src="resume_files/image001.gif" alt="*" height="13" width="15"><span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n</span></span></span>Member\nof Program Committee for the First\nWorkshop on Algorithms and Architectures for self-managing systems,\n2003. </p>\n\n<p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"><span style="font-size: 10pt; font-family: Wingdings;"><span style=""><img src="resume_files/image001.gif" alt="*" height="13" width="15"><span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n</span></span></span>Member\nof the Program Committee for the 2nd IEEE\nInternational Symposium on Object-oriented Real-time distributed\nComputing,\n1999. </p>\n\n<p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"><span style="font-size: 10pt; font-family: Wingdings;"><span style=""><img src="resume_files/image001.gif" alt="*" height="13" width="15"><span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n</span></span></span>Member\nof the Program Committee for workshop on\nQuality of Service for <span class="SpellE">Metacomputing</span>\nApplications for\nHPDC-8, 1999. </p>\n\n<p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"><span style="font-size: 10pt; font-family: Wingdings;"><span style=""><img src="resume_files/image001.gif" alt="*" height="13" width="15"><span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n</span></span></span>Member\nof the Editorial Board for the ACM SIGMM <i>Horizons</i>\n, 1998. </p>\n\n<p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"><span style="font-size: 10pt; font-family: Wingdings;"><span style=""><img src="resume_files/image001.gif" alt="*" height="13" width="15"><span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n</span></span></span>Member\nof Organizing Committee, (Demonstrations\nChair) ACM Multimedia Conference. November 1997, <st1:place w:st="on"><st1:city w:st="on">Seattle</st1:city>,\n<st1:state w:st="on">Washington</st1:state></st1:place>.\n</p>\n\n<p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"><span style="font-size: 10pt; font-family: Wingdings;"><span style=""><img src="resume_files/image001.gif" alt="*" height="13" width="15"><span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n</span></span></span>Member\nof Program Committee, Sensor Fusion and\nAerospace Applications II. 5 &ndash; 8 April 1994, <st1:place w:st="on"><st1:city w:st="on">Orlando</st1:city>,\n<st1:state w:st="on">Florida</st1:state></st1:place>.\n\n</p>\n\n<p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"><span style="font-size: 10pt; font-family: Wingdings;"><span style=""><img src="resume_files/image001.gif" alt="*" height="13" width="15"><span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n</span></span></span>Guest\neditor, Remote Sensing Reviews. </p>\n\n<p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"><span style="font-size: 10pt; font-family: Wingdings;"><span style=""><img src="resume_files/image001.gif" alt="*" height="13" width="15"><span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n</span></span></span>Member\nof Beta Alpha Phi, International honor\nsociety. </p>\n\n<p class="MsoNormal" style="margin: 0in 0in 0.2in 0.5in; text-indent: -0.25in;"><span style="font-size: 10pt; font-family: Wingdings;"><span style=""><img src="resume_files/image001.gif" alt="*" height="13" width="15"><span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n</span></span></span>Served\nas a referee for conferences and\njournals, including: ICPR, CVPR, ICCV, IJCAI, IEEE Trans. on Aerospace\nand\nElectronic Systems, Optical Engineering, Computer Vision Graphics and\nImage\nProcessing, IEEE Trans. on PAMI. </p>\n\n</div>\n\n</body>\n\n</html>\n
/***\n|''Name:''|IncludeInEmpty|\n|''Version:''|0.0.1 (22-Oct-2005)|\n|''Source:''|MonkeyPirateTiddlyWiki (http://simonbaird.com/#IncludeInEmpty)|\n|''Author:''|BradleyMeck|\n|''Type:''|Plugin|\n!Description\nMakes it so that tags affect what is saved into the empty.html file\ntemplate, currently the tag is ''includeInEmpty''. Based on a suggestion by SimonBaird at [[Plugin Ideas]].\n\n!Revision History\n*v0.0.1 (22-Oct-2005)\n\n!Code\n***/\n//{{{\n\nwindow.includeTags_old_generate_empty = window.generateEmpty;\nwindow.generateEmpty = function() {\n var systemTiddlers = store.getTaggedTiddlers("includeInEmpty"); //change for the proper tag to go for\n var savedTiddlers = [];\n for(var s=0;s<systemTiddlers.length;s++)\n savedTiddlers.push(systemTiddlers[s].saveToDiv());\n return includeTags_old_generate_empty() + savedTiddlers.join("\sn");\n}\n\n//}}}\n
/***\n''InlineJavascriptPlugin for TiddlyWiki version 1.2.37 or above''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.elsdesign.com/tiddlywiki/#InlineJavascriptPlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nInsert Javascript executable code directly into your tiddler content. Lets you ''call directly into TW core utility routines, define new functions, calculate values, add dynamically-generated TiddlyWiki-formatted output'' into tiddler content, or perform any other programmatic actions each time the tiddler is rendered.\n!!!!!Usage\n<<<\nWhen installed, this plugin adds new wiki syntax for surrounding tiddler content with {{{<script>}}} and {{{</script>}}} tags, so that it can be treated as embedded javascript and executed each time the tiddler is rendered.\n\nYou can also load javascript from an external source URL, by including a src="..." parameter in the initial {{{<script>}}} marker (e.g., {{{<script src="http://www.xyz.com/libs/lib.js">}}}). This is particularly useful when incorporating third-party javascript libraries for use in custom extensions and plugins. The 'foreign' javascript code remains isolated in a separate file that can be easily replaced whenever the library supplier releases an update.\n\nNote that, although the external javascript file is loaded while the tiddler content is being rendered, any functions it defines will not be available for use until //after// the rendering has been completed. Thus, you cannot load a library and //immediately// use it's functions within the same tiddler. However, once that tiddler has been loaded, the library functions can be freely used in any tiddler.\n\nTo ensure that your library functions are always available when needed, you should load any javascript libraries from a tiddler that will be rendered as soon as your TiddlyWiki document is opened. For example, you could put your {{{<script src="..."></script>}}} syntax into a tiddler called LoadScripts, and then add {{{<<tiddler LoadScripts>>}}} in your MainMenu tiddler. Since the MainMenu is always rendered immediately upon opening your document, the library will always be loaded before any other tiddlers that rely upon the functions it defines. Note that loading an external javascript library does not produce any direct output in the tiddler, so these definitions should have no impact on the appearance of your MainMenu.\n\nOne difference between this implementation of embedded scripting and conventional embedded javascript techniques is the method used to produce output that is dynamically inserted into a document:\n* In a typical, non-TiddlyWiki document, you normally use the document.write() function to output text sequences (often containing HTML tags) that are rendered when the entire document is first loaded into the browser window.\n* However, in a TiddlyWiki environment, tiddlers (and other DOM elements) are created, deleted, and rendered "on-the-fly", so writing directly to the global 'document' object would not produce the results you want (i.e., replacing the embedded script within the tiddler content), and could potentially make your TiddlyWiki document un-usable.\n''To produce dynamically embedded content within a tiddler, your javascript should explicitly return a text value that the plugin can then pass through the wikify() rendering engine to insert into the tiddler display.''\n\n//Note: your script code is automatically 'wrapped' inside a function, {{{_out()}}}, so that any return value you provide can be correctly handled by the plugin and inserted into the tiddler. To avoid unpredictable results (and possibly fatal execution errors), this function should never be redefined or called from ''within'' your script code.//\n\nThe plugin provides one pre-defined variable, 'place', that is passed in to your javascript code so that it can have direct access to the containing DOM element into which the tiddler output is currently being rendered.\n\nAccess to this DOM element allows you to create scripts that can:\n* vary their actions based upon the specific location in which they are embedded\n* access 'tiddler-relative' information (use findContainingTiddler(place))\n* perform direct DOM manipulations (when returning wikified text is not enough)\n<<<\n!!!!!Examples\n<<<\nan "alert" message box:\n{{{\n<script>alert('InlineJavascriptPlugin: this is a demonstration message');</script>\n}}}\n<script>alert('InlineJavascriptPlugin: this is a demonstration message');</script>\n\ndynamic output:\n{{{\n<script>return (new Date()).toString();</script>\n}}}\n<script>return (new Date()).toString();</script>\n\nwikified dynamic output:\n{{{\n<script>return "link to current user: [["+config.options.txtUserName+"]]";</script>\n}}}\n<script>return "link to current user: [["+config.options.txtUserName+"]]";</script>\n\ndynamic output using 'place' to get size information for current tiddler\n{{{\n<script>\nvar title=findContainingTiddler(place).id.substr(7);\nreturn title+" is using "+store.getTiddlerText(title).length+" bytes";\n</script>\n}}}\n<script>\nvar title=findContainingTiddler(place).id.substr(7);\nreturn title+" is using "+store.getTiddlerText(title).length+" bytes";\n</script>\n\nloading a script from a source url\n{{{\n<script src="demo.js">return "loading demo.js..."</script>\n<script>return window.demo()</script>\n}}}\nwhere http://www.elsdesign.com/tiddlywiki/demo.js contains:\n>^^window.demo = function() { return 'this output is from demo(), defined in demo.js'; }^^\n>^^alert('InlineJavascriptPlugin: demo.js has been loaded');^^\n<script src="demo.js">return "loading demo.js..."</script>\n<script>return demo()</script>\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''InlineJavascriptPlugin'' (tagged with <<tag systemConfig>>)\n<<<\n!!!!!Revision History\n<<<\n''2005.11.08 [1.2.0]''\nhandle loading of javascript from an external URL via src="..." syntax\n''2005.11.08 [1.1.0]''\npass 'place' param into scripts to provide direct DOM access \n''2005.11.08 [1.0.0]''\ninitial release\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.inlineJavascript= {major: 1, minor: 2, revision: 0, date: new Date(2005,11,08)};\n\nconfig.formatters.push( {\n name: "inlineJavascript",\n match: "\s\s<script",\n lookahead: "\s\s<script(?: src=\s\s\s"((?:.|\s\sn)*?)\s\s\s")?\s\s>((?:.|\s\sn)*?)\s\s</script\s\s>",\n\n handler: function(w) {\n var lookaheadRegExp = new RegExp(this.lookahead,"mg");\n lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = lookaheadRegExp.exec(w.source)\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {\n if (lookaheadMatch[1]) { // load a script library\n // make script tag, set src, add to body to execute, then remove for cleanup\n var script = document.createElement("script"); script.src = lookaheadMatch[1];\n document.body.appendChild(script); document.body.removeChild(script);\n }\n if (lookaheadMatch[2]) { // run inline script code\n var code="function _out(place){"+lookaheadMatch[2]+"};_out(w.output);"\n var out=""; try { out = eval(code); } catch(e) { out = e.toString(); }\n if (out && out.length) wikify(out,w.output);\n }\n w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;\n }\n }\n} )\n//}}}\n
++++!![2005 - 2006: Aginova Inc., Chief Technology Officer] \nDevelop the product architecture for Sensor Networks for Condition Based Mainteinance. Develop algorithms and techniques to analyze the data collected from distributed sensor networks. +++[more]\n//Aginova provides wireless sensor network solutions for condition based maintenance. At Aginova my role as a founder and Chief Technology Officer was to build a team that addressed challenges at all levels of the system from data collection to analysis and reporting. I was responsible for the product architecture, algorithm development and at a high level the vision of the company. I was also active in generating revenue for the company by writing proposals to the government agencies and marketing with customers. In a very short time Aginova was self-sufficient and was in the path of healthy growth.//===\n===\n++++!![2002 - 2005: Information Extraction and Transport Inc., Principal Scientist|More] \nDeveloping algorithms and techniques to understand and reason about the distributed measurements in networked systems. +++[more]\n//My primary focus at IET was conducting research in the applications of Bayesian Networks and Learning to address understanding and reasoning challenges in distributed systems. For example, I was the principal investigator of an ARDA sponsored research project for cyber-situation assessment in distributed networks. Intrusion Detection systems generate a large volume of alerts with many false positives and negatives. Detecting and understanding attacks within this deluge of information is particularly challenging. We developed a system that correlates, aggregates, and interprets the heterogeneous distributed observations of the various network and host sensors to assess the attacks on the infrastructure. The assessed Cyber-situation is used to develop response strategies. A prototype system was built that was installed at many government sites for evaluations. At the time of my departure from IET we were developing a product plan to commercialize the security product. \nIn addition, I wrote and won numerous proposals for projects from DARPA, ~DoD and other commercial clients. These include projects related to cyber-security in wireless networks, network management in ~MANETs, and Smart editing tools for satellite images.//===\n===\n++++!![1999 - 2002: Peakstone Corporation, Principal Scientist]\nDeveloping algorithms and architecture for modeling and controlling the Web Infrastructure.+++[more]\n//My principal job responsibility (jointly with another scientist) was to design the architecture and the algorithms for the Analysis Engine that was at the heart of the Peakstone product. A new class of innovative algorithms were designed that used pattern recognition and machine learning techniques to model and control the Web infrastructure to assure Quality of Service of applications. Some of the tasks performed by the analysis engine were: modeling of system capacity for planning, provisioning and monitoring, resource bottleneck detection and root cause diagnosis. I was also primarily responsible for the software architecture and the implementation of the Analysis Engine. Eleven patent applications (in which I am a co-Inventor) were filed based on the ideas.//===\n===\n++++!![2000 - 2002: Primitive Root, Co-Founder]\nAn Internet startup providing security solutions and defense against denial of service attacks for servers on the Internet. +++[more]\n//I co-founded Primitive Root along with Professors Richard Lipton and Vijay Vazirani from Georgia Tech. At Primitive Root we designed an innovative set of algorithms and mechanisms for protecting web sites from Denial of Service attacks. A patent has been filed based on the techniques. Primitive Root was acquired by Security Matrix in early 2002.//===\n===\n++++!![1999 - 2000: Stanford University, Research Associate]\nConducting research in the areas of Multi-agent systems and Computational Game theory. +++[more]\n//I worked on distributed auction algorithms for resource allocation and the generalized problem of combinatorial auctions where resources have complementarities. The theory was driven by many applications, some of which I was investigating with collaborators. These included applications of Game theory to resource allocations in Distributed Systems, application adaptation for ~QoS guarantees, sequential allocation of complementary resources, and coordinated decision making in Multi-agent systems.//===\n===\n++++!![1994 - 1999: SRI International, Computer Scientist & Principal Investigator]\nConducting research in areas of Distributed Multimedia Systems, Adaptive Distributed Applications, and Video Understanding.+++[more]\n//My research in distributed systems included work on adaptive mechanisms for Quality of Service guarantees in distributed applications, resource allocation, admission control and protocols for reliable multicast. The work on adaptive mechanisms led to a patent application at SRI. The work was the basis of a SRI spin-off ~AlterEgo Networks which was acquired by Macromedia. \nIn the area of Video processing, I worked on algorithms to understand the content and structure of video. The algorithms were applied to news video and surveillance videos. An analyst workbench was developed for the government for security related applications. This was part of a large effort across many groups in SRI with contributions from speech recognition, image understanding, and natural language processing. \nI actively collaborated across many groups in SRI and wrote and won numerous proposals to DARPA and other ~DoD agencies.//===\n===\n++++!![1993 - 1994: Wayne State University, Computer Science Department, Assistant Professor]\nTaught courses in Computer Graphics, Computer Architecture, Parallel Algorithms and Parallel Architectures. Conducted research in areas of digital video, computer vision, and distributed multimedia systems.\n===
.sliderPanel { margin-left:1em; }\n.viewer table.minefield { -moz-border-radius: 1em; border:solid 5px #bbb;padding:0.2em;}\n.viewer table.minefield td {font-size:150%;padding:4px;-moz-border-radius: 0.5em;}\n.viewer table.minefield .info {font-size:70%; }\n.viewer table.minefield .info small {display:none;}\n.viewer table.minefield .widebtn {font-size:70%;}\n\n@import url(http://simonbaird.com/js/lib/syntaxhighlighter/SyntaxHighlighter.css);\n\n.gradient {padding:1em;}\n\n.viewer pre, .viewer code {\n color:#040;\n font-family:'lucida console',monospace;\n border-style:none;\n line-height:1.2em;\n}\n\n.titleBox { font-size:120%; font-weight:bold; }\n\n.viewer pre {\n padding:1em;\n font-size:90%;\n background-color:#f8f8f8;\n}\n\n\n\n#sidebarOptions .sliderPanel {\n background-color: #9b9;\n}\n\n.editor textarea { height:40em; }\n\n#sidebarOptions .tiddlyLink { color:#eef; padding: 0.3em 0.2em 0.3em 1em; display:block;}\n#sidebarOptions .tiddlyLink:hover { color:#fff; background:#252;}\n/* need these to override the above for the options slider */\n#sidebarOptions .sliderPanel .tiddlyLink {color:#242;display:inline;padding:0;}\n#sidebarOptions .sliderPanel .tiddlyLink:hover {color:#242; background:#dfd;}\n\n\ndiv#mainmenu hr {margin:0px;padding:0px;padding-top:10px;\n border-style:none;\n border-width:1px;\n border-color:#ccc;\n border-bottom-style:solid;\n}\n.viewer pre { font-size:75%; }\n\n/* colour scheme begin */ \ndiv#titleLine { background:#135;}\ndiv#sidebarOptions { background:#696; }\ndiv#sidebarOptions .button { color:#eef;}\ndiv#sidebarOptions .button:hover { color:#fff; background:#252; }\n\n\n\n\ndiv#mainmenu .tiddlyLink { font-weight:bold;color:#369; }\ndiv#mainmenu .tiddlyLink:hover { background:#369;color:white; }\ndiv#mainmenu .button { font-weight:bold; color:#363; }\ndiv#mainmenu .button:hover { background:#363;color:white; }\ndiv.viewer a.tiddlyLink { color:#369; }\ndiv.viewer a.tiddlyLink:hover { background:#acd; }\ndiv.footer a.tiddlyLink { color:#369; }\ndiv.footer a.tiddlyLink:hover { background:#acd; }\n.editorFooter a.button, .tiddler .button { color: #369; background:#eee; -moz-border-radius: 0.75em;}\n.editorFooter a.button:hover, .tiddler .button:hover { color: #fff; background: #369; }\n.editorFooter a.button:active, .tiddler .button:active { color: #fff; background: #369; }\n.editorFooter a:link { color: #369; } \n#popup {color:#eee; background:#369;}\n#popup a {color:#fff; background:#369; }\n#popup a:hover {color:black; background:#eee;}\n#mainMenu .externalLink { color:#252; }\n#mainMenu .externalLink:hover { color:white;background:#696; }\n.tiddler .externalLink { color:#252; }\n.tiddler .externalLink:visited { color:#252; }\n.tiddler .externalLink:hover { color:#252;background:#ada; }\n.viewer a:link { color: #252; } \n.viewer a:visited { color: #252; } \n.viewer a:hover { color:#252; background:#ada; }\n#titleLine a {color:white;}\n\n.viewer .tabSelected {background-color: white;font-weight:bold; border:solid 2px #ddd;border-bottom-color:white;}\n.viewer .tabContents {background-color: white; border:solid 2px #ddd;}\n.viewer .tabset {background-color:white;}\n.viewer .tabUnselected {color:#999;background-color:#ddd;}\n\n#messageArea { -moz-border-radius: 1em; border:solid 4px #c90;}\n\n.tab {\n -moz-border-radius-topleft: 0.5em;\n -moz-border-radius-topright: 0.5em;\n padding-left:0.3em;\n padding-right:0.3em;\n}\n\n#sidebarTabs {\n background-color: #69c;\n}\n\n#sidebarTabs .txtMainTab .tabSelected {color: white;background-color: #69c;font-weight:bold;}\n#sidebarTabs .txtMainTab .tabContents {background-color: #69c;}\n#sidebarTabs .txtMainTab .tabset {background-color:#8a8;}\n#sidebarTabs .txtMainTab .tabUnselected {color:#ace;background-color:#369;}\n\n#sidebarTabs .txtMoreTab .tabSelected {color:white;background-color: #7ad;font-weight:bold;}\n#sidebarTabs .txtMoreTab .tabUnselected {color:#ace;background-color:#369;}\n#sidebarTabs .txtMoreTab .tabContents {background-color: #7ad;}\n#sidebarTabs .txtMoreTab .tabset {background-color: #69c;}\n\n#sidebarTabs .tabContents .tiddlyLink {color: #135;}\n#sidebarTabs .tabContents .tiddlyLink:hover {background-color: #eee;color: black;}\n#sidebarTabs .tabContents .button {color: #eee;}\n#sidebarTabs .tabContents .button:hover {color: #white;background-color: #252;}\n\n\n\n/* colour scheme end */\n\n#displayArea {\n margin-right: 15.5em;\n margin-left: 13em;\n}\n\n// this works great in firefox but breaks something with ie. help??\n// .toolbar { float:right; }\n\n\n.viewer h1,\n.viewer h2,\n.viewer h3,\n.viewer h4,\n.viewer h5 { font-family: 'Trebuchet MS' Arial sans-serif; background:transparent;}\n\n.viewer h1 { font-size:1.2em; }\n.viewer h2 { font-size:1.1em; }\n.viewer h3 { font-size:1.0em; }\n.viewer h4 { font-size:0.9em; }\n.viewer h5 { font-size:0.8em; }\n\n.viewer h1 {border-bottom:solid #eee 2px;}\n\nbody {\n background:#eee;\n}\n\ndiv.tiddler {\n background:white;\n border-top:solid #ccc 2px;\n border-left:solid #ccc 2px;\n border-bottom:solid #aaa 2px;\n border-right:solid #aaa 2px;\n margin-bottom:5px;\n padding-bottom:10px;\n -moz-border-radius: 1em;\n}\n\n\ndiv.title {\n font-family:'Trebuchet MS' Arial sans-serif;\n font-size:150%;\n}\n\ndiv.editor input,\ndiv.editor textarea {\n background:#ffe;\n border:solid #aa9 2px;\n margin:4px;\n}\n\ndiv#adsense {\n background:#ffd; border:solid 2px #bb9; text-align:center;\n margin-bottom:0.5em; \n padding:0.7em; \n overflow:hidden;\n -moz-border-radius: 1em;\n}\n\n@media print {\n div.tiddler {border:none white 0px; border-top:solid #bbb 1px;}\n div.tagged {border:none white 0px;}\n #titleLine { display:none; }\n #displayArea { margin-right: 0px; margin-left: 0px; }\n .toolbar { display:none; }\n div#adsense { display:none; }\n}\n\n\n[[SyntaxHighlighterStyles]]
[img[ My Picture| ./icons/Photo.jpg ]] \n[[Welcome]]\n[[Research]]\n[[Resume]]\n[[Education]]\n[[Job Experience]]\n[[Papers]]\n[[Contact Me]]\n\n\n\n//Created using TiddlyWiki <<version>> // \n\n\n----\n^^<<newTiddler>>^^\n\n
This [[Tiddler]] was copied and pasted from the TiddlyWiki home site.\n\nMicroContent being a fashionable word for self-contained fragments of content that are typically smaller than entire pages. Often MicroContent is presented via some kind of aggregation that reduces the perceptual shock and resource cost of context switching (eg Blogs aggregating several entries onto a page or Flickr presenting photos in an album). This TiddlyWiki aggregates MicroContent items that I call 'tiddlers' into pages that are loaded in one gulp and progressively displayed as the user clicks hypertext links to read them.
/***\n''NestedSlidersPlugin for TiddlyWiki version 1.2.x and 2.0''\n^^author: Eric Shulman\nsource: http://www.TiddlyTools.com/#NestedSlidersPlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nQuickly make any tiddler content into an expandable 'slider' panel, without needing to create a separate tiddler to contain the slider content. Optional syntax allows ''default to open'', ''custom button label/tooltip'' and ''automatic blockquote formatting.''\n\nYou can also 'nest' these sliders as deep as you like (see complex nesting example below), so that expandable 'tree-like' hierarchical displays can be created. This is most useful when converting existing in-line text content to create in-line annotations, footnotes, context-sensitive help, or other subordinate information displays.\n\nFor more details, please click on a section headline below:\n++++!!!!![Configuration]>\nDebugging messages for 'lazy sliders' deferred rendering:\n<<option chkDebugLazySliderDefer>> show debugging alert when deferring slider rendering\n<<option chkDebugLazySliderRender>> show debugging alert when deferred slider is actually rendered\n===\n++++!!!!![Usage]>\nWhen installed, this plugin adds new wiki syntax for embedding 'slider' panels directly into tiddler content. Use {{{+++}}} and {{{===}}} to delimit the slider content. Additional optional syntax elements let you specify\n*default to open\n*cookiename\n*heading level\n*floater\n*rollover\n*custom label/tooltip\n*automatic blockquote\n*deferred rendering\nThe complete syntax, using all options, is:\n//{{{\n++++(cookiename)!!!!!^*[label|tooltip]>...\ncontent goes here\n===\n//}}}\nwhere:\n* {{{+++}}} (or {{{++++}}}) and {{{===}}}^^\nmarks the start and end of the slider definition, respectively. When the extra {{{+}}} is used, the slider will be open when initially displayed.^^\n* {{{(cookiename)}}}^^\nsaves the slider opened/closed state, and restores this state whenever the slider is re-rendered.^^\n* {{{!}}} through {{{!!!!!}}}^^\ndisplays the slider label using a formatted headline (Hn) style instead of a button/link style^^\n* {{{"^"}}} //(without the quotes)//^^\nmakes the slider 'float' on top of other content rather than shifting that content downward^^\n* {{{"*"}}} //(without the quotes)//^^\nautomatically opens/closes slider on "rollover" as well as when clicked^^\n* {{{[label]}}} or {{{[label|tooltip]}}}^^\nuses custom label/tooltip. (defaults are: ">" (more) and "<" (less)^^\n* {{{">"}}} //(without the quotes)//^^\nautomatically adds blockquote formatting to slider content^^\n* {{{"..."}}} //(without the quotes)//^^\ndefers rendering of closed sliders until the first time they are opened. //Note: deferred rendering may produce unexpected results in some cases. Use with care.//^^\n\n//Note: to make slider definitions easier to read and recognize when editing a tiddler, newlines immediately following the {{{+++}}} 'start slider' or preceding the {{{===}}} 'end slider' sequence are automatically supressed so that excess whitespace is eliminated from the output.//\n===\n++++!!!!![Examples]>\nsimple in-line slider: \n{{{\n+++\n content\n===\n}}}\n+++\n content\n===\n----\nuse a custom label and tooltip: \n{{{\n+++[label|tooltip]\n content\n===\n}}}\n+++[label|tooltip]\n content\n===\n----\ncontent automatically blockquoted: \n{{{\n+++>\n content\n===\n}}}\n+++>\n content\n===\n----\nall options combined //(default open, cookie, heading, floater, rollover, label/tooltip, blockquoted, deferred)//\n{{{\n++++(testcookie)!!!^*[label|tooltip]>...\n content\n===\n}}}\n++++(testcookie)!!!^*[label|tooltip]>...\n content\n===\n----\ncomplex nesting example:\n{{{\n+++^[get info...|click for information]\n put some general information here, plus a floating slider with more specific info:\n +++^[view details...|click for details]\n put some detail here, which could include a rollover with a +++^*[glossary definition]explaining technical terms===\n ===\n===\n}}}\n+++^[get info...|click for information]\n put some general information here, plus a floating slider with more specific info:\n +++^[view details...|click for details]\n put some detail here, which could include a rollover with a +++^*[glossary definition]explaining technical terms===\n ===\n===\n----\nnested floaters\n>menu: <<tiddler NestedSlidersExample>>\n(see [[NestedSlidersExample]] for definition)\n----\n===\n+++!!!!![Installation]>\nimport (or copy/paste) the following tiddlers into your document:\n''NestedSlidersPlugin'' (tagged with <<tag systemConfig>>)\n===\n+++!!!!![Revision History]>\n\n++++[2006.02.16 - 1.7.7]\ncorrected deferred rendering to account for use-case where show/hide state is tracked in a cookie\n===\n\n++++[2006.02.15 - 1.7.6]\nin adjustSliderPos(), ensure that floating panel is positioned completely within the browser window (i.e., does not go beyond the right edge of the browser window)\n===\n\n++++[2006.02.04 - 1.7.5]\nadd 'var' to unintended global variable declarations to avoid FireFox 1.5.0.1 crash bug when assigning to globals\n===\n\n++++[2006.01.18 - 1.7.4]\nonly define adjustSliderPos() function if it has not already been provided by another plugin. This lets other plugins 'hijack' the function even when they are loaded first.\n===\n\n++++[2006.01.16 - 1.7.3]\nadded adjustSliderPos(place,btn,panel,panelClass) function to permit specialized logic for placement of floating panels. While it provides improved placement for many uses of floating panels, it exhibits a relative offset positioning error when used within *nested* floating panels. Short-term workaround is to only adjust the position for 'top-level' floaters.\n===\n\n++++[2006.01.16 - 1.7.2]\nadded button property to slider panel elements so that slider panel can tell which button it belongs to. Also, re-activated and corrected animation handling so that nested sliders aren't clipped by hijacking Slider.prototype.stop so that "overflow:hidden" can be reset to "overflow:visible" after animation ends\n===\n\n++++[2006.01.14 - 1.7.1]\nadded optional "^" syntax for floating panels. Defines new CSS class, ".floatingPanel", as an alternative for standard in-line ".sliderPanel" styles.\n===\n\n++++[2006.01.14 - 1.7.0]\nadded optional "*" syntax for rollover handling to show/hide slider without requiring a click (Based on a suggestion by tw4efl)\n===\n\n+++[2006.01.03 - 1.6.2]\nWhen using optional "!" heading style, instead of creating a clickable "Hn" element, create an "A" element inside the "Hn" element. (allows click-through in SlideShowPlugin, which captures nearly all click events, except for hyperlinks)\n===\n\n+++[2005.12.15 - 1.6.1]\nadded optional "..." syntax to invoke deferred ('lazy') rendering for initially hidden sliders\nremoved checkbox option for 'global' application of lazy sliders\n===\n\n+++[2005.11.25 - 1.6.0]\nadded optional handling for 'lazy sliders' (deferred rendering for initially hidden sliders)\n===\n\n+++[2005.11.21 - 1.5.1]\nrevised regular expressions: if present, a single newline //preceding// and/or //following// a slider definition will be suppressed so start/end syntax can be place on separate lines in the tiddler 'source' for improved readability. Similarly, any whitespace (newlines, tabs, spaces, etc.) trailing the 'start slider' syntax or preceding the 'end slider' syntax is also suppressed.\n===\n\n+++[2005.11.20 - 1.5.0]\n added (cookiename) syntax for optional tracking and restoring of slider open/close state\n===\n\n+++[2005.11.11 - 1.4.0]\n added !!!!! syntax to render slider label as a header (Hn) style instead of a button/link style\n===\n\n+++[2005.11.07 - 1.3.0]\n removed alternative syntax {{{(((}}} and {{{)))}}} (so they can be used by other\n formatting extensions) and simplified/improved regular expressions to trim multiple excess newlines\n===\n\n+++[2005.11.05 - 1.2.1]\n changed name to NestedSlidersPlugin\n more documentation\n===\n\n+++[2005.11.04 - 1.2.0]\n added alternative character-mode syntax {{{(((}}} and {{{)))}}}\n tweaked "eat newlines" logic for line-mode {{{+++}}} and {{{===}}} syntax\n===\n\n+++[2005.11.03 - 1.1.1]\n fixed toggling of default tooltips ("more..." and "less...") when a non-default button label is used\n code cleanup, added documentation\n===\n\n+++[2005.11.03 - 1.1.0]\n changed delimiter syntax from {{{(((}}} and {{{)))}}} to {{{+++}}} and {{{===}}}\n changed name to EasySlidersPlugin\n===\n\n+++[2005.11.03 - 1.0.0]\n initial public release\n===\n\n===\n+++!!!!![Credits]>\nThis feature was implemented by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]] with research, programming and suggestions from RodneyGomes, GeoffSlocock, and PaulPetterson\n===\n***/\n// //+++!!!!![Code]\n//{{{\nversion.extensions.nestedSliders = {major: 1, minor: 7, revision: 7, date: new Date(2006,2,16)};\n//}}}\n\n//{{{\n// options for deferred rendering of sliders that are not initially displayed\nif (config.options.chkDebugLazySliderDefer==undefined) config.options.chkDebugLazySliderDefer=false;\nif (config.options.chkDebugLazySliderRender==undefined) config.options.chkDebugLazySliderRender=false;\n\n// default styles for 'floating' class\nsetStylesheet(".floatingPanel { position:absolute; z-index:10; padding:0.5em; margin:0em; \s\n background-color:#eee; color:#000; border:1px solid #000; text-align:left; }","floatingPanelStylesheet");\n//}}}\n\n//{{{\nconfig.formatters.push( {\n name: "nestedSliders",\n match: "\s\sn?\s\s+{3}",\n terminator: "\s\ss*\s\s={3}\s\sn?",\n lookahead: "\s\sn?\s\s+{3}(\s\s+)?(\s\s([^\s\s)]*\s\s))?(\s\s!*)?(\s\s^)?(\s\s*)?(\s\s[[^\s\s]]*\s\s])?(\s\s>)?(\s\s.\s\s.\s\s.)?\s\ss*",\n handler: function(w)\n {\n var lookaheadRegExp = new RegExp(this.lookahead,"mg");\n lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = lookaheadRegExp.exec(w.source)\n if(lookaheadMatch && lookaheadMatch.index == w.matchStart)\n {\n // location for rendering button and panel\n var place=w.output;\n\n // default to closed, no cookie\n var show="none"; var title=">"; var tooltip="show"; var cookie="";\n\n // extra "+", default to open\n if (lookaheadMatch[1])\n { show="block"; title="<"; tooltip="hide"; }\n\n // cookie, use saved open/closed state\n if (lookaheadMatch[2]) {\n cookie=lookaheadMatch[2].trim().substr(1,lookaheadMatch[2].length-2);\n cookie="chkSlider"+cookie;\n if (config.options[cookie]==undefined)\n { config.options[cookie] = (show=="block") }\n if (config.options[cookie])\n { show="block"; title="<"; tooltip="hide"; }\n else\n { show="none"; title=">"; tooltip="show"; }\n }\n\n // custom label/tooltip\n if (lookaheadMatch[6]) {\n title = lookaheadMatch[6].trim().substr(1,lookaheadMatch[6].length-2);\n var pos=title.indexOf("|");\n if (pos!=-1)\n { tooltip = title.substr(pos+1,title.length); title = title.substr(0,pos); }\n else\n { tooltip += " "+title; }\n }\n\n // create the button\n if (lookaheadMatch[3]) { // use "Hn" header format instead of button/link\n var lvl=(lookaheadMatch[3].length>6)?6:lookaheadMatch[3].length;\n var btn = createTiddlyElement(createTiddlyElement(place,"h"+lvl,null,null,null),"a",null,null,title);\n btn.onclick=onClickNestedSlider;\n btn.setAttribute("href","javascript:;");\n btn.setAttribute("title",tooltip);\n }\n else\n var btn = createTiddlyButton(place,title,tooltip,onClickNestedSlider);\n btn.sliderCookie = cookie; // save the cookiename (if any) in the button object\n\n // "non-click" MouseOver open/close slider\n if (lookaheadMatch[5]) btn.onmouseover=onClickNestedSlider;\n\n // create slider panel\n var panelClass=lookaheadMatch[4]?"floatingPanel":"sliderPanel";\n var panel=createTiddlyElement(place,"div",null,panelClass,null);\n panel.style.display = show;\n panel.button = btn; // so the slider panel know which button it belongs to\n btn.sliderPanel=panel;\n\n // render slider (or defer until shown) \n w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;\n if ((show=="block")||!lookaheadMatch[8]) {\n // render now if panel is supposed to be shown or NOT deferred rendering\n w.subWikify(lookaheadMatch[7]?createTiddlyElement(panel,"blockquote"):panel,this.terminator);\n // align slider/floater position with button\n adjustSliderPos(place,btn,panel,panelClass);\n }\n else {\n var src = w.source.substr(w.nextMatch);\n var endpos=findMatchingDelimiter(src,"+++","===");\n panel.setAttribute("raw",src.substr(0,endpos));\n panel.setAttribute("blockquote",lookaheadMatch[7]?"true":"false");\n panel.setAttribute("rendered","false");\n w.nextMatch += endpos+3;\n if (w.source.substr(w.nextMatch,1)=="\sn") w.nextMatch++;\n if (config.options.chkDebugLazySliderDefer) alert("deferred '"+title+"':\sn\sn"+panel.getAttribute("raw"));\n }\n }\n }\n }\n)\n\n// TBD: ignore 'quoted' delimiters (e.g., "{{{+++foo===}}}" isn't really a slider)\nfunction findMatchingDelimiter(src,starttext,endtext) {\n var startpos = 0;\n var endpos = src.indexOf(endtext);\n // check for nested delimiters\n while (src.substring(startpos,endpos-1).indexOf(starttext)!=-1) {\n // count number of nested 'starts'\n var startcount=0;\n var temp = src.substring(startpos,endpos-1);\n var pos=temp.indexOf(starttext);\n while (pos!=-1) { startcount++; pos=temp.indexOf(starttext,pos+starttext.length); }\n // set up to check for additional 'starts' after adjusting endpos\n startpos=endpos+endtext.length;\n // find endpos for corresponding number of matching 'ends'\n while (startcount && endpos!=-1) {\n endpos = src.indexOf(endtext,endpos+endtext.length);\n startcount--;\n }\n }\n return (endpos==-1)?src.length:endpos;\n}\n//}}}\n\n//{{{\nfunction onClickNestedSlider(e)\n{\n if (!e) var e = window.event;\n var theTarget = resolveTarget(e);\n var theLabel = theTarget.firstChild.data;\n var theSlider = theTarget.sliderPanel\n var isOpen = theSlider.style.display!="none";\n // if using default button labels, toggle labels\n if (theLabel==">") theTarget.firstChild.data = "<";\n else if (theLabel=="<") theTarget.firstChild.data = ">";\n // if using default tooltips, toggle tooltips\n if (theTarget.getAttribute("title")=="show")\n theTarget.setAttribute("title","hide");\n else if (theTarget.getAttribute("title")=="hide")\n theTarget.setAttribute("title","show");\n if (theTarget.getAttribute("title")=="show "+theLabel)\n theTarget.setAttribute("title","hide "+theLabel);\n else if (theTarget.getAttribute("title")=="hide "+theLabel)\n theTarget.setAttribute("title","show "+theLabel);\n // deferred rendering (if needed)\n if (theSlider.getAttribute("rendered")=="false") {\n if (config.options.chkDebugLazySliderRender)\n alert("rendering '"+theLabel+"':\sn\sn"+theSlider.getAttribute("raw"));\n var place=theSlider;\n if (theSlider.getAttribute("blockquote")=="true")\n place=createTiddlyElement(place,"blockquote");\n wikify(theSlider.getAttribute("raw"),place);\n theSlider.setAttribute("rendered","true");\n }\n // show/hide the slider\n if(config.options.chkAnimate)\n anim.startAnimating(new Slider(theSlider,!isOpen,e.shiftKey || e.altKey,"none"));\n else\n theSlider.style.display = isOpen ? "none" : "block";\n if (this.sliderCookie && this.sliderCookie.length)\n { config.options[this.sliderCookie]=!isOpen; saveOptionCookie(this.sliderCookie); }\n // align slider/floater position with target button\n adjustSliderPos(theSlider.parentNode,theTarget,theSlider,theSlider.className);\n return false;\n}\n\n// hijack animation handler 'stop' handler so overflow is visible after animation has completed\nSlider.prototype.coreStop = Slider.prototype.stop;\nSlider.prototype.stop = function() { this.coreStop(); this.element.style.overflow = "visible"; }\n\n// adjust panel position based on button position\nif (window.adjustSliderPos==undefined) window.adjustSliderPos=function(place,btn,panel,panelClass) {\n ///////////////////////////////////////////////////////////////////////////////\n /// EXPERIMENTAL HACK - WORKS IN SOME CASES, NOT IN OTHERS\n ///////////////////////////////////////////////////////////////////////////////\n // "if this panel is floating and the parent is not also a floating panel"...\n if (panelClass=="floatingPanel" && place.className!="floatingPanel") {\n var left=0; var top=btn.offsetHeight;\n if (place.style.position!="relative") { left+=findPosX(btn); top+=findPosY(btn); }\n if (left+panel.offsetWidth > getWindowWidth()) left=getWindowWidth()-panel.offsetWidth;\n panel.style.left=left+"px"; panel.style.top=top+"px";\n }\n}\n\nfunction getWindowWidth() {\n if(document.width!=undefined)\n return document.width; // moz (FF)\n if(document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) )\n return document.documentElement.clientWidth; // IE6\n if(document.body && ( document.body.clientWidth || document.body.clientHeight ) )\n return document.body.clientWidth; // IE4\n if(window.innerWidth!=undefined)\n return window.innerWidth; // IE - general\n return 0; // unknown\n}\n//}}}\n// //===
/***\n|''Name:''|NewHereButton|\n|''Version:''|1.0.1 (7-Oct-2005)|\n|''Source:''|MonkeyPirateTiddlyWiki (http://homes.jcu.edu.au/~ccscb/mptw/#NewHereButton)|\n|''Author:''|SimonBaird|\n|''Type:''|Plugin|\n|''Requires:''|No special requirements but works well with TagglyTagging|\n!Description\nAdds a toolbar button which lets you create a new tiddler with a pre-entered tag of the name of the tiddler where you clicked the button. (Not as confusing as it sounds!).\n\n!Revision history\n* v1.0.0 (Jul-2005)\n** first version\n* v1.0.1 (7-Oct-2005)\n** added some this doco\n** fixed bug where it didn't add the necessary {{{[[}}} and {{{]]}}} when the current tiddler had a space in its title and you weren't using CommaSeparatedTags. Thanks Dan Knapp for this fix.\n\n!Code\n***/\n//{{{\n\nwindow.onClickToolbarNewHere = function(e) {\n if (!e) var e = window.event;\n clearMessage();\n if(this.parentNode.id) {\n displayTiddler(this.parentNode,"New Tiddler",2,null,null,false,false);\n tagBox = document.getElementById("editorTagsNew Tiddler"); \n var tagString = this.parentNode.id.substring(7);\n if (!window.commafyTags) // we aren't using comma separated tags plugin (commafyTags is a function)\n if(tagString.indexOf(" ") != -1)\n tagString = "[[" + tagString + "]]";\n tagBox.value = tagString;\n }\n e.cancelBubble = true; // do I need this?\n if (e.stopPropagation) e.stopPropagation(); // do I need this?\n return false;\n}\n\nconfig.views.wikified.toolbarNewHere = {\n text: "new here",\n tooltip: "Create a new tiddler tagged as this tiddler"\n};\n\nwindow.createTiddlerToolbar_mptw_newhere = window.createTiddlerToolbar;\n\nwindow.createTiddlerToolbar = function(title,isEditor) {\n // first create regular toolbar\n createTiddlerToolbar_mptw_newhere(title,isEditor);\n\n if(!isEditor && !readOnly) {\n // now add extra button\n var theToolbar = document.getElementById("toolbar" + title);\n var lingo = config.views.wikified;\n createTiddlyButton(theToolbar, lingo.toolbarNewHere.text, lingo.toolbarNewHere.tooltip, onClickToolbarNewHere);\n insertSpacer(theToolbar); // in case we wanna add any more buttons after this one\n }\n}\n\n//}}}\n
// //Use this if you get tired of deleting the default text when you create a tiddler.\n//{{{\nconfig.views.editor.defaultText = ""; // was "Type the text for '%0'"\n//}}}
I have publined in various journals and referred conferences. A set of selected publications are located [[here | ./papers.html]].\nThe papers are organized into:\n* [[Distributed and Autonomous Systems]]: Includes papers in Quality of Service in Distributed systems and distributed applications, Adaptive Systems, Statistical Modeling of Systems, Dynamic Resource Allocation, Auction protocols for Resource Allocations, ~QoS adaptive applications, Distributed Multimedia systems and Transport Protocols for reliable multicast. \n* [[Computer Vision and Video Processing]]: Includes papers in segmentation of Video data, segmentation of 3-D range data, motion computations from sequence of range data and non-rigid and articulated motion. \n* [[Parallel Computing]]: Includes papers in parallel algorithms for range image segmentation, Interconnection Networks design and routing, processor allocations, and Systolic arrays.
Includes papers in parallel algorithms for range image segmentation, Interconnection Networks design and routing, processor allocations, and Systolic arrays.\n\n# “Parallelization of 3-D Range Image Segmentation on a SIMD Multiprocessor,” with Vipin Chaudhary, and Sumit Roy in Proceedings of the ISCA 12th International Conference on Computers and their Applications, Tempe, Arizona, pp 106-109, March 13-15, 1997.\n# “Strategies for processor allocation in K-ary n-cubes,” with G. Dommety and V. Chaudhary, in Proceedings of the International Conference on Parallel and Distributed Computing Systems, Orlando, Florida, Sept. 1995.\n# “Mapping Interconnection Networks into VEDIC Networks,” with V. Chaudhary and J.K. Aggarwal, in Proc. of International Parallel Processing Symposium, pp. 531 - 537, April, 1993.\n# “Deadlock-free multicast wormhole routing in VEDIC networks,” with V. Chaudhary and J.K. Aggarwal, presented at International Conference on Parallel Processing, 1992.\n# “The VEDIC network for multicomputers,” with V. Chaudhary and J.K. Aggarwal, in Proc. of International Conference on Parallel Processing, Vol. I, pp. 686 - 687, Aug. 1991.\n# “A Mechanically Derived Systolic Implementation of Pyramid Initialization,” with C. Lengauer and F. Arman, in Workshop on Hardware Specification, Verification and Synthesis: Mathematical Aspects, Eds. M. Lesser and G. Brown, Lecture Notes in Computer Science, Springer Verlag, Ithaca, N.Y, 1989.\n
config.macros.pub = {};\n\nfunction adorn(author) {\n var alias = config.macros[author];\n if (alias) {return alias.name?alias.name:alias.text} else {return author}\n}\n\nconfig.macros.pub.handler= function(place,macroName,params) {\n var title = params[0];\n var url = params[1];\n var authors = params[2].split(",");\n var citation = params[3];\n var year = params[4];\n\n // expand author aliases\n var aliases = adorn(authors[0]);\n for (var i=1; i < authors.length; i++) {\n aliases = aliases + ", " + adorn(authors[i])\n }\n wikify("''[[" + title + "|" + url + "]]'', " + aliases + ", [[" + citation + "]], " + year, place);\n}
// //''Name:'' Reminder plugin\n// //''Version:'' 2.2 (Sept 9, 2005)\n// //''Author:'' JeremySheeley\n// //''Contact:'' pop1280 [at] excite [dot] com\n\n// //''Installation'' \n// //1. Create a new tiddler in your tiddlywiki titled\n// // ReminderPlugin and give it the {{{systemConfig}}} \n// // tag. The tag is important because it tells TW \n// // that this is executable code.\n// //2. Double click this tiddler, and copy all the \n// // text from the tiddler's body.\n// //3. Paste the text into the body of the new tiddler \n// // in your TW.\n// //4. Save and reload your TW.\n// //5. You can copy some examples into your TW as well. // // See [[Simple Examples]], [[Holidays]], [[showReminders]] and [[Personal Reminders]]\n\n// //''Syntax:'' \n// // There are three macros defined here\n// //* reminder - see [[ReminderSyntax]]\n// //* showReminders - see [[showRemindersSyntax]]\n// //* displayTiddlersWithReminders - see [[showRemindersSyntax]]\n\n// //''Description:'' \n// // This plugin provides macros for tagging a date with \n// // a reminder. Use the {{{reminder}}} macro to do \n// // this. The {{{showReminders}}} and \n// // {{{displayTiddlersWithReminder}}} macros \n// // automatically search through all available tiddlers \n// // looking for upcoming reminders.\n\n// //''Todo:''\n// //* Provide a user interface to creating a reminder.\n// //* \n\n// //''Configuration:''\n// //Modify this section to change the defaults for \n// //leadtime and display strings\n//{{{\n\nconfig.macros.reminders = {};\nconfig.macros["reminder"] = {};\nconfig.macros["showReminders"] = {};\nconfig.macros["displayTiddlersWithReminders"] = {};\n\nconfig.macros.reminders["defaultLeadTime"] = [0,6000];\n//config.macros.reminders["defaultReminderMessage"] = "DIFF: TITLE on DATE ANNIVERSARY";\nconfig.macros.reminders["defaultReminderMessage"] = "|DIFF|TITLE|DATE ANNIVERSARY|";\n//config.macros.reminders["defaultShowReminderMessage"] = "DIFF: TITLE on DATE ANNIVERSARY -- TIDDLER";\nconfig.macros.reminders["defaultShowReminderMessage"] = "|DIFF|TITLE |DATE ANNIVERSARY|TIDDLER|";\nconfig.macros.reminders["defaultAnniversaryMessage"] = "(DIFF)";\nconfig.macros.reminders["untitledReminder"] = "Untitled Reminder";\nconfig.macros.reminders["noReminderFound"] = "Couldn't find a match for TITLE in the next LEADTIMEUPPER days."\nconfig.macros.reminders["todayString"] = "Today";\nconfig.macros.reminders["tomorrowString"] = "Tomorrow";\nconfig.macros.reminders["ndaysString"] = "DIFF days";\n\n//}}}\n// // Code section. You should not need to edit anything // // below this. Make sure to edit this tiddler and copy \n// // the code from the text box, to make sure that \n// // tiddler rendering doesn't interfere with the copy \n// // and paste.\n//{{{\nconfig.macros.showReminders.handler = function(place,macroName,params)\n{\n var now = new Date().getMidnight();\n var paramHash = {};\n var type = "";\n var num = 0;\n var leadtime = [0,14];\n var paramHash = getParamsForReminder(params);\n var bProvidedDate = (paramHash["year"] != null) \n || (paramHash["month"] != null) \n || (paramHash["day"] != null) \n || (paramHash["dayofweek"] != null)\n if (paramHash["leadtime"] != null)\n {\n leadtime = paramHash["leadtime"];\n if (bProvidedDate)\n //If they've entered a day, we need to make \n //sure to find it. We'll reset the \n //leadtime a few lines down.\n paramHash["leadtime"] = [-10000, 10000]\n }\n var matchedDate = now;\n if (bProvidedDate)\n {\n matchedDate = findDateForReminder(paramHash); \n }\n\n var arr = findTiddlersWithReminders(matchedDate, leadtime, paramHash["tag"], paramHash["limit"]);\n var elem = createTiddlyElement(place,"span",null,null, null);\n var mess = "";\n for (var j = 0; j < arr.length; j++)\n {\n if (paramHash["format"] != null)\n arr[j]["params"]["format"] = paramHash["format"];\n else\n arr[j]["params"]["format"] = config.macros.reminders["defaultShowReminderMessage"];\n mess += getReminderMessageForDisplay(arr[j]["diff"], arr[j]["params"], arr[j]["matchedDate"], arr[j]["tiddler"]);\n mess += "\sn";\n }\n wikify(mess, elem, null, null);\n}\n\n\nconfig.macros.displayTiddlersWithReminders.handler = function(place,macroName,params)\n{\n var now = new Date().getMidnight();\n var paramHash = {};\n var type = "";\n var num = 0;\n var leadtime = [0,14];\n var paramHash = getParamsForReminder(params);\n var bProvidedDate = (paramHash["year"] != null) \n || (paramHash["month"] != null) \n || (paramHash["day"] != null) \n || (paramHash["dayofweek"] != null)\n if (paramHash["leadtime"] != null)\n {\n leadtime = paramHash["leadtime"];\n if (bProvidedDate)\n //If they've entered a day, we need to make \n //sure to find it. We'll reset the leadtime \n //a few lines down.\n paramHash["leadtime"] = [-10000,10000];\n }\n var matchedDate = now;\n if (bProvidedDate)\n {\n matchedDate = findDateForReminder(paramHash); \n }\n var arr = findTiddlersWithReminders(matchedDate, leadtime, paramHash["tag"], paramHash["limit"]);\n for (var j = 0; j < arr.length; j++)\n {\n displayTiddler(null, arr[j]["tiddler"], 0, null, false, false, false)\n }\n}\n\nconfig.macros.reminder.handler = function(place,macroName,params)\n{\n var dateHash = getParamsForReminder(params);\n if (dateHash["hidden"] != null)\n return;\n var matchedDate = findDateForReminder(dateHash);\n var leadTime = dateHash["leadtime"];\n if (leadTime == null)\n leadTime = config.macros.reminders["defaultLeadTime"]; \n\n if (matchedDate != null)\n {\n var diff = matchedDate.getDifferenceInDays(new Date())\n var elem = createTiddlyElement(place,"span",null,null, null);\n var mess = getReminderMessageForDisplay(diff, dateHash, matchedDate);\n wikify(mess, elem, null, null);\n }\n else\n createTiddlyElement(place,"span",null,null, config.macros.reminders["noReminderFound"].replace("TITLE", dateHash["title"]).replace("LEADTIMEUPPER", leadTime[1]).replace("LEADTIMELOWER", leadTime[0]) );\n}\n\nhasTag = function(tiddlerTags, tagFilters)\n{\n var bHasTag = false;\n var bNegative = false;\n for (var t3 = 0; t3 < tagFilters.length; t3++)\n {\n if (tagFilters[t3].length > 1 && tagFilters[t3].charAt(0) == '!')\n bHasTag = true;\n for(var t2=0; t2<tiddlerTags.length; t2++)\n {\n if (tagFilters[t3].length > 1 && tagFilters[t3].charAt(0) == '!')\n {\n if (tiddlerTags[t2] == tagFilters[t3].substring(1))\n {\n bHasTag = false;\n return false;\n }\n else\n bHasTag = true;\n }\n else if (tiddlerTags[t2] == tagFilters[t3])\n {\n bHasTag = true;\n return true;\n }\n }\n }\n return bHasTag;\n}\n\n//This function searches all tiddlers for the reminder //macro. It is intended that other plugins (like //calendar) will use this function to query for \n//upcoming reminders.\n//The arguments to this function filter out reminders //based on when they will fire.\n//\n//ARGUMENTS:\n//baseDate is the date that is used as "now". \n//leadtime is a two element int array, with leadtime[0] \n// as the lower bound and leadtime[1] as the\n// upper bound. A reasonable default is [0,14]\n//tags is a space-separated list of tags to use to filter \n// tiddlers. If a tag name begins with an !, then \n// only tiddlers which do not have that tag will \n// be considered. For example "examples holidays" \n// will search for reminders in any tiddlers that \n// are tagged with examples or holidays and \n// "!examples !holidays" will search for reminders \n// in any tiddlers that are not tagged with \n// examples or holidays. Pass in null to search \n// all tiddlers.\n//limit. If limit is null, individual reminders can \n// override the leadtime specified earlier. \n// Pass in 1 in order to override that behavior.\n\nfindTiddlersWithReminders = function(baseDate, leadtime, tags, limit)\n{\n var matches = store.search("reminder",false,false,"title","excludeSearch");\n var macroPattern = "<<([^>\s\ss]+)(?:\s\ss*)([^>]*)>>";\n var macroRegExp = new RegExp(macroPattern,"mg");\n var arr = [];\n var tagsArray = null;\n if (tags != null)\n tagsArray = tags.split(" ");\n for(var t=matches.length-1; t>=0; t--)\n {\n if (tagsArray != null)\n {\n //If they specified tags to filter on, and this tiddler doesn't \n //match, skip it entirely.\n if ( ! hasTag(matches[t].tags, tagsArray))\n continue;\n }\n\n var targetText = matches[t].text;\n do {\n // Get the next formatting match\n var formatMatch = macroRegExp.exec(targetText);\n var matchPos = formatMatch ? formatMatch.index : targetText.length;\n var level;\n var theBlockquote;\n if(formatMatch && formatMatch[1] != null && formatMatch[1].toLowerCase() == "reminder")\n {\n //Find the matching date.\n var params = formatMatch[2].readMacroParams();\n var dateHash = getParamsForReminder(params);\n\n if (limit != null || dateHash["leadtime"] == null)\n dateHash["leadtime"] = leadtime;\n\n var matchedDate = findDateForReminder(dateHash, baseDate);\n if (matchedDate != null)\n {\n var hash = {};\n hash["diff"] = matchedDate.getDifferenceInDays(baseDate);\n hash["matchedDate"] = matchedDate;\n hash["params"] = dateHash;\n hash["tiddler"] = matches[t].title;\n hash["tags"] = matches[t].tags;\n arr.pushUnique(hash);\n }\n }\n }while(formatMatch);\n }\n if(arr.length > 1) //Sort the array by number of days remaining.\n arr.sort(function (a,b) {if(a["diff"] == b["diff"]) return(0); else return (a["diff"] < b["diff"]) ? -1 : +1; });\n return arr;\n}\n\n//This function takes the reminder macro parameters and\n//generates the string that is used for display.\n//This function is not intended to be called by \n//other plugins.\ngetReminderMessageForDisplay = function(diff, params, matchedDate, tiddlerTitle)\n{\n var anniversaryString = "";\n var reminderTitle = params["title"];\n if (reminderTitle == null)\n reminderTitle = config.macros.reminders["untitledReminder"];\n if (params["firstyear"] != null)\n anniversaryString = config.macros.reminders["defaultAnniversaryMessage"].replace("DIFF", (matchedDate.getFullYear() - params["firstyear"]));\n var mess = "";\n if (diff == 0)\n diffString = config.macros.reminders["todayString"];\n else if (diff == 1)\n diffString = config.macros.reminders["tomorrowString"];\n else\n diffString = config.macros.reminders["ndaysString"].replace("DIFF", diff);\n var format = config.macros.reminders["defaultReminderMessage"];\n if (params["format"] != null)\n format = params["format"];\n mess = format;\n if (tiddlerTitle != null)\n mess = mess.replace("TIDDLER", "[[" + tiddlerTitle + "]]");\n mess = matchedDate.formatString(mess.replace("DIFF", diffString).replace("TITLE", reminderTitle).replace("DATE", matchedDate.formatString("DDD MMM DD, YYYY")).replace("ANNIVERSARY", anniversaryString));\n return mess;\n}\n\n// Parse out the macro parameters into a hashtable. This\n// handles the arguments for reminder, showReminders and \n// displayTiddlersWithReminders.\ngetParamsForReminder = function(params)\n{\n var dateHash = {};\n var type = "";\n var num = 0;\n var title = "";\n for(var t=0; t<params.length; t++)\n {\n split = params[t].split(":");\n type = split[0].toLowerCase();\n var value = split[1];\n for (var i=2; i < split.length; i++)\n value += ":" + split[i];\n if (type == "nolinks" || type == "limit" || type == "hidden")\n num = 1;\n else if (type == "leadtime")\n {\n leads = value.split("...");\n if (leads.length == 1)\n {\n leads[1]= leads[0];\n leads[0] = 0;\n }\n leads[0] = parseInt(leads[0]);\n leads[1] = parseInt(leads[1]);\n num = leads;\n }\n else if (type != "title" && type != "tag" && type != "format")\n num = parseInt(value);\n else\n {\n title = value;\n while (title.substr(0,1) == '"' && title.substr(title.length - 1,1) != '"')\n title += " " + params[++t];\n //Trim off the leading and trailing quotes\n if (title.substr(0,1) == "\s"" && title.substr(title.length - 1,1)== "\s"")\n title = title.substr(1, title.length - 2);\n num = title;\n }\n dateHash[type] = num;\n }\n //date is synonymous with day\n if (dateHash["day"] == null)\n dateHash["day"] = dateHash["date"];\n return dateHash;\n}\n\n//This function finds the date specified in the reminder \n//parameters. It will return null if no match can be\n//found. This function is not intended to be used by\n//other plugins.\nfindDateForReminder = function( dateHash, baseDate)\n{\n if (baseDate == null)\n baseDate = new Date().getMidnight();\n var leadTime = dateHash["leadtime"];\n var bOffsetSpecified = dateHash["offsetyear"] != null \n || dateHash["offsetmonth"] != null\n || dateHash["offsetday"] != null\n || dateHash["offsetdayofweek"] != null\n || dateHash["recurdays"] != null;\n \n if (leadTime == null)\n leadTime = config.macros.reminders["defaultLeadTime"]; \n var matchedDate = baseDate.findMatch(dateHash, bOffsetSpecified ? [0, 6000] : leadTime);\n if (matchedDate != null)\n {\n var newMatchedDate = matchedDate;\n if (dateHash["recurdays"] != null)\n {\n while (newMatchedDate.getTime() < baseDate.getTime())\n {\n newMatchedDate = newMatchedDate.addDays(dateHash["recurdays"]);\n }\n }\n else if (dateHash["offsetyear"] != null \n || dateHash["offsetmonth"] != null\n || dateHash["offsetday"] != null\n || dateHash["offsetdayofweek"] != null)\n {\n dateHash["year"] = dateHash["offsetyear"];\n dateHash["month"] = dateHash["offsetmonth"];\n dateHash["day"] = dateHash["offsetday"];\n dateHash["dayofweek"] = dateHash["offsetdayofweek"];\n newMatchedDate = matchedDate.findMatch(dateHash, leadTime);\n //The offset couldn't be matched. return null.\n if (newMatchedDate == null)\n return null;\n }\n var diff2 = newMatchedDate.getDifferenceInDays(baseDate);\n if (diff2 <= leadTime[1] && diff2 >= leadTime[0])\n return newMatchedDate;\n }\n return null;\n}\n\n//This does much the same job as findDateForReminder, but\n//this one doesn't deal with offsets or recurring \n//reminders.\nDate.prototype.findMatch = function(dateHash, leadTime)\n{\n var bSpecifiedYear = (dateHash["year"] != null);\n var bSpecifiedMonth = (dateHash["month"] != null);\n var bSpecifiedDay = (dateHash["day"] != null);\n var bSpecifiedDayOfWeek = (dateHash["dayofweek"] != null);\n if (bSpecifiedYear && bSpecifiedMonth && bSpecifiedDay)\n return Date.convertFromYYYYMMDDHHMM("" + dateHash["year"] + String.zeroPad(dateHash["month"],2) + String.zeroPad(dateHash["day"],2) + "0000");\n var bMatchedYear = !bSpecifiedYear;\n var bMatchedMonth = !bSpecifiedMonth;\n var bMatchedDay = !bSpecifiedDay;\n var bMatchedDayOfWeek = !bSpecifiedDayOfWeek;\n var searchInterval = 1;\n if (bSpecifiedDayOfWeek && dateHash["dayofweek"] < 0)\n {\n dateHash["dayofweek"] = dateHash["dayofweek"] * -1;\n searchInterval = -1;\n }\n if (bSpecifiedDay && bSpecifiedMonth && !bSpecifiedYear && !bSpecifiedDayOfWeek)\n {\n\n //Shortcut -- First try this year. If it's too small, try next year.\n var tmpMidnight = this.getMidnight();\n var tmpLeadTime = this.addDays(leadTime[0]).getMidnight();\n var tmpDate = Date.convertFromYYYYMMDDHHMM("" + this.getFullYear() + String.zeroPad(dateHash["month"],2) + String.zeroPad(dateHash["day"],2) + "0000");\n if (tmpDate.getTime() < tmpLeadTime.getTime())\n tmpDate = Date.convertFromYYYYMMDDHHMM("" + (this.getFullYear() + 1) + String.zeroPad(dateHash["month"],2) + String.zeroPad(dateHash["day"],2) + "0000");\n var diff2 = tmpDate.getDifferenceInDays(tmpMidnight);\n\n if (diff2 <= leadTime[1] && diff2 >= leadTime[0])\n return tmpDate;\n else\n return null;\n }\n\n for (var i = 0; i <= leadTime[1]; i+=searchInterval)\n {\n var newDate = this.addDays(i);\n if (bSpecifiedYear)\n bMatchedYear = ((dateHash["year"] - 1900) == newDate.getYear());\n if (bSpecifiedMonth)\n bMatchedMonth = ((dateHash["month"] - 1) == newDate.getMonth() );\n if (bSpecifiedDay)\n bMatchedDay = (dateHash["day"] == newDate.getDate());\n if (bSpecifiedDayOfWeek)\n bMatchedDayOfWeek = (dateHash["dayofweek"] == newDate.getDay());\n\n if (bMatchedYear && bMatchedMonth && bMatchedDay && bMatchedDayOfWeek)\n return newDate;\n }\n//Only search backwards if we're not just trying to match the dayofweek\nif (leadTime[0] < 0 && (bSpecifiedYear || bSpecifiedMonth || bSpecifiedDay))\n for (var i = 0; i >= leadTime[0]; i+=(searchInterval * -1))\n {\n var newDate = this.addDays(i);\n if (bSpecifiedYear)\n bMatchedYear = ((dateHash["year"] - 1900) == newDate.getYear());\n if (bSpecifiedMonth)\n bMatchedMonth = ((dateHash["month"] - 1) == newDate.getMonth() );\n if (bSpecifiedDay)\n bMatchedDay = (dateHash["day"] == newDate.getDate());\n if (bSpecifiedDayOfWeek)\n bMatchedDayOfWeek = (dateHash["dayofweek"] == newDate.getDay());\n\n if (bMatchedYear && bMatchedMonth && bMatchedDay && bMatchedDayOfWeek)\n return newDate;\n }\n}\n\n//Return a new date, with the time set to midnight (0000)\nDate.prototype.getMidnight = function()\n{\n return Date.convertFromYYYYMMDDHHMM("" + this.getFullYear() + String.zeroPad(this.getMonth()+1,2) + String.zeroPad(this.getDate(),2) + "0000");\n}\n// Add the specified number of days to a date.\nDate.prototype.addDays = function(numberOfDays)\n{\n return(new Date(this.getTime() + (86400000 * numberOfDays)));\n}\n//Return the number of days between two dates.\nDate.prototype.getDifferenceInDays = function(otherDate)\n{\n return Math.floor((this.getMidnight().getTime() - otherDate.getMidnight().getTime()) / 86400000);\n \n}\n\n//}}}\n
Building systems with intelligence embedded in them is what motivates me in my research. Over the last 15 years I have studied many different types of application areas and have attempted to apply advanced AI and machine learning techniques to address some of the challenges. I am passionate about pushing the envelope on Machine Learning and uncertain reasoning with the goal of solving a real world problem. My current research activities revolve around two key problem domains: (a) The understanding of imagery and video for information retrieval, and (b) The applications of statistics and pattern recognition techniques in distributed systems. A foundational technique that covers both areas is a framework for doing scalable Evidential Reasoning and computing optimal decisions. I have been working on a ''Bayesian Blackboard'' system to do hierarchical evidential reasoning and learning. The early version of the system has been applied to intrusion detection in networks. \n\n''Image and video understanding'': I have been working on hierarchical sensor and information fusion techniques to detect, identify and recognize semantically significant objects in the scene. This approach will provide a scalable indexing method for content based retrieval, similarity queries and categorization.\n\n''Intelligent Distributed Systems'': I am working on using Bayesian Networks and Statistical AI techniques to reason about the state of the distributed system such as Sensor Networks. The goal is to build a self-sustaining sensor network that is able to diagnose the faults, attacks and performance bottlenecks. Further, local actions can be taken at each node that will maximize the global utility of the network. I have also been working on developing techniques to characterize the capacity of a distributed system and provide performance and other ~QoS guarantees. The lessons learned in the Wireless Sensor Networks will translate to similar challenges in ~Peer-to-Peer distributed systems and the Internet.\n\nI started my research in Image Processing and Computer Vision and then over the last 15 years have worked in a diverse set of research problems. These included Multimedia Systems, Video Understanding and Indexing, ~QoS in distributed systems, Networking, Network Security, and Wireless Sensor Networks. The exciting journey through the different research areas allowed me to explore and work on a wide range of AI techniques from modeling and reasoning to learning. These include Bayesian Network Modeling, Probabilistic Relational Models, ~On-Line Learning, Clustering, Classification, Auctions and Market Mechanisms.
Here is a [[HTML version|./Resume/resume.html]] of the resume and a downloadable [[PDF copy| ./Resume/resume.pdf]] of the resume. Please contact me at bikash@sabata.net if there seems to be a problem or if you need additional information.
/***\n|''Name:''|ShortenTabLinks|\n|''Version:''|1.0.2 (11-Oct-2005)|\n|''Source:''|MonkeyPirateTiddlyWiki (http://homes.jcu.edu.au/~ccscb/mptw/#ShortenTabLinks)|\n|''Author:''|SimonBaird|\n|''Type:''|Plugin|\n!Description\nTruncate Tiddler links in the sideBarTabs. Add ... to end of truncated links. \n\n!Directions:\nYou might want to adjust the length to truncate at. See config section in code below.\n\n!Revision History\n* v1.0.1 (09-Sep-2005)\n** Added this documentation. Fixed bug where it was triggering inside tabs macro (the parent3 stuff).\n* v1.0.2 (11-Oct-2005)\n** Updated documentation\n\n!Code\n***/\n//{{{\n\n// adjust this to your preference:\nconfig.mptw_shortnames = {\n trimAt: 20\n};\n\nwindow.createTiddlyLink_orig_mptw_shortnames = window.createTiddlyLink;\n\nwindow.createTiddlyLink = function(place,title,includeText) {\n\n // first create the button using the standard create function\n // this will survive upgrades better than the my old way which\n // was to replace the entire function\n var btn = createTiddlyLink_orig_mptw_shortnames(place,title,includeText);\n\n // use this trick to check if we are in a sidebar\n\n var parent3id = null;\n var parent5id = null;\n var parent7id = null;\n\n try {\n parent3id = btn.parentNode.parentNode.parentNode.id;\n parent5id = btn.parentNode.parentNode.parentNode.parentNode.parentNode.id;\n parent7id = btn.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.id;\n }\n catch (e) {}\n\n // three gets the timeline\n // five gets the all and tags?\n // seven gets the stuff in the More tab\n // apologies for ugliness. must be a better way to determine if in sidebar???\n\n if (parent3id == "sidebarTabs" || parent5id == "sidebarTabs" || parent7id == "sidebarTabs") {\n // we must be in a sidebar\n // so lets do our thing\n\n var trimAt = config.mptw_shortnames.trimAt;\n \n // check if we need to trim\n if (title.length > trimAt) {\n shortTitle = title.substring(0,trimAt).trim(); // why doesn't this trim seem to work???\n // um, wouldn't need this bit if the trim worked.\n while (shortTitle.substr(shortTitle.length-1) == " ") {\n shortTitle = shortTitle.substr(0,shortTitle.length-1);\n }\n removeChildren(btn); // btn is an a element and only has one child, the text node\n btn.appendChild(document.createTextNode(shortTitle+"…")); // it's a &hellip;\n }\n }\n return btn;\n}\n\n//}}}\n
//{{{\nconfig.shadowTiddlers.SideBarOptions = config.shadowTiddlers.SideBarOptions.replace(\n /gradient vert #...... #....../,\n "gradient vert #447744 #88aa88"\n );\n//}}}\n
<<today>> \nbikash@sabata.net
Bikash Sabata
http://simonbaird.com/mptw1/
[[MPTWStyle]]
/***\n|''Name:''|TagglyTaggingPlugin|\n|''Version:''|1.0.7 (01-Nov-2005)|\n|''Source:''|MonkeyPirateTiddlyWiki (http://homes.jcu.edu.au/~ccscb/mptw/#TagglyTaggingPlugin)|\n|''Author:''|SimonBaird|\n|''Type:''|Plugin|\n!Description\nSee TagglyTaggingFAQ (http://homes.jcu.edu.au/~ccscb/mptw/#TagglyTaggingFAQ)\n\n!Issues\n* Suffers from the same mouseover glitch in IE as the tiddler toolbar buttons. Makes it hard to get your sort controls visible in IE. You have to put the mouse over the "Tagged as" label.\n\n!Directions\n* You can change your preferred default sort order and format by editing defaultOptions below.\n\n!Revision history\n* v1.0.0 (Jul-2005)\n** first working version\n** (probably a bunch of unrecorded changes between 1.0.0 and 1.0.1)\n* v1.0.1 (9-Oct-2005)\n** added this doco\n** add ability to change sort and format\n* v1.0.2 (10-Oct-2005)\n** fixed missing tag count in tags tab (thanks [[Clint]] for this fix)\n* v1.0.3 (11-Oct-2005)\n** fixed bug in part that interacts with [[ShortenTabLinks]]. (Thanks to [[Paul Petterson]] for locating this.)\n* v1.0.4 (15-Oct-2005)\n** made list options sticky by storing them in the store.\n** merged "TagsBoxAtTop" into this plugin\n* v1.0.5 (22-Oct-2005)\n** added table format and column controls\n** seems broken in IE. will fix asap.\n* v1.0.6 (24-Oct-2005)\n** IE fixed. needed a tbody (Thanks [[Paul Petterson]]).\n** Fixed many problems with tagged lists for non-existant tiddlers. (Thanks [[Paul Petterson]] again!).\n* v1.0.7 (01-Nov-2005)\n** made table style a little more specify (.viewer table.tagged) to counter css changes in 1.2.37\n\n!Code\n***/\n//{{{\n\n// ----------------------------------------------------------\n// A little bit of config stuff\nif (!config.plugins) config.plugins = [];\n\nif (!config.plugins.TagglyTagging) config.plugins.TagglyTagging = [];\n\n// you can edit this. format is (name|date)-(asc|desc)-(bullets|commas)\nconfig.plugins.TagglyTagging.defaultOptions = "name-asc-bullets-1";\n\nconfig.plugins.TagglyTagging.maxCols = 6;\n\nconfig.plugins.TagglyTagging.tiddlerFields = { name: "title", date: "modified" };\nconfig.plugins.TagglyTagging.formats = {\n bullets: "*[[%0]]\sn",\n commas: "[[%0]], "\n};\n\n// ----------------------------------------------------------\n// allow storing tagged list options in the tiddlers\nTiddler.prototype.getListOpts = function() {\n return (this["taggedListOpts"]?this.taggedListOpts:"");\n}\n\nTiddler.prototype.setListOpts = function(opts) {\n this.taggedListOpts = opts;\n}\n\n// ----------------------------------------------------------\n// make the tagged list options get saved and loaded in the storeArea\n\n// because tiddlers are already loaded by the time we get here\n// hijacking loadFromDiv would require that we reload the store now\n// for a second time. that might be slow so instead lets do this:\nTiddler.prototype.loadListOptsFromDiv = function(divRef) {\n this.setListOpts(divRef.getAttribute("taggedlistopts"));\n}\n\nTiddlyWiki.prototype.loadListOptsFromDiv = function(srcId) {\n var divs = document.getElementById(srcId).childNodes;\n for (var t=0; t<divs.length; t++)\n if (divs[t].getAttribute) // to skip whitespace text node?\n this.tiddlers[divs[t].getAttribute("tiddler")].loadListOptsFromDiv(divs[t]);\n}\n\n\nTiddler.prototype.saveToDiv_orig_mptw = Tiddler.prototype.saveToDiv;\nTiddler.prototype.saveToDiv = function() {\n var txt = this.saveToDiv_orig_mptw();\n return txt.replace(/">/,'" taggedlistopts="'+this.getListOpts()+'">');\n}\n\nstore.loadListOptsFromDiv("storeArea");\n\n// ----------------------------------------------------------\n// a class to make handling the tagged list options easier\nfunction TagglyOptions(optionsString) {\n if (!optionsString || optionsString == "")\n optionsString = config.plugins.TagglyTagging.defaultOptions;\n var opts = optionsString.split("-");\n this.sortField = opts[0];\n this.sortOrder = opts[1];\n this.listFormat = opts[2];\n if (opts.length > 3) // helps with upgrade from 1.0.4...\n this.numCols = opts[3] * 1; // make sure it's a number\n else \n this.numCols = 1;\n return this;\n}\n\nTagglyOptions.prototype.toggleListFormat = function() {\n if (this.listFormat == "bullets")\n return "commas"\n else\n return "bullets";\n}\n\nTagglyOptions.prototype.incrNumCols = function() {\n if (this.numCols < config.plugins.TagglyTagging.maxCols)\n return this.numCols + 1;\n else\n return this.numCols;\n}\n\nTagglyOptions.prototype.decrNumCols = function() {\n if (this.numCols > 1)\n return this.numCols - 1;\n else\n return this.numCols;\n}\n\n\nTagglyOptions.prototype.optionsString = function() {\n return [this.sortField,this.sortOrder,this.listFormat,this.numCols].join("-");\n}\n\nTagglyOptions.prototype.toggleSortOrder = function() {\n return (this.sortOrder == "asc")?"desc":"asc";\n}\n\nTagglyOptions.prototype.formatString = function() {\n return config.plugins.TagglyTagging.formats[this.listFormat];\n}\n\nTagglyOptions.prototype.tiddlerField = function() {\n return config.plugins.TagglyTagging.tiddlerFields[this.sortField];\n}\n\n\nTagglyOptions.prototype.buttonLabels = function() {\n var upArrow = "↑"; // &uarr;\n var downArrow = "↓"; // &darr;\n\n var result = { name: "name", date: "date", format: this.toggleListFormat(), decr: "cols-", incr: "cols+" };\n\n // asc means increasing down the page hence arrows are reverse what you might first expect\n if (this.sortField == "name")\n result.name += (this.sortOrder == "desc")?upArrow:downArrow;\n else if (this.sortField == "date")\n result.date += (this.sortOrder == "desc")?upArrow:downArrow; \n\n return result;\n}\n\n// ----------------------------------------------------------\n// highjack prototype function to allow asc or desc sorting\nTiddlyWiki.prototype.reverseLookup_mptw_ascdesc = TiddlyWiki.prototype.reverseLookup;\nTiddlyWiki.prototype.reverseLookup = function(lookupField,lookupValue,lookupMatch,sortField,sortAscDesc) {\n var results = this.reverseLookup_mptw_ascdesc(lookupField,lookupValue,lookupMatch,sortField);\n if (sortAscDesc && sortAscDesc == "desc")\n results.reverse();\n return results;\n}\n\n// This is a short function I will just replace. hence may break in future TWs\nTiddlyWiki.prototype.getTaggedTiddlers = function(tag,sortField,ascdesc) {\n return this.reverseLookup("tags",tag,true,sortField,ascdesc);\n}\n\n// ----------------------------------------------------------\n// we need some styles for the controls. override them in your StyleSheet if you like\n\nsetStylesheet(\n".taggedControls {color:#bbb; font-size:80%;padding:0px;margin:0px;margin-right:0.7em;}\sn"+\n"a.taggedControls {color:#999!important; padding:2px; -moz-border-radius: 0.75em;}\sn"+\n"a.taggedControls:hover {background:#ddd!important; }\sn"+\n".hideTaggedControls {display:none;}\sn"+\n".showTaggedControls { }\sn"+\n"","taggedControls");\n\n// ----------------------------------------------------------\n// returns the tagged list in unwikified text\nfunction getTaggedTiddlersText(title,options) {\n var tags = store.getTaggedTiddlers(title,options.tiddlerField(),options.sortOrder)\n var str=""; \n for (var i=0; i<tags.length; i++)\n str += options.formatString().format([tags[i].title]);\n return str;\n}\n\n// ----------------------------------------------------------\n// handle one of the controls being clicked\nfunction handleOptionClickAndRefresh(theTiddler,thingClicked) {\n\n var options;\n\n // need to know current options to start with\n if (store.tiddlers[theTiddler])\n options = new TagglyOptions(store.tiddlers[theTiddler].getListOpts());\n else\n options = new TagglyOptions(); // in case it's a new tiddler\n\n \n // figure out what to do\n if (thingClicked == "name" && options.sortField == "name") \n options.sortOrder = options.toggleSortOrder();\n else if (thingClicked == "date" && options.sortField == "date") \n options.sortOrder = options.toggleSortOrder();\n else if (thingClicked == "date" && options.sortField == "name") \n options.sortField = "date";\n else if (thingClicked == "name" && options.sortField == "date") \n options.sortField = "name";\n else if (thingClicked == "format")\n options.listFormat = options.toggleListFormat();\n else if (thingClicked == "incr")\n options.numCols = options.incrNumCols();\n else if (thingClicked == "decr")\n options.numCols = options.decrNumCols();\n\n // update the tiddler to make it sticky\n if (store.tiddlers[theTiddler])\n store.tiddlers[theTiddler].setListOpts(options.optionsString());\n\n // redisplay\n refreshTaggedList(theTiddler,options,true);\n}\n\nfunction onClickOptName(e) {\n if (!e) var e = window.event;\n var theTarget = resolveTarget(e);\n var theTiddler = findContainingTiddler(theTarget).id.substr(7);\n var state = handleOptionClickAndRefresh(theTiddler,"name");\n return false;\n}\n\nfunction onClickOptDate(e) {\n if (!e) var e = window.event;\n var theTarget = resolveTarget(e);\n var theTiddler = findContainingTiddler(theTarget).id.substr(7);\n var state = handleOptionClickAndRefresh(theTiddler,"date");\n return false;\n}\n\nfunction onClickOptFormat(e) {\n if (!e) var e = window.event;\n var theTarget = resolveTarget(e);\n var theTiddler = findContainingTiddler(theTarget).id.substr(7);\n var state = handleOptionClickAndRefresh(theTiddler,"format");\n return false;\n}\n\nfunction onClickOptIncr(e) {\n if (!e) var e = window.event;\n var theTarget = resolveTarget(e);\n var theTiddler = findContainingTiddler(theTarget).id.substr(7);\n var state = handleOptionClickAndRefresh(theTiddler,"incr");\n return false;\n}\n\nfunction onClickOptDecr(e) {\n if (!e) var e = window.event;\n var theTarget = resolveTarget(e);\n var theTiddler = findContainingTiddler(theTarget).id.substr(7);\n var state = handleOptionClickAndRefresh(theTiddler,"decr");\n return false;\n}\n\n\n\n// ----------------------------------------------------------\n// this (re)builds the tagged list for a tiddler\nfunction refreshTaggedList(title,options,donthide) {\n\n var theViewer = document.getElementById("viewer"+title);\n if (theViewer) {\n\n if (!options) options = new TagglyOptions(\n store.tiddlers[title]?store.tiddlers[title].getListOpts():null // in case it's a new one\n );\n\n if (!donthide) donthide = false; // normally hide waiting for mouseover\n\n var theTagged = document.getElementById("tagged"+title);\n if (theTagged)\n theTagged.parentNode.removeChild(theTagged);\n\n var taggedText = getTaggedTiddlersText(title,options);\n\n if (taggedText != "") {\n var newTaggedList = createTiddlyElement(theViewer,"div","tagged" + title,"tagged",null); \n\n createTiddlyElement(newTaggedList,"span",null,"taggedControls","Tagged as "+title+":"); \n \n if (store.tiddlers[title]) // hack becaused editing controls on a new tiddler is problematic...\n newTaggedList.onmouseover = onMouseOverTagged;\n newTaggedList.onmouseout = onMouseOutTagged;\n\n var newTaggedControls = createTiddlyElement(newTaggedList,\n "span","taggedControls" + title, donthide?"showTaggedControls":"hideTaggedControls",null); \n\n var labels = options.buttonLabels();\n var b1 = createTiddlyButton(newTaggedControls,labels.name,"Click to sort",onClickOptName,"taggedControls");\n var b2 = createTiddlyButton(newTaggedControls,labels.date,"Click to sort",onClickOptDate,"taggedControls");\n var b3 = createTiddlyButton(newTaggedControls,labels.format,"Click to change format",onClickOptFormat,"taggedControls");\n if (options.listFormat == "bullets") {\n var b4 = createTiddlyButton(newTaggedControls,labels.decr,"Click to decrease number of columns",onClickOptDecr,"taggedControls");\n var b5 = createTiddlyButton(newTaggedControls,labels.incr,"Click to increase number of columns",onClickOptIncr,"taggedControls");\n }\n\n\n if (options.listFormat == "bullets") { // bullets go in a table...\n\n var splitList = taggedText.split("\sn"); // sorry, this is very\n var listSize = splitList.length - 1; // very lazy\n var numCols = options.numCols;\n\n var colSize = listSize/numCols;\n\n var remainder = listSize % numCols;\n\n var upperColsize;\n var lowerColsize;\n\n if (colSize != Math.floor(colSize)) {\n // it's not an exact fit so..\n lowerColsize = Math.floor(colSize);\n upperColsize = Math.floor(colSize) + 1;\n }\n else {\n lowerColsize = colSize;\n upperColsize = colSize;\n }\n\n // alert(lowerColsize+" "+upperColsize+" "+numCols+" "+remainder);\n \n var c = 0;\n\n var newTaggedTable = createTiddlyElement(newTaggedList,"table",null,"tagged");\n var newTaggedBody = createTiddlyElement(newTaggedTable,"tbody",null,"tagged");\n var newTaggedTr = createTiddlyElement(newTaggedBody,"tr",null,"tagged");\n\n for (var j=0;j<numCols;j++) {\n var foo = "";\n var thisSize;\n\n if (j<remainder)\n thisSize = upperColsize;\n else\n thisSize = lowerColsize;\n\n for (var i=0;i<thisSize;i++) \n foo += splitList[c++] + "\sn"; // was using splitList.shift() but didn't work in IE;\n\n var newTd = createTiddlyElement(newTaggedTr,"td",null,"tagged");\n\n wikify(foo,newTd);\n\n }\n }\n else { // commas\n taggedText = taggedText.replace(/^/,"\sn").replace(/, $/,"\sn");\n wikify(taggedText,newTaggedList); \n }\n\n }\n }\n}\n\n// ----------------------------------------------------------\n// want to show the controls on mouseover like tiddler toolbar\nfunction onMouseOverTagged(e) {\n if (!e) var e = window.event;\n var tiddler = findContainingTiddler(resolveTarget(e)).id.substr(7);\n var foo = document.getElementById("taggedControls"+tiddler);\n if (foo)\n foo.className = "showTaggedControls"; \n\n}\n\nfunction onMouseOutTagged(e) {\n if (!e) var e = window.event;\n var tiddler = findContainingTiddler(resolveTarget(e)).id.substr(7);\n var foo = document.getElementById("taggedControls"+tiddler);\n if (foo)\n foo.className = "hideTaggedControls";\n}\n\n// end of the sort control stuff\n// ----------------------------------------------------------\n\n\n// ----------------------------------------------------------\n// refreshing onscreen tagged lists \n\n// this is to refresh if we remove a tiddler\nwindow.deleteTiddler_orig_mptw_tagglytagging = window.deleteTiddler;\nwindow.deleteTiddler = function(title) {\n var oldtags = [];\n var tiddler = store.tiddlers[title];\n if (tiddler)\n oldtags = tiddler.tags;\n\n deleteTiddler_orig_mptw_tagglytagging(title);\n\n for (var i=0; i<oldtags.length; i++)\n refreshTaggedList(oldtags[i]);\n}\n\n// this is if we edit a tiddler\nwindow.saveTiddler_orig_mptw_tagglytagging = window.saveTiddler;\nwindow.saveTiddler = function(title) {\n\n var newTitle = document.getElementById("editorTitle"+title).value;\n\n var oldtags = [];\n var tiddler = store.tiddlers[title];\n if (tiddler)\n oldtags = tiddler.tags;\n \n saveTiddler_orig_mptw_tagglytagging(title);\n\n var newtags = store.tiddlers[newTitle].tags;\n\n // will do most of them twice probably\n // should do a unique on oldtags and newtags\n // probably its fast enough that we don't care\n\n for (var i=0; i<newtags.length; i++)\n refreshTaggedList(newtags[i]);\n\n for (var i=0; i<oldtags.length; i++)\n refreshTaggedList(oldtags[i]);\n\n}\n\n// ----------------------------------------------------------\n// add the tagged tiddler list when displaying a tiddler\nwindow.createTiddlerViewer_orig_mptw_tagging = window.createTiddlerViewer;\nwindow.createTiddlerViewer = function(title,highlightText,highlightCaseSensitive) {\n createTiddlerViewer_orig_mptw_tagging(title,highlightText,highlightCaseSensitive);\n refreshTaggedList(title);\n}\n\n\n// ----------------------------------------------------------\n// put the footer above the title cos that's where the tags are\nwindow.createTiddlerSkeleton_orig_mptw_tagging = window.createTiddlerSkeleton;\nwindow.createTiddlerSkeleton = function(place,before,title) {\n var theTiddler = createTiddlerSkeleton_orig_mptw_tagging(place,before,title);\n var theFooter = document.getElementById("footer"+title);\n var theTitle = document.getElementById("title"+title);\n theTiddler.childNodes[0].insertBefore(theFooter,theTitle);\n return(theTiddler);\n}\n\n\n// ----------------------------------------------------------\n// tags are tiddlers. so we need a TiddlyLink in place of a TagButton\nwindow.createTagButton = function(place,tag,excludeTiddler) {\n return createTiddlyLink(place,tag,tag);\n}\n\n// ----------------------------------------------------------\n// this is to make the Tags tab work the same. TiddlyLink instead of Tag button\nconfig.macros.allTags.handler = function(place,macroName,params) {\n var tags = store.getTags();\n var theDateList = createTiddlyElement(place,"ul",null,null,null);\n if(tags.length == 0)\n createTiddlyElement(theDateList,"li",null,"listTitle",this.noTags);\n\n // bad hack so the shorten tab links plugin shortens these a little shorter :)\n var adjustShorten = 2;\n if (config.mptw_shortnames) config.mptw_shortnames.trimAt -= adjustShorten;\n\n for (var t=0; t<tags.length; t++) {\n var theListItem=createTiddlyElement(theDateList,"li",null,"listLink",null);\n // not sure why the following doesn't show the count\n var theTag = createTiddlyLink(theListItem,tags[t][0],tags[t][0] + "(" + tags[t][1] + ")");\n // but this puts it in anyway (thanks Clint for this fix).\n theTag.appendChild(document.createTextNode(" ("+tags[t][1]+")")); \n theTag.setAttribute("tag",tags[t][0]);\n }\n\n // other part of bad hack \n if (config.mptw_shortnames) config.mptw_shortnames.trimAt += adjustShorten;\n}\n\n\n// ----------------------------------------------------------\n// don't need these labels \nconfig.views.wikified.tag.labelNoTags = "";\nconfig.views.wikified.tag.labelTags = "";\n\n// ----------------------------------------------------------\n// styles for the tagged list\n\nsetStylesheet(\n"div.tagged {background:#f8f8f8;margin-top:0.5em;border: solid #f0f0f0 3px; margin-bottom:0px;padding-bottom:0.5em;padding-left:0.5em;-moz-border-radius: 1em;}\sn"+\n".tagged ul {padding-top:0px;margin-top:0px;margin-bottom:2px;list-style-type:square;margin-left:1.2em;padding-left:0.5em;}\sn"+\n".footer a.tiddlyLink { padding-top:0px;margin-right:2em;}\sn"+\n".footer {margin-top:0px;padding-top:0px;}\sn"+\n"td.tagged {margin:0;padding:0;padding-right:1em;vertical-align:top;border:none!important;}\sn"+\n"tr.tagged {border:none!important;}\sn"+\n".viewer table.tagged {margin:0;padding:0;width:auto;border:none!important;}\sn"+\n"",'tagglyTaggingStyles');\n\n\n// ----------------------------------------------------------\n// put the tags box at the top when you edit a tiddler. also adds some labels\n// you can style the labels display:none if you want to get rid of them\n\nwindow.createTiddlerEditor_mptw_tagstop = window.createTiddlerEditor;\nwindow.createTiddlerEditor = function(title) {\n\n createTiddlerEditor_mptw_tagstop(title);\n\n var theEditor = document.getElementById("editorWrapper"+title);\n var theTitleBox = document.getElementById("editorTitle"+title);\n var theTagsBox = document.getElementById("editorTags"+title);\n var theBodyBox = document.getElementById("editorBody"+title);\n var tagPrompt = document.getElementById("editorFooter"+title);\n\n // so we can style them if we like\n theTitleBox.className += " titleBox";\n theTagsBox.className += " tagsBox";\n\n // put tags box above body\n theEditor.insertBefore(theTagsBox,theBodyBox);\n\n // put "Type tags..." message above body too\n theEditor.insertBefore(theEditor.childNodes[3],theBodyBox);\n\n // add some labels\n var titleLabel = createTiddlyElement(theEditor,"span",null,"titleLabel","Title:");\n var tagsLabel = createTiddlyElement(theEditor,"span",null,"tagsLabel","Tags:");\n var contentLabel = createTiddlyElement(theEditor,"span",null,"contentLabel","Content:");\n\n // put them in the right place\n theEditor.insertBefore(tagsLabel,theTagsBox);\n theEditor.insertBefore(titleLabel,theTitleBox);\n theEditor.insertBefore(contentLabel,theBodyBox);\n\n}\n\n//}}}\n\n\n\n
#sidebarTabs .tabContents { overflow:visible; white-space:normal; width:auto; }\n\n#contentWrapper div.tagged {\n background: #33180a;\n border: 1px solid #613725;\n margin-bottom:1em;\n}\n\n\nbody{\n background: #000;\n}\n\n#contentWrapper{\n margin: 0 10px;\n background: #321c10;\n border: 1px solid #613725;\n}\n\n#mainMenu{\n position: relative;\n float: left;\n font-size: 12px;\n text-align: left;\n background: #321c10;\n color: #c5886b;\n width: 15em;\n padding: .2em .5em .2em 0;\n}\n\n#MainMenu h1{\n font-size: 13px;\n font-weight: normal;\n margin: 0 0 0 2px;\n}\n\n#mainMenu li, #mainMenu ul{\n padding: 0;\n margin: 0;\n}\n\n#mainMenu ul, #messageArea{\n display: block;\n border: 1px solid #905437;\n padding: 0 0 0 1em;\n background: #522d1e;\n margin: 0 0 1em 0;\n}\n\n#messageArea{\n display: none;\n padding: 1em;\n}\n\n#mainMenu li{\n list-style: none;\n}\n\n#contentWrapper #mainMenu a.button,\n#contentWrapper #mainMenu a.tiddlyLink,\n#contentWrapper #mainMenu a.externalLink,\n#messageArea a:link, #sidebar .button{\n color: #fb9950;\n text-decoration: none;\n}\n\n#contentWrapper #mainMenu a.button:hover,\n#contentWrapper #mainMenu a.tiddlyLink:hover,\n#contentWrapper #mainMenu a.externalLink:hover,\n#messageArea a:hover, #sidebar .button:hover{\n color: #c17135;\n background: transparent;\n text-decoration: underline;\n}\n\n#sidebar .sliderPanel{\n background: #000;\n color: #94532d;\n}\n\n#titleLine{\n color: #94532d;\n background: #000;\n padding: 1em;\n border-bottom: 1px solid #613725;\n}\n\n#siteTitle{\n font-size: 24px;\n font-weight: bold;\n}\n\n#titleLine a{\n color: #fb9950;\n}\n\n#sidebar, #sidebarOptions, #sidebarTabs{\n background: transparent;\n}\n\n#contentWrapper .tabSelected{\n background: #522d1e;\n border: 1px solid #905437;\n border-bottom: 0;\n padding-bottom: 3px;\n cursor: default;\n color: #fb9950;\n font-weight: bold;\n}\n\n#contentWrapper .tabUnselected, #contentWrapper .tabcontents .tabSelected{\n background: #2a170d;\n border: 1px solid #542e21;\n border-bottom: 0;\n padding-bottom: 0px;\n color: #fb9950;\n}\n\n#contentWrapper .tabUnselected:hover{\n color: #c17135\n}\n\n#contentWrapper .tabcontents .tabSelected{\n padding-bottom: 3px;\n border: 1px solid #905437;\n border-bottom: 0;\n}\n\n#contentWrapper .tabcontents .tabUnselected{\nbackground: #522d1e;\n border: 1px solid #613725;\n border-bottom: 0;\n padding-bottom: 0;\n}\n\n/* TiddlySinister was desgined by Clint Checketts (http://15black.bluedepot.com) and inspired from Minz Meyer (http://www.minzweb.de) */\n\n\n#contentWrapper .tabContents{\n background: #522d1e;\n border: 1px solid #905437;\n border-width: 1px 0;\n}\n\n#contentWrapper .tabContents .tabContents{\nbackground: #2a170d;\n border: 1px solid #905437;\n}\n\n#contentWrapper .tabContents li.listTitle{\n color: #c5886b;\n}\n\n#contentWrapper .tabContents li a.tiddlyLink,#contentWrapper .tabContents li a.button{\n color: #fb9950\n}\n\n#contentWrapper .tabContents li a.tiddlyLink:hover, #contentWrapper .tabContents li a.button:hover{\n color: #c17135;\n background: transparent;\n text-decoration: underline;\n}\n\n#popup{\n background: #522d1e;\n border: 1px solid #905437;\n z-index: 50;\n}\n\n.toolbar #popup{\n min-width: 12em;\n}\n\n#popup hr{\n border-top: 1px solid #905437;\n width: 75%;\n}\n\n#popup a.button,#popup a.tiddlyLink{\n color: #fb9950\n}\n\n#popup a.button:hover,#popup a.tiddlyLink:hover{\n color: #c17135;\n background: transparent;\n text-decoration: underline;\n}\n\n#displayArea{\n position: relative;\n margin: 0 14em 0em 15.5em;\n padding: 1em 2em 0 2em;\n background: #33180a;\n border: 1px solid #613725;\n min-height: 400px;\n _position: static;\n}\n\ndiv.unselectedTiddler, div.selectedTiddler{\n border-top: 25px solid #000;\n}\n\n.tiddler{\n background: #2a170d;\n border: 1px solid #542e21;\n margin: 0 0 2em 0;\n position: relative;\n _position; static;\n}\n\n.title{\n position: absolute;\n top:1px;\n left: 5px;\n color: #fb9950;\n font-size: 14px;\n font-weight: normal;\n line-height: 23px;\n _position: static;\n}\n\n.toolbar{\n position: absolute;\n top: 5px;\n right: 2px;\n _position: static; /* Dumb IE hack */\n}\n\n\n.viewer h1, h2, h3, h4, h5, h6{\n background: transparent;\n}\n\n#contentWrapper #displayArea a.button,#contentWrapper #displayArea a.tiddlyLink,#contentWrapper #displayArea a.externalLink{\n color: #fb9950;\n background: transparent;\n border: 0;\n}\n\n\n#contentWrapper #displayArea a.button:hover,#contentWrapper #displayArea a.tiddlyLink:hover,#contentWrapper #displayArea a.externalLink:hover{\n color: #c17135;\n background: transparent;\n text-decoration: underline;\n}\n\n.viewer, .editer, .editorFooter{\n color: #c5886b;\n}\n\n.editor textarea, input{\n max-height: 35em;\n background: #c5886b;\n border: 2px inset #613725;\n}\n\n.editor textarea:focus, input:focus{\n background: #ddb9a8;\n}\n\n\n
TiddlyWiki is the truly awesome software created by Jeremy Ruston to which this tutorial introduces you. You can find the TiddlyWiki home site at http://www.tiddlywiki.com \n\nThis is one of the most efficient ways of communicating that I've ever seen, and it's a lot of fun to use and write for too!
\nThis is my place on the Web. I recently discovered TiddlyWiki and was intrigued by the notion of MicroContent and reusable information blocks. Therefore, I decided to redo my old and outdated Website with TiddlyWiki and in the process learn more about it. So here it is -- my Website describing the different aspects of my professional life. Currently I am a Founder and the Chief Technology Officer of ''[[Aginova Inc|http://www.aginova.com]]''. In the past I have been a Principal Scientist at ''[[Information Extraction and Transport Inc.|http://www.iet.com]]'', a Principal Scientist at Peakstone Corporation, a Computer Scientist at ''[[SRI International|http://www.sri.com]]'', a Research Associate in the [[Computer Science|http://www.cs.stanford.edu/]] department at ''[[Stanford University|http://www.stanford.edu]]'' and Assistant Professor in [[Computer Science|http://www.cs.wayne.edu]] at ''[[Wayne State University|http://www.wayne.edu]]''. I was also a co-founder of an Internet startup ''Primitive Root'' with Profs. [[Vijay Vazirani|http://www-static.cc.gatech.edu/~vazirani/]] and Richard Lipton of [[Georgia Tech|http://www.cc.gatech.edu/]].
/***\n|''Name:''|WikiBarPlugin|\n|''Version:''|1.1.0|\n|''Source:''|[[AiddlyWiki|http://aiddlywiki.sourceforge.net]]|\n|''Author:''|[[Arphen Lin|mailto:arphenlin@gmail.com]]|\n|''Type:''|Plugin extension|\n|''Required:''|TiddlyWiki 1.2.36+|\n!Description\nThe WikiBarPlugin provides user a TiddlyWiki syntax-bar under the tiddler edit mode. It's a handy tool for people who are not familiar with the TiddlyWiki syntax.\n!Support browser\n*Firefox 1.0.7\n!Revision history\n*v1.0.0 (2005/10/30)\n**Initial release\n*v1.1.0 (2005/11/01)\n**Bugs fixed:\n***WikiBar overruns (reported by by "GeoffS" <gslocock@yahoo.co.uk>)\n**New features:\n***Insert a color code at the cursor. (Thanks to "RunningUtes" <RunningUtes@gmail.com>)\n***Enable gradient macro. (Thanks to "RunningUtes" <RunningUtes@gmail.com>)\n***Insert tiddler comment tags {{{/% ... %/}}}. (new feature supported by TiddlyWiki 1.2.37)\n***Insert DateFormatString for {{{<<today>>}}} macro. (new feature supported by TiddlyWiki 1.2.37)\n**Enhanced:\n***Allow optional parameters in syntax.\n!Code\n***/\n//{{{\n\nversion.extensions.WikiBar = {major: 1, minor: 1, revision: 0, date: new Date(2005,11,1)};\n\n//------------------------------------------------------------------------------------------------\n// the syntax will be applied on the current word\n// params: editor, [[param1],[param2],...]\n//------------------------------------------------------------------------------------------------\napl_wikibar_formatByWord = function(editor, params){\n\n clearMessage();\n \n try{\n \n if(!editor) return;\n \n repText = processSyntaxParams(this.syntax, params);\n if(!repText) return;\n \n var st = editor.scrollTop;\n var ss = editor.selectionStart;\n var se = editor.selectionEnd;\n \n// displayMessage(ss + ',' + se);\n \n var frontText= '';\n var selText = '';\n var endText = '';\n var fullText = editor.value;\n \n if(se>ss && ss>=0){ // has selection\n frontText = fullText.substring(0, ss); // text before selection\n selText = fullText.substring(ss,se);\n endText = fullText.substring(se, fullText.length); // text behind selection\n }\n else if(ss==0 && (se==0 || se == fullText.length) ){ // no selection, cursor in begin\n endText = fullText; // text behind selection\n }\n else if(se==ss && ss>0){ // no selection, cursor in text\n frontText = fullText.substring(0, ss); // text before selection\n endText = fullText.substring(se, fullText.length); // text behind selection\n\n //select a word\n if( fullText.charAt(ss-1).match(/\sW/gi) || fullText.charAt(ss).match(/\sW/gi) ){ \n ;\n }\n else{ // cursor in text\n\n // find the lastest non-word position of frontText\n var m = frontText.match(/\sW/gi);\n if(m){\n ss = frontText.lastIndexOf(m[m.length-1])+1;\n }\n else{ // not found\n ss = 0; \n }\n \n \n // find the first non-word position of endText\n m = endText.match(/\sW/gi);\n if(m){\n se += endText.indexOf(m[0]);\n }\n else{ // not found\n se = fullText.length;\n }\n\n // re-positioning\n// displayMessage(ss + ',' + se);\n frontText = fullText.substring(0, ss); // text before selection\n endText = fullText.substring(se, fullText.length); // text behind selection\n selText = fullText.substring(ss,se);\n \n }\n }\n \n if(selText.length>0)\n repText = repText.replace('user_text', selText);\n \n if(repText.indexOf('user_text')>=0 && this.hint)\n repText = repText.replace('user_text', this.hint); \n \n editor.value = frontText + repText + endText;\n \n // re-positioning\n editor.selectionStart = ss;\n editor.selectionEnd = ss + repText.length;\n editor.scrollTop = st;\n \n editor.focus();\n \n }catch(ex){\n if(ex.description)\n alert('apl_wikibar_formatByWord(): '+ex.description);\n else\n displayMessage('apl_wikibar_formatByWord(): '+ex);\n }\n \n}\n\n// params may be null, string or array\nfunction processSyntaxParams(syntaxStr, params)\n{\n try{\n \n var rx=null;\n var totalParams=null;\n // replace parameter: %1,%2,...\n if(params!=null){\n if(typeof(params)=="object"){ // array\n for(var i=0; i<params.length; i++){\n if(params[i]){\n rx = "(\s\s[%"+(i+1)+"\s\s])" + "|" + "(%"+(i+1)+")";\n syntaxStr = syntaxStr.replace(new RegExp(rx,"g"), params[i]);\n }\n }\n totalParams = params.join(' ').trim();\n }\n else{ // string\n totalParams = params.trim();\n rx = /(\s[%1{1}\s])|(%1{1})/g;\n syntaxStr = syntaxStr.replace(rx, totalParams);\n } \n }\n \n \n // replace parameter: %N\n if(totalParams)\n syntaxStr = syntaxStr.replace(new RegExp('%N{1}',"g"), totalParams);\n \n // remove optional parameters\n rx=/\s[%(([1-9]{1,}[0-9]{0,})|(N{1}))\s]/g;\n syntaxStr = syntaxStr.replace(rx, '');\n \n // check if replaced ok\n rx=/%(([1-9]{1,}[0-9]{0,})|(N{1}))/g;\n if( syntaxStr.match(rx) ){\n throw "Not enough parameters! " + syntaxStr;\n }\n \n return syntaxStr;\n \n } catch(ex){\n if(ex.description)\n displayMessage('processSyntaxParams(): '+ex.description);\n else\n displayMessage('processSyntaxParams(): '+ex);\n \n return null;\n }\n}\n\n//------------------------------------------------------------------------------------------------\n// common format function\n//------------------------------------------------------------------------------------------------\napl_wikibar_format = function(editor, params){\n\n clearMessage();\n \n try{\n \n if(!editor) return;\n \n repText = processSyntaxParams(this.syntax, params);\n if(!repText) return;\n \n var st = editor.scrollTop;\n var ss = editor.selectionStart;\n var se = editor.selectionEnd;\n \n// displayMessage(ss + ',' + se);\n \n var frontText= '';\n var endText = '';\n var fullText = editor.value;\n \n if(se>ss && ss>=0){ // has selection\n frontText = fullText.substring(0, ss); // text before selection\n endText = fullText.substring(se, fullText.length); // text behind selection\n }\n else if(ss==0 && (se==0 || se == fullText.length) ){ // no selection, cursor in begin\n endText = fullText; // text behind selection\n }\n else if(se==ss && ss>0){ // no selection, cursor in text\n frontText = fullText.substring(0, ss); // text before selection\n endText = fullText.substring(se, fullText.length); // text behind selection\n }\n \n if(repText.indexOf('user_text')>=0 && this.hint)\n repText = repText.replace('user_text', this.hint); \n \n editor.value = frontText + repText + endText;\n \n // re-positioning\n editor.selectionStart = ss;\n editor.selectionEnd = ss + repText.length;\n editor.scrollTop = st;\n \n editor.focus();\n \n }catch(ex){\n if(ex.description)\n alert('apl_wikibar_formatByCursor(): '+ex.description);\n else\n displayMessage('apl_wikibar_formatByCursor(): '+ex);\n }\n \n}\n\n\n//------------------------------------------------------------------------------------------------\n// if selected text, replace it\n// else insert it\n//------------------------------------------------------------------------------------------------\napl_wikibar_formatByCursor = function(editor, params){\n\n clearMessage();\n \n try{\n \n if(!editor) return;\n \n repText = processSyntaxParams(this.syntax, params);\n if(!repText) return;\n \n var st = editor.scrollTop;\n var ss = editor.selectionStart;\n var se = editor.selectionEnd;\n \n// displayMessage(ss + ',' + se);\n \n var frontText= '';\n var endText = '';\n var fullText = editor.value;\n \n if(se>ss && ss>=0){ // has selection\n frontText = fullText.substring(0, ss); // text before selection\n endText = fullText.substring(se, fullText.length); // text behind selection\n }\n else if(ss==0 && (se==0 || se == fullText.length) ){ // no selection, cursor in begin\n endText = fullText; // text behind selection\n }\n else if(se==ss && ss>0){ // no selection, cursor in text\n frontText = fullText.substring(0, ss); // text before selection\n endText = fullText.substring(se, fullText.length); // text behind selection\n }\n \n if(repText.indexOf('user_text')>=0 && this.hint)\n repText = repText.replace('user_text', this.hint); \n \n editor.value = frontText + repText + endText;\n \n // re-positioning\n editor.selectionStart = ss;\n editor.selectionEnd = ss + repText.length;\n editor.scrollTop = st;\n \n editor.focus();\n \n }catch(ex){\n if(ex.description)\n alert('apl_wikibar_formatByCursor(): '+ex.description);\n else\n displayMessage('apl_wikibar_formatByCursor(): '+ex);\n }\n \n}\n\n//------------------------------------------------------------------------------------------------\n// the syntax will be applied on the current line\n//------------------------------------------------------------------------------------------------\napl_wikibar_formatByLine = function(editor, params)\n{\n\n clearMessage();\n \n try{\n \n if(!editor) return;\n \n repText = processSyntaxParams(this.syntax, params);\n if(!repText) return; \n \n \n var st = editor.scrollTop;\n var ss = editor.selectionStart;\n var se = editor.selectionEnd;\n \n// displayMessage(ss + ',' + se);\n \n var frontText= '';\n var selText = '';\n var endText = '';\n var fullText = editor.value;\n \n if(se>ss && ss>=0){ // has selection\n if(this.byBlock){\n frontText = fullText.substring(0, ss); // text before selection\n selText = fullText.substring(ss,se); // selection text\n endText = fullText.substring(se, fullText.length); // text behind selection\n }\n else{\n se = ss;\n }\n// displayMessage('has selection ' + ss + ',' + se);\n }\n \n if(ss==0 && (se==0 || se == fullText.length) ){ // no selection, cursor in begin\n var m=fullText.match(/(\sn|\sr)/g); // position of line-break\n if(m)\n se = fullText.indexOf(m[0]);\n else\n se = fullText.length;\n\n// displayMessage('no selection, cursor in begin: ' + ss + ',' + se); \n selText = fullText.substring(0, se); \n endText = fullText.substring(se, fullText.length); // text behind selection \n }\n else if(se==ss && ss>0){ // no selection text, cursor in text\n frontText = fullText.substring(0, ss); // text before selection\n endText = fullText.substring(se, fullText.length); // text behind selection\n \n // find the last position of line-break in frontText\n var m = frontText.match(/(\sn|\sr)/g); // position of line-break\n if(m){\n ss = frontText.lastIndexOf(m[m.length-1])+1;\n }\n else{ // not found\n ss = 0; \n }\n \n // find the first position of line-break in endText\n m = endText.match(/(\sn|\sr)/g); // position of line-break\n if(m){\n se += endText.indexOf(m[0]);\n }\n else{ // not found\n se = fullText.length;\n }\n\n // re-positioning\n// displayMessage('no selection text, cursor in text: ' + ss + ',' + se);\n frontText = fullText.substring(0, ss); // text before selection\n selText = fullText.substring(ss,se);\n endText = fullText.substring(se, fullText.length); // text behind selection\n }\n \n if(selText.length>0)\n repText = repText.replace('user_text', selText);\n \n if(repText.indexOf('user_text')>=0 && this.hint)\n repText = repText.replace('user_text', this.hint); \n \n if(this.byBlock){ \n // add extra line-breaks\n if( (frontText.charAt(frontText.length-1)!='\sn') && ss!=0 )\n repText = '\sn' + repText;\n if( (endText.charAt(0)!='\sn') || se==fullText.length)\n repText += '\sn';\n }\n \n editor.value = frontText + repText + endText;\n \n // re-positioning\n editor.selectionStart = ss;\n editor.selectionEnd = ss + repText.length;\n editor.scrollTop = st;\n \n editor.focus();\n \n }catch(ex){\n if(ex.description)\n alert('apl_wikibar_formatByLine(): '+ex.description);\n else\n displayMessage('apl_wikibar_formatByLine(): '+ex);\n }\n \n}\n\n//------------------------------------------------------------------------------------------------\n// the syntax will be applied on the table cell(if exist)\n//------------------------------------------------------------------------------------------------\napl_wikibar_formatByTableCell = function(editor, params){\n\n clearMessage();\n \n try{\n \n if(!editor) return;\n \n repText = processSyntaxParams(this.syntax, params);\n if(!repText) return;\n \n var st = editor.scrollTop;\n var ss = editor.selectionStart;\n var se = editor.selectionEnd;\n \n// displayMessage(ss + ',' + se);\n \n var frontText= '';\n var selText = '';\n var endText = '';\n var fullText = editor.value;\n \n if(ss==0 || ss==fullText.length)\n throw "not valid cell!";\n \n se=ss; \n \n// displayMessage(ss);\n frontText = fullText.substring(0, ss); // text before selection\n endText = fullText.substring(se, fullText.length); // text behind selection\n \n // find the last '|' position in frontText\n i=frontText.lastIndexOf("\sn");\n j=frontText.lastIndexOf("|");\n if(i>j || j<0)\n //throw "frontText not valid cell! " + i + "," + j;\n throw "not valid cell!";\n \n ss = j+1;\n \n // find the first '|' position in endText\n i=endText.indexOf("\sn");\n j=endText.indexOf("|");\n if(i<j || j<0)\n //throw "endText not valid cell! " + i + "," + j;\n throw "not valid cell!";\n \n se += j;\n \n // re-positioning\n// displayMessage(ss + ',' + se);\n frontText = fullText.substring(0, ss-1); // text before selection\n selText = fullText.substring(ss,se);\n endText = fullText.substring(se+1, fullText.length); // text behind selection\n\n if(this.name.substring(0,5)=="align"){\n selText = selText.trim();\n if( selText==">" || selText=="~" || \n selText.substring(0,8)=="bgcolor(" \n ) // bypass special table code\n return;\n }\n \n if(selText.length>0)\n repText = repText.replace('user_text', selText);\n \n if(repText.indexOf('user_text')>=0 && this.hint)\n repText = repText.replace('user_text', this.hint); \n \n editor.value = frontText + repText + endText;\n \n // re-positioning\n editor.selectionStart = ss;\n editor.selectionEnd = ss + repText.length - 2;\n editor.scrollTop = st;\n \n editor.focus();\n \n }catch(ex){\n if(ex.description)\n alert('apl_wikibar_formatByTableCell(): '+ex.description);\n else\n displayMessage('apl_wikibar_formatByTableCell(): '+ex);\n }\n \n}\n\n\n//------------------------------------------------------------------------------------------------\n// param: editor, button_pressed\n//------------------------------------------------------------------------------------------------\napl_wikibar_getColorCode = function(editor, theTarget)\n{\n if(!apl_wikibar_colorPicker) return;\n \n apl_wikibar_colorPicker.targetSyntax = this;\n apl_wikibar_colorPicker.targetEditor = editor;\n apl_wikibar_colorPicker.moveColorMap(theTarget); \n}\n\napl_wikibar_getLinkUrl = function(editor)\n{\n var url= prompt('Please enter the link target', this.param);\n if (url && url.trim()!='')\n this.format(editor, url);\n}\n\napl_wikibar_getTableRowCol = function(editor)\n{\n var rc= prompt('Please enter rows x cols of the table', '2 x 3');\n if (!rc || rc.trim()=='') return;\n \n var arr = rc.toUpperCase().split('X');\n if(arr.length != 2) return;\n \n for(var i=0; i<arr.length; i++)\n if(isNaN(arr[i].trim())) return;\n \n rows = parseInt(arr[0].trim());\n cols = parseInt(arr[1].trim());\n \n txtTable='';\n for(r=0; r<rows; r++){\n for(c=0; c<=cols; c++)\n if(c==0)\n txtTable += '|';\n else\n txtTable += ' |';\n \n txtTable += '\sn';\n }\n\n if(txtTable.trim()!='') \n this.format(editor, txtTable);\n \n}\n\napl_wikibar_getMacroParam = function(editor)\n{\n try{\n var p = prompt('Please enter the parameters of ' + this.name + ' macro:' + \n '\snSyntax: ' + this.syntax +\n '\sn\snNote: '+\n '\sn%1,%2,... - parameter needed'+ \n '\sn[%1] - optional parameter'+\n '\sn%N - more than one parameter(1~n)'+\n '\sn[%N] - any number of parameters(0~n)'+\n '\sn\snPS:'+\n '\sn Parameters should be seperated with space character'+\n '\sn Use "" to wrap the parameter that includes space character, ex: "hello world"'+\n '\sn Input the word(null) for the optional parameter ignored',\n (this.param?this.param:'') );\n \n if(p==null) return;\n\n p=p.readMacroParams();\n for(var i=0;i<p.length;i++){\n var s=p[i].trim();\n if(s.indexOf(' ')>0)\n p[i]="'"+s+"'";\n if(s.toLowerCase()=="null")\n p[i]=null;\n }\n \n this.format(editor, p);\n \n }catch(ex){\n if(ex.description)\n alert('apl_wikibar_getMacroParam(): '+ex.description);\n else\n displayMessage('apl_wikibar_getMacroParam(): '+ex);\n } \n}\n\n\n\n//------------------------------------------------------------------------------------------------\n// hijack createTiddlerEditor() to create WikiBar\n//------------------------------------------------------------------------------------------------\nwindow.apl_wikibar_createTiddlerEditor = window.createTiddlerEditor;\nwindow.createTiddlerEditor = function (title)\n{\n // call original function\n apl_wikibar_createTiddlerEditor(title);\n \n // create wiki-bar\n apl_wikibar_createWikibar(title);\n}\n\nfunction apl_wikibar_createWikibar(title){\n\n try{\n \n // insert wikisyntax toolbar before editorBodyXXX\n var theEditor = document.getElementById("editorWrapper" + title);\n var theBodyBox = document.getElementById("editorBody" + title);\n \n // create Wikibar\n// var theWikibar = createTiddlyElement(theEditor,"div","editorWikibar" + title,"toolbar",null);\n var theWikibar = createTiddlyElement(theEditor,"div","editorWikibar" + title,null,null);\n\n theEditor.insertBefore(theWikibar,theBodyBox);\n \n // create tool buttons\n \n //---------------\n // single button\n //---------------\n \n // about\n var btn = apl_wikibar_createWikibarButton(theWikibar, "&copy;", "about WikiBarPlugin", apl_wikibar_onClickAbout, title);\n if(btn) btn.id = "apl_wikibar_btn_about";\n\n // preview\n btn = apl_wikibar_createWikibarButton(theWikibar, "&infin;", "preview the tiddler", apl_wikibar_onClickPreview, title);\n if(btn) btn.id = "apl_wikibar_btn_preview";\n \n // formattings\n for(var i=0; i<apl_wikibar_syntaxes.formattings.length; i++){\n var syntaxObj = apl_wikibar_syntaxes.formattings[i];\n syntax_desc = "apl_wikibar_syntaxes.formattings["+i+"]";\n if(syntaxObj.symbol)\n apl_wikibar_createWikibarButton(theWikibar, syntaxObj.symbol, syntaxObj.tip, apl_wikibar_onClickWikibarButton, title, syntax_desc);\n else\n apl_wikibar_createWikibarButton(theWikibar, syntaxObj.name, syntaxObj.tip, apl_wikibar_onClickWikibarButton, title, syntax_desc);\n }\n \n //---------------\n // dropdown menu\n //---------------\n apl_wikibar_createWikibarButton(theWikibar, "color", "Color", apl_wikibar_onClickWikibarMenu, title, null, "apl_wikibar_syntaxes.colors");\n apl_wikibar_createWikibarButton(theWikibar, "link", "Link", apl_wikibar_onClickWikibarMenu, title, null, "apl_wikibar_syntaxes.links");\n apl_wikibar_createWikibarButton(theWikibar, "Hn", "Heading", apl_wikibar_onClickWikibarMenu, title, null, "apl_wikibar_syntaxes.headings");\n apl_wikibar_createWikibarButton(theWikibar, "list", "List", apl_wikibar_onClickWikibarMenu, title, null, "apl_wikibar_syntaxes.lists");\n apl_wikibar_createWikibarButton(theWikibar, "paragraph", "Paragraph format", apl_wikibar_onClickWikibarMenu, title, null, "apl_wikibar_syntaxes.paragraphs");\n apl_wikibar_createWikibarButton(theWikibar, "table", "Table", apl_wikibar_onClickWikibarMenu, title, null, "apl_wikibar_syntaxes.tables");\n apl_wikibar_createWikibarButton(theWikibar, "plugin", "Plugin design", apl_wikibar_onClickWikibarMenu, title, null, "apl_wikibar_syntaxes.plugins");\n apl_wikibar_createWikibarButton(theWikibar, "macro", "Macro", apl_wikibar_onClickWikibarMenu, title, null, "apl_wikibar_syntaxes.macros");\n apl_wikibar_createWikibarButton(theWikibar, "date", "Date format string", apl_wikibar_onClickWikibarMenu, title, null, "apl_wikibar_syntaxes.dates");\n apl_wikibar_createWikibarButton(theWikibar, "html", "HTML", apl_wikibar_onClickWikibarMenu, title, null, "apl_wikibar_syntaxes.htmls");\n \n }catch(ex){\n alert('apl_wikibar_createWikibar(): '+ex.description);\n }\n \n}\n\n//------------------------------------------------------------------------------------------------\n// create wikibar button\n// ps. \n// if single button: syntax_objs=null, syntax_obj needed\n// if group button: syntax_objs needed, syntax_obj=null\n//------------------------------------------------------------------------------------------------\nfunction apl_wikibar_createWikibarButton(theToolbar, theText, theTooltip, theAction, title, syntax_obj, syntax_objs)\n{\n try{\n \n if(!theToolbar) return null;\n \n // call system function to add a button\n //createTiddlyButton(theParent,theText,theTooltip,theAction,theClass,theId,theAccessKey)\n var theButton = createTiddlyButton(theToolbar, theText, theTooltip, theAction, "button");\n if(!theButton) return null;\n\n// insertSpacer(theToolbar);\n \n // fix the wikibar overrun bug\n theToolbar.appendChild( document.createTextNode("\sn") );\n \n theButton.innerHTML = theText; // html is allowed here, ex: "<b>B</b>"\n\n // add parameters to theButton, those parameters will be used on onclick event\n // setAttribute() only accepts string variable, object is not allowed!\n // we'll use eval() to convert string to object, refer to apl_wikibar_onClickWikibarButton()\n if(title)\n theButton.setAttribute("tiddler_title", title);\n \n if(syntax_objs)\n theButton.setAttribute("syntax_objs", syntax_objs);\n\n if(syntax_obj)\n theButton.setAttribute("syntax_obj", syntax_obj);\n \n return theButton;\n \n }catch(ex){\n alert('apl_wikibar_createWikibarButton(): '+ex.description);\n return null;\n }\n \n}\n\n//------------------------------------------------------------------------------------------------\n// button(<a>) may have other tags, ex: <a><b>B</b></a>\n// when we click the button, the apl_wikibar_onClickWikibarButton event may be received by the childNodes of <a>\n// so we try to look up to the button object(<a>), as <a> has the parameters we need\n//------------------------------------------------------------------------------------------------\nfunction apl_wikibar_resolveClickButton(obj)\n{\n if (obj.id=="tiddlerDisplay") // search until tiddlerDisplay is reached\n return null;\n \n if(obj.hasAttributes()){\n if(obj.getAttribute("tiddler_title"))\n return obj;\n else\n return apl_wikibar_resolveClickButton(obj.parentNode); // search the parent\n }\n else{\n return apl_wikibar_resolveClickButton(obj.parentNode); // search the parent\n }\n}\n\n\nfunction apl_wikibar_switchWikibar(wikibar, visible)\n{\n if(!wikibar) return;\n \n var pv=null;\n // hide other buttons\n for(var i=0; i<wikibar.childNodes.length; i++){ \n try{\n var theButton = wikibar.childNodes[i];\n\n if(theButton.id == "apl_wikibar_btn_preview") \n pv=theButton;\n\n if(theButton.id != "apl_wikibar_btn_about" && theButton.id != "apl_wikibar_btn_preview")\n theButton.style.display = visible ? "": "none";\n \n }catch(ex){\n ;\n }\n }\n \n if(!pv) return;\n \n // update the caption of preview button\n if(visible){\n pv.innerHTML = "&infin;";\n pv.setAttribute("title", "show previewer");\n }\n else{\n pv.innerHTML = "&larr;";\n pv.setAttribute("title", "back to editor");\n }\n \n}\n\nfunction apl_wikibar_displayAboutBox(theAbout, theTarget)\n{\n try{\n\n if(!theAbout || !theTarget) return;\n \n var rootLeft = findPosX(theTarget);\n var rootTop = findPosY(theTarget);\n var rootHeight = theTarget.offsetHeight;\n \n var popupLeft = rootLeft;\n var popupTop = rootTop + rootHeight;\n \n var popupWidth = theAbout.offsetWidth;\n \n var winWidth = findWindowWidth();\n if(popupLeft + popupWidth > winWidth)\n popupLeft = winWidth - popupWidth;\n \n theAbout.style.left = popupLeft + "px";\n theAbout.style.top = popupTop + "px";\n theAbout.style.display = "block";\n \n// window.scrollTo(0,y); // some bugs here\n \n }catch(ex){\n alert('apl_wikibar_displayAboutBox(): '+ex.description);\n }\n}\n\nfunction apl_wikibar_onClickAbout(e)\n{\n if (!e) var e = window.event;\n var theTarget = resolveTarget(e);\n if(!theTarget) return(false);\n \n try{\n \n // check if already exist\n var theAbout = document.getElementById("aboutWikibar");\n \n if(theAbout){ // switch theAbout\n relateTo = theAbout.getAttribute("relateTo");\n if(relateTo == theTarget.parentNode.id){\n theAbout.style.display = (theAbout.style.display=="block")? "none" : "block";\n }\n else{\n theAbout.setAttribute("relateTo", theTarget.parentNode.id);\n apl_wikibar_displayAboutBox(theAbout, theTarget);\n }\n }\n else{ // create theAbout box\n theAbout = document.createElement("div");\n theAbout.setAttribute("id", "aboutWikibar");\n theAbout.setAttribute("style", "position:absolute; z-index:99; display:block; background-color:white; border:medium solid red;");\n theAbout.setAttribute("class", "viewer");\n ver = version.extensions.WikiBar.major + "." + version.extensions.WikiBar.minor + "." + version.extensions.WikiBar.revision;\n theAbout.innerHTML = '<center>WikiBarPlugin Version '+ver+'<br></center><hr><ul>'+\n '<li>Author: <a href="mailto:arphenlin@gmail.com">Arphen Lin</a></li>'+\n '<li>Web: <a href="http://aiddlywiki.sourceforge.net/" target="new">AiddlyWiki</a></li>'+\n '</ul>';\n theAbout.onclick = function(){\n document.getElementById("aboutWikibar").style.display="none";\n }; \n theAbout.setAttribute("relateTo", theTarget.parentNode.id);\n \n document.body.appendChild(theAbout);\n \n apl_wikibar_displayAboutBox(theAbout, theTarget);\n }\n \n }catch(ex){\n alert('apl_wikibar_onClickAbout(): '+ ex.description);\n } \n\n e.cancelBubble = true;\n if (e.stopPropagation) e.stopPropagation();\n return(false); \n}\n\nfunction apl_wikibar_onClickPreview(e)\n{\n if (!e) var e = window.event;\n var theTarget = resolveTarget(e);\n if(!theTarget) return(false);\n \n// displayMessage(theTarget);\n \n try{\n\n var wikibar = theTarget.parentNode;\n if(!wikibar) return;\n \n title = wikibar.id.substring(13, wikibar.id.length); // "editorWikibar"+title\n var editorWrapper = document.getElementById( "editorWrapper"+title);\n \n var editor= document.getElementById("editorBody"+title);\n\n // check if already exist\n var previewer = document.getElementById("previewer"+title);\n if(previewer){ // switch previewer\n if(previewer.style.display=="block"){\n previewer.style.display = "none";\n editor.style.display = "block";\n }\n else{\n previewer.innerHTML = ''; // clear the contents\n wikify(editor.value, previewer, null, null); // refresh the contents\n previewer.style.display = "block";\n editor.style.display = "none";\n }\n }\n else{ // create previewer\n previewer = document.createElement("div");\n previewer.setAttribute("id", "previewer"+title);\n previewer.setAttribute("style", "overflow:auto; display:block; border:solid 1px;");\n previewer.style.height = (editor.offsetHeight) + "px";\n previewer.setAttribute("class", "viewer");\n editorWrapper.insertBefore(previewer, editor);\n \n wikify(editor.value, previewer, null, null);\n \n // hide editor\n editor.style.display = "none";\n }\n \n apl_wikibar_switchWikibar(wikibar, (editor.style.display=="block") );\n \n }catch(ex){\n alert('apl_wikibar_onClickPreview(): '+ ex.description);\n } \n\n e.cancelBubble = true;\n if (e.stopPropagation) e.stopPropagation();\n return(false);\n \n}\n\n\n//------------------------------------------------------------------------------------------------\n// onclick event handler\n//------------------------------------------------------------------------------------------------\nfunction apl_wikibar_onClickWikibarButton(e)\n{\n if (!e) var e = window.event;\n var theTarget = apl_wikibar_resolveClickButton(resolveTarget(e));\n if(!theTarget) return(false);\n \n try{\n \n title = theTarget.getAttribute("tiddler_title");\n \n var editor = document.getElementById("editorBody"+title);\n if(!editor) return;\n \n var syntax = null;\n cmd = "syntax = " + theTarget.getAttribute("syntax_obj");\n eval(cmd);\n if(!syntax) return;\n \n if(syntax.needParam)\n syntax.needParam(editor, theTarget);\n else\n syntax.format(editor);\n \n }catch(ex){\n alert('apl_wikibar_onClickWikibarButton(): '+ ex.description);\n } \n\n e.cancelBubble = true;\n if (e.stopPropagation) e.stopPropagation();\n return(false);\n\n}\n\n\n//------------------------------------------------------------------------------------------------\n// create drop-down menu\n//------------------------------------------------------------------------------------------------\nfunction apl_wikibar_onClickWikibarMenu(e)\n{\n if(!e) var e = window.event;\n var theTarget = resolveTarget(e); // = <span>, the object we click on\n \n try{ \n \n title = theTarget.getAttribute("tiddler_title");\n \n // retrieve the string and eval() it \n my_syntaxes = theTarget.getAttribute("syntax_objs");\n var items=null;\n cmd = "items = "+my_syntaxes;\n eval(cmd);\n if(!items) return;\n\n var popup = createTiddlerPopup(this);\n if(!popup) return;\n\n for (var i=0; i<items.length; i++){\n var theItem = createTiddlyButton(\n createTiddlyElement(popup, "li"),\n items[i].name,\n items[i].tip,\n apl_wikibar_onClickWikibarButton\n );\n\n theItem.setAttribute("syntax_obj", my_syntaxes + "["+i+"]");\n theItem.setAttribute("tiddler_title", title);\n }\n\n scrollToTiddlerPopup(popup,false);\n \n }catch(ex){\n alert('apl_wikibar_onClickWikibarMenu(): '+ex.description);\n } \n \n e.cancelBubble = true;\n if (e.stopPropagation) e.stopPropagation();\n return(false);\n \n}\n\n\n//------------------------------------------------------------------------------------------------\n// apl_wikibar_ColorPicker class\n//------------------------------------------------------------------------------------------------\nfunction apl_wikibar_ColorPicker(theAction){\n \n // 16x16 colors\n this.colorTable = [ \n "#FFFFFF","#DDDDDD","#CCCCCC","#BBBBBB","#AAAAAA","#999999","#666666","#333333","#111111","#000000","#FFCC00","#FF9900","#FF6600","#FF3300","#CC3300","#CC0033",\n "#99CC00","#99DD00","#99EE00","#EE9900","#DD9900","#CC9900","#FFCC33","#FFCC66","#FF9966","#FF6633","#660000","#990000","#CC0000","#FF0000","#FF3366","#FF0033",\n "#CCFF00","#CCFF33","#333300","#666600","#999900","#CCCC00","#FFFF00","#CC9933","#CC6633","#330000","#993333","#CC3333","#FF3333","#CC3366","#FF6699","#FF0066",\n "#99FF00","#CCFF66","#99CC33","#666633","#999933","#CCCC33","#FFFF33","#996600","#993300","#663333","#CC6666","#FF6666","#990033","#CC3399","#FF66CC","#FF0099",\n "#66FF00","#99FF66","#66CC33","#669900","#999966","#CCCC66","#FFFF66","#996633","#663300","#996666","#FF9999","#FF3399","#CC0066","#990066","#FF33CC","#FF00CC",\n "#33FF00","#66FF33","#339900","#66CC00","#99FF33","#CCCC99","#FFFF99","#CC9966","#CC6600","#CC9999","#FF99CC","#CC6699","#993366","#660033","#CC0099","#330033",\n "#00CC00","#33CC00","#336600","#669933","#99CC66","#CCFF99","#FFFFCC","#FFCC99","#FF9933","#FFCCCC","#CC99CC","#996699","#993399","#990099","#663366","#660066",\n "#006600","#33CC33","#66CC66","#00FF00","#33FF33","#66FF66","#99FF99","#CCFFCC","#99CCFF","#FFCCFF","#FF99FF","#FF66FF","#FF33FF","#FF00FF","#CC66CC","#CC33CC",\n "#003300","#336633","#009900","#339933","#669966","#99CC99","#CCFFFF","#3399FF","#6699CC","#CCCCFF","#CC99FF","#9966CC","#663399","#330066","#9900CC","#CC00CC",\n "#00FF33","#00CC33","#006633","#339966","#66CC99","#99FFCC","#99CCCC","#0066CC","#336699","#9999FF","#9999CC","#9933FF","#6600CC","#660099","#CC33FF","#CC00FF",\n "#00FF66","#33FF66","#009933","#00CC66","#33FF99","#99FFFF","#669999","#003366","#003399","#6666FF","#6666CC","#666699","#330099","#9933CC","#CC66FF","#9900FF",\n "#00FF99","#66FF99","#33CC66","#009966","#66FFFF","#66CCCC","#336666","#006699","#3366CC","#3333FF","#3333CC","#333399","#333366","#6633CC","#9966FF","#6600FF",\n "#00FFCC","#66FFCC","#33CC99","#33FFFF","#33CCCC","#339999","#003333","#3399CC","#6699FF","#0000FF","#0000CC","#000099","#000066","#000033","#6633FF","#3300FF",\n "#00CC99","#33FFCC","#00FFFF","#00CCCC","#009999","#006666","#33CCFF","#66CCFF","#0099CC","#3366FF","#00CCFF","#0099FF","#0066FF","#0033FF","#0033CC","#3300CC"\n ];\n\n this.colorMap = null; // div object\n\n this.targetSyntax = null; // the syntax object that called apl_wikibar_ColorPicker\n this.targetEditor = null; // the editor object that will be applied selected color\n this.theAction = theAction;\n \n this.createColorMap();\n\n}\n\napl_wikibar_ColorPicker.prototype.showColorMap = function() \n{\n if(this.colorMap){\n this.colorMap.style.display = "block";\n }\n}\n\napl_wikibar_ColorPicker.prototype.hideColorMap = function() \n{\n if(this.colorMap){\n this.colorMap.style.display = "none";\n }\n}\n\n\napl_wikibar_ColorPicker.prototype.moveColorMap = function(theTarget)\n{\n try{\n\n var cm = this.colorMap; \n if(!cm) return;\n \n var rootLeft = findPosX(theTarget);\n var rootTop = findPosY(theTarget);\n var rootHeight = theTarget.offsetHeight;\n \n var popupLeft = rootLeft;\n var popupTop = rootTop + rootHeight;\n \n var popupWidth = cm.offsetWidth;\n \n var winWidth = findWindowWidth();\n if(popupLeft + popupWidth > winWidth)\n popupLeft = winWidth - popupWidth;\n \n cm.style.left = popupLeft + "px";\n cm.style.top = popupTop + "px";\n cm.style.display = "block";\n \n// window.scrollTo(0,y); // some bugs here\n \n }catch(ex){\n alert('moveColorMap(): '+ex.description);\n }\n}\n\napl_wikibar_ColorPicker.prototype.createColorMap = function() \n{\n try{ \n\n if(!this.theAction) return;\n \n if(this.colorMap) return;\n \n // create div\n this.colorMap = document.createElement("div");\n this.colorMap.setAttribute("id","colorMap");\n this.colorMap.setAttribute("style","display:none; position:absolute; left:0px; top:0px; z-index:99; margin:0px; padding:0px; cursor:crosshair;");\n document.body.appendChild(this.colorMap);\n\n // create table\n var theTable = document.createElement("table");\n theTable.setAttribute("cellspacing", 0);\n theTable.setAttribute("cellpadding", 0);\n theTable.setAttribute("style", "border:solid 1px black;");\n this.colorMap.appendChild(theTable);\n \n // create tr/td\n cellsPerRow = 16;\n var theTR=null;\n for(var i=0; i<this.colorTable.length; i++){\n // create new row\n if((i%cellsPerRow)==0){ // 16x16\n theTR = document.createElement("tr");\n theTable.appendChild(theTR);\n }\n\n var theTD = document.createElement("td");\n if(this.colorTable[i].trim() == '')\n theTD.setAttribute("bgcolor", "white");\n else\n theTD.setAttribute("bgcolor", this.colorTable[i]);\n theTD.setAttribute("style", "border:solid 1px black;");\n theTD.onclick = this.theAction;\n theTD.innerHTML = '<span style="font-size:8px">&nbsp;&nbsp;&nbsp;</span>';\n theTR.appendChild(theTD);\n }\n \n // bottom row\n theTR = document.createElement("tr");\n theTable.appendChild(theTR);\n var theTD = document.createElement("td");\n theTD.setAttribute("bgcolor", "white");\n theTD.setAttribute("style", "border:solid 1px black;");\n theTD.setAttribute("colspan",cellsPerRow);\n theTD.onclick = function(){ if(apl_wikibar_colorPicker) apl_wikibar_colorPicker.hideColorMap(); };\n theTD.innerHTML = '<center><span style="font-size:10px;">close</span></center>';\n theTR.appendChild(theTD);\n \n }catch(ex){\n alert('createColorMap: '+ex.description);\n }\n \n}\n\n//------------------------------------------------------------------------------------------------\n// do on select a color\n//------------------------------------------------------------------------------------------------\nfunction apl_wikibar_onSelectColor(e) \n{\n \n if (!e) var e = window.event;\n var theTarget = resolveTarget(e); //<span>\n if(!theTarget) return(false);\n\n try{\n\n if(!apl_wikibar_colorPicker) return;\n \n apl_wikibar_colorPicker.hideColorMap();\n\n // get the color \n theTD = theTarget.parentNode;\n color = theTD.getAttribute("bgcolor");\n if(!color) return;\n \n if(apl_wikibar_colorPicker.targetSyntax && apl_wikibar_colorPicker.targetEditor)\n apl_wikibar_colorPicker.targetSyntax.format(apl_wikibar_colorPicker.targetEditor, color);\n \n }catch(ex){\n alert('apl_wikibar_onSelectColor: '+ex.description);\n } \n \n e.cancelBubble = true;\n if (e.stopPropagation) e.stopPropagation();\n return(false);\n \n}\n\n\n//------------------------------------------------------------------------------------------------\n// global variables: color picker\n//------------------------------------------------------------------------------------------------\nvar apl_wikibar_colorPicker = new apl_wikibar_ColorPicker(apl_wikibar_onSelectColor);\n\n//------------------------------------------------------------------------------------------------\n// global variables: syntax object\n// \n// parameter syntax: %1,%2,... - parameter needed, [%1] - optional parameter\n// %N - more than one parameter(1~n)\n// [%N] - any parameter(0~n)\n//------------------------------------------------------------------------------------------------\nvar apl_wikibar_syntaxes = {\n formattings: [\n {\n name: "ignore",\n tip: "ignore wiki word",\n symbol: "~",\n syntax: "~user_text",\n hint: "wiki_word",\n format: apl_wikibar_formatByWord\n },\n {\n name: "bold",\n tip: "bolder text",\n symbol: "<strong>B</strong>",\n syntax: "''user_text''",\n hint: "bold_text",\n format: apl_wikibar_formatByWord\n },\n {\n name: "italic",\n tip: "italic text",\n symbol: "<em>I</em>",\n syntax: "//user_text//",\n hint: "italic_text",\n format: apl_wikibar_formatByWord\n },\n {\n name: "underline",\n tip: "underline text",\n symbol: "<u>U</u>",\n syntax: "__user_text__",\n hint: "underline_text",\n format: apl_wikibar_formatByWord\n },\n {\n name: "strike",\n tip: "strikethrough text",\n symbol: "<strike>S</strike>",\n syntax: "==user_text==",\n hint: "strikethrough_text",\n format: apl_wikibar_formatByWord\n },\n {\n name: "sup",\n tip: "superscript text",\n symbol: "X<sup>2</sup>",\n syntax: "^^user_text^^",\n hint: "superscript_text",\n format: apl_wikibar_formatByWord\n },\n {\n name: "sub",\n tip: "subscript text",\n symbol: "X<sub>2</sub>",\n syntax: "~~user_text~~",\n hint: "subscript_text",\n format: apl_wikibar_formatByWord\n },\n {\n name: "comment",\n tip: "comment text",\n symbol: "/%",\n syntax: "/%user_text%/",\n hint: "comment_text",\n format: apl_wikibar_formatByWord\n },\n {\n name: "monospaced",\n tip: "monospaced text",\n symbol: "<code>mono</code>",\n syntax: "{{{user_text}}}",\n hint: "monospaced_text",\n format: apl_wikibar_formatByWord\n },\n {\n name: "line",\n tip: "horizontal line",\n symbol: "&mdash;",\n syntax: "\sn----\sn",\n format: apl_wikibar_formatByCursor\n },\n {\n name: "crlf",\n tip: "line break",\n symbol: "&para;",\n syntax: "\sn",\n format: apl_wikibar_formatByCursor\n }\n ], // formattings\n colors: [\n {\n name: "highlight",\n tip: "highlight text",\n syntax: "@@user_text@@",\n hint: "highlight_text",\n format: apl_wikibar_formatByWord\n },\n {\n name: "color",\n tip: "text color",\n hint: "your_text",\n syntax: "@@color(%1):user_text@@",\n format: apl_wikibar_formatByWord,\n needParam: apl_wikibar_getColorCode\n },\n {\n name: "bgcolor",\n tip: "background color",\n hint: "your_text",\n syntax: "@@bgcolor(%1):user_text@@",\n format: apl_wikibar_formatByWord,\n needParam: apl_wikibar_getColorCode\n },\n {\n name: "colorcode",\n tip: "insert colorcode",\n syntax: "%1",\n format: apl_wikibar_formatByCursor,\n needParam: apl_wikibar_getColorCode\n } \n ], // colors\n lists:[\n {\n name: "bullet",\n tip: "bullet point",\n syntax: "*user_text",\n hint: "bullet_text",\n format: apl_wikibar_formatByLine\n },\n {\n name: "numbered",\n tip: "numbered list",\n syntax: "#user_text",\n hint: "numbered_text",\n format: apl_wikibar_formatByLine\n }\n ], // lists\n headings:[\n {\n name: "Heading 1",\n tip: "Heading 1",\n syntax: "!user_text",\n hint: "heading_1",\n format: apl_wikibar_formatByLine\n },\n {\n name: "Heading 2",\n tip: "Heading 2",\n syntax: "!!user_text",\n hint: "heading_2",\n format: apl_wikibar_formatByLine\n },\n {\n name: "Heading 3",\n tip: "Heading 3",\n syntax: "!!!user_text",\n hint: "heading_3",\n format: apl_wikibar_formatByLine\n },\n {\n name: "Heading 4",\n tip: "Heading 4",\n syntax: "!!!!user_text",\n hint: "heading_4",\n format: apl_wikibar_formatByLine\n },\n {\n name: "Heading 5",\n tip: "Heading 5",\n syntax: "!!!!!user_text",\n hint: "heading_5",\n format: apl_wikibar_formatByLine\n }\n ], // headings\n paragraphs:[\n {\n name: "comment by line",\n tip: "line comment",\n syntax: "/%user_text%/",\n hint: "comment_text",\n format: apl_wikibar_formatByLine\n },\n {\n name: "comment by block",\n tip: "block comment",\n syntax: "/%\snuser_text\sn%/",\n hint: "comment_text",\n byBlock: true, \n format: apl_wikibar_formatByLine\n },\n {\n name: "monospaced by line",\n tip: "line monospaced",\n syntax: "{{{\snuser_text\sn}}}",\n hint: "monospaced_text",\n format: apl_wikibar_formatByLine\n },\n {\n name: "monospaced by block",\n tip: "block monospaced",\n syntax: "{{{\snuser_text\sn}}}",\n hint: "monospaced_text",\n byBlock: true,\n format: apl_wikibar_formatByLine\n },\n {\n name: "quote by line",\n tip: "line quote",\n syntax: ">user_text",\n hint: "quote_text",\n format: apl_wikibar_formatByLine\n },\n {\n name: "quote by block",\n tip: "block quote",\n syntax: "<<<\snuser_text\sn<<<",\n hint: "quote_text",\n byBlock: true, \n format: apl_wikibar_formatByLine\n }\n ], // paragraphs\n links:[\n {\n name: "wiki",\n tip: "wiki link",\n syntax: "[[user_text]]",\n hint: "wiki_word",\n format: apl_wikibar_formatByWord\n },\n {\n name: "pretty",\n tip: "pretty link",\n syntax: "[[user_text|%1]]", \n hint: "pretty_word",\n format: apl_wikibar_formatByWord,\n needParam: apl_wikibar_getLinkUrl,\n param: "PrettyLink Target"\n },\n {\n name: "url",\n tip: "url link",\n syntax: "[[user_text|%1]]", \n hint: "your_text",\n format: apl_wikibar_formatByWord,\n needParam: apl_wikibar_getLinkUrl,\n param: "http://..."\n },\n {\n name: "image",\n tip: "image link",\n syntax: "[img[user_text|%1]]", \n hint: "alt_text",\n format: apl_wikibar_formatByWord,\n needParam: apl_wikibar_getLinkUrl,\n param: "image/icon.jpg"\n }\n ], // links\n plugins:[\n {\n name: "codes area",\n tip: "block monospaced for plugin",\n syntax: "//{{{\snuser_text\sn//}}}",\n hint: "monospaced_plugin_text",\n byBlock: true,\n format: apl_wikibar_formatByLine\n }, \n {\n name: "comment by line",\n tip: "line comment",\n syntax: "//user_text",\n hint: "plugin_comment",\n format: apl_wikibar_formatByLine\n },\n {\n name: "comment by block",\n tip: "block comment",\n syntax: "/***\snuser_text\sn***/",\n hint: "plugin_comment",\n byBlock: true,\n format: apl_wikibar_formatByLine\n }\n ], // plugins\n tables:[\n {\n name: "table",\n tip: "create a new table",\n syntax: "\sn%1\sn",\n format: apl_wikibar_formatByWord,\n needParam: apl_wikibar_getTableRowCol\n },\n {\n name: "table header",\n tip: "table header text",\n syntax: "|user_text|c",\n hint: "table_header",\n format: apl_wikibar_formatByWord\n }, \n {\n name: "cell",\n tip: "create a tabel cell",\n syntax: "|user_text|",\n hint: "your_text",\n format: apl_wikibar_formatByWord\n },\n {\n name: "column header",\n tip: "create a column header cell",\n syntax: "|!user_text|",\n hint: "column_header",\n format: apl_wikibar_formatByWord\n },\n {\n name: "cell bgcolor",\n tip: "cell bgcolor",\n syntax: "|bgcolor(%1):user_text|",\n hint: "your_text",\n format: apl_wikibar_formatByTableCell,\n needParam: apl_wikibar_getColorCode\n },\n {\n name: "align left",\n tip: "add a tabel cell",\n syntax: "|user_text|",\n hint: "your_text",\n format: apl_wikibar_formatByTableCell\n },\n {\n name: "align center",\n tip: "add a tabel cell",\n syntax: "| user_text |",\n hint: "your_text",\n format: apl_wikibar_formatByTableCell\n },\n {\n name: "align right",\n tip: "add a tabel cell",\n syntax: "| user_text|",\n hint: "your_text",\n format: apl_wikibar_formatByTableCell\n }\n ], // tables\n macros:[\n {\n name: "allTags",\n tip: "allTags",\n syntax: "<<allTags>>",\n format: apl_wikibar_formatByWord\n },\n {\n name: "closeAll",\n tip: "closeAll",\n syntax: "<<closeAll>>",\n format: apl_wikibar_formatByWord\n },\n {\n name: "gradient",\n tip: "gradient",\n syntax: "<<gradient vert #ffffff %1>>user_text>>",\n format: apl_wikibar_formatByWord,\n needParam: apl_wikibar_getColorCode\n },\n {\n name: "list",\n tip: "list",\n syntax: "<<list>>",\n format: apl_wikibar_formatByWord\n },\n {\n name: "list missing",\n tip: "list missing",\n syntax: "<<list missing>>",\n format: apl_wikibar_formatByWord\n },\n {\n name: "list orphans",\n tip: "list orphans",\n syntax: "<<list orphans>>",\n format: apl_wikibar_formatByWord\n }, \n {\n name: "newJournal",\n tip: "newJournal",\n syntax: "<<newJournal>>",\n format: apl_wikibar_formatByWord\n }, \n {\n name: "newTiddler",\n tip: "newTiddler",\n syntax: "<<newTiddler>>",\n format: apl_wikibar_formatByWord\n }, \n {\n name: "option",\n tip: "option",\n syntax: "<<option %1>>[%2]\sn",\n format: apl_wikibar_formatByWord,\n needParam: apl_wikibar_getMacroParam,\n param: 'chkOpenInNewWindow "Open link in new window"'\n }, \n {\n name: "permaview",\n tip: "permaview",\n syntax: "<<permaview>>",\n format: apl_wikibar_formatByWord\n }, \n {\n name: "saveChanges",\n tip: "saveChanges",\n syntax: "<<saveChanges>>",\n format: apl_wikibar_formatByWord\n }, \n {\n name: "search",\n tip: "search",\n syntax: "<<search>>",\n format: apl_wikibar_formatByWord\n }, \n {\n name: "slider",\n tip: "slider",\n syntax: "<<slider %1 %2 %3>>",\n format: apl_wikibar_formatByWord,\n needParam: apl_wikibar_getMacroParam,\n param: "sliderID sliderTiddler sliderLabel"\n }, \n {\n name: "sparkline",\n tip: "sparkline",\n syntax: "<<sparkline %N>>", \n format: apl_wikibar_formatByWord,\n needParam: apl_wikibar_getMacroParam,\n param: "number_list(ex: 100 123 ...)"\n }, \n {\n name: "tabs",\n tip: "tabs",\n syntax: "<<tabs [%N]>>",\n format: apl_wikibar_formatByWord,\n needParam: apl_wikibar_getMacroParam,\n param: "indentifier tabLabel tabName Tiddler"\n }, \n {\n name: "tag",\n tip: "tag",\n syntax: "<<tag %1>>",\n format: apl_wikibar_formatByWord,\n needParam: apl_wikibar_getMacroParam,\n param: "tagName(ex: systemConfig)"\n }, \n {\n name: "tiddler",\n tip: "tiddler",\n syntax: "<<tiddler %1>>",\n format: apl_wikibar_formatByWord,\n needParam: apl_wikibar_getMacroParam,\n param: "Tiddler"\n }, \n {\n name: "timeline",\n tip: "timeline",\n syntax: "<<timeline>>",\n format: apl_wikibar_formatByWord\n }, \n {\n name: "today",\n tip: "today",\n syntax: "<<today [%1]>>", \n format: apl_wikibar_formatByWord,\n needParam: apl_wikibar_getMacroParam,\n param: '"YYYY/MM/DD hh:mm:ss"'\n }, \n {\n name: "version",\n tip: "version",\n syntax: "<<version>>",\n format: apl_wikibar_formatByWord\n }\n ], // macros\n dates:[\n {\n name: "YYYY",\n tip: "full year",\n syntax: "YYYY",\n format: apl_wikibar_formatByCursor\n },\n {\n name: "YY",\n tip: "2-digit year",\n syntax: "YY",\n format: apl_wikibar_formatByCursor\n },\n {\n name: "MMM",\n tip: "month name",\n syntax: "MMM",\n format: apl_wikibar_formatByCursor\n },\n {\n name: "MM",\n tip: "month",\n syntax: "MM",\n format: apl_wikibar_formatByCursor\n },\n {\n name: "0MM",\n tip: "zero-leading month",\n syntax: "0MM",\n format: apl_wikibar_formatByCursor\n },\n {\n name: "DDD",\n tip: "week day",\n syntax: "DDD",\n format: apl_wikibar_formatByCursor\n },\n {\n name: "DD",\n tip: "day",\n syntax: "DD",\n format: apl_wikibar_formatByCursor\n },\n {\n name: "0DD",\n tip: "zero-leading day",\n syntax: "0DD",\n format: apl_wikibar_formatByCursor\n },\n {\n name: "hh",\n tip: "hour",\n syntax: "hh",\n format: apl_wikibar_formatByCursor\n },\n {\n name: "mm",\n tip: "minute",\n syntax: "mm",\n format: apl_wikibar_formatByCursor\n },\n {\n name: "ss",\n tip: "second",\n syntax: "ss",\n format: apl_wikibar_formatByCursor\n } \n ], // dates\n htmls:[\n {\n name: "<html>",\n tip: "html tag",\n syntax: "<html>\snuser_text\sn</html>",\n hint: "html_content",\n byBlock: true,\n format: apl_wikibar_formatByLine\n }\n ] // htmls\n};\n\n\n//}}}\n
.ApplyZeldmanOrangeButton:after {\n font-weight: bold;\n content:"\s00A0\s221A";\n}\n\n\n#popup{\n padding-left: 2px !important;\n padding-bottom: 2px !important;\n}\n\n#popup *{\n border: 0 !important;\n}\n\n#popup hr {\n border-top: solid 1px #f5d7b8!important; \n border-left: none;\n border-right: none;\n border-bottom: none;\n height: 1px;\n color: #f5d7b8;\n width: 98%;\n}\n\nbody {\n margin: 0px;\n background-color: #fff;\n font-size: 9pt;\n font-family: tahoma,arial,helvetica;\n padding: 0;\ncolor: #867663;\n}\n\na:link, a:visited, a:hover, a:active {\n text-decoration: none;\n color: #be540b;\n}\n\n#header {\n display: block;\n width: 100%;\n border-top: 100px solid #c51\n}\n\n#header a{\n color: white !important;\n line-height: .8em;\n}\n\n#header a:hover{\nborder-bottom: 2px dotted;\nmargin-bottom: -2px;\n}\n\n#titleLine {\n color: #fff;\n background: #bcd;\n padding: 0px;\n border-top: 8px solid #b8764c;\n background-color: #cf936c;\n border-bottom: 3px solid #f5d7b4;\n height: 5px;\n\n}\n\n#titleLine a {\n text-decoration: none;\n color: #9ab;\n}\n\n#siteTitle {\n font-size: 40pt;\n font-weight: bold;\nposition: absolute;\n right: 20px;\n top: .2em;\n color: #fff;\n float: right;\n}\n\n#siteSubtitle {\n font-size: 12pt;\n font-family: georgia,times;\n color: #fff;\n display: block;\n position: absolute;\n top: 4.5em;\n right: 40px;\ntext-align: right;\n}\n\n#mainMenu {\n font-size: 12px;\n //float: left;\n width: 13em;\n margin: 1em 1em .5em 1em;\n background: #fff;\n color: black;\n text-align: center;\npadding: 0;\nborder: 1px solid #f5d7b4;\n}\n\n#mainMenu br{\ndisplay:none;\n}\n\n#mainMenu b a {\ncolor: #fff;\nbackground-color: #d16400;\nfont-weight: normal;\ndisplay:block;\n}\n\n#mainMenu a.tiddlyLink, #mainMenu a.button{\ndisplay: block; \n text-decoration: none;\n width: 13em;\ncolor: #f79b60;\n border-top: 1px solid #f5d7b4;\n border-bottom: 1px solid #f5d7b4;\nmargin: -1px auto 0px auto;\nline-height: 1.5em;\n text-transform: capitalize;\n}\n\n#mainMenu a:hover {\n color: #930 !important;\n background-color: #f5d7b4 !important;\n}\n\n#displayArea {\n margin: 1em 14em 0em 15em;\n}\n\n#messageArea {\n background-color: #f5d7b4;\n color: #867663;\n padding: 0.5em 0.5em 0.5em 0.5em;\n margin: 0em 0em 0.6em 0em;\n border-bottom: 1px solid #458;\n display: none;\n}\n\n#messageArea a:link, #messageArea a:visited {\n display: inline;\n text-decoration: underline;\n color: #c51;\n}\n\n#messageArea a:hover {\n color: #f79b60;\n}\n\n#messageArea a:active {\n color: #fff;\n}\n\n.tiddler {\n border: 1px solid #fff;\n margin: 0 10px 20px;\n padding: 8px;\n padding-top:0;\n font-family: arial,georgia,times;\n background-color: #fff;\n}\n\n#tiddlerDisplay div.tiddler:hover {\n border: 1px solid #ccc;\n}\n\n.innerTiddler {\n padding: 0.7em 1em 1em 0.8em;\n font-size: 9pt;\n background-color: #fff;\n}\n\n#displayArea .tiddlyLinkExisting {\n font-weight: bold;\n}\n\n#displayArea .tiddlyLinkNonExisting {\n font-style: italic;\n}\n\n#displayArea .externalLink {\n text-decoration: underline;\n}\n\n.title {\n font-family: tahoma,arial,helvetica;\n font-size: 13pt;\n color: #867663;\n font-weight: bold;\n display: inline;\n padding-bottom: 1em;\n margin-bottom: 1em;\n}\n\n.toolbar {\n font-family: tahoma,arial,helvetica;\n font-weight: normal;\n font-size: 8pt;\n padding: 0em 0em 0em 1em;\n margin-top: -2em;\n color: color: #aaa;\n visibility: hidden;\n position: relative;\n bottom: -1.5em;\n}\n\n.toolbar a {\n padding: 0.2em 0.4em 0.2em 0.4em;\n color: #f79b60;\n border: 1px solid #f5d7b4;\n}\n\n.toolbar a:hover {\n color: #930 !important;\n background-color: #f5d7b4 !important;\n border-color: #f79b60 !important;\n}\n\n.toolbar a:active {\n color: #666;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nviewer a.button{\n border: 0;\n background-color: transparent; !important;\n padding: 0em;\n color: #888 !important;\n border: 1px solid transparent;\n}\n\n.footer a.button {\n color: #888 !important;\n}\n\n.editorFooter a:hover, .footer a:hover{\n color: #f79b60 !important;\n border: 1px solid #f5d7b4;\n background-color: #fff !important;\n margin-left: -1px; \n margin-right: -1px;\n}\n\n.editorFooter a:hover, .footer #popup a:hover{\n margin: 0;\n}\n\n.viewer a.button:hover{\n color: #f79b60 !important;\n background-color: #transparent !important;\n}\n\n.viewer a.button, .viewer a.tiddlyLink,.editorFooter a:hover, .footer a.button {\n color: #f79b60 ;\n background-color: transparent !important;\n}\n\n#popup {\n display: none;\n position: absolute;\n top: 1.5em;\n left: 13.25em;\n font-size: 8pt;\n color: #f79b60;\n background-color: #fff;\n padding: 0;\n border: 1px solid #f5d7b4;\n}\n\n#popup a {\n display: block;\n color: #f79b60 !important;\n border: 0;\n margin-bottom: -1px;\n}\n\n#popup a:hover {\n background-color: #f5d7b4;\n color: #930 !important;\n}\n\n.body {\n border-top:1px solid #ccc;\n padding-top: 0.5em;\n margin-top:0.3em;\n}\n\n.viewer {\n color: #867663;\n line-height: 140%;\n}\n\n.viewer a:link, .body a:visited{\n color: #be540b;;\n}\n\n.viewer a:hover {\n background-color: transparent;\n text-decoration: underline;\ncolor: #f79b60;\n}\n\n.viewer blockquote {\n font-size: 8pt;\n line-height: 150%;\n border-left: 1px solid #ccc;\n padding-left: 0.8em;\n margin-left: 2.5em;\n}\n\n.viewer ul {\n margin-left: 0.5em;\n padding-left: 1.5em;\n}\n\n.viewer ol {\n margin-left: 0.5em;\n padding-left: 1.5em;\n}\n\n.viewer h1, .viewer h2,h3,h4,h5,h6 {\n font-weight: bold;\n text-decoration: none;\n color: #867663;\n padding-left: 0em;\nbackground-color: transparent;\n}\n\n.viewer h2 {\n font-size: 12pt;\nborder-bottom: 2px dotted #ccc;\n}\n\n.viewer h3 {\n font-size: 11pt;\nborder-bottom: 1px dotted #ccc;\n}\n\n.viewer h4 {\n font-size: 10pt;\n}\n\n.viewer h5 {\n font-size: 9pt;\n}\n\n.viewer h6 {\n font-size: 8pt;\n}\n\n.viewer table {\n font-size: 10pt;\n border-collapse: collapse;\n border: 2px solid #303030;\n margin-left: 1.0em;\n margin-right: 1.0em;\n margin-top: 0.8em;\n margin-bottom: 0.8em;\n}\n\n.viewer th {\n background-color: #bcd;\n border: 1px solid #606060;\n padding: 3px;\n}\n\n.viewer td, tr {\n border: 1px solid #606060;\n padding: 3px;\n}\n\n.viewer caption {\n font-size: smaller;\n padding: 3px;\n}\n\n.viewer hr {\n border-top: dashed 1px #606060;\n border-left: none;\n border-right: none;\n border-bottom: none;\n height: 1px;\n color: #666666;\n}\n\n.highlight {\n color: #000000;\n background-color: #bcd;\n}\n\n.editor {\n font-size: 8pt;\n color: #402c74;\n font-weight: normal;\n}\n\n.editor input {\n display: block;\n border: 1px solid black;\n}\n\n.editor textarea {\n display: block;\n font: inherit;\n border: 1px solid black;\n}\n\n#sidebar {\n float: right;\n width: 14em;\n color: #666;\n font-size: 8pt;\n border-left: 1px solid #aaa;\n border-bottom:1px solid #aaa;\n background-color: #fdf8f2;\n}\n\n.sidebarSubHeading {\n font-size: 0.95em;\n color: #236;\n}\n\n#commandPanel {\n padding-top: 0.5em;\n background-color: #fdf8f2;\n color: black;\n font-size: 8pt;\n}\n\n#commandPanel a {\n display: block;\n padding: 0.3em 0.2em 0.3em 1em;\ncolor: #f79b60;\n text-decoration: none;\n background-color: white !important;\n}\n\n#commandPanel a:hover {\n color: #930;\n background-color: transparent;\n}\n\n#commandPanel input {\n margin: 0.4em 0em 0.3em 1em;\n border: 1px solid black;\n}\n\n#optionsPanel {\n display: none;\n background-color: #f3f8ff;\n padding: 0.5em 0.5em 0.5em 0.5em;\n font-size: 7pt;\n color: black;\n}\n\n#optionsPanel a:link, #optionsPanel a:visited {\n color: #666;\n font-weight: bold;\n}\n\n#optionsPanel a:hover {\n color: #922;\n text-decoration: underline;\n background-color: transparent;\n}\n\n.optionsText {\n margin-top: 0.25em;\n margin-bottom: 0.75em;\n}\n\n.optionsItem {\n}\n\n#tabTimeline {\n background-color: #f5d7b4;\n}\n\n#tabTags {\n background-color: #cf936c;\n}\n\n#tabMore {\n background-color: #b8764c;\n}\n\n/*\n=================Sidebar==========\n=================================\n*/\n\n\n#sidebar {\n width: 14em;\n font-size: 8pt;\n border-left: 1px solid #aaa;\n border-bottom:1px solid #aaa;\n}\n\n#sidebarOptions a.button,#contentWrapper #sidebarOptions a.tiddlyLink{\n color: #f79b60;\n background-color: #fff !important;\n text-decoration: none;\n padding: 0.3em 0.2em 0.3em 1em;\n display: block;\n}\n\n#sidebarOptions a.tiddlyLink, #sidebarOptions{\n color: #666;\n background-color: #fff !important;\n}\n\n#sidebar #sidebarOptions a.button:hover{\n color: #930;\n background-color: #fff;\n text-decoration: none;\n}\n\n#sidebar #sidebarOptions a.tiddlyLink:hover{\n color: #930;\n background-color: #fff;\n text-decoration: underline;\n}\n\n#contentWrapper #sidebar a:hover{\n color: #c51;\n text-decoration: underline;\n}\n\n#contentWrapper .sidebarSubHeading {\n font-size: 0.95em;\n color: #236;\n}\n\n#contentWrapper #commandPanel {\n padding-top: 0.5em;\n background-color: #f3f3f3;\n color: black;\n font-size: 8pt;\n}\n\n#contentWrapper #commandPanel a {\n display: block;\n padding: 0.3em 0.2em 0.3em 1em;\n color: #c51;\n text-decoration: none;\n}\n\n#contentWrapper #commandPanel a:hover {\n color: #922;\n text-decoration: underline;\n background-color: transparent;;\n}\n\n#contentWrapper #commandPanel input {\n margin: 0.4em 0em 0.3em 1em;\n border: 1px solid black;\n}\n\n#contentWrapper #optionsPanel {\n display: none;\n background-color: #f3f8ff;\n padding: 0.5em 0.5em 0em 0.5em;\n font-size: 7pt;\n color: black;\n}\n\n#contentWrapper #optionsPanel a:link, #optionsPanel a:visited {\n color: #c51;\n font-weight: bold;\n}\n\n#contentWrapper #optionsPanel a:hover {\n color: #922;\n text-decoration: underline;\n background-color: transparent;\n}\n\n.optionsText {\n margin-top: 0.25em;\n margin-bottom: 0.75em;\n}\n\n.optionsItem {\n}\n/*========================================================================*/\n#contentWrapper #sidebarTabs {\n background-color: #fff;\n padding: 0em;\n}\n\n#contentWrapper #sidebarTabs a {\n color: black;\n background-color: transparent;\n}\n\n#contentWrapper #sidebarTabs a:hover {\n color: #922; text-decoration: underline;\n background-color: transparent;\n}\n\n#contentWrapper #sidebarTabs a:active {\n color: black;\n}\n\n#contentWrapper .tabContentTags #popup {\n display: none;\n position: absolute;\n top: 1em;\n left: 13.25em;\n font-size: 8pt;\n color: #888;\n background-color: #e4e4e4;\n padding: 0;\n margin-top: -2px;\n border-top: 1px solid #aaa;\n border-bottom: 1px solid #330000;\n border-right: 1px solid #330000;\n border-left: 1px solid #aaa;\n}\n\n#contentWrapper .tabContentTags #popup hr {\n color: #aaa;\n}\n\nhr{\n color: black !important;\n}\n\n#contentWrapper .tabContentTags #popup a {\n display: block;\n color: #888;\n min-width: 8em;\n border: 0;\n margin: 0;\n height: 1.2em;\n}\n\n#contentWrapper .tabContentTags #popup a:hover {\n background-color: #e4e4e4;\n color: black;\n}\n\n#contentWrapper a.tab {\n font-weight: normal;\n display: inline;\n margin: 0px 1px; \n border:1px solid #aaa;\n border-bottom:none;\n}\n\n#contentWrapper a.tab:hover {\n text-decoration: none !important;\n border-color: black;\n}\n\n#contentWrapper a.tabSelected {\n background-color: #f5d7b4 !important;\n padding: 2px 4px 2px 4px;\n}\n\n#contentWrapper a.tabUnselected {\n background-color: #c51 !important;\n padding: 2px 4px 0px 4px;\n color: #fff !important;\n}\n\n/*===========================================================================================*/\n/*===========================================================================================*/\n#sidebarTabs{\n margin: 0;\n padding: 0;\n}\n\n#contentWrapper .tabContents {\n background-color: #f5d7b4;\n border-bottom: solid #aaa 1px;\n}\n\n#contentWrapper .tabContents a.tiddlyLink, #contentWrapper .tabContents a.button{\n background-color: #e6e6e6;\n color: #922 !important;\n}\n\n#contentWrapper .tabContents a:hover{\n color: #b44 !important;\n}\n\n#contentWrapper .txtMoreTab a.tabUnselected {\n background-color: #f5d7b4 !important;\n padding: 2px 4px 0px 4px;\n color: #000 !important;\n display: block;\n}\n\n#contentWrapper .txtMoreTab a.tabSelected {\n background-color: #cf936c !important;\n padding: 2px 4px 2px 4px;\n color: #000 !important;\n}\n\n.txtMoreTab .tabContents {\n background-color: #cf936c !important;\n border-bottom: solid #aaa 1px;\n color: #fff;\n}\n\n.txtMoreTab .tabContents a{\n background-color: transparent !important;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/*\n.\n\n#popup a {\n display: block;\n color: #888;\n min-width: 8em;\n border: 0;\n margin: 0;\n}\n\n#popup a:hover {\n background-color: #e4e4e4;\n color: black;\n}\n\n.body {\n border-top:1px solid #ccc;\n padding-top: 0.5em;\n margin-top:0.3em;\n overflow: hidden;\n}\n\n.viewer {\n color: black;\n line-height: 140%;\n}\n\n.viewer a:link, .body a:visited{\n color: #922;\n}\n\n.viewer a:hover {\n color: #b44;\n background-color: transparent;\n text-decoration: none;\n}\n\n.viewer blockquote {\n font-size: 8pt;\n line-height: 150%;\n border-left: 1px solid #ccc;\n padding-left: 0.8em;\n margin-left: 2.5em;\n}\n\n.viewer ul {\n margin-left: 0.5em;\n padding-left: 1.5em;\n}\n\n.viewer ol {\n margin-left: 0.5em;\n padding-left: 1.5em;\n}\n\n/*==============================================Headings================*/\n\n.viewer h1,.viewer h2,h3,h4,h5,h6 {\n font-weight: bold;\n text-decoration: none;\n color: #469;\n padding-left: .6em;\nbackground-color: transparent !important;\nborder-bottom: 3px dotted #ccc;\n}\n\n.viewer h2 {\n font-size: 12pt;\n}\n\n.viewer h3 {\n font-size: 11pt;\n}\n\n.viewer h4 {\n font-size: 10pt;\n}\n\n.viewer h5 {\n font-size: 9pt;\n}\n\n.viewer h6 {\n font-size: 8pt;\n}\n\n.viewer table {\n font-size: 10pt;\n border-collapse: collapse;\n border: 2px solid #303030;\n margin-left: 1.0em;\n margin-right: 1.0em;\n margin-top: 0.8em;\n margin-bottom: 0.8em;\n}\n\n.viewer th {\n background-color: #bcd;\n border: 1px solid #606060;\n padding: 3px;\n}\n\n.viewer td, tr {\n border: 1px solid #606060;\n padding: 3px;\n}\n\n.viewer caption {\n font-size: smaller;\n padding: 3px;\n}\n\n.viewer hr {\n border-top: dashed 1px #606060;\n border-left: none;\n border-right: none;\n border-bottom: none;\n height: 1px;\n color: #666666;\n}\n\n.highlight {\n color: #000000;\n background-color: #bcd;\n}\n\n.editor {\n font-size: 8pt;\n color: #402c74;\n font-weight: normal;\n}\n\n.editor input {\n display: block;\n border: 1px solid black;\n}\n\n.editor textarea {\n display: block;\n font: inherit;\n border: 1px solid black;\n}\n\n*/\n@media print {\n\n#mainMenu {\n display: none;\n}\n\n#displayArea {\n margin: 1em 1em 0em 1em;\n}\n\n#sidebar {\n display: none;\n}\n\n}