The homepage of Marcel Huibers is loading ...

Requires Javascript.
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
<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>>
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
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]]
<div class='header' role='banner' 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 class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
<div id='mainMenu' role='navigation' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' role='navigation' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' role='complementary' refresh='content' force='true' tiddler='SideBarTabs'></div>
<div id='displayArea' role='main'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
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]];
	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 where print preview displays the noscript content */
<div class='toolbar' role='navigation' 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>
The process of an actor re-recording lines they spoke during filming that must be replaced to improve audio quality or reflect [[dialogue|Dialogue Editing]] changes.
This process is called automated dialogue replacement, or ADR for short.
See also [[Lip Sync]] and [[Dubbing]].
Audio mixing is a process, by which a multitude of recorded sounds are combined into one or more channels.
In the process, the source signals' level, frequency content, dynamics and panoramic position are commonly being manipulated and effects such as reverb might be added.

The process takes place in a studio (or a theater) once the final cut is produced. Normally the engineer will mix 4 main elements:
*speech ([[dialogue|Dialogue Editing]], [[ADR]], [[Voice-Over]], etc.)
*''ambience'' (or atmosphere)
*[[sound effects|Sound Effects]]
*[[music|Film Score]]
Audio mixing is the process by which a multitude of recorded sounds are combined into one or more channels, most commonly two-channel stereo. In the process, the source signals' level, frequency content, dynamics and panoramic position are commonly being manipulated and effects such as reverb might be added. This practical, aesthetic or otherwise creative treatment is done in order to produce an elevated mix that is more appealing to listeners.

Audio mixing is done in studios as part of an album or single making. The mixing stage often follows the multi-track recording stage and the final mixes are normally submitted to a mastering engineer. The process is generally carried out by a mixing engineer (a mixer), though sometimes it is the musical producer who mixes the recorded material.
|''Description:''|Moves the sidebar to the backstage, as suggested at|
|''CodeRepository:''|n/a |
|''Comments:''|Please make comments at |
|''License''|[[BSD License|]] |


if(!version.extensions.BackstageSidebarPlugin) {
version.extensions.BackstageSidebarPlugin = {installed:true};

config.tasks.sidebar = {
	text: "sidebar",
	tooltip: "sidebar options",
	content: "<<tiddler SideBarOptions>><<tiddler SideBarTabz>>"

config.macros.BackstageSidebarPlugin = {

config.macros.BackstageSidebarPlugin.init = function() {
	var tiddler = this.tiddler;

} //# end of 'install only once'
!!!Adjustments to Backstage appearances
if (config.tasks!=undefined) { // TW2.2B3 or above

// hide "backstage/close" text, use alternative glyphs"";
config.messages.backstage.close.text="";["\u00ab","\u00ab"]; // left double-angle quote (&laquo;)["\u00bb","\u00bb"]; // right double-angle quote (&raquo;)
//["\u25bc","\u25bc"]; // down triangle

// adjust backstage panel styles
	#backstagePanel \
		{ background:#eee !important; padding:.5em; \
		border:2px solid; border-width-top:0px; \
		-moz-border-radius-bottomleft:1em; -moz-border-radius-bottomright:1em} \
		-webkit-border-bottom-left-radius:1em; -webkit-border-bottom-right-radius:1em} \
	#backstageButton \
		{ font-size:9pt; } \
	#backstageArea \
		{ font-size:7pt; } \

// Hijack backstage.init() to add "mouseover" class to backstage button
backstage.init=function() {
	var btn=document.getElementById("backstageShow");
	if (btn && (addClass instanceof Function)) addClass(btn,"mouseover");

} // end if (config.tasks)
Background: #fff
Foreground: #255F46
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #ed6f03
SecondaryDark: #841
TertiaryPale: #ffffef
TertiaryLight: #ccc
TertiaryMid: #c0d8d3
TertiaryDark: #666
Error: #f88
[img[Sound Development|resources/images/logo.png]]

e-mail: <<linkTo email ? info at huiberssound dot nl>>

[img[Go to my LinkedIn page...|resources/images/linkedinlogo.gif][]]&emsp;[img[Go to my IMDb page...|resources/images/imdblogo.gif][]]&emsp;[img[RSS Feed|resources/images/rsslogo.gif][]]
<script>config.options.txtSelectedMenuItem = "8";refreshDisplay();</script>
<html><iframe src ="" width="40px" frameborder="0" align="center
" height="40px"></iframe></html>
The dialogue editor assembles, synchronizes and edits all the dialogue in a film or television production.
Usually they will use the production tracks: the sound that was recorded on the set. They will smooth it out in terms of volume and equalization.

If any of the production tracks are unusable they can be replaced by either:
#alternate production tracks recorded on set ([[wilds|Wild Track]]) 
#[[ADR]], which is recorded after the shoot, with the actors watching their performances in a sound studio and rerecording the lines [[lip sync|Lip Sync]].

Large productions may have an ADR editor working under the dialogue editor, but the positions are often combined.
The ADR editor or dialogue editor also work with the [[walla group|Walla Group]], providing the background chatter noise.
Once the dialogue editor has completed the dialogue track, the [[re-recording mixer|Re-Recording Mixer]] then mixes it with the [[music|Film Score]] and [[sound effects|Sound Effects]].
Sound that comes from within the story space, such as dialogue and sound effects.
See also [[Non-Diegetic Sound]].
|Author|Eric Shulman - ELS Design Studios|
|License| <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|]]|
|Overrides|Tiddler.prototype.autoLinkWikiWords, 'wikiLink' formatter|
|Description|selectively disable TiddlyWiki's automatic ~WikiWord linking behavior|
This plugin allows you to disable TiddlyWiki's automatic ~WikiWord linking behavior, so that WikiWords embedded in tiddler content will be rendered as regular text, instead of being automatically converted to tiddler links.  To create a tiddler link when automatic linking is disabled, you must enclose the link text within {{{[[...]]}}}.
You can block automatic WikiWord linking behavior for any specific tiddler by ''tagging it with<<tag excludeWikiWords>>'' (see configuration below) or, check a plugin option to disable automatic WikiWord links to non-existing tiddler titles, while still linking WikiWords that correspond to existing tiddlers titles or shadow tiddler titles.  You can also block specific selected WikiWords from being automatically linked by listing them in [[DisableWikiLinksList]] (see configuration below), separated by whitespace.  This tiddler is optional and, when present, causes the listed words to always be excluded, even if automatic linking of other WikiWords is being permitted.  

Note: WikiWords contained in default ''shadow'' tiddlers will be automatically linked unless you select an additional checkbox option lets you disable these automatic links as well, though this is not recommended, since it can make it more difficult to access some TiddlyWiki standard default content (such as AdvancedOptions or SideBarTabs)
<<option chkDisableWikiLinks>> Disable ALL automatic WikiWord tiddler links
<<option chkAllowLinksFromShadowTiddlers>> ... except for WikiWords //contained in// shadow tiddlers
<<option chkDisableNonExistingWikiLinks>> Disable automatic WikiWord links for non-existing tiddlers
Disable automatic WikiWord links for words listed in: <<option txtDisableWikiLinksList>>
Disable automatic WikiWord links for tiddlers tagged with: <<option txtDisableWikiLinksTag>>
2008.07.22 [1.6.0] hijack tiddler changed() method to filter disabled wiki words from internal links[] array (so they won't appear in the missing tiddlers list)
2007.06.09 [1.5.0] added configurable txtDisableWikiLinksTag (default value: "excludeWikiWords") to allows selective disabling of automatic WikiWord links for any tiddler tagged with that value.
2006.12.31 [1.4.0] in formatter, test for chkDisableNonExistingWikiLinks
2006.12.09 [1.3.0] in formatter, test for excluded wiki words specified in DisableWikiLinksList
2006.12.09 [1.2.2] fix logic in autoLinkWikiWords() (was allowing links TO shadow tiddlers, even when chkDisableWikiLinks is TRUE).  
2006.12.09 [1.2.1] revised logic for handling links in shadow content
2006.12.08 [1.2.0] added hijack of Tiddler.prototype.autoLinkWikiWords so regular (non-bracketed) WikiWords won't be added to the missing list
2006.05.24 [1.1.0] added option to NOT bypass automatic wikiword links when displaying default shadow content (default is to auto-link shadow content)
2006.02.05 [1.0.1] wrapped wikifier hijack in init function to eliminate globals and avoid FireFox crash bug when referencing globals
2005.12.09 [1.0.0] initial release
version.extensions.DisableWikiLinksPlugin= {major: 1, minor: 6, revision: 0, date: new Date(2008,7,22)};

if (config.options.chkDisableNonExistingWikiLinks==undefined) config.options.chkDisableNonExistingWikiLinks= false;
if (config.options.chkDisableWikiLinks==undefined) config.options.chkDisableWikiLinks=false;
if (config.options.txtDisableWikiLinksList==undefined) config.options.txtDisableWikiLinksList="DisableWikiLinksList";
if (config.options.chkAllowLinksFromShadowTiddlers==undefined) config.options.chkAllowLinksFromShadowTiddlers=true;
if (config.options.txtDisableWikiLinksTag==undefined) config.options.txtDisableWikiLinksTag="excludeWikiWords";

// find the formatter for wikiLink and replace handler with 'pass-thru' rendering
function initDisableWikiLinksFormatter() {
	for (var i=0; i<config.formatters.length && config.formatters[i].name!="wikiLink"; i++);
	config.formatters[i].handler=function(w) {
		// supress any leading "~" (if present)
		var skip=(w.matchText.substr(0,1)==config.textPrimitives.unWikiLink)?1:0;
		var title=w.matchText.substr(skip);
		var exists=store.tiddlerExists(title);
		var inShadow=w.tiddler && store.isShadowTiddler(w.tiddler.title);
		// check for excluded Tiddler
		if (w.tiddler && w.tiddler.isTagged(config.options.txtDisableWikiLinksTag))
			{ w.outputText(w.output,w.matchStart+skip,w.nextMatch); return; }
		// check for specific excluded wiki words
		var t=store.getTiddlerText(config.options.txtDisableWikiLinksList);
		if (t && t.length && t.indexOf(w.matchText)!=-1)
			{ w.outputText(w.output,w.matchStart+skip,w.nextMatch); return; }
		// if not disabling links from shadows (default setting)
		if (config.options.chkAllowLinksFromShadowTiddlers && inShadow)
			return this.coreHandler(w);
		// check for non-existing non-shadow tiddler
		if (config.options.chkDisableNonExistingWikiLinks && !exists)
			{ w.outputText(w.output,w.matchStart+skip,w.nextMatch); return; }
		// if not enabled, just do standard WikiWord link formatting
		if (!config.options.chkDisableWikiLinks)
			return this.coreHandler(w);
		// just return text without linking

Tiddler.prototype.coreAutoLinkWikiWords = Tiddler.prototype.autoLinkWikiWords;
Tiddler.prototype.autoLinkWikiWords = function()
	// if all automatic links are not disabled, just return results from core function
	if (!config.options.chkDisableWikiLinks)
		return this.coreAutoLinkWikiWords.apply(this,arguments);
	return false;

Tiddler.prototype.disableWikiLinks_changed = Tiddler.prototype.changed;
Tiddler.prototype.changed = function()
	// remove excluded wiki words from links array
	var t=store.getTiddlerText(config.options.txtDisableWikiLinksList,"").readBracketedList();
	if (t.length) for (var i=0; i<t.length; i++)
		if (this.links.contains(t[i]))
In film-making, dubbing or looping is the process of recording or replacing voices for a motion picture.
The term most commonly refers to voices recorded that do not belong to the original actors and speak in a different language.
Dubbing is also a term commonly used for [[automated dialogue replacement|ADR]].
See also [[Lip Sync]].
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='editor' macro='edit title'></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>
// //''Name:'' EmailLink
// //''Author:'' AlanHecht
// //''Type:'' [[Macro|Macros]]

// //''Description:'' email lets you list a "email" address without displaying it as readable text. This helps prevent your email address from being harvested by search engines and other web crawlers that read your page's contents. Using email, you type in the words "at" and "dot" instead of the punctuation symbols and add spaces inbetween words to disguise your address. However, email will display your email address in a web browser so that humans can read it. And email turns the address into a hyperlink that can be clicked to send you an instant email.

// //''Syntax:'' << {{{email yourname at yourdomain dot com "?optional parameters"}}} >>
// //Example 1: <<linkTo email ? sample at nowhere dot com>> (standard)
// //Example 2: <<linkTo email ? sample at nowhere dot com "?subject=Submission&body=Type your message here.">> (with optional parameters)

// //''Directions:'' <<tiddler MacroDirections>>

// //''Notes:'' You can use the optional email parameters to stipulate a subject or message body for the message. Most (not all) email clients will use this information to construct the email message.

// //''Related Links:'' none

// //''Revision History:''
// // v0.1.0 (20 July 2005): initial release
// // v0.1.1 (22 July 2005): renamed the macro from "mailto" to "email" to further thwart email harvesters.

// //''Code section:''
version.extensions.linkTo = {major: 0, minor: 1, revision: 1, date: new Date("Jul 22, 2005")};
config.macros.linkTo = {}
config.macros.linkTo.handler = function(place,macroName,params)
var temp = params.join(" ");
var data = temp.split("?");
var protocol =  data[0].replace(/\s/g,"");
if(protocol=='email') protocol = "ma"+"il"+"to:";
else if(protocol=='phone') protocol = "s"+"ip:";
var recipient = data[1];
recipient = recipient.replace(" at ","@").replace(" dot ",".");
recipient = recipient.replace(/\s/g,"");
var optional = data[2] ? "?" + data[2] : "";
var theLink = createExternalLink(place,protocol+recipient+optional);
''Film editing'' is the process of selecting and joining together shots, connecting the resulting sequences, and ultimately creating a finished motion picture.

It is an art of [[storytelling|Storytelling]].

Film editing is the only art that is unique to cinema, separating film-making from other art forms that preceded it (such as photography, theater, dance, writing, and directing), although there are close parallels to the editing process in other art forms like poetry or novel writing. Film editing is often referred to as the &ldquo;invisible art&rdquo; because when it is well-practiced, the viewer can become so engaged that he or she is not even aware of the editor's work.
A film score is a broad term referring to the music in a film, which is generally categorically separated from songs used within a film.

The term [[soundtrack|Soundtrack]] is often confused with film score, though a soundtrack may also include songs featured in the film as well as previously released music by other artists, while the score does not.

A score is written specifically to accompany a film, by the original film's composer(s).
The &ldquo;foley artist&rdquo; on a film crew is the person who creates many of the natural, everyday [[sound effects|Sound Effects]] in a film. 
Before the session, a project will be cued, with notes kept about what sounds need to be created during the foley session. Often, the project will have a sound supervisor who will dictate what sounds need to be covered in a foley session and what needs to be created by special (audio) effects, which is generally left to the [[sound designer|Sound Design]].
Sound effects and foley are added during [[post-production|Post-Production Info]] to [[dialogue|Dialogue Editing]] and real effects that were picked up by microphones on-set.
Sometimes (especially in the case of cartoons, many Italian films, and almost all Bollywood films) there is no sound recorded on-location, and all the sounds need to be added by the foley artist and sound designer, and [[dubber|ADR]].

The term Foley artist is named after //Jack Foley//, one of the earliest and best-known Hollywood practitioners of the art. Foley began his career in the film industry as a stand-in and screenwriter during the silent era, and later helped Universal make the transition from silent movies to talkies.
|Author|Eric Shulman|
|License| <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|]]|
|Description|clicking an external link opens an IFRAME following the link instead of opening a new tab/window|
This plugin causes clicks on external links to be rendered as inline frames (~IFRAMEs) instead of opening new browser tabs/windows.
Use standard TiddlyWiki external link syntax into your tiddler content. If {{{chkFramedLinks}}} is enabled or the tiddler is tagged with 'framedLinks' (see Configuration), then whenever you click the external link an IFRAME will be dynamically added to the content.  Clicking on the link again removes the IFRAME.  Hold down any modifier (shift, control, or alt) while clicking a link ''temporarily'' bypasses the IFRAME handling and use the standard link handling behavior.
<<option chkFramedLinks>> display inline frames for all external links
&nbsp; &nbsp; {{{<<option chkFramedLinks>>}}}
<<option chkFramedLinksTag>> display inline frames for external links in tiddlers tagged with: <<option txtFramedLinksTag>> 
&nbsp; &nbsp; {{{<<option chkFramedLinksTag>> <<option txtFramedLinksTag>>}}}
IFRAME size (CSS units: %, em, px, cm, in) - width: <<option txtFrameWidth>> height: <<option txtFrameHeight>>
&nbsp; &nbsp; {{{<<option txtFrameWidth>> <<option txtFrameHeight>>}}}
Try these links:
2008.11.14 [1.1.1] fixed handling for external links embedded in //shadow// tiddlers
2008.09.13 [1.1.0] added support to selectively enable embedded IFRAMEs if the containing tiddler is tagged with 'framedLinks'
2007.11.29 [1.0.5] added slider animation and improved CSS handling for IFRAME height/width to maximize display area
2007.11.29 [1.0.0] initial release
version.extensions.FramedLinksPlugin= {major: 1, minor: 1, revision: 1, date: new Date(2008,11,14)};

var co=config.options; // abbreviation
if (co.chkFramedLinks==undefined) co.chkFramedLinks=false;
if (co.chkFramedLinksTag==undefined) co.chkFramedLinksTag=true;
if (co.txtFramedLinksTag==undefined) co.txtFramedLinksTag="framedLinks";
if (co.txtFrameWidth==undefined) co.txtFrameWidth="100%";
if (co.txtFrameHeight==undefined) co.txtFrameHeight="80%";

	var link=this.framedLinks_createExternalLink.apply(this,arguments);
	link.onclick=function(ev) { var e=ev?ev:window.event;
		var co=config.options; // abbreviation
		var here=story.findContainingTiddler(this);
		if (here) var tid=store.getTiddler(here.getAttribute("tiddler"));
		var enabled=co.chkFramedLinks || co.chkFramedLinksTag && tid && tid.isTagged(co.txtFramedLinksTag);
		if (!enabled || e.ctrlKey || e.shiftKey || e.altKey) return; // BYPASS
		var p=this.parentNode; 
		var f=this.nextSibling?this.nextSibling.firstChild:null; // get the IFRAME... maybe...
		var w=co.txtFrameWidth; if (!w || !w.length) w="100%";
		var h=co.txtFrameHeight; if (!h || !h.length) h="80%";
		if (h.indexOf("%")) h=(findWindowHeight()*h.replace(/%/,"")/100)+"px"; // calc height as % of window
		var showing=f && f.nodeName.toUpperCase()=="IFRAME"; // does IFRAME really exist?
		var stretchCell=p.nodeName.toUpperCase()=="TD" && w.indexOf("%")!=-1 && w.replace(/%/,"")>=100;
		if (!showing) { // create an iframe"block"; // force IFRAME onto line following link
			if (stretchCell) { p.setAttribute("savedWidth",;"100%"; } // adjust TD so IFRAME stretches
			var wrapper=createTiddlyElement(null,"span"); // wrapper for slider animation
			wrapper.setAttribute("url",this.href); // for async loading of frame after animation completes
			var f=createTiddlyElement(wrapper,"iframe"); // create IFRAME"#fff";;;
			function loadURL(wrapper) { var f=wrapper.firstChild; var url=wrapper.getAttribute("url");
				var d=f.contentDocument?f.contentDocument:(f.contentWindow?f.contentWindow.document:f.document);; d.writeln("<html>connecting to "+url+"</html>"); d.close();
				try { f.src=url; } // if the iframe can't handle the href
				catch(e) { alert(e.description?e.description:e.toString()); } // ... then report the error
			if (!co.chkAnimate) loadURL(wrapper);
			else {
				var morph=new Slider(wrapper,true);
				morph.callback=loadURL;{style: 'width', start: 0, end: 100, template: '%0%'});
		} else { // remove iframe"inline"; // restore link style
			if (stretchCell)"savedWidth"); // restore previous width of TD
			if (!co.chkAnimate) p.removeChild(f.parentNode);
			else {
				var morph=new Slider(f.parentNode,false,false,"all");{style: 'width', start: 100, end: 0, template: '%0%'});
		e.cancelBubble=true; if (e.stopPropagation) e.stopPropagation(); return false;
	return link;
Front of house (abbreviated F.O.H.) is primarily a theatrical term, referring to the portion of the building that
is open to the public. In theater and live music venues, it typically refers to the auditorium and foyer, as
opposed to the stage and backstage areas.
A system to deliver sound to the F.O.H. is commonly referred to as a [[P.A.|Public Address]] system.
GenerateRssByTagPlugin overwrite the core generateRSS() function. And defines a txtRssTag option : <<option txtRssTag>> to specify the tag to use (defaulted to ''"toRSS"'' ).

Only tiddlers with this specific tag are inluded in the RSSFeed. If no tiddlers are selected then works with the old behaviour. (see ticket #270:

Because the generateRSS mechanism should change in TW 2.3 this enhancement should not go in the core .

Hint : You can add {{{<<option txtRssTag>>}}} in AdvancedOptions
|''Description:''|Only tiddlers with a specific tag are inluded in the RSSFeed. If no tiddlers are selected then works as before. (see ticket #270: <br>RssTag: <<option txtRssTag>>|
|''Date:''|Apr 20, 2007|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''[[License]]:''|[[BSD open source license| ]]|
|''~CoreVersion:''|2.2.0 (Beta 5)|
version.extensions.GenerateRssByTagPlugin = {
	major: 1, minor: 0, revision: 2, 
	date: new Date("Apr 20, 2007"),
	source: '',
	author: 'BidiX (BidiX (at) bidix (dot) info',
	coreVersion: '2.2.0 (Beta 5)'

if (!window.bidix) window.bidix = {}; // bidix namespace

bidix.generateRssByTag = function()
	var s = [];
	var d = new Date();
	var u = store.getTiddlerText("SiteUrl");
	// Assemble the header
	s.push("<" + "?xml version=\"1.0\"" + " encoding='UTF-8' " + "?" + ">");
	s.push("<rss version=\"2.0\">");
	s.push("<title" + ">" + wikifyPlain("SiteTitle").htmlEncode() + "</title" + ">");
		s.push("<link>" + u.htmlEncode() + "</link>");
	s.push("<description>" + wikifyPlain("SiteSubtitle").htmlEncode() + "</description>");
	s.push("<copyright>Copyright " + d.getFullYear() + " " + config.options.txtUserName.htmlEncode() + "</copyright>");
	s.push("<pubDate>" + d.toGMTString() + "</pubDate>");
	s.push("<lastBuildDate>" + d.toGMTString() + "</lastBuildDate>");
	s.push("<generator>TiddlyWiki " + version.major + "." + version.minor + "." + version.revision + "</generator>");
	// The body
	var tiddlers;
	if (config.options.txtRssTag && store.getTaggedTiddlers(config.options.txtRssTag).length > 0)
		tiddlers = store.getTaggedTiddlers(config.options.txtRssTag,"modified");
		tiddlers = store.getTiddlers("modified","[[excludeLists]]");
	var n = config.numRssItems > tiddlers.length ? 0 : tiddlers.length-config.numRssItems;
	for (var t=tiddlers.length-1; t>=n; t--)
	// And footer
	// Save it all
	return s.join("\n");

// Initializations
bidix.generateRss = generateRss; // backup core version
generateRss = bidix.generateRssByTag; // install new one
config.options.txtRssTag = "toRSS"; // default RssTag. use <<option txtRssTag>> to overwritte
merge(config.optionsDesc,{txtRssTag: "Only tiddlers with this tag will be included in the RSS Feed."});
|Description:|Allows conditional inclusion/exclusion in templates|
|Version:|3.1 ($Rev: 3919 $)|
|Date:|$Date: 2008-03-13 02:03:12 +1000 (Thu, 13 Mar 2008) $|
|Author:|Simon Baird <>|
For use in ViewTemplate and EditTemplate. Example usage:
{{{<div macro="showWhenTagged Task">[[TaskToolbar]]</div>}}}
{{{<div macro="showWhen tiddler.modifier == 'BartSimpson'"><img src="bart.gif"/></div>}}}

window.hideWhenLastTest = false;

window.removeElementWhen = function(test,place) {
	window.hideWhenLastTest = test;
	if (test) {


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

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

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

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

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

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

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

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

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

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

	hideWhenTitleIs: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.title == params[0], place);

	showWhenTitleIs: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.title != params[0], place);

	'else': { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !window.hideWhenLastTest, place);


|Author|Eric Shulman - ELS Design Studios|
|License| <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|]]|
|Description|Insert Javascript executable code directly into your tiddler content.|
''Call directly into TW core utility routines, define new functions, calculate values, add dynamically-generated TiddlyWiki-formatted output'' into tiddler content, or perform any other programmatic actions each time the tiddler is rendered.
>see [[InlineJavascriptPluginInfo]]
2008.06.11 [1.9.3] added $(...) function as 'shorthand' convenience syntax for document.getElementById()
2008.03.03 [1.9.2] corrected declaration of wikifyPlainText() for 'TW 2.1.x compatibility fallback' (fixes Safari "parse error")
2008.02.23 [1.9.1] in onclick function, use string instead of array for 'bufferedHTML' attribute on link element (fixes IE errors)
2008.02.21 [1.9.0] 'onclick' scripts now allow returned text (or document.write() calls) to be wikified into a span that immediately follows the onclick link.  Also, added default 'return false' handling if no return value provided (prevents HREF from being triggered -- return TRUE to allow HREF to be processed).  Thanks to Xavier Verges for suggestion and preliminary code.
|please see [[InlineJavascriptPluginInfo]] for additional revision details|
2005.11.08 [1.0.0] initial release
version.extensions.InlineJavascriptPlugin= {major: 1, minor: 9, revision: 3, date: new Date(2008,6,11)};

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

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

// // Backward-compatibility for TW2.1.x and earlier
if (typeof(wikifyPlainText)=="undefined") window.wikifyPlainText=function(text,limit,tiddler) {
	if(limit > 0) text = text.substr(0,limit);
	var wikifier = new Wikifier(text,formatter,null,tiddler);
	return wikifier.wikifyPlain();

// // $(...) function: 'shorthand' convenience syntax for document.getElementById()
if (typeof($)=="undefined") { // avoid redefinition
function $() {
	var elements=new Array();
	for (var i=0; i<arguments.length; i++) {
		var element=arguments[i];
		if (typeof element=='string') element=document.getElementById(element);
		if (arguments.length==1) return element;
	return elements;
Lip-sync or Lip-synch (short for lip synchronization) is a technical term for matching lip movements with voice.

The term can refer to: 
#a technique often used for performances in the production of film, video and television programs (see [[ADR]])
#the science of synchronization of visual and audio signals during post-production and transmission
#the common practice of people including singers performing with recorded audio as a source of entertainment
#matching lip movements of animated characters (including computer facial animation).
<<tiddler menuScript>><<tiddler ToggleRightSidebar>>
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<link rel="shortcut icon" href="resources/images/favicon.ico">
<style type="text/css">#contentWrapper {display:none;}</style>
<div id="SplashScreen" style="border: 3px solid #ccc; display: block; 
text-align: center; width: 320px; margin: 100px auto; 
padding: 50px; color:#255F46; font-size: 28px; font-family:Tahoma; 
The homepage of Marcel Huibers is loading<blink> ...</blink>
<span style="font-size: 14px; color:red;">Requires Javascript.</span></div>
A mastering engineer is one skilled in the practice of taking audio (typically musical content) that has been previously mixed in either the analog or digital domain as mono, stereo, or multichannel formats and preparing it for use in distribution, whether by physical media such as a CD, vinyl record, or as some method of streaming audio.
#[[Inter Binary Unity - Marcel Huibers Feat. Max de Vriend|resources/audio/Ashi-Inter_Binary_Unity.mp3]]{{indent0{
Instrumental track with Max on guitar and percussion.
#[[Geen Zorgen - Luckster & Ashi|]]{{indent0{
In memory of Slain a.k.a. De Voorsprong. Lyrics by Luckster, 2009.
#[[Step Two - Marcel Huibers|resources/audio/Ashi-Step2.mp3]]{{indent0{
Dance track released in 2002.

Under [[projects|Projects]] you can view several full films, trailers and promo’s.<script>config.options.txtSelectedMenuItem = "7";refreshDisplay();</script>
My interest in sound engineering originated in my love for music. That is not particularly unique. It is hardly possible to imagine any concepts so closely intertwined.
In that way, from playing keys in a band it was only a small step for me to move up to the technical side of recording and producing. This period culminated into reaching the finals of the prestigious [[Grand Prix of the Netherlands|]] in 2000. 

Nowadays my range of music related services cover a wide area of activities:
#[[mixing|Audio Mixing (music)]]
#[[mastering|Mastering Engineer]]
#[[production|Record Producer]]
#[[front of house|Front of House]] concert mixing.

To hear a few clips of the latter just go to the [[media|Media]] section.<script>config.options.txtSelectedMenuItem = "3";refreshDisplay();</script>
Sound that is outside the story space, such as [[music underscoring|Film Score]].
See also [[Diegetic Sound]].

Some other activities I can be of service to you are mostly related to my engineering work or complementary to it. 
They include:
#software development{{indent0{
(in quite some general and diverse sense, but most notably the development of the video logging system &ldquo;~EasyLog2&rdquo; and various audio plug-ins)

[[Contact]] me for any specific requirements.<script>config.options.txtSelectedMenuItem = "4";refreshDisplay();</script>
<div class='header'>
	<div class='headerShadow'>
		<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
		<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
	<div class='headerForeground'>
		<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
		<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
<div id='mainMenu' refresh='content' force='true' 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 id='displayArea'>
	<div id='messageArea'></div>
	<div id='tiddlerDisplay'></div>
	<div class="pageFooter" refresh='content' tiddler="contentFooter"></div> 
|''Source''|[[FND's DevPad|]]|
|''License''|[[Creative Commons Attribution-ShareAlike 3.0 License|]]|
|''Description''|Displays color palettes.|
There is also [[ViewPalettePlugin|]]
<<paletteView [tiddler name]>>
<<paletteView [[ColorPalette]]>>
!Revision History
!!v0.1 (2007-11-18)
* initial release
!!v0.2 (2007-11-20)
* limited processing to slices containing [[actual color values|]]
* changed fallback value to the tiddler the macro is called from (instead of using [[ColorPalette]])
!To Do
* selection list for all available palettes (tag-based)
* parameter for custom table class
* customizable column order
* documentation (e.g. using from within [[ViewTemplate]])
config.macros.paletteView = {};

config.macros.paletteView.handler = function(place, macroName, params, wikifier, paramString, tiddler) {
	var title = params[0] || tiddler.title;
	//var palettes = store.getTaggedTiddlers(params[0]); // DEBUG: yet to be implemented
	var colors = store.calcAllSlices(title);
	var labels = [];
	for(var c in colors) {
		if(this.isColor(colors[c])) {
	if(labels.length > 0) {
		var output = "|!Sample|!Value|!Name|h\n";
		for(var i = 0; i < labels.length; i++) {
			output += "|padding:0 4em;background-color:" + colors[labels[i]] + ";&nbsp;|"
				+ "{{{" + colors[labels[i]] + "}}}|"
				+ "[[" + labels[i] + "|" + title + "]]|\n";
		wikify(output, place);

config.macros.paletteView.isColor = function(s) {
	var colors = ["Black", "Green", "Silver", "Lime", "Gray", "Olive", "White", "Yellow",
		"Maroon", "Navy", "Red", "Blue", "Purple", "Teal", "Fuchsia", "Aqua", "Orange"];
	var match = s.match(/^#[0-9A-F]{3}$|^#[0-9A-F]{6}$|^RGB\([\d,\s]{5,}\)$/i);
	if(match) return true;
	if(colors.contains(s)) return true;
	return false;
In [[post-production|Post-Production Info]] sound engineering is diverse and demanding, especially with full fledged motion picture productions. Its requires not only technology, knowledge and experience, it also calls for insight, creativity and accuracy. 

Being specialized in this field I can offer you complete audio post-production services and concepts for cinema and TV. In this respect, my main activities focus on:
#[[sound design|Sound Design]]
#[[dialogue editing|Dialogue Editing]]
#[[foley|Foley]] recording/editing
#[[ADR (dub)|ADR]] recording/editing
#[[sound mixing|Audio Mixing (cinema)]].

For a summary of projects I worked on see the corresponding [[section|Projects]].<script>config.options.txtSelectedMenuItem = "2";refreshDisplay();</script>
''Post-production'' occurs in the making of motion pictures, television programs, radio programs, videos, audio recordings, photography and digital art. It is the general term for all stages of production occurring after the actual end of shooting and/or recording the completed work. Post-production is, in fact, many different processes grouped under one name. These typically include:
*[[Editing|Film Editing]] the picture / television program
*Editing the [[soundtrack|Soundtrack]].
*Writing and recording the [[film score|Film Score]].
*Adding visual special effects - mainly computer-generated imagery (CGI) and digital copy from which release prints will be made
*Transfer of film to Video or Data with a telecine and Color grading.
Typically, the post-production phase of creating a film takes longer than the actual shooting of the film, and can take several months to complete.
}}}Below you’ll find a scroll of the major projects I worked on.
For any additional information [[contact|Contact]] me directly or check me on [[IMDb|]].

*''Loenatik Te Gek!'' Feature by Johan Timmers. Dialogue Editing & Dialogue Mix. [[Play trailer.|]]
*''A'Dam & E.V.A.'' Series by Norbert ter Hall. Dialogue Editing.
*''Kris Kras''. TV film by David Grifhorst. Dialogue Editing & Dialogue Mix.
*''Tula the Revolt''. Feature by Jeroen Lijnders, Fisheye Features. Dialogue Editing & Dialogue Mix. [[Play trailer.|]]
*''Afscheid van de Maan''. Feature by Dick Tuinder, Column Films. Dialogue Editing & Dialogue Mix.
*''Kankerlijers''. Feature by Lodewijk Crijns,  Bos Bros Film & TV Productions. Dialogue Editing & Dialogue Mix.
*''Na de Bevrijding''. Documentary series by Femke Veltman, Gerda Jansen Hendriks, Paul Ruigrok, Suzanne Raes. Sound Design.
*''Alles Mag''. TV film by Steven Wouterlood. Dialogue Editing & Dialogue Mix.
*''De Nieuwe Wereld''. Feature by Jaap van Heusden, IJswater Films. Dialogue Editing & Dialogue Mix.
*''Alleen Maar Nette Mensen''. Feature by Lodewijk Crijns, Topkapi Films. Dialogue Editing & Dialogue Mix. [[Play trailer.|]]
*''BELLICHER:CEL''. Feature by Peter de Baan, Pupkin Film. Dialogue Editing & Dialogue Mix. [[Play trailer.|]]
*''WE''. A found footage film by Peter Lataster en Petra Lataster-Czisch, Lataster Films. Sound Design. [[Play trailer.|]]
*''Van Bihar tot Bangalore''. Documentary by Hans Pool, VPRO. Mix.
*''De Verbouwing''. Feature by Will Koopman, Column Films. Dialogue Editing & Dialogue Mix. [[Play trailer.|h]]
*''De Gouden Eeuw''. Documentary by Hans Goedkoop. Mix.
*''Meneer Braker''. Short by Boris Paval Conen, IJswater films. Dialogue Editing & Dialogue Mix.
*''Doodslag''. Feature by Pieter Kuijpers, Pupkin Film. Dialogue Editing & Dialogue Mix. [[Play trailer.|]]
*''Kansloos''. Short by Joris van den Berg, Stetz Film. Dialogue Editing.
*''Het Offer''. TV film by Jaap van Heusden, Talent United. Dialogue Editing & Dialogue Mix. 
*''Ulrich''. Short by Vanesa Abajo Perez. Dialogue Editing.
*''De Verloren Overwinning''. Documentary by Tonko Dop. Sound Desing & Mix.
*''Gooische Vrouwen''. Feature by Will Koopman, Column Film. Dialogue Editing. [[Play trailer.|]]
*''Me & Mr. Jones, a love story on Natalee-island''. Feature by Paul Ruven, Talent United.
*''Drone''. TV film by Jaap van Heusden, Talent United.
*''Rafina''. Feature by Sabiha Sumar. Dialogue Editing/Foley Recording.
*''Drone''. Drama by Jaap van Heusden.  Dialogue Editing & Dialogue Mix. 
*''Entre Nosotros''. Drama by Paloma Aguilera Valdebenito, IJswater Films. Mix/Sound Design.
*''Gangsterboys''. Feature by Paul Ruven, Talent United. [[Play trailer.|]]
*''Win/Win''. Feature by Jaap van Heusden, IJswater Films. [[Play trailer.|]]
*''Kom niet aan mijn kinderen''. Feature by Ron Termaat. [[Play trailer.|]]
*''Den Uyl en de Affaire Lockheed''. Series by Hans Hylkema, Dutch Mountain Movies. [[Play trailer.|]]
*''Safety First''. TV by Robert Oey,
*''Retour Uruzgan''. Series by Erik van 't Wout, Talent United.
*''Overmorgen''. Drama by Natasja Andre de la Porte, Pupkin Film.
*''De Leugen''. Feature documentary by Robert Oey. [[Play trailer.|]]
*''Terug naar de kust''. Feature by Will Koopman, Column Film. Sound design.
*''Winterland''. Feature by Dick Tuinder, Column Film. Dialogue editing.
*''Op bezoek bij George W. Bush''. TV by Norbert ter Hal, NPS. Sound design and mix. [[Play film.|]]
*''Liefde gaat door de maag''. TV series by Heddy Honigmann. Sound design.
*''Over vis en revolutie''. Short by Margien Rogaar, Bos Bros. Dialogue editing. [[Play example.|]]
*''De brief voor de koning''. Feature by Pieter Verhoeff, Eyeworks Egmond. Dialogue editing. [[Play trailer.|]]
*''Hoe overleef ik...?'' Feature by Nicole van Kilsdonk, Bos Bros. Dialogue editing. [[Play trailer.|]]
*''Hitte/Harara''. Telefilm by Lodewijk Crijns, ~IdtV. Dialogue editing. [[Play trailer.|]] 
*''Morrison krijgt een zusje''. Feature by Barbara Bredero, Bos Bros. Dialogue editing. [[Play trailer.|]]
*''Tiramisu''. Feature by Paula van der Oest, ~IdtV. Dialogue editing. [[Play trailer.|]]
*''Waar is het paard van Sinterklaas?'' Feature by Mischa Kamp, Bos Bros. Dialogue editing. [[Play trailer.|]]
*''Groen is toch de mooiste kleur van gras''. TV by Guido van Driel, VPRO. Dialogue editing. [[Play film.|]]
*''Dag mams''. Documentary by Bert Molenaar, VARA. Sound design and mix.
*''Willemspark''. TV series by Antoinette Beumer en Remy van Heugten, Stormy Minutes Society. Sound design. [[Play promo.|]]
*''Zadelpijn''. Telefilm by Nicole van Kilsdonk, ~IdtV. Dialogue editing.
*''Ko van Dijk - een hommage''. Documentary by Ireen van Ditshuyzen en Hans Pool, ~IdtV-DITS. Sound design and mix.
*''Radio Bergeijk TV''. TV series by Pieter Verhoef, VPRO. Sound design and mix. [[Play film.|]]
*''Beetje verliefd, 'n''. Feature by Martin Koolhoven, Waterland Film. Dialogue editing. [[Play trailer.|]]
*''Ongewisse tijd''. Documentary by Diego Pos, Shooting Star Filmcompany BV. Sound design.
*''Cellenblok K. Daar is mijn hoofd gebleven''. Documentary by Kees Vlaanderen, Humanistische Omroep. Sound design and mix. [[Play film.|]]
*''Afblijven''. Feature by Maria Peters, Shooting Star. Dialogue editing. [[Play trailer.|]]
*''De vogelaar''. Telefilm by Ellen Blom, Motel Film. Dialogue editing. [[Play film.|]]
*''Koefnoen''. TV series by Owen Schumacher en Paul Groot, AVRO. Sound design and mix.
*''Het zwijgen''. Feature by André van der Hout en Adri Schrover, Waterland. Sound design. [[Play example|]]
*''De taxi van Palemu''. TV series by Nicole van Kilsdonk, Lemming Film. Sound design. [[Play leader.|]]
*''Turkse chick''. Short by Lodewijk Crijns, Motel Films. Sound design. [[Play example.|]]
*''Het paard van Sinterklaas''. Feature by Mischa Kamp, Bos Bros. Dialogue editing. [[Play trailer.|]]
*''Onder specialisten''. TV serie by Simone de Vries, ~IdtV-DITS. Sound design and mix.
*''De kroon''. Telefilm by Peter de Baan, Riba Filmproductions. Sound design.
*''Allerzielen "Weltrusten Wilders"''. Short by Peter de Baan, Added Films International. Sound design and mix.
*''Het veerhuis''. Documentary by Steef Meyknecht, Humanistische Omroep. Sound design.
*''The concrete curtain''. Documentary by Benny Brunner, Yela Films. Sound design and mix.
*''Sly Racoon 3, Sponge Bob''. Voice recording for video games.
*''Wroeten''. TV series by Lernert Engelberts and Arjan Ederveen, De Toko. Sound design and mix.
*''De staat van Beatrix''. Documentary by Tonko Dop. Sound design and mix.
*''Paradise girls''. Feature by Fow Pyng Hu, Motel Films. Dialogue editing.
*''Zwijnen''. TV by Micha Kamp, Vara, NPS, VPRO. Sound design.
*''Tussen twee mensen''. TV by Lernert Engelberts, VPRO. Sound design and mix.
*''Zoete tomaat''. Short by Paul Rigter, Motel Films. Soudn design.
*''Tussen ouders en kinderen''. Documentary by Nicole M. van Damme, ~IdtV-DITS. Sound design and mix.
*''Pieter Laurens Mol''. Documentary by Pieter Verhoeff, VPRO. Sound design.
*''Picture this!'' Short by Michiel van Jaarsveld. Sound design. [[Play example.|]]
*''The last victory''. Documentary by John Appel, Cobos Film B.V. Sound design.
*''Dame la mano''. Documentary by Heddy Honigmann, Pieter Van Huystee Film. Sound design.
*''Dokter vogel''. Short by Lodewijk Crijns. Sound design. [[Play example.|]]
*''Allemaal theater''. Documentary series by various directors, ~IdtV-DITS. Sound design.
*''The right to win''. Documentary by Hans Pool, Dolphin Media. Sound design and mix.
*''Allemaal theater''. TV series by various directors, AVRO. Sound design.
*''Wild wonen''. Documentary by Remy Vlek, AVRO. Sound design and mix.
*''Imro Select - Buggin' Me''. Mixing and mastering of 3 songs off the 12". [[Video clip.|]]
*''Een sterke band''. Documentary by Roel van Dalen, NPS. Sound design. [[Info.|]]
*''En terecht!'' Documentaries by Roel van Dalen and René Roelofs, Lemming Film. Sound design and mix.
*''Vietnam, de herinnering''. Documentary by Remy Vlek, RVU. Sound design and mix.
*''Grenzeloos verlangen''. Documentary by Hans Pool, AVRO. Sound design and mix.
*''Flicka''. Short by Guido van Gennep and Marco Vermaas. Sound design. [[Play example.|]]
*''Bonanza'''. TV series by various directors, VPRO. Sound design and mix.
*''~TV7''. TV series by Pieter Kramer, VPRO. Sound design.
*''It is no dream''. Documentary by Benny Brunner and Joseph Rochlitz. Sound design and mix.
*''Dennis Hopper: The decisive moments''. Documentary by Thom Hoffman, ~IdtV. Sound design.
*''Paramaribo papers''. Telefilm by Ger Poppelaars. Sound design.
*''Huis te koop''. TV series by Hans Pool, AVRO. Sound design and mix.
*''Wij Oranje''. TV series by Leo de Boer, ~IdtV-DITS. Sound design.
*''Climax Tour 2002''. Live sound mixer during Dutch tour.
*''Het Nationaal Ballet''. Documentary by Roel van Dalen, ~IdtV. Sound design.
*''De volgende zaak''. TV series by Guusje Prent, NCRV. Sound design and mix.
*''Cinefile Mullah''. Documentary by Elli Safari, LASSO Film & TV. Sound design and mix.
*''De engel en de duivel''. TV series by Sarah Verroen. Sound design.
*''Bij God en in de CIZ kon alles''. Documentary by Renée Sanders, NIK–media. Sound design and mix.
*''Geen koninkrijk voor een vrouw''. Documentary by Remy Vlek, RVU. Sound design and mix.
*''De stand van de zon''. Documentary by Leonard Retel Helmrich, Scarabee Filmproducties. Sound design.
*''Land van Rama''. Film by Jonne Severijn, Rahman Films International. Sound design.
*''Buitenkans''. Documentary by Lisanne Paddegon, ~IdtV. Sound design and mix.
*''Villa Achterwerk''. TV by David Lammers, VPRO. Sound design and mix.
*''Oetsikoetsi''. Documentary by Noud Holtman, NPS. Sound design and mix.
*''Mercedes''. Short by Marc de Cloe, NPS. Sound design.
*''Kids in Control''. Documentary by Eveline Welschen, NFTA. Sound design. [[Info.|]]
*''Van onmacht naar kracht''. Documentary by Reneé Sanders, RVU. Sound design and mix.
*''Het grootste van het grootste - Abraham Tuschinski''. Documentary by Ger Poppelaars, NPS. Sound design.
*''Kosher Friendly''. Documentary by Benny Brunner and Joseph Rochlitzm, NIK. Sound design and mix.
*''Stars of Europe''. TV series by Ireen van Ditshuyzen, ~IdtV DITS. Sound design.
*''De Grandeur van Groningen''. Documentary by Ireen van Ditshuysen, Humanistische omroep. Sound design.
*''Wij Oranje''. TV serie by Leo de Boer, NCRV. Sound design.
*''Mijn zusje is een schema''. Documentary by Noud Holtman. Sound design and mix.
*''Vèt VMBO''. TV series by Eveline van Dijck en Nicole van Damme, ~IdtV-DITS. Sound design and mix.
*''De vis wordt duur betaald''. Documentary by Remy Vlek, RVU. Sound design and mix.
*''Babs''. Feature by Irma Achten, Kasander Film Company. Sound design.
*''De gevangenen van Buñuel''. Documentary by Ramón Gieling, Pieter van Huystee Film. Sound design.
*''Ajax: Daar hoorden zij engelen zingen''. Documentary by Roel van Dalen, ~IdtV. Sound design.
*''~EasyLog2''. Video logging software development, Broadware.
*''Het laatste Joegoslavische elftal''. Documentary by Vuc Janic, Pieter van Huystee Film. Sound design.
*''André Hazes, zij gelooft in mij''. Documentary by John Appel, Zeppers Film & TV. Sound design.
*''Hertenkamp''. TV series by Pieter Kramer, VPRO. Sound design.
*''Haagse Klasse''. Documentary by Suzanne Raes, AVRO. Sound design.
*''Lef''. Feature by Ron Termaat, CV Lef. Sound design.
*''Maten''. Telefilm by Pieter Verhoeff, Egmond Film & Television. Sound design.
*''Single Luck''. TV series by Tonko Dop, ~IdtV. Sound design and mix.
*''De juiste maat''. TV by Heddy Honigmann, NPS. Sound design.
*''Metz&Co''. Music composition for commercial, Metz&Co.
*''Dierbaar''. Documentary by René Roelofs, Zest Films. Sound design.
*''Can't U Hear Me Singin'''. Documentary by Walter Stokman, Cinema 33. Sound design.
*''Lois Lane''. Live sound mixer during concert.
*''Headline''. Live sound mixer during Dutch tour.<script>config.options.txtSelectedMenuItem = "5";refreshDisplay();</script>
A public address or "P.A." system is an electronic amplification system with a mixer, amplifier and loudspeakers, used to reinforce a given sound, e.g., a person making a speech, prerecorded music, or message, and distributing the sound to the general public around a building.
In theory, there is no difference between theory and practice. But, in practice, there is.
A witty saying proves nothing.         
The problem with some people is that when they aren't drunk, they're sober.
Acting is all about honesty. If you can fake that, you've got it made. [George Burns]
The great thing about television is that if something important happens anywhere in the world, day or night, you can always change the channel.
Don't be so humble - you are not that great.
If you lived here, you'd be home by now...
I love my dust. It shows I had something better to do.
Time flies like an arrow... Fruit flies like a banana [Groucho Marx]
A goal without a plan is just a wish. [Antoine de ~Saint-Exupery]
I merely took the energy it takes to pout and wrote some blues. [Duke Ellington]
If you don't know where you're going, you'll probably end up somewhere else.
It's all very simple... or else it's all very complex... or perhaps it's neither... or both.
Accepting reality is the first step to insanity
Oops! Sorry. My karma ran over your dogma.
Santaclaustrophobia... The feeling that Christmas is closing in all around you.
Why is abbreviation such a long word?
Diplomacy is the art of saying 'Nice doggie!'... until you can find a rock.
Umm... What's another word for thesaurus?
Give me ambiguity or give me something else
Ninth Law of Cartoon Physics: Everything falls faster than an anvil.
Boycott Shampoo - Demand the REAL poo!
Remember: Don't sweat the petty things... and don't pet the sweaty things.
Don't be irreplaceable, if you can't be replaced, you can't be promoted.
5 out of 4 people have problems with fractions.
Always remember you're unique, just like everyone else.
The one thing I can't stand is intolerant people!
He who laughs last thinks slowest
Acting is merely the art of keeping a large group of people from coughing. [Sir Ralph Richardson]
From the 'say what?!?' files: We are ready for any unforeseen event that may or may not occur. [Dan Quayle 9/22/90]
Dilbert's Laws of Work: The more crap you put up with, the more crap you are going to get.
Wagner's music is better than it sounds. [Edgar Wilson Nye 1924]
When the going gets tough, remember STRESSED spelled backwards is DESSERTS.
Foobar... baz. Mumble: frotz, gronk, snork. Snerfle? Natter and gromish!
Pentiums melt in your PC, not in your hand.
I always wanted to be somebody, but I should have been more specific. [Lily Tomlin] 
It's OK to change horses in mid-stream, especially if the first horse can't swim! [Laura Shulman] 
The most overlooked advantage to owning a computer is that if they foul up there's no law against wacking them around a little.
My personal hobbies are reading, listening to music, and silence. [Edith Sitwell]
Work is the curse of the drinking classes. [Oscar Wilde] 
Common sense is the collection of prejudices acquired by age eighteen. [Albert Einstein]
We have only two things to worry about:  That things will never get back to normal, and that they already have.
Every child is an artist. The problem is how to remain an artist once he grows up. [Pablo Picasso]
In a few minutes a computer can make a mistake so great that it would have taken many men many months to equal it.
Intelligence is a funny thing: those who don't have it think they do, and those who do are smart enough to know better.
Do not follow where the path may lead.  Go, instead, where there is no path, and leave a trail.
History is made at night... character is what you are in the dark. [Dr. Emilio Lizardo, aka Lord John Worfin] 
After silence, that which comes nearest to expressing the inexpressible is music. [Aldous Huxley]
Great things are not done by impulse, but by a series of small things brought together. [Vincent van Gogh] 
I shut my eyes in order to see. [Paul Gauguin]
I think there is a world market for maybe five computers. [Thomas Watson, chairman of IBM, 1943] 
Talent develops in tranquility, character in the full current of human life. [Johann Wolfgang von Goethe (1749-1832)] 
My loathings are simple: stupidity, oppression, crime, cruelty, soft music. [Vladimir Nabokov]
It takes courage to grow up and turn out to be who you really are. [e e cummings (1894-1962)] 
If we knew what it was we were doing, it would not be called research, would it? [Albert Einstein] 
To invent, you need a good imagination and a pile of junk. [Thomas Edison] 
Dare to be naive. [R. Buckminster Fuller] 
In the struggle between yourself and the world, second the world. [Franz Kafka] 
The whole problem with the world is that fools and fanatics are always so certain of themselves, and wiser people so full of doubts. [Bertrand Russell] 
My music is best understood by children and animals. [Igor Stravinsky 1961]
Doubt is not a pleasant state of mind, but certainty is absurd. [Voltaire] 
To err is human; and to blame it on a computer is even more so.
Education is not the filling of a pail, but the lighting of a fire. [William Butler Yeats] 
Music with dinner is an insult both to the cook and the violinist. [G. K. Chesterton]
If you take yourself too seriously, no one else will take you seriously enough... [Eric Shulman] 
Before you can do something, you must become something. [Goethe] 
The man who follows the crowd will usually get no further than the crowd.  The man who walks alone is likely to find himself in places no one has ever been. [Alan ~Ashley-Pit] 
Brass bands are all very well in their place - outdoors and several miles away. [Sir Thomas Beecham]
I wish it would dawn upon engineers that, in order to be an engineer, it is not enough to be an engineer. [Jose Ortega y Gasset] 
Every exit is an entry somewhere. [Tom Stoppard] 
We judge ourselves by what we feel capable of doing, while others judge us by what we have already done. [Henry Wadsworth Longfellow] 
All our words are but crumbs that fall down from the feast of the mind. [Kahlil Gibran, "Sand and Foam"] 
It's a lot harder to find joy than it is to find bread. Feed your soul first, then go shopping. [Eric Shulman] 
I don't know anything about music. In my line you don't have to. [Elvis Presley]
Not to know is bad.  Not to want to know is worse.  Not to hope is unthinkable.  Not to care is unforgivable.  [Nigerian folk saying] 
There are no shortcuts to anyplace worth going. [Beverly Sills] 
Somewhere, something incredible is waiting to be known. [Carl Sagan] 
Opera is when a guy gets stabbed in the back and, instead of bleeding, he sings. [Ed Gardner]
Great things are not done by impulse, but by a series of small things brought together. [Vincent van Gogh] 
There is only one success - to be able to spend your life in your own way. [Christopher Morley] 
The easiest way to get what you want is to help others get what they want. [Deepak Chopra] 
All generalizations are false, including this one. [Bucky Radfish]
Always listen to experts. They'll tell you what can't be done, and why. Then do it.
Not everything that can be counted counts, and not everything that counts can be counted.
Whether you think that you can, or that you can't, you are usually right.
The only time you run out of chances is when you stop taking them.
Knowledge speaks, but wisdom listens.
Too often we give our children answers to remember rather than problems to solve.
A people that values its privileges above its principles soon loses both.
Asking a working writer what he thinks about critics is like asking a lamppost how it feels about dogs. [Christopher Hampton]
Treat everyone with politeness, even those who are rude to you. Not because they are nice, but because you are.
Being in charge of your own reality is a little tougher; it takes a lot of thinking and brutal honesty. [Phil Glatz]
There are always going to be amazingly creative people doing wonderful things. [Phil Glatz]
The trick is to rise above the symptoms of being aware, and actually BE aware. [Phil Glatz]
Those parts of the system that you can hit with a hammer (not advised) are called hardware; those program instructions that you can only curse at are called software.
|Author|Eric Shulman|
|License| <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|]]|
|Description|Display a randomly selected "quote of the day" from a list defined in a separate tiddler|

>see [[QuoteOfTheDayPluginInfo]]
2008.03.21 [1.4.1] in showNextItem(), corrected handling for random selection so that //initial// index value will randomized correctly instead of always showing first item, even when randomizing.  Thanks to Riccardo Gherardi for finding this.
| Please see [[QuoteOfTheDayPluginInfo]] for previous revision details |
2005.10.21 [1.0.0] Initial Release.  Based on a suggestion by M.Russula
version.extensions.QuoteOfTheDayPlugin= {major: 1, minor: 4, revision: 1, date: new Date(2008,3,21)};
config.macros.QOTD = {
	clickTooltip: "click to view another item",
	timerTooltip: "auto-timer stopped...  'mouseout' to restart timer",
	timerClickTooltip: "auto-timer stopped...  click to view another item, or 'mouseout' to restart timer",
	function(place,macroName,params) {
		var tid=params.shift(); // source tiddler containing HR-separated quotes
		var p=params.shift();
		var click=true; // allow click for next item
		var inline=false; // wrap in slider for animation effect
		var random=true; // pick an item at random (default for "quote of the day" usage)
		var folder=false; // use local filesystem folder list
		var cookie=""; // default to no cookie
		var next=0; // default to first item (or random item)
		while (p) {
			if (p.toLowerCase()=="noclick") var click=false;
			if (p.toLowerCase()=="inline") var inline=true;
			if (p.toLowerCase()=="norandom") var random=false;
			if (p.toLowerCase().substr(0,7)=="cookie:") var cookie=p.substr(8);
			if (!isNaN(p)) var delay=p;
		if ((click||delay) && !inline) {
			var panel = createTiddlyElement(null,"div",null,"sliderPanel");"none";
			var here=createTiddlyElement(panel,click?"a":"span",null,"QOTD");
			var here=createTiddlyElement(place,click?"a":"span",null,"QOTD"); Date()).convertToYYYYMMDDHHMMSSMMM()+Math.random().toString(); // unique ID
		// get items from tiddler or file list
		var list=store.getTiddlerText(tid,"");
		if (!list||!list.length) { // not a tiddler... maybe an image directory?
			var list=this.getImageFileList(tid);
			if (!list.length) { // maybe relative path... fixup and try again
				var h=document.location.href;
				var p=getLocalPath(decodeURIComponent(h.substr(0,h.lastIndexOf("/")+1)));
				var list=this.getImageFileList(p+tid);
		if (!list||!list.length) return false; // no contents... nothing to display!
		if (delay) here.setAttribute("delay",delay);
		if (click) {
			if (!inline)"block";
				{ config.macros.QOTD.showNextItem(this); }
		if (config.options["txtQOTD_"+cookie]!=undefined) next=parseInt(config.options["txtQOTD_"+cookie]);
		if (delay) {
				{ clearTimeout(this.ticker); };
				{ this.ticker=setTimeout("config.macros.QOTD.tick('""')",this.getAttribute("delay")); };
	tick: function(id) {
		var here=document.getElementById(id); if (!here) return;
	function (here) {
		// hide containing slider panel (if any)
		var p=here.parentNode;
		if (p.className=="sliderPanel") = "none"
		// get a new quote
		var index=here.getAttribute("nextItem"); 
		var items=here.getAttribute("list").split("\n----\n");
		if (index<0||index>=items.length) index=0;
		if (here.getAttribute("random")=="true") index=Math.floor(Math.random()*items.length);
		var txt=items[index];
		// re-render quote display element, and advance index counter
		removeChildren(here); wikify(txt,here);
		index++; here.setAttribute("nextItem",index);
		var cookie=here.getAttribute("cookie");
		if (cookie.length) {
		// redisplay slider panel (if any)
		if (p.className=="sliderPanel") {
			if(anim && config.options.chkAnimate)
				anim.startAnimating(new Slider(p,true,false,"none"));
	getImageFileList: function(cwd) { // returns HR-separated list of image files
		function isImage(fn) {
			var ext=fn.substr(fn.length-3,3).toLowerCase();
			return ext=="jpg"||ext=="gif"||ext=="png";
		var files=[];
		if (config.browser.isIE) {
			// IE uses ActiveX to read filesystem info
			var fso = new ActiveXObject("Scripting.FileSystemObject");
			if(!fso.FolderExists(cwd)) return [];
			var dir=fso.GetFolder(cwd);
			for(var f=new Enumerator(dir.Files); !f.atEnd(); f.moveNext())
				if (isImage(f.item().path)) files.push("[img[%0]]".format(["file:///"+f.item().path.replace(/\\/g,"/")]));
		} else {
			// FireFox (mozilla) uses "components" to read filesystem info
			// get security access
			if(!window.Components) return;
			try {"UniversalXPConnect"); }
			catch(e) { alert(e.description?e.description:e.toString()); return []; }
			// open/validate directory
			var file=Components.classes[";1"].createInstance(Components.interfaces.nsILocalFile);
			try { file.initWithPath(cwd); } catch(e) { return []; }
			if (!file.exists() || !file.isDirectory()) { return []; }
			var folder=file.directoryEntries;
			while (folder.hasMoreElements()) {
				var f=folder.getNext().QueryInterface(Components.interfaces.nsILocalFile);
				if (f instanceof Components.interfaces.nsILocalFile)
					if (isImage(f.path)) files.push("[img[%0]]".format(["file:///"+f.path.replace(/\\/g,"/")]));
		return files.join("\n----\n");
A re-recording mixer, formerly known as a dubbing mixer, is a person who is part of a post-production sound team and works specifically with [[dialogue|Dialogue Editing]], [[music|Film Score]] and [[sound effects|Sound Effects]] to create the final [[soundtrack|Soundtrack]] for a production.
They are responsible for ensuring that the sound in a film or television program is technically correct, and as near to the director's or [[sound designer's|Sound Design]] original idea.
Re-recording mixers prepare an initial film soundtrack for audience previews by performing tasks such as mixing and cross-fading the sound, and adding a temporary music soundtrack that will have been prepared by the music editor.

Once the film is given its final approval by the producer and financial backers, the re-recording mixer works towards a final sound mix.
In the music industry, a record producer has many roles, among them controlling the recording sessions, coaching and guiding the musicians, organizing and scheduling production budget and resources, and supervising the recording, mixing and mastering processes. This has been a major function of producers since the inception of sound recording, but in the latter half of the 20th century producers also took on a wider entrepreneurial role.

The music producer could, in some cases, be compared to the film director in that the producer's job is to create, shape and mold a piece of music in accordance with their vision for the album. Unlike in film, the music producer is seldom responsible for raising the funds to create the record – more like the film director, the record producer is hired by those who have already obtained funding (typically record or publishing companies, though occasionally the artists themselves).
!!!Professional education
#School of Audio Engineering (SAE) at Amsterdam (1995-1997){{indent0{
Graduated with a corresponding degree in audio engineering
#Institute of Applied Technology (HTS) at Alkmaar (1997-2001){{indent0{
Graduated with a bachelor of engineering degree in Electronics and ICT

!!!Professional experience and history
In 1997 I started my own business working as an independent and free-lance engineer. From that time I closely cooperate with many other renowned studios and production companies.
Some other relevant activities during or prior to that period may be worth mentioning:
#sound and lighting engineer at the film and stage theatre Provadja at Alkmaar
#sound engineer at radio station Duinrand FM at Bergen
#[[Front of house|Front of House]] mixer for two years, touring with the band Headline
#[[music production|Record Producer]] and composition for several groups including:
##Classic (with whom I made the finals of the 2000 [[Grand Prix of the Netherlands|]])
##Climax (vinyl/cd production at record label Wallboomers along with two music videos)
#software coding (C++) at video software company Broadware in Amsterdam<script>config.options.txtSelectedMenuItem = "6";refreshDisplay();</script>

<<tabs txtMainTab "Timeline" "Timeline" TabzTimeline "All" "All tiddlers" TabzAll "Tags" "All tags" TabzTags "More" "More lists" TabzMore>>
|Author|Eric Shulman - ELS Design Studios|
|License| <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|]]|
|Overrides|Story.prototype.displayTiddler(), Story.prototype.displayTiddlers()|
|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.
>see [[SinglePageModePluginInfo]]
<<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)

* 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.
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.
version.extensions.SinglePageModePlugin= {major: 2, minor: 9, revision: 6, date: new Date(2008,10,17)};
config.paramifiers.SPM = { onstart: function(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)
if (config.options.chkSinglePagePermalink==undefined)
if (config.options.chkSinglePageKeepFoldedTiddlers==undefined)
if (config.options.chkSinglePageKeepEditedTiddlers==undefined)
if (config.options.chkTopOfPageMode==undefined)
if (config.options.chkBottomOfPageMode==undefined)
if (config.options.chkSinglePageAutoScroll==undefined)
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)
	else { // restore permaview or default view
		config.lastURL = window.location.hash;
		if (!tids.length) tids=store.getTiddlerText("DefaultTiddlers").readBracketedList();

if (Story.prototype.SPM_coreDisplayTiddler==undefined)
Story.prototype.displayTiddler = function(srcElement,tiddler,template,animate,slowly)
	var title=(tiddler instanceof Tiddler)?tiddler.title:tiddler;
	var tiddlerElem=document.getElementById(story.idPrefix+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"))
			// 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);
	else if (top)
	else if (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))
		else if (bottom)
		else this.SPM_coreDisplayTiddler.apply(this,arguments); // let CORE render tiddler
	} else
		this.SPM_coreDisplayTiddler.apply(this,arguments); // let CORE render tiddler
	var tiddlerElem=document.getElementById(story.idPrefix+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;

if (Story.prototype.SPM_coreDisplayTiddlers==undefined)
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;
Sound design is a conceptually creative/technical field. It covers all non-compositional elements of:
#a film
#a play
#a [[music|Music]] performance or recording
#a computer game software or any other multimedia project.

A person who practices the art of sound design is known as a &ldquo;sound designer&rdquo;.
Sound design can also be defined as: //&ldquo;The manipulation of audio elements to achieve a desired effect&rdquo;.
''Sound effects'' or audio effects are artificially created or enhanced sounds, or sound processes used to emphasize artistic or other content of films, television shows, live performance, animation, video games, music, or other media.
In motion picture and television production, a sound effect is a sound recorded and presented to make a specific [[storytelling|Storytelling]] or creative point without the use of dialogue or music. The term often refers to a process applied to a recording, without necessarily referring to the recording itself.

In professional motion picture and television production, [[dialogue|Dialogue Editing]], [[music|Music]] and sound effects recordings are treated as separate elements. Dialogue and music recordings are never referred to as sound effects, even though the processes applied to them, such as reverberation or flanging are.
The term soundtrack refers to three related concepts: 
*[[recorded music|Film Score]] accompanying and synchronized to the images of a motion picture, television program or video game
*a commercially released soundtrack album of [[music|Music]] as featured in the soundtrack of a film or TV show
*the physical area of a film that contains the synchronized recorded sound.

''Inspired by [[TiddlyPom|]]''

|Created by|SaqImtiaz|
|Version|0.21 |
Provides a simple splash screen that is visible while the TW is loading.

Copy the source text of this tiddler to your TW in a new tiddler, tag it with systemConfig and save and reload. The SplashScreen will now be installed and will be visible the next time you reload your TW.

Once the SplashScreen has been installed and you have reloaded your TW, the splash screen html will be present in the MarkupPreHead tiddler. You can edit it and customize to your needs.

* 20-07-06 : version 0.21, modified to hide contentWrapper while SplashScreen is displayed.
* 26-06-06 : version 0.2, first release

var old_lewcid_splash_restart=restart;

restart = function()
{   if (document.getElementById("SplashScreen"))
        document.getElementById("SplashScreen").style.display = "none";
      if (document.getElementById("contentWrapper"))
        document.getElementById("contentWrapper").style.display = "block";
    if (splashScreenInstall)
        displayMessage("TW SplashScreen has been installed, please save and refresh your TW.");

var oldText = store.getTiddlerText("MarkupPreHead");
if (oldText.indexOf("SplashScreen")==-1)
   {var siteTitle = store.getTiddlerText("SiteTitle");
   var splasher='\n\n<style type="text/css">#contentWrapper {display:none;}</style><div id="SplashScreen" style="border: 3px solid #ccc; display: block; text-align: center; width: 320px; margin: 100px auto; padding: 50px; color:#000; font-size: 28px; font-family:Tahoma; background-color:#eee;"><b>'+siteTitle +'</b> is loading<blink> ...</blink><br><br><span style="font-size: 14px; color:red;">Requires Javascript.</span></div>';
   if (! store.tiddlerExists("MarkupPreHead"))
       {var myTiddler = store.createTiddler("MarkupPreHead");}
      {var myTiddler = store.getTiddler("MarkupPreHead");}
      var splashScreenInstall = true;
Storytelling is the conveying of events in words, images, and sounds often by improvisation or embellishment.
Stories or narratives have been shared in every culture and in every land as a means of entertainment, education, preservation of culture and in order to instill moral values.

Crucial elements of stories and storytelling include plot and characters, as well as the narrative point of view.
/* page (whole) settings */
body {
	background-position:top left;
	overflow: visible;

/* page header settings */
.header {

/* main menu settings */
#mainMenu {
	padding-left: 110px;
	padding-top: 37px;
	font-weight: bold;
	line-height: 35px;

#mainMenu .tiddlyLinkExisting,
		#mainMenu .tiddlyLinkNonExisting {
/*	text-shadow: #a6c8c0 8px 8px 2px;*/

.menuSelected {
	-moz-border-radius: 6px;

/* tiddler settings */
.viewer {
	padding: 40px;
	padding-left: 265px;
	padding-bottom: 0px;
	font-size: 14px;

.viewer a:hover {

/* tiddler edit settings */
.editor {
	padding-left: 280px;
	margin-left: -100px;

/* sidebar settings */
#sideBar {
	overflow: hidden;

/* footer settings */
#pageFooter {

.footertext {
/*	top: 595px;*/
	font-size: 90%;
	overflow: visible;

.footertext a {
	font-size: 90%;
	font-weight: 0;

.footertext a:hover {
	font-size: 90%;
	font-weight: 0;

/* links settings */
a {
	font-weight: bold;

.externalLink {
	font-weight: bold;

a:hover {

.title {

/* header 3 settings */
h3 {

/* list settings */
ol {
	list-style-type: disc;

ol ol {
	list-style-type: circle;

/* custom tags */
.nopad {
	margin-left: -11px;


/* make it print a little cleaner */
@media print {
	#topMenu {
		display: none ! important;
	/* not sure if we need all the importants */
	.tiddler {
		border-style: none ! important;
		margin:0px ! important;
		padding:0px ! important;
		padding-bottom:2em ! important;
	.tagglyTagging .button, .tagglyTagging .hidebutton {
		display: none ! important;
	.headerShadow {
		visibility: hidden ! important;
	.tagglyTagged .quickopentag, .tagged .quickopentag {
		border-style: none ! important;
	.quickopentag a.button, .miniTag {
		display: none ! important;
|Author|Eric Shulman|
|Description|'convenience' classes for common formatting, alignment, boxes, tables, etc.|

These 'style tweaks' can be easily included in other stylesheet tiddler so they can share a baseline look-and-feel that can then be customized to create a wide variety of 'flavors'.

/* text alignments */
	{ display:block;text-align:left; }
	{ display:block;text-align:center; }
.center table
	{ margin:auto !important; }
	{ display:block;text-align:right; }
	{ display:block;text-align:justify; }
	{ display:block;margin:0;padding:0;border:0;margin-left:2em; }
	{ float:left; }
	{ float:right; }
.valignTop, .valignTop table, .valignTop tbody, .valignTop th, .valignTop tr, .valignTop td
	{ vertical-align:top; }
.valignBottom, .valignBottom table, .valignBottom tbody, .valignBottom th, .valignBottom tr, .valignBottom td
	{ vertical-align:bottom; }
	{ clear:both; }
	{ white-space:normal; }
	{ white-space:nowrap; }
	{ display:none; }
	{ display:inline !important; }
	{ display:span; }
	{ display:block; }
	{ position:relative; }
	{ position:absolute; }

/* font sizes */
	{ font-size:14pt;line-height:120% }
	{ font-size:12pt;line-height:120% }
	{ font-size:9pt;line-height:120% }
	{ font-size:8pt;line-height:120% }
	{ font-size:7pt;line-height:120% }
	{ font-size:6pt;line-height:120% }
	{ font-size:120%; }
	{ font-size:80%; }

/* font styles */
	{ font-weight:bold; }
	{ font-style:italic; }
	{ text-decoration:underline; }

/* plain list items (no bullets or indent) */
.nobullets li { list-style-type: none; margin-left:-2em; }

/* multi-column tiddler content (not supported in Internet Explorer) */
.twocolumns { display:block;
	-moz-column-count:2; -moz-column-gap:1em; -moz-column-width:50%; /* FireFox */
	-webkit-column-count:2; -webkit-column-gap:1em; -webkit-column-width:50%; /* Safari */
	column-count:2; column-gap:1em; column-width:50%; /* Opera */
.threecolumns { display:block;
	-moz-column-count:3; -moz-column-gap:1em; -moz-column-width:33%; /* FireFox */
	-webkit-column-count:3; -webkit-column-gap:1em; -webkit-column-width:33%; /* Safari */
	column-count:3; column-gap:1em; column-width:33%; /* Opera */
.fourcolumns { display:block;
	-moz-column-count:4; -moz-column-gap:1em; -moz-column-width:25%; /* FireFox */
	-webkit-column-count:4; -webkit-column-gap:1em; -webkit-column-width:25%; /* Safari */
	column-count:4; column-gap:1em; column-width:25%; /* Opera */

/* show/hide browser-specific content for InternetExplorer vs. non-IE ("moz") browsers */
	{ display:none; } /* hide in moz (uses CSS selector) */
* html .mozOnly, *:first-child+html .mozOnly
	{ display: none; } /* hide in IE (uses IE6/IE7 CSS hacks) */

/* borderless tables */
.borderless, .borderless table, .borderless td, .borderless tr, .borderless th, .borderless tbody
	{ border:0 !important; margin:0 !important; padding:0 !important; }
.widetable, .widetable table
	{ width:100%; }

/* thumbnail images (fixed-sized scaled images) */
.thumbnail img { height:5em !important; }

/* stretchable images (auto-size to fit tiddler) */
.stretch img { width:95%; }

/* grouped content */
	{ display:block; padding:1em; -moz-border-radius:1em;-webkit-border-radius:1em; border:1px solid; }
	{ display:block; padding:1em; -moz-border-radius:1em;-webkit-border-radius:1em; border:1px solid; background:#fff; color:#000; }
.menubox .button, .menubox .tiddlyLinkExisting, .menubox .tiddlyLinkNonExisting
	{ color:#009 !important; }
	{ display:block; padding:1em; -moz-border-radius:1em;-webkit-border-radius:1em; border:1px solid; background:#ffe; color:#000; }
.groupbox a, .groupbox .button, .groupbox .tiddlyLinkExisting, .groupbox .tiddlyLinkNonExisting
	{ color:#009 !important; }
.groupbox code
	{ color:#333 !important; }
	{ margin:0;padding:0;border:0;margin-left:1em; border-left:1px dotted; padding-left:.5em; }
	{ margin:0;padding:0;border:0;margin-right:1em; border-right:1px dotted; padding-right:.5em; }
	{ margin:0;padding:1px 0;border:0;border-bottom:1px dotted; margin-bottom:1px; padding-bottom:1px; }
	{ margin:0;padding:0;border:0;border-top:1px dotted; margin-top:1px; padding-top:1px; }

/* scrolled content */
.scrollbars { overflow:auto; }
.height10em { height:10em; }
.height15em { height:15em; }
.height20em { height:20em; }
.height25em { height:25em; }
.height30em { height:30em; }
.height35em { height:35em; }
.height40em { height:40em; }

/* compact form */
	{ white-space:nowrap; }
.smallform input, .smallform textarea, .smallform button, .smallform checkbox, .smallform radio, .smallform select
	{ font-size:8pt; }

/* stretchable edit fields and textareas (auto-size to fit tiddler) */
.stretch input { width:99%; }
.stretch textarea { width:99%; }

/* compact input fields (limited to a few characters for entering percentages and other small values) */
.onechar input   { width:1em; }
.twochar input   { width:2em; }
.threechar input { width:3em; }
.fourchar input  { width:4em; }
.fivechar input  { width:5em; }

/* text colors */
.white { color:#fff !important }
.gray  { color:#999 !important }
.black { color:#000 !important }
.red   { color:#f66 !important }
.green { color:#0c0 !important }
.blue  { color:#99f !important }

/* rollover highlighting */
	{color:[[ColorPalette::TertiaryLight]] !important;}
.mouseover a
	{color:[[ColorPalette::TertiaryLight]] !important;}
.selected .mouseover
	{color:[[ColorPalette::Foreground]] !important;}
.selected .mouseover .button, .selected .mouseover a
	{color:[[ColorPalette::PrimaryDark]] !important;}

/* rollover zoom text */
	{ font-size:80% !important; }
.selected .zoomover
	{ font-size:100% !important; }

/* [[ColorPalette]] text colors */
.Background	{ color:[[ColorPalette::Background]];	 }
.Foreground	{ color:[[ColorPalette::Foreground]];	 }
.PrimaryPale	{ color:[[ColorPalette::PrimaryPale]];	 }
.PrimaryLight	{ color:[[ColorPalette::PrimaryLight]];	 }
.PrimaryMid	{ color:[[ColorPalette::PrimaryMid]];	 }
.PrimaryDark	{ color:[[ColorPalette::PrimaryDark]];	 }
.SecondaryPale	{ color:[[ColorPalette::SecondaryPale]]; }
.SecondaryLight	{ color:[[ColorPalette::SecondaryLight]];}
.SecondaryMid	{ color:[[ColorPalette::SecondaryMid]];	 }
.SecondaryDark	{ color:[[ColorPalette::SecondaryDark]]; }
.TertiaryPale	{ color:[[ColorPalette::TertiaryPale]];	 }
.TertiaryLight	{ color:[[ColorPalette::TertiaryLight]]; }
.TertiaryMid	{ color:[[ColorPalette::TertiaryMid]];	 }
.TertiaryDark	{ color:[[ColorPalette::TertiaryDark]];	 }
.Error		{ color:[[ColorPalette::Error]];	 }

/* [[ColorPalette]] background colors */
.BGBackground	  { background-color:[[ColorPalette::Background]];	}
.BGForeground	  { background-color:[[ColorPalette::Foreground]];	}
.BGPrimaryPale	  { background-color:[[ColorPalette::PrimaryPale]];	}
.BGPrimaryLight	  { background-color:[[ColorPalette::PrimaryLight]];	}
.BGPrimaryMid	  { background-color:[[ColorPalette::PrimaryMid]];	}
.BGPrimaryDark	  { background-color:[[ColorPalette::PrimaryDark]];	}
.BGSecondaryPale  { background-color:[[ColorPalette::SecondaryPale]]; 	}
.BGSecondaryLight { background-color:[[ColorPalette::SecondaryLight]];	}
.BGSecondaryMid	  { background-color:[[ColorPalette::SecondaryMid]];	}
.BGSecondaryDark  { background-color:[[ColorPalette::SecondaryDark]]; 	}
.BGTertiaryPale	  { background-color:[[ColorPalette::TertiaryPale]];	}
.BGTertiaryLight  { background-color:[[ColorPalette::TertiaryLight]]; 	}
.BGTertiaryMid	  { background-color:[[ColorPalette::TertiaryMid]];	}
.BGTertiaryDark	  { background-color:[[ColorPalette::TertiaryDark]];	}
.BGError	  { background-color:[[ColorPalette::Error]];	 	}
|Author|Eric Shulman|
|Description|TidIDE: define and apply CSS "on the fly"|
%/<<tiddler HideTiddlerTags>>{{smallform{<script>
var elems=document.getElementsByTagName("*");
var out='<html><form>';
out+='<select size=1 name=elems style="width:80%" ';
out+='		onchange="this.form.css.value=\'\'; if (!this.value.length) return;';
out+='		this.form.apply.disabled=false;';
out+='		this.form.done.disabled=false;\'block\';';
out+='		var e=document.getElementById(this.value);';
out+='		this.form.css.value=\'#%0 { %1 }\'.format([this.value,]);">';
out+='<option value=\'\'>select an element ID...</option>';
for (var i=0;i<elems.length;i++) { if (elems[i].id.length) out+='<option value="%0">ID: %0</option>'.format([elems[i].id]); }
out+='<input type=button name=apply style="width:10%" value="apply" disabled onclick="setStylesheet(this.form.css.value,\'testStyles\')">';
out+='<input type=button name=done style="width:10%" disabled value="done" onclick="this.form.css.value=\'\';\'none\'; this.form.elems.selectedIndex=0; this.form.apply.disabled=this.disabled=true"><br>';
out+='<textarea name=css rows=15 style="width:100%;height:15em;display:none"';
out+='		onkeyup="if (event.ctrlKey && event.keyCode==13)"></textarea>';
return out;

<<list all>>
<<tabs txtMoreTab "Missing" "Missing tiddlers" TabzMoreMissing "Orphans" "Orphaned tiddlers" TabzMoreOrphans "Shadowed" "Shadowed tiddlers" TabzMoreShadowed>>
<<list missing>>
<<list orphans>>
<<list shadowed>>
<<allTags excludeLists>>
|Author|Lyall Pearce|
|License|[[Creative Commons Attribution-Share Alike 3.0 License|]]|
|Overrides|store.getSaver().externalizeTiddler(), store.getTiddler() and store.getTiddlerText()|
|Description|Encrypt/Decrypt Tiddlers with a Password key|

* Tag a tiddler with Encrypt(prompt)
** Consider the 'prompt' something to help you remember the password with. If multiple tiddlers can be encrypted with the same 'prompt' and you will only be asked for the password once.
* Upon save, the Tiddler will be encrypted and the tag replaced with Decrypt(prompt).
** Failure to encrypt (by not entering a password) will leave the tiddler unencrypted and will leave the Encrypt(prompt) tag in place. This means that the next time you save, you will be asked for the password again.
** To have multiple tiddlers use the same password - simply use the same 'prompt'.
** Tiddlers that are encrypted may be automatically tagged 'excludeSearch' as there is no point in searching encrypted data - this is configurable by an option - you still may want to search the titles of encrypted tiddlers
** Tiddlers that are encrypted may be automatically tagged 'excludeLists', if you have them encrypted, you may also want to keep them 'hidden' - this is configurable by an option.
** Automatic removal of excludeLists and excludeSearch tags is performed, if the above two options are set, only if these two tags are the last 2 tags for a tiddler, if they are positioned somewhere else in the tags list, they will be left in place, meaning that the decrypted tiddler will not be searchable and/or will not appear in lists.
** Encrypted tiddlers are stored as displayable hex, to keep things visibly tidy, should you display an encrypted tiddler. There is nothing worse than seeing a pile of gobbledy gook on your screen. Additionally, the encrypted data is easily cut/paste/emailed if displayed in hex form.
* Tiddlers are decrypted only if you click the decrypt button or the decryptAll button, not when you load the TiddlyWiki
** If you don't display a tiddler, you won't have the option to decrypt it (unless you use the {{{<<EncryptionDecryptAll>>}}} macro)
** Tiddlers will re-encrypt automatically on save.
** Decryption of Tiddlers does not make your TiddlyWiki 'dirty' - you will not be asked to save if you leave the page.
* Errors are reported via diagnostic messages.
** Empty passwords, on save, will result in the tiddler being saved unencrypted - this should only occur with new tiddlers, decrypted tiddlers or with tiddlers who have had their 'prompt' tag changed.
** Encrypted tiddlers know if they are decrypted successfully - failure to decrypt a tiddler will ''not'' lose your data.
** Editing of an encrypted (that has not been unencrypted) tiddler will result in loss of that tiddler as the SHA1 checksums will no longer match, upon decryption. To this end, it is best that you do not check the option. You can, however edit an encrypted tiddler tag list - just do ''not'' change the tiddler contents.
** To change the password on a Tiddler, change the Encrypt('prompt') tag to a new prompt value, after decrypting the tiddler.
** You can edit the tags of an encrypted tiddler, so long as you do not edit the text.
** To change the password for all tiddlers of a particular prompt, use the {{{<<EncryptionChangePassword ["button text" ["tooltip text" ["prompt string" ["accessKey"]]]]>>}}} macro.
** To decrypt all tiddlers of a particular "prompt string", use the {{{<<EncryptionDecryptAll ["button text" ["tooltip text" ["prompt string" ["accessKey"]]]]>>}}} macro - this will make tiddlers encrypted with "prompt string" searchable - or prompt for all 'prompt strings', if none is supplied.
Useful Buttons: 
<<EncryptionChangePassword>> - Change passwords of encrypted tiddlers.
<<EncryptionDecryptAll>> - Decrypt ALL tiddlers - enables searching contents of encrypted tiddlers.
<<option chkExcludeEncryptedFromSearch>> - If set, Encrypted Tiddlers are excluded from searching by tagging with excludeSearch. If Clear, excludeSearch is not added and it is also removed from existing Encrypted Tiddlers only if it is the last Tag. Searching of Encrypted Tiddlers is only meaningful for the Title and Tags.
<<option chkExcludeEncryptedFromLists>> - If set, Encrypted Tiddlers are excluded from lists by tagging with excludeLists. If Clear, excludeLists is not added and it is also removed from existing Encrypted Tiddlers only if it is the last Tag. Preventing encrypted tiddlers from appearing in lists effectively hides them.
<<option chkShowDecryptButtonInContent>> - If set, Encrypted Tiddlers content is replaced by <<EncryptionDecryptThis>> button. This has consequences, in the current version as, if you edit the tiddler without decrypting it, you lose the contents.
!!!!!Revision History
* 3.2.1 - Returned the <<EncryptionDecryptThis>> button as an option.
* 3.2.0 - Ditched the 'Decrypt' button showing up in the tiddler contents if the tiddler is encrypted. It caused too much pain if you edit the tiddler without decrypting it - you lost your data as it was replaced by a Decrypt Macro call!  Additionally, a 'decrypt' button will now appear in the toolbar, just before the edit button, if the tiddler is encrypted. This button only appears if using core TiddlyWiki version 2.4 or above.
* 3.1.1 - Obscure bug whereby if an encrypted tiddler was a certain length, it would refuse to decrypt.
* 3.1.0 - When creating a new Encrypt(prompt) tiddler and you have not previously decrypted a tiddler with the same prompt, on save, you will be prompted for the password to encrypt the tiddler. Prior to encrypting, an attempt to decrypt all other tiddlers with the same prompt, is performed. If any tiddler fails to decrypt, the save is aborted - this is so you don't accidentally have 2 (or more!) passwords for the same prompt. Either you enter the correct password, change the prompt string and try re-saving or you cancel (and the tiddler is saved unencrypted).
* 3.0.1 - Allow Enter to be used for password entry, rather than having to press the OK button.
* 3.0.0 - Major revamp internally to support entry of passwords using forms such that passwords are no longer visible on entry. Completely backward compatible with old encrypted tiddlers. No more using the javascript prompt() function.
!!!!!Additional work

version.extensions.TiddlerEncryptionPlugin = {major: 3, minor: 2, revision: 1, date: new Date(2008,10,26)};

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

if(config.options.chkExcludeEncryptedFromSearch == undefined) config.options.chkExcludeEncryptedFromSearch = false;
if(config.options.chkExcludeEncryptedFromLists == undefined) config.options.chkExcludeEncryptedFromLists = false;
if(config.options.chkShowDecryptButtonInContent == undefined) config.options.chkShowDecryptButtonInContent = false;

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

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

config.macros.EncryptionDecryptThis = {};
config.macros.EncryptionDecryptThis.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
    var theButton = createTiddlyButton(place,
				       (params[0] && params[0].length > 0) ? params[0] : "Decrypt", 
				       (params[1] && params[1].length > 0) ? params[1] : "Decrypt this Tiddler", 
    if(params[2] && params[2].length > 0) {
	theButton.setAttribute("theTiddler", params[2]);
// toolbar button to decrypt tiddlers.
config.commands.decryptThis = {
  text: "decrypt",
  tooltip: "Decrypt this tiddler",
  isEnabled : function(tiddler) {
	// Only show decrypt button if tiddler is tagged as Decrypt(
	if(tiddler.tags.join().indexOf('Decrypt(') == -1)  {
	    return false;
	} else {
	    return true;
  handler: function(event, src, title) {
	return false; 
// core version 2.4 or above get a 'decrypt' button in the toolbar.
if(config.shadowTiddlers && config.shadowTiddlers.ToolbarCommands  && config.shadowTiddlers.ToolbarCommands.indexOf('decryptThis') == -1) {
    // put our toolbar button in before the edit button.
    // won't work if editTiddler is not the default item (prefixed with plus)
    config.shadowTiddlers.ToolbarCommands.replace(/\+editTiddler/,'decryptThis +editTiddler');

// Called by the EncryptionChangePassword macro/button
// Also invoked by the callback for password entry
function onClickEncryptionChangePassword(eventObject) {
    var promptString;
    if(!promptString && this.getAttribute) {
	promptString = this.getAttribute("promptString");
    // I do call this function directly
    if(!promptString && typeof(eventObject) == "string") {
	promptString = eventObject;
    if(!promptString) {
	promptString = prompt("Enter 'prompt string' to change password for:","");
    if(!promptString) {
    if(! config.encryptionPasswords[promptString]) {
	var changePasswordContext = {changePasswordPromptString: promptString,
				     callbackFunction: MyChangePasswordPromptCallback_TiddlerEncryptionPlugin};
	// Callback function will re-invoke this function

    // Decrypt ALL tiddlers for that prompt
    // Now ditch the cached password, this will force the re-request for the new password, on save.
    displayMessage("Save TiddlyWiki to set new password for '"+promptString+"'");
    config.encryptionPasswords[promptString] = null;
    // mark store as dirty so a save will be requrested.
// Called by the password entry form when the user clicks 'OK' button.
function MyChangePasswordPromptCallback_TiddlerEncryptionPlugin(context) {
    config.encryptionPasswords[context.passwordPrompt] = context.password;
// Called by the EncryptionDecryptThis macro/button
function onClickEncryptionDecryptThis() {
    var theTiddler = this.getAttribute("theTiddler");
    if(!theTiddler) {

function encryptionGetAndDecryptTiddler(title) {
    config.encryptionReEnterPasswords = true;
    try {
	theTiddler = store.getTiddler(title);
	config.encryptionReEnterPasswords = false;
    } catch (e) {
	if(e == "DecryptionFailed") {
	    displayMessage("Decryption failed");
    } // catch

// called by the EncryptionDecryptAlll macro/button
// Also called by the callback after the user clicks 'OK' button on the password entry form
function onClickEncryptionDecryptAll(eventObject) {
    var promptString;
    if(!promptString && this.getAttribute) {
	promptString = this.getAttribute("promptString");
    // I do call this function directly
    if(!promptString && typeof(eventObject) == "string") {
	promptString = eventObject;
    if(!promptString) {
	promptString = "";

    // Loop through all tiddlers, looking to see if there are any Decrypt(promptString) tagged tiddlers
    // If there are, check to see if their password has been cached.
    // If not, ask for the first one that is missing, that we find
    // the call back function will store that password then invoke this function again, 
    // which will repeat the whole process. If we find all passwords have been cached
    // then we will finally do the decryptAll functionality, which will then
    // be able to decrypt all the required tiddlers, without prompting.
    // We have to do this whole rigmarole because we are using a 'form' to enter the password
    // rather than the 'prompt()' function - which shows the value of the password.
    var tagToSearchFor="Decrypt("+promptString;
    config.encryptionReEnterPasswords = true; 
    var promptGenerated = false;
    store.forEachTiddler(function(store,tiddler) {
	    // Note, there is no way to stop the forEachTiddler iterations
	    if(!promptGenerated && tiddler && tiddler.tags) {
		for(var ix=0; ix<tiddler.tags.length && !promptGenerated; ix++) {
		    if(tiddler.tags[ix].indexOf(tagToSearchFor) == 0) {
			var tag = tiddler.tags[ix];
			var lastBracket=tag.lastIndexOf(")");
			if(lastBracket >= 0) {
			    // Ok, tagged with Encrypt(passwordPrompt)
			    // extract the passwordPrompt name
			    var passwordPromptString=tag.substring(8,lastBracket);
			    if(!config.encryptionPasswords[passwordPromptString]) {
				// no password cached, prompt and cache it, rather than decryptAll
				// callback from prompting form will resume decryptAll attempt.
				var decryptAllContext = {decryptAllPromptString: promptString,
							 callbackFunction: MyDecryptAllPromptCallback_TiddlerEncryptionPlugin};
				promptGenerated = true;
			    } // if(!config.encryptionPasswords
			} // if(lastBracket
		    } // if(tiddler.tags[ix]..
		} // for
	    } // if
	}); // store.forEachTiddler
    // If we get here, all passwords have been cached.
    if(!promptGenerated) {
	config.encryptionReEnterPasswords = false;
	// Now do the decrypt all functionality
	try {
	    store.forEachTiddler(function(store,tiddler) {
		    // Note, there is no way to stop the forEachTiddler iterations
		    if(tiddler && tiddler.tags) {
			for(var ix=0; ix<tiddler.tags.length; ix++) {
			    if(tiddler.tags[ix].indexOf(tagToSearchFor) == 0) {
				try {
				} catch (e) {
				    displayMessage("Decryption of '"+tiddler.title+"' failed.");
				    // throw e;
			    } // if(tiddler.tags
			} // for
		    } // if
		}); // store.forEachTiddler
	    displayMessage("All tiddlers" + (promptString != "" ? " for '"+promptString+"'" : "") + " have been decrypted");
	} catch (e) {
	    if(e == "DecryptionFailed") {
	} // catch

function MyDecryptAllPromptCallback_TiddlerEncryptionPlugin(context) {
    config.encryptionPasswords[context.passwordPrompt] = context.password;
    // restart the decryptAll process again after the user has entered a password.

saveChanges_TiddlerEncryptionPlugin = saveChanges;
saveChanges = function(onlyIfDirty,tiddlers) {
    // Loop through all tiddlers, looking to see if there are any Encrypt(string) tagged tiddlers
    // If there are, check to see if their password has been cached.
    // If not, ask for the first one that is missing, that we find
    // the call back function will store that password then invoke this function again, 
    // which will repeat the whole process. If we find all passwords have been cached
    // then we will finally call the original saveChanges() function, which will then
    // be able to save the tiddlers.
    // We have to do this whole rigmarole because we are using a 'form' to enter the password
    // rather than the 'prompt()' function - which shows the value of the password.
    config.encryptionReEnterPasswords = true; 
    var promptGenerated = false;
    store.forEachTiddler(function(store,tiddler) {
	    if(!promptGenerated && tiddler && tiddler.tags) {
		for(var ix=0; ix<tiddler.tags.length && !promptGenerated; ix++) {
		    if(tiddler.tags[ix].indexOf("Encrypt(") == 0) {
			var tag = tiddler.tags[ix];
			var lastBracket=tag.lastIndexOf(")");
			if(lastBracket >= 0) {
			    // Ok, tagged with Encrypt(passwordPrompt)
			    // extract the passwordPrompt name
			    var passwordPrompt=tag.substring(8,lastBracket);
			    if(!config.encryptionPasswords[passwordPrompt]) {
				// no password cached, prompt and cache it, rather than save
				var saveContext = {onlyIfDirty: onlyIfDirty, 
						   tiddlers: tiddlers, 
				                   callbackFunction: MySavePromptCallback_TiddlerEncryptionPlugin};
				promptGenerated = true;
			    } // if(!config.encryptionPasswords
			} // if(lastBracket
		    } // if(tiddler.tags[ix]..
		} // for
	    } // if
	}); // store.forEachTiddler
    // If we get here, all passwords have been cached.
    if(!promptGenerated) {
	config.encryptionReEnterPasswords = false;

function MySavePromptCallback_TiddlerEncryptionPlugin(context) {
    config.encryptionPasswords[context.passwordPrompt] = context.password;
    // validate the password entered by attempting to decrypt all tiddlers
    // with the same encryption prompt string.

    // restart the save process again
    saveChanges(context.onlyIfDirty, context.tiddlers);

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

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

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

store.getTiddler_TiddlerEncryptionPlugin = store.getTiddler;
store.getTiddler = function(title) {
    var tiddler = store.getTiddler_TiddlerEncryptionPlugin(title);
    if(tiddler) { // shadow tiddlers are not expected to be encrypted.
	try {
	    return CheckTiddlerForDecryption_TiddlerEncryptionPlugin(tiddler);
	} catch (e) {
	    if (config.options.chkShowDecryptButtonInContent == true) {
		if(e == "DecryptionFailed") {
		    var tiddler = store.getTiddler("DecryptionFailed");
		    if(!tiddler) {
			tiddler = new Tiddler();
				    "<<EncryptionDecryptThis \"Decrypt\" \"Decrypt this tiddler\" \""+title+"\">>",
		    return tiddler;
		} // if(e)
	} // catch
    } // if(tiddler) {
    return null;

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

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

function MyPromptCallback_TiddlerEncryptionPlugin(context) {
    if(context.callbackFunction) {
    } else {
	config.encryptionPasswords[context.passwordPrompt] = context.password;

function GetAndSetPasswordForPrompt_TiddlerEncryptionPlugin(promptString) {
    if(!config.encryptionPasswords[promptString]) {
	config.encryptionPasswords[promptString] = MyPrompt_TiddlerEncryptionPlugin(promptString, "");
    return config.encryptionPasswords[promptString]; // may be null, prompt can be cancelled.

function GetAndSetPasswordForPromptToDecrypt_TiddlerEncryptionPlugin(promptString) {
    if(config.encryptionReEnterPasswords) {
	return GetAndSetPasswordForPrompt_TiddlerEncryptionPlugin(promptString);
    } else {
	return config.encryptionPasswords[promptString];

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

function HexToString_TiddlerEncryptionPlugin(theString) {
    var theResult = "";
    for(var i=0; i<theString.length; i+=2) {
	if(theString.charAt(i) == "\n") {
	    i--;	// cause us to skip over the newline and resume
	theResult += String.fromCharCode(parseInt(theString.substr(i, 2),16));
    return theResult;
// Heavily leveraged from  Revision 5635
PasswordPrompt ={
  prompt : function(callback,context){
	if (!context) {
	    context = {};
	var box = createTiddlyElement(document.getElementById("contentWrapper"),'div','passwordPromptBox');
	box.innerHTML = store.getTiddlerText('PasswordPromptTemplate'); = 'absolute';;
	document.getElementById('promptDisplayField').value = context.passwordPrompt;
	var passwordInputField = document.getElementById('passwordInputField');
	passwordInputField.onkeyup = function(ev) {
	    var e = ev || window.event;
	    if(e.keyCode == 10 || e.keyCode == 13) { // Enter
		PasswordPrompt.submit(callback, context);
	document.getElementById('passwordPromptSubmitBtn').onclick = function(){PasswordPrompt.submit(callback,context);};
	document.getElementById('passwordPromptCancelBtn').onclick = function(){PasswordPrompt.cancel(callback,context);};
  center : function(el){
	var size = this.getsize(el); = (Math.round(findWindowWidth()/2) - (size.width /2) + findScrollX())+'px'; = (Math.round(findWindowHeight()/2) - (size.height /2) + findScrollY())+'px';
  getsize : function (el){
	var x = {};
	x.width = el.offsetWidth ||;
	x.height = el.offsetHeight ||;
	return x;
  submit : function(cb,context){
	context.passwordPrompt = document.getElementById('promptDisplayField').value;
	context.password = document.getElementById('passwordInputField').value;
	var box = document.getElementById('passwordPromptBox');
	return false;

  cancel : function(cb,context){
	var box = document.getElementById('passwordPromptBox');
	return false;
  setStyles : function(){
	    "#passwordPromptBox dd.submit {margin-left:0; font-weight: bold; margin-top:1em;}\n"+
	    "#passwordPromptBox dd.submit .button {padding:0.5em 1em; border:1px solid #ccc;}\n"+
	    "#passwordPromptBox dt.heading {margin-bottom:0.5em; font-size:1.2em;}\n"+
	    "#passwordPromptBox {border:1px solid #ccc;background-color: #eee;padding:1em 2em;}",'passwordPromptStyles');
  template : '<form action="" onsubmit="return false;" id="passwordPromptForm">\n'+
  '    <dl>\n'+
  '        <dt class="heading">Please enter the password:</dt>\n'+
  '        <dt>Prompt:</dt>\n'+
  '        <dd><input type="text" readonly id="promptDisplayField" class="display"/></dd>\n'+
  '        <dt>Password:</dt>\n'+
  '        <dd><input type="password" tabindex="1" class="input" id="passwordInputField"/></dd>\n'+
  '        <dd class="submit">\n'+
  '            <a tabindex="2" href="javascript:;" class="button" id="passwordPromptSubmitBtn">OK</a>\n'+
  '            <a tabindex="3" href="javascript:;" class="button" id="passwordPromptCancelBtn">Cancel</a>\n'+
  '        </dd>\n'+
  '    </dl>\n'+
  init : function(){
	config.shadowTiddlers.PasswordPromptTemplate = this.template;

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

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

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

    var ciphertext = longsToStr(v);

    return escCtrlCh(ciphertext);

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

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

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

    var plaintext = longsToStr(v);

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

    return unescape(plaintext);

// supporting functions

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

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

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

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

|Author|Eric Shulman - ELS Design Studios|
|License| <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|]]|
|Description|select multiple tiddlers and modify author, created, modified and/or tag values|
~TiddlerTweaker is a tool for TiddlyWiki authors.  It allows you to select multiple tiddlers from a listbox, either by direct interaction or automatically matching specific criteria.  You can then modify the creator, author, created, modified and/or tag values of those tiddlers using a compact set of form fields.  The values you enter into the fields simultantously overwrite the existing values in all tiddlers you have selected.
By default, any tags you enter into the TiddlerTweaker will //replace// the existing tags in all the tiddlers you have selected.  However, you can also use TiddlerTweaker to quickly filter specified tags from the selected tiddlers, while leaving any other tags assigned to those tiddlers unchanged:
>Any tag preceded by a "+" (plus) or "-" (minus), will be added or removed from the existing tags //instead of replacing the entire tag definition// of each tiddler (e.g., enter "-excludeLists" to remove that tag from all selected tiddlers.  When using this syntax, care should be taken to ensure that //every// tag is preceded by "+" or "-", to avoid inadvertently overwriting any other existing tags on the selected tiddlers.  (note: the "+" or "-" prefix on each tag value is NOT part of the tag value, and is only used by TiddlerTweaker to control how that tag value is processed)
Important Notes:
* Inasmuch as TiddlerTweaker is a 'power user' tool that can perform 'batch' functions (operating on many tiddlers at once), you should always have a recent backup of your document (or "save changes" just *before* tweaking the tiddlers), just in case you "shoot yourself in the foot".
* By design, TiddlerTweaker does NOT update the 'modified' date of tiddlers simply by making changes to the tiddler's values.  A tiddler's dates are ONLY updated when the corresponding 'created' and/or 'modified' checkboxes are selected and you enter new values for those dates.  As a general rule, after using TiddlerTweaker, always ''//remember to save your document//'' when you are done, even though the tiddler timeline tab may not show any recently modified tiddlers.
* Because you may be changing the values on many tiddlers simultaneously, selecting and updating all tiddlers in a document operation may take a while and your browser might warn about an "unresponsive script"... you should give it a whole bunch of time to 'continue'... it should complete the processing... eventually.
2009.03.30 [2.4.0] added 'sort by modifier'
2009.01.22 [2.3.0] added support for text pattern find/replace
2008.10.27 [2.2.3] in setTiddlers(), fixed Safari bug by replacing static Array.concat(...) with new Array().concat(...)
2008.09.07 [2.2.2] added removeCookie() function for compatibility with [[CookieManagerPlugin]]
2008.05.12 [2.2.1] replace built-in backstage "tweak" task with tiddler tweaker control panel (moved from BackstageTweaks)
2008.01.13 [2.2.0] added "auto-selection" links: all, changed, tags, title, text
2007.12.26 [2.1.0] added support for managing 'creator' custom field (see [[CoreTweaks]])
2007.11.01 [2.0.3] added config.options.txtTweakerSortBy for cookie-based persistence of list display order preference setting.
2007.09.28 [2.0.2] in settiddlers() and deltiddlers(), added suspend/resume notification handling (improves performance when operating on multiple tiddlers)
2007.08.03 [2.0.1] added shadow definition for [[TiddlerTweaker]] tiddler for use as parameter references with {{{<<tiddler>>, <<slider>> or <<tabs>>}}} macros.
2007.08.03 [2.0.0] converted from inline script
2006.01.01 [1.0.0] initial release
version.extensions.TiddlerTweakerPlugin= {major: 2, minor: 4, revision: 0, date: new Date(2009,1,22)};

// shadow tiddler

/// backstage task
if (config.tasks) { // for TW2.2b3 or above
	config.tasks.tweak.tooltip="review/modify tiddler internals: dates, authors, tags, etc.";
	config.tasks.tweak.content="{{smallform small groupbox{<<tiddlerTweaker>>}}}";

if (config.options.txtTweakerSortBy==undefined) config.options.txtTweakerSortBy="modified";

// if removeCookie() function is not defined by TW core, define it here.
if (window.removeCookie===undefined) {
	window.removeCookie=function(name) {
		document.cookie = name+'=; expires=Thu, 01-Jan-1970 00:00:01 UTC; path=/;'; 

config.macros.tiddlerTweaker = {
	html: '<form style="display:inline"><!--\
		--><table style="padding:0;margin:0;border:0;width:100%"><tr valign="top" style="padding:0;margin:0;border:0"><!--\
		--><td style="text-align:center;white-space:nowrap;width:99%;padding:0;margin:0;border:0"><!--\
			--><font size=-2><div style="text-align:left;"><span style="float:right"><!--\
			-->&nbsp; <a href="javascript:;" \
				title="select all tiddlers"\
				var f=this; while (f&&f.nodeName.toLowerCase()!=\'form\')f=f.parentNode;\
				for (var t=0; t<f.list.options.length; t++)\
					if (f.list.options[t].value.length) f.list.options[t].selected=true;\
				return false">all</a><!--\
			-->&nbsp; <a href="javascript:;" \
				title="select tiddlers that are new/changed since the last file save"\
				var lastmod=new Date(document.lastModified);\
				var f=this; while (f&&f.nodeName.toLowerCase()!=\'form\')f=f.parentNode;\
				for (var t=0; t<f.list.options.length; t++) {\
					var tid=store.getTiddler(f.list.options[t].value);\
				return false">changed</a><!--\
			-->&nbsp; <a href="javascript:;" \
				title="select tiddlers with at least one matching tag"\
				var t=prompt(\'Enter space-separated tags (match ONE)\');\
				if (!t||!t.length) return false;\
				var tags=t.readBracketedList();\
				var f=this; while (f&&f.nodeName.toLowerCase()!=\'form\')f=f.parentNode;\
				for (var t=0; t<f.list.options.length; t++) {\
					var tid=store.getTiddler(f.list.options[t].value);\
					if (tid&&tid.tags.containsAny(tags)) f.list.options[t].selected=true;\
				return false">tags</a><!--\
			-->&nbsp; <a href="javascript:;" \
				title="select tiddlers whose titles include matching text"\
				var txt=prompt(\'Enter a title (or portion of a title) to match\');\
				if (!txt||!txt.length) return false;\
				var f=this; while (f&&f.nodeName.toLowerCase()!=\'form\')f=f.parentNode;\
				for (var t=0; t<f.list.options.length; t++) {\
				return false">titles</a><!--\
			-->&nbsp; <a href="javascript:;" \
				title="select tiddlers containing matching text"\
				var txt=prompt(\'Enter tiddler text (content) to match\');\
				if (!txt||!txt.length) return false;\
				var f=this; while (f&&f.nodeName.toLowerCase()!=\'form\')f=f.parentNode;\
				for (var t=0; t<f.list.options.length; t++) {\
					var tt=store.getTiddlerText(f.list.options[t].value,\'\');\
				return false">text</a> &nbsp;<!--\
			--></span><span>select tiddlers</span><!--\
			--></font><select multiple name=list size="11" style="width:99.99%" \
				title="use click, shift-click and/or ctrl-click to select multiple tiddler titles" \
				onclick="config.macros.tiddlerTweaker.selecttiddlers(this)" \
			-->show<input type=text size=1 value="11" \
				onchange="this.form.list.size=this.value; this.form.list.multiple=(this.value>1);"><!--\
			--><select name=sortby size=1 \
			--><option value="title">title</option><!--\
			--><option value="size">size</option><!--\
			--><option value="modified">modified</option><!--\
			--><option value="created">created</option><!--\
			--><option value="modifier">modifier</option><!--\
			--><input type="button" value="refresh" \
			--> <input type="button" name="stats" disabled value="totals..." \
		--></td><td style="white-space:nowrap;padding:0;margin:0;border:0;width:1%"><!--\
			--><div style="text-align:left"><font size=-2>&nbsp;modify values</font></div><!--\
			--><table border=0 style="width:100%;padding:0;margin:0;border:0;"><tr style="padding:0;border:0;"><!--\
			--><td style="padding:1px;border:0;white-space:nowrap"><!--\
				--><input type=checkbox name=settitle unchecked \
					title="allow changes to tiddler title (rename tiddler)" \
			--></td><td style="padding:1px;border:0;white-space:nowrap"><!--\
				--><input type=text name=title size=35 style="width:98%" disabled><!--\
			--></td></tr><tr style="padding:0;border:0;"><td style="padding:1px;border:0;white-space:nowrap"><!--\
				--><input type=checkbox name=setcreator unchecked \
					title="allow changes to tiddler creator" \
					onclick="this.form.creator.disabled=!this.checked">created by<!--\
			--></td><td style="padding:1px;border:0;white-space:nowrap"><!--\
				--><input type=text name=creator size=35 style="width:98%" disabled><!--\
			--></td></tr><tr style="padding:0;border:0;"><td style="padding:1px;border:0;white-space:nowrap"><!--\
				--><input type=checkbox name=setwho unchecked \
					title="allow changes to tiddler author" \
					onclick="this.form.who.disabled=!this.checked">modified by<!--\
			--></td><td style="padding:1px;border:0;white-space:nowrap"><!--\
				--><input type=text name=who size=35 style="width:98%" disabled><!--\
			--></td></tr><tr style="padding:0;border:0;"><td style="padding:1px;border:0;white-space:nowrap"><!--\
				--><input type=checkbox name=setcdate unchecked \
					title="allow changes to created date" \
					onclick="var f=this.form;!this.checked"><!--\
				-->created on<!--\
			--></td><td style="padding:1px;border:0;white-space:nowrap"><!--\
				--><input type=text name=cm size=2 style="width:2em;padding:0;text-align:center" disabled><!--\
				--> / <input type=text name=cd size=2 style="width:2em;padding:0;text-align:center" disabled><!--\
				--> / <input type=text name=cy size=4 style="width:3em;padding:0;text-align:center" disabled><!--\
				--> at <input type=text name=ch size=2 style="width:2em;padding:0;text-align:center" disabled><!--\
				--> : <input type=text name=cn size=2 style="width:2em;padding:0;text-align:center" disabled><!--\
			--></td></tr><tr style="padding:0;border:0;"><td style="padding:1px;border:0;white-space:nowrap"><!--\
				--><input type=checkbox name=setmdate unchecked \
					title="allow changes to modified date" \
					onclick="var f=this.form;!this.checked"><!--\
				-->modified on<!--\
			--></td><td style="padding:1px;border:0;white-space:nowrap"><!--\
				--><input type=text name=mm size=2 style="width:2em;padding:0;text-align:center" disabled><!--\
				--> / <input type=text name=md size=2 style="width:2em;padding:0;text-align:center" disabled><!--\
				--> / <input type=text name=my size=4 style="width:3em;padding:0;text-align:center" disabled><!--\
				--> at <input type=text name=mh size=2 style="width:2em;padding:0;text-align:center" disabled><!--\
				--> : <input type=text name=mn size=2 style="width:2em;padding:0;text-align:center" disabled><!--\
			--></td></tr><tr style="padding:0;border:0;"><td style="padding:1px;border:0;white-space:nowrap"><!--\
				--><input type=checkbox name=replacetext unchecked\
					title="find/replace matching text" \
					onclick="this.form.pattern.disabled=this.form.replacement.disabled=!this.checked">replace text<!--\
			--></td><td style="padding:1px;border:0;white-space:nowrap"><!--\
				--><input type=text name=pattern size=15 value="" style="width:40%" disabled \
					title="enter TEXT PATTERN (regular expression)"> with <!--\
				--><input type=text name=replacement size=15 value="" style="width:40%" disabled \
					title="enter REPLACEMENT TEXT"><!--\
			--></td></tr><tr style="padding:0;border:0;"><td style="padding:1px;border:0;white-space:nowrap"><!--\
				--><input type=checkbox name=settags checked \
					title="allow changes to tiddler tags" \
			--></td><td style="padding:1px;border:0;white-space:nowrap"><!--\
				--><input type=text name=tags size=35 value="" style="width:98%" \
					title="enter new tags or use \'+tag\' and \'-tag\' to add/remove tags from existing tags"><!--\
			--><div style="text-align:center"><!--\
			--><nobr><input type=button name=display disabled style="width:32%" value="display tiddlers" \
			--> <input type=button name=del disabled style="width:32%" value="delete tiddlers" \
			--> <input type=button name=set disabled style="width:32%" value="update tiddlers" \
		--></form><span style="display:none"><!--content replaced by tiddler "stats"--></span>\
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var span=createTiddlyElement(place,"span");
	init: function(f,sortby) { // initialize form controls
		if (!f) return; // form might not be rendered yet...
		while (f.list.options[0]) f.list.options[0]=null; // empty current list content
		var tids=store.getTiddlers(sortby);
		if (sortby=='size') // descending order
			tids.sort(function(a,b) {return a.text.length > b.text.length ? -1 : (a.text.length == b.text.length ? 0 : +1);});
		var who='';
		for (i=0; i<tids.length; i++) { var t=tids[i];
			var label=t.title; var value=t.title;
			switch (sortby) {
				case 'modified':
				case 'created':
					var t=tids[tids.length-i-1]; // reverse order
					var when=t[sortby].formatString('YY.0MM.0DD 0hh:0mm ');
				case 'size':
					label='['+t.text.length+'] '+label;
				case 'modifier':
				case 'creator':
					if (who!=t[sortby]) {
						f.list.options[f.list.length]=new Option('by '+who+':','',false,false);
					label='\xa0\xa0\xa0'+label; // indent
			f.list.options[f.list.length]=new Option(label,value,false,false);
		config.options.txtTweakerSortBy=sortby; // remember current setting
		f.sortby.value=sortby; // sync droplist selection with current setting
		if (sortby!="modified") // non-default preference... save cookie
		else removeCookie("txtTweakerSortBy"); // default preference... clear cookie
	selecttiddlers: function(here) { // enable/disable tweaker fields based on number of items selected
		// count how many tiddlers are selected
		var f=here.form; var list=f.list;
		var c=0; for (i=0;i<list.length;i++) if (list.options[i].selected) c++;
		if (c>1) f.title.disabled=true;
		if (c>1) f.settitle.checked=false;
		var msg=(c==0)?'select tiddlers':(c+' tiddler'+(c!=1?'s':'')+' selected');
		if (c) clearMessage(); else displayMessage("no tiddlers selected");
	setfields: function(here) { // set tweaker edit fields from first selected tiddler
		var f=here.form;
		if (!here.value.length) {
		var tid=store.getTiddler(here.value); if (!tid) return;
		f.creator.value=tid.fields['creator']||''; // custom field - might not exist
		f.tags.value=tid.tags.join(' ');
		var c=tid.created; var m=tid.modified;;;;;;;;;;;
	settiddlers: function(here) {
		var f=here.form; var list=f.list;
		var tids=[];
		for (i=0;i<list.length;i++) if (list.options[i].selected) tids.push(list.options[i].value);
		if (!tids.length) { alert("please select at least one tiddler"); return; }
		var cdate=new Date(,,,,;
		var mdate=new Date(,,,,;
		if (tids.length>1 && !confirm("Are you sure you want to update these tiddlers:\n\n"+tids.join(', '))) return;
		for (t=0;t<tids.length;t++) {
			var tid=store.getTiddler(tids[t]); if (!tid) continue;
			var title=!f.settitle.checked?tid.title:f.title.value;
			var who=!f.setwho.checked?tid.modifier:f.who.value;
			var text=tid.text;
			if (f.replacetext.checked) text=text.replace(new RegExp(f.pattern.value,'mg'),f.replacement.value);
			var tags=tid.tags;
			if (f.settags.checked) { 
				var intags=f.tags.value.readBracketedList();
				var addtags=[]; var deltags=[]; var reptags=[];
				for (i=0;i<intags.length;i++) {
					if (intags[i].substr(0,1)=='+')
					else if (intags[i].substr(0,1)=='-')
				if (reptags.length)
				if (addtags.length)
					tags=new Array().concat(tags,addtags);
				if (deltags.length)
					for (i=0;i<deltags.length;i++)
						{ var pos=tags.indexOf(deltags[i]); if (pos!=-1) tags.splice(pos,1); }
			if (!f.setcdate.checked) cdate=tid.created;
			if (!f.setmdate.checked) mdate=tid.modified;
			if (f.setcreator.checked) store.setValue(tid.title,'creator',f.creator.value); // set creator
			if (f.setcdate.checked) tid.assign(null,null,null,null,null,cdate); // set create date
	displaytiddlers: function(here) {
		var f=here.form; var list=f.list;
		var tids=[];
		for (i=0; i<list.length;i++) if (list.options[i].selected) tids.push(list.options[i].value);
		if (!tids.length) { alert("please select at least one tiddler"); return; }
	deltiddlers: function(here) {
		var f=here.form; var list=f.list;
		var tids=[];
		for (i=0;i<list.length;i++) if (list.options[i].selected) tids.push(list.options[i].value);
		if (!tids.length) { alert("please select at least one tiddler"); return; }
		if (!confirm("Are you sure you want to delete these tiddlers:\n\n"+tids.join(', '))) return;
		for (t=0;t<tids.length;t++) {
			var tid=store.getTiddler(tids[t]); if (!tid) continue;
			if (tid.tags.contains("systemConfig"))
				if (!confirm("'"+tid.title+"' is tagged with 'systemConfig'.\n\nRemoving this tiddler may cause unexpected results.  Are you sure?"))
	stats: function(here) {
		var f=here.form; var list=f.list; var tids=[]; var out=''; var tot=0;
		var target=f.nextSibling;
		for (i=0;i<list.length;i++) if (list.options[i].selected) tids.push(list.options[i].value);
		if (!tids.length) { alert("please select at least one tiddler"); return; }
		for (t=0;t<tids.length;t++) {
			var tid=store.getTiddler(tids[t]); if (!tid) continue;
			out+='[['+tid.title+']] '+tid.text.length+'\n'; tot+=tid.text.length;
		var avg=tot/tids.length;
		out=tot+' bytes in '+tids.length+' selected tiddlers ('+avg+' bytes/tiddler)\n<<<\n'+out+'<<<\n';
		target.innerHTML="<hr><font size=-2><a href='javascript:;' style='float:right' "
|Author|Eric Shulman - ELS Design Studios|
|License| <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|]]|
|Description|show/hide right sidebar (MainMenu)|

Usage: <<tiddler ToggleRightSidebar with: "label">>

Config settings:
	config.options.chkShowRightSidebar (true)
	config.options.txtToggleRightSideBarLabelShow ("show sidebar")
	config.options.txtToggleRightSideBarLabelHide ("hide sidebar")

%/<script label="$1" title="show/hide right sidebar content">
	var co=config.options;
	if (co.chkShowRightSidebar=='undefined') co.chkShowRightSidebar=true;
	var sb=document.getElementById('sidebar'); if (!sb) return;'block':'none';
	var labelShow=co.txtToggleRightSideBarLabelShow||'&#x25C4;';
	var labelHide=co.txtToggleRightSideBarLabelHide||'&#x25BA;';
	if (typeof(place)!='undefined' && '$1'=='$'+'1') {
		place.title=(co.chkShowRightSidebar?'hide':'show')+' right sidebar';
	var sm=document.getElementById('storyMenu'); if (sm) config.refreshers.content(sm);
	var co=config.options;
	if (co.chkShowRightSidebar=='undefined') co.chkShowRightSidebar=true;
	var sb=document.getElementById('sidebar'); if (!sb) return;'block':'none';
	if ('$1'=='$'+'1') {
		var labelShow=co.txtToggleRightSideBarLabelShow||'&#x25C4;';
		var labelHide=co.txtToggleRightSideBarLabelHide||'&#x25BA;';
		place.lastChild.title=(co.chkShowRightSidebar?'hide':'show')+' right sidebar';
|Author|Morris Gray|
VersionScript creates a new number each time it is rendered consisting of the number of the day of the year, two digit year and 24 hour minute and second
         var tiddlers=store.getTiddlers("modified");
         var last=tiddlers[tiddlers.length-1];
         var when=last.modified.formatString("DDth of MMM, YYYY");
         return " "+when
<div macro="showWhen readOnly">
	<!-- cut-down toolbar for web users -->
<div macro="hideWhen readOnly">
	<!-- regular toolbar for me  -->
  	<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='viewer' macro='view text wikified'></div>
The term voice-over refers to a production technique where a [[non-diegetic|Non-Diegetic Sound]] voice is broadcast live or pre-recorded in radio, television, film, theatre and/or presentation.
The voice-over may be spoken by someone who also appears on-screen in other segments or it may be performed by a specialist voice actor.

Voice-over is also commonly referred to as &ldquo;off camera&rdquo; commentary.
Film sound slang for the sound of a group of people talking, also called "Loop Group".
"Group walla" is when a number of actors will create background crowd sounds in a studio against edited picture.
Walla was a nonsense word that used to be spoken by film extras to create ambient crowd sound, without anything discernable actually being said.
Just to introduce myself to you.

I am a professional sound engineer.

Since the late eighties, when I started playing keys and got involved in audio engineering, sound became an inseparable part of my life. Sound in all its forms and varieties. Sound in [[cinema|Post-Production]], [[music|Music]], video games and many other creative design expressions. Meanwhile I have an extensive expertise built up, mainly focused on cinema and TV post-production and – to a lesser extent – music.

Apart from my own studio facilities I closely cooperate with some well-known and advanced design studios, thus having full access to nearly all state-of-the-art equipment.
Read about the services I can provide you and the [[projects|Projects]] I've worked on.
Also, you can read about my professional background and education under [[résumé|Resume]].

Feel free to [[contact|Contact]] me anytime. I’ll be happy to help you.<script>config.options.txtSelectedMenuItem = "1";refreshDisplay();</script>
A recording of [[dialogue|Dialogue Editing]] or [[sound effects|Sound Effects]] on the set of a film, but without the camera running.
Wild tracks are frequently used to get a clean recording that was otherwise unobtainable because of the noise on the set, like:
#camera noise
#director's instructions
#radio mic. noise
footertext{Latest update: <<tiddler Version>>[[ - |Admin]]<<QOTD Quotations noclick inline 60000>>
	if (config.options.txtSelectedMenuItem == "1") 

	if (config.options.txtSelectedMenuItem == "5") 

	if (config.options.txtSelectedMenuItem == "2") 

	if (config.options.txtSelectedMenuItem == "3") 

	if (config.options.txtSelectedMenuItem == "4") 

	if (config.options.txtSelectedMenuItem == "6") 

	if (config.options.txtSelectedMenuItem == "7") 

	if (config.options.txtSelectedMenuItem == "8") 

	return output;
config.messages.tiddlerLinkTooltip = "";
config.options.chkRegExpSearch = false; // default false
config.options.chkCaseSensitiveSearch = false; // default false
config.options.chkAnimate = false; // default true
config.options.chkSaveBackups = true; // default true
config.options.chkAutoSave = false; // default false
config.options.chkGenerateAnRssFeed = true; // default false
config.options.chkSaveEmptyTemplate = false; // default false
config.options.chkOpenInNewWindow = true; // default true	
config.options.chkToggleLinks = false; // default false
config.options.chkHttpReadOnly = true; // default true
config.options.chkForceMinorUpdate = false; // default false
config.options.chkConfirmDelete = true; // default true
config.options.chkInsertTabs = true; // default false
config.options.txtBackupFolder = "backups"; // default ""
config.options.txtMainTab = "tabTimeline"; // default "tabTimeline"
config.options.txtMoreTab = "moreTabAll"; // default "moreTabAll"
config.options.txtMaxEditRows = "30"; // default "30"
config.options.chkExcludeEncryptedFromSearch = true;
config.options.chkExcludeEncryptedFromLists = true;
config.options.chkShowDecryptButtonInContent = true;
config.options.chkSinglePageMode = true;	
config.options.chkSinglePagePermalink = true;
config.options.chkTopOfPageMode = true; // Open tiddlers at the top of the page
config.options.chkBottomOfPageMode	 = false; // Open tiddlers at the bottom of the page
config.options.chkSinglePageAutoScroll = true; // Automatically scroll tiddler into view (if needed)
config.options.chkShowRightSidebar = false;
config.options.txtToggleRightSideBarLabelShow = " ";
config.options.txtToggleRightSideBarLabelHide = " ";
config.options.chkFramedLinks = false;
config.options.chkFramedLinksTag = true;
config.options.txtFramedLinksTag = "iFrameLinks";
config.options.txtFrameWidth = "100%";
config.options.txtFrameHeight = "100%";
/* DisableWikiLinks settings */
config.options.chkDisableNonExistingWikiLinks = true;
config.options.chkDisableWikiLinks = true;
config.options.chkAllowLinksFromShadowTiddlers = true;
/* Custom settings */ 
config.options.txtSelectedMenuItem = "Welcome";
readOnly = false;
showBackstage = false;
if(config.options.txtUserName != "AdminMFG") {
	readOnly = true;
	showBackstage = false;