Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

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

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which use a logographic writing system and 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;}

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

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

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

----
Also see AdvancedOptions
The Cognitive Apprenticeship Learning Model

!The apprenticeship paradigm

Instructional methodology: modeling, coaching, and fading

Apprentices are inducted into a community of expert practice

!Principles
	
#Work is the driving force. The progressive mastering of tasks by apprentices is appreciated not as a step towards a distant, symbolic goal (such as a certificate), but for its immediate value in getting the work done. 
#Apprentices start with skills that are relatively easy and where mistakes are least costly. 
#Learning is focused on bodily performance. It involves the ability to do rather than the ability to talk about something. 
#Standards of performance are embedded in the work environment. What constitutes expert execution of a task is obvious, and judgments about the learner's competence emerge naturally and continuously in the context of the work. The apprentice "owns the problem" of moving on to the acquisition of the next skill.
#Teachers and teaching are largely invisible. In apprenticeship learning-and informal job training in American workplaces-it looks as though little teaching is going on. Whatever instruction the apprentice receives, originates not from a teacher teaching, but from a worker doing his or her work that the apprentice observes.

!Components
	
The components of the model that have to be considered are:

*content
*methods
*sequence
*sociology

!!Content
	
The content that schools usually exclusively focus on are the concepts, facts and procedures of a ‘subject’ or knowledge domain. To operate effectively in any setting, however, students also need three other types of content: 

#"Tricks of the trade"-problem-solving strategies that experts pick up with experience.
#Cognitive management strategies-goal setting, strategic planning, monitoring, evaluation, and revision.
#Learning strategies-knowing how to learn, including exploring new fields, getting more knowledge in a familiar subject, and reconfiguring knowledge already possessed.

!!Methodology

The teaching methodology consists of the following stages:
#model - step through the complete  task or solve the complete problem while verbalising the external and internal processes
#coach- offer hints, provide feedback and reminders
#provide "scaffolding"-start of with the simple aspects while providing support and gradually allowing support for learners as they learn to carry out tasks
#fade-gradually hand over control of the learning process to the learner

!!Sequence

The learning sequence is as follows:

#start with the simple building block skills
#cluster skills into more meaningful performance
#introduce advanced techniques
#introduce variations, complications and alternative contexts to mimic real life
#allow for practice

!!Sociology
	
The sociology of this approach is to avoid the 'learner alone' context. Instead:

#Try to reproduce the real work environment of team members, customers, bosses, suppliers
#Require co-operation, conflicting demands, adjustments to goals

!Sources

Collins, A., Brown, J.S. & Newman, S.E. (1989)      Cognitive apprenticeship: Teaching the craft of reading,  writing and mathematics. In L.B. Resnick (Ed.), Knowing, learning, and instruction: Essays in honor of Robert Glaser. Hillsdale, NJ:  Erlbaum - Collins, Brown, & Newman, 1989  

Berryman, Sue E, undated. Designing effective learning environment: [[Cognitive Apprenticeship Models /^|http://www.ilt.columbia.edu/Publications/papers/berry1.html]]
<<foldHeadings closed>>
Communities of practice are formed by people who engage in a process of collective learning in a shared domain of human endeavor: a tribe learning to survive, a band of artists seeking new forms of expression, a group of engineers working on similar problems, a clique of pupils defining their identity in the school, a network of surgeons exploring novel techniques, a gathering of first-time managers helping each other cope. In a nutshell:

Communities of practice are groups of people who share a concern or a passion for something they do and learn how to do it better as they interact regularly.

Note that this definition allows for, but does not assume, intentionality: learning can be the reason the community comes together or an incidental outcome of member's interactions. Not everything called a community is a community of practice. A neighborhood for instance, is often called a community, but is usually not a community of practice. Three characteristics are crucial:

   1. The domain:
      A community of practice is not merely a club of friends or a network of connections between people. It has an identity defined by a shared domain of interest. Membership therefore implies a commitment to the domain, and therefore a shared competence that distinguishes members from other people. (You could belong to the same network as someone and never know it.) The domain is not necessarily something recognized as "expertise" outside the community. A youth gang may have developed all sorts of ways of dealing with their domain: surviving on the street and maintaining some kind of identity they can live with. They value their collective competence and learn from each other, even though few people outside the group may value or even recognize their expertise.
   2. The community:
      In pursuing their interest in their domain, members engage in joint activities and discussions, help each other, and share information. They build relationships that enable them to learn from each other. A website in itself is not a community of practice. Having the same job or the same title does not make for a community of practice unless members interact and learn together. The claims processors in a large insurance company or students in American high schools may have much in common, yet unless they interact and learn together, they do not form a community of practice. But members of a community of practice do not necessarily work together on a daily basis. The Impressionists, for instance, used to meet in cafes and studios to discuss the style of painting they were inventing together. These interactions were essential to making them a community of practice even though they often painted alone.
   3. The practice:
      A community of practice is not merely a community of interest--people who like certain kinds of movies, for instance. Members of a community of practice are practitioners. They develop a shared repertoire of resources: experiences, stories, tools, ways of addressing recurring problems—in short a shared practice. This takes time and sustained interaction. A good conversation with a stranger on an airplane may give you all sorts of interesting insights, but it does not in itself make for a community of practice. The development of a shared practice may be more or less self-conscious. The "windshield wipers" engineers at an auto manufacturer make a concerted effort to collect and document the tricks and lessons they have learned into a knowledge base. By contrast, nurses who meet regularly for lunch in a hospital cafeteria may not realize that their lunch discussions are one of their main sources of knowledge about how to care for patients. Still, in the course of all these conversations, they have developed a set of stories and cases that have become a shared repertoire for their practice. 

It is the combination of these three elements that constitutes a community of practice. And it is by developing these three elements in parallel that one cultivates such a community.

What do communities of practice look like?

Communities develop their practice through a variety of activities. The following table provides a few typical examples:

Problem solving
	

"Can we work on this design and brainstorm some ideas; I’m stuck."

Requests for information
	

"Where can I find the code to connect to the server?"

Seeking experience
	

"Has anyone dealt with a customer in this situation?"

Reusing assets
	

"I have a proposal for a local area network I wrote for a client last year. I can send it to you and you can easily tweak it for this new client."

Coordination and synergy
	

"Can we combine our purchases of solvent to achieve bulk discounts?"

Discussing developments
	

"What do you think of the new CAD system? Does it really help?"

Documentation projects
	

"We have faced this problem five times now. Let us write it down once and for all."

Visits
	

"Can we come and see your after-school program? We need to establish one in our city."

Mapping knowledge and identifying gaps
	

"Who knows what, and what are we missing? What other groups should we connect with?"
[[Skills Development]]
Dreyfus discusses these levels in terms of two concepts described by Merleau-Ponty

>The levels are determined by two central concepts in Merleau-Ponty’s Phenomenology of Perception : the intentional arc and the tendency toward achieving a maximal grip.  The intentional arc names the tight connection between the agent and the world, viz. that, as the agent acquires skills, these skills are “stored”, not as representations in the mind, but as more and more refined dispositions to respond to the solicitations of more and more refined perceptions of the current situation. Maximum grip names the body’s tendency to respond to these solicitations in such a way as to bring the current situation closer to the agent’s sense of an optimal gestalt.



!Novice
Receives instruction: 
1.	Context-free features of a decomposed task environment so that the novice can recognise without the benefit of experience in the task domain
2.	Rules for determining actions on the basis of these features
''Examples''
Learner driver: this the speedometer, gear lever, clutch. Change to 2nd gear when the needle reaches 20 km/h
Chess player: these are the pieces and this is the numerical value for each type of piece. Exchange in the total value of pieces captured exceeds the value of pieces lost. Then rule that when there is no advantage in exchange, seek control of the centre of the board.
!Advanced beginner
Begins to notice, with instructors help additional cues from the environment:
1.	After seeing sufficient examples learners to recognise them
2.	Instructional maxims are now presented to summarise these contextual cues
3.	Combines context free-rules and contextual rules to increase level of performance
''Examples''
Learner driver: Combines speedometer and the sound of the engine to shift gears. Learns to distinguish between a drunken driver and an impatient one. Experiences replace words as the medium of learning.
Chess player: Recognises over-extended positions, how to avoid them. Recognises weakness in positions, even though these can’t easily be formalised into rules.

!Competence
As experience yields more and more information so the number potentially relevant data sets the learner, but what is important or relevant is not clear and the learner is overwhelmed and the performance becomes nerve-wracking. To cope the learner begins to:
1.	Devise a plan or choose a perspective to determine the relative importance of information
2.	Makes decisions based on these plans or perspectives
3.	Makes decisions and plans about situations which differ in subtle, nuanced (non-textbook) ways without being sure that this appropriate.
4.	Starts taking responsibility for decisions (can’t fall back on the rule which is not sufficient)
5.	Learns to cope with successes and disasters
''Examples''
Learner driver: Taking a curved freeway off-ramp has to decide based on surface conditions, traffic, visibility, speed, time what is an appropriate speed: whether to brake, take the foot off the accelerator or to change down a gear or two. Driver is relieved to make it through or frightened by the skid or closeness of the verge.
Chess player: Determines an attack on the king is the best strategy and pursues this option without recognising weaknesses in his own position. Player is euphoric when it works, devastated when it redounds.
Now the learner increasing lets go of rule-following approach and becomes emotionally involved in the process. If the learner doesn’t go through with this phase the learning becomes stagnant and the learner becomes bored, lacking challenge.
!Proficient
Learning becomes more intuitive by
1.	Building up more and more positive or negative experiences are made the performer as more situations are faced 
2.	Lets go of rules and develops responses based on identifying situations based on discriminating evermore subtle cues in the environment
3.	Shifts from rule-based reasoning to atheoretical and intuitive behaviour.
4.	“Sees” what is needed (the goal) rather than consciously deciding on a plan or a perspective
5.	In response to identifying the goal decides what to do based on rules, even though the goal may be obvious
''Examples''
Learner driver: Approaching curve on a rainy day realises intuitively that s/he is going dangerously fast, then needs to decide whether to brake or take off foot off the accelerator
Chess player: Recognise almost immediately the position – then starts calculating the moves of the best response.
!Expert
Learning becomes ‘unconscious”. The expert continually refines:
1.	discriminatory ability to read contexts and situations 
2.	refines the strategies and movements to achieve the identified goal.
The expert acquires ‘gut feel’ and can respond without hesitating or thought.
''Examples''
Learner driver: Drives through a range of situations while conducting a conversation or engaging in other cognitive activities. Responds to emergency and dangerous situations without panic or suffering from shock.
Chess player: Can play across a range of boards and make moves in a matter of seconds, even while engaged in other activities

!Maximum Grip vs Goal-orientated
Traditional thinking suggests that what people and animals do is motivated by the satisfaction of achieving a goal.. The goals bring with them certain satisfactions
According to Merleau-Ponty everyday absorbed, skilful coping is experienced as a steady flow of activity in response to one’s sense of the situation. Your response takes you closer to an optimum state and reduces the ‘tension’ of a perceived deviation.. You don’t need a ‘goal’ to act – your body is solicited by the situation to get into equilibrium with it.
When this coping is in tune with the environment you experience the “flow” or “zone” of high-performance athletes – you don’t consciously think about it you are just absorbed into action.
Learning to perform starts with cognitive representations of what is happening and what the goal is. Eventually the learning is so internalised that it becomes part of the body.
At this stage the performance moves beyond language and thinking. Any reflection by the expert de-constructs the performance and results in a degradation of the skill.
Air force instructors teach learner pilots to read instruments in particular ways, but when their eye movements are tracked they do not themselves follow the rule that they are teachings. In fact their eyes do not follow rules at all but vary form situation to situation.
It is not the goal which motivates skilful action. Rather it is a  the performer trying to get the maximum grip on the situation, stepping closer or further away to get it into optimum visibility or shifting it in the hand to achieve a maximal grip on the object. This means that we are trying to reduce disequilibrium.
To improve our skills we may start with a conscious wish to acquire a skill. But after that we must get involved and get a lot of practice. The body then takes over and odes the rest outside of consciousness.
David Beckett, Paul Hager 
Abstract: 
Workplace learning has emerged as a significant site of adults’ informal experiential learning, with implications for the provision and shape of formal education. There are, however, a prohibitive number of variables encumbering research into such learning. We can bypass the variables by focusing on phenomenal accounts of how professionals (in this instance) make judgements at work, underpinned by an organic logic derivable from Dewey. This article shows how to characterize a new epistemology of practice through both empirical and conceptual innovation, and thus advances the detail of this new informal workplace learning. This epistemology deals in five characteristics central to lifelong learning anyway, namely: 
1.    the contingent (rather than exclusively formal, sustained, and systematic studies); 
2.    the practical (rather than exclusively the theoretical); 
3.    the process (rather than exclusively the assimilation of content);
4.     the particular (rather than the exclusively universal and a priori as the ‘context’); 
5.    and the affective and the social domains (rather than exclusively the cognitive domain). 
Our fieldwork so far shows, through interview findings, how these are prominent in professional workplace judgments, and what prospects there are for further research on judgment as a site of ‘organic’ learning for adults. 
Five Stage Model of the Mental Activities involved in Skills Acquisition
Dreyfus & Dreyfus
#Novice
#Advanced Beginner
#Competent
#Proficient
#Expert


[[Dreyfus on Merleau-Ponty]]
/***
|Name|FoldHeadingsPlugin|
|Source|http://www.TiddlyTools.com/#FoldHeadingsPlugin|
|Version|1.0.2|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides||
|Description|automatically turn headings into slider-like panels that can be folded/unfolded with a single click|
This plugin defines a macro that automatically converts heading-formatted content into sliders that let you expand/collapse their content by clicking on individual headings.
!!!!!Usage
<<<
{{{
<<foldHeadings opened|closed tag tag tag...>>
}}}
where: ''opened'' or ''closed'' is a keyword indicating the initial state of the sections (default: opened), and ''tag tag tag...'' is an optional list of tags to match, so that the foldable effect is only applied to tiddlers that contain one (or more) of the indicated tags.  

When you place the macro in a tiddler, any heading-formatted content (i.e, "!" through "!!!!!") in that tiddler will automatically become //'fold-able'//, allowing you to expand/collapse the content that follows each heading simply by clicking on that heading.  Each content section begins with the first element following a heading, and continues until either another heading is found or the end of the tiddler is reached.  For example:
{{{
<<foldHeadings closed>>
}}}
is embedded in ''this'' tiddler in order to make all the headings it contains 'fold-able'.  Note that the macro has been placed at the //end// of the tiddler because it only operates on *rendered* content.  Thus, only headings that //precede// it in the same tiddler will become fold-able, as any headings that //follow// it are not actually rendered until //after// the macro has been processed.

You can further limit the effect of the macro within the tiddler by surrounding several headings in a "CSS class wrapper" ("""{{classname{...}}}""") or other containing DOM element (e.g., """@@display:inline;...@@""") and then embedding the {{{<<foldHeadings>>}}} macro inside that container (at the end)... only those headings that are also within that container will be made fold-able, instead of converting ''all'' the headings in that tiddler.

Conversely, if you want the fold-able ability to apply to the headings in //all// tiddlers, ''without having to alter //any// of those individual tiddlers'', you can add the macro to the end of your [[ViewTemplate]], so that it will be invoked after the content in each tiddler has been rendered, causing all headings they contain to automatically become fold-able.  For example:
{{{
<span macro="foldHeadings closed"></span>
}}}
You can also limit this effect to selected tiddlers by specifying one or more tags as additional macro parameters.  For example:
{{{
<span macro="foldHeadings closed systemConfig"></span>
}}}
is only applied to headings contained in //plugin tiddlers// (i.e., tiddlers tagged with <<tag systemConfig>>), while headings in other tiddlers remain unaffected by the macro, even though it is embedded in the common [[ViewTemplate]] definition.
<<<
!!!!!Installation
<<<
import (or copy/paste) the following tiddlers into your document:
''FoldHeadingsPlugin'' (tagged with <<tag systemConfig>>)
<<<
!!!!!Revision History
<<<
2007.12.06 [1.0.2] fix handling for empty sections when checking for sliderPanel/floatingPanel
2007.12.02 [1.0.1] fix handling when content following a heading is already a sliderPanel/floatingPanel
2007.12.01 [1.0.0] initial release
<<<
!!!!!Credits
<<<
This feature was developed by Eric Shulman
<<<
!!!!!Code
***/
//{{{
version.extensions.FoldHeadings= {major: 1, minor: 0, revision: 2, date: new Date(2007,12,6)};

config.macros.foldHeadings = {
	guideText: "opened|closed className", // see QuickEditToolbar's "macro" command
	showtip: "click to show '%0'",
	hidetip: "click to hide '%0'",
	showlabel: "more...",
	hidelabel: "[x]",
	html: "<span style='float:right;text-weight:normal;font-size:80%;' class='TiddlyLinkExisting'>%0&nbsp;</span>",
	handler: function(place,macroName,params) {
		var show=params[0] && params.shift().toLowerCase()!="closed";
		if (params.length) { // if filtering by tag(s)
			var here=story.findContainingTiddler(place);
			if (here) var tid=store.getTiddler(here.getAttribute("tiddler"));
			if (!tid || !tid.tags.containsAny(params)) return; // in a tiddler and not tagged... do nothing...
		}
		var elems=place.parentNode.getElementsByTagName("*");
		var heads=[]; for (var i=0; i<elems.length; i++) { // get non-foldable heading elements
			var n=elems[i].nodeName; var foldable=hasClass(elems[i],"foldable");
			if ((n=="H1"||n=="H2"||n=="H3"||n=="H4"||n=="H5")&&!foldable)
				heads.push(elems[i]);
			}
		for (var i=0; i<heads.length; i++) { var h=heads[i]; // for each heading element...
			// find start/end of section content (up to next heading or end of content)
			var start=end=h.nextSibling; while (end && end.nextSibling) {
				var n=end.nextSibling.nodeName.toUpperCase();
				if (n=="H1"||n=="H2"||n=="H3"||n=="H4"||n=="H5") break;
				end=end.nextSibling;
			}
			if (start && hasClass(start,"sliderPanel")||hasClass(start,"floatingPanel")) continue; // heading is already a slider!
			var span=createTiddlyElement(null,"span",null,"sliderPanel"); // create container
			span.style.display=show?"inline":"none"; // set initial display state
			h.parentNode.insertBefore(span,start); // and insert it following the heading element
			// move section elements into container...
			var e=start; while (e) { var next=e.nextSibling; span.insertBefore(e,null); if (e==end) break; e=next; }
			// set heading label/tip/cursor...
			h.title=(show?this.hidetip:this.showtip).format([h.textContent])
			h.innerHTML=this.html.format([show?this.hidelabel:this.showlabel])+h.innerHTML;
			h.style.cursor='pointer';
			addClass(h,"foldable"); // so we know it been done (and to add extra styles)
			h.onclick=function() {
				var panel=this.nextSibling; var show=panel.style.display=="none";
				// update panel display state
				if (config.options.chkAnimate) anim.startAnimating(new Slider(panel,show));
				else panel.style.display = show?"inline":"none";
				// update heading label/tip
				this.removeChild(this.firstChild); // remove existing label
				var fh=config.macros.foldHeadings; // abbreviation for readability...
				this.title=(show?fh.hidetip:fh.showtip).format([this.textContent])
				this.innerHTML=fh.html.format([show?fh.hidelabel:fh.showlabel])+this.innerHTML;
			}
		}		
	}
}
//}}}
// //<<foldHeadings closed>>
/***
|''Name:''|FootnotesPlugin|
|''Description:''|Create automated tiddler footnotes.|
|''Author:''|Saq Imtiaz ( lewcid@gmail.com )|
|''Source:''|http://tw.lewcid.org/#FootnotesPlugin|
|''Code Repository:''|http://tw.lewcid.org/svn/plugins|
|''Version:''|2.01|
|''Date:''|10/25/07|
|''License:''|[[Creative Commons Attribution-ShareAlike 3.0 License|http://creativecommons.org/licenses/by-sa/3.0/]]|
|''~CoreVersion:''|2.2.2|

!!Usage:
*To create a footnote, just put the footnote text inside triple backticks.
*Footnotes are numbered automatically, and listed at the bottom of the tiddler.
*{{{Creating a footnote is easy. ```This is the text for my footnote```}}}
*[[Example|FootnotesDemo]]
***/
// /%
//!BEGIN-PLUGIN-CODE
config.footnotesPlugin = {
	backLabel: "back",
	prompt:"show footnote"
};

config.formatters.unshift( {
    name: "footnotes",
    match: "```",
    lookaheadRegExp: /```((?:.|\n)*?)```/g,
    handler: function(w)
    {
        this.lookaheadRegExp.lastIndex = w.matchStart;
        var lookaheadMatch = this.lookaheadRegExp.exec(w.source);
        if(lookaheadMatch && lookaheadMatch.index == w.matchStart )
            {
			var tiddler = story.findContainingTiddler(w.output);
			if (!tiddler.notes)
				tiddler.notes = [];
			var title = tiddler.getAttribute("tiddler");
			tiddler.notes.pushUnique(lookaheadMatch[1]);
			var pos = tiddler.notes.indexOf(lookaheadMatch[1]) + 1;
			createTiddlyButton(w.output,pos,config.footnotesPlugin.prompt,function(){var x = document.getElementById(title+"ftn"+pos);window.scrollTo(0,ensureVisible(x)+(ensureVisible(x)<findScrollY()?(findWindowHeight()-x.offsetHeight):0));return false;},"ftnlink",title+"ftnlink"+pos);			
			w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
            }
    }
});

old_footnotes_refreshTiddler = Story.prototype.refreshTiddler;
Story.prototype.refreshTiddler = function(title,template,force)
{
    var tiddler = old_footnotes_refreshTiddler.apply(this,arguments);
	if (tiddler.notes && tiddler.notes.length)
	{
		var holder = createTiddlyElement(null,"div",null,"footnoteholder");
		var list = createTiddlyElement(holder,"ol",title+"footnoteholder");
		for (var i=0; i<tiddler.notes.length; i++)
		{
			var ftn = createTiddlyElement(list,"li",title+"ftn"+(i+1),"footnote");
			wikify(tiddler.notes[i]+" ",ftn);
			createTiddlyButton(ftn,"["+config.footnotesPlugin.backLabel+"]",config.footnotesPlugin.backLabel,function(){window.scrollTo(0,ensureVisible(document.getElementById(this.parentNode.id.replace("ftn","ftnlink"))));return false;},"ftnbklink");
		}
		var count = tiddler.childNodes.length;
		for (var j=0; j<count; j++){
			if(hasClass(tiddler.childNodes[j],"viewer")){
				var viewer = tiddler.childNodes[j];	
			}
		}
		viewer.appendChild(holder);
		tiddler.notes = [];
	}
    return tiddler;
};

setStylesheet(
".tiddler a.ftnlink {vertical-align: super; font-size: 0.8em; color:red;}\n"+
".tiddler a.ftnlink:hover, .tiddler .footnoteholder a.ftnbklink:hover{color:#fff;background:red;}\n"+
".tiddler div.footnoteholder{margin:1.8em 1.0em; padding:0.1em 1.0em 0.1em 1.0em ;border-left: 1px solid #ccc;}"+
".tiddler footnoteholder ol {font-size: 0.9em; line-height: 1.2em;}\n"+
".tiddler .footnoteholder li.footnote {margin: 0 0 5px 0;}\n"+
".tiddler .footnoteholder a.ftnbklink{color:red;}\n","FootNotesStyles");
//!END-PLUGIN-CODE
// %/
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>>
/***
|Name|ImportTiddlersPlugin|
|Source|http://www.TiddlyTools.com/#ImportTiddlersPlugin|
|Version|3.5.6|
|Author|Eric Shulman - ELS Design Studios|
|License|http://www.TiddlyTools.com/#LegalStatements <br>and [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
|~CoreVersion|2.1|
|Type|plugin|
|Requires||
|Overrides|config.macros.importTiddlers.handler|
|Description|interactive controls for import/export with filtering.|

When many people share and edit copies of the same TiddlyWiki document, the ability to quickly collect all these changes back into a single, updated document that can then be redistributed to the entire group is very important.  It can also be very extremely helpful when moving your own tiddlers from document to document (e.g., when upgrading to the latest version of TiddlyWiki, or 'pre-loading' your favorite stylesheets into a new 'empty' TiddlyWiki document.)

This plugin lets you selectively combine tiddlers from any two TiddlyWiki documents.  An interactive control panel lets you pick a document to import from, and then select which tiddlers to import, with prompting for skip, rename, merge or replace actions when importing tiddlers that match existing titles.  Automatically add tags to imported tiddlers so they are easy to find later on.  Generates a detailed report of import 'history' in ImportedTiddlers.
!!!!!Usage
<<<
{{{<<importTiddlers>>}}} or {{{<<importTiddlers core>>}}}
invokes the built-in importTiddlers macro (TW2.1.x+).  If installed in documents using TW2.0.x or earlier, fallback is to use 'link' display (see below)

{{{<<importTiddlers link label tooltip>>}}}
The ''link'' keyword creates an "import tiddlers" link that when clicked to show/hide import control panel.  ''label'' and ''tooltip'' are optional text parameters (enclosed in quotes or {{{[[...]]}}}, and allow you to override the default display text for the link and the mouseover help text, respectively.

{{{<<importTiddlers inline>>}}}
creates import control panel directly in tiddler content

<<importTiddlers inline>>

Press ''[browse]'' to select a TiddlyWiki document file to import, and then press ''[open]''.  Alternatively, you can type in the path/filename or a remote document URL (starting with http://).  When you have entered the desired source location, press ''[load]'' to retrieve the tiddlers from the remote source.  //Note: There may be some delay to permit the browser time to access and load the document before updating the listbox with the titles of all tiddlers that are available to be imported.//

Select one or more titles from the listbox (hold CTRL or SHIFT while clicking to add/remove the highlight from individual list items).  You can press ''[select all]'' to quickly highlight all tiddler titles in the list.  Use the ''[-]'', ''[+]'', or ''[=]'' links to adjust the listbox size so you can view more (or less) tiddler titles at one time.  When you have chosen the tiddlers you want to import and entered any extra tags, press ''[import]'' to begin copying them to the current TiddlyWiki document.

''select: all, new, changes, or differences''

You can click on ''all'', ''new'', ''changes'', or ''differences'' to automatically select a subset of tiddlers from the list. This makes it very quick and easy to find and import just the updated tiddlers you are interested in:
>''"all"'' selects ALL tiddlers from the import source document, even if they have not been changed.
>''"new"'' selects only tiddlers that are found in the import source document, but do not yet exist in the destination document
>''"changes"'' selects only tiddlers that exist in both documents but that are newer in the source document
>''"differences"'' selects all new and existing tiddlers that are different from the destination document (even if destination tiddler is newer)

''Import Tagging:''

Tiddlers that have been imported can be automatically tagged, so they will be easier to find later on, after they have been added to your document.  New tags are entered into the "add tags" input field, and then //added// to the existing tags for each tiddler as it is imported.

''Skip, Rename, Merge, or Replace:''

When importing a tiddler whose title is identical to one that already exists, the import process pauses and the tiddler title is displayed in an input field, along with four push buttons: ''[skip]'', ''[rename]'', ''[merge]'' and ''[replace]''.

To bypass importing this tiddler, press ''[skip]''.  To import the tiddler with a different name (so that both the tiddlers will exist when the import is done), enter a new title in the input field and then press ''[rename]''.   Press ''[merge]'' to combine the content from both tiddlers into a single tiddler.  Press ''[replace]'' to overwrite the existing tiddler with the imported one, discarding the previous tiddler content.

//Note: if both the title ''and'' modification date/////time match, the imported tiddler is assumed to be identical to the existing one, and will be automatically skipped (i.e., not imported) without asking.//

''Import Report History''

When tiddlers are imported, a report is generated into ImportedTiddlers, indicating when the latest import was performed, the number of tiddlers successfully imported, from what location, and by whom. It also includes a list with the title, date and author of each tiddler that was imported.

When the import process is completed, the ImportedTiddlers report is automatically displayed for your review.  If more tiddlers are subsequently imported, a new report is //added// to ImportedTiddlers, above the previous report (i.e., at the top of the tiddler), so that a reverse-chronological history of imports is maintained.

If a cumulative record is not desired, the ImportedTiddlers report may be deleted at any time. A new ImportedTiddlers report will be created the next time tiddlers are imported.

Note: You can prevent the ImportedTiddlers report from being generated for any given import activity by clearing the "create a report" checkbox before beginning the import processing.

<<<
!!!!!Installation
<<<
copy/paste the following tiddlers into your document:
''ImportTiddlersPlugin'' 
''ImportTiddlersPluginPatch'' (only for installation in TW2.1.x or earlier)
(both tagged with <<tag systemConfig>>)
>Important Notes:
>* As of 6/27/2007, "patch" functions that provide backward-compatibility with TW2.1.x and earlier have been split into a separate [[ImportTiddlersPluginPatch]] tiddler to reduce installation overhead for //this// plugin.  You only need to install the additional plugin tiddler when using ImportTiddlersPlugin in documents using TW2.1.x or earlier.
>* As of 3/21/2007, the interactive {{{<<importTiddlers>>}}} and non-interactive {{{<<loadTiddlers>>}}} macro definitions and related code have been split into separate [[ImportTiddlersPlugin]] and [[LoadTiddlersPlugin]] to permit selective installation of either the interactive and/or non-interactive macro functions.
''Quick Installation Tip #1:''
If you are using an unmodified version of TiddlyWiki (core release version <<version>>), you can get a new, empty TiddlyWiki with the Import Tiddlers plugin pre-installed (''[[download from here|TW+ImportExport.html]]''), and then simply import all your content from your old document into this new, empty document.
<<<
!!!!!Revision History
<<<
''2007.10.30 [3.5.6]'' update [[ImportTiddlers]] shadow tiddler definition to include "inline" link, so the plugin control panel is displayed instead of the standard core interface.
|please see [[ImportTiddlersPluginHistory]] for additional revision details|
''2005.07.20 [1.0.0]'' Initial Release
<<<
!!!!!Credits
<<<
This feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]
<<<
!!!!!Code
***/
// // ''MACRO DEFINITION''
//{{{
// Version
version.extensions.importTiddlers = {major: 3, minor: 5, revision: 6, date: new Date(2007,10,30)};

// IE needs explicit global scoping for functions/vars called from browser events
window.onClickImportButton=onClickImportButton;
window.refreshImportList=refreshImportList;

// default cookie/option values
if (!config.options.chkImportReport) config.options.chkImportReport=true;

// default shadow definition
config.shadowTiddlers.ImportTiddlers="<<importTiddlers inline>>";

merge(config.macros.importTiddlers,{
	label: "import tiddlers",
	prompt: "Copy tiddlers from another document",
	openMsg: "Opening %0",
	openErrMsg: "Could not open %0 - error=%1",
	readMsg: "Read %0 bytes from %1",
	foundMsg: "Found %0 tiddlers in %1",
	countMsg: "%0 tiddlers selected for import",
	importedMsg: "Imported %0 of %1 tiddlers from %2",
	loadText: "please load a document...",
	closeText: "close",	// text for close button when remote file is loaded
	doneText: "done",	// text for close button when remote file is not loaded
	src: "",		// path/filename or URL of document to import (retrieved from SiteUrl tiddler)
	proxy: "",		// URL for remote proxy script (retrieved from SiteProxy tiddler)
	useProxy: false,	// use specific proxy script in front of remote URL
	inbound: null,		// hash-indexed array of tiddlers from other document
	newTags: "",		// text of tags added to imported tiddlers
	addTags: true,		// add new tags to imported tiddlers
	listsize: 8,		// # of lines to show in imported tiddler list
	importTags: true,	// include tags from remote source document when importing a tiddler
	keepTags: true,		// retain existing tags when replacing a tiddler
	index: 0,		// current processing index in import list
	sort: ""		// sort order for imported tiddler listbox
});

if (config.macros.importTiddlers.coreHandler==undefined)
	config.macros.importTiddlers.coreHandler=config.macros.importTiddlers.handler; // save built-in handler

config.macros.importTiddlers.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
	if (!params[0] || params[0].toLowerCase()=='core') { // default to built in
		if (config.macros.importTiddlers.coreHandler)
			config.macros.importTiddlers.coreHandler.apply(this,arguments);
		else 
			createTiddlyButton(place,this.label,this.prompt,onClickImportMenu);
	}
	else if (params[0]=='link') { // show link to floating panel
		var label=params[1]?params[1]:this.label;
		var prompt=params[2]?params[2]:this.prompt;
		createTiddlyButton(place,label,prompt,onClickImportMenu);
	}
	else if (params[0]=='inline') {// show panel as INLINE tiddler content
		createImportPanel(place);
		document.getElementById("importPanel").style.position="static";
		document.getElementById("importPanel").style.display="block";
	}
	else if (config.macros.loadTiddlers)
		config.macros.loadTiddlers.handler(place,macroName,params); // any other params: loadtiddlers
}
//}}}

// // ''INTERFACE DEFINITION''
// // Handle link click to create/show/hide control panel
//{{{
function onClickImportMenu(e)
{
	if (!e) var e = window.event;
	var parent=resolveTarget(e).parentNode;
	var panel = document.getElementById("importPanel");
	if (panel==undefined || panel.parentNode!=parent)
		panel=createImportPanel(parent);
	var isOpen = panel.style.display=="block";
	if(config.options.chkAnimate)
		anim.startAnimating(new Slider(panel,!isOpen,e.shiftKey || e.altKey,"none"));
	else
		panel.style.display = isOpen ? "none" : "block" ;
	e.cancelBubble = true;
	if (e.stopPropagation) e.stopPropagation();
	return(false);
}
//}}}

// // Create control panel: HTML, CSS
//{{{
function createImportPanel(place) {
	var panel=document.getElementById("importPanel");
	if (panel) { panel.parentNode.removeChild(panel); }
	setStylesheet(config.macros.importTiddlers.css,"importTiddlers");
	panel=createTiddlyElement(place,"span","importPanel",null,null)
	panel.innerHTML=config.macros.importTiddlers.html;
	refreshImportList();
	var siteURL=store.getTiddlerText("SiteUrl"); if (!siteURL) siteURL="";
	document.getElementById("importSourceURL").value=siteURL;
	config.macros.importTiddlers.src=siteURL;
	var siteProxy=store.getTiddlerText("SiteProxy"); if (!siteProxy) siteProxy="SiteProxy";
	document.getElementById("importSiteProxy").value=siteProxy;
	config.macros.importTiddlers.proxy=siteProxy;
	return panel;
}
//}}}

// // CSS
//{{{
config.macros.importTiddlers.css = '\
#importPanel {\
	display: none; position:absolute; z-index:11; width:35em; right:105%; top:3em;\
	background-color: #eee; color:#000; font-size: 8pt; line-height:110%;\
	border:1px solid black; border-bottom-width: 3px; border-right-width: 3px;\
	padding: 0.5em; margin:0em; -moz-border-radius:1em;\
}\
#importPanel a, #importPanel td a { color:#009; display:inline; margin:0px; padding:1px; }\
#importPanel table { width:100%; border:0px; padding:0px; margin:0px; font-size:8pt; line-height:110%; background:transparent; }\
#importPanel tr { border:0px;padding:0px;margin:0px; background:transparent; }\
#importPanel td { color:#000; border:0px;padding:0px;margin:0px; background:transparent; }\
#importPanel select { width:98%;margin:0px;font-size:8pt;line-height:110%;}\
#importPanel input  { width:98%;padding:0px;margin:0px;font-size:8pt;line-height:110%}\
#importPanel .box { border:1px solid black; padding:3px; margin-bottom:5px; background:#f8f8f8; -moz-border-radius:5px;}\
#importPanel .topline { border-top:2px solid black; padding-top:3px; margin-bottom:5px; }\
#importPanel .rad { width:auto; }\
#importPanel .chk { width:auto; margin:1px;border:0; }\
#importPanel .btn { width:auto; }\
#importPanel .btn1 { width:98%; }\
#importPanel .btn2 { width:48%; }\
#importPanel .btn3 { width:32%; }\
#importPanel .btn4 { width:24%; }\
#importPanel .btn5 { width:19%; }\
#importPanel .importButton { padding: 0em; margin: 0px; font-size:8pt; }\
#importPanel .importListButton { padding:0em 0.25em 0em 0.25em; color: #000000; display:inline }\
#importCollisionPanel { display:none; margin:0.5em 0em 0em 0em; }\
';
//}}}

// // HTML 
//{{{
config.macros.importTiddlers.html = '\
<!-- source and report -->\
<table><tr><td align=left>\
	import from\
	<input type="radio" class="rad" name="importFrom" id="importFromFile" value="file" CHECKED\
		onClick="document.getElementById(\'importLocalPanel\').style.display=this.checked?\'block\':\'none\';\
			document.getElementById(\'importHTTPPanel\').style.display=!this.checked?\'block\':\'none\'"> local file\
	<input type="radio" class="rad" name="importFrom" id="importFromWeb"  value="http"\
		onClick="document.getElementById(\'importLocalPanel\').style.display=!this.checked?\'block\':\'none\';\
			document.getElementById(\'importHTTPPanel\').style.display=this.checked?\'block\':\'none\'"> web server\
</td><td align=right>\
	<input type=checkbox class="chk" id="chkImportReport" checked\
		onClick="config.options[\'chkImportReport\']=this.checked;"> create a report\
</td></tr></table>\
<!-- import from local file  -->\
<div id="importLocalPanel" style="display:block;margin-bottom:5px;margin-top:5px;padding-top:3px;border-top:1px solid #999">\
local document path/filename:<br>\
<input type="file" id="fileImportSource" size=57 style="width:100%"\
	onKeyUp="config.macros.importTiddlers.src=this.value"\
	onChange="config.macros.importTiddlers.src=this.value;">\
</div><!--panel-->\
\
<!-- import from http server -->\
<div id="importHTTPPanel" style="display:none;margin-bottom:5px;margin-top:5px;padding-top:3px;border-top:1px solid #999">\
<table><tr><td align=left>\
	remote document URL:<br>\
</td><td align=right>\
	<input type="checkbox" class="chk" id="importUseProxy"\
		onClick="config.macros.importTiddlers.useProxy=this.checked;\
			document.getElementById(\'importSiteProxy\').style.display=this.checked?\'block\':\'none\'"> use a proxy script\
</td></tr></table>\
<input type="text" id="importSiteProxy" style="display:none;margin-bottom:1px" onfocus="this.select()" value="SiteProxy"\
	onKeyUp="config.macros.importTiddlers.proxy=this.value"\
	onChange="config.macros.importTiddlers.proxy=this.value;">\
<input type="text" id="importSourceURL" onfocus="this.select()" value="SiteUrl"\
	onKeyUp="config.macros.importTiddlers.src=this.value"\
	onChange="config.macros.importTiddlers.src=this.value;">\
</div><!--panel-->\
\
<table><tr><td align=left>\
	select:\
	<a href="JavaScript:;" id="importSelectAll"\
		onclick="onClickImportButton(this)" title="select all tiddlers">\
		&nbsp;all&nbsp;</a>\
	<a href="JavaScript:;" id="importSelectNew"\
		onclick="onClickImportButton(this)" title="select tiddlers not already in destination document">\
		&nbsp;added&nbsp;</a> \
	<a href="JavaScript:;" id="importSelectChanges"\
		onclick="onClickImportButton(this)" title="select tiddlers that have been updated in source document">\
		&nbsp;changes&nbsp;</a> \
	<a href="JavaScript:;" id="importSelectDifferences"\
		onclick="onClickImportButton(this)" title="select tiddlers that have been added or are different from existing tiddlers">\
		&nbsp;differences&nbsp;</a> \
	<a href="JavaScript:;" id="importToggleFilter"\
		onclick="onClickImportButton(this)" title="show/hide selection filter">\
		&nbsp;filter&nbsp;</a> \
</td><td align=right>\
	<a href="JavaScript:;" id="importListSmaller"\
		onclick="onClickImportButton(this)" title="reduce list size">\
		&nbsp;&#150;&nbsp;</a>\
	<a href="JavaScript:;" id="importListLarger"\
		onclick="onClickImportButton(this)" title="increase list size">\
		&nbsp;+&nbsp;</a>\
	<a href="JavaScript:;" id="importListMaximize"\
		onclick="onClickImportButton(this)" title="maximize/restore list size">\
		&nbsp;=&nbsp;</a>\
</td></tr></table>\
<select id="importList" size=8 multiple\
	onchange="setTimeout(\'refreshImportList(\'+this.selectedIndex+\')\',1)">\
	<!-- NOTE: delay refresh so list is updated AFTER onchange event is handled -->\
</select>\
<input type=checkbox class="chk" id="chkAddTags" checked\
	onClick="config.macros.importTiddlers.addTags=this.checked;">add new tags &nbsp;\
<input type=checkbox class="chk" id="chkImportTags" checked\
	onClick="config.macros.importTiddlers.importTags=this.checked;">import source tags &nbsp;\
<input type=checkbox class="chk" id="chkKeepTags" checked\
	onClick="config.macros.importTiddlers.keepTags=this.checked;">keep existing tags<br>\
<input type=text id="txtNewTags" size=15 onKeyUp="config.macros.importTiddlers.newTags=this.value" autocomplete=off>\
<div align=center>\
	<input type=button id="importLoad" class="importButton" style="width:32%" value="load"\
		title="load listbox with tiddlers from source document"\
		onclick="onClickImportButton(this)">\
	<input type=button id="importStart"	 class="importButton" style="width:32%" value="import"\
		title="add selected source tiddlers to the current document"\
		onclick="onClickImportButton(this)">\
	<input type=button id="importClose"	 class="importButton" style="width:32%" value="close"\
		title="clear listbox or hide control panel"\
		onclick="onClickImportButton(this)">\
</div>\
<div id="importCollisionPanel">\
	tiddler already exists:\
	<input type=text id="importNewTitle" size=15 autocomplete=off">\
	<div align=center>\
	<input type=button id="importSkip"	class="importButton" style="width:23%" value="skip"\
		title="do not import this tiddler"\
		onclick="onClickImportButton(this)">\
	<input type=button id="importRename"  class="importButton" style="width:23%" value="rename"\
		title="rename the incoming tiddler"\
		onclick="onClickImportButton(this)">\
	<input type=button id="importMerge"   class="importButton" style="width:23%" value="merge"\
		title="append the incoming tiddler to the existing tiddler"\
		onclick="onClickImportButton(this)">\
	<input type=button id="importReplace" class="importButton" style="width:23%" value="replace"\
		title="discard the existing tiddler"\
		onclick="onClickImportButton(this)">\
	</div>\
</div>\
';
//}}}

// // Control interactions
//{{{
function onClickImportButton(which)
{
	// DEBUG alert(which.id);
	var theList		  = document.getElementById('importList');
	if (!theList) return;
	var thePanel	= document.getElementById('importPanel');
	var theCollisionPanel   = document.getElementById('importCollisionPanel');
	var theNewTitle   = document.getElementById('importNewTitle');
	var count=0;
	switch (which.id)
		{
		case 'fileImportSource':
		case 'importLoad':		// load import source into hidden frame
			importReport();		// if an import was in progress, generate a report
			config.macros.importTiddlers.inbound=null;	// clear the imported tiddler buffer
			refreshImportList();	// reset/resize the listbox
			if (config.macros.importTiddlers.src=="") break;
			// Load document, read it's DOM and fill the list
			config.macros.importTiddlers.loadRemoteFile(config.macros.importTiddlers.src,
				function(success,params,txt,src,xhr) {
					var src=src.replace(/%20/g," ");
					if (!success) { displayMessage(config.macros.importTiddlers.openErrMsg.format([src,xhr.status])); return; }
					var tiddlers = config.macros.importTiddlers.readTiddlersFromHTML(txt);
					var count=tiddlers?tiddlers.length:0;
					var querypos=src.lastIndexOf("?"); if (querypos!=-1) src=src.substr(0,querypos);
					displayMessage(config.macros.importTiddlers.foundMsg.format([count,src]));
					config.macros.importTiddlers.inbound=tiddlers;
					window.refreshImportList(0);
				});
			break;
		case 'importSelectAll':		// select all tiddler list items (i.e., not headings)
			importReport();		// if an import was in progress, generate a report
			for (var t=0,count=0; t < theList.options.length; t++) {
				if (theList.options[t].value=="") continue;
				theList.options[t].selected=true;
				count++;
			}
			clearMessage(); displayMessage(config.macros.importTiddlers.countMsg.format([count]));
			break;
		case 'importSelectNew':		// select tiddlers not in current document
			importReport();		// if an import was in progress, generate a report
			for (var t=0,count=0; t < theList.options.length; t++) {
				theList.options[t].selected=false;
				if (theList.options[t].value=="") continue;
				theList.options[t].selected=!store.tiddlerExists(theList.options[t].value);
				count+=theList.options[t].selected?1:0;
			}
			clearMessage(); displayMessage(config.macros.importTiddlers.countMsg.format([count]));
			break;
		case 'importSelectChanges':		// select tiddlers that are updated from existing tiddlers
			importReport();		// if an import was in progress, generate a report
			for (var t=0,count=0; t < theList.options.length; t++) {
				theList.options[t].selected=false;
				if (theList.options[t].value==""||!store.tiddlerExists(theList.options[t].value)) continue;
				for (var i=0; i<config.macros.importTiddlers.inbound.length; i++) // find matching inbound tiddler
					{ var inbound=config.macros.importTiddlers.inbound[i]; if (inbound.title==theList.options[t].value) break; }
				theList.options[t].selected=(inbound.modified-store.getTiddler(theList.options[t].value).modified>0); // updated tiddler
				count+=theList.options[t].selected?1:0;
			}
			clearMessage(); displayMessage(config.macros.importTiddlers.countMsg.format([count]));
			break;
		case 'importSelectDifferences':		// select tiddlers that are new or different from existing tiddlers
			importReport();		// if an import was in progress, generate a report
			for (var t=0,count=0; t < theList.options.length; t++) {
				theList.options[t].selected=false;
				if (theList.options[t].value=="") continue;
				if (!store.tiddlerExists(theList.options[t].value)) { theList.options[t].selected=true; count++; continue; }
				for (var i=0; i<config.macros.importTiddlers.inbound.length; i++) // find matching inbound tiddler
					{ var inbound=config.macros.importTiddlers.inbound[i]; if (inbound.title==theList.options[t].value) break; }
				theList.options[t].selected=(inbound.modified-store.getTiddler(theList.options[t].value).modified!=0); // changed tiddler
				count+=theList.options[t].selected?1:0;
			}
			clearMessage(); displayMessage(config.macros.importTiddlers.countMsg.format([count]));
			break;
		case 'importToggleFilter': // show/hide filter
		case 'importFilter': // apply filter
			alert("coming soon!");
			break;
		case 'importStart':		// initiate the import processing
			importReport();		// if an import was in progress, generate a report
			config.macros.importTiddlers.index=0;
			config.macros.importTiddlers.index=importTiddlers(0);
			importStopped();
			break;
		case 'importClose':		// unload imported tiddlers or hide the import control panel
			// if imported tiddlers not loaded, close the import control panel
			if (!config.macros.importTiddlers.inbound) { thePanel.style.display='none'; break; }
			importReport();		// if an import was in progress, generate a report
			config.macros.importTiddlers.inbound=null;	// clear the imported tiddler buffer
			refreshImportList();	// reset/resize the listbox
			break;
		case 'importSkip':	// don't import the tiddler
			var theItem	= theList.options[config.macros.importTiddlers.index];
			for (var j=0;j<config.macros.importTiddlers.inbound.length;j++)
			if (config.macros.importTiddlers.inbound[j].title==theItem.value) break;
			var theImported = config.macros.importTiddlers.inbound[j];
			theImported.status='skipped after asking';			// mark item as skipped
			theCollisionPanel.style.display='none';
			config.macros.importTiddlers.index=importTiddlers(config.macros.importTiddlers.index+1);	// resume with NEXT item
			importStopped();
			break;
		case 'importRename':		// change name of imported tiddler
			var theItem		= theList.options[config.macros.importTiddlers.index];
			for (var j=0;j<config.macros.importTiddlers.inbound.length;j++)
			if (config.macros.importTiddlers.inbound[j].title==theItem.value) break;
			var theImported		= config.macros.importTiddlers.inbound[j];
			theImported.status	= 'renamed from '+theImported.title;	// mark item as renamed
			theImported.set(theNewTitle.value,null,null,null,null);		// change the tiddler title
			theItem.value		= theNewTitle.value;			// change the listbox item text
			theItem.text		= theNewTitle.value;			// change the listbox item text
			theCollisionPanel.style.display='none';
			config.macros.importTiddlers.index=importTiddlers(config.macros.importTiddlers.index);	// resume with THIS item
			importStopped();
			break;
		case 'importMerge':	// join existing and imported tiddler content
			var theItem	= theList.options[config.macros.importTiddlers.index];
			for (var j=0;j<config.macros.importTiddlers.inbound.length;j++)
			if (config.macros.importTiddlers.inbound[j].title==theItem.value) break;
			var theImported	= config.macros.importTiddlers.inbound[j];
			var theExisting	= store.getTiddler(theItem.value);
			var theText	= theExisting.text+'\n----\n^^merged from: ';
			theText		+='[['+config.macros.importTiddlers.src+'#'+theItem.value+'|'+config.macros.importTiddlers.src+'#'+theItem.value+']]^^\n';
			theText		+='^^'+theImported.modified.toLocaleString()+' by '+theImported.modifier+'^^\n'+theImported.text;
			var theDate	= new Date();
			var theTags	= theExisting.getTags()+' '+theImported.getTags();
			theImported.set(null,theText,null,theDate,theTags);
			theImported.status   = 'merged with '+theExisting.title;	// mark item as merged
			theImported.status  += ' - '+theExisting.modified.formatString("MM/DD/YYYY 0hh:0mm:0ss");
			theImported.status  += ' by '+theExisting.modifier;
			theCollisionPanel.style.display='none';
			config.macros.importTiddlers.index=importTiddlers(config.macros.importTiddlers.index);	// resume with this item
			importStopped();
			break;
		case 'importReplace':		// substitute imported tiddler for existing tiddler
			var theItem		  = theList.options[config.macros.importTiddlers.index];
			for (var j=0;j<config.macros.importTiddlers.inbound.length;j++)
			if (config.macros.importTiddlers.inbound[j].title==theItem.value) break;
			var theImported     = config.macros.importTiddlers.inbound[j];
			var theExisting	  = store.getTiddler(theItem.value);
			theImported.status  = 'replaces '+theExisting.title;		// mark item for replace
			theImported.status += ' - '+theExisting.modified.formatString("MM/DD/YYYY 0hh:0mm:0ss");
			theImported.status += ' by '+theExisting.modifier;
			theCollisionPanel.style.display='none';
			config.macros.importTiddlers.index=importTiddlers(config.macros.importTiddlers.index);	// resume with THIS item
			importStopped();
			break;
		case 'importListSmaller':		// decrease current listbox size, minimum=5
			if (theList.options.length==1) break;
			theList.size-=(theList.size>5)?1:0;
			config.macros.importTiddlers.listsize=theList.size;
			break;
		case 'importListLarger':		// increase current listbox size, maximum=number of items in list
			if (theList.options.length==1) break;
			theList.size+=(theList.size<theList.options.length)?1:0;
			config.macros.importTiddlers.listsize=theList.size;
			break;
		case 'importListMaximize':	// toggle listbox size between current and maximum
			if (theList.options.length==1) break;
			theList.size=(theList.size==theList.options.length)?config.macros.importTiddlers.listsize:theList.options.length;
			break;
		}
}
//}}}

// // refresh listbox
//{{{
function refreshImportList(selectedIndex)
{
	var theList  = document.getElementById("importList");
	if (!theList) return;
	// if nothing to show, reset list content and size
	if (!config.macros.importTiddlers.inbound) 
	{
		while (theList.length > 0) { theList.options[0] = null; }
		theList.options[0]=new Option(config.macros.importTiddlers.loadText,"",false,false);
		theList.size=config.macros.importTiddlers.listsize;
		document.getElementById('importLoad').disabled=false;
		document.getElementById('fileImportSource').disabled=false;
		document.getElementById('importFromFile').disabled=false;
		document.getElementById('importFromWeb').disabled=false;
		document.getElementById('importClose').value=config.macros.importTiddlers.closeText;
		return;
	}

	// get the sort order
	if (!selectedIndex)   selectedIndex=0;
	if (selectedIndex==0) config.macros.importTiddlers.sort='title';		// heading
	if (selectedIndex==1) config.macros.importTiddlers.sort='title';
	if (selectedIndex==2) config.macros.importTiddlers.sort='modified';
	if (selectedIndex==3) config.macros.importTiddlers.sort='tags';
	if (selectedIndex>3) {
		// display selected tiddler count
		for (var t=0,count=0; t < theList.options.length; t++) {
			if (!theList.options[t].selected) continue;
			if (theList.options[t].value!="")
				count+=1;
			else { // if heading is selected, deselect it, and then select and count all in section
				theList.options[t].selected=false;
				for ( t++; t<theList.options.length && theList.options[t].value!=""; t++) {
					theList.options[t].selected=true;
					count++;
				}
			}
		}
		clearMessage(); displayMessage(config.macros.importTiddlers.countMsg.format([count]));
		return; // no refresh needed
	}

	// there are inbound tiddlers loaded... disable inapplicable controls...
	document.getElementById('importLoad').disabled=true;
	document.getElementById('fileImportSource').disabled=true;
	document.getElementById('importFromFile').disabled=true;
	document.getElementById('importFromWeb').disabled=true;
	document.getElementById('importClose').value=config.macros.importTiddlers.doneText;

	// get the alphasorted list of tiddlers (optionally, filter out unchanged tiddlers)
	var tiddlers=config.macros.importTiddlers.inbound;
	tiddlers.sort(function (a,b) {if(a['title'] == b['title']) return(0); else return (a['title'] < b['title']) ? -1 : +1; });
	// clear current list contents
	while (theList.length > 0) { theList.options[0] = null; }
	// add heading and control items to list
	var i=0;
	var indent=String.fromCharCode(160)+String.fromCharCode(160);
	theList.options[i++]=new Option(tiddlers.length+' tiddler'+((tiddlers.length!=1)?'s are':' is')+' in the document',"",false,false);
	theList.options[i++]=new Option(((config.macros.importTiddlers.sort=="title"   )?">":indent)+' [by title]',"",false,false);
	theList.options[i++]=new Option(((config.macros.importTiddlers.sort=="modified")?">":indent)+' [by date]',"",false,false);
	theList.options[i++]=new Option(((config.macros.importTiddlers.sort=="tags")?">":indent)+' [by tags]',"",false,false);
	// output the tiddler list
	switch(config.macros.importTiddlers.sort)
		{
		case "title":
			for(var t = 0; t < tiddlers.length; t++)
				theList.options[i++] = new Option(tiddlers[t].title,tiddlers[t].title,false,false);
			break;
		case "modified":
			// sort descending for newest date first
			tiddlers.sort(function (a,b) {if(a['modified'] == b['modified']) return(0); else return (a['modified'] > b['modified']) ? -1 : +1; });
			var lastSection = "";
			for(var t = 0; t < tiddlers.length; t++) {
				var tiddler = tiddlers[t];
				var theSection = tiddler.modified.toLocaleDateString();
				if (theSection != lastSection) {
					theList.options[i++] = new Option(theSection,"",false,false);
					lastSection = theSection;
				}
				theList.options[i++] = new Option(indent+indent+tiddler.title,tiddler.title,false,false);
			}
			break;
		case "tags":
			var theTitles = {}; // all tiddler titles, hash indexed by tag value
			var theTags = new Array();
			for(var t=0; t<tiddlers.length; t++) {
				var title=tiddlers[t].title;
				var tags=tiddlers[t].tags;
				if (!tags || !tags.length) {
					if (theTitles["untagged"]==undefined) { theTags.push("untagged"); theTitles["untagged"]=new Array(); }
					theTitles["untagged"].push(title);
				}
				else for(var s=0; s<tags.length; s++) {
					if (theTitles[tags[s]]==undefined) { theTags.push(tags[s]); theTitles[tags[s]]=new Array(); }
					theTitles[tags[s]].push(title);
				}
			}
			theTags.sort();
			for(var tagindex=0; tagindex<theTags.length; tagindex++) {
				var theTag=theTags[tagindex];
				theList.options[i++]=new Option(theTag,"",false,false);
				for(var t=0; t<theTitles[theTag].length; t++)
					theList.options[i++]=new Option(indent+indent+theTitles[theTag][t],theTitles[theTag][t],false,false);
			}
			break;
		}
	theList.selectedIndex=selectedIndex;		  // select current control item
	if (theList.size<config.macros.importTiddlers.listsize) theList.size=config.macros.importTiddlers.listsize;
	if (theList.size>theList.options.length) theList.size=theList.options.length;
}
//}}}

// // re-entrant processing for handling import with interactive collision prompting
//{{{
function importTiddlers(startIndex)
{
	if (!config.macros.importTiddlers.inbound) return -1;

	var theList = document.getElementById('importList');
	if (!theList) return;
	var t;
	// if starting new import, reset import status flags
	if (startIndex==0)
		for (var t=0;t<config.macros.importTiddlers.inbound.length;t++)
			config.macros.importTiddlers.inbound[t].status="";
	for (var i=startIndex; i<theList.options.length; i++)
		{
		// if list item is not selected or is a heading (i.e., has no value), skip it
		if ((!theList.options[i].selected) || ((t=theList.options[i].value)==""))
			continue;
		for (var j=0;j<config.macros.importTiddlers.inbound.length;j++)
			if (config.macros.importTiddlers.inbound[j].title==t) break;
		var inbound = config.macros.importTiddlers.inbound[j];
		var theExisting = store.getTiddler(inbound.title);
		// avoid redundant import for tiddlers that are listed multiple times (when 'by tags')
		if (inbound.status=="added")
			continue;
		// don't import the "ImportedTiddlers" history from the other document...
		if (inbound.title=='ImportedTiddlers')
			continue;
		// if tiddler exists and import not marked for replace or merge, stop importing
		if (theExisting && (inbound.status.substr(0,7)!="replace") && (inbound.status.substr(0,5)!="merge"))
			return i;
		// assemble tags (remote + existing + added)
		var newTags = "";
		if (config.macros.importTiddlers.importTags)
			newTags+=inbound.getTags()	// import remote tags
		if (config.macros.importTiddlers.keepTags && theExisting)
			newTags+=" "+theExisting.getTags(); // keep existing tags
		if (config.macros.importTiddlers.addTags && config.macros.importTiddlers.newTags.trim().length)
			newTags+=" "+config.macros.importTiddlers.newTags; // add new tags
		inbound.set(null,null,null,null,newTags.trim());
		// set the status to 'added' (if not already set by the 'ask the user' UI)
		inbound.status=(inbound.status=="")?'added':inbound.status;
		// do the import!
		store.suspendNotifications();
		store.saveTiddler(inbound.title, inbound.title, inbound.text, inbound.modifier, inbound.modified, inbound.tags, inbound.fields, true, inbound.created);
                store.fetchTiddler(inbound.title).created = inbound.created; // force creation date to imported value (needed for TW2.1.x and earlier)
		store.resumeNotifications();
		}
	return(-1);	// signals that we really finished the entire list
}
//}}}

//{{{
function importStopped()
{
	var theList     = document.getElementById('importList');
	var theNewTitle = document.getElementById('importNewTitle');
	if (!theList) return;
	if (config.macros.importTiddlers.index==-1)
		importReport();		// import finished... generate the report
	else
		{
		// import collision... show the collision panel and set the title edit field
		document.getElementById('importCollisionPanel').style.display='block';
		theNewTitle.value=theList.options[config.macros.importTiddlers.index].value;
		}
}
//}}}

// // ''REPORT GENERATOR''
//{{{
function importReport(quiet)
{
	if (!config.macros.importTiddlers.inbound) return;
	// DEBUG alert('importReport: start');

	// if import was not completed, the collision panel will still be open... close it now.
	var panel=document.getElementById('importCollisionPanel'); if (panel) panel.style.display='none';

	// get the alphasorted list of tiddlers
	var tiddlers = config.macros.importTiddlers.inbound;
	// gather the statistics
	var count=0;
	for (var t=0; t<tiddlers.length; t++)
		if (tiddlers[t].status && tiddlers[t].status.trim().length && tiddlers[t].status.substr(0,7)!="skipped") count++;

	// generate a report
	if (count && config.options.chkImportReport) {
		// get/create the report tiddler
		var theReport = store.getTiddler('ImportedTiddlers');
		if (!theReport) { theReport= new Tiddler(); theReport.title = 'ImportedTiddlers'; theReport.text  = ""; }
		// format the report content
		var now = new Date();
		var newText = "On "+now.toLocaleString()+", "+config.options.txtUserName
		newText +=" imported "+count+" tiddler"+(count==1?"":"s")+" from\n[["+config.macros.importTiddlers.src+"|"+config.macros.importTiddlers.src+"]]:\n";
		if (config.macros.importTiddlers.addTags && config.macros.importTiddlers.newTags.trim().length)
			newText += "imported tiddlers were tagged with: \""+config.macros.importTiddlers.newTags+"\"\n";
		newText += "<<<\n";
		for (var t=0; t<tiddlers.length; t++) if (tiddlers[t].status) newText += "#[["+tiddlers[t].title+"]] - "+tiddlers[t].status+"\n";
		newText += "<<<\n";
		// update the ImportedTiddlers content and show the tiddler
		theReport.text	 = newText+((theReport.text!="")?'\n----\n':"")+theReport.text;
		theReport.modifier = config.options.txtUserName;
		theReport.modified = new Date();
                store.saveTiddler(theReport.title, theReport.title, theReport.text, theReport.modifier, theReport.modified, theReport.tags, theReport.fields);
		if (!quiet) { story.displayTiddler(null,theReport.title,1,null,null,false); story.refreshTiddler(theReport.title,1,true); }
	}

	// reset status flags
	for (var t=0; t<config.macros.importTiddlers.inbound.length; t++) config.macros.importTiddlers.inbound[t].status="";

	// mark document as dirty and let display update as needed
	if (count) { store.setDirty(true); store.notifyAll(); }

	// always show final message when tiddlers were actually loaded
	if (count) displayMessage(config.macros.importTiddlers.importedMsg.format([count,tiddlers.length,config.macros.importTiddlers.src.replace(/%20/g," ")]));
}
//}}}

// // File and XMLHttpRequest I/O
//{{{
config.macros.importTiddlers.fileExists=function(theFile) {
	var found=false;
	// DEBUG: alert('testing fileExists('+theFile+')...');
	if(window.Components) {
		try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); }
		catch(e) { return false; } // security access denied
		var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
		try { file.initWithPath(theFile); }
		catch(e) { return false; } // invalid directory
		found = file.exists();
	}
	else { // use ActiveX FSO object for MSIE 
		var fso = new ActiveXObject("Scripting.FileSystemObject");
		found = fso.FileExists(theFile)
	}
	// DEBUG: alert(theFile+" "+(found?"exists":"not found"));
	return found;
}

config.macros.importTiddlers.loadRemoteFile = function(src,callback,quiet) {
	if (src==undefined || !src.length) return null; // filename is required
	if (!quiet) clearMessage();
	if (!quiet) displayMessage(this.openMsg.format([src.replace(/%20/g," ")]));
	if (src.substr(0,5)!="http:" && src.substr(0,5)!="file:") { // if src is relative (i.e., not a URL)
		if (!this.fileExists(src)) { // if file cannot be found, might be relative path.. try fixup
			var pathPrefix=document.location.href;  // get current document path and trim off filename
			var slashpos=pathPrefix.lastIndexOf("/"); if (slashpos==-1) slashpos=pathPrefix.lastIndexOf("\\"); 
			if (slashpos!=-1 && slashpos!=pathPrefix.length-1) pathPrefix=pathPrefix.substr(0,slashpos+1);
			src=pathPrefix+src;
			if (pathPrefix.substr(0,5)!="http:") src=getLocalPath(src);
		}
	}
	if (src.substr(0,5)!="http:" && src.substr(0,5)!="file:") { // if not a URL, read from local filesystem
		var txt=loadFile(src);
		if ((txt==null)||(txt==false)) // file didn't load
			{ if (!quiet) displayMessage(config.macros.importTiddlers.openErrMsg.format([src.replace(/%20/g," "),"(filesystem error)"])); }
		else {
			if (!quiet) displayMessage(config.macros.importTiddlers.readMsg.format([txt.length,src.replace(/%20/g," ")]));
			if (callback) callback(true,quiet,convertUTF8ToUnicode(txt),src,null);
		}
	}
	else {
		var xhr=loadRemoteFile(src,callback,quiet);
		if (!quiet && !xhr) displayMessage(config.macros.importTiddlers.openErrMsg.format([src,"(XMLHTTPRequest error)"]));
	}
}

config.macros.importTiddlers.readTiddlersFromHTML=function(html)
{
	var remoteStore=new TiddlyWiki();
	remoteStore.importTiddlyWiki(html);
	return remoteStore.getTiddlers("title");	
}
//}}}
Knowledge mapping is a multifaceted approach for creating structure out of an overabundance of potentially useful information. It is a method for coordinating, simplifying, highlighting and navigating in complex knowledge contexts ```[[Hellstom, T. Husted, K. 200?, Mapping Knowledge and Intellectual Capital in Academic Environments: A Focus Group Study/^ |http://frontpage.cbs.dk/ckg/upload/tomas.doc ```Further more“…mapping work is an especially strong vehicle for moving between theory and practice – a frequently desired but rarely achieved goal.”```[[Hellstom, & Husted cite Huff, A. and Jenkins, M. (Eds.) 2002. Mapping Strategic Knowledge```


<<foldHeadings closed>>
Content
!Introduction
The labour market is generally understood to be the "place" where, for an agreed price, employers offer jobs and workers offer their skills. Most common applications of the labour market focus on formal employment and ignore the informal markets, self-emplyment or social development activities. In the South African context we need to include all of these. 
The labour market therefore repesents the place where people's skills can earn themselves (and therefore , but extension their dependants) a livelihood or improve the lot of people in their community.

Skills development, in this discourse is therefore the process that focuses on identifying and satisfying particular needs in terms of products or services.

[[Standard Classification of Occupations]]
[[Scarce Skills]]
[[South African National Master Scarce Skills List/^|http://www.labour.gov.za/useful_docs/doc_display.jsp?id=11695]]
[[Learning Quotes]]
>The established systems of education, whatever their matter may be, are fundamentally vicious in their manner. They encourage submissive receptivity instead of independent activity
Arnold, Guy 1992. Brainwash. London: Virgin p 124: Cites Spencer, Herbert in Hoggart, Richard 1957. The uses of literacy. sl: Penguin
----

>I realised that closer links had to be forged between the machine and the artistic individual. So I established workshops which trained people in two ways: as artists and as craftsmen. It’s often wrongly thought that everything was based on handicraft. In fact it was a place of preparation. You can’t understand the machine until you’ve understood the tools of your craft. 
Walter Gropius: Film: History of the Bauhaus movement
----

>The teaching of craft is meant to prepare for designing (products) for mass production. Starting with the simplest tools and least complicated jobs, he (the Bauhaus apprentice) gradually acquires the ability to master more intricate problems and to work with machines, while at the same time he keeps in touch with the entire process of production from start to finish, whereas the factory worker never gets beyond the knowledge of one phase of the process. 
Walter Gropius Theo van Doesburg cited in
Frampton Kenneth, 1992 Modern Architecture - a Critical History Thames and Hudson: London 3rd Edition, page 124
-----------------
>Knowing it ain’t the same as doing it
[[Old Hoosier saying/>|http://www.fastcompany.com/magazine/35/smith.html]]
-----------------
>The great aim of education is not knowledge but action. 
[[Herbert Spencer/>|http://en.wikipedia.org/wiki/Herbert_Spencer]]
/***
|''Name:''|LegacyStrikeThroughPlugin|
|''Description:''|Support for legacy (pre 2.1) strike through formatting|
|''Version:''|1.0.2|
|''Date:''|Jul 21, 2006|
|''Source:''|http://www.tiddlywiki.com/#LegacyStrikeThroughPlugin|
|''Author:''|MartinBudden (mjbudden (at) gmail (dot) com)|
|''License:''|[[BSD open source license]]|
|''CoreVersion:''|2.1.0|
***/

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

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

} //# end of "install only once"
//}}}
*[[Skills Development Act]]
*[[South African Qualifications Authority Act]]
What determines occupational competence?
That reminded me of an article that really shaped my thinking circa 1997, one of the first things I discovered through using the internet.  I searched for Dreyfus & Dreyfus (using the primitive search tools that were available at the time) based on a passing reference an Australian made at a conference for the accounting profession locally. I think our notions of learning for skills development are so poorly understood and so hard to articulate that the concepts in this article,  form one of the cornerstones for a theory of skills development.


In the original graphical conceptualisations of the NQF there were degrees and stuff on the left hand side but over on the right there was this poorly defined terrain with labels such as 'professional qualifications'. In reality it was a desolate area with an invisible tag, "Here be dragons". The betrayal of the NQF'' many people feel is really our collective inability to deal with is actually a huge gap and a lack of intellectual capacity within the current epistemological doctrines to deal with the complexities of learning outside of a delivery system.

 
Frankly most current education is largely based on an elaborate of form of catechism - learn this stuff and ye will have faith. The rest is left up to the hidden curriculum - you learn as much from watching others - modelling -, trial and error and your own implicit theories of action as from the formal education and training systems.

Today's Sunday Times carries the results of Hanlie Griesel's / Ben Parker's survey of employers - see second attachment. There's the real failure of an education system built on the traditional knowledge-acquisition theory. It worked in the past because people were embedded in contexts which led to work and education was merely a mechanism for improving one's understanding of how this world worked. If you are deprived of context, all this knowledge remains as meaningless claptrap. 

 

Your frustration I would think arises from lack of adequate alternate theories and models to build a solid case. Actually it is not your failure but really the failure of the traditional education and other academic disciplines to adequately focus on and evolve adequate theories which describe how people learn to deal with the world - embodied knowledge.

 

I've been giving the notion of a theory of skills development some thought recently - but that is something we need to talk about.
*[[Skills Development]]
----
*[[Skills Acquisition]]
----
*[[Labour Market]]
----
*[[Communities of Practice]]
----
*[[Occupational Qualifications]]
----
*[[South African Context]]
----
*[[The challenges of Implementation]]
----



GettingStarted with [[Tiddlywiki]]
[[Maurice Merleau-Ponty/^|http://en.wikipedia.org/wiki/Maurice_Merleau-Ponty#The_primacy_of_perception]]
French philosopher who developed the concept of the body-subject as an alternative to the cartesian "cogito" (I think, therefore I am)
!Three Modes of learning

Learning is not a simple unitary process, especially when involving complex topics of extended periods of time. 

Three qualitatively different phases of the learning process are idnetified:
#Accretion - the learner acquires facts and information, accumulating more structures onto the already existing knowledge structures. This mode of learning is applies only when the material being learned is part of a previously understood topic: the appropriate memory schemata already exist. 
#Re-structuring - the learner must devise new memory structures to interpret the material that is to be acquired. This is the most difficult and the most significant form of learning, for it marks the acquisition of truly new conceptualizations about a topic matter. 
#Tuning - the learner is involved in a continual process of modification: both constraining and generalizing the knowledge within the schemata of memory. This stage of learning does not increase the formal content of the learner's knowledge, but it makes the use of the knowledge more efficient. Thus, although a beginner and an expert might both perform a task with perfect accuracy, there is a marked qualitative difference between the performance of the two. 

Rumelhart & Norman [[Accretion, tuning and restructuring: three modes of learning /^ |http://www.eric.ed.gov/ERICWebPortal/contentdelivery/servlet/ERICServlet?accno=ED134902]]
[[Dave Rumelhart /^ |http://en.wikipedia.org/wiki/David_Rumelhart]]
[[Donald Norman /^ |http://en.wikipedia.org/wiki/Donald_Norman]]
!Introduction.
The National Qualifications Framework (NQF) was the mandate of the South African qualifications authority.
The objective of this were:
<<importTiddlers inline>>
|Content|
|*[[Qualifications]]
**[[Standards]]
**[[QualityAssurance]]|
!Introduction
the notion of qualifications is very broad and applies to a range of contexts. For some reason, the education mandarins believe that they have is all right to the use of the concept of qualification. But qualification is used in a range of different contexts, from accrediting particular industrial processes through to the achievement of particular sporting targets that allow one entry into specific events such as the Olympic Games.
Qualifications in this context refers to awards (certificates, registration, designations), which recognize the right of the holder to practice a trade, an occupation or a profession.

!Occupations
in occupational classification systems such as the International standard classification of occupations (ISCO) or now latterly, the organising framework of occupations (OFO) the concept of occupation includes all kinds of Labour market activity. This includes both the professions and the trades.

!Definition
An occupational qualification represents the achievement of outcomes required to practice an occupation Or to apply a meaningful skills set related to an occupation or a number of occupations.

Occupational qualifications, developed under the auspices of [[QCTO]] contain three components. These are a:
•	Knowledge component
•	Practical component
•	Work experience component

see [[Mexico/^|http://www.ilo.org/public/english/employment/skills/hrdr/topic_n/t18_mex.htm]]
<div class='header'>
<div class='titleLine'>
<div class='siteTitle' refresh='content' tiddler='SiteTitle'></div>
<div class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></div>
</div>
<div class='headerLine'></div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
The revised implementation of the NQF is based on the following:

#3 Qualification and Quality Assurance Councils
##combine standard setting and quality assurance functions
#3 Qualification Frameworks
!Definitions

>"Skill"  in this context is defined as the ability to perform competently the roles and tasks associated with an occupation.
In other words skill here means the occupation, ie //We have a lack of engineering skills in the country// means that we have a lack of engineers.

!Scarce Skills
''SCARCE SKILLS'' refer to those occupations in which there is a scarcity of qualified and experienced people, currently or anticipated in the future, either 
(a) because such skilled people are not available or 
(b) they are available but do not meet employment criteria.  
This scarcity can arise from one or a combination of the following, grouped as relative or absolute: 

*Absolute scarcity: suitably skilled people are not available, for example:

**A new or emerging occupation, i.e. there are few, if any, people in the country with the requisite skills (qualification and experience) and education and training providers have yet to develop learning programmes to meet the skills requirements.
**Firms, sectors and even the country are unable to implement planned growth strategies and experiencing productivity, service delivery and quality problems directly attributable to a lack of skilled people.
**Replacement demand would reflect an absolute scarcity where there are no people enrolled or engaged in the process of acquiring the skills that need to be replaced.

*Relative scarcity: suitably skilled people available but do not meet other employment criteria, for example:

**Geographical location, i.e. people are unwilling to work outside of urban areas.
*Equity considerations, i.e. there are few if any candidates with the requisite skills (qualifications and experience) from specific groups available to meet the skills requirements of firms and enterprises.
**Replacement demand would reflect a relative scarcity if there are people in education and training (formal and work-place) who are in the process of acquiring the necessary skills (qualification and experience) but where the lead time will mean that they are not available in the short term to meet replacement demand.

!Critical Skills
''CRITICAL SKILLS'' refers to specific key or generic and “top up” skills within an occupation.  In the South African context there are two groups of critical skills:

**Key or generic skills, such as the critical cross-field outcomes in SAQA-NQF terminology. These would include cognitive skills (problem solving, learning to learn), language and literacy skills, mathematical skills, ICT skills and working in teams.
**Particular occupationally specific “top-up” skills required for performance within that occupation to fill a “skills gap” that might have arisen as a result of changing technology or new forms of work organisation.

Both scarce and critical skills have been identified at the occupational level, with scarce skills being considered against the occupation itself and critical skills being reflected as specific skills within the occupation.

<<foldHeadings closed>>
!The Manager’s Core Work in the New Economy, Peter Henschel

..The manager's core work in this new economy is to create and support a work environment that nurtures continuous learning.
..
    In the past we often substituted training for real learning. In fact, the behavior one sees in the field would suggest in many cases that managers often think training leads to learning or, worse, that training is learning. But classroom models of training that happen episodically are not how people really learn. They are only part of the picture. Asking for more training is definitely not enough - it isn't even close - and often obscures what's really needed: lifelong, continuous learning in work and at work.

!From Apprenticeship to "Communities of Practice"

.. We discovered that apprenticeship is actually quite widespread, is usually deemed to be successful, and — very important — usually works because it requires ''becoming a member of a cohesive, informal community that goes beyond one master or mentor''. Wanting to become "one of them," to be accepted into a community, is a powerful dynamic of apprenticeship. Further, we came to understand that newcomers learn best as they become members of these communities. Moreover, they ''continue to learn'' as they, in turn, ''teach, mentor, and participate "in the practice."'' Continuing to learn, we discovered, is an equally powerful prerequisite for continuing membership in those communities.

Out of that early work, IRL researchers developed a term, "Communities of Practice," that has now gained recognition and encouraging acceptance in the business literature. ...

"Communities of Practice" are simply those highly informal groups of people that develop a shared way of working together to accomplish some activity. Usually, such communities include people with varying roles and experience. Every organization has them. Though they don't appear on "orgcharts," they are the largely invisible network of people who get the real work done. They are also the place where people tend to learn the essentials of their job — just as apprentices do — by participating in them. One might even say that a community of practice is like a super apprenticeship system that continually feeds even the most knowledgeable members the new ideas and feedback critical to continuous lifelong learning.

Much of what individuals know depends on their local environment. What an organization knows, however, is what's embedded in and among its communities of practice. Recently much has been made in business literature of statements like "if company X only knew what it knows," referring to the difficulty of capturing what many individuals know. That does not surprise us, since we have come to understand that much of what any of us know is "tacit knowledge" embedded in the practices we share with others. So, if we want to know what our organization knows, we should start by identifying our communities of practice and see them as the well spring of what the organization really knows.

    That is one reason why preserving the integrity of these informal communities is so important. The worst effects of downsizing and reengineering come from their complete disregard for communities of practice. The fact that training deals only with explicit knowledge while the value is often in tacit knowledge is another reason training can get at only part of what is understood to be effective.

There is ''another dimension to the community idea'' that is seldom discussed but critically important: ''Learning is powerfully linked'' not just to motivation but also ''identity''. What we choose to learn is often a function of who we are and who we wish to become. Not wanting to be like "them" can be enough to keep someone from learning. That fact seems to hold whether we are talking about company apprentices, high school gangs, or seasoned software engineers.

    If those social dimensions of learning are as powerful and enduring as they appear to be — and our work strongly supports such a contention — then this is important news for organizations. Most organizations implicitly know they need to be continuously innovative through continuous learning. However, again, training alone does not even come close to addressing the challenge.

!Seven Principles of Learning
  From our extensive fieldwork in myriad workplaces and educational settings, IRL has developed a set of Principles of Learning that we believe are important guideposts for organizations. These are not "Tablets from Moses;" rather, they are evolving as a "work in progress." However, it is already clear that they have broad application in countless settings. Think of them in relation to your own experience.

!!1. Learning is fundamentally social.
While Jim Botkin speaks in this book of learning as the process of acquiring knowledge, it actually encompasses a lot more. Successful learning is often socially constructed and also requires even slight changes in one’s identity, which makes the process both challenging and powerful. 

!!2. Knowledge is integrated in the life of communities.
When we develop and share values, perspectives, and ways of doing things, we create a community of practice. 

!!3. Learning is an act of participation.
The motivation to learn is the desire to participate in a community of practice. 

!!4. Knowing depends on engagement in practice.
We often glean knowledge from observations of, and participation in, many different situations and activities. The depth of our knowing depends in turn on the depth of our engagement. 

!!5. Engagement is inseparable from empowerment
We perceive our identities in terms of our ability to contribute and to affect the life of communities in which we are or want to be a part. 

!!6. "Failure" to learn is often the result of exclusion from participation.
Learning requires access and the opportunity to contribute. 

!!7. We are all natural lifelong learners.
All of us, no exceptions. Learning is a natural part of being human. We all learn what enables us to participate in the communities of practice of which we wish to be a part. 

As an IRL trustee, Paul Allaire, Chairman and CEO of Xerox, once said "To do things differently, we need to see things differently." As managers think about what to do differently, it helps to see through the new lenses the above principles provide. The challenge for each of us is to put on the new eyeglasses and look through them at the realities we face every day.

!Communities of Practice in Practice
    Some examples in practice that IRL team members have observed:

*These principles help us understand why kids on a street corner can learn to run all aspects of an illegal drug business but, somehow, cannot learn math in school. Their identity is wrapped up in the first venture, their engagement absent from the other. 

*The seven principles also help us understand why co-location alone does not necessarily help a software team "cohere" and learn together. If its members have not developed a community out of which a new practice develops, no amount of physical or organizational rearranging will make a difference. 

*When a new technology requires both sales and service teams to learn "the new stuff" well and faster, it may not be enough to gain the knowledge; it may also require a change in professional identity in order to succeed with customers or other technicians. 

 *When a well-designed business process or a new system fails in its implementation, it may be because developing new practices, based upon a whole community's understanding of the old ones, was not part of the strategy. 

    All these examples make clear that training is not equal to learning. They also show that learning does not always go in stages, especially when we are exposed to rich environments in real-life situations. Also, simply specifying skills or competencies does not usually provide what people really need to know — and will learn — even if they are placed in the right environment. The principles also help us understand that much of what we often see as "low-level" work is not as routine or as low-level as it may seem. There are essential connections being built, strengthened, and honed among different members of the community.

!Leveraging Communities of Practice: The Manager's New Core Work
    What does all this mean for those who are in positions of coaching, shaping, and leading in the world of the new economy we are now in?• The new work of managers is all about creating the enabling conditions for continuous learning, which is best done by supporting the informal communities in which it most effectively happens. That requires less control, more listening, more facilitation, and an enormous degree of support for policies and practices that, without the benefit of the lenses of the seven principles, may not appear to be efficient.

To accomplish the above, managers will also need to shift their focus, perhaps changing their own identities as well. The shift needs to be

>From teaching and training to coaching, mentoring and ultimately continuous learning

It all boils down to some eternal truths, which many of our corporations need to remember or learn for the first time:

* From "delivery" to natural "spread" of ideas and innovations 
* From an infatuation with building innovative pilot projects — which seldom cross community boundaries — to building on existing pockets of innovation with explicit support to expand what's already working 
* From selling only product to learning from customers 
* Listening, observing, and understanding existing practices and informal communities are a prerequisite to effective management, change, and management of change. 
* It is necessary to think of the whole environment in which learning needs to take place — the cultural, facilities, professional and intellectual aspects — as one designs and enables continuous learning. 
* Facilitating greater, richer opportunities for those with whom one works is necessary to learn through the communities that already exist. Learning across communities and from one another requires special support and deep understanding. 
* Supporting every opportunity for learning and honoring the power of informal learning is absolutely essential. 
* Take risks and learn from them. Remember the eternal truth of healthy organizations: "It is far better to seek forgiveness than to ask for permission." These principles and their implications are essential foundations for helping all of us cope, survive, grow, and thrive. To understand more deeply the issues addressed in this book, start by identifying and supporting the communities of practice that exist in your own organization...


>Exerpted from "SMART BUSINESS", by Dr. Jim Botkin, published in June, 1999 by The Free Press, an imprint of Simon & Schuster.     [[Full article /^|http://www.newmango.com/01iftf/henschel.html]]

  
<<foldHeadings closed>>
Towards a skills development knowledge framework
Skills Development Knowledge Map
[[Skills - Introduction]]
[[Skills - Definitions]]
[[Skills - Taxonomy]]
Skill
The ability to do something well; expertise or dexterity.
Origin -
Old English scele (knowledge) or from old Norse skil (discernment, knowledge)
skill

1: an ability that has been acquired by training [syn: accomplishment, acquirement, acquisition, attainment]
2: ability to produce solutions in some problem domain; "the skill of a well-trained boxer"; "the sweet science of pugilism" [syn: science]
Source: Webster's Revised Unabridged Dictionary (1913)

Historical definitions
Skill \Skill\, n. [Icel. skil a distinction, discernment; akin
to skilja to separate, divide, distinguish, Sw. skilja,.
skille to separate, skiel reason, right, justice, Sw. sk["a]l
reason, Lith. skelli to cleave. Cf. Shell, Shoal, a
multitude.]
1. Discrimination; judgement; propriety; reason; cause. [Obs.]
Shak. As it was skill and right. -Chaucer.

For great skill is, he prove that he wrought.
[For with good reason he should test what he created.]
-Chaucer.

2. Knowledge; understanding. [Obsoles.]

That by his fellowship he colour might Both his
estate and love from skill of any wight. -Spenser.

Nor want we skill or art. -Milton.

3. The familiar knowledge of any art or science, united with readiness and dexterity in execution or performance, or in the application of the art or science to practical purposes; power to discern and execute; ability to perceive and perform; expertness; aptitude; as, the skill of a mathematician, physician, surgeon, mechanic, etc.

Phocion, . . . by his great wisdom and skill at
negotiations, diverted Alexander from the conquest
of Athens. -Swift.

Where patience her sweet skill imparts. -Keble.

4. Display of art; exercise of ability; contrivance; address.
[Obs.]

Richard . . . by a thousand princely skills,
gathering so much corn as if he meant not to return.
-Fuller.

5. Any particular art. [Obs.]

Learned in one skill, and in another kind of
learning unskillful. -Hooker.

Syn: Dexterity; adroitness; expertness; art; aptitude;
ability.

Usage: Skill, Dexterity, Adroitness. Skill is more
intelligent, denoting familiar knowledge united to
readiness of performance. _Dexterity_, when applied to
the body, is more mechanical, and refers to habitual
ease of execution. _Adroitness_ involves the same image
with dexterity, and differs from it as implying a
general facility of movement (especially in avoidance
of danger or in escaping from a difficalty). The same
distinctions apply to the figurative sense of the
words. A man is skilful in any employment when he
understands both its theory and its practice. He is
dexterous when he manoeuvres with great lightness. He
is adroit in the use odd quick, sudden, and
well-directed movements of the body or the mind, so as
to effect the object he has in view.

Skill \Skill\, v. i.
1. To be knowing; to have understanding; to be dexterous in
performance. [Obs.]

I can not skill of these thy ways. -Herbert.

2. To make a difference; to signify; to matter; -used
impersonally. -Spenser.

What skills it, if a bag of stones or gold
About thy neck do drown thee? -Herbert.
The concept of skills is an interesting, but slippery one. Since the latter part of the 20th century the concept has undergone a shift and change - almost a rehabilitation.

When I first started using the term in discussions around the development of a training plan for the plastics industry skills was a low caste word. It was a word which implied low-level, repetitive psycho-motor activities of a routine and predictable nature, such as riding bicycles, sweeping floors or baking cakes in a home kitchen. In education and training discourses skills had and to some extent still have a very low status in relation to more 'vertical' pursuits such as knowledge production (the Bernstein hypothesis or the Gibbons Mode 1 hypothesis). 

In more general discourses skills were seen as highly desirable and very necessary but somehow a little distasteful, something your neighbour would want to do but not you.

Yet, in other discourses skills have a a very different, almost aspirational flavour. At a premium at that time in South Africa's history were negotiating skills. 
[[The Three Logics of Skills in French Literature]]
[[Five Stage Model]]
*[[Skills Acquisition Models]]
**[[Five Stage Model]]
**[[Modes of Learning]]
**[[Cognitive Apprenticeship]]
**[[Epistemology of Practice]]
**[[Seven Principles of Learning]]

**[[Learning]]
**[[Training]]
**[[Education]]
!Welcome

Welcome to this [[Knowledge Map]] for Skills Development.


!Purpose of this Knowledge Map

- Contribute to building a theoretical framework for skills development

!Introduction to this knowledge map

There is no recognised discipline called skills development.
[[Skills]] and skills development cut right across traditional academic disciplines and knowledge domains.

Skills development links to some of the following knowledge domains, academic schools and business activities,
>Labour market economics, human resources development, human capital, management, education, training, sociology...
What has become clear to me as I have worked in this field is that there are, broadly speaking, three [[discourses]] that relate to skills development.
!The 3 skills development discourses
The three skills development discourses are:
!!1. The education and training discourse. 
Broadly speaking , this conversation focuses on formal and non-formal learning processes. I characterise it as the [[skills acquisition]] discourse.
!!2. The [[labour market]] discourse. 
This conversation views skills as a metaphor for people who have the relevant skills. This discourse uses the vocabulary of work titles or designations to represent skills, ie occupations, trades, professions, job titles. In it's narrowest sense the labour market is where skills are exchanged for salaries or wages. But in a broader sense it needs to encompass a range of other working contexts. This discourse expands to encompass concepts such as talent management, human capital, performance management, organisational development.
!!3.The discourse of praxis
It is the most enigmatic. It it the conversations and the practices of people at work, characterised by Lave and Wenger and Brown and Duigard as [[Communities of Practice]]. This discourse is partly tacit, partly jargon but mostly action. It is the exchange between people who are active in a particular sphere. It is based on co-participation, co-construction and even competition.It shapes not only the cultural dimensions, including values and ethical behaviour, but also the personal dimension eg, identity and self-actualisation.
!Background - the need for such an approach
In implementing a skills development system many lessons have been learned. While implementation issues can be addressed there is  a clear need to think more carefully about the underlying principles, purposes and outcomes of such processes.

This site is designed unravel some of the concepts and create a map that will allow discussion, research and decision making based on a common understanding.

I have been unable to find an institutional home (ie university department) for skills development.
So thought, I'll build my own, an on-line tidddlywiki university ;-)
! Skills development - a definition
Skills development is the process of identifying and responding to the challenges of particular contexts or environments and such challenges may be at the level of individuals, groups, organisations or nations. 
!Plans

I'm planning to start this process using personal wiki to begin with. At this stage I'm not sure or brave enough to take this out into the open yet. But I will develop and use this as a resource for helping others, developing a community of skills development practitioners and when it gets to a self-generating size I will convert this site into a fully fledged wiki available to all on the www.

!How to use this site
The engine for this wiki is [[Tiddlywiki]], developed by Jeremy Ruston. Although this is a single web page, the content is broken up into smaller chunks of information, called tiddlers.   You can open a tiddler ("page") by:
*Starting with the main menu on the right
*Clicking on links in a page - links are in Bold

Each new page jumps to the top of your screen and pushes other pages further down. If you click on a link to an tiddler that is already open the programme scrolls down to where that tiddler is in the sequence. If you start to get confused, use the ''close'' or ''close others'' in the tool bar at the top of each tiddler.

External links are in italics and I have also added a glyph /^ to graphically remind you that you will then be opened a web page elsewhere.

I have also used an option to fold up longer pages: Just click on //more// to open and @@[X]@@ to close again.
!!!Footnotes

<<foldHeadings closed>>
The Skills Development Act, 1998, introduced to a revised system for the training of people for the world of work.

This act is replaced the Manpower Training Act of 1981 and introduced a range of new concepts. The National Training Board, the Industrial Training Boards and apprenticeships were no longer considered to be the primary vehicle for the achievement of occupational competence.

This act is introduced
#the national skills authority
#sector education and training authorities
#Learnerships & skills programmes
#employment and skills development services
#a skills research agency

The Skills Development Act used some key provisions of the [[South African Qualifications Authority Act]], 1995  and related regualtions.
!Contents

*[[Skills Development]]
*[[Skills acquisition]]
*[[Labour Market Economics]]
*[[Occupational Qualifications]]
*[[South African Context]]
*[[Implementation]]
Content
Skills acquisition
!Introduction
If the concept of skills development is raised in a discussion the initial focus inevitably fall on the development of an individuals competencies.
But if one examines the discourse on skills the word skills and skills development have larger and broader senses, namely the process of developing "cohorts" of people who are able to respond to labour market needs.
Skills development is therefore a system which requires action, activities and interventions at various levels with a country's institutions.
In proposing a quality management system for the national skills development strategy II (NSDS 2005- 2010) I adapted a conceptual framework I had developed several years earlier for the design, development, implementation and evaluation of [[Learnerships]]. This model provides us a way of conceptualising skills development system.
[[Human Capital Theory]]
[[South African Context]]
** [[Legislation]]
**[[Systems]]

!Introduction
The context of this discussion has as its starting point South Africa, the [[Skills Development Act]], the [[National Qualifications Framework]], learnerships, scarce skills etc.

The impetus is the recently concluded review of the [[National Qualifications Framework]]. Part of the purpose of this site is to introduce some of the revised concepts, structures, systems etc.

The review began with the [[Study Team Report]] in 2002 and was followed by proposals from the Ministers of Education and Labour in 2003, the [[An Interdependent NATIONAL QUALIFICATIONS FRAMEWORK System]].  

The review process was finalised in the form of a [[Joint Policy Statement]] by the Ministers of Education and Training.

This is being followed up by proposals from the Department of Labour for an [[Occupational Learning System]] and for the establishment of a Qualifications and Quality Assurance Council for Trades and Occupations [[QCTO]] - See [[Revised NQF implementation for Trades Occupations and Professions]]

!Wider Debate
But the debate and the need for this exercise goes much further - skills development challenges are a world-wide issue, so the idea is to reach out and engage with a much wider group of people.
<<foldHeadings closed>>
/***
!Zeldman
http://tiddlystyles.com/#theme:Zeldman

!Colors used by this Theme
*@@background(#f79b60):#f79b60@@
*@@background(#c51):#c51@@
*@@background(#d16400):#d16400@@
*@@background(#be540b):#be540b@@
*@@background(#b44):#b44@@
*@@background(#930):#930@@
*@@background(#922):#922@@
*@@background(#f5d7b4):#f5d7b4@@
*@@background(#cf936c):#cf936c@@
*@@background(#c5886b):#c5886b@@
*@@background(#b8764c):#b8764c@@
*@@background(#867663):#867663@@ Used for MSG Area, Tiddler Title, text, and SubTitle

*@@background(#fff):#fff@@
*@@background(#ccc):#ccc@@
*@@background(#aaa):#aaa@@
*@@background(#888):#888@@
*@@background(#666):#666@@
*@@background(#333):#333@@
*@@background(#000):#000@@

!Popup styles /% =========================================================== %/
***/
/*{{{*/
#popup {
 border: 1px solid #aaa;
 padding: 0;
 background: #fff;
 color: #f79b60;
}

#popup a{
 color: #f79b60;
 font-weight: normal;
}

#popup a:hover {
 background: #f5d7b4;
 color: #930;
}

#popup hr {border-top: solid 1px #f5d7b48;}
#popup li.disabled{color: #cf936c;}

#popup .currentlySelected,
#popup .currentlySelected:hover{
 background: #f5d7b4;
}
/*}}}*/
/***
!Generic styles /% ===================================================== %/
***/
/*{{{*/
h1,h2,h3,h4,h5,h6 {
 background-color: transparent;
 margin: .25em 0;
}

h1 {
border-bottom: 2px dotted #ccc;
}

h2 {margin: .5em 0;
font-style:italic;
border-bottom: 1px dotted #ccc;
}

a{
 color: #f79b60;
 color: #c51;
}

a.button:active,
a:hover{
 color: #f79b60;
 background: transparent;
}

a.button,
a.button:active{
 border: 0;
}
/*}}}*/
/***
!Header styles /% ================================================================== %/
***/
/*{{{*/
.header{
 position: static;
}

.titleLine {
 height:6em;
 background: #c51;
 border-bottom: 8px solid #b8764c;
 color: #fff;
 left:0;
}

.titleLine a,
.titleLine a:link,
.titleLine a:hover{
 color: #fff;
}

.titleLine a:hover{
border-bottom: 2px dotted;
}

.headerLine{
 padding: 0;
 border-top: 5px solid #cf936c;
 border-bottom: 3px solid #f5d7b4;
}

.siteTitle {
 text-align: right;
 font-size: 3em;
 font-weight: bold;
 padding-right: .5em;
padding-top: .25em;
}

.siteSubtitle {
 text-align: right;
 font-size: 1.5em;
 font-family: georgia,times;
 padding-right: 1.5em;
}
/*}}}*/
/***
!Main menu styles /% ================================================================== %/
***/
/*{{{*/
#mainMenu {
 width: 12em;
 margin-top: .5em;
 left: .5em;
 padding: 0;
 border: 1px solid #f5d7b4;
 color: #666
}

#mainMenu ul,
#mainMenu li{
 list-style: none;
 margin: 0;
 padding: 0;
}

#mainMenu li strong a {
 color: #fff;
 background: #d16400;
}

#mainMenu li strong a:hover,#mainMenu li strong .button:hover{
 color: #f5d7b4;
 background: #930;
 text-decoration: none;
}

/* The bold has to be a block to contain the links <a>
because inline elements can't contain blocks */
#mainMenu li strong,
#mainMenu li span{
 display: block;
}

#mainMenu li a,
#mainMenu li a:link{
 display: block; 
width: 100%;
 text-decoration: none;
 padding-right: 5px;
 margin-right: 0;
 color: #f79b60;
 border: 0;
}

#mainMenu li a:hover, #mainMenu li .button:hover{
 background-color: #f5d7b4;
 text-decoration: none;
}

#mainMenu a:link{
 text-decoration: none;
 color: #f79b60;
 margin-right: 5px;
}

#mainMenu a:hover,#mainMenu .button:hover{
 text-decoration: underline;
 background: transparent;
 color: #930;
}
/*}}}*/

/***
!Message area styles /% ================================================================== %/
***/
/*{{{*/
#messageArea {
 background-color: #f5d7b4;
 color: #867663;
 padding: 0.5em;
 border: 1px solid #ccc;
}

#messageArea a:link, #messageArea a:visited {
 color: #c51;
}

#messageArea a:hover {
 color: #f79b60;
}

#messageArea a:active {
 color: #fff;
}
/*}}}*/
/***
!Sidebar styles /% ================================================================== %/
***/
/*{{{*/
#sidebar {
 width: 14.5em;
 border-bottom:1px solid #aaa; 
 border-left: 1px solid #aaa;
}

#sidebarOptions{
 background-color: #fff;
}

#sidebarOptions a{
 color: #f79b60;
 background: transparent;
 text-decoration: none;
 border: 0;
}

#sidebarOptions a:hover{
 color: #c51;
 background: #fff;
 text-decoration: underline;
}

#sidebarOptions .sliderPanel{
 background: #f5d7b4;
 margin: 0;
}

#sidebarOptions .sliderPanel a{
 color: #922;
 font-weight:normal;
}

#sidebarOptions .sliderPanel a:hover{
 color: #b44;
 background: transparent;
}

#sidebarTabs {
 background-color: #fff;
}

#sidebarTabs a {
 background: transparent;
}

#sidebarTabs .tabContents a:hover {
 color: #922;
 text-decoration: underline;
 background-color: transparent;
}

.tab {
 margin: 0px 1px; 
 border:1px solid #aaa;
 border-bottom:none;
 color: #922;
}

.tab:hover {
 border-color: black;
 text-decoration: none;
}

#sidebarTabs .tabSelected {
 background: #f5d7b4;
 padding: 2px 4px;
 color: #922;
}

#sidebarTabs .tabUnselected {
 background: #c51;
 padding: 2px 4px 0px 4px;
 color: #fff;
}

#sidebarTabs .tabContents {
 background-color: #f5d7b4;
}

#sidebarTabs .tabContents a{
 color: #922;
}

#sidebarTabs .tabContents a:hover{
 color: #b44;
}

#sidebarTabs .txtMoreTab .tabSelected,
#sidebarTabs .txtMoreTab .tabSelected:hover{
 background: #cf936c ;
 color: #000 ;
 text-decoration: none;
}

#sidebarTabs .txtMoreTab .tabUnselected,
#sidebarTabs .txtMoreTab .tabUnselected:hover{
 background: #f5d7b4 ;
 color: #000 ;
 text-decoration: none;
}

#sidebarTabs .txtMoreTab .tabContents {
 color: #fff;
 background: #cf936c;
 border-bottom: solid #aaa 1px;
}
/*}}}*/
/***
!Tiddler display styles /% ================================================================== %/
***/
/*{{{*/
#displayArea {
 margin: 1em 15em 0em 15em;
}

.tiddler{
 padding: 0;
 border: 1px solid #ccc;
 padding: 5px;
}

.title {
 font-size: 1.5em;
 color: #867663;
 font-weight: bold;
}

.toolbar {
 font-size: .9em;
}

.toolbar a.button{
 color: #f79b60;
 border: 1px solid #fff;
}

.tiddler .toolbar a.button:hover,
.tiddler .toolbar a.button:active {
 color: #930;
 background: #f5d7b4;
 border: 1px solid #f79b60;
}

.toolbar a.button:active {
 color: #666;
}

.body {
 border-top:1px solid #ccc;
 padding-top: 0.5em;
 margin-top:0.3em;
}
/*}}}*/
/***
''Viewer styles'' /% --------------------------------------------------------------------------------------------- %/
***/
/*{{{*/
.tiddler a.button {
 color: #f79b60;
}

.tiddler a.button:hover {
 color: #be540b;
 background: transparent;
}

.subtitle,
.viewer {
 color: #867663;
}

.viewer .button{
 background: transparent;
 color: #888;
 border: 1px solid transparent;
}


.viewer a:link, .body a:visited{
 color: #be540b;
}

.viewer a:hover {
 background-color: transparent;
 text-decoration: underline;
}

.viewer blockquote {
 border-left: 1px solid #ccc;
}

.viewer table {
 border: 2px solid #333;
}


.viewer td, tr {
 border: 1px solid #666;
 padding: 3px;
}

.viewer hr {
 border-color: #666;
 color: #666;
}

.viewer pre {
 border: 1px solid #aaa;
 background: #f5d7b4;
 color: #333;
}

.viewer code {
 color: #922;
}

.selected .isTag .tagging,
.selected .tagged,
.isTag .tagging,
.tagged {
 float: none;
 display: inline;
 border: 0;
 background: transparent;
 color: #f79b60;
 margin: 0;
}

.tagged li, .tagging li,
.tagged ul, .tagging ul{
 display: inline;
}


.tiddler .tagging .listTitle,
.tiddler .tagged .listTitle{
 color: #ccc;
}

.tiddler .tagging a.button,
.tiddler .tagged a.button{
 margin: 0;
 padding: 0;
 color: #ccc;
}

.selected .tagging .listTitle,
.selected .tagged .listTitle,
.selected .tagging a.button,
.selected .tagged a.button{
 color: #333;
}
/*}}}*/
/***
''Editor styles'' /% --------------------------------------------------- %/
***/
/*{{{*/
.editor input,
.editor textarea {
 border: 1px solid black;
}

.editor textarea{
 font-size: .8em;
}
/*}}}*/
This shadow tiddler contains CSS definitions related to the layout of page elements. DO NOT EDIT THIS TIDDLER, instead make your changes in the StyleSheet shadow tiddler.
/*{{{*/
* html .tiddler {height:1%;}

body {font-size:.75em; font-family:verdana,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.2em;}
h2 {font-size:1em;}
h3 {font-size:.8em;}
h4 {font-size:.8em;}
h5 {font-size:.8em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

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

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
TiddlyWiki is a complete wiki in a single HTML file. It contains the entire text of the wiki, and all the JavaScript, CSS and HTML goodness to be able to display it, and let you edit it or search it. Without needing a server.

TiddlyWiki is published under an OpenSourceLicense and maintained by a busy community of independent developers. 

[[Main Tiddlywiki site/^|http://www.tiddlywiki.com]]
[[Tiddlywiki Resources/^|http://www.tiddlywiki.org/wiki/Main_Page]]
Foucault: “...systems of thoughts composed of ideas, attitudes, courses of action, beliefs and practices that systematically construct the subjects and the worlds of which they speak." 
|''Type:''|file|
|''URL:''|http://www.tiddlytools.com/|
|''Workspace:''||

This tiddler was automatically created to record the details of this server