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

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

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

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

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

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

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

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

.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

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

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

----
Also see [[AdvancedOptions]]
<<importTiddlers>>
Type the text for '18 December 2011'
*1ste Kan Inf
**Imperatief Programmeren II: Programmeren in C
**Computersystemen
*2e Kan Inf
**~Object-Georienteerd Programmeren
**Project ~Object-Georienteerd Programmeren en Algoritmen en Datastructuren
**Project 2IK
*1ste Lic Inf
**Project 3.3
*2e Lic Inf
**Software Engineering
*Thesisstudenten
**Danny Laarmans, "//Collision Response for Physically Realistic Simulation of Rigid Bodies//"
**Niels Soeffers, "//Een Overzicht en Vergelijking van Populaire Technieken bij Cloth Simulation//"
*1ste Kan Inf
**Imperatief Programmeren II: Programmeren in C
*2e Kan Inf
**~Object-Georienteerd Programmeren
**Project ~Object-Georienteerd Programmeren en Algoritmen en Datastructuren
**Project 2IK
*1ste Lic Inf
**Computeranimatie
**Project 3.3
*2e Lic Inf
**Software Engineering
*Thesisstudenten
**Tom Moers, "//Constraints in Physically-based Simulations//"
*1ste Bach. Inf/ICT
**Imperatief Programmeren II: Programmeren in C
*2e Bach. Inf/ICT
**~Object-Georienteerd Programmeren
**Project ~Object-Georienteerd Programmeren en Algoritmen en Datastructuren
**Project 2IK
*3de Kan. Inf
**Computeranimatie
**Project 3.3
*2e Lic Inf
**Architectuur en Algoritmes van Computer Games
**Project 4.1
**Software Engineering
*Thesisstudenten
**Davy Renaers, "//Virtual Brush//"
**Kristof Thys, "//Simulatie van Natuurlijke Phenomenen met behulp van Cellulaire Automaten//"
**John Opdenakker, "//Collision Detection in ~CVEs//"
*1ste Bach. Inf/ICT
**Imperatief Programmeren II: Programmeren in C
*2e Bach. Inf/ICT
**~Object-Georienteerd Programmeren
**Project ~Object-Georienteerd Programmeren en Algoritmen en Datastructuren
**Project 2IK
*3de Bach. Inf
**Project
**Software Engineering
*2e Lic Inf
**Architectuur en Algoritmes van Computer Games
**Project 4.1
*MIT
**Multimedia en Communicatietechnologie
*Thesisstudenten
**Dirk Vanden Boer, "//General-purpose Computing on ~GPUs//"
*1ste Bach. Inf/ICT
**Imperatief Programmeren II: Programmeren in C ([[website|http://didactiekinf.uhasselt.be/impprog2]])
*2e Bach. Inf/ICT
**~Object-Georienteerd Programmeren ([[website|http://didactiekinf.uhasselt.be/oo]])
**Project ~Object-Georienteerd Programmeren en Algoritmen en Datastructuren
**Project 2IK ([[website|http://didactiekinf.uhasselt.be/project2]])
**Geavanceerde Programmeertechnieken ([[website|http://didactiekinf.uhasselt.be/gpt]])
*3de Bach. Inf/ICT
**Software Engineering ([[website|http://didactiekinf.uhasselt.be/se]])
*Master Inf
**Architectuur en Algoritmes van Computer Games ([[website|http://didactiekinf.uhasselt.be/aac]])
**Computeranimatie ([[website|http://didactiekinf.uhasselt.be/animatie]])
**Geavanceerde Software Engineering ([[website|http://didactiekinf.uhasselt.be/gse]])
*MIT
**Multimedia en Communicatietechnologie
*Thesisstudenten
**Bart Ameloot, "//Watercolorization//"
*2e Bach. Inf/ICT
**Trimesteroverschrijdend Project ([[website|http://didactiekinf.uhasselt.be/project2]])
*3de Bach. Inf/ICT
**Software Engineering ([[website|http://didactiekinf.uhasselt.be/se]])
*Master Inf
**Architectuur en Algoritmes van Computer Games ([[website|http://didactiekinf.uhasselt.be/aac]])
**Computeranimatie ([[website|http://didactiekinf.uhasselt.be/animatie]])
**Geavanceerde Software Engineering ([[website|http://didactiekinf.uhasselt.be/gse]])
*Thesisstudenten
**Kemal Taskin, "//High Resolution Simulation Output//"
**Brecht Van Lommel, "//Painterly Animation//"
*2e Bach. Inf/ICT
**Trimesteroverschrijdend Project ([[website|http://didactiekinf.uhasselt.be/project2]])
*3de Bach. Inf/ICT
**Software Engineering ([[website|http://didactiekinf.uhasselt.be/se]])
*Master Inf
**Capita Selecta van de Multimedia ([[website|http://didactiekinf.uhasselt.be/capita]])
**Architectuur en Algoritmes van Computer Games ([[website|http://didactiekinf.uhasselt.be/aac]])
**Computeranimatie ([[website|http://didactiekinf.uhasselt.be/animatie]])
**Geavanceerde Software Engineering ([[website|http://didactiekinf.uhasselt.be/gse]])
*Thesisstudenten
**Brecht Van Lommel, "//Differential Methods in Character Rigging//"
**Tom Ameloot, "//Painterly Animation//"
*2e Bach. Inf/ICT
**Trimesteroverschrijdend Project ([[website|http://didactiekinf.uhasselt.be/project2]])
*3de Bach. Inf/ICT
**Software Engineering ([[website|http://didactiekinf.uhasselt.be/se]])
*Master Inf
**Capita Selecta van de Multimedia ([[website|http://didactiekinf.uhasselt.be/capita]])
**Architectuur en Algoritmes van Computer Games ([[website|http://didactiekinf.uhasselt.be/aac]])
**Computeranimatie ([[website|http://didactiekinf.uhasselt.be/animatie]])
**Geavanceerde Software Engineering ([[website|http://didactiekinf.uhasselt.be/gse]])
*2e Bach. Inf/ICT
**Trimesteroverschrijdend Project ([[website|http://didactiekinf.uhasselt.be/project2]])
*3de Bach. Inf/ICT
**Software Engineering ([[website|http://didactiekinf.uhasselt.be/se]])
*Master Inf
**Capita Selecta van de Multimedia ([[website|http://didactiekinf.uhasselt.be/capita]])
**Architectuur en Algoritmes van Computer Games ([[website|http://didactiekinf.uhasselt.be/aac]])
**Computeranimatie ([[website|http://didactiekinf.uhasselt.be/animatie]])
*2e Bach. Inf/ICT
**Trimesteroverschrijdend Project ([[website|http://didactiekinf.uhasselt.be/project2]])
*3de Bach. Inf/ICT
**Software Engineering ([[website|http://didactiekinf.uhasselt.be/se]])
*Master Inf
**Capita Selecta van de Multimedia ([[website|http://didactiekinf.uhasselt.be/capita]])
**Architectuur en Algoritmes van Computer Games ([[website|http://didactiekinf.uhasselt.be/aac]])
**Computeranimatie ([[website|http://didactiekinf.uhasselt.be/animatie]])
A simple, interactive application that implements the 2D ~Navier-Stokes wave equation in C++, with a Qt interface to tweak some parameters. The implementation is based on the paper "[[Realistic Animation of Liquids|http://www.cis.upenn.edu/~fostern/pdfs/gmip96.pdf]]", from Nick Foster and Dimitri Metaxas (SIGGRAPH '96).

* [[navierstokes2d_v001.tar.gz|./projects/navierstokes2d_v001.tar.gz]] (20-06-03)

Note: Using an explicit Eulerian integrator, the current implementation is unstable!

A dutch document ([[ps|./projects/navierstokesvgl.ps]]) by Jori Liesenborgs describing the derivation of the ~Navier-Stokes equations from Jos Stam's "Stable Fluids" paper to Foster's "Realistic Animation of Liquids".
/***
|Name|BreadcrumbsPlugin|
|Author|Eric Shulman|
|Source|http://www.TiddlyTools.com/#BreadcrumbsPlugin|
|Documentation|http://www.TiddlyTools.com/#BreadcrumbsPluginInfo|
|Version|2.1.4|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|list/jump to tiddlers viewed during this session plus "back" button/macro|
This plugin provides a list of links to all tiddlers opened during the session, creating a "trail of breadcrumbs" from one tiddler to the next, allowing you to quickly navigate to any previously viewed tiddler, or select 'home' to reset the display to the initial set of tiddlers that were open at the start of the session (i.e., when the document was loaded into the browser).
!!!!!Documentation
<<<
see [[BreadcrumbsPluginInfo]]
<<<
!!!!!Configuration
<<<
<<option chkCreateDefaultBreadcrumbs>> automatically create breadcrumbs display (if needed)
<<option chkShowBreadcrumbs>> show/hide breadcrumbs display
<<option chkReorderBreadcrumbs>> re-order breadcrumbs when visiting a previously viewed tiddler
<<option chkBreadcrumbsHideHomeLink>> omit 'Home' link from breadcrumbs display
<<option chkBreadcrumbsSave>> prompt to save breadcrumbs when 'Home' link is pressed
<<option chkShowStartupBreadcrumbs>> show breadcrumbs for 'startup' tiddlers
<<option chkBreadcrumbsReverse>> show breadcrumbs in reverse order (most recent first)
<<option chkBreadcrumbsLimit>> limit breadcrumbs display to {{twochar{<<option txtBreadcrumbsLimit>>}}} items
<<option chkBreadcrumbsLimitOpenTiddlers>> limit open tiddlers to {{twochar{<<option txtBreadcrumbsLimitOpenTiddlers>>}}} items

<<<
!!!!!Revisions
<<<
2011.02.16 2.1.4 in refresh(), use 'inline' instead of 'block' style (avoids unwanted linebreak).  In previousTiddler(), allow handling even if not in a tiddler so that back button can be placed in ~MainMenu or ~SidebarOptions.
| Please see [[BreadcrumbsPluginInfo]] for previous revision details |
2006.02.01 1.0.0 initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.BreadcrumbsPlugin= {major: 2, minor: 1, revision: 4, date: new Date(2011,2,16)};

var defaults={
	chkShowBreadcrumbs:		true,
	chkReorderBreadcrumbs:		true,
	chkCreateDefaultBreadcrumbs:	true,
	chkShowStartupBreadcrumbs:	false,
	chkBreadcrumbsReverse:		false,
	chkBreadcrumbsLimit:		false,
	txtBreadcrumbsLimit:		5,
	chkBreadcrumbsLimitOpenTiddlers:false,
	txtBreadcrumbsLimitOpenTiddlers:3,
	chkBreadcrumbsHideHomeLink:	false,
	chkBreadcrumbsSave:		false,
	txtBreadcrumbsHomeSeparator:	' | ',
	txtBreadcrumbsCrumbSeparator:	' > '
};
for (var id in defaults) if (config.options[id]===undefined)
	config.options[id]=defaults[id];

config.macros.breadcrumbs =  {
	crumbs: [], // the list of current breadcrumbs
	askMsg: "Save current breadcrumbs before clearing?\n"
		+"Press OK to save, or CANCEL to continue without saving.",
	saveMsg: 'Enter the name of a tiddler in which to save the current breadcrumbs',
	saveTitle: 'SavedBreadcrumbs',
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var area=createTiddlyElement(place,"span",null,"breadCrumbs",null);
		area.setAttribute("homeSep",params[0]||config.options.txtBreadcrumbsHomeSeparator);
		area.setAttribute("crumbSep",params[1]||config.options.txtBreadcrumbsCrumbSeparator);
		this.render(area);
	},
	add: function (title) {
		var thisCrumb = title;
		var ind = this.crumbs.indexOf(thisCrumb);
		if(ind === -1)
			this.crumbs.push(thisCrumb);
		else if (config.options.chkReorderBreadcrumbs)
			this.crumbs.push(this.crumbs.splice(ind,1)[0]); // reorder crumbs
		else
			this.crumbs=this.crumbs.slice(0,ind+1); // trim crumbs
		if (config.options.chkBreadcrumbsLimitOpenTiddlers)
			this.limitOpenTiddlers();
		this.refresh();
		return false;
	},
	getAreas: function() {
		var crumbAreas=[];
		// find all DIVs with classname=="breadCrumbs"
		var all=document.getElementsByTagName("*");
		for (var i=0; i<all.length; i++)
			try{ if (hasClass(all[i],"breadCrumbs")) crumbAreas.push(all[i]); } catch(e) {;}
		// or, find single DIV w/fixed ID (backward compatibility)
		var byID=document.getElementById("breadCrumbs")
		if (byID && !hasClass(byID,"breadCrumbs")) crumbAreas.push(byID);
		if (!crumbAreas.length && config.options.chkCreateDefaultBreadcrumbs) {
			// no crumbs display... create one
			var defaultArea = createTiddlyElement(null,"span",null,"breadCrumbs",null);
		 	defaultArea.style.display= "none";
			var targetArea= document.getElementById("tiddlerDisplay");
		 	targetArea.parentNode.insertBefore(defaultArea,targetArea);
			crumbAreas.push(defaultArea);
		}
		return crumbAreas;
	},
	refresh: function() {
		var crumbAreas=this.getAreas();
		for (var i=0; i<crumbAreas.length; i++) {
			crumbAreas[i].style.display = config.options.chkShowBreadcrumbs?"inline":"none";
			removeChildren(crumbAreas[i]);
			this.render(crumbAreas[i]);
		}
	},
	render: function(here) {
		var co=config.options; var out=""
		if (!co.chkBreadcrumbsHideHomeLink) {
			createTiddlyButton(here,"Home",null,this.home,"tiddlyLink tiddlyLinkExisting");
			out+=here.getAttribute("homeSep")||config.options.txtBreadcrumbsHomeSeparator;
		}
		for (c=0; c<this.crumbs.length; c++) // remove non-existing tiddlers from crumbs
			if (!store.tiddlerExists(this.crumbs[c]) && !store.isShadowTiddler(this.crumbs[c]))
				this.crumbs.splice(c,1);
		var count=this.crumbs.length;
		if (co.chkBreadcrumbsLimit && co.txtBreadcrumbsLimit<count) count=co.txtBreadcrumbsLimit;
		var list=[];
		for (c=this.crumbs.length-count; c<this.crumbs.length; c++) list.push('[['+this.crumbs[c]+']]');
		if (co.chkBreadcrumbsReverse) list.reverse();
		out+=list.join(here.getAttribute("crumbSep")||config.options.txtBreadcrumbsCrumbSeparator);
		wikify(out,here);
	},
	home: function() {
		var cmb=config.macros.breadcrumbs;
		if (config.options.chkBreadcrumbsSave && confirm(cmb.askMsg)) cmb.saveCrumbs();
		story.closeAllTiddlers(); restart();
		cmb.crumbs = []; var crumbAreas=cmb.getAreas();
		for (var i=0; i<crumbAreas.length; i++) crumbAreas[i].style.display = "none";
		return false;
	},
	saveCrumbs: function() {
		var tid=prompt(this.saveMsg,this.saveTitle); if (!tid||!tid.length) return; // cancelled by user
		var t=store.getTiddler(tid);
		if(t && !confirm(config.messages.overwriteWarning.format([tid]))) return;
		var who=config.options.txtUserName;
		var when=new Date();
		var text='[['+this.crumbs.join(']]\n[[')+']]';
		var tags=t?t.tags:[]; tags.pushUnique('story');
		var fields=t?t.fields:{};
		store.saveTiddler(tid,tid,text,who,when,tags,fields);
		story.displayTiddler(null,tid);
		story.refreshTiddler(tid,null,true);
		displayMessage(tid+' has been '+(t?'updated':'created'));
	},
	limitOpenTiddlers: function() {
		var limit=config.options.txtBreadcrumbsLimitOpenTiddlers; if (limit<1) limit=1;
		for (c=this.crumbs.length-1; c>=0; c--) {
			var tid=this.crumbs[c];
			var elem=story.getTiddler(tid);
			if (elem) { // tiddler is displayed
				if (limit <=0) { // display limit has been reached
					if (elem.getAttribute("dirty")=="true") { // tiddler is being edited
						var msg= "'"+tid+"' is currently being edited.\n\n"
							+"Press OK to save and close this tiddler\n"
							+"or press Cancel to leave it opened";
						if (confirm(msg)) {
							story.saveTiddler(tid);
							story.closeTiddler(tid);
						}
					}
					else story.closeTiddler(this.crumbs[c]);
				}
				limit--;
			}
		}
	}
};
//}}}
// // PreviousTiddler ('back') command and macro
//{{{
config.commands.previousTiddler = {
	text: 'back',
	tooltip: 'view the previous tiddler',
	handler: function(event,src,title) {
		var crumbs=config.macros.breadcrumbs.crumbs;
		if (crumbs.length<2) config.macros.breadcrumbs.home();
		else story.displayTiddler(story.findContainingTiddler(src),crumbs[crumbs.length-2]);
		return false;
	}
};
config.macros.previousTiddler= {
	label: 'back',
	prompt: 'view the previous tiddler',
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var label=params.shift(); if (!label) label=this.label;
		var prompt=params.shift(); if (!prompt) prompt=this.prompt;
		createTiddlyButton(place,label,prompt,function(ev){
			return config.commands.previousTiddler.handler(ev,this)
		});
	}
}
//}}}
// // HIJACKS
//{{{
// update crumbs when a tiddler is displayed
if (Story.prototype.breadCrumbs_coreDisplayTiddler==undefined)
	Story.prototype.breadCrumbs_coreDisplayTiddler=Story.prototype.displayTiddler;
Story.prototype.displayTiddler = function(srcElement,tiddler) {
	var title=(tiddler instanceof Tiddler)?tiddler.title:tiddler;
	this.breadCrumbs_coreDisplayTiddler.apply(this,arguments);
	if (!startingUp || config.options.chkShowStartupBreadcrumbs)
		config.macros.breadcrumbs.add(title);
}

// update crumbs when a tiddler is deleted
if (TiddlyWiki.prototype.breadCrumbs_coreRemoveTiddler==undefined)
	TiddlyWiki.prototype.breadCrumbs_coreRemoveTiddler=TiddlyWiki.prototype.removeTiddler;
TiddlyWiki.prototype.removeTiddler= function() {
	this.breadCrumbs_coreRemoveTiddler.apply(this,arguments);
	config.macros.breadcrumbs.refresh();
}
//}}}
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #666
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
| borderless |k
|>|!Business card(s)|
|<html><img src="./images/card_new.jpg" style="width: 340px; "/></html>|vertical-align:top;<html><img src="./images/card_old.jpg" style="width: 250px; "/></html>|
|~|vertical-align:top;<html><img src="./images/arrow_left.jpg" style="width: 16px; "/></html>New! (<html><img src="./images/arrow_up.jpg" style="width: 16px; "/></html>Old)|

|!Mail|!Instant messaging|!Misc|
|tom.vanlaerhoven<html><img src="./images/at.jpg" style="width: 12px; "/></html>uhasselt.be|[img[./images/msn.jpg]]msn: pakewak<html><img src="./images/at.jpg" style="width: 12px; "/></html>hotmail.com|[img[./images/linkedin.jpg]] [[LinkedIn|http://www.linkedin.com/profile?viewProfile=&key=6882634]] [img[./images/twitter.png]] [[Twitter|http://twitter.com/#!/tomvanlaerhoven]] |
|tom.vanlaerhoven<html><img src="./images/at.jpg" style="width: 12px; "/></html>gmail.com|<html><img src="./images/jabber.jpg" style="width: 12px; "/></html>jabber: pakewak<html><img src="./images/at.jpg" style="width: 12px; "/></html>amessage.be| ~PGP-key: [[tvanlaerhoven_publ.asc|./site-files/tvanlaerhoven_publ.asc]]|
[[2010 - 2011]]
[[2009 - 2010]]
[[2008 - 2009]]
[[2007 - 2008]]
[[2006 - 2007]]
[[2005 - 2006]]
[[2004 - 2005]]
[[2003 - 2004]]
[[2002 - 2003]]
[[2001 - 2002]]
[[Contact]]
!!Friendly (ex-)Colleagues
[[Kris Luyten| http://research.edm.uhasselt.be/~kris/]]
[[Fabian Di Fiore| http://research.edm.uhasselt.be/~fdifiore]]
[[Tom Mertens| http://research.edm.uhasselt.be/~tmertens/]]
[[Pieter Jorissen| http://research.edm.uhasselt.be/~pjorissen]]
[[Mark Gerrits| http://research.edm.uhasselt.be/~mgerrits]]
[[Yannick Francken| http://research.edm.uhasselt.be/~yfrancken]]
[[Peter Quax| http://research.edm.uhasselt.be/~pquax]]
[[Cedric Vanaken| http://research.edm.uhasselt.be/~cvanaken]]
[[William Van Haevre| http://research.edm.uhasselt.be/~wvanhaevre]]
[[Tom Haber| http://research.edm.uhasselt.be/~thaber]]
[[Bert De Decker| http://research.edm.uhasselt.be/~bdedecker]]
[[Erik Hubo| http://research.edm.uhasselt.be/~ehubo]]
[[Chris Hermans|http://research.edm.uhasselt.be/~chermans]]
[[Tom Cuypers|http://research.edm.uhasselt.be/~tcuypers]]

!!Misc
[[The Expertise Centre for Digital Media (EDM)|http://www.edm.uhasselt.be/]]
[[Hasselt University|http://www.uhasselt.be]]
[[Contact]]
[[Research]]
<<slider chkSliderCourses Courses 'Courses @ UHasselt »' 'Teaching & Related'>>
<<slider chkSliderProjects Projects 'Projects »' 'Small Projects'>>
[[Personal]]
[[Links]]
<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
</script>
<script type="text/javascript">
_uacct = "UA-384023-1";
urchinTracker();
</script>
A multitouch fingerpaint application, using an interactive surface based on FTIR technology (by Johannes Taelman).

Users can pick up the thick impasto paint by smearing fingers through the splats at the bottom of the canvas. All fingers share just one reservoir, representing the paint that adheres to the hand. Paint is exchanged between canvas and finger in two directions, enabling on-canvas color mixing.
The paint layer is represented by a height field and rendered using per-pixel bumpmapping.

[[Movie|./projects/multipaint/movies/fingerpaint.mov]] (mov, 3.1Mb).

<html><object width="425" height="350"> <param name="movie" value="http://www.youtube.com/watch?v=g6YPZuEGQLU&ap=%2526fmt%3D18"> </param> <embed src="http://www.youtube.com/v/g6YPZuEGQLU&ap=%2526fmt%3D18" type="application/x-shockwave-flash" width="425" height="350"> </embed> </object></html>

@ Tentoonstelling: [[De Krook|http://dekrook.be/]]
[img[./projects/fingerpaint/images/dekrook.jpg]] 

@ [[Creativity World Forum|http://www.creativityworldforum.be]]
[img[./projects/fingerpaint/images/creativityworldforum.jpg]] 
Type the text for 'New Tiddler'
!''~DIP-SHIT: Digital Infrared Painting with Fecal Excrement''

|''Abstract''|[img[./pubs/notquitepublished/images/teaser1.jpg]]|
|For thousands of years people have been fascinated by creating art with fecal excrement. Feces, pooh or doo-doo, forms a solid and easily available substance from either animal or human origin, and is perfectly suitable for creating aesthetically pleasing images. The activity of fecal art is very straightforward and sufficiently accessible so that users of all ages can practice it; yet, mastering it is complex enough that it remains challenging to even an expert.|~|
|In this work we present a natural poop-grasping interface using an interactive multi-touch table based on FTIR technology. Users can collaborate in their caca-craft activities, making use of all fingers to apply, shape and smear the bodily waste onto a large canvas. Furthermore, digital dung has the advantage that it can be comfortably configured, determining its color, sogginess and texture by merely a touch of a button, and without the unpleasant odors. |~|
|Results show that ~DIP-SHIT is able to reproduce the real-life experience of turd-sculpting, enriched with all advantages of the digital world. <html><a href='./pubs/notquitepublished/dip-shit_abstract.pdf'><img src='./images/pdficon.png'/></html>|~|

!''~DIP-SHIT Poster''

[img[./pubs/notquitepublished/images/dip-shit_poster.png]]
Last Updated: 07/08/11
<<writeBelStats>> Copyright © 2011
<<toggleSideBar "Toggle SideBar" "Toggle the options menu" hide>>
A Kdevelop 3.1 Qmake-based ~OpenGL application template for kdevappwizard.
Put this template in your Kdevelop wizard to create simple painless ~OpenGL applications. Picking code already added.

* [[template_qmakeopengl_v001.tar.gz|./projects/template_qmakeopengl_v001.tar.gz]] (15-08-03)
An implementation of a distributed cellular automaton ("game of life") using [[PVM|http://www.csm.ornl.gov/pvm/]]. It is very useless, except for testing a crowd-computation model.

* [[pvm_automaton_v001.tar.gz | ./projects/pvm_automaton_v001.tar.gz]] (18-08-03)

An implementation of a parallel merge sort algorithm using [[PVM|http://www.csm.ornl.gov/pvm/]]. It is very useless, except for testing a tree-computation model.

* [[pvm_mergesort_v001.tar.gz| ./projects/pvm_mergesort_v001.tar.gz]] (20-06-03)
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>

<div id='mainMenu'>
<div refresh='content' tiddler='MainMenu'></div>
<span id='noticeBoard' refresh='content' tiddler='NoticeBoard'></span>
</div>

<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
!!Travel Footprint

<html>
<img src="http://www.world66.com/myworld66/visitedCountries/worldmap?visited=USBRATBECZFRDEGRITLUNLSKCHUKVACNMYKRAU"><br/>
<a href="http://www.world66.com/myworld66">create your own visited country map</a>
</html>

!!Hard & Software
--Dell Inspiron 8500-- ~MacBook with --[[Gentoo|http://www.gentoo.org/]] Linux-- [[Mac OS X Leopard|http://www.apple.com/macosx/]].

!!Music
<html>
<a target="_blank" href="http://hypem.com/Pakewak?w=1" title="Hype Machine - Music Widget MP3 Blogs"><img border="0" alt="Hype Machine Music Widget MP3 Blogs" src="http://hypem.com/widget/v2/loved/Pakewak/10/hype.png%3Fbcol=FEF2EB&tcol=111111&lcol=F26A21" /></a>
</html>
[[Multitouch Fingerpaint]]
[[TaskBarTetris]]
[[XGL DTD]]
[[2D Navier-Stokes]]
[[distccWebView]]
[[PVM cellular automaton]]
[[PVM merge sort]]
[[Short introduction to PHP]]
[[OpenGL app template]]
[[Not quite published]]
/***
|''Name''|PubWriterPlugin|
|''Version''|0.1|
|''Author''|Tom Van Laerhoven|
|''Source''|[[Tom Van Laerhoven's page|http://research.uhasselt.be/tvanlaerhoven/#PubWriterPlugin]]|
|''License''|none|
|''~CoreVersion''|2.1|
|''Type''|macro|
|''Requires''|N/A|
|''Overrides''|N/A|
|''Description''|Formats and displays publication entries.|
!Notes
Made for own purposes.
!Usage
{{{
<<writePub pubId authors title trailing>>
}}}
!!Example
!Revision History
!!v0.1 (2008-02-02)
* initial release
!Code
***/

//{{{
config.macros.writePub = {
  handler: function (place, macroName, params, wikifier, paramString, tiddler)
  { 
	var pubCounter;
	var contents;

	var offset = 0;
	var pubId = params[offset];
	var authors = params[offset+1];
	var title = params[offset+2];
	var trailing = params[offset+3];
        var youtubeurl = params[offset+4];
        var contents = this.format(pubId, authors, title, trailing, youtubeurl);
	wikify(contents, place);
  },
  format: function(pubId, authors, title, trailing, youtubeurl)
  {
	var thumbCode = '[img[' + './pubs/' + pubId +'/thumb.png' + ']]';
	var authorCode = authors;
	var titleCode = "''\"" + title + "\"''";
	var trailingCode = trailing;
	var pdfCode = '<html><a href=\"pubs/' + pubId + '/' + pubId + '.pdf\"><img border=\"0\" src=\"./images/pdficon.png\" alt=\"PDF\"/></a></html>';
        var youTubeCode = '';
        if (youtubeurl)
            youTubeCode = ' <html><a href=\"' + youtubeurl + '\"><img border=\"0\" src=\"./images/youtube.png\" alt=\"YOUTUBE\"/></a></html>';
	var contents = '|' + thumbCode + '|' + authorCode + ', ' + titleCode + ', ' + trailingCode + '. ' + pdfCode + youTubeCode + '|';
	return contents;
  }
};
//}}}

!Publications & Related
!!2011
<<writePub 
	'vanlaerhoven11paintonglass' 
	'Tom Van Laerhoven, Fabian Di Fiore, William Van Haevre, Frank Van Reeth'
	'[[Paint-on-Glass Animation: The Fellowship of Digital Paint and Artisanal Control]]'
	'In Journal of Computer Animation and Virtual Worlds 2011; (Special Issue ~CASA2011), pages ??-??, Chengdu, China, May 2011'
        'http://www.youtube.com/watch?v=sfLFwLDaSK8'
>>
!!2010
<<writePub
       'claesen10videoprocessing'
       'Luc Claesen, Peter Vandoren, Tom Van Laerhoven, Andy Motten, Domien Nowicki, Tom De Weyer, Frank Van Reeth, Eddy Flerackers' 
       '[[Smart Camera SoC System for Interactive Real-Time Real-Brush based Digital Painting Systems]]'
       'In Proceedings of 18th IEEE/IFIP International Conference on VLSI and System-on-Chip , pp. 247 - 252, IEEE, Oct. 2010'
>>
!!2009
<<writePub
       'vandoren09fluidpaint'
       'Peter Vandoren, Luc Claesen, Tom Van Laerhoven, Johannes Taelman, Frank Van Reeth'
       '[[FluidPaint: an Interactive Digital Painting System using Real Wet Brushes]]'
       'Accepted for publication in Proceedings of IEEE Tabletop and Interactive Surfaces, 2009'
       'http://www.youtube.com/watch?v=fkl782OqqmA'
>>
!!2008
<<writePub 
	'vandoren08intupaint' 
	'Peter Vandoren, Tom Van Laerhoven, Luc Claesen, Johannes Taelman, Frank Van Reeth'
	'[[IntuPaint: Bridging the Gap between Physical and Digital Painting]]'
	'In Proceedings of IEEE Tabletop and Interactive Surfaces, 2008'
        'http://www.youtube.com/watch?v=n2IW4koT7Gw'
>><<writePub 
	'vanlaerhoven08handpainted' 
	'Tom Van Laerhoven, Fabian Di Fiore, Frank Van Reeth'
	'[[Hand-painted Animation with Intelligent Brushes]]'
	'In Journal of Computer Animation and Virtual Worlds 2008; 19 (Special Issue ~CASA2008), pages 365-374, Seoul, ~North-Korea, September 2008'
        'http://www.youtube.com/watch?v=LZ2UdzKLjWY'
>><<writePub 
	'vandoren08dipit' 
	'Peter Vandoren, Tom Van Laerhoven, Luc Claesen, Johannes Taelman, Fabian Di Fiore, Frank Van Reeth'
	'DIP-IT: Digital Infrared Painting on an Interactive Table'
	'CHI 2008 Extended Abstracts, ACM, pages -, 2008'>>
!!2007
<<writePub 
	'vanlaerhoven07brushup' 
	'Tom Van Laerhoven, Frank Van Reeth'
	'[[Brush Up Your Painting Skills]]: Realistic Brush Design for Interactive Painting Applications'
	'Computer Graphics International (~CGI2007), The Visual Computer, pages 763-771, 2007'
        'http://www.youtube.com/watch?v=W4suJCMdnsU'
>><<writePub
	'vanhaevre07fromdust' 
	'William Van Haevre, Tom Van Laerhoven, Fabian Di Fiore, Frank Van Reeth'
	'[[From Dust till Drawn]]: A Real-time Bidirectional Pastel Simulation'
	'Computer Graphics International (~CGI2007), The Visual Computer, pages 925-934, 2007'
        'http://www.youtube.com/watch?v=CNfAXjRQkr0'>>
!!2006
<<writePub 
	'vanlaerhoven06using' 
	'Tom Van Laerhoven, Geert Vanderhulst, Kris Luyten, Frank Van Reeth, Karin Coninx'
	'Using Device Federations to Enhance the Creative Process in a Distributed Interaction Environment'
	'Technical Reports ~TR-UH-EDM-0603, EDM/UH, Diepenbeek, Belgium, 2006'
>><<writePub
	'vanlaerhoven06phd' 
	'Tom Van Laerhoven'
	'An Extensible Simulation Framework Supporting Physically-based Interactive Painting'
	'~PhD, transnational University Limburg, 21 juni 2006'
>><<writePub
	'vanlaerhoven06proposition' 
	'Tom Van Laerhoven'
	'Usage of Device Federations can Enhance the Creative Process in a Distributed Interaction Environment'
	'Proposition, transnational University Limburg, 21 juni 2006'
>><<writePub
	'beets06introducing' 
	'Koen Beets, Tom Van Laerhoven, Frank Van Reeth'
	'Introducing Artistic Tools in an Interactive Paint System'
	"In Proceedings of WSCG'2006, Volume 14, pages 27-54, Pilzen, SK, January 2006">>
!!2005
<<writePub 
	'vanlaerhoven05introducing' 
	'Tom Van Laerhoven, Koen Beets, Frank Van Reeth'
	'Introducing Artistic Tools in an Interactive Paint System'
	'Technical Report ~TR-UH-EDM-0501, EDM/UH, Diepenbeek, Belgium, 2005'
>><<writePub
	'vanlaerhoven05realtime' 
	'Tom Van Laerhoven, Frank Van Reeth'
	'Real-time Simulation of Watery Paint'
	'In Journal of Computer Animation and Virtual Worlds, 16:3-4 (Special Issue ~CASA2005), pages 429-439, ~Hong-Kong, China, October 2005'
>><<writePub
	'vanlaerhoven05thinpaint' 
	'Tom Van Laerhoven, Frank Van Reeth'
	'Real-time Simulation of Thin Paint Media'
	'In Conference Abstracts and Applications of ACM SIGGRAPH 2005, Los Angeles, July 31-Aug 2, 2005'>>
!!2004
<<writePub 
	'vanlaerhoven04papermodel' 
	'Tom Van Laerhoven, Jori Liesenborgs, Frank Van Reeth'
	'A Paper Model for Real-time Watercolor Simulation'
	'Technical Report ~TR-LUC-EDM-0403, EDM/LUC, Diepenbeek, Belgium, 2004'
>><<writePub
	'vanlaerhoven04realtime' 
	'Tom Van Laerhoven, Jori Liesenborgs, Frank Van Reeth'
	'Real-time Watercolor Painting on a Distributed Paper Model'
	'In Proceedings of the Computer Graphics International Conference 2004, pages 640-643, Crete, Greece, June 16-19 2004'>>
!!2003
<<writePub 
	'vanlaerhoven03generalized' 
	'Tom Van Laerhoven, Chris Raymaekers, Frank Van Reeth'
	'Generalized Object Interactions in a ~Component-Based Simulation Environment'
	'In Journal of Winter Conference on Computer Graphics, pages 472-473, Pilsen, SK, February 3-7 2003'
>> <<writePub
	'luyten03runtime' 
	'Kris Luyten, Tom Van Laerhoven, Karin Coninx and Frank Van Reeth'
	'Runtime transformations for modal independent user interface migration'
	'In Interacting with Computers, pages 329-347, Elsevier Science, 2003'>>
!!2002
<<writePub 
	'vanlaerhoven02plab' 
	'Tom Van Laerhoven, Frank Van Reeth'
	'The pLab Project: An Extensible Architecture for ~Physically-Based Simulations'
	'In Proceedings of Spring Conference on Computer Graphics, pages 129-135, Budmerice, SL, April 24-27 2002'
>> <<writePub
	'luyten02specifying' 
	'Kris Luyten, Tom Van Laerhoven'
	'Specifying User Interfaces for Runtime Modal Independent Migration'
	"In Proceedings of CADUI'2002 International Conference on ~Computer-Aided Design of User Interfaces, pages 238-295, Valenciennes, FR, May 15-17 2002">>
!!2000
Tom Van Laerhoven "Physically Based Modelling - Rigid Body Dynamics", Master thesis, transnational University Limburg, 1999-2000.




A 10-page dutch introduction to PHP ([[.pdf|./projects/phpintro_2001.pdf]]) (03-02-01)
/***
|Name|SinglePageModePlugin|
|Source|http://www.TiddlyTools.com/#SinglePageModePlugin|
|Documentation|http://www.TiddlyTools.com/#SinglePageModePluginInfo|
|Version|2.9.7|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|Show tiddlers one at a time with automatic permalink, or always open tiddlers at top/bottom of page.|
This plugin allows you to configure TiddlyWiki to navigate more like a traditional multipage web site with only one tiddler displayed at a time.
!!!!!Documentation
>see [[SinglePageModePluginInfo]]
!!!!!Configuration
<<<
<<option chkSinglePageMode>> Display one tiddler at a time
><<option chkSinglePagePermalink>> Automatically permalink current tiddler
><<option chkSinglePageKeepFoldedTiddlers>> Don't close tiddlers that are folded
><<option chkSinglePageKeepEditedTiddlers>> Don't close tiddlers that are being edited
<<option chkTopOfPageMode>> Open tiddlers at the top of the page
<<option chkBottomOfPageMode>> Open tiddlers at the bottom of the page
<<option chkSinglePageAutoScroll>> Automatically scroll tiddler into view (if needed)

Notes:
* The "display one tiddler at a time" option can also be //temporarily// set/reset by including a 'paramifier' in the document URL: {{{#SPM:true}}} or {{{#SPM:false}}}.
* If more than one display mode is selected, 'one at a time' display takes precedence over both 'top' and 'bottom' settings, and if 'one at a time' setting is not used, 'top of page' takes precedence over 'bottom of page'.
* When using Apple's Safari browser, automatically setting the permalink causes an error and is disabled.
<<<
!!!!!Revisions
<<<
2010.11.30 2.9.7 use story.getTiddler()
2008.10.17 2.9.6 changed chkSinglePageAutoScroll default to false
| Please see [[SinglePageModePluginInfo]] for previous revision details |
2005.08.15 1.0.0 Initial Release.  Support for BACK/FORWARD buttons adapted from code developed by Clint Checketts.
<<<
!!!!!Code
***/
//{{{
version.extensions.SinglePageModePlugin= {major: 2, minor: 9, revision: 7, date: new Date(2010,11,30)};
//}}}
//{{{

config.options.chkSinglePageMode=true; 
config.options.chkSinglePagePermalink=true;
config.options.chkSinglePageAutoScroll=true;

config.paramifiers.SPM = { onstart: function(v) {
	config.options.chkSinglePageMode=eval(v);
	if (config.options.chkSinglePageMode && config.options.chkSinglePagePermalink && !config.browser.isSafari) {
		config.lastURL = window.location.hash;
		if (!config.SPMTimer) config.SPMTimer=window.setInterval(function() {checkLastURL();},1000);
	}
} };
//}}}
//{{{
if (config.options.chkSinglePageMode==undefined)
	config.options.chkSinglePageMode=false;
if (config.options.chkSinglePagePermalink==undefined)
	config.options.chkSinglePagePermalink=true;
if (config.options.chkSinglePageKeepFoldedTiddlers==undefined)
	config.options.chkSinglePageKeepFoldedTiddlers=false;
if (config.options.chkSinglePageKeepEditedTiddlers==undefined)
	config.options.chkSinglePageKeepEditedTiddlers=false;
if (config.options.chkTopOfPageMode==undefined)
	config.options.chkTopOfPageMode=false;
if (config.options.chkBottomOfPageMode==undefined)
	config.options.chkBottomOfPageMode=false;
if (config.options.chkSinglePageAutoScroll==undefined)
	config.options.chkSinglePageAutoScroll=false;
//}}}
//{{{
config.SPMTimer = 0;
config.lastURL = window.location.hash;
function checkLastURL()
{
	if (!config.options.chkSinglePageMode)
		{ window.clearInterval(config.SPMTimer); config.SPMTimer=0; return; }
	if (config.lastURL == window.location.hash) return; // no change in hash
	var tids=decodeURIComponent(window.location.hash.substr(1)).readBracketedList();
	if (tids.length==1) // permalink (single tiddler in URL)
		story.displayTiddler(null,tids[0]);
	else { // restore permaview or default view
		config.lastURL = window.location.hash;
		if (!tids.length) tids=store.getTiddlerText("DefaultTiddlers").readBracketedList();
		story.closeAllTiddlers();
		story.displayTiddlers(null,tids);
	}
}


if (Story.prototype.SPM_coreDisplayTiddler==undefined)
	Story.prototype.SPM_coreDisplayTiddler=Story.prototype.displayTiddler;
Story.prototype.displayTiddler = function(srcElement,tiddler,template,animate,slowly)
{
	var title=(tiddler instanceof Tiddler)?tiddler.title:tiddler;
	var tiddlerElem=story.getTiddler(title); // ==null unless tiddler is already displayed
	var opt=config.options;
	var single=opt.chkSinglePageMode && !startingUp;
	var top=opt.chkTopOfPageMode && !startingUp;
	var bottom=opt.chkBottomOfPageMode && !startingUp;
	if (single) {
		story.forEachTiddler(function(tid,elem) {
			// skip current tiddler and, optionally, tiddlers that are folded.
			if (	tid==title
				|| (opt.chkSinglePageKeepFoldedTiddlers && elem.getAttribute("folded")=="true"))
				return;
			// if a tiddler is being edited, ask before closing
			if (elem.getAttribute("dirty")=="true") {
				if (opt.chkSinglePageKeepEditedTiddlers) return;
				// if tiddler to be displayed is already shown, then leave active tiddler editor as is
				// (occurs when switching between view and edit modes)
				if (tiddlerElem) return;
				// otherwise, ask for permission
				var msg="'"+tid+"' is currently being edited.\n\n";
				msg+="Press OK to save and close this tiddler\nor press Cancel to leave it opened";
				if (!confirm(msg)) return; else story.saveTiddler(tid);
			}
			story.closeTiddler(tid);
		});
	}
	else if (top)
		arguments[0]=null;
	else if (bottom)
		arguments[0]="bottom";
	if (single && opt.chkSinglePagePermalink && !config.browser.isSafari) {
		window.location.hash = encodeURIComponent(String.encodeTiddlyLink(title));
		config.lastURL = window.location.hash;
		document.title = wikifyPlain("SiteTitle") + " - " + title;
		if (!config.SPMTimer) config.SPMTimer=window.setInterval(function() {checkLastURL();},1000);
	}
	if (tiddlerElem && tiddlerElem.getAttribute("dirty")=="true") { // editing... move tiddler without re-rendering
		var isTopTiddler=(tiddlerElem.previousSibling==null);
		if (!isTopTiddler && (single || top))
			tiddlerElem.parentNode.insertBefore(tiddlerElem,tiddlerElem.parentNode.firstChild);
		else if (bottom)
			tiddlerElem.parentNode.insertBefore(tiddlerElem,null);
		else this.SPM_coreDisplayTiddler.apply(this,arguments); // let CORE render tiddler
	} else
		this.SPM_coreDisplayTiddler.apply(this,arguments); // let CORE render tiddler
	var tiddlerElem=story.getTiddler(title);
	if (tiddlerElem&&opt.chkSinglePageAutoScroll) {
		// scroll to top of page or top of tiddler
		var isTopTiddler=(tiddlerElem.previousSibling==null);
		var yPos=isTopTiddler?0:ensureVisible(tiddlerElem);
		// if animating, defer scroll until after animation completes
		var delay=opt.chkAnimate?config.animDuration+10:0;
		setTimeout("window.scrollTo(0,"+yPos+")",delay); 
	}
}

if (Story.prototype.SPM_coreDisplayTiddlers==undefined)
	Story.prototype.SPM_coreDisplayTiddlers=Story.prototype.displayTiddlers;
Story.prototype.displayTiddlers = function() {
	// suspend single/top/bottom modes when showing multiple tiddlers
	var opt=config.options;
	var saveSPM=opt.chkSinglePageMode; opt.chkSinglePageMode=false;
	var saveTPM=opt.chkTopOfPageMode; opt.chkTopOfPageMode=false;
	var saveBPM=opt.chkBottomOfPageMode; opt.chkBottomOfPageMode=false;
	this.SPM_coreDisplayTiddlers.apply(this,arguments);
	opt.chkBottomOfPageMode=saveBPM;
	opt.chkTopOfPageMode=saveTPM;
	opt.chkSinglePageMode=saveSPM;
}
//}}}
/***
|Name|SinglePageModePluginInfo|
|Source|http://www.TiddlyTools.com/#SinglePageModePlugin|
|Documentation|http://www.TiddlyTools.com/#SinglePageModePluginInfo|
|Version|2.9.6|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|documentation|
|Description|Documentation for SinglePageModePlugin|
Normally, as you click on the links in TiddlyWiki, more and more tiddlers are displayed on the page. The order of this tiddler display depends upon when and where you have clicked. Some people like this non-linear method of reading the document, while others have reported that when many tiddlers have been opened, it can get somewhat confusing.  SinglePageModePlugin allows you to configure TiddlyWiki to navigate more like a traditional multipage web site with only one item displayed at a time.
!!!!!Usage
<<<
When the plugin is enabled, only one tiddler will be displayed at a time and the browser window's titlebar is updated to include the current tiddler title.  The browser's location URL is also updated with a 'permalink' for the current tiddler so that it is easier to create a browser 'bookmark' for the current tiddler.  Alternatively, even when displaying multiple tiddlers //is// permitted, you can still reduce the potential for confusion by forcing  tiddlers to always open at the top (or bottom) of the page instead of being displayed following the tiddler containing the link that was clicked.
<<<
!!!!!Configuration
<<<
<<option chkSinglePageMode>> Display one tiddler at a time
><<option chkSinglePagePermalink>> Automatically permalink current tiddler
><<option chkSinglePageKeepFoldedTiddlers>> Don't close tiddlers that are folded
><<option chkSinglePageKeepEditedTiddlers>> Don't close tiddlers that are being edited
<<option chkTopOfPageMode>> Open tiddlers at the top of the page
<<option chkBottomOfPageMode>> Open tiddlers at the bottom of the page
<<option chkSinglePageAutoScroll>> Automatically scroll tiddler into view (if needed)

Notes:
* {{block{
The "display one tiddler at a time" option can also be //temporarily// set/reset by including a 'paramifier' in the document URL: {{{#SPM:true}}} or {{{#SPM:false}}}. You can also use {{{SPM:expression}}}, where 'expression' is any javascript statement that evaluates to true or false.  This allows you to create hard-coded links in other documents that can selectively enable/disable the use of this option based on various programmatic conditions, such as the current username. For example, using
&nbsp;&nbsp;&nbsp;{{{#SPM:config.options.txtUserName!="SomeName"}}}
enables 'one tiddler at a time' display for all users //other than// "~SomeName")}}}
* If more than one display mode is selected, 'one at a time' display takes precedence over both 'top' and 'bottom' settings, and if 'one at a time' setting is not used, 'top of page' takes precedence over 'bottom of page'.
* When using Apple's Safari browser, automatically setting the permalink causes an error and is disabled.
<<<
!!!!!Revisions
<<<
2008.10.17 2.9.6 changed chkSinglePageAutoScroll default to false
2008.06.12 2.9.5 corrected 'scroll to top of page' logic in auto-scroll handling
2008.06.11 2.9.4 added chkSinglePageKeepEditedTiddlers option
2008.06.05 2.9.3 in displayTiddler(), bypass single/top/bottom mode handling if startingUp.  Allows multiple tiddlers to be displayed during startup processing (e.g., #story:DefaultTiddlers), even if single/top/bottom mode is enabled.
2008.04.18 2.9.2 in displayTiddler() and checkLastURL(), handling for Unicode in tiddler titles (remove explicit conversion between Unicode and UTF, as this is apparently done automatically by encode/decodeURIComponent, resulting in double-encoding!
2008.04.08 2.9.1 don't automatically add options to AdvancedOptions shadow tiddler
2008.04.02 2.9.0 in displayTiddler(), when single-page mode is in use and a tiddler is being edited, ask for permission to save-and-close that tiddler, instead of just leaving it open.
2008.03.29 2.8.3 in displayTiddler(), get title from tiddler object (if needed).  Fixes errors caused when calling function passes a tiddler *object* instead of a tiddler *title*
2008.03.14 2.8.2 in displayTiddler(), if editing specified tiddler, just move it to top/bottom of story *without* re-rendering (prevents discard of partial edits).
2008.03.06 2.8.1 in paramifier handler, start 'checkURL' timer if chkSinglePageMode is enabled
2008.03.06 2.8.0 added option, {{{config.options.chkSinglePageKeepFoldedTiddlers}}}, so folded tiddlers won't be closed when using single-page mode.  Also, in checkURL(), if hash is a ''permaview'' (e.g., "#foo bar baz"), then display multiple tiddlers rather than attempting to display "foo bar baz" as a single tiddler
2008.03.05 2.7.0 added support for "SPM:" URL paramifier
2008.03.01 2.6.0 in hijack of displayTiddler(), added 'title' argument to closeAllTiddlers() so that target tiddler isn't closed-and-reopened if it was already displayed.  Also, added config.options.chkSinglePageAutoScrolloption to bypass automatic 'scroll into view' logic (note: core still does it's own ensureVisible() handling)
2007.12.22 2.5.3 in checkLastURL(), use decodeURIComponent() instead of decodeURI so that tiddler titles with commas (and/or other punctuation) are correctly handled.
2007.10.26 2.5.2 documentation cleanup
2007.10.08 2.5.1 in displayTiddler(), when using single-page or top-of-page mode, scrollTo(0,0) to ensure that page header is in view.
2007.09.13 2.5.0 for TPM/BPM modes, don't force tiddler to redisplay if already shown.  Allows transition between view/edit or collapsed/view templates, without repositioning displayed tiddler.
2007.09.12 2.4.0 added option to disable automatic permalink feature.  Also, Safari is now excluded from permalinking action to avoid bug where tiddlers don't display after hash is updated.
2007.03.03 2.3.1 fix typo when adding BPM option to AdvancedOptions (prevented checkbox from appearing)
2007.03.03 2.3.0 added support for BottomOfPageMode (BPM) based on request from DaveGarbutt
2007.02.06 2.2.3 in Story.prototype.displayTiddler(), use convertUnicodeToUTF8() for correct I18N string handling when creating URL hash string from tiddler title (based on bug report from BidiX)
2007.01.08 2.2.2 use apply() to invoke hijacked core functions
2006.07.04 2.2.1 in hijack for displayTiddlers(), suspend TPM as well as SPM so that DefaultTiddlers displays in the correct order.
2006.06.01 2.2.0 added chkTopOfPageMode (TPM) handling
2006.02.04 2.1.1 moved global variable declarations to config.* to avoid FireFox 1.5.0.1 crash bug when assigning to globals
2005.12.27 2.1.0 hijack displayTiddlers() so that SPM can be suspended during startup while displaying the DefaultTiddlers (or #hash list).  Also, corrected initialization for undefined SPM flag to "false", so default behavior is to display multiple tiddlers
2005.12.27 2.0.0 Update for TW2.0
2005.11.24 1.1.2 When the back and forward buttons are used, the page now changes to match the URL.  Based on code added by Clint Checketts
2005.10.14 1.1.1 permalink creation now calls encodeTiddlyLink() to handle tiddler titles with spaces in them
2005.10.14 1.1.0 added automatic setting of window title and location bar ('auto-permalink').  feature suggestion by David Dickens.
2005.10.09 1.0.1 combined documentation and code in a single tiddler
2005.08.15 1.0.0 Initial Release
<<<
personal web notebook
Tom Van Laerhoven
/*{{{*/

.breadCrumbs { margin-top: 2px; }

.breadCrumbs a {
	color: #000;
	font-weight: normal;
	background-color: #eee; 
	border: 1px solid #BFB6B3;
	border-bottom: 0px;
	padding: 2px;
	margin-bottom: 0;
}

.breadCrumbs a:hover {
	background-color: #ddd;
}

/*}}}*/

/*{{{*/

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

#mainMenu {
 float:left;
 margin-left:1em;
 display:inline;
 text-align:left;
 width:15em;
 font-size:1.1em;
}

#mainMenu a { color: [[ColorPalette::PrimaryMid]]; }
#mainMenu a:hover { color: [[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]]; }
#mainMenu a:active { color: [[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]]; }

#mainMenu .sliderPanel a {
        		color: #999999;
			margin-left: 1em;
			padding: 0em;
			font-size: 0.9em;
		}

#noticeBoard {
       font-size: 0.9em; 
       color:#999; 
       position:relative;
       display:block;
       background:#fff; 
       clear: both;
       width: 11em;
       margin-right:0.5em; 
       margin-top:60px; 
       padding:5px; 
       border-bottom: 1px dotted #CCC; 
       border-top: 1px dotted #CCC;
}

#tiddlerDisplay { border: 1px solid #eee; margin-top: 0; }

.viewer .button, .editorFooter .button{
	color: #666;
	border: 1px solid #CC6714;
}

.viewer table {
	border: 1px solid #fff;
}

.viewer tr,
.viewer td {
	border: 1px solid #fff;
	vertical-align: top;
}

.viewer table.borderless,
.viewer table.borderless * {
	border-style: hidden;
}

.viewer th, thead td {
	background: #DDDDDD;
	border: 4px solid #fff;
        color: #000;
        font-weight: bold;
        text-align: left;
        padding: 0em 0em 0em 0.5em;
}
.viewer pre {
	border: 1px solid #948979;
	background: #f5f5f5;
}

/*}}}*/
config.options.chkSinglePageMode=true; 
TaskBarTetris is Tetris in the Taskbar! 
After opening a large number of windows, the icons in their taskbar buttons are used to create the playing field. Sounds useless? It is.

Watch the [[movie|./projects/taskbartetris/movies/taskbartetris.wmv]] (wmv, 1.5Mb).

[img[./projects/taskbartetris/images/tbt1.jpg]]

<html><object width="425" height="350"> <param name="movie" value="http://www.youtube.com/v/KlEl7iDpF08"> </param> <embed src="http://www.youtube.com/v/KlEl7iDpF08" type="application/x-shockwave-flash" width="425" height="350"> </embed> </object></html>
/%
!info
|Name|ToggleBreadcrumbs|
|Source|http://www.TiddlyTools.com/#ToggleBreadcrumbs|
|Version|2.0.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|transclusion|
|Description|enable/disable display of breadcrumbs (uses BreadcrumbsPlugin)|
Usage
<<<
{{{
<<tiddler ToggleBreadcrumbs>>
<<tiddler ToggleBreadcrumbs with: label tip>>
}}}
<<<
Example
<<<
{{{<<tiddler ToggleBreadcrumbs>>}}}
<<tiddler ToggleBreadcrumbs##show with: "show breadcrumbs">>
<<<
!end
!show
<<tiddler {{
	if (config.options.chkShowBreadcrumbs===undefined) config.options.chkShowBreadcrumbs=true;
'';}}>><<option chkShowBreadcrumbs>><<tiddler {{
	var chk=place.lastChild;
	if (!chk.coreOnChange) { // only once
		chk.coreOnChange=chk.onchange;
		chk.onchange=function() {
			if (this.coreOnChange) this.coreOnChange.apply(this,arguments);
			this.checked=config.options.chkShowBreadcrumbs;
			if (config.macros.breadcrumbs) config.macros.breadcrumbs.refresh();
		};
	}
'';}}>> $1
!end

%/<<tiddler {{var src='ToggleBreadcrumbs'; src+(tiddler&&tiddler.title==src?'##info':'##show');}}
with:	{{'$1'!='$'+'1'?'$1':'show breadcrumbs'}}
	{{'$2'!='$'+'2'?'$2':'toggle breadcrumbs display'}}>>
/***

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

!Demo
<<toggleSideBar "Toggle Sidebar">>

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

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

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

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

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

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

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

     return false;
}

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

//}}}
/***
|''Name''|WebStatsPlugin|
|''Version''|0.1|
|''Author''|Tom Van Laerhoven|
|''Source''|[[Tom Van Laerhoven's page|http://research.uhasselt.be/tvanlaerhoven/#WebStatsPlugin]]|
|''License''|none|
|''~CoreVersion''|2.1|
|''Type''|macro|
|''Requires''|N/A|
|''Overrides''|N/A|
|''Description''|Includes code for webstat tools.|
!Notes
Made for own purposes.
!Usage
{{{
<<writeBelStats>>
}}}
!!Example
!Revision History
!!v0.1 (2008-02-02)
* initial release
!Code
***/

//{{{
config.macros.writeBelStats = {
  handler: function (place, macroName, params, wikifier, paramString, tiddler)
  { 
		var contents ="";

		d=document;
                col="";scr=0;b=navigator.appName;
                scr=screen.width+"*"+screen.height;
                ref=parent==self ? escape(window.document.referrer) : escape(top.document.referrer);
                pag=escape(document.URL);
                if (b != "Netscape") {col=screen.colorDepth}
               		else {col=screen.pixelDepth}
                if(col=="undefined")
		{
			col="";
		}
		contents += "<html>";
                contents += "<a href=http://www.belstat.be/viewstat.asp?UserID=pakewak&lang=en target=_blank><img border=0 src=\"http://www.belstat.be/regstat.aspx?";
                contents += "UserID=pakewak&BColor=&refer=" + ref + "&pag=" + pag + "&b=" + b + "&col=" + col + "&scr=" + scr;
                contents += "\" align=center width=16 height=16 alt=\"Monitored&nbsp;by&nbsp;BelStat&nbsp;-&nbsp;Your&nbsp;Site&nbsp;Counts\"><\/a>";
		contents += "</html>";

		wikify(contents, place);
  }
};
//}}}

A [[DTD|./projects/xgl/xgl_120503.dtd]] (12-05-03) of the XGL standard, based upon the official XGL specifications. An older version (14-07-01) can also be found on the [[XML cover pages|http://xml.coverpages.org/XGL-DTD-200103.txt]].

Example XGL files, taken from the [[XGL specs page|http://www.xglspec.org/]], and patched to meet the DTD requirements:

[[Two Green Cubes XGL|./projects/xgl/greencubes.xgl]]
[[A Bee XGL|./projects/xgl/bee.xgl]]
[[A Legoman XGL|./projects/xgl/legoman.xgl]]
A small cgi script that probes a list of [[distcc|http://distcc.samba.org/]] daemons. The output is a webpage containing up/down status information for each host.

[img[./projects/distccwebview/distccwebview_v002.jpg]]

*[[distccwebview_v003.tar.gz|./projects/distccwebview/distccwebview_v003.tar.gz]] (02-06-08)
**[[ChangeLog|./projects/distccwebview/ChangeLog_v003]]
*[[distccwebview_v002.tar.gz|./projects/distccwebview/distccwebview_v002.tar.gz]] (08-15-03)
**[[ChangeLog|./projects/distccwebview/ChangeLog_v002]]
*[[distccwebview_v001.tar.gz|./projects/distccwebview/distccwebview_v001.tar.gz]] (07-21-03)
config.options.chkSinglePageMode=true;